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.