[PATCH] D113406: [llvm-dwarfdump] dump link to the immediate parent.
Alexey Lapshin via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Nov 8 08:18:55 PST 2021
avl created this revision.
avl added reviewers: JDevlieghere, aprantl, dblaikie, jhenderson.
Herald added subscribers: cmtice, hiraditya.
avl requested review of this revision.
Herald added subscribers: llvm-commits, MaskRay.
Herald added a project: LLVM.
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.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D113406
Files:
llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
llvm/test/tools/llvm-dwarfdump/X86/parent_link.s
llvm/test/tools/llvm-dwarfdump/X86/verbose.test
Index: llvm/test/tools/llvm-dwarfdump/X86/verbose.test
===================================================================
--- llvm/test/tools/llvm-dwarfdump/X86/verbose.test
+++ llvm/test/tools/llvm-dwarfdump/X86/verbose.test
@@ -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:
Index: llvm/test/tools/llvm-dwarfdump/X86/parent_link.s
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-dwarfdump/X86/parent_link.s
@@ -0,0 +1,40 @@
+# RUN: yaml2obj %s -o %t.o
+# RUN: llvm-dwarfdump -a %t.o | FileCheck %s
+
+# This test checks that llvm-dwarfdump prints link
+# to the parent of the current die:
+
+# DW_TAG_base_type (0x0000000b) <<<<<
+
+# CHECK: .o: file format
+# CHECK: 0x0000000b: DW_TAG_compile_unit
+# CHECK: DW_TAG_base_type (0x0000000b)
+
+--- !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_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: int
Index: llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
===================================================================
--- llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
+++ llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
@@ -1083,6 +1083,9 @@
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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D113406.385506.patch
Type: text/x-patch
Size: 2699 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211108/0ebf3310/attachment.bin>
More information about the llvm-commits
mailing list