497 lines · plain
1## This test verifies that the linkedit segment is2## laid out in the right order.3 4# RUN: yaml2obj %s -o %t.original5# RUN: llvm-objcopy %t.original %t.copy6# RUN: obj2yaml %t.copy > %t.yaml7## Print the results several times in order to capture the linkedit offsets8## in the order they are needed, but still following the order of the load9## commands where they appear.10# RUN: cat %t.yaml %t.yaml %t.yaml | FileCheck %s11 12# CHECK: cmd: LC_SEGMENT_6413# CHECK: segname: __LINKEDIT14# CHECK: fileoff: [[#LINKEDIT_FILEOFF:]]15# CHECK: filesize: [[#LINKEDIT_FILESIZE:]]16 17# CHECK: cmd: LC_DYLD_INFO_ONLY18# CHECK: rebase_off: [[#REBASE_OFF: LINKEDIT_FILEOFF]]19# CHECK: rebase_size: [[#REBASE_SIZE:]]20# CHECK: bind_off: [[#BIND_OFF: REBASE_OFF + REBASE_SIZE]]21# CHECK: bind_size: [[#BIND_SIZE:]]22# CHECK: weak_bind_off: [[#WEAK_BIND_OFF: BIND_OFF + BIND_SIZE]]23# CHECK: weak_bind_size: [[#WEAK_BIND_SIZE:]]24# CHECK: lazy_bind_off: [[#LAZY_BIND_OFF: WEAK_BIND_OFF + WEAK_BIND_SIZE]]25# CHECK: lazy_bind_size: [[#LAZY_BIND_SIZE:]]26# CHECK: export_off: [[#EXPORTS_OFF:LAZY_BIND_OFF + LAZY_BIND_SIZE]]27# CHECK: export_size: [[#EXPORTS_SIZE:]]28 29# CHECK: cmd: LC_FUNCTION_STARTS30# CHECK: dataoff: [[#FUNCTION_STARTS_FILEOFF: EXPORTS_OFF + EXPORTS_SIZE]]31# CHECK: datasize: [[#FUNCTION_STARTS_FILESIZE:]]32 33# CHECK: cmd: LC_DATA_IN_CODE34# CHECK: dataoff: [[#DATA_IN_CODE_FILEOFF: FUNCTION_STARTS_FILEOFF + FUNCTION_STARTS_FILESIZE]]35# CHECK: datasize: [[#DATA_IN_CODE_FILESIZE:]]36 37## Jump over LC_CODE_SIGNATURE, which needs to be checked last38 39# CHECK: --- !mach-o40 41# CHECK: cmd: LC_SYMTAB42# CHECK: symoff: [[#SYMTAB_SYMOFF: DATA_IN_CODE_FILEOFF + DATA_IN_CODE_FILESIZE]]43# CHECK: nsyms: [[#SYMTAB_NSYMS:]]44 45## Skip over the strings table offset/size (part of LC_SYMTAB) until next loop.46 47# CHECK: cmd: LC_DYSYMTAB48# CHECK: indirectsymoff: [[#DYSYMTAB_INDIRECTSYMOFF: SYMTAB_SYMOFF + mul(SYMTAB_NSYMS, 16)]]49# CHECK: nindirectsyms: [[#DYSYMTAB_NINDIRECTSYMS:]]50 51# CHECK: --- !mach-o52 53# CHECK: cmd: LC_SYMTAB54# CHECK: stroff: [[#SYMTAB_STROFF: DYSYMTAB_INDIRECTSYMOFF + mul(DYSYMTAB_NINDIRECTSYMS, 4)]]55# CHECK: strsize: [[#SYMTAB_STRSIZE:]]56 57# CHECK: cmd: LC_CODE_SIGNATURE58## LC_CODE_SIGNATURE needs to be aligned to 16 bytes boundaries.59# CHECK: dataoff: [[#CODE_SIGNATURE_FILEOFF: mul(div(SYMTAB_STROFF + SYMTAB_STRSIZE + 8, 16), 16)]]60# CHECK: datasize: [[#CODE_SIGNATURE_FILESIZE:LINKEDIT_FILEOFF + LINKEDIT_FILESIZE - CODE_SIGNATURE_FILEOFF]]61 62--- !mach-o63FileHeader:64 magic: 0xFEEDFACF65 cputype: 0x100000766 cpusubtype: 0x367 filetype: 0x268 ncmds: 1869 sizeofcmds: 135270 flags: 0x21008571 reserved: 0x072LoadCommands:73 - cmd: LC_SEGMENT_6474 cmdsize: 7275 segname: __PAGEZERO76 vmaddr: 077 vmsize: 429496729678 fileoff: 079 filesize: 080 maxprot: 081 initprot: 082 nsects: 083 flags: 084 - cmd: LC_SEGMENT_6485 cmdsize: 39286 segname: __TEXT87 vmaddr: 429496729688 vmsize: 1638489 fileoff: 090 filesize: 1638491 maxprot: 592 initprot: 593 nsects: 494 flags: 095 Sections:96 - sectname: __text97 segname: __TEXT98 addr: 0x100003F8099 size: 16100 offset: 0x3F80101 align: 2102 reloff: 0x0103 nreloc: 0104 flags: 0x80000400105 reserved1: 0x0106 reserved2: 0x0107 reserved3: 0x0108 content: E80B000000E80C000000C39000000000109 - sectname: __stubs110 segname: __TEXT111 addr: 0x100003F90112 size: 12113 offset: 0x3F90114 align: 1115 reloff: 0x0116 nreloc: 0117 flags: 0x80000408118 reserved1: 0x0119 reserved2: 0x6120 reserved3: 0x0121 content: FF256A400000FF256C400000122 - sectname: __stub_helper123 segname: __TEXT124 addr: 0x100003F9C125 size: 26126 offset: 0x3F9C127 align: 2128 reloff: 0x0129 nreloc: 0130 flags: 0x80000400131 reserved1: 0x0132 reserved2: 0x0133 reserved3: 0x0134 content: 4C8D1D6D4000004153FF2555000000906800000000E9E6FFFFFF135 - sectname: __unwind_info136 segname: __TEXT137 addr: 0x100003FB8138 size: 72139 offset: 0x3FB8140 align: 2141 reloff: 0x0142 nreloc: 0143 flags: 0x0144 reserved1: 0x0145 reserved2: 0x0146 reserved3: 0x0147 content: 010000001C000000000000001C000000000000001C00000002000000803F00003400000034000000913F00000000000034000000030000000C000100100001000000000000000000148 - cmd: LC_SEGMENT_64149 cmdsize: 152150 segname: __DATA_CONST151 vmaddr: 4294983680152 vmsize: 16384153 fileoff: 16384154 filesize: 16384155 maxprot: 3156 initprot: 3157 nsects: 1158 flags: 16159 Sections:160 - sectname: __got161 segname: __DATA_CONST162 addr: 0x100004000163 size: 8164 offset: 0x4000165 align: 3166 reloff: 0x0167 nreloc: 0168 flags: 0x6169 reserved1: 0x2170 reserved2: 0x0171 reserved3: 0x0172 content: '0000000000000000'173 - cmd: LC_SEGMENT_64174 cmdsize: 232175 segname: __DATA176 vmaddr: 4295000064177 vmsize: 16384178 fileoff: 32768179 filesize: 16384180 maxprot: 3181 initprot: 3182 nsects: 2183 flags: 0184 Sections:185 - sectname: __la_symbol_ptr186 segname: __DATA187 addr: 0x100008000188 size: 16189 offset: 0x8000190 align: 3191 reloff: 0x0192 nreloc: 0193 flags: 0x7194 reserved1: 0x3195 reserved2: 0x0196 reserved3: 0x0197 content: AC3F0000010000000000000000000000198 - sectname: __data199 segname: __DATA200 addr: 0x100008010201 size: 8202 offset: 0x8010203 align: 3204 reloff: 0x0205 nreloc: 0206 flags: 0x0207 reserved1: 0x0208 reserved2: 0x0209 reserved3: 0x0210 content: '0000000000000000'211 - cmd: LC_SEGMENT_64212 cmdsize: 72213 segname: __LINKEDIT214 vmaddr: 4295016448215 vmsize: 16384216 fileoff: 49152217 filesize: 920218 maxprot: 1219 initprot: 1220 nsects: 0221 flags: 0222 - cmd: LC_DYLD_INFO_ONLY223 cmdsize: 48224 rebase_off: 49152225 rebase_size: 8226 bind_off: 49160227 bind_size: 56228 weak_bind_off: 49216229 weak_bind_size: 32230 lazy_bind_off: 49248231 lazy_bind_size: 16232 export_off: 49264233 export_size: 48234 - cmd: LC_SYMTAB235 cmdsize: 24236 symoff: 49328237 nsyms: 6238 stroff: 49448239 strsize: 80240 - cmd: LC_DYSYMTAB241 cmdsize: 80242 ilocalsym: 0243 nlocalsym: 1244 iextdefsym: 1245 nextdefsym: 2246 iundefsym: 3247 nundefsym: 3248 tocoff: 0249 ntoc: 0250 modtaboff: 0251 nmodtab: 0252 extrefsymoff: 0253 nextrefsyms: 0254 indirectsymoff: 49424255 nindirectsyms: 5256 extreloff: 0257 nextrel: 0258 locreloff: 0259 nlocrel: 0260 - cmd: LC_LOAD_DYLINKER261 cmdsize: 32262 name: 12263 Content: '/usr/lib/dyld'264 ZeroPadBytes: 7265 - cmd: LC_UUID266 cmdsize: 24267 uuid: D565F8BE-1140-391A-BD6E-9CED386430F2268 - cmd: LC_BUILD_VERSION269 cmdsize: 32270 platform: 1271 minos: 786432272 sdk: 787200273 ntools: 1274 Tools:275 - tool: 3276 version: 50069504277 - cmd: LC_SOURCE_VERSION278 cmdsize: 16279 version: 0280 - cmd: LC_MAIN281 cmdsize: 24282 entryoff: 16256283 stacksize: 0284 - cmd: LC_LOAD_DYLIB285 cmdsize: 48286 dylib:287 name: 24288 timestamp: 2289 current_version: 0290 compatibility_version: 0291 Content: libFoo-classic.dylib292 ZeroPadBytes: 4293 - cmd: LC_LOAD_DYLIB294 cmdsize: 56295 dylib:296 name: 24297 timestamp: 2298 current_version: 85943299299 compatibility_version: 65536300 Content: '/usr/lib/libSystem.B.dylib'301 ZeroPadBytes: 6302 - cmd: LC_FUNCTION_STARTS303 cmdsize: 16304 dataoff: 49312305 datasize: 8306 - cmd: LC_DATA_IN_CODE307 cmdsize: 16308 dataoff: 49320309 datasize: 8310 - cmd: LC_CODE_SIGNATURE311 cmdsize: 16312 dataoff: 49536313 datasize: 536314LinkEditData:315 RebaseOpcodes:316 - Opcode: REBASE_OPCODE_SET_TYPE_IMM317 Imm: 1318 - Opcode: REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB319 Imm: 3320 ExtraData: [ 0x0 ]321 - Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES322 Imm: 1323 - Opcode: REBASE_OPCODE_DONE324 Imm: 0325 BindOpcodes:326 - Opcode: BIND_OPCODE_SET_DYLIB_ORDINAL_IMM327 Imm: 1328 Symbol: ''329 - Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM330 Imm: 0331 Symbol: _weak_foo332 - Opcode: BIND_OPCODE_SET_TYPE_IMM333 Imm: 1334 Symbol: ''335 - Opcode: BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB336 Imm: 3337 ULEBExtraData: [ 0x8 ]338 Symbol: ''339 - Opcode: BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB340 Imm: 0341 ULEBExtraData: [ 0xFFFFFFFFFFFFFFF8 ]342 Symbol: ''343 - Opcode: BIND_OPCODE_DO_BIND344 Imm: 0345 Symbol: ''346 - Opcode: BIND_OPCODE_SET_DYLIB_ORDINAL_IMM347 Imm: 2348 Symbol: ''349 - Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM350 Imm: 0351 Symbol: dyld_stub_binder352 - Opcode: BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB353 Imm: 2354 ULEBExtraData: [ 0x0 ]355 Symbol: ''356 - Opcode: BIND_OPCODE_DO_BIND357 Imm: 0358 Symbol: ''359 - Opcode: BIND_OPCODE_DONE360 Imm: 0361 Symbol: ''362 WeakBindOpcodes:363 - Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM364 Imm: 0365 Symbol: _weak_foo366 - Opcode: BIND_OPCODE_SET_TYPE_IMM367 Imm: 1368 Symbol: ''369 - Opcode: BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB370 Imm: 3371 ULEBExtraData: [ 0x8 ]372 Symbol: ''373 - Opcode: BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB374 Imm: 0375 ULEBExtraData: [ 0xFFFFFFFFFFFFFFF8 ]376 Symbol: ''377 - Opcode: BIND_OPCODE_DO_BIND378 Imm: 0379 Symbol: ''380 - Opcode: BIND_OPCODE_DONE381 Imm: 0382 Symbol: ''383 LazyBindOpcodes:384 - Opcode: BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB385 Imm: 3386 ULEBExtraData: [ 0x0 ]387 Symbol: ''388 - Opcode: BIND_OPCODE_SET_DYLIB_ORDINAL_IMM389 Imm: 1390 Symbol: ''391 - Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM392 Imm: 0393 Symbol: _foo394 - Opcode: BIND_OPCODE_DO_BIND395 Imm: 0396 Symbol: ''397 - Opcode: BIND_OPCODE_DONE398 Imm: 0399 Symbol: ''400 - Opcode: BIND_OPCODE_DONE401 Imm: 0402 Symbol: ''403 - Opcode: BIND_OPCODE_DONE404 Imm: 0405 Symbol: ''406 - Opcode: BIND_OPCODE_DONE407 Imm: 0408 Symbol: ''409 - Opcode: BIND_OPCODE_DONE410 Imm: 0411 Symbol: ''412 - Opcode: BIND_OPCODE_DONE413 Imm: 0414 Symbol: ''415 ExportTrie:416 TerminalSize: 0417 NodeOffset: 0418 Name: ''419 Flags: 0x0420 Address: 0x0421 Other: 0x0422 ImportName: ''423 Children:424 - TerminalSize: 0425 NodeOffset: 5426 Name: _427 Flags: 0x0428 Address: 0x0429 Other: 0x0430 ImportName: ''431 Children:432 - TerminalSize: 2433 NodeOffset: 33434 Name: _mh_execute_header435 Flags: 0x0436 Address: 0x0437 Other: 0x0438 ImportName: ''439 - TerminalSize: 3440 NodeOffset: 37441 Name: main442 Flags: 0x0443 Address: 0x3F80444 Other: 0x0445 ImportName: ''446 NameList:447 - n_strx: 60448 n_type: 0xE449 n_sect: 7450 n_desc: 0451 n_value: 4295000080452 - n_strx: 2453 n_type: 0xF454 n_sect: 1455 n_desc: 16456 n_value: 4294967296457 - n_strx: 22458 n_type: 0xF459 n_sect: 1460 n_desc: 0461 n_value: 4294983552462 - n_strx: 28463 n_type: 0x1464 n_sect: 0465 n_desc: 256466 n_value: 0467 - n_strx: 33468 n_type: 0x1469 n_sect: 0470 n_desc: 384471 n_value: 0472 - n_strx: 43473 n_type: 0x1474 n_sect: 0475 n_desc: 512476 n_value: 0477 StringTable:478 - ' '479 - __mh_execute_header480 - _main481 - _foo482 - _weak_foo483 - dyld_stub_binder484 - __dyld_private485 - ''486 - ''487 - ''488 - ''489 - ''490 IndirectSymbols: [ 0x3, 0x4, 0x5, 0x3, 0x4 ]491 FunctionStarts: [ 0x3F80 ]492 DataInCode:493 - Offset: 0x3F8C494 Length: 4495 Kind: 0x4496...497