Skip to content

Commit

Permalink
[DWARFYAML] Add support for emitting value forms of strx, addrx, etc.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
higuoxing committed Jul 14, 2020
1 parent f0e9b76 commit b539f01
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 66 deletions.
6 changes: 6 additions & 0 deletions llvm/lib/ObjectYAML/DWARFVisitor.cpp
Expand Up @@ -116,6 +116,12 @@ template <typename T> Error DWARFYAML::VisitorImpl<T>::traverseDebugInfo() {
""));
break;
}
case dwarf::DW_FORM_strx:
case dwarf::DW_FORM_addrx:
case dwarf::DW_FORM_rnglistx:
case dwarf::DW_FORM_loclistx:
onValue((uint64_t)FormVal->Value, /*LEB=*/true);
break;
case dwarf::DW_FORM_data1:
case dwarf::DW_FORM_ref1:
case dwarf::DW_FORM_flag:
Expand Down
144 changes: 78 additions & 66 deletions llvm/test/tools/yaml2obj/ELF/DWARF/debug-info.yaml
Expand Up @@ -6,7 +6,7 @@

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

# SHDR: Index: [[INDEX]]
# SHDR-NEXT: Name: .debug_info ([[NAME]])
Expand Down Expand Up @@ -67,39 +67,45 @@
## ^-------- Form: DW_FORM_sec_offset (4-byte)
## ^- Form: DW_FORM_exprloc size (ULEB128) 0x02
## ^-^- Form: DW_FORM_exprloc body (2-byte)
# DWARF32-LE-CONTENT-NEXT: 0060: 78563412 78563412 78563412 F0DEBC9A
## ^------- Form: DW_FORM_ref_sup4 (4-byte)
## ^------- Form: DW_FORM_strp_sup (4-byte)
## ^------- Form: DW_FORM_line_strp (4-byte)
## ^------- Form: DW_FORM_ref_sig8 (8-byte)
# DWARF32-LE-CONTENT-NEXT: 0070: 78563412 F0DEBC9A 78563412 12341278
# DWARF32-LE-CONTENT-NEXT: 0060: B424B424 78563412 78563412 78563412
## ^--- Form: DW_FORM_strx (ULEB128)
## ^--- Form: DW_FORM_addrx (ULEB128)
## ^------- Form: DW_FORM_ref_sup4 (4-byte)
## ^------- Form: DW_FORM_strp_sup (4-byte)
## ^------- Form: DW_FORM_line_strp (4-byte)
# DWARF32-LE-CONTENT-NEXT: 0070: F0DEBC9A 78563412 B424B424 F0DEBC9A
## ^---------------- Form: DW_FORM_ref_sig8 (8-byte)
## ^--- Form: DW_FORM_loclistx (ULEB128)
## ^--- Form: DW_FORM_rnglistx (ULEB128)
## ^------- Form: DW_FORM_ref_sup8 (8-byte)
# DWARF32-LE-CONTENT-NEXT: 0080: 78563412 12341278 56341212 34127856
## --------
## ^---------------- Form: DW_FORM_ref_sup8 (8-byte)
## ^- Form: DW_FORM_strx1 (1-byte)
## ^--- Form: DW_FORM_strx2 (2-byte)
## ^- Form: DW_FORM_strx4 (4-byte)
# DWARF32-LE-CONTENT-NEXT: 0080: 56341212 34127856 34123412 00000500
## ^- Form: DW_FORM_strx1 (1-byte)
## ^--- Form: DW_FORM_strx2 (2-byte)
## ^-------- Form: DW_FORM_strx4 (4-byte)
## ^- Form: DW_FORM_addrx1 (1-byte)
## ^--- Form: DW_FORM_addrx2 (1-byte)
## ^--- Form: DW_FORM_addrx4 (4-byte)
# DWARF32-LE-CONTENT-NEXT: 0090: 34123412 00000500 01043412 00000078
## ----
## ^-------- unit_length (4-byte)
## ^--- version (2-byte)
## ^- unit_type (1-byte)
## ^- address_size (1-byte)
## ^-------- debug_abbrev_offset (4-byte)
## ^- abbrev code (ULEB128) 0x00
## ^- unit_length (4-byte)
# DWARF32-LE-CONTENT-NEXT: 00A0: 56000004 00785600 00040178 56341202
## ------
## ^- Form: DW_FORM_addrx1 (1-byte)
## ^--- From: DW_FORM_addrx2 (2-byte)
## ^-------- Form: DW_FORM_addrx4 (4-byte)
## ^-------- unit_length (4-byte)
## ^--- version (2-byte)
# DWARF32-LE-CONTENT-NEXT: 0090: 01043412 00000078 56000004 00785600
## ^- unit_type (1-byte) DW_UT_compile
## ^- address_size (4-byte)
## ^-------- debug_abbrev_offset (4-byte)
## ^-------- unit_length (4-byte)
## ^--- version (2-byte)
## ^- abbreviation code (ULEB128)
## ^----- debug_abbrev_offset (4-byte)
# DWARF32-LE-CONTENT-NEXT: 00A0: 00040178 56341202 001234
## ^---- version (2-byte)
## ^-------- debug_abbrev_offset (4-byte)
## ^- address_size (1-byte)
## ^- abbrev code (ULEB128) 0x01
## ^-------- Form: DW_FORM_addr
## ^- Form: DW_FORM_block2 size (2-byte)
# DWARF32-LE-CONTENT-NEXT: 00B0: 001234
## --
## ^- address_size (1-byte)
## ^- abbreviation code (ULEB128) 0x01
## ^-------- Form: DW_FORM_addr (4-byte)
## ^---- Form: DW_FORM_block2 size (2-byte)
## ^-^- Form: DW_FORM_block2 body (2-byte)
## ^-^- Form: DW_FORM_block2 body (2-byte)
# DWARF32-LE-CONTENT-NEXT: )

--- !ELF
Expand Down Expand Up @@ -242,16 +248,16 @@ DWARF:
- BlockData: ## DW_FORM_exprloc
- 0x12
- 0x34
- Value: 0x1234 ## DW_FORM_strx (unimplemented)
- Value: 0x1234 ## DW_FORM_addrx (unimplemented)
- Value: 0x1234 ## DW_FORM_strx
- Value: 0x1234 ## DW_FORM_addrx
- Value: 0x12345678 ## DW_FORM_ref_sup4
- Value: 0x12345678 ## DW_FORM_strp_sup
- Value: 0x1234 ## DW_FORM_data16 (unimplemented)
- Value: 0x12345678 ## DW_FORM_line_strp
- Value: 0x123456789abcdef0 ## DW_FORM_ref_sig8
- Value: 0x1234 ## DW_FORM_implicit_const (unimplemented)
- Value: 0x1234 ## DW_FORM_loclistx (unimplemented)
- Value: 0x1234 ## DW_FORM_rnglistx (unimplemented)
- Value: 0x1234 ## DW_FORM_loclistx
- Value: 0x1234 ## DW_FORM_rnglistx
- Value: 0x123456789abcdef0 ## DW_FORM_ref_sup8
- Value: 0x12 ## DW_FORM_strx1
- Value: 0x1234 ## DW_FORM_strx2
Expand Down Expand Up @@ -287,7 +293,7 @@ DWARF:

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

# DWARF32-BE-CONTENT-NEXT: SectionData (
# DWARF32-BE-CONTENT-NEXT: 0000: 00001234 00050204 00001234 01123456
Expand Down Expand Up @@ -336,39 +342,45 @@ DWARF:
## ^-------- Form: DW_FORM_sec_offset (4-byte)
## ^- Form: DW_FORM_exprloc size (ULEB128) 0x02
## ^-^- Form: DW_FORM_exprloc body (2-byte)
# DWARF32-BE-CONTENT-NEXT: 0060: 12345678 12345678 12345678 12345678
## ^------- Form: DW_FORM_ref_sup4 (4-byte)
## ^------- Form: DW_FORM_strp_sup (4-byte)
## ^------- Form: DW_FORM_line_strp (4-byte)
## ^------- Form: DW_FORM_ref_sig8 (8-byte)
# DWARF32-BE-CONTENT-NEXT: 0070: 9ABCDEF0 12345678 9ABCDEF0 12123412
# DWARF32-BE-CONTENT-NEXT: 0060: B424B424 12345678 12345678 12345678
## ^--- Form: DW_FORM_strx (ULEB128)
## ^--- Form: DW_FORM_addrx (ULEB128)
## ^------- Form: DW_FORM_ref_sup4 (4-byte)
## ^------- Form: DW_FORM_strp_sup (4-byte)
## ^------- Form: DW_FORM_line_strp (4-byte)
# DWARF32-BE-CONTENT-NEXT: 0070: 12345678 9ABCDEF0 B424B424 12345678
## ^---------------- Form: DW_FORM_ref_sig8 (8-byte)
## ^--- Form: DW_FORM_loclistx (ULEB128)
## ^--- Form: DW_FORM_rnglistx (ULEB128)
## ^------- Form: DW_FORM_ref_sup8 (8-byte)
# DWARF32-BE-CONTENT-NEXT: 0080: 9ABCDEF0 12123412 34567812 12341234
## --------
## ^---------------- Form: DW_FORM_ref_sup8 (8-byte)
## ^- Form: DW_FORM_strx1 (1-byte)
## ^--- Form: DW_FORM_strx2 (2-byte)
## ^- Form: DW_FORM_strx4 (4-byte)
# DWARF32-BE-CONTENT-NEXT: 0080: 34567812 12341234 56780000 12340005
## ^- Form: DW_FORM_strx1 (1-byte)
## ^--- Form: DW_FORM_strx2 (2-byte)
## ^-------- Form: DW_FORM_strx4 (4-byte)
## ^- Form: DW_FORM_addrx1 (1-byte)
## ^--- Form: DW_FORM_addrx2 (1-byte)
## ^--- Form: DW_FORM_addrx4 (4-byte)
# DWARF32-BE-CONTENT-NEXT: 0090: 56780000 12340005 01040000 12340000
## ----
## ^-------- unit_length (4-byte)
## ^--- version (2-byte)
## ^- unit_type (1-byte)
## ^- address_size (1-byte)
## ^-------- debug_abbrev_offset (4-byte)
## ^- abbrev code (ULEB128) 0x00
## ^- unit_length (4-byte)
# DWARF32-BE-CONTENT-NEXT: 00A0: 00567800 04000056 78040112 34567800
## ------
## ^- Form: DW_FORM_addrx1 (1-byte)
## ^--- From: DW_FORM_addrx2 (2-byte)
## ^-------- Form: DW_FORM_addrx4 (4-byte)
## ^-------- unit_length (4-byte)
## ^--- version (2-byte)
# DWARF32-BE-CONTENT-NEXT: 0090: 01040000 12340000 00567800 04000056
## ^- unit_type (1-byte) DW_UT_compile
## ^- address_size (4-byte)
## ^-------- debug_abbrev_offset (4-byte)
## ^-------- unit_length (4-byte)
## ^--- version (2-byte)
## ^- abbreviation code (ULEB128)
## ^----- debug_abbrev_offset (4-byte)
# DWARF32-BE-CONTENT-NEXT: 00A0: 78040112 34567800 021234
## ^---- version (2-byte)
## ^-------- debug_abbrev_offset (4-byte)
## ^- address_size (1-byte)
## ^- abbrev code (ULEB128) 0x01
## ^-------- Form: DW_FORM_addr
## ^- Form: DW_FORM_block2 size (2-byte)
# DWARF32-BE-CONTENT-NEXT: 00B0: 021234
## --
## ^- address_size (1-byte)
## ^- abbreviation code (ULEB128) 0x01
## ^-------- Form: DW_FORM_addr (4-byte)
## ^---- Form: DW_FORM_block2 size (2-byte)
## ^-^- Form: DW_FORM_block2 body (2-byte)
## ^-^- Form: DW_FORM_block2 body (2-byte)
# DWARF32-BE-CONTENT-NEXT: )

## b) Generate the .debug_info section from raw section content.
Expand Down

0 comments on commit b539f01

Please sign in to comment.