| # RUN: ld64.lld -arch armv7 -r -print_atoms %s -o %t | FileCheck %s |
| # RUN: ld64.lld -arch armv7 -r -print_atoms %t -o %t2 | FileCheck %s |
| # |
| # Test parsing of armv7 relocations. |
| # |
| # |
| |
| --- !mach-o |
| arch: armv7 |
| file-type: MH_OBJECT |
| flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ] |
| sections: |
| - segment: __TEXT |
| section: __text |
| type: S_REGULAR |
| attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ] |
| alignment: 2 |
| address: 0x0000000000000000 |
| content: [ 0x00, 0xF0, 0x4E, 0xF8, 0x00, 0xF0, 0x4E, 0xF8, |
| 0xFF, 0xF7, 0xFA, 0xFF, 0xFF, 0xF7, 0xFA, 0xFF, |
| 0xFF, 0xF7, 0xF6, 0xBF, 0x40, 0xF2, 0x72, 0x01, |
| 0xC0, 0xF2, 0x00, 0x01, 0x40, 0xF2, 0x7A, 0x02, |
| 0xC0, 0xF2, 0x00, 0x02, 0x40, 0xF2, 0x29, 0x01, |
| 0xC0, 0xF2, 0x00, 0x01, 0x79, 0x44, 0x40, 0xF2, |
| 0xA0, 0x03, 0xC0, 0xF2, 0x00, 0x03, 0x40, 0xF2, |
| 0xA8, 0x04, 0xC0, 0xF2, 0x00, 0x04, 0x40, 0xF2, |
| 0x57, 0x03, 0xC0, 0xF2, 0x00, 0x03, 0x40, 0xF2, |
| 0x00, 0x05, 0xC0, 0xF2, 0x00, 0x05, 0x40, 0xF2, |
| 0x08, 0x06, 0xC0, 0xF2, 0x00, 0x06, 0xC0, 0x46, |
| 0x10, 0x00, 0x00, 0xEB, 0x10, 0x00, 0x00, 0xEB, |
| 0xE6, 0xFF, 0xFF, 0xEB, 0xE6, 0xFF, 0xFF, 0xEB, |
| 0xE4, 0xFF, 0xFF, 0xEA, 0x20, 0x10, 0x00, 0xE3, |
| 0x00, 0x10, 0x40, 0xE3, 0x28, 0x20, 0x00, 0xE3, |
| 0x00, 0x20, 0x40, 0xE3, 0x0F, 0x10, 0x81, 0xE0, |
| 0xA0, 0x30, 0x00, 0xE3, 0x00, 0x30, 0x40, 0xE3, |
| 0xA8, 0x40, 0x00, 0xE3, 0x00, 0x40, 0x40, 0xE3, |
| 0x00, 0x50, 0x00, 0xE3, 0x00, 0x50, 0x40, 0xE3, |
| 0x08, 0x60, 0x00, 0xE3, 0x00, 0x60, 0x40, 0xE3 ] |
| relocations: |
| - offset: 0x0000009C |
| type: ARM_RELOC_HALF |
| length: 1 |
| pc-rel: false |
| extern: true |
| symbol: 4 |
| - offset: 0x00000008 |
| type: ARM_RELOC_PAIR |
| length: 1 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x00000098 |
| type: ARM_RELOC_HALF |
| length: 0 |
| pc-rel: false |
| extern: true |
| symbol: 4 |
| - offset: 0x00000000 |
| type: ARM_RELOC_PAIR |
| length: 0 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x00000094 |
| type: ARM_RELOC_HALF |
| length: 1 |
| pc-rel: false |
| extern: true |
| symbol: 4 |
| - offset: 0x00000000 |
| type: ARM_RELOC_PAIR |
| length: 1 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x00000090 |
| type: ARM_RELOC_HALF |
| length: 0 |
| pc-rel: false |
| extern: true |
| symbol: 4 |
| - offset: 0x00000000 |
| type: ARM_RELOC_PAIR |
| length: 0 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x0000008C |
| scattered: true |
| type: ARM_RELOC_HALF |
| length: 1 |
| pc-rel: false |
| value: 0x000000A0 |
| - offset: 0x000000A8 |
| type: ARM_RELOC_PAIR |
| length: 1 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x00000088 |
| scattered: true |
| type: ARM_RELOC_HALF |
| length: 0 |
| pc-rel: false |
| value: 0x000000A0 |
| - offset: 0x00000000 |
| type: ARM_RELOC_PAIR |
| length: 0 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x00000084 |
| type: ARM_RELOC_HALF |
| length: 1 |
| pc-rel: false |
| extern: false |
| symbol: 2 |
| - offset: 0x000000A0 |
| type: ARM_RELOC_PAIR |
| length: 1 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x00000080 |
| type: ARM_RELOC_HALF |
| length: 0 |
| pc-rel: false |
| extern: false |
| symbol: 2 |
| - offset: 0x00000000 |
| type: ARM_RELOC_PAIR |
| length: 0 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x00000078 |
| scattered: true |
| type: ARM_RELOC_HALF_SECTDIFF |
| length: 1 |
| pc-rel: false |
| value: 0x000000A0 |
| - offset: 0x00000028 |
| scattered: true |
| type: ARM_RELOC_PAIR |
| length: 1 |
| pc-rel: false |
| value: 0x00000080 |
| - offset: 0x00000074 |
| scattered: true |
| type: ARM_RELOC_HALF_SECTDIFF |
| length: 0 |
| pc-rel: false |
| value: 0x000000A0 |
| - offset: 0x00000000 |
| scattered: true |
| type: ARM_RELOC_PAIR |
| length: 0 |
| pc-rel: false |
| value: 0x00000080 |
| - offset: 0x00000070 |
| scattered: true |
| type: ARM_RELOC_HALF_SECTDIFF |
| length: 1 |
| pc-rel: false |
| value: 0x000000A0 |
| - offset: 0x00000020 |
| scattered: true |
| type: ARM_RELOC_PAIR |
| length: 1 |
| pc-rel: false |
| value: 0x00000080 |
| - offset: 0x0000006C |
| scattered: true |
| type: ARM_RELOC_HALF_SECTDIFF |
| length: 0 |
| pc-rel: false |
| value: 0x000000A0 |
| - offset: 0x00000000 |
| scattered: true |
| type: ARM_RELOC_PAIR |
| length: 0 |
| pc-rel: false |
| value: 0x00000080 |
| - offset: 0x00000068 |
| type: ARM_RELOC_BR24 |
| length: 2 |
| pc-rel: true |
| extern: true |
| symbol: 4 |
| - offset: 0x00000064 |
| type: ARM_RELOC_BR24 |
| length: 2 |
| pc-rel: true |
| extern: true |
| symbol: 4 |
| - offset: 0x00000060 |
| type: ARM_RELOC_BR24 |
| length: 2 |
| pc-rel: true |
| extern: true |
| symbol: 4 |
| - offset: 0x0000005C |
| scattered: true |
| type: ARM_RELOC_BR24 |
| length: 2 |
| pc-rel: true |
| value: 0x000000A0 |
| - offset: 0x00000058 |
| type: ARM_RELOC_BR24 |
| length: 2 |
| pc-rel: true |
| extern: false |
| symbol: 2 |
| - offset: 0x00000052 |
| type: ARM_RELOC_HALF |
| length: 3 |
| pc-rel: false |
| extern: true |
| symbol: 4 |
| - offset: 0x00000008 |
| type: ARM_RELOC_PAIR |
| length: 3 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x0000004E |
| type: ARM_RELOC_HALF |
| length: 2 |
| pc-rel: false |
| extern: true |
| symbol: 4 |
| - offset: 0x00000000 |
| type: ARM_RELOC_PAIR |
| length: 2 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x0000004A |
| type: ARM_RELOC_HALF |
| length: 3 |
| pc-rel: false |
| extern: true |
| symbol: 4 |
| - offset: 0x00000000 |
| type: ARM_RELOC_PAIR |
| length: 3 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x00000046 |
| type: ARM_RELOC_HALF |
| length: 2 |
| pc-rel: false |
| extern: true |
| symbol: 4 |
| - offset: 0x00000000 |
| type: ARM_RELOC_PAIR |
| length: 2 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x00000042 |
| type: ARM_RELOC_HALF |
| length: 3 |
| pc-rel: false |
| extern: false |
| symbol: 1 |
| - offset: 0x00000057 |
| type: ARM_RELOC_PAIR |
| length: 3 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x0000003E |
| type: ARM_RELOC_HALF |
| length: 2 |
| pc-rel: false |
| extern: false |
| symbol: 1 |
| - offset: 0x00000000 |
| type: ARM_RELOC_PAIR |
| length: 2 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x0000003A |
| scattered: true |
| type: ARM_RELOC_HALF |
| length: 3 |
| pc-rel: false |
| value: 0x000000A0 |
| - offset: 0x000000A8 |
| type: ARM_RELOC_PAIR |
| length: 3 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x00000036 |
| scattered: true |
| type: ARM_RELOC_HALF |
| length: 2 |
| pc-rel: false |
| value: 0x000000A0 |
| - offset: 0x00000000 |
| type: ARM_RELOC_PAIR |
| length: 2 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x00000032 |
| type: ARM_RELOC_HALF |
| length: 3 |
| pc-rel: false |
| extern: false |
| symbol: 2 |
| - offset: 0x000000A0 |
| type: ARM_RELOC_PAIR |
| length: 3 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x0000002E |
| type: ARM_RELOC_HALF |
| length: 2 |
| pc-rel: false |
| extern: false |
| symbol: 2 |
| - offset: 0x00000000 |
| type: ARM_RELOC_PAIR |
| length: 2 |
| pc-rel: false |
| extern: false |
| symbol: 16777215 |
| - offset: 0x00000028 |
| scattered: true |
| type: ARM_RELOC_HALF_SECTDIFF |
| length: 3 |
| pc-rel: false |
| value: 0x00000056 |
| - offset: 0x00000028 |
| scattered: true |
| type: ARM_RELOC_PAIR |
| length: 3 |
| pc-rel: false |
| value: 0x0000002E |
| - offset: 0x00000024 |
| scattered: true |
| type: ARM_RELOC_HALF_SECTDIFF |
| length: 2 |
| pc-rel: false |
| value: 0x00000056 |
| - offset: 0x00000000 |
| scattered: true |
| type: ARM_RELOC_PAIR |
| length: 2 |
| pc-rel: false |
| value: 0x0000002E |
| - offset: 0x00000020 |
| scattered: true |
| type: ARM_RELOC_HALF_SECTDIFF |
| length: 3 |
| pc-rel: false |
| value: 0x000000A0 |
| - offset: 0x0000007A |
| scattered: true |
| type: ARM_RELOC_PAIR |
| length: 3 |
| pc-rel: false |
| value: 0x0000002E |
| - offset: 0x0000001C |
| scattered: true |
| type: ARM_RELOC_HALF_SECTDIFF |
| length: 2 |
| pc-rel: false |
| value: 0x000000A0 |
| - offset: 0x00000000 |
| scattered: true |
| type: ARM_RELOC_PAIR |
| length: 2 |
| pc-rel: false |
| value: 0x0000002E |
| - offset: 0x00000018 |
| scattered: true |
| type: ARM_RELOC_HALF_SECTDIFF |
| length: 3 |
| pc-rel: false |
| value: 0x000000A0 |
| - offset: 0x00000072 |
| scattered: true |
| type: ARM_RELOC_PAIR |
| length: 3 |
| pc-rel: false |
| value: 0x0000002E |
| - offset: 0x00000014 |
| scattered: true |
| type: ARM_RELOC_HALF_SECTDIFF |
| length: 2 |
| pc-rel: false |
| value: 0x000000A0 |
| - offset: 0x00000000 |
| scattered: true |
| type: ARM_RELOC_PAIR |
| length: 2 |
| pc-rel: false |
| value: 0x0000002E |
| - offset: 0x00000010 |
| type: ARM_THUMB_RELOC_BR22 |
| length: 2 |
| pc-rel: true |
| extern: true |
| symbol: 4 |
| - offset: 0x0000000C |
| type: ARM_THUMB_RELOC_BR22 |
| length: 2 |
| pc-rel: true |
| extern: true |
| symbol: 4 |
| - offset: 0x00000008 |
| type: ARM_THUMB_RELOC_BR22 |
| length: 2 |
| pc-rel: true |
| extern: true |
| symbol: 4 |
| - offset: 0x00000004 |
| scattered: true |
| type: ARM_THUMB_RELOC_BR22 |
| length: 2 |
| pc-rel: true |
| value: 0x000000A0 |
| - offset: 0x00000000 |
| type: ARM_THUMB_RELOC_BR22 |
| length: 2 |
| pc-rel: true |
| extern: false |
| symbol: 2 |
| - segment: __DATA |
| section: __data |
| type: S_REGULAR |
| attributes: [ ] |
| address: 0x00000000000000A0 |
| content: [ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, |
| 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x04, 0x00, 0x00, 0x00, 0xA4, 0xFF, 0xFF, 0xFF, |
| 0xA4, 0xFF, 0xFF, 0xFF, 0x45, 0xFF, 0xFF, 0xFF, |
| 0x45, 0xFF, 0xFF, 0xFF ] |
| relocations: |
| - offset: 0x00000020 |
| scattered: true |
| type: ARM_RELOC_SECTDIFF |
| length: 2 |
| pc-rel: false |
| value: 0x00000000 |
| - offset: 0x00000000 |
| scattered: true |
| type: ARM_RELOC_PAIR |
| length: 2 |
| pc-rel: false |
| value: 0x000000C0 |
| - offset: 0x0000001C |
| scattered: true |
| type: ARM_RELOC_SECTDIFF |
| length: 2 |
| pc-rel: false |
| value: 0x00000000 |
| - offset: 0x00000000 |
| scattered: true |
| type: ARM_RELOC_PAIR |
| length: 2 |
| pc-rel: false |
| value: 0x000000BC |
| - offset: 0x00000018 |
| scattered: true |
| type: ARM_RELOC_SECTDIFF |
| length: 2 |
| pc-rel: false |
| value: 0x00000058 |
| - offset: 0x00000000 |
| scattered: true |
| type: ARM_RELOC_PAIR |
| length: 2 |
| pc-rel: false |
| value: 0x000000B8 |
| - offset: 0x00000014 |
| scattered: true |
| type: ARM_RELOC_SECTDIFF |
| length: 2 |
| pc-rel: false |
| value: 0x00000058 |
| - offset: 0x00000000 |
| scattered: true |
| type: ARM_RELOC_PAIR |
| length: 2 |
| pc-rel: false |
| value: 0x000000B4 |
| - offset: 0x00000010 |
| type: ARM_RELOC_VANILLA |
| length: 2 |
| pc-rel: false |
| extern: true |
| symbol: 4 |
| - offset: 0x0000000C |
| type: ARM_RELOC_VANILLA |
| length: 2 |
| pc-rel: false |
| extern: true |
| symbol: 4 |
| - offset: 0x00000008 |
| scattered: true |
| type: ARM_RELOC_VANILLA |
| length: 2 |
| pc-rel: false |
| value: 0x00000000 |
| - offset: 0x00000004 |
| type: ARM_RELOC_VANILLA |
| length: 2 |
| pc-rel: false |
| extern: false |
| symbol: 1 |
| local-symbols: |
| - name: _foo_thumb |
| type: N_SECT |
| sect: 1 |
| desc: [ N_ARM_THUMB_DEF ] |
| value: 0x0000000000000000 |
| - name: _x |
| type: N_SECT |
| sect: 2 |
| value: 0x00000000000000A0 |
| - name: _t1 |
| type: N_SECT |
| sect: 1 |
| desc: [ N_ARM_THUMB_DEF ] |
| value: 0x0000000000000056 |
| - name: _foo_arm |
| type: N_SECT |
| sect: 1 |
| value: 0x0000000000000058 |
| undefined-symbols: |
| - name: _undef |
| type: N_UNDF |
| scope: [ N_EXT ] |
| value: 0x0000000000000000 |
| ... |
| |
| # CHECK: defined-atoms: |
| # CHECK: - name: _x |
| # CHECK: type: data |
| # CHECK: references: |
| # CHECK: - kind: pointer32 |
| # CHECK: offset: 4 |
| # CHECK: target: _foo_thumb |
| # CHECK-NOT: addend: |
| # CHECK: - kind: pointer32 |
| # CHECK: offset: 8 |
| # CHECK: target: _foo_thumb |
| # CHECK: addend: 4 |
| # CHECK: - kind: pointer32 |
| # CHECK: offset: 12 |
| # CHECK: target: _undef |
| # CHECK-NOT: addend: |
| # CHECK: - kind: pointer32 |
| # CHECK: offset: 16 |
| # CHECK: target: _undef |
| # CHECK: addend: 4 |
| # CHECK: - kind: delta32 |
| # CHECK: offset: 20 |
| # CHECK: target: _foo_arm |
| # CHECK-NOT: addend: |
| # CHECK: - kind: delta32 |
| # CHECK: offset: 24 |
| # CHECK: target: _foo_arm |
| # CHECK: addend: 4 |
| # CHECK: - kind: delta32 |
| # CHECK: offset: 28 |
| # CHECK: target: _foo_thumb |
| # CHECK-NOT: addend: |
| # CHECK: - kind: delta32 |
| # CHECK: offset: 32 |
| # CHECK: target: _foo_thumb |
| # CHECK: addend: 4 |
| # CHECK: - name: _foo_thumb |
| # CHECK: references: |
| # CHECK: - kind: modeThumbCode |
| # CHECK: offset: 0 |
| # CHECK: - kind: thumb_bl22 |
| # CHECK: offset: 0 |
| # CHECK: target: _x |
| # CHECK-NOT: addend: |
| # CHECK: - kind: thumb_bl22 |
| # CHECK: offset: 4 |
| # CHECK: target: _x |
| # CHECK: addend: 4 |
| # CHECK: - kind: thumb_bl22 |
| # CHECK: offset: 8 |
| # CHECK: target: _undef |
| # CHECK-NOT: addend: |
| # CHECK: - kind: thumb_bl22 |
| # CHECK: offset: 12 |
| # CHECK: target: _undef |
| # CHECK: addend: 4 |
| # CHECK: - kind: thumb_b22 |
| # CHECK: offset: 16 |
| # CHECK: target: _undef |
| # CHECK-NOT: addend: |
| # CHECK: - kind: thumb_movw_funcRel |
| # CHECK: offset: 20 |
| # CHECK: target: _x |
| # CHECK: addend: -46 |
| # CHECK: - kind: thumb_movt_funcRel |
| # CHECK: offset: 24 |
| # CHECK: target: _x |
| # CHECK: addend: -46 |
| # CHECK: - kind: thumb_movw_funcRel |
| # CHECK: offset: 28 |
| # CHECK: target: _x |
| # CHECK: addend: -38 |
| # CHECK: - kind: thumb_movt_funcRel |
| # CHECK: offset: 32 |
| # CHECK: target: _x |
| # CHECK: addend: -38 |
| # CHECK: - kind: thumb_movw_funcRel |
| # CHECK: offset: 36 |
| # CHECK: target: _t1 |
| # CHECK: addend: -46 |
| # CHECK: - kind: thumb_movt_funcRel |
| # CHECK: offset: 40 |
| # CHECK: target: _t1 |
| # CHECK: addend: -46 |
| # CHECK: - kind: thumb_movw |
| # CHECK: offset: 46 |
| # CHECK: target: _x |
| # CHECK-NOT: addend: |
| # CHECK: - kind: thumb_movt |
| # CHECK: offset: 50 |
| # CHECK: target: _x |
| # CHECK-NOT: addend: |
| # CHECK: - kind: thumb_movw |
| # CHECK: offset: 54 |
| # CHECK: target: _x |
| # CHECK: addend: 8 |
| # CHECK: - kind: thumb_movt |
| # CHECK: offset: 58 |
| # CHECK: target: _x |
| # CHECK: addend: 8 |
| # CHECK: - kind: thumb_movw |
| # CHECK: offset: 62 |
| # CHECK: target: _t1 |
| # CHECK-NOT: addend: |
| # CHECK: - kind: thumb_movt |
| # CHECK: offset: 66 |
| # CHECK: target: _t1 |
| # CHECK-NOT: addend: |
| # CHECK: - kind: thumb_movw |
| # CHECK: offset: 70 |
| # CHECK: target: _undef |
| # CHECK-NOT: addend: |
| # CHECK: - kind: thumb_movt |
| # CHECK: offset: 74 |
| # CHECK: target: _undef |
| # CHECK-NOT: addend: |
| # CHECK: - kind: thumb_movw |
| # CHECK: offset: 78 |
| # CHECK: target: _undef |
| # CHECK: addend: 8 |
| # CHECK: - kind: thumb_movt |
| # CHECK: offset: 82 |
| # CHECK: target: _undef |
| # CHECK: addend: 8 |
| # CHECK: - name: _t1 |
| # CHECK: content: [ C0, 46 ] |
| # CHECK: references: |
| # CHECK: - kind: modeThumbCode |
| # CHECK: offset: 0 |
| # CHECK: - name: _foo_arm |
| # CHECK: references: |
| # CHECK-NOT: - kind: modeThumbCode |
| # CHECK: - kind: arm_bl24 |
| # CHECK: offset: 0 |
| # CHECK: target: _x |
| # CHECK-NOT: addend: |
| # CHECK: - kind: arm_bl24 |
| # CHECK: offset: 4 |
| # CHECK: target: _x |
| # CHECK: addend: 4 |
| # CHECK: - kind: arm_bl24 |
| # CHECK: offset: 8 |
| # CHECK: target: _undef |
| # CHECK-NOT: addend: |
| # CHECK: - kind: arm_bl24 |
| # CHECK: offset: 12 |
| # CHECK: target: _undef |
| # CHECK: addend: 4 |
| # CHECK: - kind: arm_b24 |
| # CHECK: offset: 16 |
| # CHECK: target: _undef |
| # CHECK-NOT: addend: |
| # CHECK: - kind: arm_movw_funcRel |
| # CHECK: offset: 20 |
| # CHECK: target: _x |
| # CHECK: addend: -40 |
| # CHECK: - kind: arm_movt_funcRel |
| # CHECK: offset: 24 |
| # CHECK: target: _x |
| # CHECK: addend: -40 |
| # CHECK: - kind: arm_movw_funcRel |
| # CHECK: offset: 28 |
| # CHECK: target: _x |
| # CHECK: addend: -32 |
| # CHECK: - kind: arm_movt_funcRel |
| # CHECK: offset: 32 |
| # CHECK: target: _x |
| # CHECK: addend: -32 |
| # CHECK: - kind: arm_movw |
| # CHECK: offset: 40 |
| # CHECK: target: _x |
| # CHECK-NOT: addend: |
| # CHECK: - kind: arm_movt |
| # CHECK: offset: 44 |
| # CHECK: target: _x |
| # CHECK-NOT: addend: |
| # CHECK: - kind: arm_movw |
| # CHECK: offset: 48 |
| # CHECK: target: _x |
| # CHECK: addend: 8 |
| # CHECK: - kind: arm_movt |
| # CHECK: offset: 52 |
| # CHECK: target: _x |
| # CHECK: addend: 8 |
| # CHECK: - kind: arm_movw |
| # CHECK: offset: 56 |
| # CHECK: target: _undef |
| # CHECK-NOT: addend: |
| # CHECK: - kind: arm_movt |
| # CHECK: offset: 60 |
| # CHECK: target: _undef |
| # CHECK-NOT: addend: |
| # CHECK: - kind: arm_movw |
| # CHECK: offset: 64 |
| # CHECK: target: _undef |
| # CHECK: addend: 8 |
| # CHECK: - kind: arm_movt |
| # CHECK: offset: 68 |
| # CHECK: target: _undef |
| # CHECK: addend: 8 |
| # CHECK: undefined-atoms: |
| # CHECK: - name: _undef |
| |
| |
| |
| |
| # .align 2 |
| # .code 16 |
| # .thumb_func _foo_thumb |
| #_foo_thumb: |
| # bl _x |
| # bl _x+4 |
| # bl _undef |
| # bl _undef+4 |
| # b _undef |
| # movw r1, :lower16:(_x-L1) |
| # movt r1, :upper16:(_x-L1) |
| # movw r2, :lower16:(_x+8-L1) |
| # movt r2, :upper16:(_x+8-L1) |
| # movw r1, :lower16:(_t1-L1) |
| # movt r1, :upper16:(_t1-L1) |
| # add r1, pc |
| #L1: |
| # movw r3, :lower16:_x |
| # movt r3, :upper16:_x |
| # movw r4, :lower16:_x+8 |
| # movt r4, :upper16:_x+8 |
| # movw r3, :lower16:_t1 |
| # movt r3, :upper16:_t1 |
| # movw r5, :lower16:_undef |
| # movt r5, :upper16:_undef |
| # movw r6, :lower16:_undef+8 |
| # movt r6, :upper16:_undef+8 |
| # |
| # .thumb_func _t1 |
| #_t1: |
| # nop |
| # |
| # |
| # .code 32 |
| # .align 2 |
| #_foo_arm: |
| # bl _x |
| # bl _x+4 |
| # bl _undef |
| # bl _undef+4 |
| # b _undef |
| # movw r1, :lower16:(_x-L2) |
| # movt r1, :upper16:(_x-L2) |
| # movw r2, :lower16:(_x+8-L2) |
| # movt r2, :upper16:(_x+8-L2) |
| # add r1, pc |
| #L2: |
| # movw r3, :lower16:_x |
| # movt r3, :upper16:_x |
| # movw r4, :lower16:_x+8 |
| # movt r4, :upper16:_x+8 |
| # movw r5, :lower16:_undef |
| # movt r5, :upper16:_undef |
| # movw r6, :lower16:_undef+8 |
| # movt r6, :upper16:_undef+8 |
| # |
| # |
| # .data |
| #_x: .long 0 |
| # .long _foo_thumb |
| # .long _foo_thumb+4 |
| # .long _undef |
| # .long _undef+4 |
| # .long _foo_arm - . |
| # .long _foo_arm+4- . |
| # .long _foo_thumb - . |
| # .long _foo_thumb+4 - . |
| # |