340 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_CHAINED_FIXUPS18# CHECK: dataoff: [[#CHAINED_FIXUPS_FILEOFF: LINKEDIT_FILEOFF]]19# CHECK: datasize: [[#CHAINED_FIXUPS_FILESIZE:]]20 21# CHECK: cmd: LC_DYLD_EXPORTS_TRIE22# CHECK: dataoff: [[#DYLD_EXPORTS_TRIE_FILEOFF: CHAINED_FIXUPS_FILEOFF + CHAINED_FIXUPS_FILESIZE]]23# CHECK: datasize: [[#DYLD_EXPORTS_TRIE_FILESIZE:]]24 25## Jump over LC_SYMTAB and LC_DYSYMTAB, which will be checked during26## later.27 28# CHECK: cmd: LC_FUNCTION_STARTS29# CHECK: dataoff: [[#FUNCTION_STARTS_FILEOFF: DYLD_EXPORTS_TRIE_FILEOFF + DYLD_EXPORTS_TRIE_FILESIZE]]30# CHECK: datasize: [[#FUNCTION_STARTS_FILESIZE:]]31 32# CHECK: cmd: LC_DATA_IN_CODE33# CHECK: dataoff: [[#DATA_IN_CODE_FILEOFF: FUNCTION_STARTS_FILEOFF + FUNCTION_STARTS_FILESIZE]]34# CHECK: datasize: [[#DATA_IN_CODE_FILESIZE:]]35 36## Jump over LC_CODE_SIGNATURE, which needs to be checked last37 38# CHECK: --- !mach-o39 40# CHECK: cmd: LC_SYMTAB41# CHECK: symoff: [[#SYMTAB_SYMOFF: DATA_IN_CODE_FILEOFF + DATA_IN_CODE_FILESIZE]]42# CHECK: nsyms: [[#SYMTAB_NSYMS:]]43 44## Skip over the strings table offset/size (part of LC_SYMTAB) until next loop.45 46# CHECK: cmd: LC_DYSYMTAB47# CHECK: indirectsymoff: [[#DYSYMTAB_INDIRECTSYMOFF: SYMTAB_SYMOFF + mul(SYMTAB_NSYMS, 16)]]48# CHECK: nindirectsyms: [[#DYSYMTAB_NINDIRECTSYMS:]]49 50# CHECK: --- !mach-o51 52# CHECK: cmd: LC_SYMTAB53# CHECK: stroff: [[#SYMTAB_STROFF: DYSYMTAB_INDIRECTSYMOFF + mul(DYSYMTAB_NINDIRECTSYMS, 4)]]54# CHECK: strsize: [[#SYMTAB_STRSIZE:]]55 56# CHECK: cmd: LC_CODE_SIGNATURE57## LC_CODE_SIGNATURE needs to be aligned to 16 bytes boundaries.58# CHECK: dataoff: [[#CODE_SIGNATURE_FILEOFF: mul(div(SYMTAB_STROFF + SYMTAB_STRSIZE + 8, 16), 16)]]59# CHECK: datasize: [[#CODE_SIGNATURE_FILESIZE:LINKEDIT_FILEOFF + LINKEDIT_FILESIZE - CODE_SIGNATURE_FILEOFF]]60 61--- !mach-o62FileHeader:63 magic: 0xFEEDFACF64 cputype: 0x100000765 cpusubtype: 0x366 filetype: 0x267 ncmds: 1868 sizeofcmds: 103269 flags: 0x21008570 reserved: 0x071LoadCommands:72 - cmd: LC_SEGMENT_6473 cmdsize: 7274 segname: __PAGEZERO75 vmaddr: 076 vmsize: 429496729677 fileoff: 078 filesize: 079 maxprot: 080 initprot: 081 nsects: 082 flags: 083 - cmd: LC_SEGMENT_6484 cmdsize: 31285 segname: __TEXT86 vmaddr: 429496729687 vmsize: 1638488 fileoff: 089 filesize: 1638490 maxprot: 591 initprot: 592 nsects: 393 flags: 094 Sections:95 - sectname: __text96 segname: __TEXT97 addr: 0x100003F9C98 size: 1699 offset: 0x3F9C100 align: 2101 reloff: 0x0102 nreloc: 0103 flags: 0x80000400104 reserved1: 0x0105 reserved2: 0x0106 reserved3: 0x0107 content: E80B000000E80C000000C39000000000108 - sectname: __stubs109 segname: __TEXT110 addr: 0x100003FAC111 size: 12112 offset: 0x3FAC113 align: 1114 reloff: 0x0115 nreloc: 0116 flags: 0x80000408117 reserved1: 0x0118 reserved2: 0x6119 reserved3: 0x0120 content: FF254E000000FF2550000000121 - sectname: __unwind_info122 segname: __TEXT123 addr: 0x100003FB8124 size: 72125 offset: 0x3FB8126 align: 2127 reloff: 0x0128 nreloc: 0129 flags: 0x0130 reserved1: 0x0131 reserved2: 0x0132 reserved3: 0x0133 content: 010000001C000000000000001C000000000000001C000000020000009C3F00003400000034000000AD3F00000000000034000000030000000C000100100001000000000000000000134 - cmd: LC_SEGMENT_64135 cmdsize: 152136 segname: __DATA_CONST137 vmaddr: 4294983680138 vmsize: 16384139 fileoff: 16384140 filesize: 16384141 maxprot: 3142 initprot: 3143 nsects: 1144 flags: 16145 Sections:146 - sectname: __got147 segname: __DATA_CONST148 addr: 0x100004000149 size: 16150 offset: 0x4000151 align: 3152 reloff: 0x0153 nreloc: 0154 flags: 0x6155 reserved1: 0x2156 reserved2: 0x0157 reserved3: 0x0158 content: '00000000000010800100000000000080'159 - cmd: LC_SEGMENT_64160 cmdsize: 72161 segname: __LINKEDIT162 vmaddr: 4295000064163 vmsize: 16384164 fileoff: 32768165 filesize: 719166 maxprot: 1167 initprot: 1168 nsects: 0169 flags: 0170 - cmd: LC_DYLD_CHAINED_FIXUPS171 cmdsize: 16172 dataoff: 32768173 datasize: 104174 - cmd: LC_DYLD_EXPORTS_TRIE175 cmdsize: 16176 dataoff: 32872177 datasize: 48178 - cmd: LC_SYMTAB179 cmdsize: 24180 symoff: 32936181 nsyms: 4182 stroff: 33016183 strsize: 48184 - cmd: LC_DYSYMTAB185 cmdsize: 80186 ilocalsym: 0187 nlocalsym: 0188 iextdefsym: 0189 nextdefsym: 2190 iundefsym: 2191 nundefsym: 2192 tocoff: 0193 ntoc: 0194 modtaboff: 0195 nmodtab: 0196 extrefsymoff: 0197 nextrefsyms: 0198 indirectsymoff: 33000199 nindirectsyms: 4200 extreloff: 0201 nextrel: 0202 locreloff: 0203 nlocrel: 0204 - cmd: LC_LOAD_DYLINKER205 cmdsize: 32206 name: 12207 Content: '/usr/lib/dyld'208 ZeroPadBytes: 7209 - cmd: LC_UUID210 cmdsize: 24211 uuid: F74FD957-51B1-3D8E-AE70-D8A248BB5D93212 - cmd: LC_BUILD_VERSION213 cmdsize: 32214 platform: 1215 minos: 786432216 sdk: 787200217 ntools: 1218 Tools:219 - tool: 3220 version: 50069504221 - cmd: LC_SOURCE_VERSION222 cmdsize: 16223 version: 0224 - cmd: LC_MAIN225 cmdsize: 24226 entryoff: 16284227 stacksize: 0228 - cmd: LC_LOAD_DYLIB229 cmdsize: 56230 dylib:231 name: 24232 timestamp: 2233 current_version: 0234 compatibility_version: 0235 Content: libFoo-chained-fixups.dylib236 ZeroPadBytes: 5237 - cmd: LC_LOAD_DYLIB238 cmdsize: 56239 dylib:240 name: 24241 timestamp: 2242 current_version: 85943299243 compatibility_version: 65536244 Content: '/usr/lib/libSystem.B.dylib'245 ZeroPadBytes: 6246 - cmd: LC_FUNCTION_STARTS247 cmdsize: 16248 dataoff: 32920249 datasize: 8250 - cmd: LC_DATA_IN_CODE251 cmdsize: 16252 dataoff: 32928253 datasize: 8254 - cmd: LC_CODE_SIGNATURE255 cmdsize: 16256 dataoff: 33072257 datasize: 415258LinkEditData:259 ExportTrie:260 TerminalSize: 0261 NodeOffset: 0262 Name: ''263 Flags: 0x0264 Address: 0x0265 Other: 0x0266 ImportName: ''267 Children:268 - TerminalSize: 0269 NodeOffset: 5270 Name: _271 Flags: 0x0272 Address: 0x0273 Other: 0x0274 ImportName: ''275 Children:276 - TerminalSize: 2277 NodeOffset: 33278 Name: _mh_execute_header279 Flags: 0x0280 Address: 0x0281 Other: 0x0282 ImportName: ''283 - TerminalSize: 3284 NodeOffset: 37285 Name: main286 Flags: 0x0287 Address: 0x3F9C288 Other: 0x0289 ImportName: ''290 NameList:291 - n_strx: 2292 n_type: 0xF293 n_sect: 1294 n_desc: 16295 n_value: 4294967296296 - n_strx: 22297 n_type: 0xF298 n_sect: 1299 n_desc: 0300 n_value: 4294983580301 - n_strx: 28302 n_type: 0x1303 n_sect: 0304 n_desc: 256305 n_value: 0306 - n_strx: 33307 n_type: 0x1308 n_sect: 0309 n_desc: 384310 n_value: 0311 StringTable:312 - ' '313 - __mh_execute_header314 - _main315 - _foo316 - _weak_foo317 - ''318 - ''319 - ''320 - ''321 - ''322 IndirectSymbols: [ 0x2, 0x3, 0x2, 0x3 ]323 FunctionStarts: [ 0x3F9C ]324 ChainedFixups: [ 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x50, 0x0,325 0x0, 0x0, 0x58, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0,326 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,327 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,328 0x0, 0x0, 0x0, 0x0, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0,329 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0x0, 0x0, 0x0,330 0x0, 0x10, 0x6, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0,331 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0,332 0x1, 0x2, 0x0, 0x0, 0xFD, 0xC, 0x0, 0x0, 0x0, 0x5F,333 0x66, 0x6F, 0x6F, 0x0, 0x5F, 0x77, 0x65, 0x61, 0x6B,334 0x5F, 0x66, 0x6F, 0x6F, 0x0 ]335 DataInCode:336 - Offset: 0x3FA8337 Length: 4338 Kind: 0x4339...340