From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16513 invoked by alias); 17 Jul 2002 07:16:03 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 16434 invoked by uid 71); 17 Jul 2002 07:16:02 -0000 Date: Wed, 17 Jul 2002 00:16:00 -0000 Message-ID: <20020717071602.16430.qmail@sources.redhat.com> To: amodra@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: Geoff Keating Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5 Reply-To: Geoff Keating X-SW-Source: 2002-07/txt/msg00501.txt.bz2 List-Id: The following reply was made to PR other/7114; it has been noted by GNATS. From: Geoff Keating To: amodra@bigpond.net.au Cc: d.mueller@elsoft.ch, gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org, dje@watson.ibm.com Subject: Re: other/7114: ICE building strcoll.op from glibc-2.2.5 Date: Wed, 17 Jul 2002 00:07:11 -0700 > Date: Wed, 17 Jul 2002 11:17:39 +0930 > From: Alan Modra > 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