blob: ce176b683024c1edda8d304a24d0b8726a8e495f [file] [log] [blame]
Seiya Nuta12bd4902019-08-19 21:12:02 +00001## This test verifies that llvm-objcopy copies an executable properly. It
2## uses llvm-readobj instead of cmp because some parts of the object
3## (e.g., the string table) are not identical; the output file is correct but
4## some offsets differ from the input file.
Fangrui Song55c81d42020-01-21 17:02:25 -08005# RUN: yaml2obj %s -o %t
Seiya Nuta12bd4902019-08-19 21:12:02 +00006# RUN: llvm-objcopy %t %t2
7# RUN: llvm-readobj --file-headers --sections %t2 | FileCheck %s
8
9--- !mach-o
10FileHeader:
11 magic: 0xFEEDFACF
12 cputype: 0x01000007
13 cpusubtype: 0x80000003
14 filetype: 0x00000002
15 ncmds: 15
16 sizeofcmds: 976
17 flags: 0x00200085
18 reserved: 0x00000000
19LoadCommands:
20 - cmd: LC_SEGMENT_64
21 cmdsize: 72
22 segname: __PAGEZERO
23 vmaddr: 0
24 vmsize: 4294967296
25 fileoff: 0
26 filesize: 0
27 maxprot: 0
28 initprot: 0
29 nsects: 0
30 flags: 0
31 - cmd: LC_SEGMENT_64
32 cmdsize: 232
33 segname: __TEXT
34 vmaddr: 4294967296
35 vmsize: 4096
36 fileoff: 0
37 filesize: 4096
38 maxprot: 7
39 initprot: 5
40 nsects: 2
41 flags: 0
42 Sections:
43 - sectname: __text
44 segname: __TEXT
45 addr: 0x0000000100000F70
46 size: 58
47 offset: 0x00000F70
48 align: 4
49 reloff: 0x00000000
50 nreloc: 0
51 flags: 0x80000400
52 reserved1: 0x00000000
53 reserved2: 0x00000000
54 reserved3: 0x00000000
55 - sectname: __unwind_info
56 segname: __TEXT
57 addr: 0x0000000100000FAC
58 size: 72
59 offset: 0x00000FAC
60 align: 2
61 reloff: 0x00000000
62 nreloc: 0
63 flags: 0x00000000
64 reserved1: 0x00000000
65 reserved2: 0x00000000
66 reserved3: 0x00000000
67 - cmd: LC_SEGMENT_64
68 cmdsize: 232
69 segname: __DATA
70 vmaddr: 4294971392
71 vmsize: 4096
72 fileoff: 4096
73 filesize: 4096
74 maxprot: 7
75 initprot: 3
76 nsects: 2
77 flags: 0
78 Sections:
79 - sectname: __data
80 segname: __DATA
81 addr: 0x0000000100001000
82 size: 4
83 offset: 0x00001000
84 align: 2
85 reloff: 0x00000000
86 nreloc: 0
87 flags: 0x00000000
88 reserved1: 0x00000000
89 reserved2: 0x00000000
90 reserved3: 0x00000000
91 - sectname: __common
92 segname: __DATA
93 addr: 0x0000000100001004
94 size: 4
95 offset: 0x00000000
96 align: 2
97 reloff: 0x00000000
98 nreloc: 0
99 flags: 0x00000001
100 reserved1: 0x00000000
101 reserved2: 0x00000000
102 reserved3: 0x00000000
103 - cmd: LC_SEGMENT_64
104 cmdsize: 72
105 segname: __LINKEDIT
106 vmaddr: 4294975488
107 vmsize: 4096
108 fileoff: 8192
109 filesize: 232
110 maxprot: 7
111 initprot: 1
112 nsects: 0
113 flags: 0
114 - cmd: LC_DYLD_INFO_ONLY
115 cmdsize: 48
116 rebase_off: 0
117 rebase_size: 0
118 bind_off: 0
119 bind_size: 0
120 weak_bind_off: 0
121 weak_bind_size: 0
122 lazy_bind_off: 0
123 lazy_bind_size: 0
124 export_off: 8192
125 export_size: 72
126 - cmd: LC_SYMTAB
127 cmdsize: 24
128 symoff: 8272
129 nsyms: 6
130 stroff: 8368
131 strsize: 56
132 - cmd: LC_DYSYMTAB
133 cmdsize: 80
134 ilocalsym: 0
135 nlocalsym: 0
136 iextdefsym: 0
137 nextdefsym: 5
138 iundefsym: 5
139 nundefsym: 1
140 tocoff: 0
141 ntoc: 0
142 modtaboff: 0
143 nmodtab: 0
144 extrefsymoff: 0
145 nextrefsyms: 0
146 indirectsymoff: 0
147 nindirectsyms: 0
148 extreloff: 0
149 nextrel: 0
150 locreloff: 0
151 nlocrel: 0
152 - cmd: LC_LOAD_DYLINKER
153 cmdsize: 32
154 name: 12
155 PayloadString: '/usr/lib/dyld'
156 ZeroPadBytes: 7
157 - cmd: LC_UUID
158 cmdsize: 24
159 uuid: B6EE4FB7-4E1E-3C7A-80D3-CFBD89DBC0FE
160 - cmd: LC_BUILD_VERSION
161 cmdsize: 32
162 platform: 1
163 minos: 658944
164 sdk: 658944
165 ntools: 1
166 Tools:
167 - tool: 3
168 version: 29491968
169 - cmd: LC_SOURCE_VERSION
170 cmdsize: 16
171 version: 0
172 - cmd: LC_MAIN
173 cmdsize: 24
174 entryoff: 3984
175 stacksize: 0
176 - cmd: LC_LOAD_DYLIB
177 cmdsize: 56
178 dylib:
179 name: 24
180 timestamp: 2
181 current_version: 82115073
182 compatibility_version: 65536
183 PayloadString: '/usr/lib/libSystem.B.dylib'
184 ZeroPadBytes: 6
185 - cmd: LC_FUNCTION_STARTS
186 cmdsize: 16
187 dataoff: 8264
188 datasize: 8
189 - cmd: LC_DATA_IN_CODE
190 cmdsize: 16
191 dataoff: 8272
192 datasize: 0
193LinkEditData:
194 ExportTrie:
195 TerminalSize: 0
196 NodeOffset: 0
197 Name: ''
198 Flags: 0x0000000000000000
199 Address: 0x0000000000000000
200 Other: 0x0000000000000000
201 ImportName: ''
202 Children:
203 - TerminalSize: 0
204 NodeOffset: 5
205 Name: _
206 Flags: 0x0000000000000000
207 Address: 0x0000000000000000
208 Other: 0x0000000000000000
209 ImportName: ''
210 Children:
211 - TerminalSize: 2
212 NodeOffset: 44
213 Name: _mh_execute_header
214 Flags: 0x0000000000000000
215 Address: 0x0000000000000000
216 Other: 0x0000000000000000
217 ImportName: ''
218 - TerminalSize: 3
219 NodeOffset: 48
220 Name: foo
221 Flags: 0x0000000000000000
222 Address: 0x0000000000000F70
223 Other: 0x0000000000000000
224 ImportName: ''
225 - TerminalSize: 3
226 NodeOffset: 53
227 Name: main
228 Flags: 0x0000000000000000
229 Address: 0x0000000000000F90
230 Other: 0x0000000000000000
231 ImportName: ''
232 - TerminalSize: 3
233 NodeOffset: 58
234 Name: b
235 Flags: 0x0000000000000000
236 Address: 0x0000000000001000
237 Other: 0x0000000000000000
238 ImportName: ''
239 - TerminalSize: 3
240 NodeOffset: 63
241 Name: a
242 Flags: 0x0000000000000000
243 Address: 0x0000000000001004
244 Other: 0x0000000000000000
245 ImportName: ''
246 NameList:
247 - n_strx: 2
248 n_type: 0x0F
249 n_sect: 1
250 n_desc: 16
251 n_value: 4294967296
252 - n_strx: 22
253 n_type: 0x0F
254 n_sect: 4
255 n_desc: 0
256 n_value: 4294971396
257 - n_strx: 25
258 n_type: 0x0F
259 n_sect: 3
260 n_desc: 0
261 n_value: 4294971392
262 - n_strx: 28
263 n_type: 0x0F
264 n_sect: 1
265 n_desc: 0
266 n_value: 4294971248
267 - n_strx: 33
268 n_type: 0x0F
269 n_sect: 1
270 n_desc: 0
271 n_value: 4294971280
272 - n_strx: 39
273 n_type: 0x01
274 n_sect: 0
275 n_desc: 256
276 n_value: 0
277 StringTable:
278 - ' '
279 - __mh_execute_header
280 - _a
281 - _b
282 - _foo
283 - _main
284 - dyld_stub_binder
285...
286
287# CHECK: FileType: Executable (0x2)
288# CHECK: Name: __text
289# CHECK: Name: __unwind_info
290# CHECK: Name: __data
291# CHECK: Name: __common