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
7 # Test thumb and arm branches round trip through -r.
8 # Test movw/movt pairs have low bit set properly for thumb vs arm.
15 flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
20 attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
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,
37 type: ARM_RELOC_HALF_SECTDIFF
49 type: ARM_RELOC_HALF_SECTDIFF
85 type: ARM_RELOC_HALF_SECTDIFF
97 type: ARM_RELOC_HALF_SECTDIFF
133 type: ARM_RELOC_HALF_SECTDIFF
145 type: ARM_RELOC_HALF_SECTDIFF
181 type: ARM_RELOC_HALF_SECTDIFF
193 type: ARM_RELOC_HALF_SECTDIFF
231 desc: [ N_ARM_THUMB_DEF ]
232 value: 0x0000000000000000
236 desc: [ N_ARM_THUMB_DEF ]
237 value: 0x0000000000000024
241 value: 0x000000000000004E
245 value: 0x0000000000000026
248 # CHECK: defined-atoms:
251 # CHECK: - kind: modeThumbCode
254 # CHECK: - kind: thumb_movw
258 # CHECK: - kind: thumb_movt
262 # CHECK: - kind: thumb_movw_funcRel
266 # CHECK: - kind: thumb_movt_funcRel
270 # CHECK: - kind: thumb_movw
274 # CHECK: - kind: thumb_movt
278 # CHECK: - kind: thumb_movw_funcRel
282 # CHECK: - kind: thumb_movt_funcRel
288 # CHECK: - kind: modeThumbCode
293 # CHECK: - kind: arm_movw
297 # CHECK: - kind: arm_movt
301 # CHECK: - kind: arm_movw_funcRel
305 # CHECK: - kind: arm_movt_funcRel
309 # CHECK: - kind: arm_movw
313 # CHECK: - kind: arm_movt
317 # CHECK: - kind: arm_movw_funcRel
321 # CHECK: - kind: arm_movt_funcRel
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
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
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))
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))