debug-abbrev.yaml
10.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
## Test that yaml2obj emits .debug_abbrev section.
## a) Generate the .debug_abbrev section from the "DWARF" entry.
# RUN: yaml2obj --docnum=1 %s -o %t1.o
# RUN: llvm-readobj --sections --section-data %t1.o | \
# RUN: FileCheck -DSIZE=39 -DADDRALIGN=1 %s --check-prefixes=SHDR,CONTENT
# SHDR: Index: 1
# SHDR-NEXT: Name: .debug_abbrev (1)
# SHDR-NEXT: Type: SHT_PROGBITS (0x1)
# SHDR-NEXT: Flags [ (0x0)
# SHDR-NEXT: ]
# SHDR-NEXT: Address: 0x0
# SHDR-NEXT: Offset: 0x40
# SHDR-NEXT: Size: [[SIZE]]
# SHDR-NEXT: Link: 0
# SHDR-NEXT: Info: 0
# SHDR-NEXT: AddressAlignment: [[ADDRALIGN]]
# SHDR-NEXT: EntrySize: 0
# CONTENT-NEXT: SectionData (
# CONTENT-NEXT: 000: 01110125 0E130503
## ^- abbreviation code ULEB128 ^- DW_FORM_strp ULEB128
## ^- DW_TAG_compile_unit ULEB128 ^- DW_AT_language ULEB128
## ^- DW_CHILDREN_yes 1-byte ^- DW_FORM_data2 ULEB128
## ^- DW_AT_producer ULEB128 ^- DW_AT_name ULEB128
##
## CONTENT: 1A000002 2E011101 |...%............|
## ^- DW_AT_strx ULEB128 ^- DW_TAG_subprogram ULEB128
## ^--- attr terminator ^- DW_CHILDREN_yes 1-byte
## ^- abbreviation code ULEB128 ^- DW_AT_low_pc ULEB128
## ^- DW_FORM_addr ULEB128
##
# CONTENT-NEXT: 0010: 121B0000 03060081
## ^- DW_AT_high_pc ULEB128 ^- abbreviation code ULEB128
## ^- DW_FORM_addrx ULEB128 ^- Tag: value UELB128
## ^--- attr terminator ^- DW_CHILDREN_no 1-byte
## ^- DW_AT_call_pc ULEB128 (0x81)
##
# CONTENT: 01810104 02A04021 |..............@!|
## -- ^- Form: reserved ULEB128
## ^--- Form: invalid ULEB128 (0x81) ^--- Attribute: reserved ULEB128 (0x2020)
## ^- Attribute: reserved ULEB128 ^- DW_FORM_implicit_const ULEB128
##
# CONTENT-NEXT: 0020: CEC2F105 000000 |.......|
## ^------- Value SLEB128 (12345678) ^--- attr terminator
## ^- abbrev terminator
# CONTENT-NEXT: )
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Machine: EM_X86_64
DWARF:
debug_abbrev:
- Code: 1
Tag: DW_TAG_compile_unit
Children: DW_CHILDREN_yes
Attributes:
- Attribute: DW_AT_producer
Form: DW_FORM_strp
- Attribute: DW_AT_language
Form: DW_FORM_data2
- Attribute: DW_AT_name
Form: DW_FORM_strx
- Code: 2
Tag: DW_TAG_subprogram
Children: DW_CHILDREN_yes
Attributes:
- Attribute: DW_AT_low_pc
Form: DW_FORM_addr
- Attribute: DW_AT_high_pc
Form: DW_FORM_addrx
- Code: 3
## Test a reserved tag value.
Tag: 0x06
Children: DW_CHILDREN_no
Attributes:
## Test an attribute value that is more than one byte.
- Attribute: DW_AT_call_pc
## Test a form value that is more than one byte.
Form: 0x81
## Test a reserved attribute value.
- Attribute: 0x04
## Test a reserved form value.
Form: 0x02
- Attribute: 0x2020
## Test one special attribute form DW_FORM_implicit_const,
## who is followed by a SLEB128 value.
Form: DW_FORM_implicit_const
Value: 12345678
## b) Generate the .debug_abbrev section from raw section content.
# RUN: yaml2obj --docnum=2 %s -o %t2.o
# RUN: llvm-readobj --sections --section-data %t2.o | \
# RUN: FileCheck -DADDRALIGN=0 -DSIZE=3 %s --check-prefixes=SHDR,ARBITRARY-CONTENT
# ARBITRARY-CONTENT-NEXT: SectionData (
# ARBITRARY-CONTENT-NEXT: 0000: 112233
# ARBITRARY-CONTENT-NEXT: )
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Machine: EM_X86_64
Sections:
- Name: .debug_abbrev
Type: SHT_PROGBITS
Content: "112233"
## c) Generate the .debug_abbrev section when the "Size" is specified.
# RUN: yaml2obj --docnum=3 %s -o %t3.o
# RUN: llvm-readobj --sections --section-data %t3.o | \
# RUN: FileCheck -DSIZE=16 -DADDRALIGN=0 %s --check-prefixes=SHDR,SIZE
# SIZE-NEXT: SectionData (
# SIZE-NEXT: 0000: 00000000 00000000 00000000 00000000 |................|
# SIZE-NEXT: )
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Machine: EM_X86_64
Sections:
- Name: .debug_abbrev
Type: SHT_PROGBITS
Size: 0x10
## d) Test that yaml2obj emits an error message when both the "Size" and the
## "debug_abbrev" entry are specified at the same time.
# RUN: not yaml2obj --docnum=4 %s 2>&1 | FileCheck %s --check-prefix=ERROR
# ERROR: yaml2obj: error: cannot specify section '.debug_abbrev' contents in the 'DWARF' entry and the 'Content' or 'Size' in the 'Sections' entry at the same time
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Machine: EM_X86_64
Sections:
- Name: .debug_abbrev
Type: SHT_PROGBITS
Size: 0x10
DWARF:
debug_abbrev:
- Code: 1
Tag: DW_TAG_compile_unit
Children: DW_CHILDREN_no
Attributes: []
## e) Test that yaml2obj emits an error message when both the "Content" and the
## "debug_abbrev" entry are specified at the same time.
# RUN: not yaml2obj --docnum=5 %s 2>&1 | FileCheck %s --check-prefix=ERROR
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Machine: EM_X86_64
Sections:
- Name: .debug_abbrev
Type: SHT_PROGBITS
Content: "00"
DWARF:
debug_abbrev:
- Code: 1
Tag: DW_TAG_compile_unit
Children: DW_CHILDREN_no
Attributes: []
## f) Test that all the properties can be overridden by the section header when
## the "debug_abbrev" entry doesn't exist.
# RUN: yaml2obj --docnum=6 %s -o %t6.o
# RUN: llvm-readelf --sections %t6.o | FileCheck %s --check-prefix=OVERRIDDEN
# OVERRIDDEN: [Nr] Name Type Address Off Size ES Flg Lk Inf Al
# OVERRIDDEN: [ 1] .debug_abbrev STRTAB 0000000000002020 000050 000006 01 A 2 1 2
# OVERRIDDEN-NEXT: [ 2] .sec STRTAB 0000000000000000 000056 000000 00 0 0 0
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Machine: EM_X86_64
Sections:
- Name: .debug_abbrev
Type: SHT_STRTAB ## SHT_PROGBITS by default.
Flags: [SHF_ALLOC] ## 0 by default.
Link: .sec ## 0 by default.
EntSize: 1 ## 0 by default.
Info: 1 ## 0 by default.
AddressAlign: 2 ## 0 by default.
Address: 0x2020 ## 0x00 by default.
Offset: 0x50 ## 0x40 for the first section.
Size: 0x06 ## Set the "Size" so that we can reuse the check tag "OVERRIDDEN".
- Name: .sec ## Linked by .debug_abbrev.
Type: SHT_STRTAB
## g) Test that all the properties can be overridden by the section header when
## the "debug_abbrev" entry exists.
# RUN: yaml2obj --docnum=7 %s -o %t7.o
# RUN: llvm-readelf --sections %t7.o | FileCheck %s --check-prefix=OVERRIDDEN
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Machine: EM_X86_64
Sections:
- Name: .debug_abbrev
Type: SHT_STRTAB ## SHT_PROGBITS by default.
Flags: [SHF_ALLOC] ## 0 by default.
Link: .sec ## 0 by default.
EntSize: 1 ## 0 by default.
Info: 1 ## 0 by default.
AddressAlign: 2 ## 1 by default.
Address: 0x2020 ## 0x00 by default.
Offset: 0x50 ## 0x40 for the first section.
- Name: .sec ## Linked by .debug_abbrev.
Type: SHT_STRTAB
DWARF:
debug_abbrev:
- Code: 1
Tag: DW_TAG_compile_unit
Children: DW_CHILDREN_no
Attributes: []
## h) Test that yaml2obj automatically generates abbreviation codes for us.
# RUN: yaml2obj --docnum=8 %s -o %t8.o
# RUN: llvm-readelf --hex-dump=.debug_abbrev %t8.o | FileCheck %s --check-prefix=CODE
# CODE: 0x00000000 01110000 00022e00 0000042e 00000004
## ^- abbreviation code ULEB128
## ^- abbreviation code ULEB128
## ^- abbreviation code (ULEB128) 0x04
## ^- abbreviation code (ULEB128) 0x04
##
# CODE-NEXT: 0x00000010 2e000000 052e0000 00062e00 0000
## ^- abbreviation code ULEB128
## ^- abbreviation code ULEB128
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Machine: EM_X86_64
DWARF:
debug_abbrev:
- Tag: DW_TAG_compile_unit
Children: DW_CHILDREN_no
Attributes: []
- Tag: DW_TAG_subprogram
Children: DW_CHILDREN_no
Attributes: []
- Code: 4
Tag: DW_TAG_subprogram
Children: DW_CHILDREN_no
Attributes: []
- Code: 4
Tag: DW_TAG_subprogram
Children: DW_CHILDREN_no
Attributes: []
- Tag: DW_TAG_subprogram
Children: DW_CHILDREN_no
Attributes: []
- Tag: DW_TAG_subprogram
Children: DW_CHILDREN_no
Attributes: []