[syslinux] SYSLINUX 3.61 released
Jeffrey Hutzelman
jhutz at cmu.edu
Mon Feb 4 12:58:09 PST 2008
--On Monday, February 04, 2008 09:41:31 AM -0800 "H. Peter Anvin"
<hpa at zytor.com> wrote:
> Dag Wieers wrote:
>> On Sun, 3 Feb 2008, H. Peter Anvin wrote:
>>
>>> Changes in 3.61:
>>> * EXTLINUX: fix crash when accessing an empty file.
>>> * elf.c32: If a PHDR segment is present, load it.
>>> * Fix SHA-1 and MD5 passwords.
>>> * ISOLINUX: fix booting when mastered without
>>> mkisofs -boot-info-table (broken since 3.50, sigh...)
>>> * Handle BIOSes which emit multiple contiguous valid
>>> memory regions in the e820 map.
>>
>> Since this release, I am unable to build extlinux on RHEL3 and RH9
>> because of the following compile error:
>>
>> gcc -Wp,-MT,extlinux.o,-MMD,.extlinux.o.d -W -Wall -Wno-sign-compare
>> -D_FILE_OFFSET_BITS=64 -g -Os -I. -I.. -I../libinstaller -c -o
>> extlinux.o extlinux.c In file included from /usr/include/linux/vfs.h:4,
>> from /usr/include/linux/fs.h:14,
>> from extlinux.c:43:
>> /usr/include/asm/statfs.h:12: redefinition of `struct statfs'
>> make[1]: *** [extlinux.o] Error 1
>> make[1]: Leaving directory `/dar/build/syslinux-3.61/extlinux'
>> make: *** [installer] Error 2
>>
>> The following patch seems to fix the problem:
>>
>> --- extlinux/extlinux.c.orig 2008-02-04 05:58:50.000000000 +0100
>> +++ extlinux/extlinux.c 2008-01-11 07:42:10.000000000 +0100
>> @@ -36,7 +36,6 @@
>> # include <sys/stat.h>
>> # include <sys/types.h>
>> # include <sys/mount.h>
>> -#include <sys/vfs.h>
>>
>> # include <linux/fd.h> /* Floppy geometry */
>> # include <linux/hdreg.h> /* Hard disk geometry */
>>
>
> That would be a bug in those distros... <sys/vfs.h> *is* the correct
> header for statfs().
I don't think it's fair to call it a bug in the distro. The problem is
that in 2.4, <linux/fs.h> pulls in quite a large number of other headers,
including ultimately <asm/statfs.h> where the kernel's struct statfs is
defined. I can't see a clean way to fix this, though perhaps it would work
to redefine 'statfs' to something else just long enough to pull in
<linux/fs.h>, and then put it back. Something like...
+#define statfs stupid_kernel_statfs
#include <linux/fs.h>
+#undef statfs
> I don't have any system that old readily on hand to I can figure out a
> workaround that doesn't bugger up other systems, I'm afraid.
I do, and it wouldn't be too hard to cons up a VM for you.
> However, the workaround you have used should work on those distros at
> least.
It may work, but it's pretty sketchy. Several fields in struct statfs are
always 32 bits wide in 2.4's kernel-mode struct statfs, but become wider in
user mode when FILE_OFFSET_BITS=64 is in effect. An extlinux built with
this patch will trample on the stack in install_loader(), which may or may
not be a problem depending on how the compiler happens to order locals on
the stack.
-- Jeffrey T. Hutzelman (N3NHS) <jhutz+ at cmu.edu>
Carnegie Mellon University - Pittsburgh, PA
More information about the Syslinux
mailing list