forked from Imagelibrary/binutils-gdb
gas: aarch64: testsuite: add new tests for SCFI
Similar to the x86_64 testcases, some .s files contain the corresponding
CFI directives. This helps in validating the synthesized CFI by running
those tests with and without the --scfi=experimental command line
option.
Apart from the existing scfi-diag-*.s tests in gas/scfi/x86_64
directory, the newly added scfi-diag-1.s in this patch highlights an
aarch64-specific diagnostic:
"Warning: SCFI: ignored probable save/restore op with reg offset"
Additionally, some testcases are added to showcase the (currently) unsupported
patterns, e.g., scfi-unsupported-1.s
mov x16, 4384
sub sp, sp, x16
gas/testsuite/:
* gas/scfi/README: Update comment to include aarch64.
* gas/scfi/aarch64/scfi-aarch64.exp: New file.
* gas/scfi/aarch64/ginsn-cofi-1.l: New test.
* gas/scfi/aarch64/ginsn-cofi-1.s: New test.
* gas/scfi/aarch64/ginsn-ldst-1.l: New test.
* gas/scfi/aarch64/ginsn-ldst-1.s: New test.
* gas/scfi/aarch64/scfi-cb-1.d: New test.
* gas/scfi/aarch64/scfi-cb-1.l: New test.
* gas/scfi/aarch64/scfi-cb-1.s: New test.
* gas/scfi/aarch64/scfi-cfg-1.d: New test.
* gas/scfi/aarch64/scfi-cfg-1.l: New test.
* gas/scfi/aarch64/scfi-cfg-1.s: New test.
* gas/scfi/aarch64/scfi-cfg-2.d: New test.
* gas/scfi/aarch64/scfi-cfg-2.l: New test.
* gas/scfi/aarch64/scfi-cfg-2.s: New test.
* gas/scfi/aarch64/scfi-cfg-3.d: New test.
* gas/scfi/aarch64/scfi-cfg-3.l: New test.
* gas/scfi/aarch64/scfi-cfg-3.s: New test.
* gas/scfi/aarch64/scfi-cond-br-1.d: New test.
* gas/scfi/aarch64/scfi-cond-br-1.l: New test.
* gas/scfi/aarch64/scfi-cond-br-1.s: New test.
* gas/scfi/aarch64/scfi-diag-1.l: New test.
* gas/scfi/aarch64/scfi-diag-1.s: New test.
* gas/scfi/aarch64/scfi-ldrp-1.d: New test.
* gas/scfi/aarch64/scfi-ldrp-1.l: New test.
* gas/scfi/aarch64/scfi-ldrp-1.s: New test.
* gas/scfi/aarch64/scfi-ldrp-2.d: New test.
* gas/scfi/aarch64/scfi-ldrp-2.l: New test.
* gas/scfi/aarch64/scfi-ldrp-2.s: New test.
* gas/scfi/aarch64/scfi-strp-1.d: New test.
* gas/scfi/aarch64/scfi-strp-1.l: New test.
* gas/scfi/aarch64/scfi-strp-1.s: New test.
* gas/scfi/aarch64/scfi-strp-2.d: New test.
* gas/scfi/aarch64/scfi-strp-2.l: New test.
* gas/scfi/aarch64/scfi-strp-2.s: New test.
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
Notes on the SCFI testsuite in GAS:
|
Notes on the SCFI testsuite in GAS:
|
||||||
|
|
||||||
* At this time, SCFI machinery is only supported for x86_64.
|
* At this time, SCFI machinery is only supported for x86_64 and aarch64.
|
||||||
|
|
||||||
* When adding more tests, please keep CFI annotations updated in the .s files.
|
* When adding more tests, please keep CFI annotations updated in the .s files.
|
||||||
Ideally the test should be run with and without --scfi (as is done currently
|
Ideally the test should be run with and without --scfi (as is done currently
|
||||||
|
|||||||
30
gas/testsuite/gas/scfi/aarch64/ginsn-cofi-1.l
Normal file
30
gas/testsuite/gas/scfi/aarch64/ginsn-cofi-1.l
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
.*: Assembler messages:
|
||||||
|
.*:16: Error: untraceable control flow for func 'foo'
|
||||||
|
|
||||||
|
AARCH64 GAS .*
|
||||||
|
|
||||||
|
1 # Testcase for a variety of change of flow instructions
|
||||||
|
2 # Because some of these are indirect branches, SCFI will bail out
|
||||||
|
3 # with an error. This test merely checks that the ginsn creation
|
||||||
|
4 # process can handle these insns gracefully.
|
||||||
|
5 .text
|
||||||
|
6 .align 2
|
||||||
|
7 .global foo
|
||||||
|
8 .type foo, %function
|
||||||
|
8 ginsn: SYM FUNC_BEGIN
|
||||||
|
9 foo:
|
||||||
|
9 ginsn: SYM foo
|
||||||
|
10 \?\?\?\? 00000094 bl dump_bt
|
||||||
|
10 ginsn: CALL
|
||||||
|
11 \?\?\?\? 02000014 b .L3
|
||||||
|
11 ginsn: JMP
|
||||||
|
12 \?\?\?\? 20021FD6 br x17
|
||||||
|
12 ginsn: JMP %r17,
|
||||||
|
13 .L3:
|
||||||
|
13 ginsn: SYM .L3
|
||||||
|
14 \?\?\?\? 60003FD6 blr x3
|
||||||
|
14 ginsn: CALL
|
||||||
|
15 \?\?\?\? C0035FD6 ret
|
||||||
|
15 ginsn: RET
|
||||||
|
16 .size foo, .-foo
|
||||||
|
16 ginsn: SYM FUNC_END
|
||||||
16
gas/testsuite/gas/scfi/aarch64/ginsn-cofi-1.s
Normal file
16
gas/testsuite/gas/scfi/aarch64/ginsn-cofi-1.s
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# Testcase for a variety of change of flow instructions
|
||||||
|
# Because some of these are indirect branches, SCFI will bail out
|
||||||
|
# with an error. This test merely checks that the ginsn creation
|
||||||
|
# process can handle these insns gracefully.
|
||||||
|
.text
|
||||||
|
.align 2
|
||||||
|
.global foo
|
||||||
|
.type foo, %function
|
||||||
|
foo:
|
||||||
|
bl dump_bt
|
||||||
|
b .L3
|
||||||
|
br x17
|
||||||
|
.L3:
|
||||||
|
blr x3
|
||||||
|
ret
|
||||||
|
.size foo, .-foo
|
||||||
40
gas/testsuite/gas/scfi/aarch64/ginsn-ldst-1.l
Normal file
40
gas/testsuite/gas/scfi/aarch64/ginsn-ldst-1.l
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
AARCH64 GAS .*
|
||||||
|
|
||||||
|
1 # Testcase for a variety of ld st instructions
|
||||||
|
2 .text
|
||||||
|
3 .align 2
|
||||||
|
4 .global foo
|
||||||
|
5 .type foo, %function
|
||||||
|
5 ginsn: SYM FUNC_BEGIN
|
||||||
|
6 foo:
|
||||||
|
6 ginsn: SYM foo
|
||||||
|
7 # ldstpair_indexed
|
||||||
|
8 0000 FFFF8629 stp wzr, wzr, \[sp, 52\]!
|
||||||
|
8 ginsn: ADD %r31, 52, %r31
|
||||||
|
8 ginsn: STORE %r1, \[%r31\+0\]
|
||||||
|
8 ginsn: STORE %r1, \[%r31\+4\]
|
||||||
|
9 0004 E00782A9 stp x0, x1, \[sp, 32\]!
|
||||||
|
9 ginsn: ADD %r31, 32, %r31
|
||||||
|
9 ginsn: STORE %r0, \[%r31\+0\]
|
||||||
|
9 ginsn: STORE %r1, \[%r31\+8\]
|
||||||
|
10 0008 E827BC6D stp d8, d9, \[sp, -64\]!
|
||||||
|
10 ginsn: ADD %r31, -64, %r31
|
||||||
|
11 # Following is skipped from ginsn generation
|
||||||
|
12 000c E00702AD stp q0, q1, \[sp, 64\]
|
||||||
|
13 # ldstpair_off
|
||||||
|
14 0010 FFFF0629 stp wzr, wzr, \[sp, 52\]
|
||||||
|
14 ginsn: STORE %r1, \[%r31\+52\]
|
||||||
|
14 ginsn: STORE %r1, \[%r31\+56\]
|
||||||
|
15 0014 1F7840AD ldp q31, q30, \[x0\]
|
||||||
|
16 0018 E827C46C ldp d8, d9, \[sp\], 64
|
||||||
|
16 ginsn: ADD %r31, 64, %r31
|
||||||
|
17 # ldst_imm9
|
||||||
|
18 001c E7FF4F38 ldrb w7, \[sp, 255\]!
|
||||||
|
18 ginsn: ADD %r31, 255, %r31
|
||||||
|
18 ginsn: LOAD \[%r31\+0\], %r7
|
||||||
|
19 0020 FDCFC23C ldr q29, \[sp, 44\]!
|
||||||
|
19 ginsn: ADD %r31, 44, %r31
|
||||||
|
20 0024 C0035FD6 ret
|
||||||
|
20 ginsn: RET
|
||||||
|
21 .size foo, .-foo
|
||||||
|
21 ginsn: SYM FUNC_END
|
||||||
21
gas/testsuite/gas/scfi/aarch64/ginsn-ldst-1.s
Normal file
21
gas/testsuite/gas/scfi/aarch64/ginsn-ldst-1.s
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# Testcase for a variety of ld st instructions
|
||||||
|
.text
|
||||||
|
.align 2
|
||||||
|
.global foo
|
||||||
|
.type foo, %function
|
||||||
|
foo:
|
||||||
|
# ldstpair_indexed
|
||||||
|
stp wzr, wzr, [sp, 52]!
|
||||||
|
stp x0, x1, [sp, 32]!
|
||||||
|
stp d8, d9, [sp, -64]!
|
||||||
|
# Following is skipped from ginsn generation
|
||||||
|
stp q0, q1, [sp, 64]
|
||||||
|
# ldstpair_off
|
||||||
|
stp wzr, wzr, [sp, 52]
|
||||||
|
ldp q31, q30, [x0]
|
||||||
|
ldp d8, d9, [sp], 64
|
||||||
|
# ldst_imm9
|
||||||
|
ldrb w7, [sp, 255]!
|
||||||
|
ldr q29, [sp, 44]!
|
||||||
|
ret
|
||||||
|
.size foo, .-foo
|
||||||
32
gas/testsuite/gas/scfi/aarch64/ginsn-misc-1.l
Normal file
32
gas/testsuite/gas/scfi/aarch64/ginsn-misc-1.l
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
.*: Assembler messages:
|
||||||
|
.*:9: Error: SCFI: unsupported stack manipulation pattern
|
||||||
|
.*:15: Error: SCFI: forward pass failed for func 'foo'
|
||||||
|
|
||||||
|
AARCH64 GAS .*
|
||||||
|
|
||||||
|
|
||||||
|
1 # Testcase for a variety of misc instructions
|
||||||
|
2 # Ensure graceful handling, irrespective of ginsn generation
|
||||||
|
3 symbol:
|
||||||
|
4 \?\?\?\? 7700 .string "w"
|
||||||
|
5
|
||||||
|
6 .type foo, %function
|
||||||
|
6 ginsn: SYM FUNC_BEGIN
|
||||||
|
7 foo:
|
||||||
|
7 ginsn: SYM foo
|
||||||
|
8 \?\?\?\? 00001024 mov x16, 4384
|
||||||
|
8 82D2
|
||||||
|
8 ginsn: MOV 4384, %r16
|
||||||
|
9 \?\?\?\? FF63308B add sp, sp, x16
|
||||||
|
9 ginsn: ADD %r31, %r16, %r31
|
||||||
|
10 \?\?\?\? 00000090 adrp x0, symbol
|
||||||
|
11 \?\?\?\? 1F000091 add sp, x0, :lo12:symbol
|
||||||
|
11 ginsn: OTH 0, 0, %r31
|
||||||
|
12 \?\?\?\? FF0F00D1 sub sp, sp, 3
|
||||||
|
12 ginsn: SUB %r31, 3, %r31
|
||||||
|
13 \?\?\?\? FF0F0091 add sp, sp, 3
|
||||||
|
13 ginsn: ADD %r31, 3, %r31
|
||||||
|
14 \?\?\?\? C0035FD6 ret
|
||||||
|
14 ginsn: RET
|
||||||
|
15 .size foo,.-foo
|
||||||
|
15 ginsn: SYM FUNC_END
|
||||||
15
gas/testsuite/gas/scfi/aarch64/ginsn-misc-1.s
Normal file
15
gas/testsuite/gas/scfi/aarch64/ginsn-misc-1.s
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# Testcase for a variety of misc instructions
|
||||||
|
# Ensure graceful handling, irrespective of ginsn generation
|
||||||
|
symbol:
|
||||||
|
.string "w"
|
||||||
|
|
||||||
|
.type foo, %function
|
||||||
|
foo:
|
||||||
|
mov x16, 4384
|
||||||
|
add sp, sp, x16
|
||||||
|
adrp x0, symbol
|
||||||
|
add sp, x0, :lo12:symbol
|
||||||
|
sub sp, sp, 3
|
||||||
|
add sp, sp, 3
|
||||||
|
ret
|
||||||
|
.size foo,.-foo
|
||||||
59
gas/testsuite/gas/scfi/aarch64/scfi-aarch64.exp
Normal file
59
gas/testsuite/gas/scfi/aarch64/scfi-aarch64.exp
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
# Copyright (C) 2022-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
if { ![is_elf_format] } then {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
# common tests
|
||||||
|
if { ([istarget "aarch64-*-*"]) } then {
|
||||||
|
|
||||||
|
global ASFLAGS
|
||||||
|
set old_ASFLAGS "$ASFLAGS"
|
||||||
|
|
||||||
|
run_list_test "ginsn-cofi-1" "--scfi=experimental -ali --warn"
|
||||||
|
run_list_test "ginsn-ldst-1" "--scfi=experimental -ali --warn"
|
||||||
|
run_list_test "ginsn-misc-1" "--scfi=experimental -ali --warn"
|
||||||
|
|
||||||
|
run_list_test "scfi-diag-1" "--scfi=experimental"
|
||||||
|
|
||||||
|
run_list_test "scfi-unsupported-1" "--scfi=experimental"
|
||||||
|
|
||||||
|
run_dump_test "scfi-ldrp-1"
|
||||||
|
run_list_test "scfi-ldrp-1" "--scfi=experimental --warn"
|
||||||
|
run_dump_test "scfi-ldrp-2"
|
||||||
|
run_list_test "scfi-ldrp-2" "--scfi=experimental --warn"
|
||||||
|
|
||||||
|
run_dump_test "scfi-strp-1"
|
||||||
|
run_list_test "scfi-strp-1" "--scfi=experimental --warn"
|
||||||
|
run_dump_test "scfi-strp-2"
|
||||||
|
run_list_test "scfi-strp-2" "--scfi=experimental --warn"
|
||||||
|
|
||||||
|
run_dump_test "scfi-cb-1"
|
||||||
|
run_list_test "scfi-cb-1" "--scfi=experimental --warn"
|
||||||
|
run_dump_test "scfi-cond-br-1"
|
||||||
|
run_list_test "scfi-cond-br-1" "--scfi=experimental --warn"
|
||||||
|
|
||||||
|
run_dump_test "scfi-cfg-1"
|
||||||
|
run_list_test "scfi-cfg-1" "--scfi=experimental --warn"
|
||||||
|
|
||||||
|
run_dump_test "scfi-cfg-2"
|
||||||
|
run_list_test "scfi-cfg-2" "--scfi=experimental --warn"
|
||||||
|
|
||||||
|
run_dump_test "scfi-cfg-3"
|
||||||
|
run_list_test "scfi-cfg-3" "--scfi=experimental --warn"
|
||||||
|
|
||||||
|
}
|
||||||
20
gas/testsuite/gas/scfi/aarch64/scfi-cb-1.d
Normal file
20
gas/testsuite/gas/scfi/aarch64/scfi-cb-1.d
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
#as: --scfi=experimental -W
|
||||||
|
#objdump: -Wf
|
||||||
|
#name: Synthesize CFI for comp branch 1
|
||||||
|
#...
|
||||||
|
Contents of the .eh_frame section:
|
||||||
|
|
||||||
|
|
||||||
|
0+0000 0+0010 0+0000 CIE
|
||||||
|
Version: 1
|
||||||
|
Augmentation: "zR"
|
||||||
|
Code alignment factor: 4
|
||||||
|
Data alignment factor: -8
|
||||||
|
Return address column: 30
|
||||||
|
Augmentation data: 1b
|
||||||
|
DW_CFA_def_cfa: r31 \(sp\) ofs 0
|
||||||
|
|
||||||
|
0+0014 0+0010 00000018 FDE cie=00000000 pc=0+0000..0+0014
|
||||||
|
DW_CFA_nop
|
||||||
|
|
||||||
|
#pass
|
||||||
2
gas/testsuite/gas/scfi/aarch64/scfi-cb-1.l
Normal file
2
gas/testsuite/gas/scfi/aarch64/scfi-cb-1.l
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.*Assembler messages:
|
||||||
|
.*5: Warning: SCFI ignores most user-specified CFI directives
|
||||||
14
gas/testsuite/gas/scfi/aarch64/scfi-cb-1.s
Normal file
14
gas/testsuite/gas/scfi/aarch64/scfi-cb-1.s
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
.text
|
||||||
|
.global foo
|
||||||
|
.type foo, %function
|
||||||
|
foo:
|
||||||
|
.cfi_startproc
|
||||||
|
.L7:
|
||||||
|
add w4, w3, w1
|
||||||
|
cbnz w4, .L7
|
||||||
|
cbz w4, .L10
|
||||||
|
tbnz w0, #31, .L7
|
||||||
|
.L10:
|
||||||
|
ret
|
||||||
|
.cfi_endproc
|
||||||
|
.size foo, .-foo
|
||||||
31
gas/testsuite/gas/scfi/aarch64/scfi-cfg-1.d
Normal file
31
gas/testsuite/gas/scfi/aarch64/scfi-cfg-1.d
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
#as: --scfi=experimental -W
|
||||||
|
#objdump: -Wf
|
||||||
|
#name: Synthesize CFI for cfg 1
|
||||||
|
#...
|
||||||
|
Contents of the .eh_frame section:
|
||||||
|
|
||||||
|
|
||||||
|
0+0000 0+0010 0+0000 CIE
|
||||||
|
Version: 1
|
||||||
|
Augmentation: "zR"
|
||||||
|
Code alignment factor: 4
|
||||||
|
Data alignment factor: -8
|
||||||
|
Return address column: 30
|
||||||
|
Augmentation data: 1b
|
||||||
|
DW_CFA_def_cfa: r31 \(sp\) ofs 0
|
||||||
|
|
||||||
|
0+0014 0+0020 0+0018 FDE cie=00000000 pc=0+0000..0+0068
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0004
|
||||||
|
DW_CFA_def_cfa_offset: 48
|
||||||
|
DW_CFA_offset: r29 \(x29\) at cfa-48
|
||||||
|
DW_CFA_offset: r30 \(x30\) at cfa-40
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0008
|
||||||
|
DW_CFA_def_cfa_register: r29 \(x29\)
|
||||||
|
DW_CFA_advance_loc: 92 to 0+0064
|
||||||
|
DW_CFA_def_cfa_register: r31 \(sp\)
|
||||||
|
DW_CFA_restore: r29 \(x29\)
|
||||||
|
DW_CFA_restore: r30 \(x30\)
|
||||||
|
DW_CFA_def_cfa_offset: 0
|
||||||
|
DW_CFA_nop
|
||||||
|
|
||||||
|
#pass
|
||||||
2
gas/testsuite/gas/scfi/aarch64/scfi-cfg-1.l
Normal file
2
gas/testsuite/gas/scfi/aarch64/scfi-cfg-1.l
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.*Assembler messages:
|
||||||
|
.*6: Warning: SCFI ignores most user-specified CFI directives
|
||||||
46
gas/testsuite/gas/scfi/aarch64/scfi-cfg-1.s
Normal file
46
gas/testsuite/gas/scfi/aarch64/scfi-cfg-1.s
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# Testcase for forward flow of SCFI information
|
||||||
|
# and CFG creation as well. This testcase has two backward edges
|
||||||
|
# (one of which is a loop) and one exit path.
|
||||||
|
.type foo, %function
|
||||||
|
foo:
|
||||||
|
.cfi_startproc
|
||||||
|
stp x29, x30, [sp, -48]!
|
||||||
|
.cfi_def_cfa_offset 48
|
||||||
|
.cfi_offset 29, -48
|
||||||
|
.cfi_offset 30, -40
|
||||||
|
mov x29, sp
|
||||||
|
.cfi_def_cfa_register 29
|
||||||
|
str x0, [sp, 24]
|
||||||
|
adrp x0, :got:xyz
|
||||||
|
str x0, [sp, 40]
|
||||||
|
b .L7
|
||||||
|
.L10:
|
||||||
|
ldr x0, [sp, 40]
|
||||||
|
ldr x0, [x0]
|
||||||
|
mov x1, x0
|
||||||
|
ldr x0, [sp, 24]
|
||||||
|
bl strcmp
|
||||||
|
cmp w0, 0
|
||||||
|
bne .L8
|
||||||
|
ldr x0, [sp, 40]
|
||||||
|
ldr w0, [x0, 8]
|
||||||
|
b .L9
|
||||||
|
.L8:
|
||||||
|
ldr x0, [sp, 40]
|
||||||
|
add x0, x0, 24
|
||||||
|
str x0, [sp, 40]
|
||||||
|
.L7:
|
||||||
|
ldr x0, [sp, 40]
|
||||||
|
ldr w0, [x0, 8]
|
||||||
|
cmp w0, 0
|
||||||
|
bne .L10
|
||||||
|
mov w0, 0
|
||||||
|
.L9:
|
||||||
|
ldp x29, x30, [sp], 48
|
||||||
|
.cfi_def_cfa_register 31
|
||||||
|
.cfi_restore 30
|
||||||
|
.cfi_restore 29
|
||||||
|
.cfi_def_cfa_offset 0
|
||||||
|
ret
|
||||||
|
.cfi_endproc
|
||||||
|
.size foo, .-foo
|
||||||
40
gas/testsuite/gas/scfi/aarch64/scfi-cfg-2.d
Normal file
40
gas/testsuite/gas/scfi/aarch64/scfi-cfg-2.d
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
#as: --scfi=experimental -W
|
||||||
|
#objdump: -Wf
|
||||||
|
#name: Synthesize CFI for cfg 2
|
||||||
|
#...
|
||||||
|
Contents of the .eh_frame section:
|
||||||
|
|
||||||
|
|
||||||
|
0+0000 0+0010 0+0000 CIE
|
||||||
|
Version: 1
|
||||||
|
Augmentation: "zR"
|
||||||
|
Code alignment factor: 4
|
||||||
|
Data alignment factor: -8
|
||||||
|
Return address column: 30
|
||||||
|
Augmentation data: 1b
|
||||||
|
DW_CFA_def_cfa: r31 \(sp\) ofs 0
|
||||||
|
|
||||||
|
0+0014 0+[0-9a-f]+ 0+0018 FDE cie=00000000 pc=0+0000..0+0028
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0004
|
||||||
|
DW_CFA_def_cfa_offset: 48
|
||||||
|
DW_CFA_offset: r29 \(x29\) at cfa-48
|
||||||
|
DW_CFA_offset: r30 \(x30\) at cfa-40
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0008
|
||||||
|
DW_CFA_def_cfa_register: r29 \(x29\)
|
||||||
|
DW_CFA_advance_loc: 8 to 0+0010
|
||||||
|
DW_CFA_remember_state
|
||||||
|
DW_CFA_advance_loc: 8 to 0+0018
|
||||||
|
DW_CFA_def_cfa_register: r31 \(sp\)
|
||||||
|
DW_CFA_restore: r29 \(x29\)
|
||||||
|
DW_CFA_restore: r30 \(x30\)
|
||||||
|
DW_CFA_def_cfa_offset: 0
|
||||||
|
DW_CFA_advance_loc: 4 to 0+001c
|
||||||
|
DW_CFA_restore_state
|
||||||
|
DW_CFA_advance_loc: 8 to 0+0024
|
||||||
|
DW_CFA_def_cfa_register: r31 \(sp\)
|
||||||
|
DW_CFA_restore: r29 \(x29\)
|
||||||
|
DW_CFA_restore: r30 \(x30\)
|
||||||
|
DW_CFA_def_cfa_offset: 0
|
||||||
|
DW_CFA_nop
|
||||||
|
|
||||||
|
#pass
|
||||||
2
gas/testsuite/gas/scfi/aarch64/scfi-cfg-2.l
Normal file
2
gas/testsuite/gas/scfi/aarch64/scfi-cfg-2.l
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.*Assembler messages:
|
||||||
|
.*13: Warning: SCFI ignores most user-specified CFI directives
|
||||||
42
gas/testsuite/gas/scfi/aarch64/scfi-cfg-2.s
Normal file
42
gas/testsuite/gas/scfi/aarch64/scfi-cfg-2.s
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
# Testcase for backward flow of SCFI state.
|
||||||
|
# The cfg has two exit paths, with epilogue duplicated in
|
||||||
|
# the two.
|
||||||
|
#
|
||||||
|
# SCFI must synthesize the remember_state / restore_state pair.
|
||||||
|
# Note how SCFI does not necessary generate the least number of
|
||||||
|
# CFI directives (.cfi_remember_state can possibly be clubbed
|
||||||
|
# together with other immediately following CFI directives).
|
||||||
|
# This is not a correctness issue, however.
|
||||||
|
.global foo
|
||||||
|
.type foo, %function
|
||||||
|
foo:
|
||||||
|
.cfi_startproc
|
||||||
|
stp x29, x30, [sp, -48]!
|
||||||
|
.cfi_def_cfa_offset 48
|
||||||
|
.cfi_offset 29, -48
|
||||||
|
.cfi_offset 30, -40
|
||||||
|
mov x29, sp
|
||||||
|
.cfi_def_cfa_register 29
|
||||||
|
cmp w4, w19
|
||||||
|
bge .L1
|
||||||
|
|
||||||
|
.L2:
|
||||||
|
.cfi_remember_state
|
||||||
|
bl bar
|
||||||
|
ldp x29, x30, [sp], 48
|
||||||
|
.cfi_def_cfa_register 31
|
||||||
|
.cfi_restore 29
|
||||||
|
.cfi_restore 30
|
||||||
|
.cfi_def_cfa_offset 0
|
||||||
|
ret
|
||||||
|
.L1:
|
||||||
|
.cfi_restore_state
|
||||||
|
cbz w3, .L2
|
||||||
|
ldp x29, x30, [sp], 48
|
||||||
|
.cfi_def_cfa_register 31
|
||||||
|
.cfi_restore 29
|
||||||
|
.cfi_restore 30
|
||||||
|
.cfi_def_cfa_offset 0
|
||||||
|
ret
|
||||||
|
.cfi_endproc
|
||||||
|
.size foo, .-foo
|
||||||
32
gas/testsuite/gas/scfi/aarch64/scfi-cfg-3.d
Normal file
32
gas/testsuite/gas/scfi/aarch64/scfi-cfg-3.d
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
#as: --scfi=experimental -W
|
||||||
|
#objdump: -Wf
|
||||||
|
#name: Synthesize CFI for cfg 3
|
||||||
|
#...
|
||||||
|
Contents of the .eh_frame section:
|
||||||
|
|
||||||
|
|
||||||
|
0+0000 0+0010 0+0000 CIE
|
||||||
|
Version: 1
|
||||||
|
Augmentation: "zR"
|
||||||
|
Code alignment factor: 4
|
||||||
|
Data alignment factor: -8
|
||||||
|
Return address column: 30
|
||||||
|
Augmentation data: 1b
|
||||||
|
DW_CFA_def_cfa: r31 \(sp\) ofs 0
|
||||||
|
|
||||||
|
0+0014 0+0020 0+0018 FDE cie=00000000 pc=0+0000..0+002c
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0004
|
||||||
|
DW_CFA_def_cfa_offset: 32
|
||||||
|
DW_CFA_offset: r29 \(x29\) at cfa-32
|
||||||
|
DW_CFA_offset: r30 \(x30\) at cfa-24
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0008
|
||||||
|
DW_CFA_def_cfa_register: r29 \(x29\)
|
||||||
|
DW_CFA_advance_loc: 32 to 0+0028
|
||||||
|
DW_CFA_def_cfa_register: r31 \(sp\)
|
||||||
|
DW_CFA_restore: r29 \(x29\)
|
||||||
|
DW_CFA_restore: r30 \(x30\)
|
||||||
|
DW_CFA_def_cfa_offset: 0
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
|
||||||
|
#pass
|
||||||
2
gas/testsuite/gas/scfi/aarch64/scfi-cfg-3.l
Normal file
2
gas/testsuite/gas/scfi/aarch64/scfi-cfg-3.l
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.*Assembler messages:
|
||||||
|
.*9: Warning: SCFI ignores most user-specified CFI directives
|
||||||
34
gas/testsuite/gas/scfi/aarch64/scfi-cfg-3.s
Normal file
34
gas/testsuite/gas/scfi/aarch64/scfi-cfg-3.s
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# Testcase for cfg creation.
|
||||||
|
# There is at least one bb here with a single GINSN_TYPE_SYMBOL instruction
|
||||||
|
# for a user-defined label. This ginsn is visited in the fallthrough path of
|
||||||
|
# another bb.
|
||||||
|
.text
|
||||||
|
.global main
|
||||||
|
.type main, %function
|
||||||
|
main:
|
||||||
|
.cfi_startproc
|
||||||
|
stp x29, x30, [sp, -32]!
|
||||||
|
.cfi_def_cfa_offset 32
|
||||||
|
.cfi_offset 29, -32
|
||||||
|
.cfi_offset 30, -24
|
||||||
|
mov x29, sp
|
||||||
|
.cfi_def_cfa_register 29
|
||||||
|
cmp w0, 0
|
||||||
|
bne .L2
|
||||||
|
# ldr x0, [sp, 24]
|
||||||
|
# bl fclose
|
||||||
|
cmp w0, 0
|
||||||
|
beq .L3
|
||||||
|
.L2:
|
||||||
|
mov w0, 1
|
||||||
|
b .L5
|
||||||
|
.L3:
|
||||||
|
mov w0, 0
|
||||||
|
.L5:
|
||||||
|
ldp x29, x30, [sp], 32
|
||||||
|
.cfi_def_cfa_register 31
|
||||||
|
.cfi_restore 29
|
||||||
|
.cfi_restore 30
|
||||||
|
.cfi_def_cfa_offset 0
|
||||||
|
ret
|
||||||
|
.cfi_endproc
|
||||||
20
gas/testsuite/gas/scfi/aarch64/scfi-cond-br-1.d
Normal file
20
gas/testsuite/gas/scfi/aarch64/scfi-cond-br-1.d
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
#as: --scfi=experimental -W
|
||||||
|
#objdump: -Wf
|
||||||
|
#name: Synthesize CFI for conditional br 1
|
||||||
|
#...
|
||||||
|
Contents of the .eh_frame section:
|
||||||
|
|
||||||
|
|
||||||
|
0+0000 0+0010 0+0000 CIE
|
||||||
|
Version: 1
|
||||||
|
Augmentation: "zR"
|
||||||
|
Code alignment factor: 4
|
||||||
|
Data alignment factor: -8
|
||||||
|
Return address column: 30
|
||||||
|
Augmentation data: 1b
|
||||||
|
DW_CFA_def_cfa: r31 \(sp\) ofs 0
|
||||||
|
|
||||||
|
0+0014 0+0010 00000018 FDE cie=00000000 pc=0+0000..0+0010
|
||||||
|
DW_CFA_nop
|
||||||
|
|
||||||
|
#pass
|
||||||
2
gas/testsuite/gas/scfi/aarch64/scfi-cond-br-1.l
Normal file
2
gas/testsuite/gas/scfi/aarch64/scfi-cond-br-1.l
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.*Assembler messages:
|
||||||
|
.*6: Warning: SCFI ignores most user-specified CFI directives
|
||||||
13
gas/testsuite/gas/scfi/aarch64/scfi-cond-br-1.s
Normal file
13
gas/testsuite/gas/scfi/aarch64/scfi-cond-br-1.s
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
.text
|
||||||
|
.align 2
|
||||||
|
.global foo
|
||||||
|
.type foo, %function
|
||||||
|
foo:
|
||||||
|
.cfi_startproc
|
||||||
|
bge .L10
|
||||||
|
ble .L10
|
||||||
|
bne .L10
|
||||||
|
.L10:
|
||||||
|
ret
|
||||||
|
.cfi_endproc
|
||||||
|
.size foo, .-foo
|
||||||
2
gas/testsuite/gas/scfi/aarch64/scfi-diag-1.l
Normal file
2
gas/testsuite/gas/scfi/aarch64/scfi-diag-1.l
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.*Assembler messages:
|
||||||
|
.*5: Warning: SCFI: ignored probable save/restore op with reg offset
|
||||||
6
gas/testsuite/gas/scfi/aarch64/scfi-diag-1.s
Normal file
6
gas/testsuite/gas/scfi/aarch64/scfi-diag-1.s
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
.text
|
||||||
|
.globl foo
|
||||||
|
.type foo, @function
|
||||||
|
foo:
|
||||||
|
str x19, [sp, x1]
|
||||||
|
.size foo, .-foo
|
||||||
59
gas/testsuite/gas/scfi/aarch64/scfi-ldrp-1.d
Normal file
59
gas/testsuite/gas/scfi/aarch64/scfi-ldrp-1.d
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
#as: --scfi=experimental -W
|
||||||
|
#objdump: -Wf
|
||||||
|
#name: Synthesize CFI for ldp ldr instructions
|
||||||
|
#...
|
||||||
|
Contents of the .eh_frame section:
|
||||||
|
|
||||||
|
00000000 0+0010 00000000 CIE
|
||||||
|
Version: 1
|
||||||
|
Augmentation: "zR"
|
||||||
|
Code alignment factor: 4
|
||||||
|
Data alignment factor: -8
|
||||||
|
Return address column: 30
|
||||||
|
Augmentation data: 1b
|
||||||
|
DW_CFA_def_cfa: r31 \(sp\) ofs 0
|
||||||
|
|
||||||
|
00000014 0+0048 00000018 FDE cie=00000000 pc=0+0000..0+0040
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0004
|
||||||
|
DW_CFA_def_cfa_offset: 128
|
||||||
|
DW_CFA_offset: r29 \(x29\) at cfa-128
|
||||||
|
DW_CFA_offset: r30 \(x30\) at cfa-120
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0008
|
||||||
|
DW_CFA_def_cfa_register: r29 \(x29\)
|
||||||
|
DW_CFA_advance_loc: 4 to 0+000c
|
||||||
|
DW_CFA_offset: r19 \(x19\) at cfa-112
|
||||||
|
DW_CFA_offset: r20 \(x20\) at cfa-104
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0010
|
||||||
|
DW_CFA_offset: r21 \(x21\) at cfa-96
|
||||||
|
DW_CFA_offset: r22 \(x22\) at cfa-88
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0014
|
||||||
|
DW_CFA_offset: r23 \(x23\) at cfa-80
|
||||||
|
DW_CFA_offset: r24 \(x24\) at cfa-72
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0018
|
||||||
|
DW_CFA_offset: r25 \(x25\) at cfa-64
|
||||||
|
DW_CFA_offset: r26 \(x26\) at cfa-56
|
||||||
|
DW_CFA_advance_loc: 4 to 0+001c
|
||||||
|
DW_CFA_offset: r27 \(x27\) at cfa-48
|
||||||
|
DW_CFA_advance_loc: 8 to 0+0024
|
||||||
|
DW_CFA_def_cfa_register: r31 \(sp\)
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0028
|
||||||
|
DW_CFA_restore: r19 \(x19\)
|
||||||
|
DW_CFA_restore: r20 \(x20\)
|
||||||
|
DW_CFA_advance_loc: 4 to 0+002c
|
||||||
|
DW_CFA_restore: r21 \(x21\)
|
||||||
|
DW_CFA_restore: r22 \(x22\)
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0030
|
||||||
|
DW_CFA_restore: r23 \(x23\)
|
||||||
|
DW_CFA_restore: r24 \(x24\)
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0034
|
||||||
|
DW_CFA_restore: r25 \(x25\)
|
||||||
|
DW_CFA_restore: r26 \(x26\)
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0038
|
||||||
|
DW_CFA_restore: r27 \(x27\)
|
||||||
|
DW_CFA_advance_loc: 4 to 0+003c
|
||||||
|
DW_CFA_restore: r29 \(x29\)
|
||||||
|
DW_CFA_restore: r30 \(x30\)
|
||||||
|
DW_CFA_def_cfa_offset: 0
|
||||||
|
DW_CFA_nop
|
||||||
|
|
||||||
|
#pass
|
||||||
2
gas/testsuite/gas/scfi/aarch64/scfi-ldrp-1.l
Normal file
2
gas/testsuite/gas/scfi/aarch64/scfi-ldrp-1.l
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.*Assembler messages:
|
||||||
|
.*8: Warning: SCFI ignores most user-specified CFI directives
|
||||||
52
gas/testsuite/gas/scfi/aarch64/scfi-ldrp-1.s
Normal file
52
gas/testsuite/gas/scfi/aarch64/scfi-ldrp-1.s
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# Testcase for various ldp / ldr instructions.
|
||||||
|
# This test also serves for checking callee-saved regs.
|
||||||
|
.text
|
||||||
|
.align 2
|
||||||
|
.global foo
|
||||||
|
.type foo, %function
|
||||||
|
foo:
|
||||||
|
.cfi_startproc
|
||||||
|
stp x29, x30, [sp, -128]!
|
||||||
|
.cfi_def_cfa_offset 128
|
||||||
|
.cfi_offset 29, -128
|
||||||
|
.cfi_offset 30, -120
|
||||||
|
mov x29, sp
|
||||||
|
.cfi_def_cfa_register 29
|
||||||
|
stp x19, x20, [sp, 16]
|
||||||
|
.cfi_offset 19, -112
|
||||||
|
.cfi_offset 20, -104
|
||||||
|
stp x21, x22, [sp, 32]
|
||||||
|
.cfi_offset 21, -96
|
||||||
|
.cfi_offset 22, -88
|
||||||
|
stp x23, x24, [sp, 48]
|
||||||
|
.cfi_offset 23, -80
|
||||||
|
.cfi_offset 24, -72
|
||||||
|
stp x25, x26, [sp, 64]
|
||||||
|
.cfi_offset 25, -64
|
||||||
|
.cfi_offset 26, -56
|
||||||
|
str x27, [sp, 80]
|
||||||
|
.cfi_offset 27, -48
|
||||||
|
mov w0, 0
|
||||||
|
mov sp, x29
|
||||||
|
.cfi_def_cfa_register 31
|
||||||
|
ldp x19, x20, [sp, 16]
|
||||||
|
.cfi_restore 19
|
||||||
|
.cfi_restore 20
|
||||||
|
ldp x21, x22, [sp, 32]
|
||||||
|
.cfi_restore 21
|
||||||
|
.cfi_restore 22
|
||||||
|
ldp x23, x24, [sp, 48]
|
||||||
|
.cfi_restore 23
|
||||||
|
.cfi_restore 24
|
||||||
|
ldp x25, x26, [sp, 64]
|
||||||
|
.cfi_restore 25
|
||||||
|
.cfi_restore 26
|
||||||
|
ldr x27, [sp, 80]
|
||||||
|
.cfi_restore 27
|
||||||
|
ldp x29, x30, [sp], 128
|
||||||
|
.cfi_restore 29
|
||||||
|
.cfi_restore 30
|
||||||
|
.cfi_def_cfa_offset 0
|
||||||
|
ret
|
||||||
|
.cfi_endproc
|
||||||
|
.size foo, .-foo
|
||||||
33
gas/testsuite/gas/scfi/aarch64/scfi-ldrp-2.d
Normal file
33
gas/testsuite/gas/scfi/aarch64/scfi-ldrp-2.d
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
#as: --scfi=experimental -W
|
||||||
|
#objdump: -Wf
|
||||||
|
#name: Synthesize CFI for ldr insns 2
|
||||||
|
#...
|
||||||
|
Contents of the .eh_frame section:
|
||||||
|
|
||||||
|
00000000 0+0010 00000000 CIE
|
||||||
|
Version: 1
|
||||||
|
Augmentation: "zR"
|
||||||
|
Code alignment factor: 4
|
||||||
|
Data alignment factor: -8
|
||||||
|
Return address column: 30
|
||||||
|
Augmentation data: 1b
|
||||||
|
DW_CFA_def_cfa: r31 \(sp\) ofs 0
|
||||||
|
|
||||||
|
00000014 0+[0-9a-f]+ 00000018 FDE cie=00000000 pc=0+0000..0+0018
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0004
|
||||||
|
DW_CFA_def_cfa_offset: 128
|
||||||
|
DW_CFA_offset: r29 \(x29\) at cfa-128
|
||||||
|
DW_CFA_offset: r30 \(x30\) at cfa-120
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0008
|
||||||
|
DW_CFA_def_cfa_register: r29 \(x29\)
|
||||||
|
DW_CFA_advance_loc: 4 to 0+000c
|
||||||
|
DW_CFA_def_cfa_register: r31 \(sp\)
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0010
|
||||||
|
DW_CFA_restore: r29 \(x29\)
|
||||||
|
DW_CFA_def_cfa_offset: 120
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0014
|
||||||
|
DW_CFA_restore: r30 \(x30\)
|
||||||
|
DW_CFA_def_cfa_offset: 0
|
||||||
|
DW_CFA_nop
|
||||||
|
|
||||||
|
#pass
|
||||||
2
gas/testsuite/gas/scfi/aarch64/scfi-ldrp-2.l
Normal file
2
gas/testsuite/gas/scfi/aarch64/scfi-ldrp-2.l
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.*Assembler messages:
|
||||||
|
.*7: Warning: SCFI ignores most user-specified CFI directives
|
||||||
26
gas/testsuite/gas/scfi/aarch64/scfi-ldrp-2.s
Normal file
26
gas/testsuite/gas/scfi/aarch64/scfi-ldrp-2.s
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# Testcase for various ldp / ldr instructions
|
||||||
|
.text
|
||||||
|
.align 2
|
||||||
|
.global foo
|
||||||
|
.type foo, %function
|
||||||
|
foo:
|
||||||
|
.cfi_startproc
|
||||||
|
stp x29, x30, [sp, -128]!
|
||||||
|
.cfi_def_cfa_offset 128
|
||||||
|
.cfi_offset 29, -128
|
||||||
|
.cfi_offset 30, -120
|
||||||
|
mov x29, sp
|
||||||
|
.cfi_def_cfa_register 29
|
||||||
|
mov sp, x29
|
||||||
|
.cfi_def_cfa_register 31
|
||||||
|
# Post-indexed ldr
|
||||||
|
ldr x29, [sp], 8
|
||||||
|
.cfi_restore 29
|
||||||
|
.cfi_def_cfa_offset 120
|
||||||
|
# Post-indexed ldr
|
||||||
|
ldr x30, [sp], 120
|
||||||
|
.cfi_restore 30
|
||||||
|
.cfi_def_cfa_offset 0
|
||||||
|
ret
|
||||||
|
.cfi_endproc
|
||||||
|
.size foo, .-foo
|
||||||
39
gas/testsuite/gas/scfi/aarch64/scfi-strp-1.d
Normal file
39
gas/testsuite/gas/scfi/aarch64/scfi-strp-1.d
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
#as: --scfi=experimental -W
|
||||||
|
#objdump: -Wf
|
||||||
|
#name: Synthesize CFI for str stp insns 1
|
||||||
|
#...
|
||||||
|
Contents of the .eh_frame section:
|
||||||
|
|
||||||
|
00000000 0+0010 00000000 CIE
|
||||||
|
Version: 1
|
||||||
|
Augmentation: "zR"
|
||||||
|
Code alignment factor: 4
|
||||||
|
Data alignment factor: -8
|
||||||
|
Return address column: 30
|
||||||
|
Augmentation data: 1b
|
||||||
|
DW_CFA_def_cfa: r31 \(sp\) ofs 0
|
||||||
|
|
||||||
|
00000014 0+0030 00000018 FDE cie=00000000 pc=0+0000..0+002c
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0004
|
||||||
|
DW_CFA_def_cfa_offset: 128
|
||||||
|
DW_CFA_offset: r29 \(x29\) at cfa-128
|
||||||
|
DW_CFA_offset: r30 \(x30\) at cfa-120
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0008
|
||||||
|
DW_CFA_def_cfa_register: r29 \(x29\)
|
||||||
|
DW_CFA_advance_loc: 4 to 0+000c
|
||||||
|
DW_CFA_offset: r19 \(x19\) at cfa-112
|
||||||
|
DW_CFA_offset: r20 \(x20\) at cfa-104
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0010
|
||||||
|
DW_CFA_offset: r21 \(x21\) at cfa-96
|
||||||
|
DW_CFA_offset: r22 \(x22\) at cfa-88
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0014
|
||||||
|
DW_CFA_offset: r23 \(x23\) at cfa-80
|
||||||
|
DW_CFA_offset: r24 \(x24\) at cfa-72
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0018
|
||||||
|
DW_CFA_offset: r25 \(x25\) at cfa-64
|
||||||
|
DW_CFA_offset: r26 \(x26\) at cfa-56
|
||||||
|
DW_CFA_advance_loc: 4 to 0+001c
|
||||||
|
DW_CFA_offset: r27 \(x27\) at cfa-48
|
||||||
|
DW_CFA_nop
|
||||||
|
|
||||||
|
#pass
|
||||||
2
gas/testsuite/gas/scfi/aarch64/scfi-strp-1.l
Normal file
2
gas/testsuite/gas/scfi/aarch64/scfi-strp-1.l
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.*Assembler messages:
|
||||||
|
.*6: Warning: SCFI ignores most user-specified CFI directives
|
||||||
37
gas/testsuite/gas/scfi/aarch64/scfi-strp-1.s
Normal file
37
gas/testsuite/gas/scfi/aarch64/scfi-strp-1.s
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
## Testcase with a variety of str/stp instructions
|
||||||
|
.text
|
||||||
|
.globl foo
|
||||||
|
.type foo, @function
|
||||||
|
foo:
|
||||||
|
.cfi_startproc
|
||||||
|
# Pre-indexed addressing is like offset addressing, except that
|
||||||
|
# the base pointer is updated as a result of the instruction.
|
||||||
|
stp x29, x30, [sp, -128]!
|
||||||
|
.cfi_def_cfa_offset 128
|
||||||
|
.cfi_offset 29, -128
|
||||||
|
.cfi_offset 30, -120
|
||||||
|
mov x29, sp
|
||||||
|
.cfi_def_cfa_register 29
|
||||||
|
# Offset addressing mode is when ann offset can be applied optionally to the
|
||||||
|
# base address.
|
||||||
|
stp x19, x20, [sp, 16]
|
||||||
|
.cfi_offset 19, -112
|
||||||
|
.cfi_offset 20, -104
|
||||||
|
stp x21, x22, [sp, 32]
|
||||||
|
.cfi_offset 21, -96
|
||||||
|
.cfi_offset 22, -88
|
||||||
|
stp x23, x24, [sp, 48]
|
||||||
|
.cfi_offset 23, -80
|
||||||
|
.cfi_offset 24, -72
|
||||||
|
stp x25, x26, [sp, 64]
|
||||||
|
.cfi_offset 25, -64
|
||||||
|
.cfi_offset 26, -56
|
||||||
|
str x27, [sp, 80]
|
||||||
|
.cfi_offset 27, -48
|
||||||
|
# Stores non callee-saved register on stack.
|
||||||
|
str w0, [x29, 124]
|
||||||
|
str wzr, [x29, 120]
|
||||||
|
str w0, [x29, 120]
|
||||||
|
ret
|
||||||
|
.cfi_endproc
|
||||||
|
.size foo, .-foo
|
||||||
35
gas/testsuite/gas/scfi/aarch64/scfi-strp-2.d
Normal file
35
gas/testsuite/gas/scfi/aarch64/scfi-strp-2.d
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#as: --scfi=experimental -W
|
||||||
|
#objdump: -Wf
|
||||||
|
#name: Synthesize CFI for str insns 2
|
||||||
|
#...
|
||||||
|
Contents of the .eh_frame section:
|
||||||
|
|
||||||
|
00000000 0+0010 00000000 CIE
|
||||||
|
Version: 1
|
||||||
|
Augmentation: "zR"
|
||||||
|
Code alignment factor: 4
|
||||||
|
Data alignment factor: -8
|
||||||
|
Return address column: 30
|
||||||
|
Augmentation data: 1b
|
||||||
|
DW_CFA_def_cfa: r31 \(sp\) ofs 0
|
||||||
|
|
||||||
|
00000014 0+0028 00000018 FDE cie=00000000 pc=0+0000..0+001c
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0004
|
||||||
|
DW_CFA_def_cfa_offset: 128
|
||||||
|
DW_CFA_offset: r29 \(x29\) at cfa-128
|
||||||
|
DW_CFA_offset: r30 \(x30\) at cfa-120
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0008
|
||||||
|
DW_CFA_def_cfa_register: r29 \(x29\)
|
||||||
|
DW_CFA_advance_loc: 4 to 0+000c
|
||||||
|
DW_CFA_offset: r27 \(x27\) at cfa-128
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0010
|
||||||
|
DW_CFA_def_cfa_register: r31 \(sp\)
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0014
|
||||||
|
DW_CFA_restore: r29 \(x29\)
|
||||||
|
DW_CFA_def_cfa_offset: 120
|
||||||
|
DW_CFA_advance_loc: 4 to 0+0018
|
||||||
|
DW_CFA_restore: r30 \(x30\)
|
||||||
|
DW_CFA_def_cfa_offset: 0
|
||||||
|
DW_CFA_nop
|
||||||
|
|
||||||
|
#pass
|
||||||
2
gas/testsuite/gas/scfi/aarch64/scfi-strp-2.l
Normal file
2
gas/testsuite/gas/scfi/aarch64/scfi-strp-2.l
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.*Assembler messages:
|
||||||
|
.*7: Warning: SCFI ignores most user-specified CFI directives
|
||||||
30
gas/testsuite/gas/scfi/aarch64/scfi-strp-2.s
Normal file
30
gas/testsuite/gas/scfi/aarch64/scfi-strp-2.s
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# Testcase for a variety of stp/str including a post-indexed store
|
||||||
|
.text
|
||||||
|
.align 2
|
||||||
|
.global foo
|
||||||
|
.type foo, %function
|
||||||
|
foo:
|
||||||
|
.cfi_startproc
|
||||||
|
stp x29, x30, [sp, -128]!
|
||||||
|
.cfi_def_cfa_offset 128
|
||||||
|
.cfi_offset 29, -128
|
||||||
|
.cfi_offset 30, -120
|
||||||
|
mov x29, sp
|
||||||
|
.cfi_def_cfa_register 29
|
||||||
|
# post-indexed store, a stack corrupting one which over-writes
|
||||||
|
# x29! Only for testing purposes for now
|
||||||
|
# This does not generate a .cfi_def_cfa_offset 208 because
|
||||||
|
# CFA is REG_FP based
|
||||||
|
str x27, [sp], 80
|
||||||
|
.cfi_offset 27, -128
|
||||||
|
mov sp, x29
|
||||||
|
.cfi_def_cfa_register 31
|
||||||
|
ldr x29, [sp], 8
|
||||||
|
.cfi_restore 29
|
||||||
|
.cfi_def_cfa_offset 120
|
||||||
|
ldr x30, [sp], 120
|
||||||
|
.cfi_restore 30
|
||||||
|
.cfi_def_cfa_offset 0
|
||||||
|
ret
|
||||||
|
.cfi_endproc
|
||||||
|
.size foo, .-foo
|
||||||
4
gas/testsuite/gas/scfi/aarch64/scfi-unsupported-1.l
Normal file
4
gas/testsuite/gas/scfi/aarch64/scfi-unsupported-1.l
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
.*Assembler messages:
|
||||||
|
.*7: Warning: SCFI ignores most user-specified CFI directives
|
||||||
|
.*9: Error: SCFI: unsupported stack manipulation pattern
|
||||||
|
.*31: Error: SCFI: forward pass failed for func 'foo'
|
||||||
31
gas/testsuite/gas/scfi/aarch64/scfi-unsupported-1.s
Normal file
31
gas/testsuite/gas/scfi/aarch64/scfi-unsupported-1.s
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# Testcase where immediate used for stack allocation is a wide
|
||||||
|
# one. Since SCFI does not currently have any data-flow
|
||||||
|
# capabilities, this is currently not supported.
|
||||||
|
.global foo
|
||||||
|
.type foo, %function
|
||||||
|
foo:
|
||||||
|
.cfi_startproc
|
||||||
|
mov x16, 4384
|
||||||
|
sub sp, sp, x16
|
||||||
|
.cfi_def_cfa_offset 4384
|
||||||
|
stp x29, x30, [sp]
|
||||||
|
.cfi_offset 29, -4384
|
||||||
|
.cfi_offset 30, -4376
|
||||||
|
mov x29, sp
|
||||||
|
str x0, [sp, 24]
|
||||||
|
str x1, [sp, 16]
|
||||||
|
add x0, sp, 4096
|
||||||
|
add x0, x0, 112
|
||||||
|
bl bar
|
||||||
|
.L1:
|
||||||
|
str xzr, [sp, 4376]
|
||||||
|
.L2:
|
||||||
|
ldp x29, x30, [sp]
|
||||||
|
mov x16, 4384
|
||||||
|
add sp, sp, x16
|
||||||
|
.cfi_restore 29
|
||||||
|
.cfi_restore 30
|
||||||
|
.cfi_def_cfa_offset 0
|
||||||
|
ret
|
||||||
|
.cfi_endproc
|
||||||
|
.size foo, .-foo
|
||||||
Reference in New Issue
Block a user