This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: BOOTSTRAP FAILURE: segementation fault in genattrtab under hpux
- To: law at redhat dot com
- Subject: Re: BOOTSTRAP FAILURE: segementation fault in genattrtab under hpux
- From: "John David Anglin" <dave at hiauly1 dot hia dot nrc dot ca>
- Date: Thu, 16 Nov 2000 13:22:38 -0500 (EST)
- Cc: gcc-bugs at gcc dot gnu dot org
> > I think the reversal occurs because r3 is being used as an index register.
> > There is stuff in the machine definition like this:
> I seriously doubt it since hard_frame_pointer_rtx shouldn't have %r3 as
> its value unless %r3 really is the frame pointer. ie, if the frame pointer
> is eliminated %r3 should not be the value of hard_frame_pointer_rtx.
I think you put your finger on it. Rename registers follows reload.
I looked at gen_rtx_REG to see if the rtx for r3 could be the value of
hard_frame_pointer_rtx. The flag reload_in_progress is only set during
reload. After reload, a Pmode call to gen_rtx_REG with register number
3 will return the value of frame_pointer_rtx. Under the hpux 32 bit
ABI, the frame_pointer_rtx and arg_pointer_rtx are equivalent. There
is no hard frame pointer and in this case the hard_frame_pointer_rtx
is equivalent to the frame_pointer_rtx. I am testing the enclosed
patch.
If I am correct, there is still the issue as to why Pmode is used to
create the rtx for %r3. It is an index not a pointer.
Dave
--
J. David Anglin dave.anglin@nrc.ca
National Research Council of Canada (613) 990-0752 (FAX: 952-6605)
2000-11-16 John David Anglin <dave@hiauly1.hia.nrc.ca>
* emit-rtl.c (gen_rtx_REG): Don't return frame_pointer_rtx after
reload has completed for the FRAME_POINTER_REGNUM.
--- emit-rtl.c.orig Fri Nov 10 11:01:13 2000
+++ emit-rtl.c Thu Nov 16 12:59:09 2000
@@ -299,7 +299,7 @@
Also don't do this when we are making new REGs in reload, since
we don't want to get confused with the real pointers. */
- if (mode == Pmode && !reload_in_progress)
+ if (mode == Pmode && !(reload_in_progress || reload_completed))
{
if (regno == FRAME_POINTER_REGNUM)
return frame_pointer_rtx;