forked from OSchip/llvm-project
[llvm-dwarfdump] dump link to the immediate parent.
It is often useful to know which die is the parent of the current die. This patch adds information about parent offset into the dump: 0x0000000b: DW_TAG_compile_unit DW_AT_producer ("by_hand") 0x00000014: DW_TAG_base_type (0x0000000b) <<<<<<<<<<<<<< DW_AT_name ("int") Now it is easy to see which die is the parent of the current die. This patch makes that behaviour to be default. We can make it to be opt-in if neccessary. This functionality differs from already existed "--show-parents" in that sence that parent information is shown for all dies and only link to the immediate parent is shown. Differential Revision: https://reviews.llvm.org/D113406
This commit is contained in:
parent
cb728cb8a9
commit
c8ae08987d
|
@ -1080,9 +1080,13 @@ void DWARFDie::dump(raw_ostream &OS, unsigned Indent,
|
|||
if (AbbrevDecl) {
|
||||
WithColor(OS, HighlightColor::Tag).get().indent(Indent)
|
||||
<< formatv("{0}", getTag());
|
||||
if (DumpOpts.Verbose)
|
||||
if (DumpOpts.Verbose) {
|
||||
OS << format(" [%u] %c", abbrCode,
|
||||
AbbrevDecl->hasChildren() ? '*' : ' ');
|
||||
if (Optional<uint32_t> ParentIdx = Die->getParentIdx())
|
||||
OS << format(" (0x%8.8" PRIx64 ")",
|
||||
U->getDIEAtIndex(*ParentIdx).getOffset());
|
||||
}
|
||||
OS << '\n';
|
||||
|
||||
// Dump all data in the DIE for the attributes.
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
# RUN: yaml2obj %s -o %t.o
|
||||
# RUN: llvm-dwarfdump -v -a %t.o | FileCheck %s
|
||||
|
||||
## This test checks that llvm-dwarfdump prints link
|
||||
## to the parent of the current die:
|
||||
|
||||
## DW_TAG_base_type [3] (0x00000014) <<<<<
|
||||
|
||||
# CHECK: .o: file format
|
||||
# CHECK: 0x0000000b: DW_TAG_compile_unit
|
||||
# CHECK: 0x00000014: DW_TAG_namespace [2] * (0x0000000b)
|
||||
# CHECK: DW_TAG_base_type [3] (0x00000014)
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2LSB
|
||||
Type: ET_EXEC
|
||||
Machine: EM_X86_64
|
||||
DWARF:
|
||||
debug_abbrev:
|
||||
- Table:
|
||||
- Tag: DW_TAG_compile_unit
|
||||
Children: DW_CHILDREN_yes
|
||||
Attributes:
|
||||
- Attribute: DW_AT_producer
|
||||
Form: DW_FORM_string
|
||||
- Tag: DW_TAG_namespace
|
||||
Children: DW_CHILDREN_yes
|
||||
Attributes:
|
||||
- Attribute: DW_AT_name
|
||||
Form: DW_FORM_string
|
||||
- Tag: DW_TAG_base_type
|
||||
Children: DW_CHILDREN_no
|
||||
Attributes:
|
||||
- Attribute: DW_AT_name
|
||||
Form: DW_FORM_string
|
||||
debug_info:
|
||||
- Version: 4
|
||||
Entries:
|
||||
- AbbrCode: 1
|
||||
Values:
|
||||
- CStr: by_hand
|
||||
- AbbrCode: 2
|
||||
Values:
|
||||
- CStr: name
|
||||
- AbbrCode: 3
|
||||
Values:
|
||||
- CStr: int
|
|
@ -7,9 +7,9 @@
|
|||
# CHECK:.debug_info contents:
|
||||
# CHECK:0x0000000b: DW_TAG_compile_unit [1] *
|
||||
# CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{.*}}] = "brief.c")
|
||||
# CHECK:0x0000002a: DW_TAG_subprogram [2]
|
||||
# CHECK:0x0000002a: DW_TAG_subprogram [2] (0x0000000b)
|
||||
# CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{.*}}] = "main")
|
||||
# CHECK:0x00000043: DW_TAG_base_type [3]
|
||||
# CHECK:0x00000043: DW_TAG_base_type [3] (0x0000000b)
|
||||
# CHECK-NEXT: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{.*}}] = "int")
|
||||
|
||||
# CHECK:.debug_line contents:
|
||||
|
|
Loading…
Reference in New Issue