xref: /llvm-project/llvm/test/tools/llvm-objcopy/MachO/code_signature_lc_update.test (revision a299b24712ccd0769ffa0d5b65cbc98211fd4d99)
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