xref: /aosp_15_r20/external/llvm/test/MC/ARM/eh-directive-multiple-offsets.s (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \
2*9880d681SAndroid Build Coastguard Worker@ RUN:   | llvm-readobj -s -sd | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker@ Check for different combination of .setfp, .pad, .save and .vsave.
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker	.syntax	unified
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker@-------------------------------------------------------------------------------
9*9880d681SAndroid Build Coastguard Worker@ TEST1: Check .pad before .setfp directive.
10*9880d681SAndroid Build Coastguard Worker@-------------------------------------------------------------------------------
11*9880d681SAndroid Build Coastguard Worker	.section	.TEST1
12*9880d681SAndroid Build Coastguard Worker	.globl	func1
13*9880d681SAndroid Build Coastguard Worker	.type	func1,%function
14*9880d681SAndroid Build Coastguard Worker	.align	2
15*9880d681SAndroid Build Coastguard Worker	.fnstart
16*9880d681SAndroid Build Coastguard Workerfunc1:
17*9880d681SAndroid Build Coastguard Worker	.pad	#12
18*9880d681SAndroid Build Coastguard Worker	sub	sp, sp, #12
19*9880d681SAndroid Build Coastguard Worker	.setfp	fp, sp, #8
20*9880d681SAndroid Build Coastguard Worker	add	fp, sp, #8
21*9880d681SAndroid Build Coastguard Worker	sub	sp, fp, #8
22*9880d681SAndroid Build Coastguard Worker	add	sp, sp, #12
23*9880d681SAndroid Build Coastguard Worker	bx	lr
24*9880d681SAndroid Build Coastguard Worker	.personality	__gxx_personality_v0
25*9880d681SAndroid Build Coastguard Worker	.handlerdata
26*9880d681SAndroid Build Coastguard Worker	.fnend
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker@ CHECK: Section {
29*9880d681SAndroid Build Coastguard Worker@ CHECK:   Name: .ARM.extab.TEST1
30*9880d681SAndroid Build Coastguard Worker@ CHECK:   SectionData (
31*9880d681SAndroid Build Coastguard Worker@ CHECK:     0000: 00000000 B0009B00                    |........|
32*9880d681SAndroid Build Coastguard Worker@ CHECK:   )
33*9880d681SAndroid Build Coastguard Worker@ CHECK: }
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker@-------------------------------------------------------------------------------
38*9880d681SAndroid Build Coastguard Worker@ TEST2: Check .pad after .setfp directive.
39*9880d681SAndroid Build Coastguard Worker@-------------------------------------------------------------------------------
40*9880d681SAndroid Build Coastguard Worker	.section	.TEST2
41*9880d681SAndroid Build Coastguard Worker	.globl	func2
42*9880d681SAndroid Build Coastguard Worker	.type	func2,%function
43*9880d681SAndroid Build Coastguard Worker	.align	2
44*9880d681SAndroid Build Coastguard Worker	.fnstart
45*9880d681SAndroid Build Coastguard Workerfunc2:
46*9880d681SAndroid Build Coastguard Worker	.setfp	fp, sp, #8
47*9880d681SAndroid Build Coastguard Worker	add	fp, sp, #8
48*9880d681SAndroid Build Coastguard Worker	.pad	#12
49*9880d681SAndroid Build Coastguard Worker	sub	sp, sp, #12
50*9880d681SAndroid Build Coastguard Worker	add	sp, sp, #12
51*9880d681SAndroid Build Coastguard Worker	sub	sp, fp, #8
52*9880d681SAndroid Build Coastguard Worker	bx	lr
53*9880d681SAndroid Build Coastguard Worker	.personality	__gxx_personality_v0
54*9880d681SAndroid Build Coastguard Worker	.handlerdata
55*9880d681SAndroid Build Coastguard Worker	.fnend
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Worker@ CHECK: Section {
58*9880d681SAndroid Build Coastguard Worker@ CHECK:   Name: .ARM.extab.TEST2
59*9880d681SAndroid Build Coastguard Worker@ CHECK:   SectionData (
60*9880d681SAndroid Build Coastguard Worker@ CHECK:     0000: 00000000 B0419B00                    |.....A..|
61*9880d681SAndroid Build Coastguard Worker@ CHECK:   )
62*9880d681SAndroid Build Coastguard Worker@ CHECK: }
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Worker@-------------------------------------------------------------------------------
67*9880d681SAndroid Build Coastguard Worker@ TEST3: Check .setfp, .pad, .setfp directive.
68*9880d681SAndroid Build Coastguard Worker@-------------------------------------------------------------------------------
69*9880d681SAndroid Build Coastguard Worker	.section	.TEST3
70*9880d681SAndroid Build Coastguard Worker	.globl	func3
71*9880d681SAndroid Build Coastguard Worker	.type	func3,%function
72*9880d681SAndroid Build Coastguard Worker	.align	2
73*9880d681SAndroid Build Coastguard Worker	.fnstart
74*9880d681SAndroid Build Coastguard Workerfunc3:
75*9880d681SAndroid Build Coastguard Worker	@ prologue:
76*9880d681SAndroid Build Coastguard Worker	.setfp	fp, sp, #4
77*9880d681SAndroid Build Coastguard Worker	add	fp, sp, #4
78*9880d681SAndroid Build Coastguard Worker	.pad	#8
79*9880d681SAndroid Build Coastguard Worker	sub	sp, sp, #8
80*9880d681SAndroid Build Coastguard Worker	.setfp	fp, sp, #4
81*9880d681SAndroid Build Coastguard Worker	add	fp, sp, #4
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Worker	@ epilogue:
84*9880d681SAndroid Build Coastguard Worker	add	sp, fp, #4
85*9880d681SAndroid Build Coastguard Worker	bx	lr
86*9880d681SAndroid Build Coastguard Worker	.personality	__gxx_personality_v0
87*9880d681SAndroid Build Coastguard Worker	.handlerdata
88*9880d681SAndroid Build Coastguard Worker	.fnend
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker@ CHECK: Section {
91*9880d681SAndroid Build Coastguard Worker@ CHECK:   Name: .ARM.extab.TEST3
92*9880d681SAndroid Build Coastguard Worker@ CHECK:   SectionData (
93*9880d681SAndroid Build Coastguard Worker@ CHECK:     0000: 00000000 B0009B00                    |........|
94*9880d681SAndroid Build Coastguard Worker@ CHECK:   )
95*9880d681SAndroid Build Coastguard Worker@ CHECK: }
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Worker@-------------------------------------------------------------------------------
100*9880d681SAndroid Build Coastguard Worker@ TEST4: Check ".setfp fp, sp" and ".setfp fp, fp" directive.
101*9880d681SAndroid Build Coastguard Worker@-------------------------------------------------------------------------------
102*9880d681SAndroid Build Coastguard Worker	.section	.TEST4
103*9880d681SAndroid Build Coastguard Worker	.globl	func4
104*9880d681SAndroid Build Coastguard Worker	.type	func4,%function
105*9880d681SAndroid Build Coastguard Worker	.align	2
106*9880d681SAndroid Build Coastguard Worker	.fnstart
107*9880d681SAndroid Build Coastguard Workerfunc4:
108*9880d681SAndroid Build Coastguard Worker	@ prologue:
109*9880d681SAndroid Build Coastguard Worker	.setfp	fp, sp, #8
110*9880d681SAndroid Build Coastguard Worker	add	fp, sp, #8
111*9880d681SAndroid Build Coastguard Worker	.setfp	fp, fp, #8
112*9880d681SAndroid Build Coastguard Worker	add	fp, fp, #8
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Worker	@ epilogue:
115*9880d681SAndroid Build Coastguard Worker	sub	sp, fp, #16
116*9880d681SAndroid Build Coastguard Worker	bx	lr
117*9880d681SAndroid Build Coastguard Worker	.personality	__gxx_personality_v0
118*9880d681SAndroid Build Coastguard Worker	.handlerdata
119*9880d681SAndroid Build Coastguard Worker	.fnend
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Worker@ CHECK: Section {
122*9880d681SAndroid Build Coastguard Worker@ CHECK:   Name: .ARM.extab.TEST4
123*9880d681SAndroid Build Coastguard Worker@ CHECK:   SectionData (
124*9880d681SAndroid Build Coastguard Worker@ CHECK:     0000: 00000000 B0439B00                    |.....C..|
125*9880d681SAndroid Build Coastguard Worker@ CHECK:   )
126*9880d681SAndroid Build Coastguard Worker@ CHECK: }
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Worker@-------------------------------------------------------------------------------
131*9880d681SAndroid Build Coastguard Worker@ TEST5: Check .setfp, .save, .setfp directive.
132*9880d681SAndroid Build Coastguard Worker@-------------------------------------------------------------------------------
133*9880d681SAndroid Build Coastguard Worker	.section	.TEST5
134*9880d681SAndroid Build Coastguard Worker	.globl	func5
135*9880d681SAndroid Build Coastguard Worker	.type	func5,%function
136*9880d681SAndroid Build Coastguard Worker	.align	2
137*9880d681SAndroid Build Coastguard Worker	.fnstart
138*9880d681SAndroid Build Coastguard Workerfunc5:
139*9880d681SAndroid Build Coastguard Worker	@ prologue:
140*9880d681SAndroid Build Coastguard Worker	.setfp	fp, sp, #16
141*9880d681SAndroid Build Coastguard Worker	add	fp, sp, #16
142*9880d681SAndroid Build Coastguard Worker	.save	{r4, r5, r6, r7, r8}
143*9880d681SAndroid Build Coastguard Worker	push	{r4, r5, r6, r7, r8}
144*9880d681SAndroid Build Coastguard Worker	.pad	#8
145*9880d681SAndroid Build Coastguard Worker	add	sp, sp, #8
146*9880d681SAndroid Build Coastguard Worker	.pad	#8
147*9880d681SAndroid Build Coastguard Worker	sub	sp, sp, #8
148*9880d681SAndroid Build Coastguard Worker	.save	{r9, r10}
149*9880d681SAndroid Build Coastguard Worker	push	{r9, r10}
150*9880d681SAndroid Build Coastguard Worker	.setfp	fp, sp, #24
151*9880d681SAndroid Build Coastguard Worker	add	fp, sp, #24
152*9880d681SAndroid Build Coastguard Worker
153*9880d681SAndroid Build Coastguard Worker	@ epilogue:
154*9880d681SAndroid Build Coastguard Worker	sub	sp, fp, #24
155*9880d681SAndroid Build Coastguard Worker	pop	{r9, r10}
156*9880d681SAndroid Build Coastguard Worker	add	sp, sp, #16
157*9880d681SAndroid Build Coastguard Worker	pop	{r4, r5, r6, r7, r8}
158*9880d681SAndroid Build Coastguard Worker	bx	lr
159*9880d681SAndroid Build Coastguard Worker	.personality	__gxx_personality_v0
160*9880d681SAndroid Build Coastguard Worker	.handlerdata
161*9880d681SAndroid Build Coastguard Worker	.fnend
162*9880d681SAndroid Build Coastguard Worker
163*9880d681SAndroid Build Coastguard Worker@ CHECK: Section {
164*9880d681SAndroid Build Coastguard Worker@ CHECK:   Name: .ARM.extab.TEST5
165*9880d681SAndroid Build Coastguard Worker@ CHECK:   SectionData (
166*9880d681SAndroid Build Coastguard Worker@ CHECK:     0000: 00000000 80459B01 B0A40360           |.....E.....`|
167*9880d681SAndroid Build Coastguard Worker@ CHECK:   )
168*9880d681SAndroid Build Coastguard Worker@ CHECK: }
169