]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[SFrame-V3] ld: testsuite: x86: sframe: check link of signal frame and outermost...
authorIndu Bhagat <indu.bhagat@oracle.com>
Sat, 6 Dec 2025 04:57:30 +0000 (20:57 -0800)
committerIndu Bhagat <indu.bhagat@oracle.com>
Tue, 9 Dec 2025 08:26:15 +0000 (00:26 -0800)
In this test, two "special" case FDEs are linked:
  - Signal frame where the SFrame stack trace data is not
    respresentable.
  - _start like outermost frame function.

This is useful test for sframe_encoder's merge input sections
functionality and its associated write code-paths (sframe_encoder_write)
too.

ld/testsuite/
* ld-x86-64/sframe-link-1.d: New test.
* ld-x86-64/sframe-signal.s: New input file.
* ld-x86-64/sframe-start.s: Likewise.
* ld-x86-64/x86-64.exp: Add new test.

ld/testsuite/ld-x86-64/sframe-link-1.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/sframe-signal.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/sframe-start.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/x86-64.exp

diff --git a/ld/testsuite/ld-x86-64/sframe-link-1.d b/ld/testsuite/ld-x86-64/sframe-link-1.d
new file mode 100644 (file)
index 0000000..57881f8
--- /dev/null
@@ -0,0 +1,38 @@
+#as: --gsframe
+#source: sframe-start.s
+#source: sframe-signal.s
+#warning: \.cfi\_escape with op \(0xf\)
+#objdump: --sframe=.sframe
+#ld: -shared --no-rosegment -z separate-code
+#name: SFrame link special case FDEs - 1
+
+.*: +file format .*
+
+Contents of the SFrame section .sframe:
+  Header :
+
+    Version: SFRAME_VERSION_3
+    Flags: SFRAME_F_FDE_SORTED,
+           SFRAME_F_FDE_FUNC_START_PCREL
+    CFA fixed RA offset: \-8
+    Num FDEs: 4
+    Num FREs: 5
+
+  Function Index :
+
+    func idx \[0\]: pc = 0x1000, size = 16 bytes
+    STARTPC +CFA +FP +RA +
+    0+1000 +sp\+16 +u +f +
+    0+1006 +sp\+24 +u +f +
+
+    func idx \[1\]: pc = 0x1010, size = 16 bytes
+    STARTPC\[m\] +CFA +FP +RA +
+    0+0000 +sp\+8 +u +f +
+    0+000b +sp\+16 +u +f +
+
+    func idx \[2\]: pc = 0x1020, size = 8 bytes
+    STARTPC +CFA +FP +RA +
+    0+1020 +RA undefined
+
+    func idx \[3\]: pc = 0x1028, size = 2 bytes, attr = "S"
+    STARTPC +CFA +FP +RA +
diff --git a/ld/testsuite/ld-x86-64/sframe-signal.s b/ld/testsuite/ld-x86-64/sframe-signal.s
new file mode 100644 (file)
index 0000000..ba052da
--- /dev/null
@@ -0,0 +1,14 @@
+       .text
+       .globl  rest_rt
+       .type   rest_rt, @function
+rest_rt:
+       .cfi_startproc
+       .cfi_signal_frame
+       # DW_CFA_def_cfa_expression, length, DW_OP_breg9, (sleb)offset, DW_OP_deref
+       .cfi_escape 0xf,0x3,0x79,0x78,0x6
+       nop
+       .cfi_offset 6, -16
+       ret
+       .cfi_endproc
+       .size   rest_rt, .-rest_rt
+       .section        .note.GNU-stack,"",@progbits
diff --git a/ld/testsuite/ld-x86-64/sframe-start.s b/ld/testsuite/ld-x86-64/sframe-start.s
new file mode 100644 (file)
index 0000000..534afd8
--- /dev/null
@@ -0,0 +1,11 @@
+       .text
+       .globl  _start
+       .type   _start, @function
+_start:
+       .cfi_startproc
+       .cfi_undefined 16
+       xor     %rbp, %rbp
+       call foo
+       .cfi_endproc
+       .size   _start, .-_start
+       .section        .note.GNU-stack,"",@progbits
index 45103ae1e4d9a4cd8b7de6c026dbfaa9af67884e..ef9724134cf014962d24503edab83a0254f43b2c 100644 (file)
@@ -587,6 +587,7 @@ run_dump_test "tls-le-pic-3-x32"
 
 if { ![skip_sframe_tests] } {
     run_dump_test "sframe-simple-1"
+    run_dump_test "sframe-link-1"
     run_dump_test "sframe-command-line-1"
     run_dump_test "sframe-reloc-1"
     run_dump_test "sframe-plt-1"