-
Notifications
You must be signed in to change notification settings - Fork 15.5k
[DWARF] Add support for DW_GNU_call_target_clobbered #172336
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Fixes assertion trip introduced in llvm#172167 See https://issues.chromium.org/issues/468825583#comment2
|
@llvm/pr-subscribers-debuginfo Author: Orlando Cazalet-Hyams (OCHyams) ChangesFixes assertion trip introduced in #172167 See https://issues.chromium.org/issues/468825583#comment2 Full diff: https://github.com/llvm/llvm-project/pull/172336.diff 2 Files Affected:
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
+...
|
jmorse
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
…d.mir Co-authored-by: Jeremy Morse <jeremy.morse@gmail.com>
|
Has the ability to push before pre-commit completes gone away? (I've enabled auto-merge so it lands once pre-commit completes) |
| @@ -0,0 +1,58 @@ | |||
| # RUN: llc %s -start-after=livedebugvalues -debugger-tune=gdb --filetype=obj -o - \ | |||
| # RUN: | llvm-dwarfdump - | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing a | FileCheck %s?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Whoopsy, thanks for that catch
|
Thanks for the quick fix! |
Fixes assertion trip introduced in #172167
See https://issues.chromium.org/issues/468825583#comment2