Skip to content

Commit b539f01

Browse files
committed
[DWARFYAML] Add support for emitting value forms of strx, addrx, etc.
This patch adds support for emitting value forms of DW_FORM_strx, DW_FORM_addrx, DW_FORM_loclistx and DW_FORM_rnglistx. Reviewed By: jhenderson Differential Revision: https://reviews.llvm.org/D83749
1 parent f0e9b76 commit b539f01

File tree

2 files changed

+84
-66
lines changed

2 files changed

+84
-66
lines changed

llvm/lib/ObjectYAML/DWARFVisitor.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,12 @@ template <typename T> Error DWARFYAML::VisitorImpl<T>::traverseDebugInfo() {
116116
""));
117117
break;
118118
}
119+
case dwarf::DW_FORM_strx:
120+
case dwarf::DW_FORM_addrx:
121+
case dwarf::DW_FORM_rnglistx:
122+
case dwarf::DW_FORM_loclistx:
123+
onValue((uint64_t)FormVal->Value, /*LEB=*/true);
124+
break;
119125
case dwarf::DW_FORM_data1:
120126
case dwarf::DW_FORM_ref1:
121127
case dwarf::DW_FORM_flag:

llvm/test/tools/yaml2obj/ELF/DWARF/debug-info.yaml

Lines changed: 78 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
# RUN: yaml2obj --docnum=1 -DENDIAN=ELFDATA2LSB %s -o %t1.le.o
88
# RUN: llvm-readobj --sections --section-data %t1.le.o | \
9-
# RUN: FileCheck -DINDEX=2 -DNAME=15 -DOFFSET=0x9B -DSIZE=171 -DADDRALIGN=1 %s --check-prefixes=SHDR,DWARF32-LE-CONTENT
9+
# RUN: FileCheck -DINDEX=2 -DNAME=15 -DOFFSET=0x9B -DSIZE=179 -DADDRALIGN=1 %s --check-prefixes=SHDR,DWARF32-LE-CONTENT
1010

1111
# SHDR: Index: [[INDEX]]
1212
# SHDR-NEXT: Name: .debug_info ([[NAME]])
@@ -67,39 +67,45 @@
6767
## ^-------- Form: DW_FORM_sec_offset (4-byte)
6868
## ^- Form: DW_FORM_exprloc size (ULEB128) 0x02
6969
## ^-^- Form: DW_FORM_exprloc body (2-byte)
70-
# DWARF32-LE-CONTENT-NEXT: 0060: 78563412 78563412 78563412 F0DEBC9A
71-
## ^------- Form: DW_FORM_ref_sup4 (4-byte)
72-
## ^------- Form: DW_FORM_strp_sup (4-byte)
73-
## ^------- Form: DW_FORM_line_strp (4-byte)
74-
## ^------- Form: DW_FORM_ref_sig8 (8-byte)
75-
# DWARF32-LE-CONTENT-NEXT: 0070: 78563412 F0DEBC9A 78563412 12341278
70+
# DWARF32-LE-CONTENT-NEXT: 0060: B424B424 78563412 78563412 78563412
71+
## ^--- Form: DW_FORM_strx (ULEB128)
72+
## ^--- Form: DW_FORM_addrx (ULEB128)
73+
## ^------- Form: DW_FORM_ref_sup4 (4-byte)
74+
## ^------- Form: DW_FORM_strp_sup (4-byte)
75+
## ^------- Form: DW_FORM_line_strp (4-byte)
76+
# DWARF32-LE-CONTENT-NEXT: 0070: F0DEBC9A 78563412 B424B424 F0DEBC9A
77+
## ^---------------- Form: DW_FORM_ref_sig8 (8-byte)
78+
## ^--- Form: DW_FORM_loclistx (ULEB128)
79+
## ^--- Form: DW_FORM_rnglistx (ULEB128)
80+
## ^------- Form: DW_FORM_ref_sup8 (8-byte)
81+
# DWARF32-LE-CONTENT-NEXT: 0080: 78563412 12341278 56341212 34127856
7682
## --------
77-
## ^---------------- Form: DW_FORM_ref_sup8 (8-byte)
78-
## ^- Form: DW_FORM_strx1 (1-byte)
79-
## ^--- Form: DW_FORM_strx2 (2-byte)
80-
## ^- Form: DW_FORM_strx4 (4-byte)
81-
# DWARF32-LE-CONTENT-NEXT: 0080: 56341212 34127856 34123412 00000500
83+
## ^- Form: DW_FORM_strx1 (1-byte)
84+
## ^--- Form: DW_FORM_strx2 (2-byte)
85+
## ^-------- Form: DW_FORM_strx4 (4-byte)
86+
## ^- Form: DW_FORM_addrx1 (1-byte)
87+
## ^--- Form: DW_FORM_addrx2 (1-byte)
88+
## ^--- Form: DW_FORM_addrx4 (4-byte)
89+
# DWARF32-LE-CONTENT-NEXT: 0090: 34123412 00000500 01043412 00000078
90+
## ----
91+
## ^-------- unit_length (4-byte)
92+
## ^--- version (2-byte)
93+
## ^- unit_type (1-byte)
94+
## ^- address_size (1-byte)
95+
## ^-------- debug_abbrev_offset (4-byte)
96+
## ^- abbrev code (ULEB128) 0x00
97+
## ^- unit_length (4-byte)
98+
# DWARF32-LE-CONTENT-NEXT: 00A0: 56000004 00785600 00040178 56341202
8299
## ------
83-
## ^- Form: DW_FORM_addrx1 (1-byte)
84-
## ^--- From: DW_FORM_addrx2 (2-byte)
85-
## ^-------- Form: DW_FORM_addrx4 (4-byte)
86-
## ^-------- unit_length (4-byte)
87-
## ^--- version (2-byte)
88-
# DWARF32-LE-CONTENT-NEXT: 0090: 01043412 00000078 56000004 00785600
89-
## ^- unit_type (1-byte) DW_UT_compile
90-
## ^- address_size (4-byte)
91-
## ^-------- debug_abbrev_offset (4-byte)
92-
## ^-------- unit_length (4-byte)
93-
## ^--- version (2-byte)
94-
## ^- abbreviation code (ULEB128)
95-
## ^----- debug_abbrev_offset (4-byte)
96-
# DWARF32-LE-CONTENT-NEXT: 00A0: 00040178 56341202 001234
100+
## ^---- version (2-byte)
101+
## ^-------- debug_abbrev_offset (4-byte)
102+
## ^- address_size (1-byte)
103+
## ^- abbrev code (ULEB128) 0x01
104+
## ^-------- Form: DW_FORM_addr
105+
## ^- Form: DW_FORM_block2 size (2-byte)
106+
# DWARF32-LE-CONTENT-NEXT: 00B0: 001234
97107
## --
98-
## ^- address_size (1-byte)
99-
## ^- abbreviation code (ULEB128) 0x01
100-
## ^-------- Form: DW_FORM_addr (4-byte)
101-
## ^---- Form: DW_FORM_block2 size (2-byte)
102-
## ^-^- Form: DW_FORM_block2 body (2-byte)
108+
## ^-^- Form: DW_FORM_block2 body (2-byte)
103109
# DWARF32-LE-CONTENT-NEXT: )
104110

105111
--- !ELF
@@ -242,16 +248,16 @@ DWARF:
242248
- BlockData: ## DW_FORM_exprloc
243249
- 0x12
244250
- 0x34
245-
- Value: 0x1234 ## DW_FORM_strx (unimplemented)
246-
- Value: 0x1234 ## DW_FORM_addrx (unimplemented)
251+
- Value: 0x1234 ## DW_FORM_strx
252+
- Value: 0x1234 ## DW_FORM_addrx
247253
- Value: 0x12345678 ## DW_FORM_ref_sup4
248254
- Value: 0x12345678 ## DW_FORM_strp_sup
249255
- Value: 0x1234 ## DW_FORM_data16 (unimplemented)
250256
- Value: 0x12345678 ## DW_FORM_line_strp
251257
- Value: 0x123456789abcdef0 ## DW_FORM_ref_sig8
252258
- Value: 0x1234 ## DW_FORM_implicit_const (unimplemented)
253-
- Value: 0x1234 ## DW_FORM_loclistx (unimplemented)
254-
- Value: 0x1234 ## DW_FORM_rnglistx (unimplemented)
259+
- Value: 0x1234 ## DW_FORM_loclistx
260+
- Value: 0x1234 ## DW_FORM_rnglistx
255261
- Value: 0x123456789abcdef0 ## DW_FORM_ref_sup8
256262
- Value: 0x12 ## DW_FORM_strx1
257263
- Value: 0x1234 ## DW_FORM_strx2
@@ -287,7 +293,7 @@ DWARF:
287293

288294
# RUN: yaml2obj --docnum=1 -DENDIAN=ELFDATA2MSB %s -o %t1.be.o
289295
# RUN: llvm-readobj --sections --section-data %t1.be.o | \
290-
# RUN: FileCheck -DINDEX=2 -DNAME=15 -DOFFSET=0x9B -DSIZE=171 -DADDRALIGN=1 %s --check-prefixes=SHDR,DWARF32-BE-CONTENT
296+
# RUN: FileCheck -DINDEX=2 -DNAME=15 -DOFFSET=0x9B -DSIZE=179 -DADDRALIGN=1 %s --check-prefixes=SHDR,DWARF32-BE-CONTENT
291297

292298
# DWARF32-BE-CONTENT-NEXT: SectionData (
293299
# DWARF32-BE-CONTENT-NEXT: 0000: 00001234 00050204 00001234 01123456
@@ -336,39 +342,45 @@ DWARF:
336342
## ^-------- Form: DW_FORM_sec_offset (4-byte)
337343
## ^- Form: DW_FORM_exprloc size (ULEB128) 0x02
338344
## ^-^- Form: DW_FORM_exprloc body (2-byte)
339-
# DWARF32-BE-CONTENT-NEXT: 0060: 12345678 12345678 12345678 12345678
340-
## ^------- Form: DW_FORM_ref_sup4 (4-byte)
341-
## ^------- Form: DW_FORM_strp_sup (4-byte)
342-
## ^------- Form: DW_FORM_line_strp (4-byte)
343-
## ^------- Form: DW_FORM_ref_sig8 (8-byte)
344-
# DWARF32-BE-CONTENT-NEXT: 0070: 9ABCDEF0 12345678 9ABCDEF0 12123412
345+
# DWARF32-BE-CONTENT-NEXT: 0060: B424B424 12345678 12345678 12345678
346+
## ^--- Form: DW_FORM_strx (ULEB128)
347+
## ^--- Form: DW_FORM_addrx (ULEB128)
348+
## ^------- Form: DW_FORM_ref_sup4 (4-byte)
349+
## ^------- Form: DW_FORM_strp_sup (4-byte)
350+
## ^------- Form: DW_FORM_line_strp (4-byte)
351+
# DWARF32-BE-CONTENT-NEXT: 0070: 12345678 9ABCDEF0 B424B424 12345678
352+
## ^---------------- Form: DW_FORM_ref_sig8 (8-byte)
353+
## ^--- Form: DW_FORM_loclistx (ULEB128)
354+
## ^--- Form: DW_FORM_rnglistx (ULEB128)
355+
## ^------- Form: DW_FORM_ref_sup8 (8-byte)
356+
# DWARF32-BE-CONTENT-NEXT: 0080: 9ABCDEF0 12123412 34567812 12341234
345357
## --------
346-
## ^---------------- Form: DW_FORM_ref_sup8 (8-byte)
347-
## ^- Form: DW_FORM_strx1 (1-byte)
348-
## ^--- Form: DW_FORM_strx2 (2-byte)
349-
## ^- Form: DW_FORM_strx4 (4-byte)
350-
# DWARF32-BE-CONTENT-NEXT: 0080: 34567812 12341234 56780000 12340005
358+
## ^- Form: DW_FORM_strx1 (1-byte)
359+
## ^--- Form: DW_FORM_strx2 (2-byte)
360+
## ^-------- Form: DW_FORM_strx4 (4-byte)
361+
## ^- Form: DW_FORM_addrx1 (1-byte)
362+
## ^--- Form: DW_FORM_addrx2 (1-byte)
363+
## ^--- Form: DW_FORM_addrx4 (4-byte)
364+
# DWARF32-BE-CONTENT-NEXT: 0090: 56780000 12340005 01040000 12340000
365+
## ----
366+
## ^-------- unit_length (4-byte)
367+
## ^--- version (2-byte)
368+
## ^- unit_type (1-byte)
369+
## ^- address_size (1-byte)
370+
## ^-------- debug_abbrev_offset (4-byte)
371+
## ^- abbrev code (ULEB128) 0x00
372+
## ^- unit_length (4-byte)
373+
# DWARF32-BE-CONTENT-NEXT: 00A0: 00567800 04000056 78040112 34567800
351374
## ------
352-
## ^- Form: DW_FORM_addrx1 (1-byte)
353-
## ^--- From: DW_FORM_addrx2 (2-byte)
354-
## ^-------- Form: DW_FORM_addrx4 (4-byte)
355-
## ^-------- unit_length (4-byte)
356-
## ^--- version (2-byte)
357-
# DWARF32-BE-CONTENT-NEXT: 0090: 01040000 12340000 00567800 04000056
358-
## ^- unit_type (1-byte) DW_UT_compile
359-
## ^- address_size (4-byte)
360-
## ^-------- debug_abbrev_offset (4-byte)
361-
## ^-------- unit_length (4-byte)
362-
## ^--- version (2-byte)
363-
## ^- abbreviation code (ULEB128)
364-
## ^----- debug_abbrev_offset (4-byte)
365-
# DWARF32-BE-CONTENT-NEXT: 00A0: 78040112 34567800 021234
375+
## ^---- version (2-byte)
376+
## ^-------- debug_abbrev_offset (4-byte)
377+
## ^- address_size (1-byte)
378+
## ^- abbrev code (ULEB128) 0x01
379+
## ^-------- Form: DW_FORM_addr
380+
## ^- Form: DW_FORM_block2 size (2-byte)
381+
# DWARF32-BE-CONTENT-NEXT: 00B0: 021234
366382
## --
367-
## ^- address_size (1-byte)
368-
## ^- abbreviation code (ULEB128) 0x01
369-
## ^-------- Form: DW_FORM_addr (4-byte)
370-
## ^---- Form: DW_FORM_block2 size (2-byte)
371-
## ^-^- Form: DW_FORM_block2 body (2-byte)
383+
## ^-^- Form: DW_FORM_block2 body (2-byte)
372384
# DWARF32-BE-CONTENT-NEXT: )
373385

374386
## b) Generate the .debug_info section from raw section content.

0 commit comments

Comments
 (0)