[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] Re: Qemu 32-bit i386, gcc >= 3.4 spill error fix
From: |
Ben Taylor |
Subject: |
Re: [Qemu-devel] Re: Qemu 32-bit i386, gcc >= 3.4 spill error fix |
Date: |
Mon, 5 May 2008 01:17:43 -0400 |
On Sun, May 4, 2008 at 11:56 PM, Aurelien Jarno <address@hidden> wrote:
>
> On Sun, May 04, 2008 at 09:13:52PM -0400, Ben Taylor wrote:
> > On Sun, May 4, 2008 at 5:41 PM, Ben Taylor <address@hidden> wrote:
> > > This patch applies some additional flags to op.c and helper.c
> > > for compiling on i386 32-bit systems with gcc >= 3.4.
> > >
> > > This has been tested on both ubuntu 7.10/32-bit and
> > > Solaris SXCE/32-bit with both gcc-3.3 and gcc-3.4
> > > and the behavior is consistent between both.
> > >
> > > This is just a short term fix til the SSE ops are converted
> > > to TCG.
> > >
> >
> > I updated the patch to take care of -mtune options that might
> > be set by --extra-cflags, as well as the -march flags. I added
> > support for athlon-xp, as someone mentioned it in #qemu
> > with the exact error that helper.c sees in this context, so I
> > fixed it as I have an athlon-xp.
> >
> > Ben
> >
> > diff -ruN qemu.ORIG/Makefile.target qemu/Makefile.target
> > --- qemu.ORIG/Makefile.target 2008-05-04 17:21:08.000000000 -0400
> > +++ qemu/Makefile.target 2008-05-04 20:58:47.000000000 -0400
> > @@ -96,6 +96,12 @@
> > ifeq ($(ARCH),i386)
> > HELPER_CFLAGS+=-fomit-frame-pointer
> > OP_CFLAGS+=-mpreferred-stack-boundary=2 -fomit-frame-pointer
> > +# OP_CFLAGS needs this on 32-bit x86 system to avoid
> > +# a compiler spill error. This can probably go away
> > +# once the SSE ops have been converted to TCG
> > +ifeq ($(HAVE_GT_GCC_3_3), true)
> > +MTUNE_CFLAGS=-march=i486 -mtune=i686
>
> MTUNE is not really a good name, given it overrides both -mtune and
> -march. What about I386_CFLAGS?
Done.
> > @@ -309,7 +315,7 @@
> > $(DYNGEN) -g -o $@ $<
> >
> > op.o: op.c
> > - $(CC) $(OP_CFLAGS) $(CPPFLAGS) -c -o $@ $<
> > + $(CC) $(OP_CFLAGS) $(CPPFLAGS) $(MTUNE_CFLAGS) -c -o $@ $<
> >
> > machine.o: machine.c
> > $(CC) $(OP_CFLAGS) $(CPPFLAGS) -c -o $@ $<
> > @@ -317,9 +323,24 @@
> > # HELPER_CFLAGS is used for all the code compiled with static register
> > # variables
> > ifeq ($(TARGET_BASE_ARCH), i386)
> > + # if current host is i386 and gcc >= -3.4, CFLAGS requires some
> > + # handling as helper.c generates a compiler spill error if
> > + # "-march=i686 -mtune=i686" or -"march=athlon-xp -mtune=athlon-xp"
> > + # We set MTUNE_CFLAGS="-march=i486 -mtune=i686" here
> > + # Once SSE ops are converted to TCG, this can go away
> > + HCFLAGS=$(CFLAGS)
> > + ifeq ($(ARCH), i386)
> > + ifeq ($(HAVE_GT_GCC_3_3), true)
> > + # if CFLAGS has -march=i686, remove it so helper.o
> > + # can compile on 32-bit intel systems
> > + HCFLAGS=`echo $(CFLAGS) | sed 's,-march=i686,,' | sed
> 's,-mtune=i686,,' \
> > + | sed 's,-march=athlon-xp,,' | sed 's,-mtune=athlon-xp,,'`
> > + endif
> > + endif
> > +
>
> This part looks overcomplicated, and probably doesn't handle all cases.
> What's the point of trying to remove options from CFLAGS? Multiple
> -march or -mtune should be harmless, gcc should use the latest provided
> one. So just make sure MTUNE_CFLAGS or I386_CFLAGS is after CFLAGS.
Done. Because I had put the flags forward, they were getting over-riden by
CFLAGS. Now it is much simpler and we don't care what the user puts
in --extra-cflags.
Ben
qemu-gcc-3.4-spill-error-v3.patch
Description: Text Data