| # 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 |
| # RUN: ld64.lld -arch armv7 -dylib %s -o %t3.dylib %p/Inputs/armv7/libSystem.yaml \ |
| # RUN: && llvm-objdump -macho -private-headers %t3.dylib | FileCheck --check-prefix=CHECK2 %s |
| # |
| # Test parsing LC_DATA_IN_CODE |
| # |
| # |
| |
| --- !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, 0x00, 0xBF, 0x00, 0x00, 0x00, 0x00, |
| 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, |
| 0x03, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x00, 0xBF, |
| 0x00, 0xF0, 0x20, 0xE3, 0x0A, 0x00, 0x00, 0x00, |
| 0x0B, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, |
| 0x0D, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x20, 0xE3 ] |
| local-symbols: |
| - name: _foo_thumb |
| type: N_SECT |
| sect: 1 |
| desc: [ N_ARM_THUMB_DEF ] |
| value: 0x0000000000000000 |
| - name: _foo_arm |
| type: N_SECT |
| sect: 1 |
| value: 0x0000000000000018 |
| dataInCode: |
| - offset: 0x00000004 |
| length: 0x0004 |
| kind: DICE_KIND_DATA |
| - offset: 0x00000008 |
| length: 0x0004 |
| kind: DICE_KIND_JUMP_TABLE32 |
| - offset: 0x0000000C |
| length: 0x0004 |
| kind: DICE_KIND_JUMP_TABLE16 |
| - offset: 0x00000010 |
| length: 0x0004 |
| kind: DICE_KIND_JUMP_TABLE8 |
| - offset: 0x0000001C |
| length: 0x0004 |
| kind: DICE_KIND_DATA |
| - offset: 0x00000020 |
| length: 0x0004 |
| kind: DICE_KIND_JUMP_TABLE32 |
| - offset: 0x00000024 |
| length: 0x0004 |
| kind: DICE_KIND_JUMP_TABLE16 |
| - offset: 0x00000028 |
| length: 0x0004 |
| kind: DICE_KIND_JUMP_TABLE8 |
| ... |
| |
| |
| |
| # CHECK: defined-atoms: |
| # CHECK: - name: _foo_thumb |
| # CHECK: references: |
| # CHECK: - kind: modeThumbCode |
| # CHECK: offset: 0 |
| # CHECK: - kind: modeData |
| # CHECK: offset: 4 |
| # CHECK: addend: 1 |
| # CHECK: - kind: modeData |
| # CHECK: offset: 8 |
| # CHECK: addend: 4 |
| # CHECK: - kind: modeData |
| # CHECK: offset: 12 |
| # CHECK: addend: 3 |
| # CHECK: - kind: modeData |
| # CHECK: offset: 16 |
| # CHECK: addend: 2 |
| # CHECK: - kind: modeThumbCode |
| # CHECK: offset: 20 |
| # CHECK: - name: _foo_arm |
| # CHECK: references: |
| # CHECK: - kind: modeData |
| # CHECK: offset: 4 |
| # CHECK: addend: 1 |
| # CHECK: - kind: modeData |
| # CHECK: offset: 8 |
| # CHECK: addend: 4 |
| # CHECK: - kind: modeData |
| # CHECK: offset: 12 |
| # CHECK: addend: 3 |
| # CHECK: - kind: modeData |
| # CHECK: offset: 16 |
| # CHECK: addend: 2 |
| # CHECK: - kind: modeArmCode |
| # CHECK: offset: 20 |
| |
| |
| # CHECK2: cmd LC_DATA_IN_CODE |
| # CHECK2: cmdsize 16 |
| # CHECK2: datasize 64 |
| |
| |
| # .code 16 |
| # .thumb_func _foo_thumb |
| #_foo_thumb: |
| # nop |
| # nop |
| # |
| # .data_region |
| # .long 0 |
| # .end_data_region |
| # |
| # .data_region jt32 |
| # .long 1 |
| # .end_data_region |
| # |
| # .data_region jt16 |
| # .long 2 |
| # .end_data_region |
| # |
| # .data_region jt8 |
| # .long 3 |
| # .end_data_region |
| # |
| # nop |
| # nop |
| # |
| # |
| # |
| # .code 32 |
| # .align 2 |
| #_foo_arm: |
| # nop |
| # |
| # .data_region |
| # .long 10 |
| # .end_data_region |
| # |
| # .data_region jt32 |
| # .long 11 |
| # .end_data_region |
| # |
| # .data_region jt16 |
| # .long 12 |
| # .end_data_region |
| # |
| # .data_region jt8 |
| # .long 13 |
| # .end_data_region |
| # |
| # nop |
| # |