https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90963
--- Comment #4 from dave.anglin at bell dot net --- On 2019-06-24 12:59 p.m., wilco at gcc dot gnu.org wrote: > Looking into this, pa.md is one of a few targets which defines > builtin_longjmp. > This subtracts 8 from the loaded frame pointer, but that's now wrong since the > hard frame pointer is store. So this also needs to be updated like > nonlocal_goto: > > --- a/gcc/config/pa/pa.md > +++ b/gcc/config/pa/pa.md > @@ -8713,7 +8710,7 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" > 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); > > After this setjmp-1.c looks correct: > > sub2: > .PROC > .CALLINFO FRAME=64,NO_CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=3 > .ENTRY > copy %r3,%r1 > stw %r2,-20(%r30) > copy %r30,%r3 > stwm %r1,64(%r30) > addil LR'buf-$global$,%r27 > ldo RR'buf-$global$(%r1),%r28 > ldw 0(%r28),%r19 // load hard frame pointer > ldw 4(%r28),%r1 > ldw 8(%r28),%r30 > copy %r19,%r3 // assign hfp with offset 0 > be,n 0(%sr4,%r1) > > > main > ... > stw %r30,8(%r1) > stw %r28,4(%r1) > ldo 512(%r30),%r30 > depi 0,31,3,%r20 > stw %r3,0(%r1) // store hard frame pointer > ldi 0,%r28 > ldi 115,%r21 > > I can commit this if you like or do you want to test it first? The change fixes all the test failures on hppa-unknown-linux-gnu. Would you please commit with comment update. Thanks, Dave