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: Andreas Färber
Subject: Re: [Qemu-devel] Configuring qemu on Solaris
Date: Tue, 8 Jan 2008 22:59:21 +0100


Am 08.01.2008 um 11:39 schrieb Juergen Keil:


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.

Solaris 10 8/07 has exactly that gcc --version string and exhibits the behavior described above, so it does seem there is no patch to apply. Thanks for providing these detailed steps.

Unfortunately QEMU unconditionally attempts to compile with -m64 on amd64, and the alternative CSW and SFW GCC versions didn't allow that last time I checked.

The behavior I'm seeing is that sparc-softmmu boots Linux fine until just before the login prompt and then hangs there, i386-softmmu doesn't even get to the BIOS (no crashes).

Andreas



reply via email to

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