llvm-project/llvm/lib/IR
Vedant Kumar 5931b4e5b5 [DebugInfo] Add support for DWARF5 call site-related attributes
DWARF v5 introduces DW_AT_call_all_calls, a subprogram attribute which
indicates that all calls (both regular and tail) within the subprogram
have call site entries. The information within these call site entries
can be used by a debugger to populate backtraces with synthetic tail
call frames.

Tail calling frames go missing in backtraces because the frame of the
caller is reused by the callee. Call site entries allow a debugger to
reconstruct a sequence of (tail) calls which led from one function to
another. This improves backtrace quality. There are limitations: tail
recursion isn't handled, variables within synthetic frames may not
survive to be inspected, etc. This approach is not novel, see:

  https://gcc.gnu.org/wiki/summit2010?action=AttachFile&do=get&target=jelinek.pdf

This patch adds an IR-level flag (DIFlagAllCallsDescribed) which lowers
to DW_AT_call_all_calls. It adds the minimal amount of DWARF generation
support needed to emit standards-compliant call site entries. For easier
deployment, when the debugger tuning is LLDB, the DWARF requirement is
adjusted to v4.

Testing: Apart from check-{llvm, clang}, I built a stage2 RelWithDebInfo
clang binary. Its dSYM passed verification and grew by 1.4% compared to
the baseline. 151,879 call site entries were added.

rdar://42001377

Differential Revision: https://reviews.llvm.org/D49887

llvm-svn: 343883
2018-10-05 20:37:17 +00:00
..
AsmWriter.cpp Emit template type and value parameter DIEs for template variables. 2018-10-03 18:44:53 +00:00
AttributeImpl.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
Attributes.cpp llvm::sort(C.begin(), C.end(), ...) -> llvm::sort(C, ...) 2018-09-27 02:13:45 +00:00
AttributesCompatFunc.td
AutoUpgrade.cpp [X86] Modify the the rdtscp intrinsic to return values instead of taking a pointer argument 2018-09-07 19:14:15 +00:00
BasicBlock.cpp [IR] Sink `isExceptional` predicate to `Instruction`, rename it to 2018-08-26 08:56:42 +00:00
CMakeLists.txt [New PM] Introducing PassInstrumentation framework 2018-09-20 17:08:45 +00:00
Comdat.cpp [LLVM-C] [bindings/go] Add C and Golang bindings for COMDAT 2018-03-14 18:33:53 +00:00
ConstantFold.cpp [ConstantFolding] improve folding of binops with vector undef operand 2018-08-20 18:19:02 +00:00
ConstantFold.h
ConstantRange.cpp [IR] Strip trailing whitespace. NFC 2018-07-03 12:39:52 +00:00
Constants.cpp [Constants] extend getBinOpIdentity(); NFC 2018-07-06 15:18:58 +00:00
ConstantsContext.h Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
Core.cpp [LLVM-C] Add an accessor for the "value type" of a global 2018-09-28 20:54:29 +00:00
DIBuilder.cpp Emit template type and value parameter DIEs for template variables. 2018-10-03 18:44:53 +00:00
DataLayout.cpp [NFC] Make getPreferredAlignment honor section markings. 2018-08-29 23:46:26 +00:00
DebugInfo.cpp Emit template type and value parameter DIEs for template variables. 2018-10-03 18:44:53 +00:00
DebugInfoMetadata.cpp Emit template type and value parameter DIEs for template variables. 2018-10-03 18:44:53 +00:00
DebugLoc.cpp [IR] Add a boolean field in DILocation to know if a line must covered or not 2018-09-20 08:53:06 +00:00
DiagnosticHandler.cpp Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
DiagnosticInfo.cpp This change add's optimization remark in LoopVersioning LICM pass. 2018-01-23 09:47:28 +00:00
DiagnosticPrinter.cpp
DomTreeUpdater.cpp [Dominators] Refine the logic of recalculate() in the DomTreeUpdater 2018-08-03 06:51:35 +00:00
Dominators.cpp [DomTree] Add constructor to create a new DT based on current DT/CFG and a set of Updates. 2018-08-16 21:54:33 +00:00
Function.cpp Allow creating llvm::Function in non-zero address spaces 2018-08-23 09:25:17 +00:00
GVMaterializer.cpp
Globals.cpp Allow creating llvm::Function in non-zero address spaces 2018-08-23 09:25:17 +00:00
IRBuilder.cpp [SLC] Add an alignment to CreateGlobalString 2018-09-06 08:42:17 +00:00
IRPrintingPasses.cpp IR: Skip -print-*-all after -print-* 2018-07-11 23:30:25 +00:00
InlineAsm.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
Instruction.cpp [IR] Replace `isa<TerminatorInst>` with `isTerminator()`. 2018-08-26 09:51:22 +00:00
Instructions.cpp IR: Move AtomicRMW string names into class 2018-10-02 23:44:11 +00:00
IntrinsicInst.cpp [DebugInfo] Refactor DbgInfoIntrinsic class hierarchy. 2018-08-06 03:59:47 +00:00
LLVMBuild.txt
LLVMContext.cpp allow custom OptBisect classes set to LLVMContext 2018-04-05 10:29:37 +00:00
LLVMContextImpl.cpp [LLVMContext] Detecting leaked instructions with metadata 2018-06-29 20:13:13 +00:00
LLVMContextImpl.h Emit template type and value parameter DIEs for template variables. 2018-10-03 18:44:53 +00:00
LegacyPassManager.cpp [New PM][PassInstrumentation] IR printing support for New Pass Manager 2018-09-24 16:08:15 +00:00
MDBuilder.cpp [Metadata] Replace a SmallVector with an array; NFC 2018-08-15 22:15:35 +00:00
Mangler.cpp [IR] Avoid the need to prefix MS C++ symbols with '\01' 2018-03-16 20:13:32 +00:00
Metadata.cpp llvm::sort(C.begin(), C.end(), ...) -> llvm::sort(C, ...) 2018-09-27 02:13:45 +00:00
MetadataImpl.h
Module.cpp Pass code-model through Module IR to LTO which will use it. 2018-09-21 18:41:31 +00:00
ModuleSummaryIndex.cpp [ThinLTO] Add GraphTraits for FunctionSummaries 2018-02-19 15:14:50 +00:00
Operator.cpp Adding a width of the GEP index to the Data Layout. 2018-02-14 06:58:08 +00:00
OptBisect.cpp [NFC] OptPassGate extracted from OptBisect 2018-03-27 16:57:20 +00:00
Pass.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
PassInstrumentation.cpp [New PM] Introducing PassInstrumentation framework 2018-09-20 17:08:45 +00:00
PassManager.cpp
PassRegistry.cpp [Pass] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-09-06 23:05:38 +00:00
PassTimingInfo.cpp [PassTimingInfo] cleanup on TimingData's Timer handling 2018-10-04 12:49:57 +00:00
ProfileSummary.cpp [ProfileSummary] Move a vector we're about to destroy anyway; NFC 2018-04-12 20:54:05 +00:00
SafepointIRVerifier.cpp Add maybe-unused attribute to a variable. 2018-08-01 23:46:48 +00:00
Statepoint.cpp
SymbolTableListTraitsImpl.h Remove trailing space 2018-07-30 19:41:25 +00:00
Type.cpp [IR] Strip trailing whitespace. NFC 2018-07-03 12:39:52 +00:00
TypeFinder.cpp Use ranged for loops in TypeFinder.cpp, NFC 2018-02-08 18:02:27 +00:00
Use.cpp
User.cpp Remove redundant includes from lib/IR. 2017-12-13 21:30:52 +00:00
Value.cpp [NFC] Remove magic bool param in RAUW 2018-08-09 18:28:54 +00:00
ValueSymbolTable.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
Verifier.cpp [DebugInfo] Add support for DWARF5 call site-related attributes 2018-10-05 20:37:17 +00:00