1## This file contains test cases for generating a DWARFv5 .debug_info
2## section in object files from the DWARF entry of Mach-O YAML inputs.
3
4## a) Test that yaml2obj emits a DWARF32 .debug_info sections and obj2yaml
5## converts it back.
6
7# RUN: yaml2obj --docnum=1 %s | obj2yaml | FileCheck %s --check-prefix=DWARF32
8
9--- !mach-o
10FileHeader:
11  magic:           0xFEEDFACF
12  cputype:         0x01000007
13  cpusubtype:      0x00000003
14  filetype:        0x0000000A
15  ncmds:           5
16  sizeofcmds:      1800
17  flags:           0x00000000
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:         472
33    segname:         __TEXT
34    vmaddr:          4294967296
35    vmsize:          4096
36    fileoff:         0
37    filesize:        0
38    maxprot:         7
39    initprot:        5
40    nsects:          5
41    flags:           0
42    Sections:
43      - sectname:        __text
44        segname:         __TEXT
45        addr:            0x0000000100000F50
46        size:            52
47        offset:          0x00000000
48        align:           4
49        reloff:          0x00000000
50        nreloc:          0
51        flags:           0x80000400
52        reserved1:       0x00000000
53        reserved2:       0x00000000
54        reserved3:       0x00000000
55      - sectname:        __stubs
56        segname:         __TEXT
57        addr:            0x0000000100000F84
58        size:            6
59        offset:          0x00000000
60        align:           1
61        reloff:          0x00000000
62        nreloc:          0
63        flags:           0x80000408
64        reserved1:       0x00000000
65        reserved2:       0x00000006
66        reserved3:       0x00000000
67      - sectname:        __stub_helper
68        segname:         __TEXT
69        addr:            0x0000000100000F8C
70        size:            26
71        offset:          0x00000000
72        align:           2
73        reloff:          0x00000000
74        nreloc:          0
75        flags:           0x80000400
76        reserved1:       0x00000000
77        reserved2:       0x00000000
78        reserved3:       0x00000000
79      - sectname:        __cstring
80        segname:         __TEXT
81        addr:            0x0000000100000FA6
82        size:            14
83        offset:          0x00000000
84        align:           0
85        reloff:          0x00000000
86        nreloc:          0
87        flags:           0x00000002
88        reserved1:       0x00000000
89        reserved2:       0x00000000
90        reserved3:       0x00000000
91      - sectname:        __unwind_info
92        segname:         __TEXT
93        addr:            0x0000000100000FB4
94        size:            72
95        offset:          0x00000000
96        align:           2
97        reloff:          0x00000000
98        nreloc:          0
99        flags:           0x00000000
100        reserved1:       0x00000000
101        reserved2:       0x00000000
102        reserved3:       0x00000000
103  - cmd:             LC_SEGMENT_64
104    cmdsize:         232
105    segname:         __DATA
106    vmaddr:          4294971392
107    vmsize:          4096
108    fileoff:         0
109    filesize:        0
110    maxprot:         7
111    initprot:        3
112    nsects:          2
113    flags:           0
114    Sections:
115      - sectname:        __nl_symbol_ptr
116        segname:         __DATA
117        addr:            0x0000000100001000
118        size:            16
119        offset:          0x00000000
120        align:           3
121        reloff:          0x00000000
122        nreloc:          0
123        flags:           0x00000006
124        reserved1:       0x00000001
125        reserved2:       0x00000000
126        reserved3:       0x00000000
127      - sectname:        __la_symbol_ptr
128        segname:         __DATA
129        addr:            0x0000000100001010
130        size:            8
131        offset:          0x00000000
132        align:           3
133        reloff:          0x00000000
134        nreloc:          0
135        flags:           0x00000007
136        reserved1:       0x00000003
137        reserved2:       0x00000000
138        reserved3:       0x00000000
139  - cmd:             LC_SEGMENT_64
140    cmdsize:         72
141    segname:         __LINKEDIT
142    vmaddr:          4294975488
143    vmsize:          4096
144    fileoff:         4096
145    filesize:        60
146    maxprot:         7
147    initprot:        1
148    nsects:          0
149    flags:           0
150  - cmd:             LC_SEGMENT_64
151    cmdsize:         952
152    segname:         __DWARF
153    vmaddr:          4294979584
154    vmsize:          4096
155    fileoff:         8192
156    filesize:        765
157    maxprot:         7
158    initprot:        3
159    nsects:          11
160    flags:           0
161    Sections:
162      - sectname:        __debug_line
163        segname:         __DWARF
164        addr:            0x0000000100003000
165        size:            69
166        offset:          0x00002000
167        align:           0
168        reloff:          0x00000000
169        nreloc:          0
170        flags:           0x00000000
171        reserved1:       0x00000000
172        reserved2:       0x00000000
173        reserved3:       0x00000000
174      - sectname:        __debug_pubnames
175        segname:         __DWARF
176        addr:            0x0000000100003045
177        size:            27
178        offset:          0x00002045
179        align:           0
180        reloff:          0x00000000
181        nreloc:          0
182        flags:           0x00000000
183        reserved1:       0x00000000
184        reserved2:       0x00000000
185        reserved3:       0x00000000
186      - sectname:        __debug_pubtypes
187        segname:         __DWARF
188        addr:            0x0000000100003060
189        size:            35
190        offset:          0x00002060
191        align:           0
192        reloff:          0x00000000
193        nreloc:          0
194        flags:           0x00000000
195        reserved1:       0x00000000
196        reserved2:       0x00000000
197        reserved3:       0x00000000
198      - sectname:        __debug_aranges
199        segname:         __DWARF
200        addr:            0x0000000100003083
201        size:            48
202        offset:          0x00002083
203        align:           0
204        reloff:          0x00000000
205        nreloc:          0
206        flags:           0x00000000
207        reserved1:       0x00000000
208        reserved2:       0x00000000
209        reserved3:       0x00000000
210      - sectname:        __debug_info
211        segname:         __DWARF
212        addr:            0x00000001000030B3
213        size:            122
214        offset:          0x000020B3
215        align:           0
216        reloff:          0x00000000
217        nreloc:          0
218        flags:           0x00000000
219        reserved1:       0x00000000
220        reserved2:       0x00000000
221        reserved3:       0x00000000
222      - sectname:        __debug_abbrev
223        segname:         __DWARF
224        addr:            0x000000010000312C
225        size:            76
226        offset:          0x0000212D
227        align:           0
228        reloff:          0x00000000
229        nreloc:          0
230        flags:           0x00000000
231        reserved1:       0x00000000
232        reserved2:       0x00000000
233        reserved3:       0x00000000
234      - sectname:        __debug_str
235        segname:         __DWARF
236        addr:            0x0000000100003178
237        size:            142
238        offset:          0x00002179
239        align:           0
240        reloff:          0x00000000
241        nreloc:          0
242        flags:           0x00000000
243        reserved1:       0x00000000
244        reserved2:       0x00000000
245        reserved3:       0x00000000
246      - sectname:        __apple_names
247        segname:         __DWARF
248        addr:            0x0000000100003206
249        size:            60
250        offset:          0x00002207
251        align:           0
252        reloff:          0x00000000
253        nreloc:          0
254        flags:           0x00000000
255        reserved1:       0x00000000
256        reserved2:       0x00000000
257        reserved3:       0x00000000
258      - sectname:        __apple_namespac
259        segname:         __DWARF
260        addr:            0x0000000100003242
261        size:            36
262        offset:          0x00002243
263        align:           0
264        reloff:          0x00000000
265        nreloc:          0
266        flags:           0x00000000
267        reserved1:       0x00000000
268        reserved2:       0x00000000
269        reserved3:       0x00000000
270      - sectname:        __apple_types
271        segname:         __DWARF
272        addr:            0x0000000100003266
273        size:            114
274        offset:          0x00002267
275        align:           0
276        reloff:          0x00000000
277        nreloc:          0
278        flags:           0x00000000
279        reserved1:       0x00000000
280        reserved2:       0x00000000
281        reserved3:       0x00000000
282      - sectname:        __apple_objc
283        segname:         __DWARF
284        addr:            0x00000001000032D8
285        size:            36
286        offset:          0x000022D9
287        align:           0
288        reloff:          0x00000000
289        nreloc:          0
290        flags:           0x00000000
291        reserved1:       0x00000000
292        reserved2:       0x00000000
293        reserved3:       0x00000000
294LinkEditData:
295  NameList:
296    - n_strx:          2
297      n_type:          0x0F
298      n_sect:          1
299      n_desc:          16
300      n_value:         4294967296
301    - n_strx:          22
302      n_type:          0x0F
303      n_sect:          1
304      n_desc:          0
305      n_value:         4294971216
306  StringTable:
307    - ''
308    - ''
309    - __mh_execute_header
310    - _main
311DWARF:
312  debug_abbrev:
313    - Table:
314        - Code:            0x00000001
315          Tag:             DW_TAG_compile_unit
316          Children:        DW_CHILDREN_yes
317          Attributes:
318            - Attribute:       DW_AT_producer
319              Form:            DW_FORM_strp
320            - Attribute:       DW_AT_language
321              Form:            DW_FORM_data2
322            - Attribute:       DW_AT_name
323              Form:            DW_FORM_strp
324            - Attribute:       DW_AT_stmt_list
325              Form:            DW_FORM_sec_offset
326            - Attribute:       DW_AT_comp_dir
327              Form:            DW_FORM_strp
328            - Attribute:       DW_AT_low_pc
329              Form:            DW_FORM_addr
330            - Attribute:       DW_AT_high_pc
331              Form:            DW_FORM_data4
332        - Code:            0x00000002
333          Tag:             DW_TAG_subprogram
334          Children:        DW_CHILDREN_yes
335          Attributes:
336            - Attribute:       DW_AT_low_pc
337              Form:            DW_FORM_addr
338            - Attribute:       DW_AT_high_pc
339              Form:            DW_FORM_data4
340            - Attribute:       DW_AT_frame_base
341              Form:            DW_FORM_exprloc
342            - Attribute:       DW_AT_name
343              Form:            DW_FORM_strp
344            - Attribute:       DW_AT_decl_file
345              Form:            DW_FORM_data1
346            - Attribute:       DW_AT_decl_line
347              Form:            DW_FORM_data1
348            - Attribute:       DW_AT_prototyped
349              Form:            DW_FORM_flag_present
350            - Attribute:       DW_AT_type
351              Form:            DW_FORM_ref4
352            - Attribute:       DW_AT_external
353              Form:            DW_FORM_flag_present
354        - Code:            0x00000003
355          Tag:             DW_TAG_formal_parameter
356          Children:        DW_CHILDREN_no
357          Attributes:
358            - Attribute:       DW_AT_location
359              Form:            DW_FORM_exprloc
360            - Attribute:       DW_AT_name
361              Form:            DW_FORM_strp
362            - Attribute:       DW_AT_decl_file
363              Form:            DW_FORM_data1
364            - Attribute:       DW_AT_decl_line
365              Form:            DW_FORM_data1
366            - Attribute:       DW_AT_type
367              Form:            DW_FORM_ref4
368        - Code:            0x00000004
369          Tag:             DW_TAG_base_type
370          Children:        DW_CHILDREN_no
371          Attributes:
372            - Attribute:       DW_AT_name
373              Form:            DW_FORM_strp
374            - Attribute:       DW_AT_encoding
375              Form:            DW_FORM_data1
376            - Attribute:       DW_AT_byte_size
377              Form:            DW_FORM_data1
378        - Code:            0x00000005
379          Tag:             DW_TAG_pointer_type
380          Children:        DW_CHILDREN_no
381          Attributes:
382            - Attribute:       DW_AT_type
383              Form:            DW_FORM_ref4
384  debug_aranges:
385    - Length:              44
386      Version:             2
387      CuOffset:            0
388      AddressSize:         8
389      SegmentSelectorSize: 0
390      Descriptors:
391        - Address:         0x0000000100000F50
392          Length:          52
393  debug_info:
394    - Length:          118
395      Version:         5
396      UnitType:        DW_UT_compile
397      AbbrOffset:      0
398      AddrSize:        8
399      Entries:
400        - AbbrCode:        0x00000001
401          Values:
402            - Value:           0x0000000000000001
403            - Value:           0x000000000000000C
404            - Value:           0x0000000000000038
405            - Value:           0x0000000000000000
406            - Value:           0x0000000000000046
407            - Value:           0x0000000100000F50
408            - Value:           0x0000000000000034
409        - AbbrCode:        0x00000002
410          Values:
411            - Value:           0x0000000100000F50
412            - Value:           0x0000000000000034
413            - Value:           0x0000000000000001
414              BlockData:
415                - 0x56
416            - Value:           0x0000000000000076
417            - Value:           0x0000000000000001
418            - Value:           0x0000000000000003
419            - Value:           0x0000000000000001
420            - Value:           0x0000000000000060
421            - Value:           0x0000000000000001
422        - AbbrCode:        0x00000003
423          Values:
424            - Value:           0x0000000000000002
425              BlockData:
426                - 0x91
427                - 0x78
428            - Value:           0x000000000000007B
429            - Value:           0x0000000000000001
430            - Value:           0x0000000000000003
431            - Value:           0x0000000000000060
432        - AbbrCode:        0x00000003
433          Values:
434            - Value:           0x0000000000000002
435              BlockData:
436                - 0x91
437                - 0x70
438            - Value:           0x0000000000000080
439            - Value:           0x0000000000000001
440            - Value:           0x0000000000000003
441            - Value:           0x0000000000000067
442        - AbbrCode:        0x00000000
443        - AbbrCode:        0x00000004
444          Values:
445            - Value:           0x0000000000000085
446            - Value:           0x0000000000000005
447            - Value:           0x0000000000000004
448        - AbbrCode:        0x00000005
449          Values:
450            - Value:           0x000000000000006C
451        - AbbrCode:        0x00000005
452          Values:
453            - Value:           0x0000000000000071
454        - AbbrCode:        0x00000004
455          Values:
456            - Value:           0x0000000000000089
457            - Value:           0x0000000000000006
458            - Value:           0x0000000000000001
459        - AbbrCode:        0x00000000
460  debug_line:
461    - Length:          65
462      Version:         2
463      PrologueLength:  36
464      MinInstLength:   1
465      DefaultIsStmt:   1
466      LineBase:        251
467      LineRange:       14
468      OpcodeBase:      13
469      StandardOpcodeLengths:
470        - 0
471        - 1
472        - 1
473        - 1
474        - 1
475        - 0
476        - 0
477        - 0
478        - 1
479        - 0
480        - 0
481        - 1
482      Files:
483        - Name:            hello_world.c
484          DirIdx:          0
485          ModTime:         0
486          Length:          0
487      Opcodes:
488        - Opcode:          DW_LNS_extended_op
489          ExtLen:          9
490          SubOpcode:       DW_LNE_set_address
491          Data:            4294971216
492        - Opcode:          0x14
493          Data:            4294971216
494        - Opcode:          DW_LNS_set_column
495          Data:            3
496        - Opcode:          DW_LNS_set_prologue_end
497          Data:            3
498        - Opcode:          DW_LNS_const_add_pc
499          Data:            3
500        - Opcode:          0xBB
501          Data:            3
502        - Opcode:          0xBB
503          Data:            3
504        - Opcode:          DW_LNS_advance_pc
505          Data:            11
506        - Opcode:          DW_LNS_extended_op
507          ExtLen:          1
508          SubOpcode:       DW_LNE_end_sequence
509          Data:            11
510...
511
512#      DWARF32: DWARF:
513#      DWARF32:   debug_info:
514# DWARF32-NEXT:     - Length:        0x76
515# DWARF32-NEXT:       Version:       5
516# DWARF32-NEXT:       UnitType:      DW_UT_compile
517# DWARF32-NEXT:       AbbrevTableID: 0
518# DWARF32-NEXT:       AbbrOffset:    0
519# DWARF32-NEXT:       AddrSize:      8
520# DWARF32-NEXT:       Entries:
521# DWARF32-NEXT:         - AbbrCode: 0x1
522# DWARF32-NEXT:           Values:
523# DWARF32-NEXT:             - Value: 0x1
524# DWARF32-NEXT:             - Value: 0xC
525# DWARF32-NEXT:             - Value: 0x38
526# DWARF32-NEXT:             - Value: 0x0
527# DWARF32-NEXT:             - Value: 0x46
528# DWARF32-NEXT:             - Value: 0x100000F50
529# DWARF32-NEXT:             - Value: 0x34
530# DWARF32-NEXT:         - AbbrCode: 0x2
531# DWARF32-NEXT:           Values:
532# DWARF32-NEXT:             - Value: 0x100000F50
533# DWARF32-NEXT:             - Value: 0x34
534# DWARF32-NEXT:             - Value: 0x1
535# DWARF32-NEXT:               BlockData: [ 0x56 ]
536# DWARF32-NEXT:             - Value: 0x76
537# DWARF32-NEXT:             - Value: 0x1
538# DWARF32-NEXT:             - Value: 0x3
539# DWARF32-NEXT:             - Value: 0x1
540# DWARF32-NEXT:             - Value: 0x60
541# DWARF32-NEXT:             - Value: 0x1
542# DWARF32-NEXT:         - AbbrCode: 0x3
543# DWARF32-NEXT:           Values:
544# DWARF32-NEXT:             - Value: 0x2
545# DWARF32-NEXT:               BlockData: [ 0x91, 0x78 ]
546# DWARF32-NEXT:             - Value: 0x7B
547# DWARF32-NEXT:             - Value: 0x1
548# DWARF32-NEXT:             - Value: 0x3
549# DWARF32-NEXT:             - Value: 0x60
550# DWARF32-NEXT:         - AbbrCode:        0x3
551# DWARF32-NEXT:           Values:
552# DWARF32-NEXT:             - Value:           0x2
553# DWARF32-NEXT:               BlockData:       [ 0x91, 0x70 ]
554# DWARF32-NEXT:             - Value:           0x80
555# DWARF32-NEXT:             - Value:           0x1
556# DWARF32-NEXT:             - Value:           0x3
557# DWARF32-NEXT:             - Value:           0x67
558# DWARF32-NEXT:         - AbbrCode:        0x0
559# DWARF32-NEXT:         - AbbrCode:        0x4
560# DWARF32-NEXT:           Values:
561# DWARF32-NEXT:             - Value:           0x85
562# DWARF32-NEXT:             - Value:           0x5
563# DWARF32-NEXT:             - Value:           0x4
564# DWARF32-NEXT:         - AbbrCode:        0x5
565# DWARF32-NEXT:           Values:
566# DWARF32-NEXT:             - Value:           0x6C
567# DWARF32-NEXT:         - AbbrCode:        0x5
568# DWARF32-NEXT:           Values:
569# DWARF32-NEXT:             - Value:           0x71
570# DWARF32-NEXT:         - AbbrCode:        0x4
571# DWARF32-NEXT:           Values:
572# DWARF32-NEXT:             - Value:           0x89
573# DWARF32-NEXT:             - Value:           0x6
574# DWARF32-NEXT:             - Value:           0x1
575# DWARF32-NEXT:         - AbbrCode:        0x0
576
577## b) Test that yaml2obj emits a correct unit header and obj2yaml is able to convert it back.
578
579## Test DWARF32 unit header.
580
581# RUN: yaml2obj --docnum=2 -DFORMAT=DWARF32 -DLENGTH=12 %s | \
582# RUN:   obj2yaml | FileCheck %s --check-prefix=DWARF32-YAML
583
584#      DWARF32-YAML: debug_info:
585# DWARF32-YAML-NEXT:   - Length:        0xC
586# DWARF32-YAML-NEXT:     Version:       5
587# DWARF32-YAML-NEXT:     UnitType:      DW_UT_compile
588# DWARF32-YAML-NEXT:     AbbrevTableID: 0
589# DWARF32-YAML-NEXT:     AbbrOffset:    0x0
590# DWARF32-YAML-NEXT:     AddrSize:      8
591# DWARF32-YAML-NEXT:     Entries:
592# DWARF32-YAML-NEXT:       - AbbrCode: 0x1
593# DWARF32-YAML-NEXT:         Values:
594# DWARF32-YAML-NEXT:           - Value: 0x1234
595
596--- !mach-o
597FileHeader:
598  magic:      0xFEEDFACF
599  cputype:    0x01000007
600  cpusubtype: 0x00000003
601  filetype:   0x0000000A
602  ncmds:      1
603  sizeofcmds: 232
604  flags:      0x00000000
605  reserved:   0x00000000
606LoadCommands:
607  - cmd:      LC_SEGMENT_64
608    cmdsize:  232
609    segname:  __DWARF
610    vmaddr:   0x00
611    vmsize:   0x00
612    fileoff:  0x00
613    filesize: 0x00
614    maxprot:  0
615    initprot: 0
616    nsects:   2
617    flags:    0
618    Sections:
619      - sectname:  __debug_abbrev
620        segname:   __DWARF
621        addr:      0x00
622        size:      12
623        offset:    528
624        align:     0
625        reloff:    0x00000000
626        nreloc:    0
627        flags:     0x00000000
628        reserved1: 0x00000000
629        reserved2: 0x00000000
630        reserved3: 0x00000000
631      - sectname:  __debug_info
632        segname:   __DWARF
633        addr:      0x00
634        size:      0xffff
635        offset:    1070
636        align:     0
637        reloff:    0x00000000
638        nreloc:    0
639        flags:     0x00000000
640        reserved1: 0x00000000
641        reserved2: 0x00000000
642        reserved3: 0x00000000
643DWARF:
644  debug_abbrev:
645    - Table:
646        - Code:     1
647          Tag:      DW_TAG_compile_unit
648          Children: DW_CHILDREN_no
649          Attributes:
650            - Attribute: DW_AT_low_pc
651              Form:      DW_FORM_addr
652  debug_info:
653    - Format:     [[FORMAT]]
654      Length:     [[LENGTH]]
655      Version:    5
656      UnitType:   DW_UT_compile
657      AbbrOffset: 0
658      AddrSize:   8
659      Entries:
660        - AbbrCode: 1
661          Values:
662            - Value: 0x1234
663
664## Test DWARF64 unit header.
665
666# RUN: yaml2obj --docnum=2 -DFORMAT=DWARF64 -DLENGTH=20 %s | \
667# RUN:   obj2yaml | FileCheck %s --check-prefix=DWARF64-YAML
668
669#      DWARF64-YAML: debug_info:
670# DWARF64-YAML-NEXT:   - Format:        DWARF64
671# DWARF64-YAML-NEXT:     Length:        0x14
672# DWARF64-YAML-NEXT:     Version:       5
673# DWARF64-YAML-NEXT:     UnitType:      DW_UT_compile
674# DWARF64-YAML-NEXT:     AbbrevTableID: 0
675# DWARF64-YAML-NEXT:     AbbrOffset:    0x0
676# DWARF64-YAML-NEXT:     AddrSize:      8
677# DWARF64-YAML-NEXT:     Entries:
678# DWARF64-YAML-NEXT:       - AbbrCode: 0x1
679# DWARF64-YAML-NEXT:         Values:
680# DWARF64-YAML-NEXT:           - Value: 0x1234
681