1# RUN: yaml2obj %s -o %t 2 3# RUN: llvm-objdump --private-headers %t | FileCheck %s --check-prefix=CHECK-ORIGINAL 4 5## Check offset, size and index of text segment command 6# CHECK-ORIGINAL: Load command 1 7# CHECK-ORIGINAL-NEXT cmdsize 8# CHECK-ORIGINAL-NEXT segname __TEXT 9# CHECK-ORIGINAL-NEXT vmaddr 10# CHECK-ORIGINAL-NEXT vmsize 11# CHECK-ORIGINAL-NEXT fileoff 0 12# CHECK-ORIGINAL-NEXT filesize 16384 13 14## Check offset and index of code signature command 15# CHECK-ORIGINAL: Load command 14 16# CHECK-ORIGINAL-NEXT: cmd LC_CODE_SIGNATURE 17# CHECK-ORIGINAL-NEXT: cmdsize 16 18# CHECK-ORIGINAL-NEXT: dataoff 16544 19# CHECK-ORIGINAL-NEXT: datasize 280 20 21# RUN: llvm-install-name-tool -prepend_rpath abcd %t 22 23# RUN: llvm-objdump --private-headers %t | FileCheck %s --check-prefix=CHECK-PREPEND 24## Verify that the binary contains the new RPATH command, as the first command 25# CHECK-PREPEND: Load command 0 26# CHECK-PREPEND-NEXT: cmd LC_RPATH 27# CHECK-PREPEND-NEXT: cmdsize 28# CHECK-PREPEND-NEXT: path abcd 29 30## Verify the text segment command index increased by 1 31# CHECK-PREPEND: Load command 2 32# CHECK-PREPEND-NEXT cmdsize 33# CHECK-PREPEND-NEXT segname __TEXT 34# CHECK-PREPEND-NEXT vmaddr 35# CHECK-PREPEND-NEXT vmsize 36# CHECK-PREPEND-NEXT fileoff 0 37# CHECK-PREPEND-NEXT filesize 16384 38 39## Verify the code signature command index increased by 1 40# CHECK-PREPEND: Load command 15 41# CHECK-PREPEND-NEXT: cmd LC_CODE_SIGNATURE 42# CHECK-PREPEND-NEXT: cmdsize 16 43# CHECK-PREPEND-NEXT: dataoff 16544 44# CHECK-PREPEND-NEXT: datasize 320 45 46## Verify the new signature is valid 47# RUN: %python %p/Inputs/code-signature-check.py %t 16544 320 0 16544 | FileCheck %s --check-prefix=CHECK-TEXT-SEGMENT 48## Verify the text segment offset and text segment size values included in the signature header are accurate 49# CHECK-TEXT-SEGMENT: execSegBase=0, execSegLimit=16384 50 51# RUN: llvm-install-name-tool -delete_rpath abcd %t 52 53# RUN: llvm-objdump --private-headers %t | FileCheck %s --check-prefix=CHECK-REMOVE 54 55## Verify text segment command index returned to orignal 56# CHECK-REMOVE: Load command 1 57# CHECK-REMOVE-NEXT cmdsize 58# CHECK-REMOVE-NEXT segname __TEXT 59# CHECK-REMOVE-NEXT vmaddr 60# CHECK-REMOVE-NEXT vmsize 61# CHECK-REMOVE-NEXT fileoff 0 62# CHECK-REMOVE-NEXT filesize 16384 63 64## Verify text segment command index returned to original 65# CHECK-REMOVE: Load command 14 66# CHECK-REMOVE-NEXT: cmd LC_CODE_SIGNATURE 67# CHECK-REMOVE-NEXT: cmdsize 16 68# CHECK-REMOVE-NEXT: dataoff 16544 69# CHECK-REMOVE-NEXT: datasize 320 70 71## Verify the new signature is valid and text segment values are accurate 72# RUN: %python %p/Inputs/code-signature-check.py %t 16544 320 0 16544 | FileCheck %s --check-prefix=CHECK-TEXT-SEGMENT 73 74--- !mach-o 75FileHeader: 76 magic: 0xFEEDFACF 77 cputype: 0x1000007 78 cpusubtype: 0x3 79 filetype: 0x2 80 ncmds: 15 81 sizeofcmds: 760 82 flags: 0x200085 83 reserved: 0x0 84LoadCommands: 85 - cmd: LC_SEGMENT_64 86 cmdsize: 72 87 segname: __PAGEZERO 88 vmaddr: 0 89 vmsize: 4294967296 90 fileoff: 0 91 filesize: 0 92 maxprot: 0 93 initprot: 0 94 nsects: 0 95 flags: 0 96 - cmd: LC_SEGMENT_64 97 cmdsize: 232 98 segname: __TEXT 99 vmaddr: 4294967296 100 vmsize: 16384 101 fileoff: 0 102 filesize: 16384 103 maxprot: 5 104 initprot: 5 105 nsects: 2 106 flags: 0 107 Sections: 108 - sectname: __text 109 segname: __TEXT 110 addr: 0x100003FA0 111 size: 15 112 offset: 0x3FA0 113 align: 4 114 reloff: 0x0 115 nreloc: 0 116 flags: 0x80000400 117 reserved1: 0x0 118 reserved2: 0x0 119 reserved3: 0x0 120 content: 554889E531C0C745FC000000005DC3 121 - sectname: __unwind_info 122 segname: __TEXT 123 addr: 0x100003FB0 124 size: 72 125 offset: 0x3FB0 126 align: 2 127 reloff: 0x0 128 nreloc: 0 129 flags: 0x0 130 reserved1: 0x0 131 reserved2: 0x0 132 reserved3: 0x0 133 content: 010000001C000000000000001C000000000000001C00000002000000A03F00003400000034000000B03F00000000000034000000030000000C000100100001000000000000000001 134 - cmd: LC_SEGMENT_64 135 cmdsize: 72 136 segname: __LINKEDIT 137 vmaddr: 4294983680 138 vmsize: 16384 139 fileoff: 16384 140 filesize: 440 141 maxprot: 1 142 initprot: 1 143 nsects: 0 144 flags: 0 145 - cmd: LC_DYLD_INFO_ONLY 146 cmdsize: 48 147 rebase_off: 0 148 rebase_size: 0 149 bind_off: 0 150 bind_size: 0 151 weak_bind_off: 0 152 weak_bind_size: 0 153 lazy_bind_off: 0 154 lazy_bind_size: 0 155 export_off: 16384 156 export_size: 48 157 - cmd: LC_SYMTAB 158 cmdsize: 24 159 symoff: 16440 160 nsyms: 3 161 stroff: 16488 162 strsize: 48 163 - cmd: LC_DYSYMTAB 164 cmdsize: 80 165 ilocalsym: 0 166 nlocalsym: 0 167 iextdefsym: 0 168 nextdefsym: 2 169 iundefsym: 2 170 nundefsym: 1 171 tocoff: 0 172 ntoc: 0 173 modtaboff: 0 174 nmodtab: 0 175 extrefsymoff: 0 176 nextrefsyms: 0 177 indirectsymoff: 0 178 nindirectsyms: 0 179 extreloff: 0 180 nextrel: 0 181 locreloff: 0 182 nlocrel: 0 183 - cmd: LC_LOAD_DYLINKER 184 cmdsize: 32 185 name: 12 186 Content: '/usr/lib/dyld' 187 ZeroPadBytes: 7 188 - cmd: LC_UUID 189 cmdsize: 24 190 uuid: 42759668-1CBA-3094-8E2D-F01E1A66E815 191 - cmd: LC_BUILD_VERSION 192 cmdsize: 32 193 platform: 1 194 minos: 720896 195 sdk: 721664 196 ntools: 1 197 Tools: 198 - tool: 3 199 version: 42600704 200 - cmd: LC_SOURCE_VERSION 201 cmdsize: 16 202 version: 0 203 - cmd: LC_MAIN 204 cmdsize: 24 205 entryoff: 16288 206 stacksize: 0 207 - cmd: LC_LOAD_DYLIB 208 cmdsize: 56 209 dylib: 210 name: 24 211 timestamp: 2 212 current_version: 84698117 213 compatibility_version: 65536 214 Content: '/usr/lib/libSystem.B.dylib' 215 ZeroPadBytes: 6 216 - cmd: LC_FUNCTION_STARTS 217 cmdsize: 16 218 dataoff: 16432 219 datasize: 8 220 - cmd: LC_DATA_IN_CODE 221 cmdsize: 16 222 dataoff: 16440 223 datasize: 0 224 - cmd: LC_CODE_SIGNATURE 225 cmdsize: 16 226 dataoff: 16544 227 datasize: 280 228LinkEditData: 229 ExportTrie: 230 TerminalSize: 0 231 NodeOffset: 0 232 Name: '' 233 Flags: 0x0 234 Address: 0x0 235 Other: 0x0 236 ImportName: '' 237 Children: 238 - TerminalSize: 0 239 NodeOffset: 5 240 Name: _ 241 Flags: 0x0 242 Address: 0x0 243 Other: 0x0 244 ImportName: '' 245 Children: 246 - TerminalSize: 2 247 NodeOffset: 33 248 Name: _mh_execute_header 249 Flags: 0x0 250 Address: 0x0 251 Other: 0x0 252 ImportName: '' 253 - TerminalSize: 3 254 NodeOffset: 37 255 Name: main 256 Flags: 0x0 257 Address: 0x3FA0 258 Other: 0x0 259 ImportName: '' 260 NameList: 261 - n_strx: 2 262 n_type: 0xF 263 n_sect: 1 264 n_desc: 16 265 n_value: 4294967296 266 - n_strx: 22 267 n_type: 0xF 268 n_sect: 1 269 n_desc: 0 270 n_value: 4294983584 271 - n_strx: 28 272 n_type: 0x1 273 n_sect: 0 274 n_desc: 256 275 n_value: 0 276 StringTable: 277 - ' ' 278 - __mh_execute_header 279 - _main 280 - dyld_stub_binder 281 - '' 282 - '' 283 - '' 284... 285