static int
sframe_xlate_do_remember_state (struct sframe_xlate_ctx *xlate_ctx)
{
- const struct sframe_row_entry *last_fre = xlate_ctx->last_fre;
+ const struct sframe_row_entry *cur_fre = xlate_ctx->cur_fre;
/* If there is no FRE state to remember, nothing to do here. Return
early with non-zero error code, this will cause no SFrame stack trace
info for the function involved. */
- if (!last_fre)
+ if (!cur_fre)
{
as_warn (_("no SFrame FDE emitted; "
".cfi_remember_state without prior SFrame FRE state"));
if (!xlate_ctx->remember_fre)
xlate_ctx->remember_fre = sframe_row_entry_new ();
- sframe_row_entry_initialize (xlate_ctx->remember_fre, last_fre);
+ sframe_row_entry_initialize (xlate_ctx->remember_fre, cur_fre);
return SFRAME_XLATE_OK;
}
--- /dev/null
+#as: --gsframe
+#objdump: --sframe=.sframe
+#name: SFrame generation on s390x - .cfi_remember_state after .cfi_startproc PR gas/33756
+#...
+Contents of the SFrame section .sframe:
+
+ Header :
+
+ Version: SFRAME_VERSION_2
+ Flags: SFRAME_F_FDE_FUNC_START_PCREL
+ Num FDEs: 1
+ Num FREs: 4
+
+ Function Index :
+
+ func idx \[0\]: pc = 0x0, size = 20 bytes
+ STARTPC +CFA +FP +RA +
+ 0+0000 +sp\+160 +u +u +
+ 0+0006 +sp\+160 +c-72 +c-48 +
+ 0+000c +sp\+320 +c-72 +c-48 +
+ 0+0012 +sp\+160 +u +u +
+
+#pass
--- /dev/null
+ .text
+ .type foo, @function
+foo:
+ .cfi_startproc
+ .cfi_remember_state
+ stmg %r6,%r15,48(%r15)
+ .cfi_rel_offset 6, 48
+ .cfi_rel_offset 7, 56
+ .cfi_rel_offset 8, 64
+ .cfi_rel_offset 9, 72
+ .cfi_rel_offset 10, 80
+ .cfi_rel_offset 11, 88
+ .cfi_rel_offset 12, 96
+ .cfi_rel_offset 13, 104
+ .cfi_rel_offset 14, 112
+ .cfi_rel_offset 15, 120
+ lay %r15,-160(%r15)
+ .cfi_adjust_cfa_offset 160
+ lmg %r6,%r15,160+48(%r15)
+ .cfi_restore_state
+ br %r14
+ .cfi_endproc
+ .size foo, .-foo
--- /dev/null
+#as: --gsframe
+#objdump: --sframe=.sframe
+#name: cfi_remember_state after cfi_startproc PR gas/33756
+#...
+Contents of the SFrame section .sframe:
+
+ Header :
+
+ Version: SFRAME_VERSION_2
+ Flags: SFRAME_F_FDE_FUNC_START_PCREL
+#? CFA fixed FP offset: \-?\d+
+#? CFA fixed RA offset: \-?\d+
+ Num FDEs: 1
+ Num FREs: 3
+
+ Function Index :
+
+ func idx \[0\]: pc = 0x0, size = 16 bytes
+ STARTPC +CFA +FP +RA +
+ 0+0000 +sp\+8 +u +[uf] +
+ 0+0004 +sp\+16 +u +[uf] +
+ 0+000c +sp\+8 +u +[uf] +
+
+#pass
--- /dev/null
+ .text
+ .type foo, @function
+foo:
+ .cfi_startproc
+ .cfi_remember_state
+ .long 0
+ .cfi_def_cfa_offset 16
+ .long 0
+ .long 0
+ .cfi_restore_state
+ .long 0
+ .cfi_endproc
+ .size foo, .-foo
run_dump_test "cfi-sframe-common-11"
run_dump_test "cfi-sframe-common-12"
- run_dump_test "common-empty-1"
run_dump_test "common-empty-2"
run_dump_test "common-empty-3"
}
run_dump_test "cfi-sframe-x86_64-2"
run_dump_test "cfi-sframe-x86_64-3"
run_dump_test "cfi-sframe-x86_64-pr33170"
+ run_dump_test "cfi-sframe-x86_64-pr33756"
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"
run_dump_test "cfi-sframe-s390x-fpra-register-1"
run_dump_test "cfi-sframe-s390x-fpra-register-2"
run_dump_test "cfi-sframe-s390x-ra-undefined-1"
+ run_dump_test "cfi-sframe-s390x-pr33756"
}
+++ /dev/null
-#as: --gsframe
-#warning: \.cfi_remember_state without prior SFrame FRE state
-#objdump: --sframe=.sframe
-#name: Uninteresting cfi directives generate an empty SFrame section
-#...
-Contents of the SFrame section .sframe:
-
- Header :
-
- Version: SFRAME_VERSION_2
- Flags: SFRAME_F_FDE_FUNC_START_PCREL
-#? CFA fixed FP offset: \-?\d+
-#? CFA fixed RA offset: \-?\d+
- Num FDEs: 0
- Num FREs: 0
-
-#pass
+++ /dev/null
- .cfi_sections .sframe
- .cfi_startproc
- .cfi_remember_state
- .cfi_restore_state
- .cfi_endproc