[llvm] [DWARF] Add support for DW_GNU_call_target_clobbered (PR #172336)

Orlando Cazalet-Hyams via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 15 09:00:16 PST 2025


https://github.com/OCHyams created https://github.com/llvm/llvm-project/pull/172336

Fixes assertion trip introduced in #172167

See https://issues.chromium.org/issues/468825583#comment2

>From 330760dc1db0336941ab29842c43807e0290e492 Mon Sep 17 00:00:00 2001
From: Orlando Cazalet-Hyams <orlando.hyams at sony.com>
Date: Mon, 15 Dec 2025 16:57:37 +0000
Subject: [PATCH] [DWARF] Add support for DW_GNU_call_target_clobbered

Fixes assertion trip introduced in #172167

See https://issues.chromium.org/issues/468825583#comment2
---
 .../CodeGen/AsmPrinter/DwarfCompileUnit.cpp   |  2 +
 .../X86/dwarf-gnu-call-target-clobbered.mir   | 58 +++++++++++++++++++
 2 files changed, 60 insertions(+)
 create mode 100644 llvm/test/DebugInfo/X86/dwarf-gnu-call-target-clobbered.mir

diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
index d19de7f8000ec..12bbe7f4c3849 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
@@ -1293,6 +1293,8 @@ DwarfCompileUnit::getDwarf5OrGNUAttr(dwarf::Attribute Attr) const {
     return dwarf::DW_AT_GNU_all_call_sites;
   case dwarf::DW_AT_call_target:
     return dwarf::DW_AT_GNU_call_site_target;
+  case dwarf::DW_AT_call_target_clobbered:
+    return dwarf::DW_AT_GNU_call_site_target_clobbered;
   case dwarf::DW_AT_call_origin:
     return dwarf::DW_AT_abstract_origin;
   case dwarf::DW_AT_call_return_pc:
diff --git a/llvm/test/DebugInfo/X86/dwarf-gnu-call-target-clobbered.mir b/llvm/test/DebugInfo/X86/dwarf-gnu-call-target-clobbered.mir
new file mode 100644
index 0000000000000..c03829a9490bd
--- /dev/null
+++ b/llvm/test/DebugInfo/X86/dwarf-gnu-call-target-clobbered.mir
@@ -0,0 +1,58 @@
+# RUN: llc %s -start-after=livedebugvalues -debugger-tune=gdb --filetype=obj -o - \
+# RUN: | llvm-dwarfdump -
+
+# Generated from IR crash reproducer with `llc -stop-after=livedebugvalues -simplify-mir`.
+# Check the GNU equivalent of DW_AT_call_target_clobbered is emitted without
+# hitting assertions (DWARF version 4, -debuger-tune=gdb).
+
+# CHECK: DW_GNU_AT_call_target_clobbered
+
+--- |
+  target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
+  target triple = "x86_64-unknown-linux-gnu"
+
+  define void @foo(ptr %p) !dbg !5 {
+  entry:
+    %call = tail call ptr %p(i64 0)
+    ret void
+  }
+
+  !llvm.dbg.cu = !{!0}
+  !llvm.module.flags = !{!3, !4}
+
+  !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !2, splitDebugInlining: false)
+  !1 = !DIFile(filename: "test.cpp", directory: ".")
+  !2 = !{}
+  !3 = !{i32 2, !"Debug Info Version", i32 3}
+  !4 = !{i32 7, !"Dwarf Version", i32 4}
+  !5 = distinct !DISubprogram(name: "foo", linkageName: "foo", scope: !1, file: !1, line: 479, type: !6, scopeLine: 479, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !2, keyInstructions: true)
+  !6 = distinct !DISubroutineType(types: !7)
+  !7 = !{null}
+...
+---
+name:            foo
+alignment:       16
+tracksRegLiveness: true
+noPhis:          true
+isSSA:           false
+noVRegs:         true
+hasFakeUses:     false
+debugInstrRef:   true
+tracksDebugUserValues: true
+liveins:
+  - { reg: '$rdi' }
+frameInfo:
+  maxAlignment:    1
+  maxCallFrameSize: 0
+  hasTailCall:     true
+  isCalleeSavedInfoValid: true
+machineFunctionInfo:
+  amxProgModel:    None
+body:             |
+  bb.0.entry:
+    liveins: $rdi
+
+    $rax = MOV64rr $rdi
+    dead $edi = XOR32rr undef $edi, undef $edi, implicit-def dead $eflags, implicit-def $rdi
+    TAILJMPr64 killed renamable $rax, csr_64, implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rdi
+...



More information about the llvm-commits mailing list