| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
gpxe/ has a lot of binary blobs after a spotless. Start the cleanup
measures. do-spotless-gpxe for bios target might be better in another
spot.
Signed-off-by: Gene Cumm <gene.cumm@gmail.com>
|
|
|
|
|
|
|
|
| |
memdump was a com16 binary. If still useful, it should be replaced
with a com32 library using libupload, but it has largely been replaced
by sysdump anyway.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
|
|
|
|
|
|
| |
Export the firmware type as a cpp variable so we can #ifdef.
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
|
|
|
|
|
|
| |
The other cleaning targets might still have issues...
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We can exercise the memory subsystem through unit tests with a little
bit of coaxing. We need to create a number of fake data objects in order
to get it to build. This is less than ideal, but once we've got good
test coverage and confidence in our tests we can begin refactoring.
Had this unit test already been in place, commit 33c4ab1b ("mem: fix
regression in recent memscan changes") would have never been required
because buggy commit a1331f8d ("memscan: pass enum syslinux_memmap_types
around") would have broke the unit test. Ordinarily, this unit test
would have been part of the bugfix commit 33c4ab1b, but the bugfix needs
to be backported to 5.xx on its own.
test_mem_init_reserved() tests whether SMT_RESERVED regions are
incorrectly added to the memory subsystems's freelist.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Improve our faith in the validity of the Syslinux code by writing unit
tests where possible. These should be used in addition to the regression
tests - unit tests are a means of doing very fine-grained testing of
code, whereas the regression tests are end-to-end tests that exercise
abstract functionality.
Unit tests run on your development machine and above all else, their
execution time should be kept to a minimum to encourage repeated runs of
the unit testsuite.
The Syslinux header hierarchy has been reconstructed under
tests/unittest/include. This allows us to reuse header files where
appropriate by simply creating a file with the same name and including
the original, e.g.
tests/unittest/include/com32.h:
#include <../../../com32/include/com32.h>
Places where we need to override definitions (so that the tests build in
a dev environment) obviously won't include the original header file, but
such scenarios should be kept to a minimum, since you're not really
testing any Syslinux code that way.
To execute the collection of unit tests type,
make unittest
Sample output might look like,
Executing unit tests
Running library unit tests...
[+] zonelist passed
[+] movebits passed
[+] memscan passed
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A number of Syslinux releases have contained regressions when compared
with previous versions. Now that the size of the derivative grid has
exploded (PXELINUX, SYSLINUX,.... bios, efi32, efi64) we need to have
some means of ensuring we don't introduce regressions so easily.
Start building a suite of regression tests. Regression tests should test
end-to-end functionality, e.g. loading a Linux kernel. If a test fails,
that failure represents a regression in some behaviour, e.g. Syslinux
behaves differently than it previously did.
The idea is that when bugs are reported in Syslinux, we can create new
tests that reproduce the buggy behaviour. Once a fix has been committed
the new test should pass. From that point forward, the test provides a
means of ensuring we never reintroduce that bug.
The collection of tests illustrates the agreed upon behaviour of
Syslinux.
To execute the regression testsuite type,
make regression
Sample output might look like,
Executing regression tests for SYSLINUX
Running Linux kernel regression tests...
[+] empty passed
[+] kernelhello passed
Running COM32 module regression tests...
[+] chaindisk passed
Executing regression tests for PXELINUX
Running Linux kernel regression tests...
[!] empty failed
[+] kernelhello passed
[+] pxetest passed
Qemu is used to execute the regression tests in a virtual environment.
Because it takes time to load Qemu, we can forgive the regression
testsuite for not executing instantaneously. However, developers should
keep in mind the idea of "failing fast" in their regression tests to
minimize execution time - that is, if a test is going to fail, make it
fail as quickly as possible to reduce the testrun time.
It's possible to have derivative-specific tests, where the test only
runs for a specific Syslinux boot loader. For an example see pxetest in
tests/linux/Makefile.
Currently the regression testsuite requires root privileges to execute
and makes several calls to sudo(8). In future it would be nice to get
rid of this requirement.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
|
|
|
| |
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
|
|
|
|
|
|
|
| |
Avoid warnings about not being able to find any *.c32 files in
{efi32,efi64}/com32/elflink/ldlinux/ by explicitly referencing
$(LDLINUX).
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
|
|
|
|
|
| |
Paralleling sometimes fails depending on pxelinux.0
Signed-off-by: Gene Cumm <gene.cumm@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Users are reporting hitting the following error when typing 'make
installer',
make[3]: *** No rule to make target `efi32/core/codepage.o', needed by `syslinux.so'. Stop.
But there's no actual need to build any installers for EFI (none exist),
especially not since the stuff in utils/ is already built for BIOS and
doesn't need building again.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
|
|
|
|
|
|
| |
We need to install the corresonding ldlinux.* file for each of the
firmware.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Users are starting to package all Syslinux versions on one boot medium
and are running into problems because all versions of ldlinux have the
same filename, ldlinux.c32. The version of ldlinux.c32 compiled for bios
will not work with efi32 or efi64, and vice versa. What we need is a way
for the Syslinux core to know exactly which filename to load.
Use the following extensions for the corresponding platforms,
.c32 - bios
.e32 - efi32
.e64 - efi64
Now all ldlinux variants can be kept in the same directory without
causing any conflicts.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
|\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
syslinux-5.10-pre2
Conflicts:
NEWS
com32/include/netinet/in.h
com32/include/sys/cpu.h
com32/lib/Makefile
core/Makefile
core/fs/diskio.c
core/fs/pxe/pxe.h
core/init.c
core/mem/free.c
core/mem/malloc.c
mk/devel.mk
version
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
While it's nice having the shiny new lwIP stack, there is definitely
merit in being able to choose between two different network stacks. We
want to keep the legacy network stack around as it is known to handle
funky BIOS implementations and provides a good reference point when
bugs are suspected in the lwIP code.
Users now have a choice of .0 files. pxelinux.0 uses the legacy
network stack, while lpxelinux.0 uses lwIP.
Note that not every protocol is converted to using this new API. The
http, ftp and tcp code is still inherently tied to the netconn API,
and is only available with lpxelinux.0 and the lwIP stack. It's
unlikely that this code will ever be fixed up to work with the legacy
network stack.
Network stack operations are abstracted behind the net_core_*
interface, and each network stack has private data fields contained
within a struct net_private.
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Eric W. Biederman <ebiederm@xmission.com>
Cc: Gene Cumm <gene.cumm@gmail.com>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
|\ \
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
Makefile
NEWS
com32/cmenu/Makefile
com32/elflink/ldlinux/Makefile
com32/gfxboot/Makefile
com32/gpllib/Makefile
com32/include/sys/module.h
com32/lib/Makefile
com32/lib/sys/module/elf_module.c
com32/menu/Makefile
com32/rosh/Makefile
com32/samples/Makefile
core/init.c
mk/elf.mk
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
| |
| |
| |
| | |
Signed-off-by: Gene Cumm <gene.cumm@gmail.com>
|
|\ \
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
Makefile
com32/elflink/ldlinux/Makefile
com32/lib/sys/module/elf_module.c
core/cleanup.c
core/comboot.inc
core/conio.c
core/fs/fs.c
core/init.c
core/mem/free.c
core/mem/malloc.c
core/timer.inc
diag/geodsp/Makefile
extlinux/main.c
mk/embedded.mk
modules/Makefile
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
16-bit COMBOOT files are no longer supported by Syslinux in 5.00 so
delete all references and change any 32-bit COMBOOT image references
to mention ELF instead.
Some of the COMBOOT stuff is still used internally so we can't nuke
core/comboot.inc yet, but that will disappear in a future release.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This is a partial revert of commit b26d1c8642a8 ("Clean up $(GPLLIB)
leak"). While we do need to use $(C_LIBS) and respect $(NOGPL), we
should also be distributing libcom32gpl.c32. Now that we have ELF
modules, such as hdt.c32, that need to have some of their symbols
dynamically resolved at runtime we need to distribute libcom32gpl.c32.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
| |
| |
| |
| |
| |
| |
| | |
We need to install libmenu.c32 as it is required by modules like
hdt.c32.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
If no make target is specified on the command line we'll try to build
the first target we encounter in Makefile. Because we include
Makefile.private before any targets that means we'll try to build
isolinux.iso by default, which probably isn't what the user expected.
Move Makefile.private *after* our first target in Makefile so that the
user needs to explicitly build the targets in Makefile.private.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
| |
| |
| |
| |
| |
| |
| |
| | |
So that the catch-all $(MAKECMDGOALS) rule isn't used when trying to
upload a release, add 'preupload' and 'upload' to the list of make
targets that are handled by other Makefiles.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
| |
| |
| |
| |
| |
| |
| |
| | |
syslinux.mk provides variables like $(PERL) which are extremely useful
in most Makefiles, so include it regardless of whether this is the
first invocation of make or a sub-make.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
| |
| |
| |
| |
| |
| |
| | |
Update the exported variables when invoking make in the 'official'
target.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
| |
| |
| |
| |
| |
| |
| |
| | |
Instead of building all objects in 'obj' if no O= argument is
specified on the make command line, create all the firmware object
directories in the top-level of the source repository.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Each firmware generates its own version.mk, but they're all exactly
the same. Place a single version.mk in the top-level output directory
(as specified with the O= command line argument) so that this can be
included by Makefile.private.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
| |
| |
| |
| |
| |
| |
| | |
Makefile.private lives in $(topdir) and if we're in $(OBJDIR) we need
an absolute path so that it gets included.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
|\ \
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This merge also includes the Syslinux-4.06 release.
Conflicts:
Makefile
com32/hdt/Makefile
com32/modules/Makefile
com32/samples/hello.c
mtools/Makefile
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Modules were linking against com32/gpllib/libcom32gpl.c32 even when
NOGPL was set, so remove it from various modules Makefiles and use
$(C_LIBS) in mk/elf.mk which already has the conditional-magic for
$(GPLLIB).
Also, the object files in com32/gpllib/ are not distributed in the
release tarballs, which means that if a user does a 'make netinstall'
they hit the following install error,
install: cannot stat `com32/gpllib/*.c32': No such file or directory
Add a $(INSTALLABLE_MODULES) variable to separate the list of build
and install modules.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Otherwise we end up with warnings like this,
Makefile:258: warning: overriding recipe for target `efi'
Makefile:253: warning: ignoring old recipe for target `efi'
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Now that we have multiple firmware backends it no longer makes sense
to write object files to the same directory as their source. A better
solution is to write the object files to a per-firmware directory
under a top-level object directory.
The top-level object directory can be specified on the command-line
with the O= variable, e.g. make O=/tmp/obj. If no top-level object
directory is specified an 'obj' directory is created in the top-level
of the Syslinux source repository.
All the existing make targets continue to work as before, however now
they apply to all firmware backends, e.g. 'make installer' will build
the BIOS, 32-bit EFI and 64-bit EFI installers and place them under
$(OBJ)/bios, $(OBJ)/efi32 and $(OBJ)/efi64 respectively.
Note unlike every other bit of Syslinux, the gpxe objects are still
kept in the src directory, e.g. gpxe/src, since gpxe is only required
by the BIOS backend.
It is possible to specify a make target for a specific firmware or
list of firmware with the following syntax,
make [firmware[,firmware]] [target[,target]]
To clean the object directory for just the BIOS firmware type,
'make bios clean'
To build both the 32-bit and 64-bit EFI installers type,
'make efi32 efi64 installer'
Since the Syslinux make infrastructure is now more complex a new file
doc/building.txt has been created to explain how to build Syslinux.
The top-level Makefile now exports some make variables for use in
module Makefiles,
- topdir - the top-level source directory of the Syslinux
repository, e.g. /usr/src/syslinux
- objdir - the top-level object directory for the firmware
backend currently being built, e.g. /obj/syslinux/bios
- SRC - the source directory in the Syslinux repository for the
module currently being built,
e.g. /usr/src/syslinux/com32/libupload
- OBJ - the object directory for the module currently being
built, e.g. /obj/syslinux/bios/com32/libupload
Since we're rewriting the Makefile infrastructure anyway it seemed
like a good idea to add parallel support. By writing subdirectories as
prequisites for make targets the objects in those subdirectories can
be built in parallel.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
|\ \
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
Makefile
com32/elflink/ldlinux/adv.c
com32/elflink/ldlinux/kernel.c
com32/elflink/ldlinux/ldlinux.c
com32/include/bitsize/stddef.h
com32/include/bitsize/stdint.h
com32/include/stdint.h
com32/include/sys/module.h
com32/include/sys/x86_64/bitops.h
com32/include/syslinux/linux.h
com32/lib/Makefile
com32/lib/sys/ansicon_write.c
com32/lib/sys/module/elfutils.h
com32/lib/sys/vesa/efi/fill.h
com32/lib/syslinux/load_linux.c
com32/lib/syslinux/serial.c
com32/lib/syslinux/shuffle.c
core/conio.c
core/elflink/config.c
core/elflink/load_env32.c
core/graphics.c
core/include/graphics.h
core/init.c
core/pxelinux.asm
mk/elf.mk
mk/lib.mk
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Some Makefiles were still referring to libutil_com.a, even though we
stopped producing that file with commit 74518b8b691c ("elflink: Make
ELF the default object format"). Delete all references to avoid the
following install error,
install: cannot stat `libutil_com.a': No such file or directory
Remove the install target from com32/elflink as we no longer build any
of the test modules, and so don't need to install them.
Also, we need to add ldlinux.c32 to the list of modules that *must* be
installed for all targets, since it is required for Syslinux to
function correctly.
Reported-by: Dag Wieers <dag@wieers.com>
Reported-by: Michael D. Setzer II <mikes@kuentos.guam.net>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
| |
| |
| |
| | |
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
|
| |\
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
A lot of development has gone on in the 'master' branch since the last
time we merged; new features, bug fixes, etc, etc.
Conflicts:
Makefile
com32/Makefile
com32/lib/Makefile
com32/lib/syslinux/load_linux.c
com32/modules/Makefile
com32/modules/chain.c
core/bootsect.inc
core/init.inc
version
|
| | |\ |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Add a "make strip" target, to make doing the official build easier.
We want the official build to have stripped binaries for size reasons,
so do it right and make it an actual build target.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
|
| | |\ \
| | | |/
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Conflicts:
com32/Makefile
com32/modules/chain.c
Note: add ReactOS' stuff introduced in old chain.c
Signed-off-by: Michal Soltys <soltys@ziu.info>
|
| | |\ \
| | | | |
| | | | |
| | | | |
| | | | | |
Conflicts:
com32/modules/chain.c
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Patch:
- splits chain into chain and iterator parts and moves them into their
own com32/chain directory
- extensively updates iterators' code
- adjusts chain.c to use new iterators
- fixes mbr/sect/hand/file allocation
Signed-off-by: Michal Soltys <soltys@ziu.info>
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
We need the library modules to be added to MODULES.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
|
| | |_|/
| |/| |
| | | |
| | | |
| | | |
| | | | |
We need to reach ldlinux.c32 during early boot...
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Pertinent changes are sprinkled through *.mk and Makefile in the syslinux tree.
Build architecture is specified at the command line via ARCH macro. This is to enable whether
one is building for the native platform or cross-building for a different architecture. Currently,
the only supported architectures via ARCH macro are i386 and x86_64.
There are some modules (e.g. memdump) that don't build under the EFI environment. To go forward
with efi boot support, a separate EFI_BUILD=1 macro has been added and is required to be
specified while building. This is a temporary solution for the current build environment.
example build:
On a x86_64 platform, the following cross-builds syslinux for i386
To build for i386: make EFI_BUILD=1 ARCH=i386
On a x86_64 platform, the following builds syslinux for x86_64
To build natively: make EFI_BUILD=1
Changes specific to GCC and LD options:
Architecture specific flags and include/search directories are set up for GCC and LD commands.
Internally, GCC options such as stack-boundary, PIC and machine architecture are set up
based on ARCH macro. While stack-boundary=2 is fine for i386, it does not work for x86_64
and so it is left to the default value. Using -fPIE with gcc does not work with ld on x86_64,
but -fPIC works fine. Similarly, target and elf options are set up for linking
as approrpriate for architecture.
Assumption about gnu-efi install path:
Since the EFI build supports both EFI32 and EFI64, the following assumptions
are made with regard to the installed location of gnu-efi on the build platform.
1. gnu-efi-ia32: assumed installed in /usr/local
[ EFI-32 include files in /usr/local/include/efi and gnu-efi library in /usr/local/lib/ ]
2. gnu-efi-x86_64: assumed installed in /usr
[ EFI-64 include files in /usr/include/efi and gnu-efi library in /usr/lib64/ ]
Remanants of the unused old i386-only files, if any, need to be pruned.
|
|/ / /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This commit adds 32-bit support for a Unified Extensible Firmware
Interface backend.
We use a wrapper program to create an EFI exe with only the minimum
number of sections becaues the EFI loader doesn't like certain section
sections, such as .gnu.hash, which we require for resolving symbols
when ELF modules are loaded.
We're currently including a lot more symbols than are necessary in
efi/main.c so that the code compiles. Some of them are BIOS specific
but I haven't got around to fixing up the core to not reference them
directly yet.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
| |/
|/|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Move the MCONFIG files into a mk/ directory and give them more
descriptive names.
This is purely a cosmetic change to make the 'include' directives a
bit more coherent by making it obvious exactly which MCONFIG file
we're including. For example, in com32/lua/src/Makefile we exchange
the line,
include ../../MCONFIG
for the much more comprehensible,
include $(MAKEDIR)/com32.mk
Signed-off-by: Matt Fleming <matt.fleming@linux.intel.com>
|
|\ \ |
|
| |/ |
|
| | |
|
|\ \
| | |
| | |
| | |
| | |
| | |
| | | |
Conflicts:
diag/mbr/handoff.S
diag/mbr/handoff.S: Remove the attempt to zero pad/prevent overflow
|