-
Notifications
You must be signed in to change notification settings - Fork 12.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[mach-o] Implement interworking between thumb and arm code
All iOS arm processor support switching between arm and thumb mode at call sites by using the BLX instruction (instead of BL). But the compiler does not know the implementation mode for extern functions, so the linker must update BL/BLX instructions to match what is linked is actually linked together. In addition, pointers to functions (such as vtables) must have the low bit set if the target of the pointer is a thumb mode function. llvm-svn: 214140
- llvmorg-21-init
- llvmorg-20.1.0-rc2
- llvmorg-20.1.0-rc1
- llvmorg-20-init
- llvmorg-19.1.7
- llvmorg-19.1.6
- llvmorg-19.1.5
- llvmorg-19.1.4
- llvmorg-19.1.3
- llvmorg-19.1.2
- llvmorg-19.1.1
- llvmorg-19.1.0
- llvmorg-19.1.0-rc4
- llvmorg-19.1.0-rc3
- llvmorg-19.1.0-rc2
- llvmorg-19.1.0-rc1
- llvmorg-19-init
- llvmorg-18.1.8
- llvmorg-18.1.7
- llvmorg-18.1.6
- llvmorg-18.1.5
- llvmorg-18.1.4
- llvmorg-18.1.3
- llvmorg-18.1.2
- llvmorg-18.1.1
- llvmorg-18.1.0
- llvmorg-18.1.0-rc4
- llvmorg-18.1.0-rc3
- llvmorg-18.1.0-rc2
- llvmorg-18.1.0-rc1
- llvmorg-18-init
- llvmorg-17.0.6
- llvmorg-17.0.5
- llvmorg-17.0.4
- llvmorg-17.0.3
- llvmorg-17.0.2
- llvmorg-17.0.1
- llvmorg-17.0.0
- llvmorg-17.0.0-rc4
- llvmorg-17.0.0-rc3
- llvmorg-17.0.0-rc2
- llvmorg-17.0.0-rc1
- llvmorg-17-init
- llvmorg-16.0.6
- llvmorg-16.0.5
- llvmorg-16.0.4
- llvmorg-16.0.3
- llvmorg-16.0.2
- llvmorg-16.0.1
- llvmorg-16.0.0
- llvmorg-16.0.0-rc4
- llvmorg-16.0.0-rc3
- llvmorg-16.0.0-rc2
- llvmorg-16.0.0-rc1
- llvmorg-16-init
- llvmorg-15.0.7
- llvmorg-15.0.6
- llvmorg-15.0.5
- llvmorg-15.0.4
- llvmorg-15.0.3
- llvmorg-15.0.2
- llvmorg-15.0.1
- llvmorg-15.0.0
- llvmorg-15.0.0-rc3
- llvmorg-15.0.0-rc2
- llvmorg-15.0.0-rc1
- llvmorg-15-init
- llvmorg-14.0.6
- llvmorg-14.0.5
- llvmorg-14.0.4
- llvmorg-14.0.3
- llvmorg-14.0.2
- llvmorg-14.0.1
- llvmorg-14.0.0
- llvmorg-14.0.0-rc4
- llvmorg-14.0.0-rc3
- llvmorg-14.0.0-rc2
- llvmorg-14.0.0-rc1
- llvmorg-14-init
- llvmorg-13.0.1
- llvmorg-13.0.1-rc3
- llvmorg-13.0.1-rc2
- llvmorg-13.0.1-rc1
- llvmorg-13.0.0
- llvmorg-13.0.0-rc4
- llvmorg-13.0.0-rc3
- llvmorg-13.0.0-rc2
- llvmorg-13.0.0-rc1
- llvmorg-13-init
- llvmorg-12.0.1
- llvmorg-12.0.1-rc4
- llvmorg-12.0.1-rc3
- llvmorg-12.0.1-rc2
- llvmorg-12.0.1-rc1
- llvmorg-12.0.0
- llvmorg-12.0.0-rc5
- llvmorg-12.0.0-rc4
- llvmorg-12.0.0-rc3
- llvmorg-12.0.0-rc2
- llvmorg-12.0.0-rc1
- llvmorg-12-init
- llvmorg-11.1.0
- llvmorg-11.1.0-rc3
- llvmorg-11.1.0-rc2
- llvmorg-11.1.0-rc1
- llvmorg-11.0.1
- llvmorg-11.0.1-rc2
- llvmorg-11.0.1-rc1
- llvmorg-11.0.0
- llvmorg-11.0.0-rc6
- llvmorg-11.0.0-rc5
- llvmorg-11.0.0-rc4
- llvmorg-11.0.0-rc3
- llvmorg-11.0.0-rc2
- llvmorg-11.0.0-rc1
- llvmorg-11-init
- llvmorg-10.0.1
- llvmorg-10.0.1-rc4
- llvmorg-10.0.1-rc3
- llvmorg-10.0.1-rc2
- llvmorg-10.0.1-rc1
- llvmorg-10.0.0
- llvmorg-10.0.0-rc6
- llvmorg-10.0.0-rc5
- llvmorg-10.0.0-rc4
- llvmorg-10.0.0-rc3
- llvmorg-10.0.0-rc2
- llvmorg-10.0.0-rc1
- llvmorg-10-init
- llvmorg-9.0.1
- llvmorg-9.0.1-rc3
- llvmorg-9.0.1-rc2
- llvmorg-9.0.1-rc1
- llvmorg-9.0.0
- llvmorg-9.0.0-rc6
- llvmorg-9.0.0-rc5
- llvmorg-9.0.0-rc4
- llvmorg-9.0.0-rc3
- llvmorg-9.0.0-rc2
- llvmorg-9.0.0-rc1
- llvmorg-8.0.1
- llvmorg-8.0.1-rc4
- llvmorg-8.0.1-rc3
- llvmorg-8.0.1-rc2
- llvmorg-8.0.1-rc1
- llvmorg-8.0.0
- llvmorg-8.0.0-rc5
- llvmorg-8.0.0-rc4
- llvmorg-8.0.0-rc3
- llvmorg-8.0.0-rc2
- llvmorg-8.0.0-rc1
- llvmorg-7.1.0
- llvmorg-7.1.0-rc1
- llvmorg-7.0.1
- llvmorg-7.0.1-rc3
- llvmorg-7.0.1-rc2
- llvmorg-7.0.1-rc1
- llvmorg-7.0.0
- llvmorg-7.0.0-rc3
- llvmorg-7.0.0-rc2
- llvmorg-7.0.0-rc1
- llvmorg-6.0.1
- llvmorg-6.0.1-rc3
- llvmorg-6.0.1-rc2
- llvmorg-6.0.1-rc1
- llvmorg-6.0.0
- llvmorg-6.0.0-rc3
- llvmorg-6.0.0-rc2
- llvmorg-6.0.0-rc1
- llvmorg-5.0.2
- llvmorg-5.0.2-rc2
- llvmorg-5.0.2-rc1
- llvmorg-5.0.1
- llvmorg-5.0.1-rc3
- llvmorg-5.0.1-rc2
- llvmorg-5.0.1-rc1
- llvmorg-5.0.0
- llvmorg-5.0.0-rc5
- llvmorg-5.0.0-rc4
- llvmorg-5.0.0-rc3
- llvmorg-5.0.0-rc2
- llvmorg-5.0.0-rc1
- llvmorg-4.0.1
- llvmorg-4.0.1-rc3
- llvmorg-4.0.1-rc2
- llvmorg-4.0.1-rc1
- llvmorg-4.0.0
- llvmorg-4.0.0-rc4
- llvmorg-4.0.0-rc3
- llvmorg-4.0.0-rc2
- llvmorg-4.0.0-rc1
- llvmorg-3.9.1
- llvmorg-3.9.1-rc3
- llvmorg-3.9.1-rc2
- llvmorg-3.9.1-rc1
- llvmorg-3.9.0
- llvmorg-3.9.0-rc3
- llvmorg-3.9.0-rc2
- llvmorg-3.9.0-rc1
- llvmorg-3.8.1
- llvmorg-3.8.1-rc1
- llvmorg-3.8.0
- llvmorg-3.8.0-rc3
- llvmorg-3.8.0-rc2
- llvmorg-3.8.0-rc1
- llvmorg-3.7.1
- llvmorg-3.7.1-rc2
- llvmorg-3.7.1-rc1
- llvmorg-3.7.0
- llvmorg-3.7.0-rc4
- llvmorg-3.7.0-rc3
- llvmorg-3.7.0-rc2
- llvmorg-3.7.0-rc1
- llvmorg-3.6.2
- llvmorg-3.6.2-rc1
- llvmorg-3.6.1
- llvmorg-3.6.1-rc1
- llvmorg-3.6.0
- llvmorg-3.6.0-rc4
- llvmorg-3.6.0-rc3
- llvmorg-3.6.0-rc2
- llvmorg-3.6.0-rc1
- llvmorg-3.5.2
- llvmorg-3.5.2-rc1
- llvmorg-3.5.1
- llvmorg-3.5.1-rc2
- llvmorg-3.5.1-rc1
- llvmorg-3.5.0
- llvmorg-3.5.0-rc4
- llvmorg-3.5.0-rc3
Nick Kledzik
committed
Jul 28, 2014
1 parent
bd1628a
commit 54fd4e5
Showing
4 changed files
with
584 additions
and
45 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,361 @@ | ||
# RUN: lld -flavor darwin -arch armv7 -r -print_atoms %s -o %t | FileCheck %s \ | ||
# RUN: && lld -flavor darwin -arch armv7 -dylib -print_atoms %t -o %t2 | FileCheck %s \ | ||
# RUN: && macho-dump --dump-section-data %t2 | FileCheck -check-prefix=CODE %s | ||
# | ||
# Test thumb and arm branches round trip through -r. | ||
# Test bl/blx instructions are fixed up properly. | ||
# | ||
# | ||
|
||
--- !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: [ 0xFF, 0xF7, 0xFE, 0xFF, 0xC0, 0x46, 0xFF, 0xF7, | ||
0xFC, 0xEF, 0xC0, 0x46, 0xFF, 0xF7, 0xF8, 0xEF, | ||
0xFF, 0xF7, 0xF6, 0xFF, 0xC0, 0x46, 0xFF, 0xF7, | ||
0xF3, 0xFF, 0xC0, 0x46, 0x00, 0xF0, 0x06, 0xE8, | ||
0xC0, 0x46, 0x00, 0xF0, 0x03, 0xF8, 0x00, 0xF0, | ||
0x02, 0xF8, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47 ] | ||
relocations: | ||
- offset: 0x00000026 | ||
type: ARM_THUMB_RELOC_BR22 | ||
length: 2 | ||
pc-rel: true | ||
extern: false | ||
symbol: 1 | ||
- offset: 0x00000022 | ||
type: ARM_THUMB_RELOC_BR22 | ||
length: 2 | ||
pc-rel: true | ||
extern: false | ||
symbol: 1 | ||
- offset: 0x0000001C | ||
type: ARM_THUMB_RELOC_BR22 | ||
length: 2 | ||
pc-rel: true | ||
extern: false | ||
symbol: 1 | ||
- offset: 0x00000016 | ||
type: ARM_THUMB_RELOC_BR22 | ||
length: 2 | ||
pc-rel: true | ||
extern: false | ||
symbol: 1 | ||
- offset: 0x00000010 | ||
type: ARM_THUMB_RELOC_BR22 | ||
length: 2 | ||
pc-rel: true | ||
extern: false | ||
symbol: 1 | ||
- offset: 0x0000000C | ||
type: ARM_THUMB_RELOC_BR22 | ||
length: 2 | ||
pc-rel: true | ||
extern: true | ||
symbol: 5 | ||
- offset: 0x00000006 | ||
type: ARM_THUMB_RELOC_BR22 | ||
length: 2 | ||
pc-rel: true | ||
extern: true | ||
symbol: 5 | ||
- offset: 0x00000000 | ||
type: ARM_THUMB_RELOC_BR22 | ||
length: 2 | ||
pc-rel: true | ||
extern: true | ||
symbol: 4 | ||
- segment: __DATA | ||
section: __data | ||
type: S_REGULAR | ||
attributes: [ ] | ||
address: 0x0000000000000030 | ||
content: [ 0x2D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ] | ||
relocations: | ||
- offset: 0x00000004 | ||
type: ARM_RELOC_VANILLA | ||
length: 2 | ||
pc-rel: false | ||
extern: true | ||
symbol: 4 | ||
- offset: 0x00000000 | ||
type: ARM_RELOC_VANILLA | ||
length: 2 | ||
pc-rel: false | ||
extern: false | ||
symbol: 1 | ||
local-symbols: | ||
- name: _t3 | ||
type: N_SECT | ||
sect: 1 | ||
desc: [ N_ARM_THUMB_DEF ] | ||
value: 0x000000000000002E | ||
- name: _d1 | ||
type: N_SECT | ||
sect: 2 | ||
value: 0x0000000000000030 | ||
global-symbols: | ||
- name: _t1 | ||
type: N_SECT | ||
scope: [ N_EXT ] | ||
sect: 1 | ||
desc: [ N_ARM_THUMB_DEF ] | ||
value: 0x0000000000000000 | ||
- name: _t2 | ||
type: N_SECT | ||
scope: [ N_EXT ] | ||
sect: 1 | ||
desc: [ N_ARM_THUMB_DEF ] | ||
value: 0x000000000000002C | ||
undefined-symbols: | ||
- name: _a1 | ||
type: N_UNDF | ||
scope: [ N_EXT ] | ||
value: 0x0000000000000000 | ||
- name: _a2 | ||
type: N_UNDF | ||
scope: [ N_EXT ] | ||
value: 0x0000000000000000 | ||
|
||
--- !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: [ 0xFE, 0xFF, 0xFF, 0xEB, 0x02, 0x00, 0x00, 0xFA, | ||
0xFC, 0xFF, 0xFF, 0xEB, 0xFB, 0xFF, 0xFF, 0xFA, | ||
0x1E, 0xFF, 0x2F, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1 ] | ||
relocations: | ||
- offset: 0x0000000C | ||
type: ARM_RELOC_BR24 | ||
length: 2 | ||
pc-rel: true | ||
extern: true | ||
symbol: 4 | ||
- offset: 0x00000008 | ||
type: ARM_RELOC_BR24 | ||
length: 2 | ||
pc-rel: true | ||
extern: true | ||
symbol: 3 | ||
- offset: 0x00000004 | ||
type: ARM_RELOC_BR24 | ||
length: 2 | ||
pc-rel: true | ||
extern: false | ||
symbol: 1 | ||
- offset: 0x00000000 | ||
type: ARM_RELOC_BR24 | ||
length: 2 | ||
pc-rel: true | ||
extern: false | ||
symbol: 1 | ||
- segment: __DATA | ||
section: __data | ||
type: S_REGULAR | ||
attributes: [ ] | ||
address: 0x0000000000000018 | ||
content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ] | ||
relocations: | ||
- offset: 0x00000004 | ||
type: ARM_RELOC_VANILLA | ||
length: 2 | ||
pc-rel: false | ||
extern: false | ||
symbol: 1 | ||
- offset: 0x00000000 | ||
type: ARM_RELOC_VANILLA | ||
length: 2 | ||
pc-rel: false | ||
extern: true | ||
symbol: 3 | ||
local-symbols: | ||
- name: _d2 | ||
type: N_SECT | ||
sect: 2 | ||
value: 0x0000000000000018 | ||
global-symbols: | ||
- name: _a1 | ||
type: N_SECT | ||
scope: [ N_EXT ] | ||
sect: 1 | ||
value: 0x0000000000000000 | ||
- name: _a2 | ||
type: N_SECT | ||
scope: [ N_EXT ] | ||
sect: 1 | ||
value: 0x0000000000000014 | ||
undefined-symbols: | ||
- name: _t1 | ||
type: N_UNDF | ||
scope: [ N_EXT ] | ||
value: 0x0000000000000000 | ||
- name: _t2 | ||
type: N_UNDF | ||
scope: [ N_EXT ] | ||
value: 0x0000000000000000 | ||
... | ||
|
||
|
||
# CHECK: defined-atoms: | ||
# CHECK: - name: _d1 | ||
# CHECK: type: data | ||
# CHECK: references: | ||
# CHECK: - kind: pointer32 | ||
# CHECK: offset: 0 | ||
# CHECK: target: _t2 | ||
# CHECK: - kind: pointer32 | ||
# CHECK: offset: 4 | ||
# CHECK: target: _a1 | ||
# CHECK: - name: _d2 | ||
# CHECK: type: data | ||
# CHECK: references: | ||
# CHECK: - kind: pointer32 | ||
# CHECK: offset: 0 | ||
# CHECK: target: _t1 | ||
# CHECK: - kind: pointer32 | ||
# CHECK: offset: 4 | ||
# CHECK: target: _a1 | ||
# CHECK: - name: _t1 | ||
# CHECK: scope: global | ||
# CHECK: references: | ||
# CHECK: - kind: modeThumbCode | ||
# CHECK: offset: 0 | ||
# CHECK: target: _t1 | ||
# CHECK: - kind: thumb_b22 | ||
# CHECK: offset: 0 | ||
# CHECK: target: _a1 | ||
# CHECK: - kind: thumb_b22 | ||
# CHECK: offset: 6 | ||
# CHECK: target: _a2 | ||
# CHECK: - kind: thumb_b22 | ||
# CHECK: offset: 12 | ||
# CHECK: target: _a2 | ||
# CHECK: - kind: thumb_b22 | ||
# CHECK: offset: 16 | ||
# CHECK: target: _t1 | ||
# CHECK: - kind: thumb_b22 | ||
# CHECK: offset: 22 | ||
# CHECK: target: _t1 | ||
# CHECK: - kind: thumb_b22 | ||
# CHECK: offset: 28 | ||
# CHECK: target: _t2 | ||
# CHECK: - kind: thumb_b22 | ||
# CHECK: offset: 34 | ||
# CHECK: target: _t2 | ||
# CHECK: - kind: thumb_b22 | ||
# CHECK: offset: 38 | ||
# CHECK: target: _t3 | ||
# CHECK: - name: _t2 | ||
# CHECK: scope: global | ||
# CHECK: content: [ 70, 47 ] | ||
# CHECK: references: | ||
# CHECK: - kind: modeThumbCode | ||
# CHECK: offset: 0 | ||
# CHECK: target: _t2 | ||
# CHECK: - name: _t3 | ||
# CHECK: content: [ 70, 47 ] | ||
# CHECK: references: | ||
# CHECK: - kind: modeThumbCode | ||
# CHECK: offset: 0 | ||
# CHECK: target: _t3 | ||
# CHECK: - name: _a1 | ||
# CHECK: scope: global | ||
# CHECK: references: | ||
# CHECK: - kind: arm_b24 | ||
# CHECK: offset: 0 | ||
# CHECK: target: _a1 | ||
# CHECK: - kind: arm_b24 | ||
# CHECK: offset: 4 | ||
# CHECK: target: _a2 | ||
# CHECK: - kind: arm_b24 | ||
# CHECK: offset: 8 | ||
# CHECK: target: _t1 | ||
# CHECK: - kind: arm_b24 | ||
# CHECK: offset: 12 | ||
# CHECK: target: _t2 | ||
# CHECK: - name: _a2 | ||
# CHECK: scope: global | ||
|
||
|
||
# CODE: (('section_name', '__text\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') | ||
# CODE: ('segment_name', '__TEXT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') | ||
# CODE: ('_section_data', '00f016e8 c04600f0 1ee8c046 00f01ae8 fff7f6ff c046fff7 f3ffc046 00f006f8 c04600f0 03f800f0 02f87047 70477047 feffffeb 020000eb f0fffffa fafffffa 1eff2fe1 1eff2fe1') | ||
# When we get a good mach-o disassembler the above __text section content check can be change to be symbolic. | ||
|
||
# CODE: (('section_name', '__data\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') | ||
# CODE: ('segment_name', '__DATA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') | ||
# CODE: ('_section_data', '{{[0-9a-f]}}{{[13579bdf]}}{{[0-9a-f]+}} {{[0-9a-f]}}{{[02468ade]}}{{[0-9a-f]+}} {{[0-9a-f]}}{{[13579bdf]}}{{[0-9a-f]+}} {{[0-9a-f]}}{{[02468ade]}}{{[0-9a-f]+}}') | ||
# Verify the low (thumb) bit is set on the first and third pointers but not the second and fourth. | ||
|
||
|
||
|
||
# Input file one: | ||
# | ||
# .align 2 | ||
# .code 16 | ||
# .globl _t1 | ||
# .thumb_func _t1 | ||
#_t1: | ||
# bl _a1 | ||
# nop | ||
# blx _a2 | ||
# nop | ||
# blx _a2 | ||
# bl _t1 | ||
# nop | ||
# bl _t1 | ||
# nop | ||
# blx _t2 | ||
# nop | ||
# blx _t2 | ||
# bx lr | ||
# | ||
# .globl _t2 | ||
# .thumb_func _t2 | ||
#_t2: | ||
# bx lr | ||
# | ||
# .data | ||
#_d1: .long _t2 | ||
# .long _a1 | ||
|
||
|
||
|
||
# Input file two: | ||
# | ||
# .align 2 | ||
# .code 32 | ||
# .globl _a1 | ||
#_a1: | ||
# bl _a1 | ||
# blx _a2 | ||
# bl _t1 | ||
# blx _t2 | ||
# bx lr | ||
# | ||
# .globl _a2 | ||
#_a2: | ||
# bx lr | ||
# | ||
# .data | ||
#_d2: .long _t1 | ||
# .long _a1 | ||
|
||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
# RUN: lld -flavor darwin -arch armv7 -ios_version_min 7.0 %s -o %t && \ | ||
# RUN: llvm-nm %t | FileCheck %s | ||
# | ||
# Test that armv7 (thumb) hello-world can be linked into a mach-o executable | ||
# | ||
|
||
--- !mach-o | ||
arch: armv7 | ||
file-type: MH_OBJECT | ||
flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ] | ||
has-UUID: false | ||
OS: unknown | ||
sections: | ||
- segment: __TEXT | ||
section: __text | ||
type: S_REGULAR | ||
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ] | ||
alignment: 2 | ||
address: 0x0000000000000000 | ||
content: [ 0x80, 0xB5, 0x40, 0xF2, 0x06, 0x00, 0x6F, 0x46, | ||
0xC0, 0xF2, 0x00, 0x00, 0x78, 0x44, 0xFF, 0xF7, | ||
0xF8, 0xEF, 0x00, 0x20, 0x80, 0xBD ] | ||
relocations: | ||
- offset: 0x0000000E | ||
type: ARM_THUMB_RELOC_BR22 | ||
length: 2 | ||
pc-rel: true | ||
extern: true | ||
symbol: 1 | ||
- offset: 0x00000008 | ||
scattered: true | ||
type: ARM_RELOC_HALF_SECTDIFF | ||
length: 3 | ||
pc-rel: false | ||
value: 0x00000016 | ||
- offset: 0x00000006 | ||
scattered: true | ||
type: ARM_RELOC_PAIR | ||
length: 3 | ||
pc-rel: false | ||
value: 0x0000000C | ||
- offset: 0x00000002 | ||
scattered: true | ||
type: ARM_RELOC_HALF_SECTDIFF | ||
length: 2 | ||
pc-rel: false | ||
value: 0x00000016 | ||
- offset: 0x00000000 | ||
scattered: true | ||
type: ARM_RELOC_PAIR | ||
length: 2 | ||
pc-rel: false | ||
value: 0x0000000C | ||
- segment: __TEXT | ||
section: __cstring | ||
type: S_CSTRING_LITERALS | ||
attributes: [ ] | ||
address: 0x0000000000000016 | ||
content: [ 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x0A, 0x00 ] | ||
global-symbols: | ||
- name: _main | ||
type: N_SECT | ||
scope: [ N_EXT ] | ||
sect: 1 | ||
desc: [ N_ARM_THUMB_DEF ] | ||
value: 0x0000000000000000 | ||
undefined-symbols: | ||
- name: _printf | ||
type: N_UNDF | ||
scope: [ N_EXT ] | ||
value: 0x0000000000000000 | ||
... | ||
|
||
--- !mach-o | ||
arch: armv7 | ||
file-type: MH_DYLIB | ||
flags: [ ] | ||
install-name: /usr/lib/libSystem.B.dylib | ||
sections: | ||
- segment: __TEXT | ||
section: __text | ||
type: S_REGULAR | ||
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ] | ||
address: 0x0000000000000000 | ||
content: [ 0x55 ] | ||
|
||
global-symbols: | ||
- name: _printf | ||
type: N_SECT | ||
scope: [ N_EXT ] | ||
sect: 1 | ||
value: 0x0000000000000001 | ||
- name: dyld_stub_binder | ||
type: N_SECT | ||
scope: [ N_EXT ] | ||
sect: 1 | ||
value: 0x0000000000000001 | ||
|
||
... | ||
|
||
# CHECK: {{[0-9a-f]+}} T _main | ||
# CHECK: U _printf | ||
# CHECK: U dyld_stub_binder |