On Thu, 2007-10-25 at 19:52 -0500, Rob Landley wrote: > On Monday 22 October 2007 8:44:59 am Thayne Harbaugh wrote: > > On Thu, 2007-10-18 at 23:46 +0200, Ronan Keryell wrote: > > > Anybody kind enough to have a look at : > > > http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=446868 > > > > > > I've asked some other people and they hit the same issue. > > > It's not clear to me where the bug is since it happens very early in the > > > starting process... > > > > I've been using this patch: > > > > Index: qemu/linux-user/main.c > > =================================================================== > > --- qemu.orig/linux-user/main.c 2007-10-15 13:52:13.000000000 -0600 > > +++ qemu/linux-user/main.c 2007-10-15 13:52:13.000000000 -0600 > > @@ -44,7 +44,7 @@ > > > > /* for recent libc, we add these dummy symbols which are not declared > > when generating a linked object (bug in ld ?) */ > > -#if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && > > !defined(CONFIG_STATIC) +#if (__GLIBC__ == 2 && __GLIBC_MINOR__ == 3) && > > !defined(CONFIG_STATIC) long __preinit_array_start[0]; > > long __preinit_array_end[0]; > > long __init_array_start[0]; > > When I tried it, it went: > > gcc-3.4 -Wall -O2 -g -fno-strict-aliasing -I. -I.. > -I/home/landley/qemu/git/target-i386 -I/home/landley/qemu/git > -I/home/landley/qemu/git/linux-user -I/home/landley/qemu/git/linux-user/i386 > -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE > -I/home/landley/qemu/git/fpu -DHAS_AUDIO -DHAS_AUDIO_CHOICE > -I/home/landley/qemu/git/slirp -c -o > main.o /home/landley/qemu/git/linux-user/main.c > gcc-3.4 -g -Wl,-shared -o qemu-i386 main.o syscall.o mmap.o signal.o > path.o > osdep.o thunk.o elfload.o linuxload.o vm86.o libqemu.a gdbstub.o -lm -lrt > /usr/lib/libc_nonshared.a(elf-init.oS): In function `__libc_csu_init': > (.text+0x2b): undefined reference to `__init_array_end' > /usr/lib/libc_nonshared.a(elf-init.oS): In function `__libc_csu_init': > (.text+0x34): undefined reference to `__init_array_start' > /usr/bin/ld: qemu-i386: hidden symbol `__init_array_end' isn't defined > /usr/bin/ld: final link failed: Nonrepresentable section on output > collect2: ld returned 1 exit status > make[1]: *** [qemu-i386] Error 1 > make[1]: Leaving directory `/home/landley/qemu/git/i386-linux-user' > make: *** [subdir-i386-linux-user] Error 2
Ick. There's some funky magic going on in qemu/x86_64.ld and the above patch is a hack-around. The segfault is caused by preinit_array function pointers (which are NULL) being dereferenced. This is a great opportunity for you to put your super-sleuth skills to work and figure out the details and fix it. 8^) > Have you tried it with current cvs on Ubuntu 7.04? (qemu-i386 has never > worked for me built on that.) Sorry - I'm doing work on Debian Lenny.