LLVM 19.0.0git
Classes | Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
llvm::dwarf_linker::parallel::DwarfUnit Class Referenceabstract

Base class for all Dwarf units(Compile unit/Type table unit). More...

#include "DWARFLinker/Parallel/DWARFLinkerUnit.h"

Inheritance diagram for llvm::dwarf_linker::parallel::DwarfUnit:
Inheritance graph
[legend]

Classes

struct  AccelInfo
 This structure keeps fields which would be used for creating accelerator table. More...
 

Public Types

enum class  AccelType : uint8_t {
  AccelType::None , AccelType::Name , AccelType::Namespace , AccelType::ObjC ,
  AccelType::Type
}
 

Public Member Functions

virtual ~DwarfUnit ()
 
 DwarfUnit (LinkingGlobalData &GlobalData, unsigned ID, StringRef ClangModuleName)
 
unsigned getUniqueID () const
 Unique id of the unit.
 
uint64_t getUnitSize () const
 Returns size of this(newly generated) compile unit.
 
StringRef getUnitName () const
 Returns this unit name.
 
StringRef getSysRoot ()
 Return the DW_AT_LLVM_sysroot of the compile unit or an empty StringRef.
 
bool isClangModule () const
 Return true if this compile unit is from Clang module.
 
const std::string & getClangModuleName () const
 Return Clang module name;.
 
LinkingGlobalDatagetGlobalData ()
 Return global data.
 
bool isInterconnectedCU () const
 Returns true if unit is inter-connected(it references/referenced by other unit).
 
void setInterconnectedCU ()
 Mark this unit as inter-connected(it references/referenced by other unit).
 
void assignAbbrev (DIEAbbrev &Abbrev)
 Adds Abbrev into unit`s abbreviation table.
 
const std::vector< std::unique_ptr< DIEAbbrev > > & getAbbreviations () const
 Returns abbreviations for this compile unit.
 
DIEgetOutUnitDIE ()
 Returns output unit DIE.
 
void setOutUnitDIE (DIE *UnitDie)
 Set output unit DIE.
 
Error emitAbbreviations ()
 
Error emitDebugInfo (const Triple &TargetTriple)
 Emit .debug_info section for unit DIEs.
 
Error emitDebugLine (const Triple &TargetTriple, const DWARFDebugLine::LineTable &OutLineTable)
 Emit .debug_line section.
 
Error emitDebugStringOffsetSection ()
 Emit the .debug_str_offsets section for current unit.
 
void warn (const Twine &Warning)
 
void error (const Twine &Err)
 
void emitPubAccelerators ()
 Emit .debug_pubnames and .debug_pubtypes for Unit.
 
virtual void forEachAcceleratorRecord (function_ref< void(AccelInfo &)> Handler)=0
 Enumerates accelerator data.
 
virtual uint64_t getDebugStrIndex (const StringEntry *String)
 Returns index(inside .debug_str_offsets) of specified string.
 
- Public Member Functions inherited from llvm::dwarf_linker::parallel::OutputSections
 OutputSections (LinkingGlobalData &GlobalData)
 
void setOutputFormat (dwarf::FormParams Format, llvm::endianness Endianness)
 Sets output format for all keeping sections.
 
const SectionDescriptorgetSectionDescriptor (DebugSectionKind SectionKind) const
 Returns descriptor for the specified section of SectionKind.
 
SectionDescriptorgetSectionDescriptor (DebugSectionKind SectionKind)
 Returns descriptor for the specified section of SectionKind.
 
std::optional< const SectionDescriptor * > tryGetSectionDescriptor (DebugSectionKind SectionKind) const
 Returns descriptor for the specified section of SectionKind.
 
std::optional< SectionDescriptor * > tryGetSectionDescriptor (DebugSectionKind SectionKind)
 Returns descriptor for the specified section of SectionKind.
 
SectionDescriptorgetOrCreateSectionDescriptor (DebugSectionKind SectionKind)
 Returns descriptor for the specified section of SectionKind.
 
void eraseSections ()
 Erases data of all sections.
 
void forEach (function_ref< void(SectionDescriptor &)> Handler)
 Enumerate all sections and call Handler for each.
 
void forEach (function_ref< void(std::shared_ptr< SectionDescriptor > Section)> Handler)
 Enumerate all sections and call Handler for each.
 
void assignSectionsOffsetAndAccumulateSize (std::array< uint64_t, SectionKindsNum > &SectionSizesAccumulator)
 Enumerate all sections, for each section set current offset (kept by SectionSizesAccumulator), update current offset with section length.
 
void applyPatches (SectionDescriptor &Section, StringEntryToDwarfStringPoolEntryMap &DebugStrStrings, StringEntryToDwarfStringPoolEntryMap &DebugLineStrStrings, TypeUnit *TypeUnitPtr)
 Enumerate all sections, for each section apply all section patches.
 
llvm::endianness getEndianness () const
 Endiannes for the sections.
 
uint16_t getVersion () const
 Return DWARF version.
 
uint16_t getDebugInfoHeaderSize () const
 Return size of header of debug_info table.
 
uint16_t getDebugAddrHeaderSize () const
 Return size of header of debug_ table.
 
uint16_t getDebugStrOffsetsHeaderSize () const
 Return size of header of debug_str_offsets table.
 
const dwarf::FormParamsgetFormParams () const
 Return size of address.
 

Protected Types

using FileNamesCache = DenseMap< uint64_t, std::pair< std::string, std::string > >
 Cache for file names for this unit.
 
- Protected Types inherited from llvm::dwarf_linker::parallel::OutputSections
using SectionsSetTy = std::map< DebugSectionKind, std::shared_ptr< SectionDescriptor > >
 All keeping sections.
 

Protected Member Functions

void emitDwarfAbbrevEntry (const DIEAbbrev &Abbrev, SectionDescriptor &AbbrevSection)
 Emit single abbreviation entry.
 
std::optional< uint64_temitPubAcceleratorEntry (SectionDescriptor &OutSection, const AccelInfo &Info, std::optional< uint64_t > LengthOffset)
 Emit single pubnames/pubtypes accelerator entry.
 

Protected Attributes

unsigned ID = 0
 Unique ID for the unit.
 
std::string UnitName
 The name of this unit.
 
std::string SysRoot
 The DW_AT_LLVM_sysroot of this unit.
 
std::string ClangModuleName
 If this is a Clang module, this holds the module's name.
 
uint64_t UnitSize = 0
 
std::atomic< boolIsInterconnectedCU = {false}
 true if current unit references_to/is_referenced by other unit.
 
FoldingSet< DIEAbbrevAbbreviationsSet
 FoldingSet that uniques the abbreviations.
 
std::vector< std::unique_ptr< DIEAbbrev > > Abbreviations
 Storage for the unique Abbreviations.
 
DIEOutUnitDIE = nullptr
 Output unit DIE.
 
FileNamesCache FileNames
 
IndexedValuesMap< const StringEntry * > DebugStringIndexMap
 Maps a string into the index inside .debug_str_offsets section.
 
- Protected Attributes inherited from llvm::dwarf_linker::parallel::OutputSections
LinkingGlobalDataGlobalData
 
dwarf::FormParams Format = {4, 4, dwarf::DWARF32}
 Format for sections.
 
llvm::endianness Endianness = llvm::endianness::native
 Endiannes for sections.
 
SectionsSetTy SectionDescriptors
 

Detailed Description

Base class for all Dwarf units(Compile unit/Type table unit).

Definition at line 29 of file DWARFLinkerUnit.h.

Member Typedef Documentation

◆ FileNamesCache

using llvm::dwarf_linker::parallel::DwarfUnit::FileNamesCache = DenseMap<uint64_t, std::pair<std::string, std::string> >
protected

Cache for file names for this unit.

Definition at line 196 of file DWARFLinkerUnit.h.

Constructor & Destructor Documentation

◆ ~DwarfUnit()

virtual llvm::dwarf_linker::parallel::DwarfUnit::~DwarfUnit ( )
inlinevirtual

Definition at line 31 of file DWARFLinkerUnit.h.

◆ DwarfUnit()

llvm::dwarf_linker::parallel::DwarfUnit::DwarfUnit ( LinkingGlobalData GlobalData,
unsigned  ID,
StringRef  ClangModuleName 
)
inline

Definition at line 32 of file DWARFLinkerUnit.h.

Member Function Documentation

◆ assignAbbrev()

void DwarfUnit::assignAbbrev ( DIEAbbrev Abbrev)

◆ emitDwarfAbbrevEntry()

void DwarfUnit::emitDwarfAbbrevEntry ( const DIEAbbrev Abbrev,
SectionDescriptor AbbrevSection 
)
protected

◆ emitPubAcceleratorEntry()

std::optional< uint64_t > DwarfUnit::emitPubAcceleratorEntry ( SectionDescriptor OutSection,
const AccelInfo Info,
std::optional< uint64_t LengthOffset 
)
protected

◆ getAbbreviations()

const std::vector< std::unique_ptr< DIEAbbrev > > & llvm::dwarf_linker::parallel::DwarfUnit::getAbbreviations ( ) const
inline

Returns abbreviations for this compile unit.

Definition at line 69 of file DWARFLinkerUnit.h.

References Abbreviations.

◆ getClangModuleName()

const std::string & llvm::dwarf_linker::parallel::DwarfUnit::getClangModuleName ( ) const
inline

Return Clang module name;.

Definition at line 53 of file DWARFLinkerUnit.h.

References ClangModuleName.

◆ getDebugStrIndex()

virtual uint64_t llvm::dwarf_linker::parallel::DwarfUnit::getDebugStrIndex ( const StringEntry String)
inlinevirtual

Returns index(inside .debug_str_offsets) of specified string.

Reimplemented in llvm::dwarf_linker::parallel::TypeUnit.

Definition at line 155 of file DWARFLinkerUnit.h.

References DebugStringIndexMap, and llvm::String.

Referenced by llvm::dwarf_linker::parallel::DIEAttributeCloner::cloneStringAttr().

◆ getGlobalData()

LinkingGlobalData & llvm::dwarf_linker::parallel::DwarfUnit::getGlobalData ( )
inline

◆ getOutUnitDIE()

DIE * llvm::dwarf_linker::parallel::DwarfUnit::getOutUnitDIE ( )
inline

◆ getSysRoot()

StringRef llvm::dwarf_linker::parallel::DwarfUnit::getSysRoot ( )
inline

Return the DW_AT_LLVM_sysroot of the compile unit or an empty StringRef.

Definition at line 47 of file DWARFLinkerUnit.h.

References SysRoot.

Referenced by llvm::dwarf_linker::parallel::CompileUnit::analyzeImportedModule().

◆ getUniqueID()

unsigned llvm::dwarf_linker::parallel::DwarfUnit::getUniqueID ( ) const
inline

Unique id of the unit.

Definition at line 38 of file DWARFLinkerUnit.h.

References ID.

Referenced by llvm::dwarf_linker::parallel::DIEAttributeCloner::cloneDieRefAttr().

◆ getUnitName()

StringRef llvm::dwarf_linker::parallel::DwarfUnit::getUnitName ( ) const
inline

◆ getUnitSize()

uint64_t llvm::dwarf_linker::parallel::DwarfUnit::getUnitSize ( ) const
inline

Returns size of this(newly generated) compile unit.

Definition at line 41 of file DWARFLinkerUnit.h.

References UnitSize.

◆ isClangModule()

bool llvm::dwarf_linker::parallel::DwarfUnit::isClangModule ( ) const
inline

Return true if this compile unit is from Clang module.

Definition at line 50 of file DWARFLinkerUnit.h.

References ClangModuleName.

◆ isInterconnectedCU()

bool llvm::dwarf_linker::parallel::DwarfUnit::isInterconnectedCU ( ) const
inline

Returns true if unit is inter-connected(it references/referenced by other unit).

Definition at line 60 of file DWARFLinkerUnit.h.

References IsInterconnectedCU.

◆ setInterconnectedCU()

void llvm::dwarf_linker::parallel::DwarfUnit::setInterconnectedCU ( )
inline

Mark this unit as inter-connected(it references/referenced by other unit).

Definition at line 63 of file DWARFLinkerUnit.h.

References IsInterconnectedCU.

◆ setOutUnitDIE()

void llvm::dwarf_linker::parallel::DwarfUnit::setOutUnitDIE ( DIE UnitDie)
inline

Member Data Documentation

◆ Abbreviations

std::vector<std::unique_ptr<DIEAbbrev> > llvm::dwarf_linker::parallel::DwarfUnit::Abbreviations
protected

Storage for the unique Abbreviations.

Definition at line 190 of file DWARFLinkerUnit.h.

Referenced by getAbbreviations(), and llvm::dwarf_linker::parallel::CompileUnit::maybeResetToLoadedStage().

◆ AbbreviationsSet

FoldingSet<DIEAbbrev> llvm::dwarf_linker::parallel::DwarfUnit::AbbreviationsSet
protected

◆ ClangModuleName

std::string llvm::dwarf_linker::parallel::DwarfUnit::ClangModuleName
protected

If this is a Clang module, this holds the module's name.

Definition at line 179 of file DWARFLinkerUnit.h.

Referenced by getClangModuleName(), and isClangModule().

◆ DebugStringIndexMap

IndexedValuesMap<const StringEntry *> llvm::dwarf_linker::parallel::DwarfUnit::DebugStringIndexMap
protected

Maps a string into the index inside .debug_str_offsets section.

Definition at line 201 of file DWARFLinkerUnit.h.

Referenced by llvm::dwarf_linker::parallel::TypeUnit::createDIETree(), getDebugStrIndex(), and llvm::dwarf_linker::parallel::TypeUnit::getDebugStrIndex().

◆ FileNames

FileNamesCache llvm::dwarf_linker::parallel::DwarfUnit::FileNames
protected

◆ ID

unsigned llvm::dwarf_linker::parallel::DwarfUnit::ID = 0
protected

Unique ID for the unit.

Definition at line 170 of file DWARFLinkerUnit.h.

Referenced by getUniqueID().

◆ IsInterconnectedCU

std::atomic<bool> llvm::dwarf_linker::parallel::DwarfUnit::IsInterconnectedCU = {false}
protected

true if current unit references_to/is_referenced by other unit.

Definition at line 184 of file DWARFLinkerUnit.h.

Referenced by isInterconnectedCU(), and setInterconnectedCU().

◆ OutUnitDIE

DIE* llvm::dwarf_linker::parallel::DwarfUnit::OutUnitDIE = nullptr
protected

◆ SysRoot

std::string llvm::dwarf_linker::parallel::DwarfUnit::SysRoot
protected

◆ UnitName

std::string llvm::dwarf_linker::parallel::DwarfUnit::UnitName
protected

◆ UnitSize

uint64_t llvm::dwarf_linker::parallel::DwarfUnit::UnitSize = 0
protected

Definition at line 181 of file DWARFLinkerUnit.h.

Referenced by getUnitSize(), and setOutUnitDIE().


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