[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