Paulo Alcantara [Mon, 30 Apr 2012 04:49:16 +0000 (01:49 -0300)]
host.c32: do not use INT 22h, AX=0x0010 to resolve DNS
Use pxe_dns() function (assigned in syslinux/pxe.h) instead for
resolving DNS.
Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
Paulo Alcantara [Sat, 28 Apr 2012 18:40:31 +0000 (15:40 -0300)]
PXELINUX: do not use hard-coded values
PXENV_RESTART_TFTP and PXENV_FILE_EXEC flags are already declared in
core/pxe.inc, so we don't need to use hard-coded values there.
Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
Paulo Alcantara [Thu, 19 Apr 2012 03:28:40 +0000 (00:28 -0300)]
ISOLINUX: use bailmsg string in kaboom()
Every code which implements kaboom(), uses bailmsg string. So we must
use it in core/isolinux.asm as well.
Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
Paulo Alcantara [Thu, 19 Apr 2012 03:25:57 +0000 (00:25 -0300)]
ISOLINUX: trivial fix
Fix minor typo.
Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
H. Peter Anvin [Fri, 4 May 2012 19:12:47 +0000 (12:12 -0700)]
Merge remote-tracking branch 'mfleming/elflink' into elflink
Matt Fleming [Thu, 3 May 2012 12:54:14 +0000 (13:54 +0100)]
ldlinux: Parse ALLOWOPTIONS directive
Specifying the ALLOWOPTIONS directive doesn't have any effect at the
moment. Fix this so that if ALLOWOPTIONS 0 is used then command line
arguments are ignored.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Thu, 3 May 2012 12:19:52 +0000 (13:19 +0100)]
elflink: Fix TIMEOUT and TOTALTIMEOUT handling
Paulo reported that his default command line wasn't being executed
when the timeout specified in his config file elapsed. This is because
mygetkey() wasn't correctly applying the timeout when waiting for
input.
Furthermore, it seems the ONTIMEOUT parsing was also broken.
Reported-by: Paulo Alcantara <pcacjr@zytor.com>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 1 May 2012 15:00:12 +0000 (16:00 +0100)]
ldlinux: Don't drop args if we auto-lookup cmd extension
If we automatically lookup the extension for a command and the user
has supplied an argument to that command we incorrectly stamp the NUL
byte after the extension, and not after the argument, thereby
effectively erasing the argument.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
H. Peter Anvin [Tue, 17 Apr 2012 18:25:53 +0000 (11:25 -0700)]
get_key: Valid key values are positive
Make sure we return positive values for valid keystrokes.
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
H. Peter Anvin [Tue, 17 Apr 2012 18:22:36 +0000 (11:22 -0700)]
core/graphics.c: Fixes and cleanups
Fix up various conversion bugs from assembly. Eventually this whole
file should be removed and the functionality moved to using the VESA
framework.
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
H. Peter Anvin [Tue, 17 Apr 2012 17:42:17 +0000 (10:42 -0700)]
hw/vga.h: Header file for VGA hardware registers
Header file for VGA hardware registers; so far only the base registers
and sub-register indicies, but no bit masks or bit positions; those
can be added as needed.
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Matt Fleming [Tue, 17 Apr 2012 10:24:56 +0000 (11:24 +0100)]
Merge branches 'auto-extension' and 'fix-build-warnings' into elflink
Conflicts:
com32/elflink/ldlinux/ldlinux.c
Matt Fleming [Wed, 4 Apr 2012 11:18:47 +0000 (12:18 +0100)]
Mark unused function parameters as __unused
Move the __unused tag from com32/hdt/ to com32/include/klibc/ so that
it can be used by the entire code base, and mark unused function
parameters as __unused to stop the following kind of build warning,
elflink/load_env32.c: In function ‘load_env32’:
elflink/load_env32.c:107:30: warning: unused parameter ‘regs’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Wed, 4 Apr 2012 09:27:42 +0000 (10:27 +0100)]
elflink: Remove unused variables
Reduce the number of build warnings by deleting unused variables.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 3 Apr 2012 15:34:25 +0000 (16:34 +0100)]
fs: Include unistd.h for chdir() prototype
fs/lib/chdir.c: In function ‘generic_chdir_start’:
fs/lib/chdir.c:5:2: warning: implicit declaration of function ‘chdir’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 3 Apr 2012 15:28:52 +0000 (16:28 +0100)]
fs: Include header for close() prototype
... which avoids the following build warning,
fs/fs.c: In function ‘open_config’:
fs/fs.c:97:2: warning: implicit declaration of function ‘close’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 3 Apr 2012 15:17:17 +0000 (16:17 +0100)]
elflink: Allocate space for 'realname'
search_dirs() expects the 'realname' argument to point to space
allocated for storing the real path name. Currently we're passing an
uninitialized pointer which was highlighted by the following build
warning,
elflink/load_env32.c:155:18: warning: ‘realname’ may be used uninitialized in this function
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 3 Apr 2012 15:07:09 +0000 (16:07 +0100)]
elflink: Delete obsolete constructor code
Since commit
8e0ed96bff75 ("elf: Support __constructor and
__destructor") the code for looping over ctors in ldlinux has been
unnecessary. Delete since this is all now handled in the core module
loading code.
This also gets rid of the following build warning,
elflink/load_env32.c: At top level:
elflink/load_env32.c:28:15: warning: array ‘__ctors_start’ assumed to have one element
elflink/load_env32.c:28:32: warning: array ‘__ctors_end’ assumed to have one element
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 3 Apr 2012 15:00:53 +0000 (16:00 +0100)]
conio: Fix up compiler warnings
conio.c: In function ‘pm_getchar’:
conio.c:336:2: warning: pointer targets in passing argument 1 of ‘getchar’ differ in signedness
conio.c:268:6: note: expected ‘char *’ but argument is of type ‘uint8_t *’
conio.c: In function ‘pm_pollchar’:
conio.c:261:1: warning: control reaches end of non-void function
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 3 Apr 2012 14:30:58 +0000 (15:30 +0100)]
graphics: Fix GXPix* assignment
We need assign cols/rows to GXPixCols/GXPixRows separately, we can't
rely on the compiler writing the 32-bit value to two consecutive
16-bit memory locations like the assembly version did. The value we
were storing was actually being truncated by the compiler (see the
warning below),
Also fixup the following warnings,
graphics.c: In function ‘vgasetmode’:
graphics.c:95:18: warning: cast from pointer to integer of different size
graphics.c:102:2: warning: large integer implicitly truncated to unsigned type
graphics.c: In function ‘outputvga’:
graphics.c:222:12: warning: cast from pointer to integer of different size
graphics.c:227:11: warning: cast from pointer to integer of different size
graphics.c: In function ‘vgadisplayfile’:
graphics.c:303:4: warning: passing argument 1 of ‘outputvga’ from incompatible pointer type
graphics.c:213:13: note: expected ‘uint32_t *’ but argument is of type ‘uint8_t *’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 3 Apr 2012 14:14:24 +0000 (15:14 +0100)]
font: Cast away compiler warning
font.c: In function ‘adjust_screen’:
font.c:167:30: warning: initialization makes pointer from integer without a cast
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 3 Apr 2012 13:57:58 +0000 (14:57 +0100)]
writestr: Include core.h for writechr() prototype
This eliminates the following compiler warning,
writestr.c: In function ‘crlf’:
writestr.c:26:2: warning: implicit declaration of function ‘writechr’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 3 Apr 2012 13:38:08 +0000 (14:38 +0100)]
hello: Delete unused variable 'console_init'
Which also gets rid of the following warning,
hello.c:10:12: warning: ‘console_init’ defined but not used
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 3 Apr 2012 12:55:51 +0000 (13:55 +0100)]
init: Fix up compiler warnings
Fix up the following compiler warnings by including appropriate
headers, applying some casts, and changing some data types,
init.c:7:1: warning: large integer implicitly truncated to unsigned type
init.c: In function ‘check_escapes’:
init.c:32:10: warning: cast from pointer to integer of different size
init.c:46:4: warning: implicit declaration of function ‘writestr’
init.c: In function ‘bios_timer_init’:
init.c:57:19: warning: initialization makes pointer from integer without a cast
init.c:61:8: warning: assignment makes integer from pointer without a cast
init.c: In function ‘init’:
init.c:74:2: warning: implicit declaration of function ‘adjust_screen’
init.c:75:2: warning: implicit declaration of function ‘printf_init’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 3 Apr 2012 11:58:52 +0000 (12:58 +0100)]
localboot: Include header files for function prototypes
... to avoid the following warnings,
localboot.c: In function ‘local_boot’:
localboot.c:38:2: warning: implicit declaration of function ‘vgaclearmode’
localboot.c:40:2: warning: implicit declaration of function ‘writestr’
localboot.c:41:2: warning: implicit declaration of function ‘crlf’
localboot.c:42:2: warning: implicit declaration of function ‘cleanup_hardware’
localboot.c:76:2: warning: implicit declaration of function ‘memcpy’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 3 Apr 2012 11:12:50 +0000 (12:12 +0100)]
meminfo: If we allocate with lmalloc() we should free with lfree()
Since commit
74518b8b691c ("elflink: Make ELF the default object
format") we've been using lmalloc() with free() instead of lfree().
This bug was pointed out by the following build warnings,
meminfo.c: In function ‘dump_e820’:
meminfo.c:93:5: warning: implicit declaration of function ‘free’
meminfo.c:93:5: warning: incompatible implicit declaration of built-in function ‘free’
vesainfo.c: In function ‘print_modes’:
vesainfo.c:82:2: warning: implicit declaration of function ‘free’
vesainfo.c:82:2: warning: incompatible implicit declaration of built-in function ‘free’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 3 Apr 2012 10:49:50 +0000 (11:49 +0100)]
ldlinux: Include write_serial() prototype
Include core.h to avoid the following build warning,
eprintf.c: In function ‘veprintf’:
eprintf.c:23:6: warning: implicit declaration of function ‘write_serial’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 3 Apr 2012 10:37:36 +0000 (11:37 +0100)]
core: Move write_serial() prototype to core.h
There's nothing inherently BIOS-specific about write_serial(), so it
doesn't make sense to have it in bios.h. Move the prototype to core.h
so that files can access the prototype without pulling in all the BIOS
symbols. Also add some missing function prototypes while we're at it.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 3 Apr 2012 09:48:52 +0000 (10:48 +0100)]
ldlinux: Use signed char consistently
In get_key() we use unsigned chars but seem to use signed chars in
other functions. There's no real reason to use unsigned chars so let's
be consistent. This also eliminates the following warnings,
get_key.c: In function ‘get_key’:
get_key.c:187:2: warning: pointer targets in passing argument 1 of ‘get_key_decode’ differ in signedness
get_key.c:129:5: note: expected ‘char *’ but argument is of type ‘unsigned char *’
serirq.c:29:29: warning: pointer targets in initialization differ in signedness
serirq.c:30:29: warning: pointer targets in initialization differ in signedness
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 2 Apr 2012 16:11:57 +0000 (17:11 +0100)]
ldlinux: Fix uninitialized variable warning
Fix the following warning by initializing 'kernel_name' to NULL,
kernel.c:18:14: warning: ‘kernel_name’ may be used uninitialized in this function
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 2 Apr 2012 16:07:59 +0000 (17:07 +0100)]
ldlinux: Add prototype for new_linux_kernel()
Make sure we're passing the correct arguments to new_linux_kernel() by
defining a prototype. This also fixes the following warning,
execute.c:108:3: warning: implicit declaration of function ‘new_linux_kernel’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 2 Apr 2012 14:51:45 +0000 (15:51 +0100)]
ldlinux: Fix number of arguments to start_ldlinux()
Commit
3a316db1 ("ldlinux: Loading a config file should cause
re-initialisation") added a call to start_ldlinux() with an incorrect
number of arguments. Add the prototype to core.h so this error doesn't
go unnoticed again.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 2 Apr 2012 14:14:55 +0000 (15:14 +0100)]
ldlinux: Cast some arguments to avoid compiler warnings
Specifically these warnings,
execute.c: In function ‘execute’:
execute.c:87:3: warning: passing argument 1 of ‘lfree’ discards qualifiers from pointer target type
../../../com32/include/com32.h:125:6: note: expected ‘void *’ but argument is of type ‘const char *’
execute.c:88:3: warning: passing argument 1 of ‘create_args_and_load’ discards qualifiers from pointer target type
execute.c:40:12: note: expected ‘char *’ but argument is of type ‘const char *’
execute.c:111:2: warning: passing argument 1 of ‘lfree’ discards qualifiers from pointer target type
../../../com32/include/com32.h:125:6: note: expected ‘void *’ but argument is of type ‘const char *’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 2 Apr 2012 13:44:46 +0000 (14:44 +0100)]
ldlinux: Use '\0' instead of NULL when dealing with characters
We should be using '\0', not NULL when signalling 'end of string'.
Using NULL results in the following warning,
readconfig.c: In function ‘parse_one_config’:
readconfig.c:1355:17: warning: assignment makes integer from pointer without a cast
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 2 Apr 2012 13:44:10 +0000 (14:44 +0100)]
core: Add open_config() prototype
... to fix the following warning,
readconfig.c: In function ‘parse_one_config’:
readconfig.c:1339:3: warning: implicit declaration of function ‘open_config’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 2 Apr 2012 13:26:22 +0000 (14:26 +0100)]
ldlinux: Fix build warnings caused by refstrdup() usage
Sprinkle 'const' qualifiers when dealing with refstrdup() to fix the
following warnings,
readconfig.c: In function ‘parse_config_file’:
readconfig.c:1127:12: warning: assignment discards qualifiers from pointer target type
readconfig.c:1139:12: warning: assignment discards qualifiers from pointer target type
readconfig.c:1152:12: warning: assignment discards qualifiers from pointer target type
readconfig.c:1315:12: warning: assignment discards qualifiers from pointer target type
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 2 Apr 2012 13:12:06 +0000 (14:12 +0100)]
ldlinux: Silence gcc warning about uninitialized variable
Initialize 'comm_counter' so that gcc will no longer complain with the
following,
cli.c: In function ‘edit_cmdline’:
cli.c:142:25: warning: ‘comm_counter’ may be used uninitialized in this function
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 2 Apr 2012 13:07:33 +0000 (14:07 +0100)]
ldlinux: Add print_labels() prototype to config.h
... to fix the following build warning,
cli.c: In function ‘edit_cmdline’:
cli.c:411:3: warning: implicit declaration of function ‘print_labels’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 2 Apr 2012 12:50:22 +0000 (13:50 +0100)]
ldlinux: Fix check for last command line entry
The expression that checks to see when we've reached the end of the
command line entries is incorrect, probably because the list macros
weren't used. Use list_is_last() to make the expression correct and
self-documenting.
This bug was highlighted by the following compiler warning,
cli.c: In function ‘cmd_reverse_search’:
cli.c:102:20: warning: comparison of distinct pointer types lacks a cast
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 2 Apr 2012 12:36:17 +0000 (13:36 +0100)]
ldlinux: Match arg types to function prototypes
Change the types of some local variables to match the type in the
function prototypes, thereby avoiding the following warnings,
ldlinux.c:132:2: warning: pointer targets in passing argument 2 of ‘syslinux_getadv’ differ in signedness
../../../com32/include/syslinux/adv.h:55:22: note: expected ‘size_t *’ but argument is of type ‘int *’
ldlinux.c:132:6: warning: assignment discards qualifiers from pointer target type
ldlinux.c:156:3: warning: pointer targets in passing argument 1 of ‘load_kernel’ differ in signedness
ldlinux.c:58:13: note: expected ‘const char *’ but argument is of type ‘uint8_t *’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 2 Apr 2012 11:53:59 +0000 (12:53 +0100)]
ldlinux: Tag __syslinux_init() as __constructor
We don't need to have control over exactly when __syslinux_init() is
executed, it just needs to be before we call syslinux_get_adv(). Let's
apply the __constructor tag to __syslinux_init() so that it is
executed before we enter ldlinux.c32's main(). This partially reverts
commit
487b67a9ce ("ldlinux: Remove __constructor attribute") because
we can now have __constructor functions in ldlinux.
By not calling __syslinux_init() directly we also avoid the following
build warning,
ldlinux.c: In function ‘main’:
ldlinux.c:131:2: warning: implicit declaration of function ‘__syslinux_init’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 2 Apr 2012 11:41:50 +0000 (12:41 +0100)]
ldlinux: parse_kernel_type() parameter should be const
Since we always pass a const char * to parse_kernel_type(), change the
type of the parameter accordingly to get rid of the following
warnings,
ldlinux.c:66:3: warning: passing argument 1 of ‘parse_kernel_type’ discards qual
ifiers from pointer target type
ldlinux.c:14:25: note: expected ‘char *’ but argument is of type ‘const char *’
ldlinux.c:80:2: warning: passing argument 1 of ‘parse_kernel_type’ discards qual
ifiers from pointer target type
ldlinux.c:14:25: note: expected ‘char *’ but argument is of type ‘const char *’
ldlinux.c: In function ‘main’:
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 2 Apr 2012 11:35:33 +0000 (12:35 +0100)]
ldlinux: Include headers for function prototypes
Include the appropriate headers to fix up the following build
warnings,
ldlinux.c: In function ‘parse_kernel_type’:
ldlinux.c:27:2: warning: implicit declaration of function ‘strncmp’
ldlinux.c: In function ‘load_kernel’:
ldlinux.c:64:2: warning: implicit declaration of function ‘find_label’
ldlinux.c:64:5: warning: assignment makes pointer from integer without a cast
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 2 Apr 2012 10:50:03 +0000 (11:50 +0100)]
elflink: Add _module_unload() prototype to module.h
Commit
8e0ed96bff7 ("elf: Support __constructor and __destructor")
failed to add a prototype for the newly introduced _module_unload()
function, which resulted in the following build warning being
introduced,
sys/module/exec.c: In function ‘spawn_load’:
sys/module/exec.c:222:3: warning: implicit declaration of function ‘_module_unload’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 2 Apr 2012 10:24:04 +0000 (11:24 +0100)]
elflink: Fix module_load() compiler warnings
Correct the 'argv' argument to spawn_load() in module_load() and
include the header containing the spawn_load() prototype, thereby
fixing the following warning,
sys/module/elf_module.c: In function ‘module_load’:
sys/module/elf_module.c:534:5: warning: initialization makes integer from pointer without a cast
sys/module/elf_module.c:534:5: warning: initialization makes integer from pointer without a cast
sys/module/elf_module.c:535:5: warning: implicit declaration of function ‘spawn_load’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 2 Apr 2012 10:07:56 +0000 (11:07 +0100)]
elflink: Fix build warnings
There's a lot of void * arithmetic going on in the ELF code that the
compiler warns about, i.e.
sys/module/common.c: In function ‘check_symbols’:
sys/module/common.c:325:44: warning: pointer of type ‘void *’ used in arithmetic
Cast the void * pointers to char * so that we can do byte arithmetic
on them.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Fri, 30 Mar 2012 14:19:07 +0000 (15:19 +0100)]
elflink: Delete dump_elf_module()
dump_elf_module() doesn't have any callers (it's call site is
commented out in module_load()) and it's definition currently emits
the following build warning,
In file included from exit.c:34:0:
../include/sys/module.h: In function ‘dump_elf_module’:
../include/sys/module.h:123:55: warning: unused parameter ‘module’
Just delete it. If anyone needs a similar function in future it is
trivial to write.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Fri, 30 Mar 2012 13:58:41 +0000 (14:58 +0100)]
syslinux/idle.c: Fix build warnings from missing prototypes
Include core.h to fix the following build warnings,
syslinux/idle.c: In function ‘syslinux_reset_idle’:
syslinux/idle.c:41:5: warning: implicit declaration of function ‘reset_idle’
syslinux/idle.c: In function ‘syslinux_idle’:
syslinux/idle.c:46:5: warning: implicit declaration of function ‘__idle’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Fri, 30 Mar 2012 12:22:40 +0000 (13:22 +0100)]
sys/fileclose.c: Fix build warning from missing prototype
Include fs.h to avoid the following warning,
sys/fileclose.c: In function ‘__file_close’:
sys/fileclose.c:42:2: warning: implicit declaration of function ‘close_file’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Fri, 30 Mar 2012 12:16:00 +0000 (13:16 +0100)]
sys/fileread.c: Fix build warning from missing prototype
Include the appropriate header to fix the following warning,
sys/fileread.c: In function ‘__file_get_block’:
sys/fileread.c:45:5: warning: implicit declaration of function ‘pmapi_read_file’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Fri, 30 Mar 2012 12:09:16 +0000 (13:09 +0100)]
sys/open.c: Fix building warnings from missing prototype
Fix the following warning by including the appropriate header,
sys/open.c: In function ‘open’:
sys/open.c:67:5: warning: implicit declaration of function ‘open_file’
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Fri, 30 Mar 2012 12:07:12 +0000 (13:07 +0100)]
getcwd.c: Include core_getcwd() prototype
Fix the following warning by including the appropriate header,
getcwd.c: In function ‘getcwd’:
getcwd.c:10:5: warning: implicit declaration of function ‘core_getcwd’
getcwd.c:10:5: warning: return makes pointer from integer without a cast
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Fri, 30 Mar 2012 11:45:33 +0000 (12:45 +0100)]
core: Partial revert of commit
9333426b and unify lmalloc()
The reason behind commit
9333426b ("elflink: fix the global naming for
lmalloc") seems to be that we need to avoid having two 'lmalloc'
symbols, one in the core and one in the com32 library.
Unfortunately, this commit introduced the following warning in
multiple places,
meminfo.c:47:2: warning: implicit declaration of function ‘lmalloc’
meminfo.c:47:9: warning: assignment makes pointer from integer without a cast
meminfo.c:93:5: warning: implicit declaration of function ‘free’
meminfo.c:93:5: warning: incompatible implicit declaration of built-in function ‘free’
Consolidate the implementations of lmalloc() so that it's suitable for
use both in the com32 library code and the core.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Fri, 30 Mar 2012 09:57:22 +0000 (10:57 +0100)]
ldlinux: Automatically lookup file extension
The old kernel loader would automatically calculate valid file
extensions if one wasn't supplied by the user. For example, if a user
types 'ls' we want to run the ls.c32 module. Add support for this to
the new code in ldlinux.
Reported-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Paulo Alcantara [Wed, 11 Apr 2012 23:39:05 +0000 (20:39 -0300)]
Remove core/ui.inc completely from Syslinux
The old UI used by Syslinux is no longer supported. The 32-bit environment
already provides us an awesome prompt.
All Syslinux variants do not depend on it anymore, thus they were
modified in order to support the new prompt provided by the ELF module
ldlinux.c32.
Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
Paulo Alcantara [Wed, 11 Apr 2012 22:24:19 +0000 (19:24 -0300)]
PXELINUX: call open_config() function before loading 32-bit environment
ldlinux.c32 needs ConfigName variable to be set before jumping to 32-bit
ELF space. As pxe_open_config() is called from open_config() in
core/pxelinux.asm, it will set ConfigName variable accordingly.
Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
Paulo Alcantara [Wed, 11 Apr 2012 03:52:50 +0000 (00:52 -0300)]
PXELINUX: get rid of core/ui.inc file
core/ui.inc is no longer used. As it used to contain the boot prompt
code, there is replacement of it, the enter_cmdline() function
(com32/elflink/ldlinux/ldlinux.c). There were some variables declared in
core/ui.inc that are used by core/pxelinux.asm, so those were all moved
out to core/pxelinux.asm as well.
Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
Paulo Alcantara [Sun, 8 Apr 2012 19:33:16 +0000 (16:33 -0300)]
PXELINUX: do not load 32-bit environment twice
Calling load_env32() once, it should never return. If it does, then jump
to kaboom.
Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
H. Peter Anvin [Tue, 27 Mar 2012 05:51:09 +0000 (22:51 -0700)]
libinstaller: Avoid using <linux/ext2_fs.h>
Don't use <linux/ext2_fs.h> if we can avoid it.
The ioctl constants have been globalized and moved to <linux/fs.h>.
Use a private copy of ext2_fs.h from e2fsprogs with the ioctl
constants removed for the data structures.
Do at least attempt backward compatibility for old kernel headers, but
no real hope of proper operation there...
[ Doing this as a cherry-pick to unblock this branch ]
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Resolved Conflicts:
libinstaller/linuxioctl.h
H. Peter Anvin [Tue, 27 Mar 2012 21:47:04 +0000 (14:47 -0700)]
Makefile.private: remove obsolete preupload rule
Remove obsolete preupload rule, already deleted on the master branch.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Tue, 27 Mar 2012 21:44:23 +0000 (14:44 -0700)]
version: Bump date to 2012
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Tue, 27 Mar 2012 21:42:51 +0000 (14:42 -0700)]
kernel: Support multiple initrds
Support loading multiple initrd images separated by commas. It still
doesn't correctly handle a secondary initrd= argument overriding the
first; not clear if that really was a good idea or if they would be
considered additive arguments.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Tue, 27 Mar 2012 21:41:55 +0000 (14:41 -0700)]
Revert "ldlinux: Disable VGA graphics when loading a kernel"
This reverts commit
87320b8de8f331b9c1810e98e24426e70b0ae29f.
That commit would change the mode before the kernel was actually
loaded, but would leave the console nonfunctional if it was vesacon.
We may need to do something similar eventually, but that one is not
correct.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Tue, 27 Mar 2012 21:39:46 +0000 (14:39 -0700)]
menu: Make "menu clear" the default
Make "menu clear" the default... it was sort of implicitly so at least
for vesamenu when using the old system, since we would end up zapping
the mode when any output happened, but that no longer is the case.
Also move the cursor to the top of the screen.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Matt Fleming [Tue, 13 Mar 2012 12:23:56 +0000 (12:23 +0000)]
core: Abstract search_config() into search_dirs()
The core currently abuses search_config() in order to locate
ldlinux.c32. The problem with this is that search_config() updates
ConfigName with the realpath of the file on every invocation. If we've
previously set ConfigName search_config() will overwrite this value.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 12 Mar 2012 19:40:33 +0000 (19:40 +0000)]
mk: Don't link against compiler's version of libgcc
Syslinux provides its own copy of libgcc functions in
com32/lib/libgcc, so we don't need to link against the version
provided by the compiler. What's worse, the behaviour is different
between the two versions.
This caused problems, for example, when parsing the TOTALTIMEOUT
config directive in com32/menu because of the following calculation,
totaltimeout = (atoll(skipspace(p + 13)) * CLK_TCK + 9) / 10;
which invokes __divdi3() as provided by libgcc. The results returned
by the Syslinux and compiler's copy of libgcc differ, leading to
differences in behaviour.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Fri, 9 Mar 2012 12:49:50 +0000 (12:49 +0000)]
ldlinux: Don't alloc initramfs unless initrd= is specified
It only makes sense to allocate memory for 'initramfs' if an initrd=
argument was on the command line, otherwise we're wasting memory.
Furthermore needlessly allocating 'initramfs' actually caused old
kernels, such as memtest86, to fail to run because of the following
check in syslinux_boot_kernel(),
if (initramfs && hdr.version < 0x0200)
goto bail; /* initrd/initramfs not supported */
Move the allocation after we've checked for and found an initrd=
argument.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Fri, 9 Mar 2012 10:53:52 +0000 (10:53 +0000)]
ldlinux: Disable VGA graphics when loading a kernel
The state of the graphics hardware is unknown when we're about to load
a new kernel. It could be running in VGA mode, so let's disable VGA
graphics before passing control to the kernel.
The old assembly version of this code made extensive used of
writestr(), which always calls vgaclearmode(). In the C version we're
using printf() and so need to call vgaclearmode() directly. Doing it
directly has the added advantage of documenting exactly where we need
to reset the graphics hardware.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 13 Mar 2012 09:39:14 +0000 (09:39 +0000)]
ldlinux: Make the default execute type KT_KERNEL
Default to trying to boot a linux kernel image, which was the
behaviour of the old asm image file loader.
Note that we don't need to go through __intcall() to load a kernel as
the dynamic linker will fixup any references to the kernel load
functions for us at runtime. Furthermore, modules invoking execute()
could be located anywhere in the 32-bit address space and may not be
able to represent their pointer arguments with SEG() and OFFS(), so
using the comboot API may not even work.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Wed, 7 Mar 2012 15:18:51 +0000 (15:18 +0000)]
ldlinux: Avoid initialised data memory corruption
We can't realloc() 'PATH' because realloc() may just extend the
malloc'd region if the adjacent region is free, as opposed to
allocating a new region and then copying the data. This behaviour is
fine in most circumstances but not with initialised string data, such
as 'PATH'. The reason is that other string data pointers may point to
characters in 'PATH' and if we modify it after realloc()'ing, we'll
appear to corrupt unrelated string data.
For example, the string "/" is used in chdir() and the address of that
string is the last "/" in 'PATH'. If we realloc() and then append
"foo" to 'PATH' the string pointer in chdir() will now point to "/foo".
Initialise 'PATH' at runtime using malloc() and free() to avoid
corrupting string data.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 13 Mar 2012 10:06:59 +0000 (10:06 +0000)]
ldlinux: chdir to the APPEND str when parsing a CONFIG directive
If an APPEND directive was specified for a CONFIG label then we need
to chdir to that directory after parsing the new config file.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 13 Mar 2012 09:58:26 +0000 (09:58 +0000)]
com32: Delete execute.c and use the one from ldlinux
ldlinux provides us with an execute.c and all the functions that we
need, there's no point in duplicating the code in com32/menu.
Also, the copy in ldlinux doesn't use __com32.cs_bounce. Using
cs_bounce no longer works with dynamic ELF modules because we don't
have such tight control over the address space. Instead, memory must
be allocated dynamically or reserved as part of the object file.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Thu, 1 Mar 2012 17:23:57 +0000 (17:23 +0000)]
elflink: Don't use strcmp on a non-NUL terminated string
The syslinux implementation of strcmp() only checks for NUL in the
first argument and will use any NULs in the second argument for
comparison with the corresponding character in the first string. This
caused problems because at the time strcmp() is called 'path' isn't
NUL-terminated. Since we're only checking the first character of
'path' just code it explicitly.
This bug caused some modules not to load when resolving module
dependencies via the ELF DT_NEEDED field because the "." in the PATH
lookup code wouldn't be expanded to the current working directory. For
example, instead of expanding to "/foo/bar" if /foo was the cwd, the
path would be ".bar".
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 13 Mar 2012 09:37:57 +0000 (09:37 +0000)]
ldlinux: Loading a config file should cause re-initialisation
There are a number of initialisation steps that need to be performed
*every* time a config file is loaded. Reload ldlinux.c32 so that we
can re-initialise the environment whenever a new config file is
loaded. This involves unloading all the modules that have been loaded
since ldlinux.c32. Luckily the list of loaded modules is sorted by
load order, which means it's trivial to "pop" them from the front of
the list.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Thu, 22 Mar 2012 15:31:43 +0000 (15:31 +0000)]
elf: Support __constructor and __destructor
The old way of specifying functions that need to be run before/after a
main function has never worked for ELF modules. Instead, the only way
to get similiar behaviour was by using the MODULE_INIT() and
MODULE_EXIT() macros, but no one seems to have bothered converting the
old __constructor users over. Anyway, the old way is superior because
it allows multiple functions be specified. Delete the MODULE_* macros
as there's only one user of them in the entire tree.
We can also get rid of the UNKNOWN_MODULE constant because now a
module doesn't need a __module_init_ptr symbol to be classed as a
library - if a module isn't an executable, it's a library, there's no
such thing as an unknown type.
It's no longer necessary to explicitly call
__syslinux_get_ipappend_strings() from ldlinux.c because the
__constructor tag on the version in com32/lib/syslinux will take care
of invoking it before ldlinux.c32's main() is executed.
Also, since we've refactored unload_module() to now run a module's
destructors let's minimise the number of callers by deleting
load_library() and unload_library(), which were only called by the
test module in com32/elflink.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 20 Mar 2012 16:27:17 +0000 (16:27 +0000)]
core: Shrink core/ldlinux.sys to be under 64K bytes
It would seem that running from a btrfs file system has been broken
for some time. The reason is that core/ldlinux.sys has grown
substantially, resulting in it weighing in at a whopping 88K bytes and
no longer fitting within the first 64K segment of a btrfs file system.
This huge size stems from the fact that the core links with
libcom32min.a because it requires various symbols contained within
that archive but it includes and exports *all* the symbols from
libcom32min.a. The reasoning behind this design decision is that when
a module is loaded any undefined symbols that are defined in
libcom32min.a can be resolved at runtime by the core, without the
module also needing to statically link against libcom32min.a.
Unfortunately doing this has increased the size of the core beyond
acceptable limits, such that booting from a btrfs file system no
longer works.
This commit links ldlinux.c32 against libcom32min.a so that now
ldlinux.c32 exports all the symbols contained within the
archive. Since we will always load ldlinux.c32 before any other
modules, any undefined symbols will now be resolved by ldlinux.c32
instead of the core. ldlinux.c32 isn't subject to same size
constraints as the core, e.g. fitting within 64K.
Here are the sizes in bytes before and after this commit,
Before:
33806 com32/elflink/ldlinux/ldlinux.c32
87749 core/ldlinux.sys
After:
393871 com32/elflink/ldlinux/ldlinux.c32
45516 core/ldlinux.sys
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Thu, 1 Mar 2012 11:54:13 +0000 (11:54 +0000)]
ldlinux: Fix detection of function keys
__get_key() directly calls getchar() but doesn't properly detect when
a function key such as F1, F2, etc has been entered. Despite the
previous commit to cli.c which read,
ldlinux: Accept commands from the serial console
To mimic the old (pre-elflink) command-line interface behaviour let's
use getchar() instead of reading from stdin. This way, if the user
types a command on the serial console it will actually be executed.
I can't see how get_key() fails to detect input on the serial
console. So let's revert to calling get_key() because it actually
handles the detection of function keys.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 28 Feb 2012 21:06:38 +0000 (21:06 +0000)]
core: Check for func key in getchar()
We need to return the value stored in ah after reading from the
keyboard with __intcall(0x16, ...) otherwise we won't properly detect
function keys such as F1, F2, etc.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Thu, 16 Feb 2012 12:12:50 +0000 (12:12 +0000)]
core: Delete the aux segment
We don't need to use a special aux segment because we can represent
'fontbuf' with OFFS() and SEG(). We're guaranteed to be able to break
the 32-bit pointer up with these macros because we control where in
the address space the core is loaded. (Not all 32-bit pointers can be
represented with OFFS() and SEG(), only addresses in the range
0..0xFFFFF.)
This fixes the breakage that was introduced in commit
14531c47bc95
("core: Delete code that is duplicated in ldlinux").
This allows the default font to be displayed. Previously junk was
being returned in the COMBOOT API call to query the userfont, leading
the caller to believe that a user font was installed even when it
wasn't.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 14 Feb 2012 13:34:00 +0000 (13:34 +0000)]
core: Only adjust screen if we're in text mode
A bug was introduced in commit
9f51b69d ("core: Reimplement lots asm
code in C") when converting the old asm comapi_usingvga function into
C. We only want to adjust the screen if we're not using VGA.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Mon, 13 Feb 2012 14:27:36 +0000 (14:27 +0000)]
com32/menu: vesamenu.c32 and menu.c32 require multiple obj files
The standard %.c32 rule in mk/elf.mk doesn't work for vesamenu.c32 and
menu.c32 because they need multiple object files to be linked. Replace
the *.elf targets with *.c32 because .c32 *IS* an ELF file now.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Thu, 9 Feb 2012 10:15:38 +0000 (10:15 +0000)]
ldlinux: Parse kernel type for labels
We need to parse the kernel type for labels aswell as things entered
on the cmdline, instead of always passing KT_KERNEL or KT_NONE to
execute(). Move the logic into a new helper function.
This fixes a bug where an incorrect kernel type would be passed to
execute() if anything other than a linux kernel (such as a .bin) was
specified in a LABEL's KERNEL argument, which resulted in the file not
being executed.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Thu, 15 Dec 2011 20:47:00 +0000 (20:47 +0000)]
ldlinux: Initialise 'p' before using it.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
H. Peter Anvin [Thu, 15 Dec 2011 18:47:41 +0000 (10:47 -0800)]
Revert "core: remove redundant zalloc() definition"
This reverts commit
46b993449264a2332427a165b4c77e400a053178.
Build failure was due to a non-clean tree.
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
H. Peter Anvin [Wed, 14 Dec 2011 22:00:21 +0000 (14:00 -0800)]
core: remove redundant zalloc() definition
Remove a redundant definition of zalloc() which causes a compile
failure.
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Matt Fleming [Fri, 25 Nov 2011 16:22:44 +0000 (16:22 +0000)]
ldlinux: Accept commands from the serial console
To mimic the old (pre-elflink) command-line interface behaviour let's
use getchar() instead of reading from stdin. This way, if the user
types a command on the serial console it will actually be executed.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Fri, 25 Nov 2011 15:54:48 +0000 (15:54 +0000)]
ldlinux: Add eprintf() to print to VGA and serial
printf() is used heavily in the ldlinux code but that only displays
things on the VGA console, not on serial. Introduce eprintf(), which
gives us the benefit of format strings but will also print to both VGA
and serial.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Fri, 25 Nov 2011 15:36:55 +0000 (15:36 +0000)]
ldlinux: Don't return previous command if user pressenter enter
If the user presses enter at the command prompt then simply print the
command prompt again on a newline - don't re-execute the previous
command.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Fri, 25 Nov 2011 15:09:11 +0000 (15:09 +0000)]
elflink: Include '\n' when printing error messages
We need to print a newline character at the end of our error messages
otherwise the syslinux command prompt may overwrite them, making them
impossible to see.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Wed, 9 Nov 2011 13:19:54 +0000 (13:19 +0000)]
ldlinux: Make tab-completion output same as pre-elflink
To maintain compatability with the old pre-elflink command line code,
the list of potential labels should all be printed on one line, not
one per line.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Fri, 4 Nov 2011 15:02:14 +0000 (15:02 +0000)]
core: Split core console code into separate libs
When the console code was written in asm ldlinux.asm, isolinux.asm and
pxelinux.asm simply included the correct console I/O files (rawcon.inc
and plaincon.inc) but now that these files are implemented in C we
need another way to link against the correct functions.
Create separate libraries for linking ldlinux, isolinux and pxelinux
against.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Fri, 4 Nov 2011 14:25:20 +0000 (14:25 +0000)]
pxelinux: Call load_env32()
Execute the elflink environment.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 24 May 2011 09:45:51 +0000 (10:45 +0100)]
core: Delete code that is duplicated in ldlinux
Lots of code that used to be implemented in the core is now
implemented in ldlinux, but code from core was never deleted. Purge
this code.
Also, move all com32 loading to ldlinux since we need to be able to do
various command line things (which are no longer available in the
core).
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Wed, 19 Oct 2011 09:02:42 +0000 (10:02 +0100)]
core: Reimplement writestr in C
Implement writestr in C instead of asm and move writestr.inc into
modules/ because it's required by modules/ver.asm.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Tue, 18 Oct 2011 12:13:06 +0000 (13:13 +0100)]
core: Reimplement lots asm code in C
There is an awful lot of code currently implemented in assembly when
it could just as easily be implemented in C. Having it in C makes it
much easier to share code between the BIOS and forthcoming EFI
firmware backend. The following code fragments have been rewritten,
- timer initialisation
- adjust_screen()
- check_esapes() and mem_init()
- conio.inc
- plaincon.inc
- cleanup.inc
- serirq.inc
- font.inc
- graphics
- writehex
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Matt Fleming [Wed, 18 May 2011 14:55:21 +0000 (15:55 +0100)]
com32: Add unhexchar
Add a C implementation of unhexchar() for use in C code. This
implementation should be an exact duplicate of the old asm version.
Signed-off-by: Matt Fleming <matt.fleming@linux.intel.com>
H. Peter Anvin [Thu, 28 Jul 2011 21:02:58 +0000 (14:02 -0700)]
Merge remote-tracking branch 'mfleming/for-hpa/elflink/ldlinux' into elflink
Matt Fleming [Tue, 12 Jul 2011 15:21:37 +0000 (16:21 +0100)]
pxelinux: open_file() returns a non-negative handle
The usage of open_file() is wrong in core/fs/pxe/pxe.c. Any
non-negative return value indicates success, not just a return value
of zero.
This bug was introduced in commit
ba4fefa9b52b "core: change
load_config() to open_config()". The bug causes pxelinux to fail to
open configuration files.
Signed-off-by: Matt Fleming <matt.fleming@linux.intel.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Matt Fleming [Tue, 12 Jul 2011 15:12:48 +0000 (16:12 +0100)]
pxelinux: open_file() returns a non-negative handle
The usage of open_file() is wrong in core/fs/pxe/pxe.c. Any
non-negative return value indicates success, not just a return value
of zero.
This bug was introduced in commit
ba4fefa9b52b "core: change
load_config() to open_config()". The bug causes pxelinux to fail to
open configuration files.
Signed-off-by: Matt Fleming <matt.fleming@linux.intel.com>
Matt Fleming [Tue, 12 Jul 2011 10:52:05 +0000 (11:52 +0100)]
core: Fix ldlinux.c32 failing to load when not installed in "/"
Currently, if syslinux is installed in a directory other than "/" we
will fail to load ldlinux.c32.
Because we know where we were installed the simplest fix is to chdir()
to the installation directory before attempting to load
ldlinux.c32. This requires us to add "." to PATH so that we look in
the current working directory when loading ELF modules.
Changing to the install directory needs to handled differently for
different file systems, which is the reason behind the new file system
operation, .chdir_start(). Disk-based Syslinux variants should use
generic_chdir_start() to chdir() to CurrentDirName, which is the
installation path. By using this new fs operation, we can load
ldlinux.c32 when we expand the "." in PATH, without having to search
the entire filesystem for it. However, iso9660 file systems still
require us to search some directories because it has no notion of an
installation directory.
Previously, changing into the install directory was handled when
opening the config file, but because the config file parser is now
part of the ldlinux.c32 ELF module, it needs to be done much earlier.
Reported-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Matt Fleming <matt.fleming@linux.intel.com>