]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/mach-o/arm-interworking-movw.yaml
Vendor import of lld trunk r290819:
[FreeBSD/FreeBSD.git] / test / mach-o / arm-interworking-movw.yaml
1 # REQUIRES: arm
2 # RUN: lld -flavor darwin -arch armv7 -r -print_atoms %s -o %t  | FileCheck %s
3 # RUN: lld -flavor darwin -arch armv7 -dylib -print_atoms %t -o %t2 \
4 # RUN:     %p/Inputs/armv7/libSystem.yaml -sectalign __TEXT __text 0x1000  | FileCheck %s
5 # RUN: llvm-objdump -d -macho -no-symbolic-operands %t2 | FileCheck -check-prefix=CODE %s
6 #
7 # Test thumb and arm branches round trip through -r.
8 # Test movw/movt pairs have low bit set properly for thumb vs arm.
9 #
10 #
11
12 --- !mach-o
13 arch:            armv7
14 file-type:       MH_OBJECT
15 flags:           [ MH_SUBSECTIONS_VIA_SYMBOLS ]
16 sections:
17   - segment:         __TEXT
18     section:         __text
19     type:            S_REGULAR
20     attributes:      [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
21     alignment:       2
22     address:         0x0000000000000000
23     content:         [ 0x40, 0xF2, 0x25, 0x00, 0xC0, 0xF2, 0x00, 0x00,
24                        0x40, 0xF2, 0x01, 0x01, 0xC0, 0xF2, 0x00, 0x01,
25                        0x40, 0xF2, 0x4E, 0x02, 0xC0, 0xF2, 0x00, 0x02,
26                        0x40, 0xF2, 0x2A, 0x03, 0xC0, 0xF2, 0x00, 0x03,
27                        0x78, 0x44, 0x70, 0x47, 0x70, 0x47, 0x25, 0x00,
28                        0x00, 0xE3, 0x00, 0x00, 0x40, 0xE3, 0xD7, 0x1F,
29                        0x0F, 0xE3, 0xFF, 0x1F, 0x4F, 0xE3, 0x4E, 0x20,
30                        0x00, 0xE3, 0x00, 0x20, 0x40, 0xE3, 0x00, 0x30,
31                        0x00, 0xE3, 0x00, 0x30, 0x40, 0xE3, 0x0F, 0x00,
32                        0x80, 0xE0, 0x1E, 0xFF, 0x2F, 0xE1, 0x1E, 0xFF,
33                        0x2F, 0xE1 ]
34     relocations:
35       - offset:          0x00000042
36         scattered:       true
37         type:            ARM_RELOC_HALF_SECTDIFF
38         length:          1
39         pc-rel:          false
40         value:           0x0000004E
41       - offset:          0x00000000
42         scattered:       true
43         type:            ARM_RELOC_PAIR
44         length:          1
45         pc-rel:          false
46         value:           0x00000046
47       - offset:          0x0000003E
48         scattered:       true
49         type:            ARM_RELOC_HALF_SECTDIFF
50         length:          0
51         pc-rel:          false
52         value:           0x0000004E
53       - offset:          0x00000000
54         scattered:       true
55         type:            ARM_RELOC_PAIR
56         length:          0
57         pc-rel:          false
58         value:           0x00000046
59       - offset:          0x0000003A
60         type:            ARM_RELOC_HALF
61         length:          1
62         pc-rel:          false
63         extern:          false
64         symbol:          1
65       - offset:          0x0000004E
66         type:            ARM_RELOC_PAIR
67         length:          1
68         pc-rel:          false
69         extern:          false
70         symbol:          16777215
71       - offset:          0x00000036
72         type:            ARM_RELOC_HALF
73         length:          0
74         pc-rel:          false
75         extern:          false
76         symbol:          1
77       - offset:          0x00000000
78         type:            ARM_RELOC_PAIR
79         length:          0
80         pc-rel:          false
81         extern:          false
82         symbol:          16777215
83       - offset:          0x00000032
84         scattered:       true
85         type:            ARM_RELOC_HALF_SECTDIFF
86         length:          1
87         pc-rel:          false
88         value:           0x00000024
89       - offset:          0x0000FFD6
90         scattered:       true
91         type:            ARM_RELOC_PAIR
92         length:          1
93         pc-rel:          false
94         value:           0x00000046
95       - offset:          0x0000002E
96         scattered:       true
97         type:            ARM_RELOC_HALF_SECTDIFF
98         length:          0
99         pc-rel:          false
100         value:           0x00000024
101       - offset:          0x0000FFFF
102         scattered:       true
103         type:            ARM_RELOC_PAIR
104         length:          0
105         pc-rel:          false
106         value:           0x00000046
107       - offset:          0x0000002A
108         type:            ARM_RELOC_HALF
109         length:          1
110         pc-rel:          false
111         extern:          false
112         symbol:          1
113       - offset:          0x00000025
114         type:            ARM_RELOC_PAIR
115         length:          1
116         pc-rel:          false
117         extern:          false
118         symbol:          16777215
119       - offset:          0x00000026
120         type:            ARM_RELOC_HALF
121         length:          0
122         pc-rel:          false
123         extern:          false
124         symbol:          1
125       - offset:          0x00000000
126         type:            ARM_RELOC_PAIR
127         length:          0
128         pc-rel:          false
129         extern:          false
130         symbol:          16777215
131       - offset:          0x0000001C
132         scattered:       true
133         type:            ARM_RELOC_HALF_SECTDIFF
134         length:          3
135         pc-rel:          false
136         value:           0x0000004E
137       - offset:          0x0000002A
138         scattered:       true
139         type:            ARM_RELOC_PAIR
140         length:          3
141         pc-rel:          false
142         value:           0x00000020
143       - offset:          0x00000018
144         scattered:       true
145         type:            ARM_RELOC_HALF_SECTDIFF
146         length:          2
147         pc-rel:          false
148         value:           0x0000004E
149       - offset:          0x00000000
150         scattered:       true
151         type:            ARM_RELOC_PAIR
152         length:          2
153         pc-rel:          false
154         value:           0x00000020
155       - offset:          0x00000014
156         type:            ARM_RELOC_HALF
157         length:          3
158         pc-rel:          false
159         extern:          false
160         symbol:          1
161       - offset:          0x0000004E
162         type:            ARM_RELOC_PAIR
163         length:          3
164         pc-rel:          false
165         extern:          false
166         symbol:          16777215
167       - offset:          0x00000010
168         type:            ARM_RELOC_HALF
169         length:          2
170         pc-rel:          false
171         extern:          false
172         symbol:          1
173       - offset:          0x00000000
174         type:            ARM_RELOC_PAIR
175         length:          2
176         pc-rel:          false
177         extern:          false
178         symbol:          16777215
179       - offset:          0x0000000C
180         scattered:       true
181         type:            ARM_RELOC_HALF_SECTDIFF
182         length:          3
183         pc-rel:          false
184         value:           0x00000024
185       - offset:          0x00000000
186         scattered:       true
187         type:            ARM_RELOC_PAIR
188         length:          3
189         pc-rel:          false
190         value:           0x00000020
191       - offset:          0x00000008
192         scattered:       true
193         type:            ARM_RELOC_HALF_SECTDIFF
194         length:          2
195         pc-rel:          false
196         value:           0x00000024
197       - offset:          0x00000000
198         scattered:       true
199         type:            ARM_RELOC_PAIR
200         length:          2
201         pc-rel:          false
202         value:           0x00000020
203       - offset:          0x00000004
204         type:            ARM_RELOC_HALF
205         length:          3
206         pc-rel:          false
207         extern:          false
208         symbol:          1
209       - offset:          0x00000025
210         type:            ARM_RELOC_PAIR
211         length:          3
212         pc-rel:          false
213         extern:          false
214         symbol:          16777215
215       - offset:          0x00000000
216         type:            ARM_RELOC_HALF
217         length:          2
218         pc-rel:          false
219         extern:          false
220         symbol:          1
221       - offset:          0x00000000
222         type:            ARM_RELOC_PAIR
223         length:          2
224         pc-rel:          false
225         extern:          false
226         symbol:          16777215
227 local-symbols:
228   - name:            _t1
229     type:            N_SECT
230     sect:            1
231     desc:            [ N_ARM_THUMB_DEF ]
232     value:           0x0000000000000000
233   - name:            _t2
234     type:            N_SECT
235     sect:            1
236     desc:            [ N_ARM_THUMB_DEF ]
237     value:           0x0000000000000024
238   - name:            _a2
239     type:            N_SECT
240     sect:            1
241     value:           0x000000000000004E
242   - name:            _a1
243     type:            N_SECT
244     sect:            1
245     value:           0x0000000000000026
246 ...
247
248 # CHECK: defined-atoms:
249 # CHECK:   - name:            _t1
250 # CHECK:     references:
251 # CHECK:       - kind:            modeThumbCode
252 # CHECK:         offset:          0
253 # CHECK:         target:          _t1
254 # CHECK:       - kind:            thumb_movw
255 # CHECK:         offset:          0
256 # CHECK:         target:          _t2
257 # CHECK-NOT:     addend:
258 # CHECK:       - kind:            thumb_movt
259 # CHECK:         offset:          4
260 # CHECK:         target:          _t2
261 # CHECK-NOT:     addend:
262 # CHECK:       - kind:            thumb_movw_funcRel
263 # CHECK:         offset:          8
264 # CHECK:         target:          _t2
265 # CHECK:         addend:          -36
266 # CHECK:       - kind:            thumb_movt_funcRel
267 # CHECK:         offset:          12
268 # CHECK:         target:          _t2
269 # CHECK:         addend:          -36
270 # CHECK:       - kind:            thumb_movw
271 # CHECK:         offset:          16
272 # CHECK:         target:          _a2
273 # CHECK-NOT:     addend:
274 # CHECK:       - kind:            thumb_movt
275 # CHECK:         offset:          20
276 # CHECK:         target:          _a2
277 # CHECK-NOT:     addend:
278 # CHECK:       - kind:            thumb_movw_funcRel
279 # CHECK:         offset:          24
280 # CHECK:         target:          _a2
281 # CHECK:         addend:          -36
282 # CHECK:       - kind:            thumb_movt_funcRel
283 # CHECK:         offset:          28
284 # CHECK:         target:          _a2
285 # CHECK:         addend:          -36
286 # CHECK:   - name:            _t2
287 # CHECK:     references:
288 # CHECK:       - kind:            modeThumbCode
289 # CHECK:         offset:          0
290 # CHECK:         target:          _t2
291 # CHECK:   - name:            _a1
292 # CHECK:     references:
293 # CHECK:       - kind:            arm_movw
294 # CHECK:         offset:          0
295 # CHECK:         target:          _t2
296 # CHECK-NOT:     addend:
297 # CHECK:       - kind:            arm_movt
298 # CHECK:         offset:          4
299 # CHECK:         target:          _t2
300 # CHECK-NOT:     addend:
301 # CHECK:       - kind:            arm_movw_funcRel
302 # CHECK:         offset:          8
303 # CHECK:         target:          _t2
304 # CHECK:         addend:          -40
305 # CHECK:       - kind:            arm_movt_funcRel
306 # CHECK:         offset:          12
307 # CHECK:         target:          _t2
308 # CHECK:         addend:          -40
309 # CHECK:       - kind:            arm_movw
310 # CHECK:         offset:          16
311 # CHECK:         target:          _a2
312 # CHECK-NOT:     addend:
313 # CHECK:       - kind:            arm_movt
314 # CHECK:         offset:          20
315 # CHECK:         target:          _a2
316 # CHECK-NOT:     addend:
317 # CHECK:       - kind:            arm_movw_funcRel
318 # CHECK:         offset:          24
319 # CHECK:         target:          _a2
320 # CHECK:         addend:          -40
321 # CHECK:       - kind:            arm_movt_funcRel
322 # CHECK:         offset:          28
323 # CHECK:         target:          _a2
324 # CHECK:         addend:          -40
325 # CHECK:   - name:            _a2
326
327
328 # CODE: _t1:
329 # CODE-NEXT:                     movw   r0, #4133
330 # CODE-NEXT:                   movt     r0, #0
331 # CODE-NEXT:                   movw     r1, #1
332 # CODE-NEXT:                   movt     r1, #0
333 # CODE-NEXT:                   movw     r2, #4174
334 # CODE-NEXT:                   movt     r2, #0
335 # CODE-NEXT:                   movw     r3, #42
336 # CODE-NEXT:                   movt     r3, #0
337
338
339 # CODE: _a1:
340 # CODE-NEXT:                     movw   r0, #4133
341 # CODE-NEXT:                   movt     r0, #0
342 # CODE-NEXT:                   movw     r1, #65495
343 # CODE-NEXT:                   movt     r1, #65535
344 # CODE-NEXT:                   movw     r2, #4174
345 # CODE-NEXT:                   movt     r2, #0
346 # CODE-NEXT:                   movw     r3, #0
347 # CODE-NEXT:                   movt     r3, #0
348
349
350
351 #       .syntax unified
352 #       .align  2
353 #
354 #       .code   16
355 #  .thumb_func  _t1
356 #_t1:
357 #       movw    r0, :lower16:(_t2)
358 #       movt    r0, :upper16:(_t2)
359 #       movw    r1, :lower16:(_t2-(L0+4))
360 #       movt    r1, :upper16:(_t2-(L0+4))
361 #       movw    r2, :lower16:(_a2)
362 #       movt    r2, :upper16:(_a2)
363 #       movw    r3, :lower16:(_a2-(L0+4))
364 #       movt    r3, :upper16:(_a2-(L0+4))
365 #L0:
366 #       add     r0, pc
367 #       bx      lr
368 #
369 #
370 #       .code   16
371 #       .thumb_func     _t2
372 #_t2:
373 #       bx      lr
374 #
375 #
376 #
377 #       .code   32
378 #_a1:
379 #       movw    r0, :lower16:(_t2)
380 #       movt    r0, :upper16:(_t2)
381 #       movw    r1, :lower16:(_t2-(L1+8))
382 #       movt    r1, :upper16:(_t2-(L1+8))
383 #       movw    r2, :lower16:(_a2)
384 #       movt    r2, :upper16:(_a2)
385 #       movw    r3, :lower16:(_a2-(L1+8))
386 #       movt    r3, :upper16:(_a2-(L1+8))
387 #L1:
388 #       add     r0, pc
389 #       bx      lr
390 #
391 #_a2:
392 #       bx      lr
393