From b539f01221486bbdba0de436ea4e235ccd3f195e Mon Sep 17 00:00:00 2001 From: Xing GUO Date: Tue, 14 Jul 2020 19:09:58 +0800 Subject: [PATCH] [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 --- llvm/lib/ObjectYAML/DWARFVisitor.cpp | 6 + .../tools/yaml2obj/ELF/DWARF/debug-info.yaml | 144 ++++++++++-------- 2 files changed, 84 insertions(+), 66 deletions(-) diff --git a/llvm/lib/ObjectYAML/DWARFVisitor.cpp b/llvm/lib/ObjectYAML/DWARFVisitor.cpp index f478a1b84397..a2dd37b5fe32 100644 --- a/llvm/lib/ObjectYAML/DWARFVisitor.cpp +++ b/llvm/lib/ObjectYAML/DWARFVisitor.cpp @@ -116,6 +116,12 @@ template Error DWARFYAML::VisitorImpl::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: diff --git a/llvm/test/tools/yaml2obj/ELF/DWARF/debug-info.yaml b/llvm/test/tools/yaml2obj/ELF/DWARF/debug-info.yaml index 896a9b472887..177de3ee816e 100644 --- a/llvm/test/tools/yaml2obj/ELF/DWARF/debug-info.yaml +++ b/llvm/test/tools/yaml2obj/ELF/DWARF/debug-info.yaml @@ -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]]) @@ -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 @@ -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 @@ -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 @@ -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.