[llvm] [llvm-dwarfdump] pretty-print DW_AT_call_origin reference (PR #71693)

via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 8 07:38:01 PST 2023


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-debuginfo

Author: Orlando Cazalet-Hyams (OCHyams)

<details>
<summary>Changes</summary>



---
Full diff: https://github.com/llvm/llvm-project/pull/71693.diff


2 Files Affected:

- (modified) llvm/lib/DebugInfo/DWARF/DWARFDie.cpp (+2-1) 
- (added) llvm/test/tools/llvm-dwarfdump/X86/prettyprint_call_site.yaml (+87) 


``````````diff
diff --git a/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp b/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
index fcedef8db82185c..0f01933002c06db 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
@@ -190,7 +190,8 @@ static void dumpAttribute(raw_ostream &OS, const DWARFDie &Die,
   // We have dumped the attribute raw value. For some attributes
   // having both the raw value and the pretty-printed value is
   // interesting. These attributes are handled below.
-  if (Attr == DW_AT_specification || Attr == DW_AT_abstract_origin) {
+  if (Attr == DW_AT_specification || Attr == DW_AT_abstract_origin ||
+      Attr == DW_AT_call_origin) {
     if (const char *Name =
             Die.getAttributeValueAsReferencedDie(FormValue).getName(
                 DINameKind::LinkageName))
diff --git a/llvm/test/tools/llvm-dwarfdump/X86/prettyprint_call_site.yaml b/llvm/test/tools/llvm-dwarfdump/X86/prettyprint_call_site.yaml
new file mode 100644
index 000000000000000..2e44fcbcb131318
--- /dev/null
+++ b/llvm/test/tools/llvm-dwarfdump/X86/prettyprint_call_site.yaml
@@ -0,0 +1,87 @@
+# RUN: yaml2obj %s | llvm-dwarfdump - | FileCheck %s
+
+## Check the name (preferring linkage name) of the DW_AT_call_origin DIE
+## reference is printed after the address.
+
+# CHECK: DW_TAG_call_site
+# CHECK-NEXT: DW_AT_call_origin (0x{{[0-9a-f]+}} "_Z2f2v")
+
+# CHECK: DW_TAG_call_site
+# CHECK-NEXT: DW_AT_call_origin (0x{{[0-9a-f]+}} "f1")
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_EXEC
+  Machine: EM_X86_64
+DWARF:
+  debug_str:
+    - "_Z2f2v"
+    - "f2"
+    - "f1"
+
+  debug_abbrev:
+    - Table:
+      - Code:            0x0000000000000001
+        Tag:             DW_TAG_compile_unit
+        Children:        DW_CHILDREN_yes
+        Attributes:
+          - Attribute:       DW_AT_low_pc
+            Form:            DW_FORM_addr
+      - Code:            0x0000000000000002
+        Tag:             DW_TAG_subprogram
+        Children:        DW_CHILDREN_yes
+        Attributes:
+          - Attribute:       DW_AT_name
+            Form:            DW_FORM_strp
+          - Attribute:       DW_AT_low_pc
+            Form:            DW_FORM_addr
+          - Attribute:       DW_AT_high_pc
+            Form:            DW_FORM_addr
+      - Code:            0x0000000000000003
+        Tag:             DW_TAG_call_site
+        Children:        DW_CHILDREN_no
+        Attributes:
+          - Attribute:   DW_AT_call_origin
+            Form:        DW_FORM_ref4
+      - Code:            0x0000000000000004
+        Tag:             DW_TAG_subprogram
+        Children:        DW_CHILDREN_no
+        Attributes:
+          - Attribute:       DW_AT_linkage_name
+            Form:            DW_FORM_strp
+          - Attribute:       DW_AT_name
+            Form:            DW_FORM_strp
+          - Attribute:       DW_AT_declaration
+            Form:            DW_FORM_flag_present
+  debug_info:
+    - Length:          0x3b
+      Version:         5
+      UnitType:        0x01 # DW_TU_compile
+      AbbrOffset:      0x0000000000000000
+      AddrSize:        8
+      Entries:
+        - AbbrCode:    0x00000001          # start compile unit
+          Values:                          #
+            - Value:   0x0000000000000000  #
+        - AbbrCode:    0x00000002          ## start f1
+          Values:                          ##
+            - Value:   0x000000000000000a  ##
+            - Value:   0x0000000000001000  ##
+            - Value:   0x0000000000002000  ##
+        - AbbrCode:    0x00000003          ### call site
+          Values:                          ###
+            - Value:   0x0000000000000035  ### (f2)
+        - AbbrCode:    0x00000003          ### call site
+          Values:                          ###
+            - Value:   0x0000000000000015  ### (f1)
+        - AbbrCode:    0x00000000          ## end f1
+          Values:      []                  #
+        - AbbrCode:    0x00000004          ## f2
+          Values:                          ##
+            - Value:   0x0000000000000000  ##
+            - Value:   0x0000000000000007  ##
+        - AbbrCode:    0x00000000          # end compile unit
+          Values:      []
+...

``````````

</details>


https://github.com/llvm/llvm-project/pull/71693


More information about the llvm-commits mailing list