From a77d3e0b1fb1441ac36ef994c7b42b442c5c01d4 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Wed, 15 Jan 2020 14:15:45 -0800 Subject: [PATCH] DWARF: Simplify the way the return PC is attached to call site tags, NFC This cleanup was suggested by Djordje in D72489. (cherry picked from commit 43464509fcedef667aee17b74c19cc08b65aa0ae) --- llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp index 8f42c91d3dd5c..1fbffc1939eb5 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp @@ -934,6 +934,7 @@ DwarfCompileUnit::getDwarf5OrGNUAttr(dwarf::Attribute Attr) const { case dwarf::DW_AT_call_origin: return dwarf::DW_AT_abstract_origin; case dwarf::DW_AT_call_pc: + case dwarf::DW_AT_call_return_pc: return dwarf::DW_AT_low_pc; case dwarf::DW_AT_call_value: return dwarf::DW_AT_GNU_call_site_value; @@ -982,12 +983,13 @@ DIE &DwarfCompileUnit::constructCallSiteEntryDIE(DIE &ScopeDIE, // Attach the return PC to allow the debugger to disambiguate call paths // from one function to another. - if (DD->getDwarfVersion() == 4 && DD->tuneForGDB()) { - assert(PCAddr && "Missing PC information for a call"); - addLabelAddress(CallSiteDIE, dwarf::DW_AT_low_pc, PCAddr); - } else if (!IsTail || DD->tuneForGDB()) { + // + // The return PC is only really needed when the call /isn't/ a tail call, but + // for some reason GDB always expects it. + if (!IsTail || DD->tuneForGDB()) { assert(PCAddr && "Missing return PC information for a call"); - addLabelAddress(CallSiteDIE, dwarf::DW_AT_call_return_pc, PCAddr); + addLabelAddress(CallSiteDIE, + getDwarf5OrGNUAttr(dwarf::DW_AT_call_return_pc), PCAddr); } return CallSiteDIE;