linux-mips
[Top] [All Lists]

Re: GCC-3.4 reorders asm() with -O2

To: Andi Kleen <ak@suse.de>
Subject: Re: GCC-3.4 reorders asm() with -O2
From: Ralf Baechle <ralf@linux-mips.org>
Date: Mon, 26 Jan 2004 09:36:47 +0100
Cc: jh@suse.cz, echristo@redhat.com, hubicka@ucw.cz, eager@mvista.com, gcc@gcc.gnu.org, linux-mips@linux-mips.org
In-reply-to: <20040125202807.2d786115.ak@suse.de>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <4011C72C.613E25@mvista.com> <20040124011955.GA12040@nevyn.them.org> <20040124012303.GJ32288@atrey.karlin.mff.cuni.cz> <20040124050849.GB14951@nevyn.them.org> <1075009125.3649.0.camel@dzur.sfbay.redhat.com> <20040125100514.GA8810@kam.mff.cuni.cz> <20040125164758.79373419.ak@suse.de> <20040125170351.GA10938@nevyn.them.org> <20040125182643.GA25020@linux-mips.org> <20040125202807.2d786115.ak@suse.de>
Resent-date: Mon, 26 Jan 2004 13:10:46 +0100
Resent-from: ralf@linux-mips.org
Resent-message-id: <200401261210.i0QCAkAB012174@fluff.linux-mips.net>
Resent-to: linux-mips@linux-mips.org
Sender: linux-mips-bounce@linux-mips.org
User-agent: Mutt/1.4.1i
On Sun, Jan 25, 2004 at 08:28:07PM +0100, Andi Kleen wrote:

> > > It is.  Ralf already knows about the problem, I think - we leave
> > > markers outside of functions which define an entry point, save some
> > > additional registers to the stack, and try to fall through to the
> > > following function.  If the function gets emitted elsewhere, obviously,
> > > we've lost :)
> > > 
> > > [This is save_static_function...]
> > 
> > I only recently fixed the problem with the save_static() inline function
> > which of course was fragile, speculating on the compiler doing the
> > right thing ...  I'll cook up a fix ...
> 
> You can always use __attribute__((noinline))

Not in this particular case.   save_static's purpose was saving all
caller saved registers into the stack so they can be accessed via the
usual struct pt_regs pointer and to make that work it to be inline before
any change of these registers.  That was a small optimization but it also
was fragile so I removed that.  save_static_function was meant to be
used immediately preceeding a syscall's C function and served the same
purpose.  As the implementation ``knew'' gcc wasn't going to move around
the code just falling though worked fine but again that was fragile.

  Ralf

<Prev in Thread] Current Thread [Next in Thread>