[llvm] [DebugInfo] Use human-friendly printing for DWARF column attributes (PR #71062)

J. Ryan Stinnett via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 2 11:31:42 PDT 2023


https://github.com/jryans updated https://github.com/llvm/llvm-project/pull/71062

>From 110d980104ea52e7849af1dae777880f8023537e Mon Sep 17 00:00:00 2001
From: "J. Ryan Stinnett" <jryans at gmail.com>
Date: Thu, 2 Nov 2023 13:06:08 +0000
Subject: [PATCH 1/3] [DebugInfo] Use human-friendly printing for DWARF column
 attributes

This prints DWARF attributes that describes source columns as base 10 integers
for easier comprehension (via `llvm-dwarfdump` and similar tools) and matches
the behaviour for source line attributes.
---
 llvm/lib/DebugInfo/DWARF/DWARFDie.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp b/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
index 7af7ed8be7b4aff..fcedef8db82185c 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
@@ -147,7 +147,8 @@ static void dumpAttribute(raw_ostream &OS, const DWARFDie &Die,
 
   if (!Name.empty())
     WithColor(OS, Color) << Name;
-  else if (Attr == DW_AT_decl_line || Attr == DW_AT_call_line) {
+  else if (Attr == DW_AT_decl_line || Attr == DW_AT_decl_column ||
+           Attr == DW_AT_call_line || Attr == DW_AT_call_column) {
     if (std::optional<uint64_t> Val = FormValue.getAsUnsignedConstant())
       OS << *Val;
     else

>From ed66b5445383e165eb56c518c97f0b5a96cc8bec Mon Sep 17 00:00:00 2001
From: "J. Ryan Stinnett" <jryans at gmail.com>
Date: Thu, 2 Nov 2023 17:55:44 +0000
Subject: [PATCH 2/3] Update existing tests

---
 bolt/test/AArch64/go_dwarf.test                    |  4 ++--
 .../X86/dwarf5-df-inlined-subroutine-range-0.test  |  2 +-
 llvm/test/DebugInfo/X86/fission-inline.ll          |  2 +-
 .../X86/locstats-for-absctract-origin-vars.yaml    | 14 +++++++-------
 4 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/bolt/test/AArch64/go_dwarf.test b/bolt/test/AArch64/go_dwarf.test
index 7d2765a1c7fb150..f5c4a4a9f478641 100644
--- a/bolt/test/AArch64/go_dwarf.test
+++ b/bolt/test/AArch64/go_dwarf.test
@@ -23,7 +23,7 @@ CHECKORIG-NEXT:        DW_AT_external  (true)
 CHECKORIG-NEXT:        DW_AT_name      ("main")
 CHECKORIG-NEXT:        DW_AT_decl_file
 CHECKORIG-NEXT:        DW_AT_decl_line (1)
-CHECKORIG-NEXT:        DW_AT_decl_column       (0x05)
+CHECKORIG-NEXT:        DW_AT_decl_column       (5)
 CHECKORIG-NEXT:        DW_AT_type
 CHECKORIG-NEXT:        DW_AT_low_pc    (0x0000000000000660)
 CHECKORIG-NEXT:        DW_AT_high_pc   (0x0000000000000684)
@@ -47,7 +47,7 @@ CHECK-NEXT:        DW_AT_external  (true)
 CHECK-NEXT:        DW_AT_name      ("main")
 CHECK-NEXT:        DW_AT_decl_file
 CHECK-NEXT:        DW_AT_decl_line (1)
-CHECK-NEXT:        DW_AT_decl_column       (0x05)
+CHECK-NEXT:        DW_AT_decl_column       (5)
 CHECK-NEXT:        DW_AT_type
 CHECK-NEXT:        DW_AT_low_pc    (0x0000000000000660)
 CHECK-NEXT:        DW_AT_high_pc (0x0000000000000024)
diff --git a/bolt/test/X86/dwarf5-df-inlined-subroutine-range-0.test b/bolt/test/X86/dwarf5-df-inlined-subroutine-range-0.test
index c0e5cb3339ead84..4ecc66f52ff84bc 100644
--- a/bolt/test/X86/dwarf5-df-inlined-subroutine-range-0.test
+++ b/bolt/test/X86/dwarf5-df-inlined-subroutine-range-0.test
@@ -27,6 +27,6 @@
 ; BOLT-MAIN: DW_AT_abstract_origin [DW_FORM_ref4]  (cu + 0x005a => {0x0000005a} "_Z11doStuffSamei")
 ; BOLT-MAIN: DW_AT_call_file [DW_FORM_data1] (0x00)
 ; BOLT-MAIN: DW_AT_call_line [DW_FORM_data1] (16)
-; BOLT-MAIN: DW_AT_call_column [DW_FORM_data1] (0x1d)
+; BOLT-MAIN: DW_AT_call_column [DW_FORM_data1] (29)
 ; BOLT-MAIN: DW_AT_low_pc [DW_FORM_addrx]  (indexed (00000002) address = <unresolved>)
 ; BOLT-MAIN: DW_AT_high_pc [DW_FORM_data4] (0x00000042)
diff --git a/llvm/test/DebugInfo/X86/fission-inline.ll b/llvm/test/DebugInfo/X86/fission-inline.ll
index a8c74ce7198502a..d038b07a58e4ae6 100644
--- a/llvm/test/DebugInfo/X86/fission-inline.ll
+++ b/llvm/test/DebugInfo/X86/fission-inline.ll
@@ -70,7 +70,7 @@
 ; CHECK-NOT: {{DW_AT|DW_TAG|NULL}}
 ; CHECK:     DW_AT_call_file
 ; CHECK-NEXT:     DW_AT_call_line {{.*}} (18)
-; CHECK-NEXT:     DW_AT_call_column {{.*}} (0x05)
+; CHECK-NEXT:     DW_AT_call_column {{.*}} (5)
 ; CHECK:     DW_AT_call_file
 ; CHECK-NEXT:     DW_AT_call_line {{.*}} (21)
 ; CHECK-NOT: DW_
diff --git a/llvm/test/tools/llvm-dwarfdump/X86/locstats-for-absctract-origin-vars.yaml b/llvm/test/tools/llvm-dwarfdump/X86/locstats-for-absctract-origin-vars.yaml
index 458b556856eba0c..f607813c32598ec 100644
--- a/llvm/test/tools/llvm-dwarfdump/X86/locstats-for-absctract-origin-vars.yaml
+++ b/llvm/test/tools/llvm-dwarfdump/X86/locstats-for-absctract-origin-vars.yaml
@@ -32,7 +32,7 @@
 ##       DW_AT_high_pc (0x0000000000000007)
 ##       DW_AT_call_file       (0x01)
 ##       DW_AT_call_line       (1)
-##       DW_AT_call_column     (0x01)
+##       DW_AT_call_column     (1)
 ##       DW_TAG_formal_parameter
 ##         DW_AT_abstract_origin       (0x00000018)
 ##       DW_TAG_variable
@@ -44,7 +44,7 @@
 ##       DW_AT_high_pc       (0x0000000000000007)
 ##       DW_AT_call_file     (0x01)
 ##       DW_AT_call_line     (1)
-##       DW_AT_call_column   (0x01)
+##       DW_AT_call_column   (1)
 ##       DW_TAG_formal_parameter
 ##         DW_AT_abstract_origin     (0x00000018)
 ##         DW_AT_location    ()
@@ -57,28 +57,28 @@
 ##       DW_AT_high_pc       (0x0000000000000007)
 ##       DW_AT_call_file     (0x01)
 ##       DW_AT_call_line     (1)
-##       DW_AT_call_column   (0x01)
+##       DW_AT_call_column   (1)
 ##     DW_TAG_inlined_subroutine
 ##       DW_AT_abstract_origin (0x00000014)
 ##       DW_AT_low_pc  (0x0000000000000002)
 ##       DW_AT_high_pc (0x000000000000000a)
 ##       DW_AT_call_file       (0x01)
 ##       DW_AT_call_line       (3)
-##       DW_AT_call_column     (0x03)
+##       DW_AT_call_column     (3)
 ##     DW_TAG_inlined_subroutine
 ##       DW_AT_abstract_origin (0x000000e5)
 ##       DW_AT_low_pc  (0x0000000000000006)
 ##       DW_AT_high_pc (0x0000000000000010)
 ##       DW_AT_call_file       (0x01)
 ##       DW_AT_call_line       (3)
-##       DW_AT_call_column     (0x03)
+##       DW_AT_call_column     (3)
 ##     DW_TAG_inlined_subroutine
 ##       DW_AT_abstract_origin (0x000000e5)
 ##       DW_AT_low_pc  (0x0000000000000006)
 ##       DW_AT_high_pc (0x0000000000000010)
 ##       DW_AT_call_file       (0x01)
 ##       DW_AT_call_line       (3)
-##       DW_AT_call_column     (0x03)
+##       DW_AT_call_column     (3)
 ##       DW_TAG_formal_parameter
 ##         DW_AT_abstract_origin       (0x000000e9)
 ##         DW_AT_location      ()
@@ -88,7 +88,7 @@
 ##       DW_AT_high_pc (0x000000000000001a)
 ##       DW_AT_call_file       (0x01)
 ##       DW_AT_call_line       (3)
-##       DW_AT_call_column     (0x03)
+##       DW_AT_call_column     (3)
 ##       DW_TAG_formal_parameter
 ##         DW_AT_abstract_origin       (0x000000f4)
 ##       DW_TAG_lexical_block

>From eacc351a05dc519ddde59ff8afa02a478207410d Mon Sep 17 00:00:00 2001
From: "J. Ryan Stinnett" <jryans at gmail.com>
Date: Thu, 2 Nov 2023 18:31:23 +0000
Subject: [PATCH 3/3] Add new source coordinates test

---
 .../X86/source-coordinates.yaml               | 100 ++++++++++++++++++
 1 file changed, 100 insertions(+)
 create mode 100644 llvm/test/tools/llvm-dwarfdump/X86/source-coordinates.yaml

diff --git a/llvm/test/tools/llvm-dwarfdump/X86/source-coordinates.yaml b/llvm/test/tools/llvm-dwarfdump/X86/source-coordinates.yaml
new file mode 100644
index 000000000000000..abb998f4885c249
--- /dev/null
+++ b/llvm/test/tools/llvm-dwarfdump/X86/source-coordinates.yaml
@@ -0,0 +1,100 @@
+# RUN: yaml2obj %s | llvm-dwarfdump - | FileCheck %s
+
+# CHECK:      0x0000001e:   DW_TAG_subprogram
+# CHECK-NEXT:                 DW_AT_name	("main")
+# CHECK-NEXT:                 DW_AT_low_pc	(0x0000000000001000)
+# CHECK-NEXT:                 DW_AT_high_pc	(0x0000000000002000)
+# CHECK-NEXT:                 DW_AT_decl_line	(5)
+# CHECK-NEXT:                 DW_AT_decl_column	(2)
+# CHECK:      0x00000035:     DW_TAG_inlined_subroutine
+# CHECK-NEXT:                   DW_AT_name	("inline1")
+# CHECK-NEXT:                   DW_AT_low_pc	(0x0000000000001100)
+# CHECK-NEXT:                   DW_AT_high_pc	(0x0000000000001200)
+# CHECK-NEXT:                   DW_AT_call_line	(10)
+# CHECK-NEXT:                   DW_AT_call_column	(6)
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_EXEC
+  Machine: EM_X86_64
+DWARF:
+  debug_str:
+    - ''
+    - '/tmp/main.c'
+    - main
+    - inline1
+  debug_abbrev:
+    - Table:
+        - Code:            0x0000000000000001
+          Tag:             DW_TAG_compile_unit
+          Children:        DW_CHILDREN_yes
+          Attributes:
+            - Attribute:       DW_AT_name
+              Form:            DW_FORM_strp
+            - Attribute:       DW_AT_language
+              Form:            DW_FORM_data2
+            - Attribute:       DW_AT_low_pc
+              Form:            DW_FORM_addr
+            - Attribute:       DW_AT_stmt_list
+              Form:            DW_FORM_sec_offset
+        - 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
+            - Attribute:       DW_AT_decl_line
+              Form:            DW_FORM_data1
+            - Attribute:       DW_AT_decl_column
+              Form:            DW_FORM_data1
+        - Code:            0x0000000000000003
+          Tag:             DW_TAG_inlined_subroutine
+          Children:        DW_CHILDREN_no
+          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_data4
+            - Attribute:       DW_AT_call_line
+              Form:            DW_FORM_data1
+            - Attribute:       DW_AT_call_column
+              Form:            DW_FORM_data1
+  debug_info:
+    - Length:          0x0000000000000046
+      Version:         4
+      AbbrOffset:      0x0000000000000000
+      AddrSize:        8
+      Entries:
+        - AbbrCode:        0x00000001
+          Values:
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000002
+            - Value:           0x0000000000000000
+            - Value:           0x0000000000000000
+        - AbbrCode:        0x00000002
+          Values:
+            - Value:           0x000000000000000D
+            - Value:           0x0000000000001000
+            - Value:           0x0000000000002000
+            - Value:           0x0000000000000005
+            - Value:           0x0000000000000002
+        - AbbrCode:        0x00000003
+          Values:
+            - Value:           0x0000000000000012
+            - Value:           0x0000000000001100
+            - Value:           0x0000000000000100
+            - Value:           0x000000000000000A
+            - Value:           0x0000000000000006
+        - AbbrCode:        0x00000000
+          Values:          []
+        - AbbrCode:        0x00000000
+          Values:          []
+...



More information about the llvm-commits mailing list