[COMMITTED 22/36] [SFrame-V3] gas: x86: testsuite: add new testcases for SFRAME_FDE_TYPE_FLEX
Indu Bhagat
indu.bhagat@oracle.com
Fri Jan 16 06:10:22 GMT 2026
gas/testsuite/
* gas/cfi-sframe/cfi-sframe-x86_64-4.d: New test.
* gas/cfi-sframe/cfi-sframe-x86_64-4.s: Non SP/FP based CFA.
* gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-1.d: New test.
* gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-1.s: DRAP pattern
with both CFA expression and FP expression.
* gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-2.d: New test.
* gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-2.s: Test CFA
expression with sleb128.
* gas/cfi-sframe/cfi-sframe.exp: Add new tests.
---
.../gas/cfi-sframe/cfi-sframe-x86_64-4.d | 29 +++++++
.../gas/cfi-sframe/cfi-sframe-x86_64-4.s | 80 +++++++++++++++++++
.../cfi-sframe/cfi-sframe-x86_64-esc-expr-1.d | 26 ++++++
.../cfi-sframe/cfi-sframe-x86_64-esc-expr-1.s | 43 ++++++++++
.../cfi-sframe/cfi-sframe-x86_64-esc-expr-2.d | 24 ++++++
.../cfi-sframe/cfi-sframe-x86_64-esc-expr-2.s | 13 +++
gas/testsuite/gas/cfi-sframe/cfi-sframe.exp | 3 +
7 files changed, 218 insertions(+)
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-4.d
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-4.s
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-1.d
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-1.s
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-2.d
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-2.s
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-4.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-4.d
new file mode 100644
index 00000000000..dfbca8b8562
--- /dev/null
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-4.d
@@ -0,0 +1,29 @@
+#as: --gsframe
+#objdump: --sframe=.sframe
+#name: Non SP-FP based CFA in flex FDE type
+#...
+Contents of the SFrame section .sframe:
+
+ Header :
+
+ Version: SFRAME_VERSION_3
+ Flags: SFRAME_F_FDE_FUNC_START_PCREL
+#? CFA fixed FP offset: \-?\d+
+#? CFA fixed RA offset: \-?\d+
+ Num FDEs: 1
+ Num FREs: 8
+
+ Function Index :
+
+ func idx \[0\]: pc = 0x0, size = 199 bytes, attr = "F"
+ STARTPC +CFA +FP +RA +
+ 0+0000 +sp\+8 +u +f +
+ 0+0008 +sp\+40 +u +f +
+ 0+0014 +r3\+40 +u +f +
+ 0+0073 +sp\+40 +u +f +
+ 0+007b +sp\-8 +u +f +
+ 0+007e +r3\+40 +u +f +
+ 0+00c2 +sp\+40 +u +f +
+ 0+00c6 +sp\-8 +u +f +
+
+#pass
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-4.s b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-4.s
new file mode 100644
index 00000000000..f94787458ff
--- /dev/null
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-4.s
@@ -0,0 +1,80 @@
+# Code from /usr/bin/qemu-hppa-static
+#
+# 00049214 0000000000000030 00000050 FDE cie=000491c8 pc=0000000000616870..0000000000616c5f
+# LOC CFA rbx ra
+# 0000000000616870 rsp+24 u c-8
+# 0000000000616878 rsp+56 u c-8
+# 000000000061687c rsp+56 c-56 c-8
+# 0000000000616884 rbx+56 c-56 c-8
+# 0000000000616b86 rsp+56 u c-8
+# 0000000000616b8a rsp+8 u c-8
+# 0000000000616b8d rbx+56 c-56 c-8
+# 0000000000616c5a rsp+56 u c-8
+# 0000000000616c5e rsp+8 u c-8
+ .p2align 4
+ .globl foo
+ .type foo, @function
+foo:
+ .cfi_startproc
+ endbr64
+ sub $0x20,%rsp
+ .cfi_adjust_cfa_offset 0x20
+ mov %rbx,(%rsp)
+ .cfi_offset 0x3, 56
+ mov %rax,0x8(%rsp)
+ mov %rsp,%rbx
+ .cfi_def_cfa_register rbx
+ .cfi_remember_state
+ and $0xffffffffffffffe0,%rsp
+ sub $0x380,%rsp
+ mov %rsp,0x18(%rbx)
+ mov %rdx,(%rsp)
+ mov %r8,0x8(%rsp)
+ mov %r9,0x10(%rsp)
+ mov %rcx,0x18(%rsp)
+ mov %rsi,0x20(%rsp)
+ mov %rdi,0x28(%rsp)
+ mov %rbp,0x30(%rsp)
+ lea 0x30(%rbx),%rax
+ mov %rax,0x38(%rsp)
+ vmovdqa %xmm0,0x40(%rsp)
+
+ mov 0x10(%rbx),%rcx
+ test %rcx,%rcx
+ jns 0x616b8d
+ mov 0x18(%rsp),%rcx
+ mov 0x20(%rsp),%rsi
+ mov 0x28(%rsp),%rdi
+ mov %rbx,%rsp
+ .cfi_def_cfa_register rsp
+ mov (%rsp),%rbx
+ add $0x30,%rsp
+ .cfi_adjust_cfa_offset -0x30
+ jmp *%r11
+ .cfi_restore_state
+ lea 0x38(%rbx),%rsi
+ add $0x8,%rcx
+ and $0xfffffffffffffff0,%rcx
+ sub %rcx,%rsp
+ mov %rsp,%rdi
+ rep movsb (%rsi),(%rdi)
+ mov 0x18(%rdi),%rcx
+ mov 0x20(%rdi),%rsi
+ mov 0x28(%rdi),%rdi
+ call *%r11
+
+ inc %si
+ jne 0x616c4b
+ vmovdqa 0x90(%rsp),%ymm1
+
+ fldt 0x40(%rsp)
+ fldt 0x30(%rsp)
+ mov %rbx,%rsp
+ mov (%rsp),%rbx
+ .cfi_def_cfa_register rsp
+ .cfi_restore rbx
+ add $0x30,%rsp
+ .cfi_adjust_cfa_offset -0x30
+ ret
+ .cfi_endproc
+ .size foo, .-foo
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-1.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-1.d
new file mode 100644
index 00000000000..61b76aa400a
--- /dev/null
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-1.d
@@ -0,0 +1,26 @@
+#as: --gsframe
+#objdump: --sframe=.sframe
+#name: DRAP pattern with r10-based CFA
+#...
+Contents of the SFrame section .sframe:
+
+ Header :
+
+ Version: SFRAME_VERSION_3
+ Flags: SFRAME_F_FDE_FUNC_START_PCREL
+#? CFA fixed FP offset: \-?\d+
+#? CFA fixed RA offset: \-?\d+
+ Num FDEs: 1
+ Num FREs: 6
+
+ Function Index :
+
+ func idx \[0\]: pc = 0x0, size = 95 bytes, attr = "F"
+ STARTPC +CFA +FP +RA +
+ 0+0000 +sp\+8 +u +f +
+ 0+0009 +r10\+0 +u +f +
+ 0+0018 +r10\+0 +\(fp\+0\) +U +
+ 0+001a +\(fp\-8\) +\(fp\+0\) +U +
+ 0+0052 +r10\+0 +\(fp\+0\) +U +
+ 0+005e +sp\+8 +\(fp\+0\) +U +
+#pass
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-1.s b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-1.s
new file mode 100644
index 00000000000..0e7cbf69e67
--- /dev/null
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-1.s
@@ -0,0 +1,43 @@
+ .p2align 4
+ .globl _ITM_RM256
+ .type _ITM_RM256, @function
+_ITM_RM256:
+ .cfi_startproc
+ endbr64
+ leaq 8(%rsp), %r10
+ .cfi_def_cfa r10, 0
+ andq $-32, %rsp
+ movq %rdi, %rdx
+ pushq -8(%r10)
+ pushq %rbp
+ movq %rsp, %rbp
+ # DW_CFA_expression, (uleb)reg, length, DW_OP_breg6, (sleb)offset
+ .cfi_escape 0x10,0x6,0x2,0x76,0
+ pushq %r10
+ # DW_CFA_def_cfa_expression, length, DW_OP_breg6, (sleb)offset, DW_OP_deref
+ .cfi_escape 0xf,0x3,0x76,0x78,0x6
+ subq $48, %rsp
+
+ movq %fs:(80+1*8),%rdi
+ rorq $17,%rdi
+ xorq %fs:48,%rdi
+
+ movq (%rdi), %rax
+ leaq -48(%rbp), %rsi
+ pushq $1
+ xorl %r9d, %r9d
+ xorl %r8d, %r8d
+ movl $32, %ecx
+ call *608(%rax)
+
+ movq -8(%rbp), %r10
+ .cfi_def_cfa r10, 0
+ vmovaps -48(%rbp), %ymm0
+ popq %rax
+ popq %rdx
+ leave
+ leaq -8(%r10), %rsp
+ .cfi_def_cfa rsp, 8
+ ret
+ .cfi_endproc
+ .size _ITM_RM256, .-_ITM_RM256
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-2.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-2.d
new file mode 100644
index 00000000000..1a5f62872c6
--- /dev/null
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-2.d
@@ -0,0 +1,24 @@
+#as: --gsframe
+#objdump: --sframe=.sframe
+#name: DRAP pattern with sleb128
+#...
+Contents of the SFrame section .sframe:
+
+ Header :
+
+ Version: SFRAME_VERSION_3
+ Flags: SFRAME_F_FDE_FUNC_START_PCREL
+#? CFA fixed FP offset: \-?\d+
+#? CFA fixed RA offset: \-?\d+
+ Num FDEs: 1
+ Num FREs: 4
+
+ Function Index :
+
+ func idx \[0\]: pc = 0x0, size = 15 bytes, attr = "F"
+ STARTPC +CFA +FP +RA +
+ 0+0000 +sp\+8 +u +f +
+ 0+0004 +sp\+40 +u +f +
+ 0+0008 +\(fp-48\) +u +f +
+ 0+000b +sp\+8 +u +f +
+#pass
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-2.s b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-2.s
new file mode 100644
index 00000000000..180aa7f66b6
--- /dev/null
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-esc-expr-2.s
@@ -0,0 +1,13 @@
+ .type foo, @function
+foo:
+ .cfi_startproc
+ sub $0x20,%rsp
+ .cfi_adjust_cfa_offset 0x20
+ .long 0
+ # DW_CFA_def_cfa_expression, length, DW_OP_breg6, (sleb)offset, DW_OP_deref
+ .cfi_escape 0xf,0x3,0x76,sleb128(-48),0x6
+ mov %rax, %rdi
+ .cfi_def_cfa rsp, 8
+ .long 0
+ .cfi_endproc
+ .size foo, .-foo
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe.exp b/gas/testsuite/gas/cfi-sframe/cfi-sframe.exp
index d42d2ecae18..04edb47ea19 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe.exp
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe.exp
@@ -61,6 +61,9 @@ if { [istarget "x86_64-*-*"] && [gas_sframe_check] } then {
run_dump_test "cfi-sframe-x86_64-1"
run_dump_test "cfi-sframe-x86_64-2"
run_dump_test "cfi-sframe-x86_64-3"
+ run_dump_test "cfi-sframe-x86_64-4"
+ run_dump_test "cfi-sframe-x86_64-esc-expr-1"
+ run_dump_test "cfi-sframe-x86_64-esc-expr-2"
run_dump_test "cfi-sframe-x86_64-pr33170"
run_dump_test "cfi-sframe-x86_64-pr33756"
run_dump_test "cfi-sframe-x86_64-signal-1"
--
2.43.0
More information about the Binutils
mailing list