blob: ce7fe10b43c47ab15ed84876c0426bb3fab0871b [file] [log] [blame]
Logan Chien4ea23b52013-05-10 16:17:24 +00001@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \
2@ RUN: | llvm-readobj -s -sd | FileCheck %s
3
4@ Check for .setfp directive.
5
6@ The .setfp directive will track the offset between the frame pointer and
7@ the stack pointer. This is required for the function that will change
8@ the stack pointer out of the function prologue. If the exception is thrown,
9@ then libunwind will reconstruct the stack pointer from the frame pointer.
10@ The reconstruction code is implemented by two different unwind opcode:
11@ (i) the unwind opcode to copy stack offset from the other register, and
Alp Tokercb402912014-01-24 17:20:08 +000012@ (ii) the unwind opcode to add or subtract the stack offset.
Logan Chien4ea23b52013-05-10 16:17:24 +000013@
14@ This file includes several cases separated by different range of -offset
15@
16@ (-offset) < 0x00
17@ (-offset) == 0x00
18@ 0x04 <= (-offset) <= 0x100
19@ 0x104 <= (-offset) <= 0x200
20@ 0x204 <= (-offset)
21
22
23 .syntax unified
24
25@-------------------------------------------------------------------------------
26@ TEST1
27@-------------------------------------------------------------------------------
28 .section .TEST1
29 .globl func1
30 .align 2
31 .type func1,%function
32 .fnstart
33func1:
34 .setfp fp, sp, #0
35 add fp, sp, #0
36 sub sp, fp, #0
37 bx lr
38 .personality __gxx_personality_v0
39 .handlerdata
40 .fnend
41
42@-------------------------------------------------------------------------------
43@ The assembler should emit 0x9B to copy stack pointer from r11.
44@-------------------------------------------------------------------------------
45@ CHECK: Section {
46@ CHECK: Name: .ARM.extab.TEST1
47@ CHECK: SectionData (
48@ CHECK: 0000: 00000000 B0B09B00 |........|
49@ CHECK: )
50@ CHECK: }
51
52
53
54@-------------------------------------------------------------------------------
55@ TEST2
56@-------------------------------------------------------------------------------
57 .section .TEST2
58 .globl func2a
59 .align 2
60 .type func2a,%function
61 .fnstart
62func2a:
63 .setfp fp, sp, #-4
64 add fp, sp, #4
65 sub sp, fp, #4
66 bx lr
67 .personality __gxx_personality_v0
68 .handlerdata
69 .fnend
70
71 .globl func2b
72 .align 2
73 .type func2b,%function
74 .fnstart
75func2b:
76 .setfp fp, sp, #-0x100
77 add fp, sp, #0x100
78 sub sp, fp, #0x100
79 bx lr
80 .personality __gxx_personality_v0
81 .handlerdata
82 .fnend
83
84@-------------------------------------------------------------------------------
85@ The assembler should emit 0x9B to copy stack pointer from r11.
86@ The assembler should emit ((-offset - 4) >> 2) for offset.
87@-------------------------------------------------------------------------------
88@ CHECK: Section {
89@ CHECK: Name: .ARM.extab.TEST2
90@ CHECK: SectionData (
91@ CHECK: 0000: 00000000 B0009B00 00000000 B03F9B00 |.............?..|
92@ CHECK: )
93@ CHECK: }
94
95
96
97@-------------------------------------------------------------------------------
98@ TEST3
99@-------------------------------------------------------------------------------
100 .section .TEST3
101 .globl func3a
102 .align 2
103 .type func3a,%function
104 .fnstart
105func3a:
106 .setfp fp, sp, #-0x104
107 sub fp, sp, #0x104
108 add sp, fp, #0x104
109 bx lr
110 .personality __gxx_personality_v0
111 .handlerdata
112 .fnend
113
114 .globl func3b
115 .align 2
116 .type func3b,%function
117 .fnstart
118func3b:
119 .setfp fp, sp, #-0x200
120 sub fp, sp, #0x200
121 add sp, fp, #0x200
122 bx lr
123 .personality __gxx_personality_v0
124 .handlerdata
125 .fnend
126
127@-------------------------------------------------------------------------------
128@ The assembler should emit 0x9B to copy stack pointer from r11.
129@ The assembler should emit 0x3F and ((-offset - 0x104) >> 2) for offset.
130@-------------------------------------------------------------------------------
131@ CHECK: Section {
132@ CHECK: Name: .ARM.extab.TEST3
133@ CHECK: SectionData (
Logan Chien325823a2013-06-09 12:22:30 +0000134@ CHECK: 0000: 00000000 3F009B00 00000000 3F3F9B00 |....?.......??..|
Logan Chien4ea23b52013-05-10 16:17:24 +0000135@ CHECK: )
136@ CHECK: }
137
138
139
140@-------------------------------------------------------------------------------
141@ TEST4
142@-------------------------------------------------------------------------------
143 .section .TEST4
144 .globl func4a
145 .align 2
146 .type func4a,%function
147 .fnstart
148func4a:
149 .setfp fp, sp, #-0x204
150 sub fp, sp, #0x204
151 add sp, fp, #0x204
152 bx lr
153 .personality __gxx_personality_v0
154 .handlerdata
155 .fnend
156
157 .globl func4b
158 .align 2
159 .type func4b,%function
160 .fnstart
161func4b:
162 .setfp fp, sp, #-0x580
163 sub fp, sp, #0x580
164 add sp, fp, #0x580
165 bx lr
166 .personality __gxx_personality_v0
167 .handlerdata
168 .fnend
169
170@-------------------------------------------------------------------------------
171@ The assembler should emit 0x9B to copy stack pointer from r11.
172@ The assembler should emit 0xB2 and the ULEB128 encoding of
173@ ((-offset - 0x204) >> 2) for offset.
174@-------------------------------------------------------------------------------
175@ CHECK: Section {
176@ CHECK: Name: .ARM.extab.TEST4
177@ CHECK: SectionData (
178@ CHECK: 0000: 00000000 00B29B00 00000000 DFB29B01 |................|
179@ CHECK: 0010: B0B0B001 |....|
180@ CHECK: )
181@ CHECK: }
182
183
184
185@-------------------------------------------------------------------------------
186@ TEST5
187@-------------------------------------------------------------------------------
188 .section .TEST5
189 .globl func5a
190 .align 2
191 .type func5a,%function
192 .fnstart
193func5a:
194 .setfp fp, sp, #0x4
195 add fp, sp, #0x4
196 sub sp, fp, #0x4
197 bx lr
198 .personality __gxx_personality_v0
199 .handlerdata
200 .fnend
201
202 .globl func5b
203 .align 2
204 .type func5b,%function
205 .fnstart
206func5b:
207 .setfp fp, sp, #0x104
208 add fp, sp, #0x104
209 sub sp, fp, #0x104
210 bx lr
211 .personality __gxx_personality_v0
212 .handlerdata
213 .fnend
214
215 .globl func5c
216 .align 2
217 .type func5c,%function
218 .fnstart
219func5c:
220 .setfp fp, sp, #0x204
221 add fp, sp, #0x204
222 sub sp, fp, #0x204
223 bx lr
224 .personality __gxx_personality_v0
225 .handlerdata
226 .fnend
227
228@-------------------------------------------------------------------------------
229@ The assembler should emit 0x9B to copy stack pointer from r11.
230@ The assembler should emit (0x40 | (offset - 4)) >> 2 for offset.
231@ If (offset - 4) is greater than 0x3f, then multiple 0x7f should be emitted.
232@-------------------------------------------------------------------------------
233@ CHECK: Section {
234@ CHECK: Name: .ARM.extab.TEST5
235@ CHECK: SectionData (
Logan Chien325823a2013-06-09 12:22:30 +0000236@ CHECK: 0000: 00000000 B0409B00 00000000 7F409B00 |.....@.......@..|
237@ CHECK: 0010: 00000000 7F409B01 B0B0B07F |.....@......|
Logan Chien4ea23b52013-05-10 16:17:24 +0000238@ CHECK: )
239@ CHECK: }