| # RUN: ld64.lld.darwinold -arch armv7 %s %p/Inputs/arm-shims.yaml \ |
| # RUN: -dylib %p/Inputs/armv7/libSystem.yaml -o %t |
| # RUN: llvm-readobj -S --section-data %t | FileCheck %s |
| # |
| # Test b from arm to thumb or vice versa has shims added.s |
| # |
| # |
| |
| --- !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, 0xBF, 0xFF, 0xF7, 0xFE, 0xEF, 0xFF, 0xF7, |
| 0xFB, 0xBF, 0x00, 0x00, 0x00, 0xF0, 0x20, 0xE3, |
| 0xFA, 0xFF, 0xFF, 0xFA, 0xF9, 0xFF, 0xFF, 0xEA ] |
| relocations: |
| - offset: 0x00000014 |
| type: ARM_RELOC_BR24 |
| length: 2 |
| pc-rel: true |
| extern: true |
| symbol: 3 |
| - offset: 0x00000010 |
| type: ARM_RELOC_BR24 |
| length: 2 |
| pc-rel: true |
| extern: true |
| symbol: 3 |
| - offset: 0x00000006 |
| type: ARM_THUMB_RELOC_BR22 |
| length: 2 |
| pc-rel: true |
| extern: true |
| symbol: 2 |
| - offset: 0x00000002 |
| type: ARM_THUMB_RELOC_BR22 |
| length: 2 |
| pc-rel: true |
| extern: true |
| symbol: 2 |
| global-symbols: |
| - name: _a1 |
| type: N_SECT |
| scope: [ N_EXT ] |
| sect: 1 |
| value: 0x000000000000000C |
| - name: _t1 |
| type: N_SECT |
| scope: [ N_EXT ] |
| sect: 1 |
| desc: [ N_ARM_THUMB_DEF ] |
| value: 0x0000000000000000 |
| undefined-symbols: |
| - name: _a2 |
| type: N_UNDF |
| scope: [ N_EXT ] |
| value: 0x0000000000000000 |
| - name: _t2 |
| type: N_UNDF |
| scope: [ N_EXT ] |
| value: 0x0000000000000000 |
| |
| ... |
| |
| # CHECK: Section { |
| # CHECK: Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00) |
| # CHECK: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00) |
| # CHECK: SectionData ( |
| # CHECK: 0000: 00BF00F0 10E800F0 19B80000 00F020E3 |
| # CHECK: 0010: 000000FA 0F0000EA 00BFFFF7 F8EF00F0 |
| # CHECK: 0020: 07B80000 00F020E3 F4FFFFFA 050000EA |
| # CHECK: 0030: DFF804C0 FF446047 D4FFFFFF DFF804C0 |
| # CHECK: 0040: FF446047 E0FFFFFF 04C09FE5 0CC08FE0 |
| # CHECK: 0050: 1CFF2FE1 ADFFFFFF 04C09FE5 0CC08FE0 |
| # CHECK: 0060: 1CFF2FE1 B5FFFFFF |
| # CHECK: ) |
| |
| # When we get a good mach-o disassembler the above __text section content check can be change to be symbolic. |
| |
| |
| # Input file one: |
| # |
| # .align 2 |
| # .code 16 |
| # .globl _t1 |
| # .thumb_func _t1 |
| #_t1: |
| # nop |
| # blx _a2 |
| # b _a2 |
| # |
| # .code 32 |
| # .align 2 |
| # .globl _a1 |
| #_a1: |
| # nop |
| # blx _t2 |
| # b _t2 |
| |
| |
| |
| # Input file two: |
| # |
| # .align 2 |
| # .code 16 |
| # .globl _t2 |
| # .thumb_func _t2 |
| #_t2: |
| # nop |
| # blx _a1 |
| # b _a1 |
| # |
| # .code 32 |
| # .align 2 |
| # .globl _a2 |
| #_a2: |
| # nop |
| # blx _t1 |
| # b _t1 |