LLVM 24.0.0git
llvm::DIE Class Reference

A structured debug information entry. More...

#include "llvm/CodeGen/DIE.h"

Inheritance diagram for llvm::DIE:
[legend]

Public Types

using child_iterator = IntrusiveBackList<DIE>::iterator
using const_child_iterator = IntrusiveBackList<DIE>::const_iterator
using child_range = iterator_range<child_iterator>
using const_child_range = iterator_range<const_child_iterator>
Public Types inherited from llvm::DIEValueList
using value_range = iterator_range<value_iterator>
using const_value_range = iterator_range<const_value_iterator>

Public Member Functions

 DIE ()=delete
 DIE (const DIE &RHS)=delete
 DIE (DIE &&RHS)=delete
DIE & operator= (const DIE &RHS)=delete
DIE & operator= (const DIE &&RHS)=delete
unsigned getAbbrevNumber () const
dwarf::Tag getTag () const
unsigned getOffset () const
 Get the compile/type unit relative offset of this DIE.
unsigned getSize () const
bool hasChildren () const
bool isPlaceholder () const
 Returns true if DIE is a temporary placeholder.
child_range children ()
const_child_range children () const
LLVM_ABI DIE * getParent () const
LLVM_ABI DIEAbbrev generateAbbrev () const
 Generate the abbreviation for this DIE.
void setAbbrevNumber (unsigned I)
 Set the abbreviation number for this DIE.
LLVM_ABI uint64_t getDebugSectionOffset () const
 Get the absolute offset within the .debug_info or .debug_types section for this DIE.
LLVM_ABI unsigned computeOffsetsAndAbbrevs (const dwarf::FormParams &FormParams, DIEAbbrevSet &AbbrevSet, unsigned CUOffset)
 Compute the offset of this DIE and all its children.
LLVM_ABI const DIE * getUnitDie () const
 Climb up the parent chain to get the unit DIE that this DIE belongs to.
LLVM_ABI DIEUnit * getUnit () const
 Climb up the parent chain to get the unit that this DIE belongs to.
void setOffset (unsigned O)
void setSize (unsigned S)
DIE & addChild (DIE *Child)
 Add a child to the DIE.
DIE & addChildFront (DIE *Child)
LLVM_ABI void removeChild (DIE &Child)
 Remove Child from the children of this DIE.
LLVM_ABI void takeChildren (DIE &Other, bool AtFront=false)
 Move all children of Other to this DIE, preserving their order.
LLVM_ABI DIEValue findAttribute (dwarf::Attribute Attribute) const
 Find a value in the DIE with the attribute given.
LLVM_ABI void print (raw_ostream &O, unsigned IndentCount=0) const
LLVM_ABI void dump () const
Public Member Functions inherited from llvm::DIEValueList
value_iterator addValue (BumpPtrAllocator &Alloc, const DIEValue &V)
template<class T>
value_iterator addValue (BumpPtrAllocator &Alloc, dwarf::Attribute Attribute, dwarf::Form Form, T &&Value)
template<class T>
bool replaceValue (BumpPtrAllocator &Alloc, dwarf::Attribute Attribute, dwarf::Attribute NewAttribute, dwarf::Form Form, T &&NewValue)
template<class T>
bool replaceValue (BumpPtrAllocator &Alloc, dwarf::Attribute Attribute, dwarf::Form Form, T &&NewValue)
bool replaceValue (BumpPtrAllocator &Alloc, dwarf::Attribute Attribute, dwarf::Form Form, DIEValue &NewValue)
bool deleteValue (dwarf::Attribute Attribute)
void takeValues (DIEValueList &Other)
 Take ownership of the nodes in Other, and append them to the back of the list.
value_range values ()
const_value_range values () const

Static Public Member Functions

static DIE * get (BumpPtrAllocator &Alloc, dwarf::Tag Tag)
static DIE * getPlaceholder (BumpPtrAllocator &Alloc)
 Create a temporary placeholder DIE.

Static Public Attributes

static constexpr dwarf::Tag PlaceholderTag = dwarf::DW_TAG_null
 Internal tag for temporary containers.

Friends

class IntrusiveBackList< DIE >
class DIEUnit

Detailed Description

A structured debug information entry.

Has an abbreviation which describes its organization.

Definition at line 835 of file DIE.h.

Member Typedef Documentation

◆ child_iterator

Definition at line 897 of file DIE.h.

◆ child_range

Definition at line 899 of file DIE.h.

◆ const_child_iterator

◆ const_child_range

Constructor & Destructor Documentation

◆ DIE() [1/3]

llvm::DIE::DIE ( )
delete

Referenced by get().

◆ DIE() [2/3]

llvm::DIE::DIE ( const DIE & RHS)
delete

References RHS.

◆ DIE() [3/3]

llvm::DIE::DIE ( DIE && RHS)
delete

References RHS.

Member Function Documentation

◆ addChild()

◆ addChildFront()

DIE & llvm::DIE::addChildFront ( DIE * Child)
inline

Definition at line 967 of file DIE.h.

References assert().

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

◆ children() [1/2]

child_range llvm::DIE::children ( )
inline

◆ children() [2/2]

const_child_range llvm::DIE::children ( ) const
inline

Definition at line 905 of file DIE.h.

References llvm::make_range().

◆ computeOffsetsAndAbbrevs()

unsigned DIE::computeOffsetsAndAbbrevs ( const dwarf::FormParams & FormParams,
DIEAbbrevSet & AbbrevSet,
unsigned CUOffset )

Compute the offset of this DIE and all its children.

This function gets called just before we are going to generate the debug information and gives each DIE a chance to figure out its CU relative DIE offset, unique its abbreviation and fill in the abbreviation code, and return the unit offset that points to where the next DIE will be emitted within the debug unit section. After this function has been called for all DIE objects, the DWARF can be generated since all DIEs will be able to properly refer to other DIE objects since all DIEs have calculated their offsets.

Parameters
FormParamsUsed when calculating sizes.
AbbrevSetthe abbreviation used to unique DIE abbreviations.
CUOffsetthe compile/type unit relative offset in bytes.
Returns
the offset for the DIE that follows this DIE within the current compile/type unit.

Definition at line 291 of file DIE.cpp.

References assert(), children(), getAbbrevNumber(), getOffset(), llvm::getULEB128Size(), hasChildren(), llvm::DIEAbbrev::hasChildren(), isPlaceholder(), setOffset(), setSize(), llvm::DIEAbbrevSet::uniqueAbbreviation(), and llvm::DIEValueList::values().

Referenced by llvm::DwarfFile::computeSizeAndOffset().

◆ dump()

LLVM_DUMP_METHOD void DIE::dump ( ) const

Definition at line 286 of file DIE.cpp.

References llvm::dbgs(), LLVM_DUMP_METHOD, and print().

Referenced by dumpKeptDIE().

◆ findAttribute()

DIEValue DIE::findAttribute ( dwarf::Attribute Attribute) const

Find a value in the DIE with the attribute given.

Returns a default-constructed DIEValue (where DIEValue::getType() gives DIEValue::isNone) if no such attribute exists.

Definition at line 235 of file DIE.cpp.

References llvm::DIEValueList::values().

Referenced by llvm::DwarfCompileUnit::addLinkageNamesToDeclarations(), computeIndexValue(), and llvm::DWARF5AccelTableData::getDefiningParentDieOffset().

◆ generateAbbrev()

DIEAbbrev DIE::generateAbbrev ( ) const

Generate the abbreviation for this DIE.

Calculate the abbreviation for this, which should be uniqued and eventually used to call setAbbrevNumber().

Definition at line 203 of file DIE.cpp.

References llvm::DIEAbbrev::AddAttribute(), llvm::DIEAbbrev::AddImplicitConstAttribute(), assert(), hasChildren(), isPlaceholder(), and llvm::DIEValueList::values().

Referenced by llvm::DIEAbbrevSet::uniqueAbbreviation().

◆ get()

◆ getAbbrevNumber()

unsigned llvm::DIE::getAbbrevNumber ( ) const
inline

◆ getDebugSectionOffset()

uint64_t DIE::getDebugSectionOffset ( ) const

Get the absolute offset within the .debug_info or .debug_types section for this DIE.

Definition at line 217 of file DIE.cpp.

References assert(), DIEUnit, getOffset(), and getUnit().

◆ getOffset()

◆ getParent()

DIE * DIE::getParent ( ) const

◆ getPlaceholder()

DIE * llvm::DIE::getPlaceholder ( BumpPtrAllocator & Alloc)
inlinestatic

Create a temporary placeholder DIE.

Definition at line 874 of file DIE.h.

References llvm::Alloc, get(), and PlaceholderTag.

◆ getSize()

◆ getTag()

◆ getUnit()

DIEUnit * DIE::getUnit ( ) const

Climb up the parent chain to get the unit that this DIE belongs to.

Returns
the DIEUnit that represents the unit that owns this DIE, or NULL if this DIE hasn't been added to a unit DIE.

Definition at line 223 of file DIE.cpp.

References DIEUnit, llvm::dyn_cast_if_present(), and P.

Referenced by llvm::DwarfUnit::addDIEEntry(), getDebugSectionOffset(), llvm::DwarfUnit::getOrCreateStaticMemberDIE(), llvm::DwarfUnit::getOrCreateSubprogramDIE(), llvm::DwarfUnit::getOrCreateTypeDIE(), and getUnitDie().

◆ getUnitDie()

const DIE * DIE::getUnitDie ( ) const

Climb up the parent chain to get the unit DIE that this DIE belongs to.

Returns
the unit DIE that owns this DIE, or NULL if this DIE hasn't been added to a unit DIE.

Definition at line 230 of file DIE.cpp.

References DIEUnit, and getUnit().

◆ hasChildren()

bool llvm::DIE::hasChildren ( ) const
inline

◆ isPlaceholder()

bool llvm::DIE::isPlaceholder ( ) const
inline

Returns true if DIE is a temporary placeholder.

Definition at line 895 of file DIE.h.

References getTag(), and PlaceholderTag.

Referenced by computeOffsetsAndAbbrevs(), llvm::AsmPrinter::emitDwarfDIE(), generateAbbrev(), and getParent().

◆ operator=() [1/2]

DIE & llvm::DIE::operator= ( const DIE && RHS)
delete

References RHS.

◆ operator=() [2/2]

DIE & llvm::DIE::operator= ( const DIE & RHS)
delete

References RHS.

◆ print()

◆ removeChild()

void DIE::removeChild ( DIE & Child)

Remove Child from the children of this DIE.

Takes constant time if Child is the first child, and linear time otherwise.

Definition at line 183 of file DIE.cpp.

References assert().

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

◆ setAbbrevNumber()

void llvm::DIE::setAbbrevNumber ( unsigned I)
inline

Set the abbreviation number for this DIE.

Definition at line 918 of file DIE.h.

References I.

Referenced by llvm::DIEAbbrevSet::uniqueAbbreviation().

◆ setOffset()

void llvm::DIE::setOffset ( unsigned O)
inline

◆ setSize()

void llvm::DIE::setSize ( unsigned S)
inline

◆ takeChildren()

void DIE::takeChildren ( DIE & Other,
bool AtFront = false )

Move all children of Other to this DIE, preserving their order.

If AtFront is true, the moved children are placed before the existing children of this DIE, otherwise after them.

Definition at line 190 of file DIE.cpp.

References llvm::Other, and llvm::IntrusiveBackList< T >::takeNodes().

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

◆ DIEUnit

friend class DIEUnit
friend

Definition at line 837 of file DIE.h.

References DIEUnit.

Referenced by DIEUnit, getDebugSectionOffset(), getUnit(), and getUnitDie().

◆ IntrusiveBackList< DIE >

Member Data Documentation

◆ PlaceholderTag

dwarf::Tag llvm::DIE::PlaceholderTag = dwarf::DW_TAG_null
staticconstexpr

Internal tag for temporary containers.

Such DIEs must be removed before abbreviation generation or emission.

Definition at line 861 of file DIE.h.

Referenced by llvm::DIEAbbrev::Emit(), getPlaceholder(), and isPlaceholder().


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