[PATCH] D113406: [llvm-dwarfdump] dump link to the immediate parent.

Alexey Lapshin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 9 00:42:33 PST 2021


avl updated this revision to Diff 385722.
avl added a comment.

addressed comments(renamed test, added child)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D113406/new/

https://reviews.llvm.org/D113406

Files:
  llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
  llvm/test/tools/llvm-dwarfdump/X86/tag-parent-offset.yaml
  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/tag-parent-offset.yaml
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-dwarfdump/X86/tag-parent-offset.yaml
@@ -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: 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
Index: llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
===================================================================
--- llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
+++ llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
@@ -1080,9 +1080,13 @@
       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.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D113406.385722.patch
Type: text/x-patch
Size: 3195 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211109/3c2545ac/attachment.bin>


More information about the llvm-commits mailing list