---- Juergen Keil <[EMAIL PROTECTED]> wrote: > > Andreas Färber <[EMAIL PROTECTED]> 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...