qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] qemu-i386 does not start on x86_64 or i686


From: Thayne Harbaugh
Subject: Re: [Qemu-devel] qemu-i386 does not start on x86_64 or i686
Date: Thu, 25 Oct 2007 19:19:55 -0600

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.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]