diff --git a/gas/gen-sframe.c b/gas/gen-sframe.c index 5b5e7b14b3a..5c8c7ebb175 100644 --- a/gas/gen-sframe.c +++ b/gas/gen-sframe.c @@ -1038,7 +1038,9 @@ sframe_xlate_do_def_cfa_register (struct sframe_xlate_ctx *xlate_ctx, return SFRAME_XLATE_ERR_NOTREPRESENTED; /* Not represented. */ } sframe_fre_set_cfa_base_reg (cur_fre, cfi_insn->u.r); - sframe_fre_set_cfa_offset (cur_fre, last_fre->cfa_offset); + if (last_fre) + sframe_fre_set_cfa_offset (cur_fre, last_fre->cfa_offset); + cur_fre->merge_candidate = false; return SFRAME_XLATE_OK; diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.d new file mode 100644 index 00000000000..d779b6d126e --- /dev/null +++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.d @@ -0,0 +1,21 @@ +#as: --gsframe +#objdump: --sframe=.sframe +#name: Check .cfi_def_cfa_register with no previous offset +#... +Contents of the SFrame section .sframe: + + Header : + + Version: SFRAME_VERSION_2 + Flags: NONE +#? CFA fixed FP offset: \-?\d+ +#? CFA fixed RA offset: \-?\d+ + Num FDEs: 1 + Num FREs: 1 + + Function Index : + + func idx \[0\]: pc = 0x0, size = 0 bytes + STARTPC +CFA +FP +RA + + 0+0000 +fp\+8 +u +f + +#pass diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.s b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.s new file mode 100644 index 00000000000..f3f985985e1 --- /dev/null +++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.s @@ -0,0 +1,4 @@ +# Although not a useful construct by itself, ensure graceful handling. + .cfi_startproc + .cfi_def_cfa_register 6 + .cfi_endproc diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe.exp b/gas/testsuite/gas/cfi-sframe/cfi-sframe.exp index a09946635c2..b353e27ce56 100644 --- a/gas/testsuite/gas/cfi-sframe/cfi-sframe.exp +++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe.exp @@ -90,6 +90,7 @@ if { [istarget "x86_64-*-*"] && [gas_sframe_check] } then { if { [gas_x86_64_check] } then { set ASFLAGS "$ASFLAGS --64" run_dump_test "cfi-sframe-x86_64-1" + run_dump_test "cfi-sframe-x86_64-2" run_dump_test "cfi-sframe-x86_64-empty-1" run_dump_test "cfi-sframe-x86_64-empty-2" run_dump_test "cfi-sframe-x86_64-empty-3"