qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] Configuring qemu on Solaris


From: Ben Taylor
Subject: Re: [Qemu-devel] Configuring qemu on Solaris
Date: Tue, 8 Jan 2008 21:50:29 -0500

---- Juergen Keil <address@hidden> wrote: 
> 
> Andreas Färber <address@hidden> wrote:
> 
> > The following part of configure is triggered on a fully-updated  
> > Solaris 10 8/07 amd64:
> > 
> > #
> > # Solaris specific configure tool chain decisions
> > #
> > if test "$solaris" = "yes" ; then
> >    #
> >    # gcc for solaris 10/fcs in /usr/sfw/bin doesn't compile qemu  
> > correctly
> >    # override the check with --disable-gcc-check
> >    #
> >    if test "$solarisrev" -eq 10 -a "$check_gcc" = "yes" ; then
> >      solgcc=`which $cc`
> >      if test "$solgcc" = "/usr/sfw/bin/gcc" ; then
> >        echo "Solaris 10/FCS gcc in /usr/sfw/bin will not compiled qemu  
> > correctly."
> >        echo "please get gcc-3.4.3 or later, from www.blastwave.org  
> > using pkg-get -i gcc3"
> >        echo "or get the latest patch from SunSolve for gcc"
> >        exit 1
> >      fi
> >    fi
> > 
> > Depending on the path of gcc, configure bails out. The text appears to  
> > indicate that "the latest patch [...] for gcc", whichever that may be,  
> > fixes some compilation issue.
> > Since the script does not try to detect the presence of such a patch,  
> > can we remove the exit and keep the text as a warning only?
> > Or can someone comment on what the corresponding Solaris patch id or  
> > gcc version is in order to make this conditional? The system gcc  
> > version is 3.4.3 here and it appears to compile fine.
> 
> IIRC, problem was a code generation issue with the specific version of
> gcc 3.4.3 (includes some patches from Sun; /usr/sfw/bin/gcc) that is
> included with Solaris 10 x86.  qemu would compile just fine (32-bit x86
> binary), but would crash at run time.
> 
> 
> The problematic version of gcc refused to eliminate the frame pointer
> for a function like this:
> 
> ==============================================
> #include <setjmp.h>
> 
> jmp_buf env;
> 
> void
> func(void)
> {
>         longjmp(env, 1);
> }
> ==============================================
> 
> % /usr/sfw/bin/gcc -O2 -fomit-frame-pointer -S xx.c
> % cat xx.s
>         .file   "xx.c"
>         .text
>         .p2align 2,,3
> .globl func
>         .type   func, @function
> func:
>         pushl   %ebp                       <<<<<<<<<<<<<<<<<<<<<<<
>         movl    %esp, %ebp                 <<<<<<<<<<<<<<<<<<<<<<<
>         subl    $16, %esp
>         pushl   $1
>         pushl   $env
>         call    longjmp
>         .size   func, .-func
>         .comm   env,40,32
>         .ident  "GCC: (GNU) 3.4.3 (csl-sol210-3_4-branch+sol_rpath)"
> 
> ==============================================
> 
> 
> I'm not sure if there is actually a patch id that we could check for
> in "showrev -p" output.
> 
> 
> But maybe the configure script could look at "gcc --version" output;
> I guess if it finds "(csl-sol210-3_4-branch+sol_rpath)", configure should
> complain.  
> 
> Current opensolaris comes with "gcc (GCC) 3.4.3 (csl-sol210-3_4-20050802)",
> and this version eliminates the frame pointer in the above sample code,
> and is able to compile a working qemu 32-bit x86 binary.

I'll  look at writing the code to handle this.  I will need someone to
test for me since I'm on S10U4 and Solaris Express B80...






reply via email to

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