1## a) Test that yaml2obj is able to emit the __debug_abbrev section and obj2yaml is
2## able to convert it back.
3
4# RUN: yaml2obj --docnum=1 %s | obj2yaml | FileCheck %s
5
6--- !mach-o
7FileHeader:      
8  magic:           0xFEEDFACF
9  cputype:         0x01000007
10  cpusubtype:      0x00000003
11  filetype:        0x0000000A
12  ncmds:           5
13  sizeofcmds:      1800
14  flags:           0x00000000
15  reserved:        0x00000000
16LoadCommands:    
17  - cmd:             LC_SEGMENT_64
18    cmdsize:         72
19    segname:         __PAGEZERO
20    vmaddr:          0
21    vmsize:          4294967296
22    fileoff:         0
23    filesize:        0
24    maxprot:         0
25    initprot:        0
26    nsects:          0
27    flags:           0
28  - cmd:             LC_SEGMENT_64
29    cmdsize:         472
30    segname:         __TEXT
31    vmaddr:          4294967296
32    vmsize:          4096
33    fileoff:         0
34    filesize:        0
35    maxprot:         7
36    initprot:        5
37    nsects:          5
38    flags:           0
39    Sections:        
40      - sectname:        __text
41        segname:         __TEXT
42        addr:            0x0000000100000F50
43        size:            52
44        offset:          0x00000000
45        align:           4
46        reloff:          0x00000000
47        nreloc:          0
48        flags:           0x80000400
49        reserved1:       0x00000000
50        reserved2:       0x00000000
51        reserved3:       0x00000000
52      - sectname:        __stubs
53        segname:         __TEXT
54        addr:            0x0000000100000F84
55        size:            6
56        offset:          0x00000000
57        align:           1
58        reloff:          0x00000000
59        nreloc:          0
60        flags:           0x80000408
61        reserved1:       0x00000000
62        reserved2:       0x00000006
63        reserved3:       0x00000000
64      - sectname:        __stub_helper
65        segname:         __TEXT
66        addr:            0x0000000100000F8C
67        size:            26
68        offset:          0x00000000
69        align:           2
70        reloff:          0x00000000
71        nreloc:          0
72        flags:           0x80000400
73        reserved1:       0x00000000
74        reserved2:       0x00000000
75        reserved3:       0x00000000
76      - sectname:        __cstring
77        segname:         __TEXT
78        addr:            0x0000000100000FA6
79        size:            14
80        offset:          0x00000000
81        align:           0
82        reloff:          0x00000000
83        nreloc:          0
84        flags:           0x00000002
85        reserved1:       0x00000000
86        reserved2:       0x00000000
87        reserved3:       0x00000000
88      - sectname:        __unwind_info
89        segname:         __TEXT
90        addr:            0x0000000100000FB4
91        size:            72
92        offset:          0x00000000
93        align:           2
94        reloff:          0x00000000
95        nreloc:          0
96        flags:           0x00000000
97        reserved1:       0x00000000
98        reserved2:       0x00000000
99        reserved3:       0x00000000
100  - cmd:             LC_SEGMENT_64
101    cmdsize:         232
102    segname:         __DATA
103    vmaddr:          4294971392
104    vmsize:          4096
105    fileoff:         0
106    filesize:        0
107    maxprot:         7
108    initprot:        3
109    nsects:          2
110    flags:           0
111    Sections:        
112      - sectname:        __nl_symbol_ptr
113        segname:         __DATA
114        addr:            0x0000000100001000
115        size:            16
116        offset:          0x00000000
117        align:           3
118        reloff:          0x00000000
119        nreloc:          0
120        flags:           0x00000006
121        reserved1:       0x00000001
122        reserved2:       0x00000000
123        reserved3:       0x00000000
124      - sectname:        __la_symbol_ptr
125        segname:         __DATA
126        addr:            0x0000000100001010
127        size:            8
128        offset:          0x00000000
129        align:           3
130        reloff:          0x00000000
131        nreloc:          0
132        flags:           0x00000007
133        reserved1:       0x00000003
134        reserved2:       0x00000000
135        reserved3:       0x00000000
136  - cmd:             LC_SEGMENT_64
137    cmdsize:         72
138    segname:         __LINKEDIT
139    vmaddr:          4294975488
140    vmsize:          4096
141    fileoff:         4096
142    filesize:        60
143    maxprot:         7
144    initprot:        1
145    nsects:          0
146    flags:           0
147  - cmd:             LC_SEGMENT_64
148    cmdsize:         952
149    segname:         __DWARF
150    vmaddr:          4294979584
151    vmsize:          4096
152    fileoff:         8192
153    filesize:        764
154    maxprot:         7
155    initprot:        3
156    nsects:          11
157    flags:           0
158    Sections:        
159      - sectname:        __debug_line
160        segname:         __DWARF
161        addr:            0x0000000100003000
162        size:            69
163        offset:          0x00002000
164        align:           0
165        reloff:          0x00000000
166        nreloc:          0
167        flags:           0x00000000
168        reserved1:       0x00000000
169        reserved2:       0x00000000
170        reserved3:       0x00000000
171      - sectname:        __debug_pubnames
172        segname:         __DWARF
173        addr:            0x0000000100003045
174        size:            27
175        offset:          0x00002045
176        align:           0
177        reloff:          0x00000000
178        nreloc:          0
179        flags:           0x00000000
180        reserved1:       0x00000000
181        reserved2:       0x00000000
182        reserved3:       0x00000000
183      - sectname:        __debug_pubtypes
184        segname:         __DWARF
185        addr:            0x0000000100003060
186        size:            35
187        offset:          0x00002060
188        align:           0
189        reloff:          0x00000000
190        nreloc:          0
191        flags:           0x00000000
192        reserved1:       0x00000000
193        reserved2:       0x00000000
194        reserved3:       0x00000000
195      - sectname:        __debug_info
196        segname:         __DWARF
197        addr:            0x00000001000030B3
198        size:            121
199        offset:          0x000020B3
200        align:           0
201        reloff:          0x00000000
202        nreloc:          0
203        flags:           0x00000000
204        reserved1:       0x00000000
205        reserved2:       0x00000000
206        reserved3:       0x00000000
207      - sectname:        __debug_abbrev
208        segname:         __DWARF
209        addr:            0x000000010000312C
210        size:            76
211        offset:          0x0000212C
212        align:           0
213        reloff:          0x00000000
214        nreloc:          0
215        flags:           0x00000000
216        reserved1:       0x00000000
217        reserved2:       0x00000000
218        reserved3:       0x00000000
219      - sectname:        __debug_str
220        segname:         __DWARF
221        addr:            0x0000000100003178
222        size:            142
223        offset:          0x00002178
224        align:           0
225        reloff:          0x00000000
226        nreloc:          0
227        flags:           0x00000000
228        reserved1:       0x00000000
229        reserved2:       0x00000000
230        reserved3:       0x00000000
231      - sectname:        __apple_names
232        segname:         __DWARF
233        addr:            0x0000000100003206
234        size:            60
235        offset:          0x00002206
236        align:           0
237        reloff:          0x00000000
238        nreloc:          0
239        flags:           0x00000000
240        reserved1:       0x00000000
241        reserved2:       0x00000000
242        reserved3:       0x00000000
243      - sectname:        __apple_namespac
244        segname:         __DWARF
245        addr:            0x0000000100003242
246        size:            36
247        offset:          0x00002242
248        align:           0
249        reloff:          0x00000000
250        nreloc:          0
251        flags:           0x00000000
252        reserved1:       0x00000000
253        reserved2:       0x00000000
254        reserved3:       0x00000000
255      - sectname:        __apple_types
256        segname:         __DWARF
257        addr:            0x0000000100003266
258        size:            114
259        offset:          0x00002266
260        align:           0
261        reloff:          0x00000000
262        nreloc:          0
263        flags:           0x00000000
264        reserved1:       0x00000000
265        reserved2:       0x00000000
266        reserved3:       0x00000000
267      - sectname:        __apple_objc
268        segname:         __DWARF
269        addr:            0x00000001000032D8
270        size:            36
271        offset:          0x000022D8
272        align:           0
273        reloff:          0x00000000
274        nreloc:          0
275        flags:           0x00000000
276        reserved1:       0x00000000
277        reserved2:       0x00000000
278        reserved3:       0x00000000
279DWARF:           
280  debug_abbrev:     
281    - Table:
282        - Code:            0x00000001
283          Tag:             DW_TAG_compile_unit
284          Children:        DW_CHILDREN_yes
285          Attributes:      
286            - Attribute:       DW_AT_producer
287              Form:            DW_FORM_strp
288            - Attribute:       DW_AT_language
289              Form:            DW_FORM_data2
290            - Attribute:       DW_AT_name
291              Form:            DW_FORM_strp
292            - Attribute:       DW_AT_stmt_list
293              Form:            DW_FORM_sec_offset
294            - Attribute:       DW_AT_comp_dir
295              Form:            DW_FORM_strp
296            - Attribute:       DW_AT_low_pc
297              Form:            DW_FORM_addr
298            - Attribute:       DW_AT_high_pc
299              Form:            DW_FORM_data4
300        - Code:            0x00000002
301          Tag:             DW_TAG_subprogram
302          Children:        DW_CHILDREN_yes
303          Attributes:      
304            - Attribute:       DW_AT_low_pc
305              Form:            DW_FORM_addr
306            - Attribute:       DW_AT_high_pc
307              Form:            DW_FORM_data4
308            - Attribute:       DW_AT_frame_base
309              Form:            DW_FORM_exprloc
310            - Attribute:       DW_AT_name
311              Form:            DW_FORM_strp
312            - Attribute:       DW_AT_decl_file
313              Form:            DW_FORM_data1
314            - Attribute:       DW_AT_decl_line
315              Form:            DW_FORM_data1
316            - Attribute:       DW_AT_prototyped
317              Form:            DW_FORM_flag_present
318            - Attribute:       DW_AT_type
319              Form:            DW_FORM_ref4
320            - Attribute:       DW_AT_external
321              Form:            DW_FORM_flag_present
322        - Code:            0x00000003
323          Tag:             DW_TAG_formal_parameter
324          Children:        DW_CHILDREN_no
325          Attributes:      
326            - Attribute:       DW_AT_location
327              Form:            DW_FORM_exprloc
328            - Attribute:       DW_AT_name
329              Form:            DW_FORM_strp
330            - Attribute:       DW_AT_decl_file
331              Form:            DW_FORM_data1
332            - Attribute:       DW_AT_decl_line
333              Form:            DW_FORM_data1
334            - Attribute:       DW_AT_type
335              Form:            DW_FORM_ref4
336        - Code:            0x00000004
337          Tag:             DW_TAG_base_type
338          Children:        DW_CHILDREN_no
339          Attributes:      
340            - Attribute:       DW_AT_name
341              Form:            DW_FORM_strp
342            - Attribute:       DW_AT_encoding
343              Form:            DW_FORM_data1
344            - Attribute:       DW_AT_byte_size
345              Form:            DW_FORM_data1
346        - Code:            0x00000005
347          Tag:             DW_TAG_pointer_type
348          Children:        DW_CHILDREN_no
349          Attributes:      
350            - Attribute:       DW_AT_type
351              Form:            DW_FORM_ref4
352...
353
354#CHECK: DWARF:
355#CHECK:   debug_abbrev:
356#CHECK:     - Code:            0x1
357#CHECK:       Tag:             DW_TAG_compile_unit
358#CHECK:       Children:        DW_CHILDREN_yes
359#CHECK:       Attributes:
360#CHECK:         - Attribute:       DW_AT_producer
361#CHECK:           Form:            DW_FORM_strp
362#CHECK:         - Attribute:       DW_AT_language
363#CHECK:           Form:            DW_FORM_data2
364#CHECK:         - Attribute:       DW_AT_name
365#CHECK:           Form:            DW_FORM_strp
366#CHECK:         - Attribute:       DW_AT_stmt_list
367#CHECK:           Form:            DW_FORM_sec_offset
368#CHECK:         - Attribute:       DW_AT_comp_dir
369#CHECK:           Form:            DW_FORM_strp
370#CHECK:         - Attribute:       DW_AT_low_pc
371#CHECK:           Form:            DW_FORM_addr
372#CHECK:         - Attribute:       DW_AT_high_pc
373#CHECK:           Form:            DW_FORM_data4
374#CHECK:     - Code:            0x2
375#CHECK:       Tag:             DW_TAG_subprogram
376#CHECK:       Children:        DW_CHILDREN_yes
377#CHECK:       Attributes:
378#CHECK:         - Attribute:       DW_AT_low_pc
379#CHECK:           Form:            DW_FORM_addr
380#CHECK:         - Attribute:       DW_AT_high_pc
381#CHECK:           Form:            DW_FORM_data4
382#CHECK:         - Attribute:       DW_AT_frame_base
383#CHECK:           Form:            DW_FORM_exprloc
384#CHECK:         - Attribute:       DW_AT_name
385#CHECK:           Form:            DW_FORM_strp
386#CHECK:         - Attribute:       DW_AT_decl_file
387#CHECK:           Form:            DW_FORM_data1
388#CHECK:         - Attribute:       DW_AT_decl_line
389#CHECK:           Form:            DW_FORM_data1
390#CHECK:         - Attribute:       DW_AT_prototyped
391#CHECK:           Form:            DW_FORM_flag_present
392#CHECK:         - Attribute:       DW_AT_type
393#CHECK:           Form:            DW_FORM_ref4
394#CHECK:         - Attribute:       DW_AT_external
395#CHECK:           Form:            DW_FORM_flag_present
396#CHECK:     - Code:            0x3
397#CHECK:       Tag:             DW_TAG_formal_parameter
398#CHECK:       Children:        DW_CHILDREN_no
399#CHECK:       Attributes:
400#CHECK:         - Attribute:       DW_AT_location
401#CHECK:           Form:            DW_FORM_exprloc
402#CHECK:         - Attribute:       DW_AT_name
403#CHECK:           Form:            DW_FORM_strp
404#CHECK:         - Attribute:       DW_AT_decl_file
405#CHECK:           Form:            DW_FORM_data1
406#CHECK:         - Attribute:       DW_AT_decl_line
407#CHECK:           Form:            DW_FORM_data1
408#CHECK:         - Attribute:       DW_AT_type
409#CHECK:           Form:            DW_FORM_ref4
410#CHECK:     - Code:            0x4
411#CHECK:       Tag:             DW_TAG_base_type
412#CHECK:       Children:        DW_CHILDREN_no
413#CHECK:       Attributes:
414#CHECK:         - Attribute:       DW_AT_name
415#CHECK:           Form:            DW_FORM_strp
416#CHECK:         - Attribute:       DW_AT_encoding
417#CHECK:           Form:            DW_FORM_data1
418#CHECK:         - Attribute:       DW_AT_byte_size
419#CHECK:           Form:            DW_FORM_data1
420#CHECK:     - Code:            0x5
421#CHECK:       Tag:             DW_TAG_pointer_type
422#CHECK:       Children:        DW_CHILDREN_no
423#CHECK:       Attributes:
424#CHECK:         - Attribute:       DW_AT_type
425#CHECK:           Form:            DW_FORM_ref4
426
427## b) Test that yaml2obj emits an error message when there are non-empty compilation
428## units and multiple abbrev tables are assigned the same ID.
429
430# RUN: not yaml2obj --docnum=2 %s 2>&1 | FileCheck %s --check-prefix=ID-COLLISION
431
432# ID-COLLISION: yaml2obj: error: the ID (1) of abbrev table with index 1 has been used by abbrev table with index 0
433
434--- !mach-o
435FileHeader:
436  magic:      0xFEEDFACF
437  cputype:    0x01000007
438  cpusubtype: 0x00000003
439  filetype:   0x0000000A
440  ncmds:      1
441  sizeofcmds: 232
442  flags:      0x00000000
443  reserved:   0x00000000
444LoadCommands:
445  - cmd:      LC_SEGMENT_64
446    cmdsize:  232
447    segname:  __DWARF
448    vmaddr:   0x00
449    vmsize:   0x00
450    fileoff:  0x00
451    filesize: 0x00
452    maxprot:  0
453    initprot: 0
454    nsects:   2
455    flags:    0
456    Sections:
457      - sectname:  __debug_abbrev
458        segname:   __DWARF
459        addr:      0x00
460        size:      24
461        offset:    528
462        align:     0
463        reloff:    0x00000000
464        nreloc:    0
465        flags:     0x00000000
466        reserved1: 0x00000000
467        reserved2: 0x00000000
468        reserved3: 0x00000000
469      - sectname:  __debug_info
470        segname:   __DWARF
471        addr:      0x00
472        size:      64
473        offset:    1070
474        align:     0
475        reloff:    0x00000000
476        nreloc:    0
477        flags:     0x00000000
478        reserved1: 0x00000000
479        reserved2: 0x00000000
480        reserved3: 0x00000000
481DWARF:
482  debug_abbrev:
483    - ID: 1
484    - ID: 1
485  debug_info:
486    - Version:    4
487      AbbrOffset: 0x00
488      Entries:
489        - AbbrCode: 1
490          Values:
491            - Value: 0x1234
492