LLVM 20.0.0git
|
Base class for all Dwarf units(Compile unit/Type table unit). More...
#include "DWARFLinker/Parallel/DWARFLinkerUnit.h"
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;. | |
LinkingGlobalData & | getGlobalData () |
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. | |
DIE * | getOutUnitDIE () |
Returns output unit DIE. | |
void | setOutUnitDIE (DIE *UnitDie) |
Set output unit DIE. | |
dwarf::Tag | getTag () const |
Returns unit DWARF tag. | |
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 SectionDescriptor & | getSectionDescriptor (DebugSectionKind SectionKind) const |
Returns descriptor for the specified section of SectionKind . | |
SectionDescriptor & | getSectionDescriptor (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 . | |
SectionDescriptor & | getOrCreateSectionDescriptor (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::FormParams & | getFormParams () 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_t > | emitPubAcceleratorEntry (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 |
dwarf::Tag | UnitTag = dwarf::DW_TAG_null |
DWARF unit tag. | |
std::atomic< bool > | IsInterconnectedCU = {false} |
true if current unit references_to/is_referenced by other unit. | |
FoldingSet< DIEAbbrev > | AbbreviationsSet |
FoldingSet that uniques the abbreviations. | |
std::vector< std::unique_ptr< DIEAbbrev > > | Abbreviations |
Storage for the unique Abbreviations. | |
DIE * | OutUnitDIE = 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 | |
LinkingGlobalData & | GlobalData |
dwarf::FormParams | Format = {4, 4, dwarf::DWARF32} |
Format for sections. | |
llvm::endianness | Endianness = llvm::endianness::native |
Endiannes for sections. | |
SectionsSetTy | SectionDescriptors |
Base class for all Dwarf units(Compile unit/Type table unit).
Definition at line 29 of file DWARFLinkerUnit.h.
|
protected |
Cache for file names for this unit.
Definition at line 204 of file DWARFLinkerUnit.h.
|
inlinevirtual |
Definition at line 31 of file DWARFLinkerUnit.h.
|
inline |
Definition at line 32 of file DWARFLinkerUnit.h.
void DwarfUnit::assignAbbrev | ( | DIEAbbrev & | Abbrev | ) |
Adds Abbrev
into unit`s abbreviation table.
Definition at line 17 of file DWARFLinkerUnit.cpp.
References llvm::DIEAbbrev::getData(), llvm::DIEAbbrev::getNumber(), llvm::DIEAbbrev::getTag(), llvm::DIEAbbrev::hasChildren(), llvm::DIEAbbrev::Profile(), and llvm::DIEAbbrev::setNumber().
|
protected |
Emit single abbreviation entry.
Definition at line 59 of file DWARFLinkerUnit.cpp.
References llvm::Data, llvm::encodeSLEB128(), llvm::encodeULEB128(), llvm::DIEAbbrev::getData(), llvm::DIEAbbrev::getNumber(), llvm::DIEAbbrev::getTag(), llvm::DIEAbbrev::hasChildren(), and llvm::dwarf_linker::parallel::SectionDescriptor::OS.
|
protected |
Emit single pubnames/pubtypes accelerator entry.
Emit the pubnames or pubtypes section contribution for Unit
into Sec
.
The data is provided in Info
.
Definition at line 173 of file DWARFLinkerUnit.cpp.
References llvm::dwarf::DW_PUBNAMES_VERSION, llvm::dwarf_linker::parallel::SectionDescriptor::emitInplaceString(), llvm::dwarf_linker::parallel::SectionDescriptor::emitIntVal(), llvm::dwarf_linker::parallel::SectionDescriptor::emitOffset(), Info, llvm::dwarf_linker::parallel::SectionDescriptor::OS, and llvm::raw_ostream::tell().
|
inline |
Returns abbreviations for this compile unit.
Definition at line 69 of file DWARFLinkerUnit.h.
References Abbreviations.
|
inline |
Return Clang module name;.
Definition at line 53 of file DWARFLinkerUnit.h.
References ClangModuleName.
|
inlinevirtual |
Returns index(inside .debug_str_offsets) of specified string.
Reimplemented in llvm::dwarf_linker::parallel::TypeUnit.
Definition at line 160 of file DWARFLinkerUnit.h.
References DebugStringIndexMap, and llvm::String.
Referenced by llvm::dwarf_linker::parallel::DIEAttributeCloner::cloneStringAttr().
|
inline |
Return global data.
Definition at line 56 of file DWARFLinkerUnit.h.
References llvm::dwarf_linker::parallel::OutputSections::GlobalData.
Referenced by llvm::dwarf_linker::parallel::DIEAttributeCloner::cloneAddressAttr(), llvm::dwarf_linker::parallel::CompileUnit::cloneAndEmitDebugLocations(), llvm::dwarf_linker::parallel::CompileUnit::cloneAndEmitLineTable(), llvm::dwarf_linker::parallel::CompileUnit::cloneAndEmitRanges(), llvm::dwarf_linker::parallel::DIEAttributeCloner::cloneBlockAttr(), llvm::dwarf_linker::parallel::CompileUnit::cloneDieAttrExpression(), llvm::dwarf_linker::parallel::DIEAttributeCloner::cloneScalarAttr(), llvm::dwarf_linker::parallel::DIEAttributeCloner::cloneStringAttr(), llvm::dwarf_linker::parallel::DIEAttributeCloner::DIEAttributeCloner(), and llvm::dwarf_linker::parallel::DIEAttributeCloner::shouldSkipAttribute().
|
inline |
Returns output unit DIE.
Definition at line 74 of file DWARFLinkerUnit.h.
References OutUnitDIE.
Referenced by llvm::dwarf_linker::parallel::CompileUnit::cloneAndEmitDebugMacro(), and llvm::dwarf_linker::parallel::TypeUnit::finishCloningAndEmit().
|
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().
|
inline |
|
inline |
Unique id of the unit.
Definition at line 38 of file DWARFLinkerUnit.h.
References ID.
Referenced by llvm::dwarf_linker::parallel::DIEAttributeCloner::cloneDieRefAttr().
|
inline |
Returns this unit name.
Definition at line 44 of file DWARFLinkerUnit.h.
References UnitName.
Referenced by llvm::dwarf_linker::parallel::TypeUnit::createDIETree(), error(), llvm::dwarf_linker::parallel::CompileUnit::error(), warn(), and llvm::dwarf_linker::parallel::CompileUnit::warn().
|
inline |
Returns size of this(newly generated) compile unit.
Definition at line 41 of file DWARFLinkerUnit.h.
References UnitSize.
|
inline |
Return true if this compile unit is from Clang module.
Definition at line 50 of file DWARFLinkerUnit.h.
References ClangModuleName.
|
inline |
Returns true if unit is inter-connected(it references/referenced by other unit).
Definition at line 60 of file DWARFLinkerUnit.h.
References IsInterconnectedCU.
|
inline |
Mark this unit as inter-connected(it references/referenced by other unit).
Definition at line 63 of file DWARFLinkerUnit.h.
References IsInterconnectedCU.
|
inline |
Set output unit DIE.
Definition at line 77 of file DWARFLinkerUnit.h.
References llvm::dwarf_linker::parallel::OutputSections::getDebugInfoHeaderSize(), llvm::DIE::getSize(), llvm::DIE::getTag(), OutUnitDIE, UnitSize, and UnitTag.
Referenced by llvm::dwarf_linker::parallel::CompileUnit::cloneAndEmit(), and llvm::dwarf_linker::parallel::TypeUnit::createDIETree().
|
protected |
Storage for the unique Abbreviations.
Definition at line 198 of file DWARFLinkerUnit.h.
Referenced by getAbbreviations(), and llvm::dwarf_linker::parallel::CompileUnit::maybeResetToLoadedStage().
|
protected |
FoldingSet that uniques the abbreviations.
Definition at line 195 of file DWARFLinkerUnit.h.
Referenced by llvm::dwarf_linker::parallel::CompileUnit::cleanupDataAfterClonning(), and llvm::dwarf_linker::parallel::CompileUnit::maybeResetToLoadedStage().
|
protected |
If this is a Clang module, this holds the module's name.
Definition at line 184 of file DWARFLinkerUnit.h.
Referenced by getClangModuleName(), and isClangModule().
|
protected |
Maps a string into the index inside .debug_str_offsets section.
Definition at line 209 of file DWARFLinkerUnit.h.
Referenced by llvm::dwarf_linker::parallel::TypeUnit::createDIETree(), getDebugStrIndex(), and llvm::dwarf_linker::parallel::TypeUnit::getDebugStrIndex().
|
protected |
Definition at line 206 of file DWARFLinkerUnit.h.
Referenced by llvm::dwarf_linker::parallel::CompileUnit::cleanupDataAfterClonning(), and llvm::dwarf_linker::parallel::CompileUnit::getDirAndFilenameFromLineTable().
|
protected |
Unique ID for the unit.
Definition at line 175 of file DWARFLinkerUnit.h.
Referenced by getUniqueID().
|
protected |
true if current unit references_to/is_referenced by other unit.
Definition at line 192 of file DWARFLinkerUnit.h.
Referenced by isInterconnectedCU(), and setInterconnectedCU().
|
protected |
Output unit DIE.
Definition at line 201 of file DWARFLinkerUnit.h.
Referenced by getOutUnitDIE(), llvm::dwarf_linker::parallel::CompileUnit::maybeResetToLoadedStage(), and setOutUnitDIE().
|
protected |
The DW_AT_LLVM_sysroot of this unit.
Definition at line 181 of file DWARFLinkerUnit.h.
Referenced by llvm::dwarf_linker::parallel::CompileUnit::analyzeImportedModule(), llvm::dwarf_linker::parallel::CompileUnit::CompileUnit(), and getSysRoot().
|
protected |
The name of this unit.
Definition at line 178 of file DWARFLinkerUnit.h.
Referenced by llvm::dwarf_linker::parallel::CompileUnit::CompileUnit(), getUnitName(), and llvm::dwarf_linker::parallel::TypeUnit::TypeUnit().
|
protected |
Definition at line 186 of file DWARFLinkerUnit.h.
Referenced by getUnitSize(), and setOutUnitDIE().
|
protected |
DWARF unit tag.
Definition at line 189 of file DWARFLinkerUnit.h.
Referenced by getTag(), and setOutUnitDIE().