This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: other/7114: ICE building strcoll.op from glibc-2.2.5


> Date: Wed, 17 Jul 2002 11:17:39 +0930
> From: Alan Modra <amodra@bigpond.net.au>

> On Tue, Jul 16, 2002 at 10:48:14AM -0700, Geoff Keating wrote:
> > The profiling function isn't allowed to clobber r30.  It never has
> > been, so this should be no surprise.
> 
> I'm not quite sure what to make of this response.  We're talking about
> this code from rs6000.c:10479
> 
>       if (current_function_needs_context)
> 	asm_fprintf (file, "\tmr %s,%s\n",
> 		     reg_names[30], reg_names[STATIC_CHAIN_REGNUM]);
>       fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
>       if (current_function_needs_context)
> 	asm_fprintf (file, "\tmr %s,%s\n",
> 		     reg_names[STATIC_CHAIN_REGNUM], reg_names[30]);

I see, I was confused.  I thought we were already using r30 for
STATIC_CHAIN_REGNUM.  The ABI specifies r31, but I see we can't use
that if we want trampolines to be efficient.

> This is currently emitted _before_ the prologue in the nested function,
> thus trashes r30.  I was considering the idea of adding a clobber of
> r30 to CALL_INSN_FUNCTION_USAGE when calling a nested function.  That's
> a workable solution, but means you need to zap r30 on all calls via
> function pointers too.

>From David's mail message when he put the code in:

     I have ripped out all of the stack PUSH/POP stuff that was
     causing ABI problems and replaced it with explicit moves to a
     temporary register.  This includes having the SVR4 ABI act more
     like AIX using a register instead of the dangerous stack
     save/restore game.  I could not test the SVR4 changes, so I would
     appreciate if the LinuxPPC testers would make sure that I have
     not broken anything when profiling is enabled.

So, thanks for testing it!  We now know this doesn't work. :-)

So, why don't we go back to the push/pop implementation, but this time
do it properly?  We'd only need to push/pop in the (rare)
nested-function case.

-- 
- Geoffrey Keating <geoffk@geoffk.org> <geoffk@redhat.com>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]