[02/13] gas: sframe: testsuite: add testcase for .cfi_register RA

Message ID 20251202073414.200246-3-indu.bhagat@oracle.com
State New
Headers
Series sframe: some refactoring and misc improvements |

Commit Message

Indu Bhagat Dec. 2, 2025, 7:34 a.m. UTC
  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.
---
 .../gas/cfi-sframe/cfi-sframe-x86_64-empty-5.d  | 17 +++++++++++++++++
 .../gas/cfi-sframe/cfi-sframe-x86_64-empty-5.s  | 11 +++++++++++
 gas/testsuite/gas/cfi-sframe/cfi-sframe.exp     |  1 +
 3 files changed, 29 insertions(+)
 create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-empty-5.d
 create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-empty-5.s
  

Patch

diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-empty-5.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-empty-5.d
new file mode 100644
index 00000000000..ce1fd3861cf
--- /dev/null
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-empty-5.d
@@ -0,0 +1,17 @@ 
+#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
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-empty-5.s b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-empty-5.s
new file mode 100644
index 00000000000..9a7bc317040
--- /dev/null
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-empty-5.s
@@ -0,0 +1,11 @@ 
+# 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
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe.exp b/gas/testsuite/gas/cfi-sframe/cfi-sframe.exp
index 96d34bfc17a..b60e4f8d68f 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe.exp
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe.exp
@@ -66,6 +66,7 @@  if { [istarget "x86_64-*-*"] && [gas_sframe_check] } then {
 	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"