LLVM
8.0.1
|
Base class for debug information backends. More...
#include "llvm/CodeGen/DebugHandlerBase.h"
Public Member Functions | |
void | beginInstruction (const MachineInstr *MI) override |
Process beginning of an instruction. More... | |
void | endInstruction () override |
Process end of an instruction. More... | |
void | beginFunction (const MachineFunction *MF) override |
Gather pre-function debug information. More... | |
void | endFunction (const MachineFunction *MF) override |
Gather post-function debug information. More... | |
MCSymbol * | getLabelBeforeInsn (const MachineInstr *MI) |
Return Label preceding the instruction. More... | |
MCSymbol * | getLabelAfterInsn (const MachineInstr *MI) |
Return Label immediately following the instruction. More... | |
const MCExpr * | getFunctionLocalOffsetAfterInsn (const MachineInstr *MI) |
Return the function-local offset of an instruction. More... | |
Public Member Functions inherited from llvm::AsmPrinterHandler | |
virtual | ~AsmPrinterHandler () |
Pin vtable to this file. More... | |
virtual void | setSymbolSize (const MCSymbol *Sym, uint64_t Size)=0 |
For symbols that have a size designated (e.g. More... | |
virtual void | endModule ()=0 |
Emit all sections that should come after the content. More... | |
virtual void | markFunctionEnd () |
virtual void | beginFragment (const MachineBasicBlock *MBB, ExceptionSymbolProvider ESP) |
virtual void | endFragment () |
virtual void | beginFunclet (const MachineBasicBlock &MBB, MCSymbol *Sym=nullptr) |
Emit target-specific EH funclet machinery. More... | |
virtual void | endFunclet () |
Static Public Member Functions | |
static uint64_t | getBaseTypeSize (const DITypeRef TyRef) |
If this type is derived from a base type then return base type size. More... | |
Protected Member Functions | |
DebugHandlerBase (AsmPrinter *A) | |
void | identifyScopeMarkers () |
Indentify instructions that are marking the beginning of or ending of a scope. More... | |
void | requestLabelBeforeInsn (const MachineInstr *MI) |
Ensure that a label will be emitted before MI. More... | |
void | requestLabelAfterInsn (const MachineInstr *MI) |
Ensure that a label will be emitted after MI. More... | |
virtual void | beginFunctionImpl (const MachineFunction *MF)=0 |
virtual void | endFunctionImpl (const MachineFunction *MF)=0 |
virtual void | skippedNonDebugFunction () |
Protected Attributes | |
AsmPrinter * | Asm |
Target of debug info emission. More... | |
MachineModuleInfo * | MMI |
Collected machine module information. More... | |
DebugLoc | PrevInstLoc |
Previous instruction's location information. More... | |
MCSymbol * | PrevLabel = nullptr |
const MachineBasicBlock * | PrevInstBB = nullptr |
DebugLoc | PrologEndLoc |
This location indicates end of function prologue and beginning of function body. More... | |
const MachineInstr * | CurMI = nullptr |
If nonnull, stores the current machine instruction we're processing. More... | |
LexicalScopes | LScopes |
DbgValueHistoryMap | DbgValues |
History of DBG_VALUE and clobber instructions for each user variable. More... | |
DbgLabelInstrMap | DbgLabels |
Mapping of inlined labels and DBG_LABEL machine instruction. More... | |
DenseMap< const MachineInstr *, MCSymbol * > | LabelsBeforeInsn |
Maps instruction with label emitted before instruction. More... | |
DenseMap< const MachineInstr *, MCSymbol * > | LabelsAfterInsn |
Maps instruction with label emitted after instruction. More... | |
Base class for debug information backends.
Common functionality related to tracking which variables and scopes are alive at a given PC live here.
Definition at line 54 of file DebugHandlerBase.h.
|
protected |
Definition at line 88 of file DebugHandlerBase.cpp.
|
overridevirtual |
Gather pre-function debug information.
Every beginFunction(MF) call should be followed by an endFunction(MF) call.
Implements llvm::AsmPrinterHandler.
Definition at line 187 of file DebugHandlerBase.cpp.
References llvm::all_of(), Asm, assert(), beginFunctionImpl(), llvm::calculateDbgEntityHistory(), DbgLabels, DbgValues, llvm::DbgValueHistoryMap::dump(), llvm::DbgValueHistoryMap::empty(), llvm::DbgLabelInstrMap::empty(), llvm::LexicalScopes::empty(), llvm::DIExpression::fragmentsOverlap(), llvm::getDISubprogram(), llvm::MachineFunction::getFunction(), llvm::AsmPrinter::getFunctionBegin(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::DILocalVariable::getScope(), llvm::MachineFunction::getSubtarget(), hasDebugInfo(), I, identifyScopeMarkers(), llvm::LexicalScopes::initialize(), llvm::DILocalVariable::isParameter(), LabelsBeforeInsn, LLVM_DEBUG, LScopes, llvm::AsmPrinter::MF, MI, MMI, PrevInstBB, PrevInstLoc, PrevLabel, requestLabelAfterInsn(), requestLabelBeforeInsn(), and skippedNonDebugFunction().
|
protectedpure virtual |
Implemented in llvm::DwarfDebug, llvm::CodeViewDebug, and llvm::BTFDebug.
Referenced by beginFunction().
|
overridevirtual |
Process beginning of an instruction.
Implements llvm::AsmPrinterHandler.
Reimplemented in llvm::DwarfDebug, llvm::CodeViewDebug, and llvm::BTFDebug.
Definition at line 259 of file DebugHandlerBase.cpp.
References Asm, assert(), llvm::MCContext::createTempSymbol(), CurMI, llvm::MachineModuleInfo::getContext(), llvm::MachineModuleInfo::hasDebugInfo(), I, LabelsBeforeInsn, MI, MMI, llvm::AsmPrinter::OutStreamer, and PrevLabel.
Referenced by llvm::BTFDebug::beginInstruction(), llvm::CodeViewDebug::beginInstruction(), and llvm::DwarfDebug::beginInstruction().
|
overridevirtual |
Gather post-function debug information.
Please note that some AsmPrinter implementations may not call beginFunction at all.
Implements llvm::AsmPrinterHandler.
Definition at line 317 of file DebugHandlerBase.cpp.
References llvm::DbgValueHistoryMap::clear(), llvm::DbgLabelInstrMap::clear(), DbgLabels, DbgValues, endFunctionImpl(), hasDebugInfo(), LabelsAfterInsn, LabelsBeforeInsn, and MMI.
|
protectedpure virtual |
Implemented in llvm::DwarfDebug, llvm::CodeViewDebug, and llvm::BTFDebug.
Referenced by endFunction().
|
overridevirtual |
Process end of an instruction.
Implements llvm::AsmPrinterHandler.
Definition at line 285 of file DebugHandlerBase.cpp.
References Asm, assert(), llvm::MCContext::createTempSymbol(), CurMI, llvm::MachineModuleInfo::getContext(), llvm::MachineInstr::getParent(), llvm::MachineModuleInfo::hasDebugInfo(), I, llvm::MachineInstr::isMetaInstruction(), LabelsAfterInsn, MMI, llvm::AsmPrinter::OutStreamer, PrevInstBB, and PrevLabel.
If this type is derived from a base type then return base type size.
Definition at line 144 of file DebugHandlerBase.cpp.
References assert(), llvm::dyn_cast(), llvm::DIType::getSizeInBits(), llvm::DINode::getTag(), llvm::TypedDINodeRef< T >::resolve(), llvm::MDNode::resolve(), and llvm::Tag.
Referenced by llvm::DwarfUnit::constructContainingTypeDIEs(), and shouldEmitUdt().
const MCExpr * DebugHandlerBase::getFunctionLocalOffsetAfterInsn | ( | const MachineInstr * | MI | ) |
Return the function-local offset of an instruction.
A label for the instruction MI
should exist (getLabelAfterInsn).
Definition at line 130 of file DebugHandlerBase.cpp.
References Asm, and llvm::AsmPrinter::OutContext.
Referenced by llvm::DwarfDebug::shareAcrossDWOCUs().
MCSymbol * DebugHandlerBase::getLabelAfterInsn | ( | const MachineInstr * | MI | ) |
Return Label immediately following the instruction.
Definition at line 124 of file DebugHandlerBase.cpp.
References LabelsAfterInsn.
Referenced by llvm::DwarfCompileUnit::attachRangesOrLowHighPC(), copyBytesForDefRange(), and llvm::DwarfDebug::isLexicalScopeDIENull().
MCSymbol * DebugHandlerBase::getLabelBeforeInsn | ( | const MachineInstr * | MI | ) |
Return Label preceding the instruction.
Definition at line 117 of file DebugHandlerBase.cpp.
References assert(), and LabelsBeforeInsn.
Referenced by llvm::DwarfCompileUnit::attachRangesOrLowHighPC(), copyBytesForDefRange(), needsReferenceType(), and validThroughout().
|
protected |
Indentify instructions that are marking the beginning of or ending of a scope.
Definition at line 94 of file DebugHandlerBase.cpp.
References llvm::SmallVectorImpl< T >::append(), assert(), llvm::SmallVectorTemplateCommon< T >::begin(), llvm::SmallVectorBase::empty(), llvm::SmallVectorTemplateCommon< T >::end(), llvm::LexicalScope::getChildren(), llvm::LexicalScopes::getCurrentFunctionScope(), llvm::LexicalScope::getRanges(), llvm::LexicalScope::isAbstractScope(), LScopes, llvm::SmallVectorImpl< T >::pop_back_val(), llvm::SmallVectorTemplateBase< T >::push_back(), requestLabelAfterInsn(), and requestLabelBeforeInsn().
Referenced by beginFunction().
|
inlineprotected |
Ensure that a label will be emitted after MI.
Definition at line 106 of file DebugHandlerBase.h.
References llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::insert().
Referenced by beginFunction(), llvm::DwarfDebug::beginInstruction(), and identifyScopeMarkers().
|
inlineprotected |
Ensure that a label will be emitted before MI.
Definition at line 101 of file DebugHandlerBase.h.
References llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::insert().
Referenced by beginFunction(), and identifyScopeMarkers().
|
inlineprotectedvirtual |
Reimplemented in llvm::DwarfDebug.
Definition at line 112 of file DebugHandlerBase.h.
References MI.
Referenced by beginFunction().
|
protected |
Target of debug info emission.
Definition at line 59 of file DebugHandlerBase.h.
Referenced by llvm::DwarfDebug::addDwarfTypeUnitType(), beginFunction(), llvm::BTFDebug::beginFunctionImpl(), llvm::CodeViewDebug::beginFunctionImpl(), llvm::DwarfDebug::beginFunctionImpl(), beginInstruction(), llvm::BTFDebug::beginInstruction(), llvm::CodeViewDebug::beginInstruction(), llvm::DwarfDebug::beginInstruction(), llvm::DwarfDebug::beginModule(), llvm::BTFDebug::BTFDebug(), llvm::CodeViewDebug::CodeViewDebug(), computeIndexValue(), dwarfCCToCodeView(), llvm::DwarfDebug::DwarfDebug(), llvm::DwarfDebug::emitDebugLocEntryLocation(), emitDebugRangesImpl(), emitLoclistsTableHeader(), emitNullTerminatedSymbolName(), llvm::CodeViewDebug::endFunctionImpl(), llvm::DwarfDebug::endFunctionImpl(), endInstruction(), llvm::CodeViewDebug::endModule(), llvm::DwarfDebug::getDwarfVersion(), getFunctionLocalOffsetAfterInsn(), needsReferenceType(), llvm::DwarfDebug::shareAcrossDWOCUs(), and validThroughout().
|
protected |
If nonnull, stores the current machine instruction we're processing.
Definition at line 77 of file DebugHandlerBase.h.
Referenced by beginInstruction(), llvm::DwarfDebug::beginInstruction(), endInstruction(), and llvm::DwarfDebug::endModule().
|
protected |
Mapping of inlined labels and DBG_LABEL machine instruction.
Definition at line 86 of file DebugHandlerBase.h.
Referenced by beginFunction(), endFunction(), and validThroughout().
|
protected |
History of DBG_VALUE and clobber instructions for each user variable.
Variables are listed in order of appearance.
Definition at line 83 of file DebugHandlerBase.h.
Referenced by beginFunction(), endFunction(), and validThroughout().
|
protected |
Maps instruction with label emitted after instruction.
Definition at line 94 of file DebugHandlerBase.h.
Referenced by endFunction(), endInstruction(), and getLabelAfterInsn().
|
protected |
Maps instruction with label emitted before instruction.
FIXME: Make this private from DwarfDebug, we have the necessary accessors for it.
Definition at line 91 of file DebugHandlerBase.h.
Referenced by beginFunction(), beginInstruction(), endFunction(), and getLabelBeforeInsn().
|
protected |
Definition at line 79 of file DebugHandlerBase.h.
Referenced by beginFunction(), llvm::DwarfDebug::beginFunctionImpl(), llvm::CodeViewDebug::endFunctionImpl(), llvm::DwarfDebug::endFunctionImpl(), identifyScopeMarkers(), and validThroughout().
|
protected |
Collected machine module information.
Definition at line 62 of file DebugHandlerBase.h.
Referenced by beginFunction(), beginInstruction(), llvm::CodeViewDebug::beginInstruction(), llvm::DwarfDebug::beginModule(), llvm::CodeViewDebug::CodeViewDebug(), llvm::DwarfDebug::DwarfDebug(), endFunction(), endInstruction(), llvm::BTFDebug::endModule(), llvm::CodeViewDebug::endModule(), llvm::DwarfDebug::endModule(), getStringIdTypeIdx(), getSymbolName(), and parseVersion().
|
protected |
Definition at line 70 of file DebugHandlerBase.h.
Referenced by beginFunction(), llvm::CodeViewDebug::beginInstruction(), llvm::DwarfDebug::beginInstruction(), and endInstruction().
|
protected |
Previous instruction's location information.
This is used to determine label location to indicate scope boundaries in debug info. We track the previous instruction's source location (if not line 0), whether it was a label, and its parent BB.
Definition at line 68 of file DebugHandlerBase.h.
Referenced by addLocIfNotPresent(), beginFunction(), llvm::BTFDebug::beginInstruction(), and llvm::DwarfDebug::beginInstruction().
|
protected |
Definition at line 69 of file DebugHandlerBase.h.
Referenced by beginFunction(), beginInstruction(), llvm::DwarfDebug::beginInstruction(), llvm::DwarfDebug::endFunctionImpl(), and endInstruction().
|
protected |
This location indicates end of function prologue and beginning of function body.
Definition at line 74 of file DebugHandlerBase.h.
Referenced by llvm::CodeViewDebug::beginFunctionImpl(), llvm::DwarfDebug::beginFunctionImpl(), and llvm::DwarfDebug::beginInstruction().