PS: Adding a testcase is not strictly necessary now. Once the SFrame V3
patches are in, this testcase will need to be reverted. SFrame V3
allows a new FDE type where .cfi_register RA may be represented.
gas/testsuite/
* gas/cfi-sframe/cfi-sframe.exp: New test.
* gas/cfi-sframe/cfi-sframe-x86_64-empty-5.d: New test.
* gas/cfi-sframe/cfi-sframe-x86_64-empty-5.s: New test.
---
[Changes in V2]
- Add a clear note in commit log that this patch is eventually
reverted after SFrame V3 make it in.
- I am inclining towards not putting this in.
[End of changes in V2]
--- /dev/null
+#as: --gsframe
+#warning: RA register 16 in \.cfi\_register
+#objdump: --sframe=.sframe
+#name: DW_CFA_register with RA register
+#...
+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
+# Testcase to ensure .cfi_register for RA is not treated as safe to skip.
+# Even for ABIs which do not track RA, an explicit manouver of RA like so
+# cannot be represented. The expectation is that such a pattern is caught and
+# SFrame FDE is skipped. Such a sequence may be used in longjump implementation
+# on x86_64, for instance.
+ .cfi_startproc
+ .long 0
+ .cfi_def_cfa_offset 16
+ .cfi_register 16, 9
+ .long 0
+ .cfi_endproc
run_dump_test "cfi-sframe-x86_64-empty-2"
run_dump_test "cfi-sframe-x86_64-empty-3"
run_dump_test "cfi-sframe-x86_64-empty-4"
+ run_dump_test "cfi-sframe-x86_64-empty-5"
run_dump_test "cfi-sframe-x86_64-empty-pr33277"
run_dump_test "cfi-sframe-x86_64-ra-undefined-1"
set ASFLAGS "$old_ASFLAGS"