Skip to content

Commit

Permalink
DWARF: Simplify the way the return PC is attached to call site tags, NFC
Browse files Browse the repository at this point in the history
This cleanup was suggested by Djordje in D72489.

(cherry picked from commit 4346450)
  • Loading branch information
vedantk committed Jan 15, 2020
1 parent 51bd4c2 commit a77d3e0
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit a77d3e0

Please sign in to comment.