This is the mail archive of the gcc-bugs@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]

Re: BOOTSTRAP FAILURE: segementation fault in genattrtab under hpux


>   > 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;

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