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.