1## This test verifies that llvm-objcopy copies an executable properly. It
2## uses llvm-readobj instead of cmp because some parts of the object
3## (e.g., the string table) are not identical; the output file is correct but
4## some offsets differ from the input file.
5# RUN: yaml2obj %s -o %t
6# RUN: llvm-objcopy %t %t2
7# RUN: llvm-readobj --file-headers --sections %t2 | FileCheck %s
8
9--- !mach-o
10FileHeader:
11  magic:           0xFEEDFACF
12  cputype:         0x01000007
13  cpusubtype:      0x80000003
14  filetype:        0x00000002
15  ncmds:           15
16  sizeofcmds:      976
17  flags:           0x00200085
18  reserved:        0x00000000
19LoadCommands:
20  - cmd:             LC_SEGMENT_64
21    cmdsize:         72
22    segname:         __PAGEZERO
23    vmaddr:          0
24    vmsize:          4294967296
25    fileoff:         0
26    filesize:        0
27    maxprot:         0
28    initprot:        0
29    nsects:          0
30    flags:           0
31  - cmd:             LC_SEGMENT_64
32    cmdsize:         232
33    segname:         __TEXT
34    vmaddr:          4294967296
35    vmsize:          4096
36    fileoff:         0
37    filesize:        4096
38    maxprot:         7
39    initprot:        5
40    nsects:          2
41    flags:           0
42    Sections:
43      - sectname:        __text
44        segname:         __TEXT
45        addr:            0x0000000100000F70
46        size:            58
47        offset:          0x00000F70
48        align:           4
49        reloff:          0x00000000
50        nreloc:          0
51        flags:           0x80000400
52        reserved1:       0x00000000
53        reserved2:       0x00000000
54        reserved3:       0x00000000
55      - sectname:        __unwind_info
56        segname:         __TEXT
57        addr:            0x0000000100000FAC
58        size:            72
59        offset:          0x00000FAC
60        align:           2
61        reloff:          0x00000000
62        nreloc:          0
63        flags:           0x00000000
64        reserved1:       0x00000000
65        reserved2:       0x00000000
66        reserved3:       0x00000000
67  - cmd:             LC_SEGMENT_64
68    cmdsize:         232
69    segname:         __DATA
70    vmaddr:          4294971392
71    vmsize:          4096
72    fileoff:         4096
73    filesize:        4096
74    maxprot:         7
75    initprot:        3
76    nsects:          2
77    flags:           0
78    Sections:
79      - sectname:        __data
80        segname:         __DATA
81        addr:            0x0000000100001000
82        size:            4
83        offset:          0x00001000
84        align:           2
85        reloff:          0x00000000
86        nreloc:          0
87        flags:           0x00000000
88        reserved1:       0x00000000
89        reserved2:       0x00000000
90        reserved3:       0x00000000
91      - sectname:        __common
92        segname:         __DATA
93        addr:            0x0000000100001004
94        size:            4
95        offset:          0x00000000
96        align:           2
97        reloff:          0x00000000
98        nreloc:          0
99        flags:           0x00000001
100        reserved1:       0x00000000
101        reserved2:       0x00000000
102        reserved3:       0x00000000
103  - cmd:             LC_SEGMENT_64
104    cmdsize:         72
105    segname:         __LINKEDIT
106    vmaddr:          4294975488
107    vmsize:          4096
108    fileoff:         8192
109    filesize:        232
110    maxprot:         7
111    initprot:        1
112    nsects:          0
113    flags:           0
114  - cmd:             LC_DYLD_INFO_ONLY
115    cmdsize:         48
116    rebase_off:      0
117    rebase_size:     0
118    bind_off:        0
119    bind_size:       0
120    weak_bind_off:   0
121    weak_bind_size:  0
122    lazy_bind_off:   0
123    lazy_bind_size:  0
124    export_off:      8192
125    export_size:     72
126  - cmd:             LC_SYMTAB
127    cmdsize:         24
128    symoff:          8272
129    nsyms:           6
130    stroff:          8368
131    strsize:         56
132  - cmd:             LC_DYSYMTAB
133    cmdsize:         80
134    ilocalsym:       0
135    nlocalsym:       0
136    iextdefsym:      0
137    nextdefsym:      5
138    iundefsym:       5
139    nundefsym:       1
140    tocoff:          0
141    ntoc:            0
142    modtaboff:       0
143    nmodtab:         0
144    extrefsymoff:    0
145    nextrefsyms:     0
146    indirectsymoff:  0
147    nindirectsyms:   0
148    extreloff:       0
149    nextrel:         0
150    locreloff:       0
151    nlocrel:         0
152  - cmd:             LC_LOAD_DYLINKER
153    cmdsize:         32
154    name:            12
155    PayloadString:   '/usr/lib/dyld'
156    ZeroPadBytes:    7
157  - cmd:             LC_UUID
158    cmdsize:         24
159    uuid:            B6EE4FB7-4E1E-3C7A-80D3-CFBD89DBC0FE
160  - cmd:             LC_BUILD_VERSION
161    cmdsize:         32
162    platform:        1
163    minos:           658944
164    sdk:             658944
165    ntools:          1
166    Tools:
167      - tool:            3
168        version:         29491968
169  - cmd:             LC_SOURCE_VERSION
170    cmdsize:         16
171    version:         0
172  - cmd:             LC_MAIN
173    cmdsize:         24
174    entryoff:        3984
175    stacksize:       0
176  - cmd:             LC_LOAD_DYLIB
177    cmdsize:         56
178    dylib:
179      name:            24
180      timestamp:       2
181      current_version: 82115073
182      compatibility_version: 65536
183    PayloadString:   '/usr/lib/libSystem.B.dylib'
184    ZeroPadBytes:    6
185  - cmd:             LC_FUNCTION_STARTS
186    cmdsize:         16
187    dataoff:         8264
188    datasize:        8
189  - cmd:             LC_DATA_IN_CODE
190    cmdsize:         16
191    dataoff:         8272
192    datasize:        0
193LinkEditData:
194  ExportTrie:
195    TerminalSize:    0
196    NodeOffset:      0
197    Name:            ''
198    Flags:           0x0000000000000000
199    Address:         0x0000000000000000
200    Other:           0x0000000000000000
201    ImportName:      ''
202    Children:
203      - TerminalSize:    0
204        NodeOffset:      5
205        Name:            _
206        Flags:           0x0000000000000000
207        Address:         0x0000000000000000
208        Other:           0x0000000000000000
209        ImportName:      ''
210        Children:
211          - TerminalSize:    2
212            NodeOffset:      44
213            Name:            _mh_execute_header
214            Flags:           0x0000000000000000
215            Address:         0x0000000000000000
216            Other:           0x0000000000000000
217            ImportName:      ''
218          - TerminalSize:    3
219            NodeOffset:      48
220            Name:            foo
221            Flags:           0x0000000000000000
222            Address:         0x0000000000000F70
223            Other:           0x0000000000000000
224            ImportName:      ''
225          - TerminalSize:    3
226            NodeOffset:      53
227            Name:            main
228            Flags:           0x0000000000000000
229            Address:         0x0000000000000F90
230            Other:           0x0000000000000000
231            ImportName:      ''
232          - TerminalSize:    3
233            NodeOffset:      58
234            Name:            b
235            Flags:           0x0000000000000000
236            Address:         0x0000000000001000
237            Other:           0x0000000000000000
238            ImportName:      ''
239          - TerminalSize:    3
240            NodeOffset:      63
241            Name:            a
242            Flags:           0x0000000000000000
243            Address:         0x0000000000001004
244            Other:           0x0000000000000000
245            ImportName:      ''
246  NameList:
247    - n_strx:          2
248      n_type:          0x0F
249      n_sect:          1
250      n_desc:          16
251      n_value:         4294967296
252    - n_strx:          22
253      n_type:          0x0F
254      n_sect:          4
255      n_desc:          0
256      n_value:         4294971396
257    - n_strx:          25
258      n_type:          0x0F
259      n_sect:          3
260      n_desc:          0
261      n_value:         4294971392
262    - n_strx:          28
263      n_type:          0x0F
264      n_sect:          1
265      n_desc:          0
266      n_value:         4294971248
267    - n_strx:          33
268      n_type:          0x0F
269      n_sect:          1
270      n_desc:          0
271      n_value:         4294971280
272    - n_strx:          39
273      n_type:          0x01
274      n_sect:          0
275      n_desc:          256
276      n_value:         0
277  StringTable:
278    - ' '
279    - __mh_execute_header
280    - _a
281    - _b
282    - _foo
283    - _main
284    - dyld_stub_binder
285...
286
287# CHECK: FileType: Executable (0x2)
288# CHECK: Name: __text
289# CHECK: Name: __unwind_info
290# CHECK: Name: __data
291# CHECK: Name: __common
292