[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