[syslinux] Syslinux 5.10pre1 - Failed to load COM32 file .c32
Matt Fleming
matt at console-pimps.org
Fri Mar 15 10:17:47 PDT 2013
On Wed, 2013-03-13 at 13:14 +0100, Mattias Schlenker wrote:
> Hello everyone,
>
> Since I have some some adventures in UEFI PXE booting ahead I tried to
> go with the latest syslinux development snapshot in this case 5.10pre1.
> But I already fail when booting from CD with
>
> Failed to load COM32 file .c32
>
> I am a bit perplex since no name of COM32 files is given. I am trying to
> trace down the issue as good as I can. COM32 files present are:
>
> boot/isolinux/chain.c32
> boot/isolinux/ifcpu.c32
> boot/isolinux/ifcpu64.c32
> boot/isolinux/ldlinux.c32
> boot/isolinux/libcom32.c32
> boot/isolinux/libgpl.c32
> boot/isolinux/liblua.c32
> boot/isolinux/libmenu.c32
> boot/isolinux/libutil.c32
> boot/isolinux/menu.c32
> boot/isolinux/reboot.c32
> boot/isolinux/vesamenu.c32
>
> Every build gets fresh COM32 files and an isolinux.bin from the same
> syslinux version. The isolinux.cfg calls ifcpu64.c32 to select either a
> 64 bit kernel, a PAE enabled kernel or a kernel without PAE.
> isolinux.cfg reads:
>
> DEFAULT switch
>
> LABEL switch
> COM32 /boot/isolinux/ifcpu64.c32
> APPEND sifomenu -- paemenu -- nopamenu
>
> LABEL paemenu
> COM32 /boot/isolinux/vesamenu.c32
> APPEND /boot/isolinux/common/paemenu.cfg
>
> LABEL nopamenu
> COM32 /boot/isolinux/vesamenu.c32
> APPEND /boot/isolinux/common/nopamenu.cfg
>
> LABEL sifomenu
> COM32 /boot/isolinux/vesamenu.c32
> APPEND /boot/isolinux/common/sifomenu.cfg
>
> Manually calling the vesamenu.c32 COM32 at the boot prompt works with
> relative and absolute paths:
>
> boot: vesamenu.c32 common/sifomenu.c32
> boot: /boot/isolinux/vesamenu.c32 /boot/isolinux/common/sifomenu.c32
>
> I am scratching my head, since calling
>
> boot: sifomenu
>
> fails which indicates that isolinux itself does not find (or correctly
> interpretes) its isolinux.cfg. Syslinux was built with GCC 4.7.2 and
> NASM 2.10.7 - but the problem remains when using the .c32 files and
> isolinux.bin from the official release. 5.02pre3 (built with the same
> compilers) does not show this issue. There is no /isolinux directory,
> nor are there syslinux.cfg anywhere. Were there changed dependencies
> when moving from 5.02pre3 to 5.10pre1? The only added (binary) COM32
> seems to be cptime.c32, but this does not mean that there a no new
> dependencies on already present COM32 files.
Thanks for the report. I've queued up the following patch and will push
a new prerelease early next week.
---
>From ba45539416c804ed65a129ae3fd07f585f6a61ff Mon Sep 17 00:00:00 2001
From: Matt Fleming <matt.fleming at intel.com>
Date: Fri, 15 Mar 2013 16:32:52 +0000
Subject: [PATCH] ldlinux: Fixup lwip merge botch
The lwip merge changed the code for copying cmdline arguments from,
strcpy(q, p);
to this,
do {
*q++ = ch = *p++;
} while (ch);
which means 'p' no longer points at 'args'. Use 'args' explicitly for
the case where we need to apply a filename extension, otherwise users
end up seeing errors like,
Failed to load COM32 file .c32
Reported-by: Mattias Schlenker <ms at mattiasschlenker.de>
Signed-off-by: Matt Fleming <matt.fleming at intel.com>
---
com32/elflink/ldlinux/execute.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/com32/elflink/ldlinux/execute.c b/com32/elflink/ldlinux/execute.c
index 49a0de5..bf0bd8c 100644
--- a/com32/elflink/ldlinux/execute.c
+++ b/com32/elflink/ldlinux/execute.c
@@ -101,6 +101,7 @@ __export void execute(const char *cmdline, uint32_t type, bool sysappend)
* filename extension if COM32 and
* retry.
*/
+ p = args;
if (t->type == IMAGE_TYPE_COM32) {
p = apply_extension(p, ".c32");
if (!p)
--
1.7.11.7
--
Matt Fleming, Intel Open Source Technology Center
More information about the Syslinux
mailing list