With the recent update to setjmp, we now need to restore the hard frame pointer
directly from the saved frame pointer.  We don't need to adjust for the offset 
between
the virtual_stack_vars_rtx and the hard frame pointer.

Tested on hppa-unknwon-linux-gnu, hppa2.0w-hp-hpux11.11 and hppa64-hp-hpux11.11.

Committed to trunk.

Dave
-- 
John David Anglin  dave.ang...@bell.net

2019-07-01  Wilco Dijkstra  <wdijk...@arm.com>
            John David Anglin  <dang...@gcc.gnu.org>setjmp

        PR target/90963
        * config/pa/pa.md (builtin_longjmp): Restore hard_frame_pointer_rtx
        using saved frame pointer.

Index: config/pa/pa.md
===================================================================
--- config/pa/pa.md     (revision 272852)
+++ config/pa/pa.md     (working copy)
@@ -8700,9 +8700,7 @@
      restoring the gp.  */
   emit_move_insn (pv, lab);

-  /* Restore the stack and frame pointers.  The virtual_stack_vars_rtx
-     is saved instead of the hard_frame_pointer_rtx in the save area.
-     We need to adjust for the offset between these two values.  */
+  /* Restore the stack and frame pointers.  */
   fp = copy_to_reg (fp);
   emit_stack_restore (SAVE_NONLOCAL, stack);

@@ -8710,7 +8708,7 @@
   emit_insn (gen_blockage ());
   emit_clobber (hard_frame_pointer_rtx);
   emit_clobber (frame_pointer_rtx);
-  emit_move_insn (hard_frame_pointer_rtx, plus_constant (Pmode, fp, -8));
+  emit_move_insn (hard_frame_pointer_rtx, fp);

   emit_use (hard_frame_pointer_rtx);
   emit_use (stack_pointer_rtx);

Reply via email to