1## This test verifies that the linkedit segment is 2## laid out in the right order. 3 4# RUN: yaml2obj %s -o %t.original 5# RUN: llvm-objcopy %t.original %t.copy 6# RUN: obj2yaml %t.copy > %t.yaml 7## Print the results several times in order to capture the linkedit offsets 8## in the order they are needed, but still following the order of the load 9## commands where they appear. 10# RUN: cat %t.yaml %t.yaml %t.yaml | FileCheck %s 11 12# CHECK: cmd: LC_SEGMENT_64 13# CHECK: segname: __LINKEDIT 14# CHECK: fileoff: [[#LINKEDIT_FILEOFF:]] 15# CHECK: filesize: [[#LINKEDIT_FILESIZE:]] 16 17# CHECK: cmd: LC_DYLD_CHAINED_FIXUPS 18# CHECK: dataoff: [[#CHAINED_FIXUPS_FILEOFF: LINKEDIT_FILEOFF]] 19# CHECK: datasize: [[#CHAINED_FIXUPS_FILESIZE:]] 20 21# CHECK: cmd: LC_DYLD_EXPORTS_TRIE 22# 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 during 26## later. 27 28# CHECK: cmd: LC_FUNCTION_STARTS 29# 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_CODE 33# 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 last 37 38# CHECK: --- !mach-o 39 40# CHECK: cmd: LC_SYMTAB 41# 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_DYSYMTAB 47# CHECK: indirectsymoff: [[#DYSYMTAB_INDIRECTSYMOFF: SYMTAB_SYMOFF + mul(SYMTAB_NSYMS, 16)]] 48# CHECK: nindirectsyms: [[#DYSYMTAB_NINDIRECTSYMS:]] 49 50# CHECK: --- !mach-o 51 52# CHECK: cmd: LC_SYMTAB 53# CHECK: stroff: [[#SYMTAB_STROFF: DYSYMTAB_INDIRECTSYMOFF + mul(DYSYMTAB_NINDIRECTSYMS, 4)]] 54# CHECK: strsize: [[#SYMTAB_STRSIZE:]] 55 56# CHECK: cmd: LC_CODE_SIGNATURE 57## 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-o 62FileHeader: 63 magic: 0xFEEDFACF 64 cputype: 0x1000007 65 cpusubtype: 0x3 66 filetype: 0x2 67 ncmds: 18 68 sizeofcmds: 1032 69 flags: 0x210085 70 reserved: 0x0 71LoadCommands: 72 - cmd: LC_SEGMENT_64 73 cmdsize: 72 74 segname: __PAGEZERO 75 vmaddr: 0 76 vmsize: 4294967296 77 fileoff: 0 78 filesize: 0 79 maxprot: 0 80 initprot: 0 81 nsects: 0 82 flags: 0 83 - cmd: LC_SEGMENT_64 84 cmdsize: 312 85 segname: __TEXT 86 vmaddr: 4294967296 87 vmsize: 16384 88 fileoff: 0 89 filesize: 16384 90 maxprot: 5 91 initprot: 5 92 nsects: 3 93 flags: 0 94 Sections: 95 - sectname: __text 96 segname: __TEXT 97 addr: 0x100003F9C 98 size: 16 99 offset: 0x3F9C 100 align: 2 101 reloff: 0x0 102 nreloc: 0 103 flags: 0x80000400 104 reserved1: 0x0 105 reserved2: 0x0 106 reserved3: 0x0 107 content: E80B000000E80C000000C39000000000 108 - sectname: __stubs 109 segname: __TEXT 110 addr: 0x100003FAC 111 size: 12 112 offset: 0x3FAC 113 align: 1 114 reloff: 0x0 115 nreloc: 0 116 flags: 0x80000408 117 reserved1: 0x0 118 reserved2: 0x6 119 reserved3: 0x0 120 content: FF254E000000FF2550000000 121 - sectname: __unwind_info 122 segname: __TEXT 123 addr: 0x100003FB8 124 size: 72 125 offset: 0x3FB8 126 align: 2 127 reloff: 0x0 128 nreloc: 0 129 flags: 0x0 130 reserved1: 0x0 131 reserved2: 0x0 132 reserved3: 0x0 133 content: 010000001C000000000000001C000000000000001C000000020000009C3F00003400000034000000AD3F00000000000034000000030000000C000100100001000000000000000000 134 - cmd: LC_SEGMENT_64 135 cmdsize: 152 136 segname: __DATA_CONST 137 vmaddr: 4294983680 138 vmsize: 16384 139 fileoff: 16384 140 filesize: 16384 141 maxprot: 3 142 initprot: 3 143 nsects: 1 144 flags: 16 145 Sections: 146 - sectname: __got 147 segname: __DATA_CONST 148 addr: 0x100004000 149 size: 16 150 offset: 0x4000 151 align: 3 152 reloff: 0x0 153 nreloc: 0 154 flags: 0x6 155 reserved1: 0x2 156 reserved2: 0x0 157 reserved3: 0x0 158 content: '00000000000010800100000000000080' 159 - cmd: LC_SEGMENT_64 160 cmdsize: 72 161 segname: __LINKEDIT 162 vmaddr: 4295000064 163 vmsize: 16384 164 fileoff: 32768 165 filesize: 719 166 maxprot: 1 167 initprot: 1 168 nsects: 0 169 flags: 0 170 - cmd: LC_DYLD_CHAINED_FIXUPS 171 cmdsize: 16 172 dataoff: 32768 173 datasize: 104 174 - cmd: LC_DYLD_EXPORTS_TRIE 175 cmdsize: 16 176 dataoff: 32872 177 datasize: 48 178 - cmd: LC_SYMTAB 179 cmdsize: 24 180 symoff: 32936 181 nsyms: 4 182 stroff: 33016 183 strsize: 48 184 - cmd: LC_DYSYMTAB 185 cmdsize: 80 186 ilocalsym: 0 187 nlocalsym: 0 188 iextdefsym: 0 189 nextdefsym: 2 190 iundefsym: 2 191 nundefsym: 2 192 tocoff: 0 193 ntoc: 0 194 modtaboff: 0 195 nmodtab: 0 196 extrefsymoff: 0 197 nextrefsyms: 0 198 indirectsymoff: 33000 199 nindirectsyms: 4 200 extreloff: 0 201 nextrel: 0 202 locreloff: 0 203 nlocrel: 0 204 - cmd: LC_LOAD_DYLINKER 205 cmdsize: 32 206 name: 12 207 Content: '/usr/lib/dyld' 208 ZeroPadBytes: 7 209 - cmd: LC_UUID 210 cmdsize: 24 211 uuid: F74FD957-51B1-3D8E-AE70-D8A248BB5D93 212 - cmd: LC_BUILD_VERSION 213 cmdsize: 32 214 platform: 1 215 minos: 786432 216 sdk: 787200 217 ntools: 1 218 Tools: 219 - tool: 3 220 version: 50069504 221 - cmd: LC_SOURCE_VERSION 222 cmdsize: 16 223 version: 0 224 - cmd: LC_MAIN 225 cmdsize: 24 226 entryoff: 16284 227 stacksize: 0 228 - cmd: LC_LOAD_DYLIB 229 cmdsize: 56 230 dylib: 231 name: 24 232 timestamp: 2 233 current_version: 0 234 compatibility_version: 0 235 Content: libFoo-chained-fixups.dylib 236 ZeroPadBytes: 5 237 - cmd: LC_LOAD_DYLIB 238 cmdsize: 56 239 dylib: 240 name: 24 241 timestamp: 2 242 current_version: 85943299 243 compatibility_version: 65536 244 Content: '/usr/lib/libSystem.B.dylib' 245 ZeroPadBytes: 6 246 - cmd: LC_FUNCTION_STARTS 247 cmdsize: 16 248 dataoff: 32920 249 datasize: 8 250 - cmd: LC_DATA_IN_CODE 251 cmdsize: 16 252 dataoff: 32928 253 datasize: 8 254 - cmd: LC_CODE_SIGNATURE 255 cmdsize: 16 256 dataoff: 33072 257 datasize: 415 258LinkEditData: 259 ExportTrie: 260 TerminalSize: 0 261 NodeOffset: 0 262 Name: '' 263 Flags: 0x0 264 Address: 0x0 265 Other: 0x0 266 ImportName: '' 267 Children: 268 - TerminalSize: 0 269 NodeOffset: 5 270 Name: _ 271 Flags: 0x0 272 Address: 0x0 273 Other: 0x0 274 ImportName: '' 275 Children: 276 - TerminalSize: 2 277 NodeOffset: 33 278 Name: _mh_execute_header 279 Flags: 0x0 280 Address: 0x0 281 Other: 0x0 282 ImportName: '' 283 - TerminalSize: 3 284 NodeOffset: 37 285 Name: main 286 Flags: 0x0 287 Address: 0x3F9C 288 Other: 0x0 289 ImportName: '' 290 NameList: 291 - n_strx: 2 292 n_type: 0xF 293 n_sect: 1 294 n_desc: 16 295 n_value: 4294967296 296 - n_strx: 22 297 n_type: 0xF 298 n_sect: 1 299 n_desc: 0 300 n_value: 4294983580 301 - n_strx: 28 302 n_type: 0x1 303 n_sect: 0 304 n_desc: 256 305 n_value: 0 306 - n_strx: 33 307 n_type: 0x1 308 n_sect: 0 309 n_desc: 384 310 n_value: 0 311 StringTable: 312 - ' ' 313 - __mh_execute_header 314 - _main 315 - _foo 316 - _weak_foo 317 - '' 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: 0x3FA8 337 Length: 4 338 Kind: 0x4 339... 340