LLVM  6.0.0svn
Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
llvm::DwarfDebug Class Reference

Collects and handles dwarf debug information. More...

#include "CodeGen/AsmPrinter/DwarfDebug.h"

Inheritance diagram for llvm::DwarfDebug:
Inheritance graph
[legend]
Collaboration diagram for llvm::DwarfDebug:
Collaboration graph
[legend]

Public Member Functions

 DwarfDebug (AsmPrinter *A, Module *M)
 
 ~DwarfDebug () override
 
void beginModule ()
 Emit all Dwarf sections that should come prior to the content. More...
 
void endModule () override
 Emit all Dwarf sections that should come after the content. More...
 
void beginInstruction (const MachineInstr *MI) override
 Process beginning of an instruction. More...
 
void addDwarfTypeUnitType (DwarfCompileUnit &CU, StringRef Identifier, DIE &Die, const DICompositeType *CTy)
 Add a DIE to the set of types that we're going to pull into type units. More...
 
void addArangeLabel (SymbolCU SCU)
 Add a label so that arange data can be generated for it. More...
 
void setSymbolSize (const MCSymbol *Sym, uint64_t Size) override
 For symbols that have a size designated (e.g. More...
 
bool useAllLinkageNames () const
 Returns whether we should emit all DW_AT_[MIPS_]linkage_name. More...
 
bool useGNUTLSOpcode () const
 Returns whether to use DW_OP_GNU_push_tls_address, instead of the standard DW_OP_form_tls_address opcode. More...
 
bool useDWARF2Bitfields () const
 Returns whether to use the DWARF2 format for bitfields instyead of the DWARF4 format. More...
 
bool useDwarfAccelTables () const
 Returns whether or not to emit tables that dwarf consumers can use to accelerate lookup. More...
 
bool useAppleExtensionAttributes () const
 
bool useSplitDwarf () const
 Returns whether or not to change the current debug info for the split dwarf proposal support. More...
 
bool shareAcrossDWOCUs () const
 
uint16_t getDwarfVersion () const
 Returns the Dwarf Version. More...
 
const DwarfCompileUnitgetPrevCU () const
 Returns the previous CU that was being updated. More...
 
void setPrevCU (const DwarfCompileUnit *PrevCU)
 
const DebugLocStreamgetDebugLocs () const
 Returns the entries for the .debug_loc section. More...
 
void emitDebugLocEntry (ByteStreamer &Streamer, const DebugLocStream::Entry &Entry)
 Emit an entry for the debug loc section. More...
 
void emitDebugLocEntryLocation (const DebugLocStream::Entry &Entry)
 Emit the location for a debug loc entry, including the size header. More...
 
template<typename T >
Tresolve (TypedDINodeRef< T > Ref) const
 Find the MDNode for the given reference. More...
 
void addSubprogramNames (const DISubprogram *SP, DIE &Die)
 
AddressPoolgetAddressPool ()
 
void addAccelName (StringRef Name, const DIE &Die)
 
void addAccelObjC (StringRef Name, const DIE &Die)
 
void addAccelNamespace (StringRef Name, const DIE &Die)
 
void addAccelType (StringRef Name, const DIE &Die, char Flags)
 
const MachineFunctiongetCurrentFunction () const
 
bool isLexicalScopeDIENull (LexicalScope *Scope)
 A helper function to check whether the DIE for a given Scope is going to be null. More...
 
bool tuneForGDB () const
 
bool tuneForLLDB () const
 
bool tuneForSCE () const
 
- Public Member Functions inherited from llvm::DebugHandlerBase
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...
 
MCSymbolgetLabelBeforeInsn (const MachineInstr *MI)
 Return Label preceding the instruction. More...
 
MCSymbolgetLabelAfterInsn (const MachineInstr *MI)
 Return Label immediately following the instruction. More...
 
- Public Member Functions inherited from llvm::AsmPrinterHandler
virtual ~AsmPrinterHandler ()
 Pin vtable to this file. 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 makeTypeSignature (StringRef Identifier)
 Perform an MD5 checksum of Identifier and return the lower 64 bits. More...
 
- Static Public Member Functions inherited from llvm::DebugHandlerBase
static int fragmentCmp (const DIExpression *P1, const DIExpression *P2)
 Determine the relative position of the fragments described by P1 and P2. More...
 
static bool fragmentsOverlap (const DIExpression *P1, const DIExpression *P2)
 Determine whether two variable fragments overlap. More...
 
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

void beginFunctionImpl (const MachineFunction *MF) override
 Gather pre-function debug information. More...
 
void endFunctionImpl (const MachineFunction *MF) override
 Gather and emit post-function debug information. More...
 
void skippedNonDebugFunction () override
 
- Protected Member Functions inherited from llvm::DebugHandlerBase
 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...
 

Additional Inherited Members

- Protected Attributes inherited from llvm::DebugHandlerBase
AsmPrinterAsm
 Target of debug info emission. More...
 
MachineModuleInfoMMI
 Collected machine module information. More...
 
DebugLoc PrevInstLoc
 Previous instruction's location information. More...
 
MCSymbolPrevLabel = nullptr
 
const MachineBasicBlockPrevInstBB = nullptr
 
DebugLoc PrologEndLoc
 This location indicates end of function prologue and beginning of function body. More...
 
const MachineInstrCurMI = 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...
 
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...
 

Detailed Description

Collects and handles dwarf debug information.

Definition at line 196 of file DwarfDebug.h.

Constructor & Destructor Documentation

◆ DwarfDebug()

DwarfDebug::DwarfDebug ( AsmPrinter A,
Module M 
)

◆ ~DwarfDebug()

DwarfDebug::~DwarfDebug ( )
overridedefault

Referenced by DwarfDebug().

Member Function Documentation

◆ addAccelName()

void DwarfDebug::addAccelName ( StringRef  Name,
const DIE Die 
)

◆ addAccelNamespace()

void DwarfDebug::addAccelNamespace ( StringRef  Name,
const DIE Die 
)

◆ addAccelObjC()

void DwarfDebug::addAccelObjC ( StringRef  Name,
const DIE Die 
)

Definition at line 2170 of file DwarfDebug.cpp.

References llvm::DebugHandlerBase::Asm, and useDwarfAccelTables().

Referenced by addSubprogramNames().

◆ addAccelType()

void DwarfDebug::addAccelType ( StringRef  Name,
const DIE Die,
char  Flags 
)

◆ addArangeLabel()

void llvm::DwarfDebug::addArangeLabel ( SymbolCU  SCU)
inline

Add a label so that arange data can be generated for it.

Definition at line 461 of file DwarfDebug.h.

Referenced by llvm::DwarfCompileUnit::addLabelAddress(), llvm::DwarfCompileUnit::addLocalLabelAddress(), and llvm::DwarfCompileUnit::getOrCreateGlobalVariableDIE().

◆ addDwarfTypeUnitType()

void DwarfDebug::addDwarfTypeUnitType ( DwarfCompileUnit CU,
StringRef  Identifier,
DIE Die,
const DICompositeType CTy 
)

Add a DIE to the set of types that we're going to pull into type units.

Definition at line 2088 of file DwarfDebug.cpp.

References llvm::DwarfUnit::addDIETypeSignature(), llvm::DebugHandlerBase::Asm, llvm::DIE::getUnitDie(), llvm::MipsISD::Ins, makeTypeSignature(), and useSplitDwarf().

Referenced by llvm::DwarfUnit::getOrCreateTypeDIE().

◆ addSubprogramNames()

void DwarfDebug::addSubprogramNames ( const DISubprogram SP,
DIE Die 
)

◆ beginFunctionImpl()

void DwarfDebug::beginFunctionImpl ( const MachineFunction MF)
overrideprotectedvirtual

◆ beginInstruction()

void DwarfDebug::beginInstruction ( const MachineInstr MI)
overridevirtual

◆ beginModule()

void DwarfDebug::beginModule ( )

Emit all Dwarf sections that should come prior to the content.

Definition at line 571 of file DwarfDebug.cpp.

References llvm::DwarfUnit::addSectionLabel(), llvm::DwarfUnit::addUInt(), llvm::any_of(), llvm::DebugHandlerBase::Asm, assert(), llvm::DwarfCompileUnit::attachRangesOrLowHighPC(), llvm::DIEHash::computeCUSignature(), llvm::DwarfFile::computeSizeAndOffsets(), llvm::DwarfUnit::constructContainingTypeDIEs(), llvm::Module::debug_compile_units(), llvm::Module::debug_compile_units_begin(), llvm::Module::debug_compile_units_end(), DisableDebugInfoPrinting, llvm::DwarfCompileUnit::finishSubprogramDefinition(), llvm::DwarfCompileUnit::finishVariableDefinition(), for(), forBothCUs(), llvm::MCSection::getBeginSymbol(), llvm::MCObjectFileInfo::getDwarfAddrSection(), llvm::MCObjectFileInfo::getDwarfMacinfoSection(), llvm::MCObjectFileInfo::getDwarfRangesSection(), llvm::DwarfCompileUnit::getMacroLabelBegin(), llvm::MachineModuleInfo::getModule(), llvm::AsmPrinter::getObjFileLowering(), llvm::DwarfCompileUnit::getOrCreateGlobalVariableDIE(), llvm::DwarfUnit::getOrCreateTypeDIE(), llvm::DwarfCompileUnit::getRanges(), llvm::DwarfCompileUnit::getSkeleton(), llvm::DIE::getUnitDie(), llvm::DIEUnit::getUnitDie(), llvm::Module::globals(), llvm::ARM_PROC::IE, llvm::detail::DenseSetImpl< ValueT, DenseMap< ValueT, detail::DenseSetEmpty, ValueInfoT, detail::DenseSetPair< ValueT > >, ValueInfoT >::insert(), llvm::AddressPool::isEmpty(), llvm::TargetOptions::MCOptions, llvm::DebugHandlerBase::MMI, llvm::DICompileUnit::NoDebug, llvm::TargetMachine::Options, P, llvm::DwarfCompileUnit::setBaseAddress(), llvm::MachineModuleInfo::setDebugInfoAvailability(), sortGlobalExprs(), llvm::MCTargetOptions::SplitDwarfFile, T, llvm::DwarfCompileUnit::takeRanges(), llvm::TimePassesIsEnabled, llvm::AsmPrinter::TM, and useSplitDwarf().

Referenced by llvm::AsmPrinter::doInitialization().

◆ emitDebugLocEntry()

void DwarfDebug::emitDebugLocEntry ( ByteStreamer Streamer,
const DebugLocStream::Entry Entry 
)

Emit an entry for the debug loc section.

This can be used to handle an entry that's going to be emitted into the debug loc section.

Definition at line 1582 of file DwarfDebug.cpp.

References llvm::ByteStreamer::EmitInt8(), llvm::WebAssembly::End, llvm::DebugLocStream::getBytes(), and llvm::DebugLocStream::getComments().

Referenced by llvm::DIEHash::addSLEB128(), and emitDebugLocEntryLocation().

◆ emitDebugLocEntryLocation()

void DwarfDebug::emitDebugLocEntryLocation ( const DebugLocStream::Entry Entry)

◆ endFunctionImpl()

void DwarfDebug::endFunctionImpl ( const MachineFunction MF)
overrideprotectedvirtual

◆ endModule()

void DwarfDebug::endModule ( )
overridevirtual

◆ getAddressPool()

AddressPool& llvm::DwarfDebug::getAddressPool ( )
inline

◆ getCurrentFunction()

const MachineFunction* llvm::DwarfDebug::getCurrentFunction ( ) const
inline

Definition at line 532 of file DwarfDebug.h.

Referenced by llvm::DwarfCompileUnit::updateSubprogramScopeDIE().

◆ getDebugLocs()

const DebugLocStream& llvm::DwarfDebug::getDebugLocs ( ) const
inline

Returns the entries for the .debug_loc section.

Definition at line 505 of file DwarfDebug.h.

Referenced by llvm::DIEHash::addSLEB128(), and llvm::DIELocList::EmitValue().

◆ getDwarfVersion()

uint16_t DwarfDebug::getDwarfVersion ( ) const

◆ getPrevCU()

const DwarfCompileUnit* llvm::DwarfDebug::getPrevCU ( ) const
inline

Returns the previous CU that was being updated.

Definition at line 501 of file DwarfDebug.h.

Referenced by llvm::DwarfCompileUnit::addRange().

◆ isLexicalScopeDIENull()

bool DwarfDebug::isLexicalScopeDIENull ( LexicalScope Scope)

A helper function to check whether the DIE for a given Scope is going to be null.

Check whether we should create a DIE for the given Scope, return true if we don't create a DIE (the corresponding DIE is null).

Definition at line 386 of file DwarfDebug.cpp.

References llvm::SmallVectorBase::empty(), llvm::SmallVectorTemplateCommon< T, typename >::front(), llvm::DebugHandlerBase::getLabelAfterInsn(), llvm::LexicalScope::getRanges(), llvm::LexicalScope::isAbstractScope(), and llvm::SmallVectorTemplateCommon< T, typename >::size().

Referenced by llvm::DwarfCompileUnit::constructLexicalScopeDIE(), and llvm::DwarfCompileUnit::constructScopeDIE().

◆ makeTypeSignature()

uint64_t DwarfDebug::makeTypeSignature ( StringRef  Identifier)
static

Perform an MD5 checksum of Identifier and return the lower 64 bits.

Definition at line 2077 of file DwarfDebug.cpp.

References llvm::MD5::final(), llvm::MD5::MD5Result::high(), and llvm::MD5::update().

Referenced by addDwarfTypeUnitType().

◆ resolve()

template<typename T >
T* llvm::DwarfDebug::resolve ( TypedDINodeRef< T Ref) const
inline

Find the MDNode for the given reference.

Definition at line 516 of file DwarfDebug.h.

References llvm::TypedDINodeRef< T >::resolve().

Referenced by llvm::DwarfCompileUnit::getOrCreateGlobalVariableDIE(), and isUnsignedDIType().

◆ setPrevCU()

void llvm::DwarfDebug::setPrevCU ( const DwarfCompileUnit PrevCU)
inline

Definition at line 502 of file DwarfDebug.h.

Referenced by llvm::DwarfCompileUnit::addRange().

◆ setSymbolSize()

void llvm::DwarfDebug::setSymbolSize ( const MCSymbol Sym,
uint64_t  Size 
)
inlineoverridevirtual

For symbols that have a size designated (e.g.

common symbols), this tracks that size.

Implements llvm::AsmPrinterHandler.

Definition at line 465 of file DwarfDebug.h.

References llvm::AMDGPU::HSAMD::Kernel::Arg::Key::Size.

◆ shareAcrossDWOCUs()

bool DwarfDebug::shareAcrossDWOCUs ( ) const

◆ skippedNonDebugFunction()

void DwarfDebug::skippedNonDebugFunction ( )
overrideprotectedvirtual

Reimplemented from llvm::DebugHandlerBase.

Definition at line 1290 of file DwarfDebug.cpp.

◆ useAllLinkageNames()

bool llvm::DwarfDebug::useAllLinkageNames ( ) const
inline

Returns whether we should emit all DW_AT_[MIPS_]linkage_name.

If not, we still might emit certain cases.

Definition at line 471 of file DwarfDebug.h.

Referenced by llvm::DwarfUnit::applySubprogramDefinitionAttributes(), and llvm::DwarfCompileUnit::getOrCreateGlobalVariableDIE().

◆ useAppleExtensionAttributes()

bool llvm::DwarfDebug::useAppleExtensionAttributes ( ) const
inline

◆ useDWARF2Bitfields()

bool llvm::DwarfDebug::useDWARF2Bitfields ( ) const
inline

Returns whether to use the DWARF2 format for bitfields instyead of the DWARF4 format.

Definition at line 479 of file DwarfDebug.h.

Referenced by llvm::DwarfUnit::constructContainingTypeDIEs().

◆ useDwarfAccelTables()

bool llvm::DwarfDebug::useDwarfAccelTables ( ) const
inline

Returns whether or not to emit tables that dwarf consumers can use to accelerate lookup.

Definition at line 485 of file DwarfDebug.h.

Referenced by addAccelName(), addAccelNamespace(), addAccelObjC(), addAccelType(), and endModule().

◆ useGNUTLSOpcode()

bool llvm::DwarfDebug::useGNUTLSOpcode ( ) const
inline

Returns whether to use DW_OP_GNU_push_tls_address, instead of the standard DW_OP_form_tls_address opcode.

Definition at line 475 of file DwarfDebug.h.

Referenced by llvm::DwarfCompileUnit::getOrCreateGlobalVariableDIE().

◆ useSplitDwarf()

bool llvm::DwarfDebug::useSplitDwarf ( ) const
inline

The documentation for this class was generated from the following files: