• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1## This file contains test cases for generating .debug_pubnames/.debug_pubtypes
2## section in object files from the DWARF entry of Mach-O YAML inputs
3
4## a) Test that yaml2obj emits the .debug_pubnames and .debug_pubtypes sections and
5## obj2yaml converts them back.
6
7# RUN: yaml2obj %s | obj2yaml | FileCheck %s
8
9--- !mach-o
10FileHeader:      
11  magic:           0xFEEDFACF
12  cputype:         0x01000007
13  cpusubtype:      0x00000003
14  filetype:        0x0000000A
15  ncmds:           1
16  sizeofcmds:      1800
17  flags:           0x00000000
18  reserved:        0x00000000
19LoadCommands:    
20  - cmd:             LC_SEGMENT_64
21    cmdsize:         232
22    segname:         __DWARF
23    vmaddr:          0
24    vmsize:          0
25    fileoff:         152
26    filesize:        0xffff
27    maxprot:         0
28    initprot:        0
29    nsects:          2
30    flags:           0
31    Sections:        
32      - sectname:  __debug_pubnames
33        segname:   __DWARF
34        addr:      0x0000000000000000
35        size:      27
36        offset:    0x00000152
37        align:     0
38        reloff:    0x00000000
39        nreloc:    0
40        flags:     0x00000000
41        reserved1: 0x00000000
42        reserved2: 0x00000000
43        reserved3: 0x00000000
44      - sectname:  __debug_pubtypes
45        segname:   __DWARF
46        addr:      0x0000000000000000
47        size:      35
48        offset:    0x00000720
49        align:     0
50        reloff:    0x00000000
51        nreloc:    0
52        flags:     0x00000000
53        reserved1: 0x00000000
54        reserved2: 0x00000000
55        reserved3: 0x00000000
56DWARF:           
57  debug_pubnames:  
58    Length:          23
59    Version:         2
60    UnitOffset:      0
61    UnitSize:        121
62    Entries:         
63      - DieOffset:       0x0000002A
64        Name:            main
65  debug_pubtypes:  
66    Length:          31
67    Version:         2
68    UnitOffset:      0
69    UnitSize:        121
70    Entries:         
71      - DieOffset:       0x00000060
72        Name:            int
73      - DieOffset:       0x00000071
74        Name:            char
75
76#      CHECK: DWARF:
77#      CHECK:   debug_pubnames:
78# CHECK-NEXT:     Length:          0x17
79# CHECK-NEXT:     Version:         2
80# CHECK-NEXT:     UnitOffset:      0
81# CHECK-NEXT:     UnitSize:        121
82# CHECK-NEXT:     Entries:
83# CHECK-NEXT:       - DieOffset:       0x2A
84# CHECK-NEXT:         Name:            main
85# CHECK-NEXT:   debug_pubtypes:
86# CHECK-NEXT:     Length:          0x1F
87# CHECK-NEXT:     Version:         2
88# CHECK-NEXT:     UnitOffset:      0
89# CHECK-NEXT:     UnitSize:        121
90# CHECK-NEXT:     Entries:
91# CHECK-NEXT:       - DieOffset:       0x60
92# CHECK-NEXT:         Name:            int
93# CHECK-NEXT:       - DieOffset:       0x71
94# CHECK-NEXT:         Name:            char
95# CHECK-NEXT: ...
96
97## b) Test that yaml2obj will not emit the .debug_pubnames/.debug_pubtypes section's
98## contents, if the "debug_pubnames"/"debug_pubtypes" entry doesn't exist in the
99## "DWARF" entry.
100
101# RUN: yaml2obj --docnum=2 %s -o %t2
102# RUN: obj2yaml %t2 | FileCheck %s --check-prefix=EMPTY
103
104#      EMPTY: Sections:
105# EMPTY-NEXT:   - sectname:        __debug_pubnames
106# EMPTY-NEXT:     segname:         __DWARF
107# EMPTY-NEXT:     addr:            0x0
108# EMPTY-NEXT:     size:            0
109# EMPTY-NEXT:     offset:          0x0
110# EMPTY-NEXT:     align:           0
111# EMPTY-NEXT:     reloff:          0x0
112# EMPTY-NEXT:     nreloc:          0
113# EMPTY-NEXT:     flags:           0x0
114# EMPTY-NEXT:     reserved1:       0x0
115# EMPTY-NEXT:     reserved2:       0x0
116# EMPTY-NEXT:     reserved3:       0x0
117# EMPTY-NEXT:   - sectname:        __debug_pubtypes
118# EMPTY-NEXT:     segname:         __DWARF
119# EMPTY-NEXT:     addr:            0x0
120# EMPTY-NEXT:     size:            0
121# EMPTY-NEXT:     offset:          0x720
122# EMPTY-NEXT:     align:           0
123# EMPTY-NEXT:     reloff:          0x0
124# EMPTY-NEXT:     nreloc:          0
125# EMPTY-NEXT:     flags:           0x0
126# EMPTY-NEXT:     reserved1:       0x0
127# EMPTY-NEXT:     reserved2:       0x0
128# EMPTY-NEXT:     reserved3:       0x0
129# EMPTY-NEXT: ...
130
131--- !mach-o
132FileHeader:
133  magic:      0xFEEDFACF
134  cputype:    0x01000007
135  cpusubtype: 0x00000003
136  filetype:   0x0000000A
137  ncmds:      1
138  sizeofcmds: 1772
139  flags:      0x00000000
140  reserved:   0x00000000
141LoadCommands:
142  - cmd:      LC_SEGMENT_64
143    cmdsize:  232
144    segname:  __DWARF
145    vmaddr:   0x00000000
146    vmsize:   0x00000000
147    fileoff:  0
148    filesize: 0
149    maxprot:  0
150    initprot: 0
151    nsects:   2
152    flags:    0
153    Sections:
154      - sectname:  __debug_pubnames
155        segname:   __DWARF
156        addr:      0x0000000000000000
157        size:      0
158        offset:    0x00000000
159        align:     0
160        reloff:    0x00000000
161        nreloc:    0
162        flags:     0x00000000
163        reserved1: 0x00000000
164        reserved2: 0x00000000
165        reserved3: 0x00000000
166      - sectname:  __debug_pubtypes
167        segname:   __DWARF
168        addr:      0x0000000000000000
169        size:      0
170        offset:    0x00000720
171        align:     0
172        reloff:    0x00000000
173        nreloc:    0
174        flags:     0x00000000
175        reserved1: 0x00000000
176        reserved2: 0x00000000
177        reserved3: 0x00000000
178DWARF:
179
180## c) Test that obj2yaml is able to dump a __debug_pubnames section whose length field is greater than the section size.
181
182# RUN: yaml2obj --docnum=3 %s | obj2yaml | FileCheck %s --check-prefix=INVALID-LENGTH
183
184#      INVALID-LENGTH: DWARF:
185# INVALID-LENGTH-NEXT:   debug_pubnames:
186# INVALID-LENGTH-NEXT:     Length:          0xDEADBEEF
187# INVALID-LENGTH-NEXT:     Version:         2
188# INVALID-LENGTH-NEXT:     UnitOffset:      0
189# INVALID-LENGTH-NEXT:     UnitSize:        121
190# INVALID-LENGTH-NEXT:     Entries:
191# INVALID-LENGTH-NEXT:       - DieOffset:       0x2A
192# INVALID-LENGTH-NEXT:         Name:            main
193
194--- !mach-o
195FileHeader:
196  magic:      0xFEEDFACF
197  cputype:    0x01000007
198  cpusubtype: 0x00000003
199  filetype:   0x0000000A
200  ncmds:      1
201  sizeofcmds: 1888
202  flags:      0x00000000
203  reserved:   0x00000000
204LoadCommands:
205  - cmd:      LC_SEGMENT_64
206    cmdsize:  152
207    segname:  __DWARF
208    vmaddr:   0x00000000
209    vmsize:   0x00000000
210    fileoff:  0
211    filesize: 0xffff
212    maxprot:  0
213    initprot: 0
214    nsects:   1
215    flags:    0
216    Sections:
217      - sectname:  __debug_pubnames
218        segname:   __DWARF
219        addr:      0x0000000000000000
220        size:      24
221        offset:    0x000000b8
222        align:     0
223        reloff:    0x00000000
224        nreloc:    0
225        flags:     0x00000000
226        reserved1: 0x00000000
227        reserved2: 0x00000000
228        reserved3: 0x00000000
229DWARF:
230  debug_pubnames:
231    Length:     0xdeadbeef
232    Version:    2
233    UnitOffset: 0
234    UnitSize:   121
235    Entries:
236      - DieOffset: 0x0000002A
237        Name:      main
238