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