BOOTSTRAP FAILURE: segementation fault in genattrtab under hpux
John David Anglin
dave@hiauly1.hia.nrc.ca
Thu Nov 16 10:23:00 GMT 2000
> > 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;
More information about the Gcc-bugs
mailing list