LLVM
12.0.0git
|
#include "llvm/DebugInfo/DWARF/DWARFUnit.h"
Static Public Member Functions | |
static bool | isMatchingUnitTypeAndTag (uint8_t UnitType, dwarf::Tag Tag) |
Protected Member Functions | |
const DWARFUnitHeader & | getHeader () const |
uint32_t | getHeaderSize () const |
Size in bytes of the parsed unit header. More... | |
Expected< Optional< StrOffsetsContributionDescriptor > > | determineStringOffsetsTableContribution (DWARFDataExtractor &DA) |
Find the unit's contribution to the string offsets table and determine its length and form. More... | |
Expected< Optional< StrOffsetsContributionDescriptor > > | determineStringOffsetsTableContributionDWO (DWARFDataExtractor &DA) |
Find the unit's contribution to the string offsets table and determine its length and form. More... | |
Definition at line 203 of file DWARFUnit.h.
DWARFUnit::DWARFUnit | ( | DWARFContext & | Context, |
const DWARFSection & | Section, | ||
const DWARFUnitHeader & | Header, | ||
const DWARFDebugAbbrev * | DA, | ||
const DWARFSection * | RS, | ||
const DWARFSection * | LocSection, | ||
StringRef | SS, | ||
const DWARFSection & | SOS, | ||
const DWARFSection * | AOS, | ||
const DWARFSection & | LS, | ||
bool | LE, | ||
bool | IsDWO, | ||
const DWARFUnitVector & | UnitVector | ||
) |
Definition at line 173 of file DWARFUnit.cpp.
References clear().
|
virtualdefault |
void DWARFUnit::clear | ( | ) |
Expected< DWARFAddressRangesVector > DWARFUnit::collectAddressRanges | ( | ) |
Definition at line 598 of file DWARFUnit.cpp.
References llvm::c_str(), llvm::createStringError(), llvm::DWARFDie::getAddressRanges(), getUnitDIE(), llvm::invalid_argument, and llvm::toString().
|
protected |
Find the unit's contribution to the string offsets table and determine its length and form.
The given offset is expected to be derived from the unit DIE's DW_AT_str_offsets_base attribute.
Definition at line 891 of file DWARFUnit.cpp.
References assert(), llvm::find(), llvm::DWARFUnitHeader::getFormat(), getUnitDIE(), llvm::None, parseDWARFStringOffsetsTableHeader(), and llvm::dwarf::toSectionOffset().
Referenced by tryExtractDIEsIfNeeded().
|
protected |
Find the unit's contribution to the string offsets table and determine its length and form.
The given offset is expected to be 0 in a dwo file or, in a dwp file, the start of the unit's contribution to the string offsets table section (as determined by the index table).
Definition at line 904 of file DWARFUnit.cpp.
References assert(), C, llvm::DWARFSection::Data, llvm::StringRef::data(), llvm::dwarf::DWARF32, llvm::StringRef::empty(), llvm::DataExtractor::getData(), llvm::DWARFUnitHeader::getFormat(), llvm::DWARFUnitHeader::getIndexEntry(), getVersion(), llvm::None, Offset, parseDWARFStringOffsetsTableHeader(), llvm::StringRef::size(), and llvm::StrOffsetsContributionDescriptor::validateContributionSize().
Referenced by tryExtractDIEsIfNeeded().
|
inline |
Definition at line 485 of file DWARFUnit.h.
|
pure virtual |
Implemented in llvm::DWARFTypeUnit, and llvm::DWARFCompileUnit.
Error DWARFUnit::extractRangeList | ( | uint64_t | RangeListOffset, |
DWARFDebugRangeList & | RangeList | ||
) | const |
Extract the range list referenced by this compile unit from the .debug_ranges section.
If the extraction is unsuccessful, an error is returned. Successful extraction requires that the compile unit has already been extracted.
Definition at line 328 of file DWARFUnit.cpp.
References assert(), Context, llvm::DWARFDebugRangeList::extract(), and getAddressByteSize().
Referenced by findRnglistFromOffset().
Expected< DWARFLocationExpressionsVector > DWARFUnit::findLoclistFromOffset | ( | uint64_t | Offset | ) |
Definition at line 613 of file DWARFUnit.cpp.
References getAddrOffsetSectionItem(), getBaseAddress(), getLocationTable(), llvm::joinErrors(), llvm::move(), Offset, llvm::Error::success(), and llvm::DWARFLocationTable::visitAbsoluteLocationList().
Expected< DWARFAddressRangesVector > DWARFUnit::findRnglistFromIndex | ( | uint32_t | Index | ) |
Return a vector of address ranges retrieved from an encoded range list whose offset is found via a table lookup given an index (DWARF v5 and later).
Definition at line 588 of file DWARFUnit.cpp.
References llvm::createStringError(), findRnglistFromOffset(), getRnglistOffset(), llvm::invalid_argument, and Offset.
Expected< DWARFAddressRangesVector > DWARFUnit::findRnglistFromOffset | ( | uint64_t | Offset | ) |
Return a vector of address ranges resulting from a (possibly encoded) range list starting at a given offset in the appropriate ranges section.
Definition at line 571 of file DWARFUnit.cpp.
References Context, E, extractRangeList(), llvm::DWARFListTableBase< DWARFListType >::findList(), llvm::DWARFDebugRangeList::getAbsoluteRanges(), llvm::DWARFUnitHeader::getAddressByteSize(), getBaseAddress(), getVersion(), llvm::move(), and Offset.
Referenced by findRnglistFromIndex().
const DWARFAbbreviationDeclarationSet * DWARFUnit::getAbbreviations | ( | ) | const |
Definition at line 795 of file DWARFUnit.cpp.
References llvm::DWARFDebugAbbrev::getAbbreviationDeclarationSet(), and llvm::DWARFUnitHeader::getAbbrOffset().
Referenced by llvm::DWARFCompileUnit::dump(), llvm::DWARFTypeUnit::dump(), and llvm::DWARFDebugInfoEntry::extractFast().
|
inline |
Definition at line 297 of file DWARFUnit.h.
References llvm::DWARFUnitHeader::getAbbrOffset().
Referenced by llvm::DWARFCompileUnit::dump(), and llvm::DWARFTypeUnit::dump().
|
inline |
Definition at line 288 of file DWARFUnit.h.
References llvm::DWARFUnitHeader::getAddressByteSize().
Referenced by llvm::DWARFCompileUnit::dump(), llvm::DWARFTypeUnit::dump(), dumpLocation(), llvm::DwarfStreamer::emitCompileUnitHeader(), llvm::DwarfStreamer::emitLocationsForUnit(), llvm::DwarfStreamer::emitUnitRangesEntries(), extractRangeList(), llvm::DWARFDebugRnglist::getAbsoluteRanges(), getAddrOffsetSectionItem(), getDebugInfoExtractor(), llvm::DWARFContext::getDebugLoc(), llvm::DWARFContext::getLineTableForUnit(), getRnglistOffset(), llvm::CompileUnit::markEverythingAsKept(), and tryExtractDIEsIfNeeded().
Optional< object::SectionedAddress > DWARFUnit::getAddrOffsetSectionItem | ( | uint32_t | Index | ) | const |
Definition at line 194 of file DWARFUnit.cpp.
References llvm::Address, Context, llvm::DWARFSection::Data, getAddressByteSize(), I, llvm::None, Offset, llvm::ARMBuildAttrs::Section, and llvm::StringRef::size().
Referenced by llvm::DWARFLocationTable::dumpLocationList(), findLoclistFromOffset(), and llvm::DWARFDebugRnglist::getAbsoluteRanges().
llvm::Optional< object::SectionedAddress > DWARFUnit::getBaseAddress | ( | ) |
Definition at line 801 of file DWARFUnit.cpp.
References llvm::DWARFDie::find(), getUnitDIE(), and llvm::dwarf::toSectionedAddress().
Referenced by dumpLocation(), findLoclistFromOffset(), and findRnglistFromOffset().
Definition at line 348 of file DWARFUnit.cpp.
References llvm::find(), getUnitDIE(), and llvm::dwarf::toString().
|
inline |
Definition at line 281 of file DWARFUnit.h.
References Context.
Referenced by dumpLocation(), and llvm::DeclContextTree::getChildDeclContext().
DWARFDataExtractor DWARFUnit::getDebugInfoExtractor | ( | ) | const |
Definition at line 188 of file DWARFUnit.cpp.
References Context, and getAddressByteSize().
Referenced by llvm::DWARFFormValue::createFromUnit(), llvm::DWARFDebugInfoEntry::extractFast(), and llvm::DWARFAbbreviationDeclaration::getAttributeValue().
Return the DIE object at the given index.
Definition at line 452 of file DWARFUnit.h.
References assert(), and Index.
Referenced by llvm::inFunctionScope(), and llvm::CompileUnit::markEverythingAsKept().
|
inline |
Return the DIE object for a given offset inside the unit's DIE vector.
The unit needs to have its DIEs extracted for this method to work.
Definition at line 467 of file DWARFUnit.h.
References llvm::DIE::getOffset(), Offset, and llvm::partition_point().
Referenced by llvm::DWARFTypeUnit::dump(), llvm::prettyPrintBaseTypeRef(), and llvm::DWARFExpression::Operation::verify().
Return the index of a DIE inside the unit's DIE vector.
It is illegal to call this method with a DIE that hasn't be created by this unit. In other word, it's illegal to call this method on a DIE that isn't accessible by following children/sibling links starting from this unit's getUnitDIE().
Definition at line 447 of file DWARFUnit.h.
References D.
|
inline |
Definition at line 290 of file DWARFUnit.h.
References llvm::DWARFUnitHeader::getDwarfOffsetByteSize().
|
inline |
Definition at line 347 of file DWARFUnit.h.
References assert().
Referenced by getStringOffsetSectionItem().
|
inline |
Definition at line 393 of file DWARFUnit.h.
References llvm::DWARFUnitHeader::getDWOId(), and getHeader().
Referenced by llvm::DWARFCompileUnit::dump().
DWARFDie DWARFUnit::getFirstChild | ( | const DWARFDebugInfoEntry * | Die | ) |
Definition at line 769 of file DWARFUnit.cpp.
References llvm::DWARFDebugInfoEntry::hasChildren(), and I.
|
inline |
Definition at line 294 of file DWARFUnit.h.
References llvm::DWARFUnitHeader::getFormat().
Referenced by llvm::DWARFCompileUnit::dump(), llvm::DWARFTypeUnit::dump(), getLoclistOffset(), and getRnglistOffset().
|
inline |
Definition at line 284 of file DWARFUnit.h.
References llvm::DWARFUnitHeader::getFormParams().
Referenced by llvm::DWARFFormValue::createFromUnit(), dumpLocation(), llvm::DWARFDebugInfoEntry::extractFast(), llvm::DWARFAbbreviationDeclaration::getAttributeValue(), and llvm::DWARFAbbreviationDeclaration::AttributeSpec::getByteSize().
|
inlineprotected |
Definition at line 252 of file DWARFUnit.h.
Referenced by getDWOId(), llvm::DWARFTypeUnit::getTypeHash(), and llvm::DWARFTypeUnit::getTypeOffset().
|
inlineprotected |
Size in bytes of the parsed unit header.
Definition at line 255 of file DWARFUnit.h.
References llvm::DWARFUnitHeader::getSize().
|
inline |
Definition at line 282 of file DWARFUnit.h.
void DWARFUnit::getInlinedChainForAddress | ( | uint64_t | Address, |
SmallVectorImpl< DWARFDie > & | InlinedChain | ||
) |
getInlinedChainForAddress - fetches inlined chain for a given address.
Returns empty chain if there is no subprogram containing address. The chain is valid as long as parsed compile unit DIEs are not cleared.
Definition at line 682 of file DWARFUnit.cpp.
References llvm::Address, assert(), llvm::SmallVectorBase< SmallVectorSizeType< T > >::empty(), llvm::DWARFDie::getParent(), getSubroutineForAddress(), llvm::DWARFDie::getTag(), llvm::DWARFDie::isSubprogramDIE(), and llvm::SmallVectorTemplateBase< T >::push_back().
DWARFDie DWARFUnit::getLastChild | ( | const DWARFDebugInfoEntry * | Die | ) |
Definition at line 780 of file DWARFUnit.cpp.
References assert(), llvm::Depth, llvm::DWARFDebugInfoEntry::getDepth(), getDepth(), llvm::DWARFDebugInfoEntry::hasChildren(), and I.
|
inline |
Definition at line 293 of file DWARFUnit.h.
References llvm::DWARFUnitHeader::getLength().
Referenced by llvm::DWARFCompileUnit::dump(), and llvm::DWARFTypeUnit::dump().
|
inline |
Definition at line 299 of file DWARFUnit.h.
Referenced by llvm::DWARFContext::getLineTableForUnit().
|
inline |
Definition at line 478 of file DWARFUnit.h.
References llvm::DWARFUnitHeader::getIndexEntry().
Referenced by llvm::DWARFContext::getLineTableForUnit().
|
inline |
Definition at line 332 of file DWARFUnit.h.
Referenced by dumpLocation(), and findLoclistFromOffset().
Definition at line 951 of file DWARFUnit.cpp.
References getFormat(), llvm::DWARFListTableHeader::getOffsetEntry(), Index, and llvm::None.
Referenced by dumpLocation().
|
inline |
Definition at line 318 of file DWARFUnit.h.
|
inline |
Definition at line 298 of file DWARFUnit.h.
References llvm::DWARFUnitHeader::getNextUnitOffset().
Referenced by llvm::DWARFCompileUnit::dump(), llvm::DWARFTypeUnit::dump(), and llvm::DWARFDebugInfoEntry::extractFast().
Definition at line 385 of file DWARFUnit.h.
References getUnitDIE().
|
inline |
Returns the number of DIEs in the unit.
Parses the unit if necessary.
Definition at line 436 of file DWARFUnit.h.
Referenced by llvm::CompileUnit::CompileUnit().
|
inline |
Definition at line 283 of file DWARFUnit.h.
References llvm::DWARFUnitHeader::getOffset().
Referenced by llvm::DWARFCompileUnit::dump(), llvm::DWARFTypeUnit::dump(), llvm::prettyPrintBaseTypeRef(), and llvm::DWARFExpression::Operation::verify().
DWARFDie DWARFUnit::getParent | ( | const DWARFDebugInfoEntry * | Die | ) |
Definition at line 711 of file DWARFUnit.cpp.
References llvm::Depth, llvm::DWARFDebugInfoEntry::getDepth(), getDepth(), getUnitDIE(), and I.
DWARFDie DWARFUnit::getPreviousSibling | ( | const DWARFDebugInfoEntry * | Die | ) |
Definition at line 750 of file DWARFUnit.cpp.
References llvm::Depth, llvm::DWARFDebugInfoEntry::getDepth(), getDepth(), and I.
|
inline |
Definition at line 289 of file DWARFUnit.h.
References llvm::DWARFUnitHeader::getRefAddrByteSize().
Return a rangelist's offset based on an index.
The index designates an entry in the rangelist table's offset array and is supplied by DW_FORM_rnglistx.
Definition at line 940 of file DWARFUnit.cpp.
References Context, llvm::DWARFSection::Data, getAddressByteSize(), getFormat(), llvm::DWARFListTableHeader::getOffsetEntry(), and llvm::None.
Referenced by findRnglistFromIndex().
DWARFDie DWARFUnit::getSibling | ( | const DWARFDebugInfoEntry * | Die | ) |
Definition at line 730 of file DWARFUnit.cpp.
References llvm::Depth, llvm::DWARFDebugInfoEntry::getAbbreviationDeclarationPtr(), llvm::DWARFDebugInfoEntry::getDepth(), getDepth(), and I.
|
inline |
Definition at line 328 of file DWARFUnit.h.
|
inline |
Definition at line 352 of file DWARFUnit.h.
References assert().
Referenced by getStringOffsetSectionItem().
|
inline |
Definition at line 301 of file DWARFUnit.h.
Definition at line 217 of file DWARFUnit.cpp.
References Context, llvm::DWARFSection::Data, getDwarfStringOffsetsByteSize(), getStringOffsetsBase(), llvm::None, Offset, and llvm::StringRef::size().
|
inline |
Definition at line 343 of file DWARFUnit.h.
|
inline |
Definition at line 300 of file DWARFUnit.h.
DWARFDie DWARFUnit::getSubroutineForAddress | ( | uint64_t | Address | ) |
Returns subprogram DIE with address range encompassing the provided address.
The pointer is alive as long as parsed compile unit DIEs are not cleared.
Definition at line 667 of file DWARFUnit.cpp.
References llvm::Address, getUnitDIE(), and updateAddressDieMap().
Referenced by getInlinedChainForAddress().
Definition at line 378 of file DWARFUnit.h.
Referenced by buildLineToUnitMap(), collectAddressRanges(), llvm::CompileUnit::CompileUnit(), llvm::CompileUnit::createOutputDIE(), determineStringOffsetsTableContribution(), llvm::DWARFCompileUnit::dump(), llvm::DWARFTypeUnit::dump(), llvm::DwarfStreamer::emitLocationsForUnit(), getBaseAddress(), getCompilationDir(), llvm::CompileUnit::getLanguage(), llvm::DWARFContext::getLineTableForUnit(), getNonSkeletonUnitDIE(), getParent(), getSubroutineForAddress(), and llvm::CompileUnit::getSysRoot().
|
inline |
Definition at line 295 of file DWARFUnit.h.
References llvm::DWARFUnitHeader::getUnitType().
Referenced by llvm::DWARFCompileUnit::dump(), and llvm::DWARFTypeUnit::dump().
|
inline |
Return the DWARFUnitVector containing this unit.
Definition at line 432 of file DWARFUnit.h.
|
inline |
Definition at line 287 of file DWARFUnit.h.
References llvm::DWARFUnitHeader::getVersion().
Referenced by determineStringOffsetsTableContributionDWO(), llvm::DWARFCompileUnit::dump(), llvm::DWARFTypeUnit::dump(), findRnglistFromOffset(), and tryExtractDIEsIfNeeded().
|
inline |
Definition at line 280 of file DWARFUnit.h.
|
inlinestatic |
Definition at line 359 of file DWARFUnit.h.
References llvm::dwarf::isUnitType(), and llvm::Tag.
|
inline |
Definition at line 296 of file DWARFUnit.h.
References llvm::DWARFUnitHeader::isTypeUnit().
Referenced by llvm::DWARFCompileUnit::classof(), and llvm::DWARFTypeUnit::classof().
|
inline |
Definition at line 305 of file DWARFUnit.h.
|
inline |
Definition at line 397 of file DWARFUnit.h.
References llvm::DWARFUnitHeader::setDWOId().
|
inline |
Definition at line 313 of file DWARFUnit.h.
Referenced by tryExtractDIEsIfNeeded().
Definition at line 414 of file DWARFUnit.cpp.
References assert(), C, Context, llvm::createStringError(), llvm::Data, determineStringOffsetsTableContribution(), determineStringOffsetsTableContributionDWO(), llvm::DW_SECT_EXT_LOC, llvm::DWARFDie::find(), getAddressByteSize(), llvm::DWARFUnitHeader::getFormat(), llvm::DWARFListTableHeader::getHeaderSize(), llvm::DWARFUnitHeader::getIndexEntry(), llvm::DWARFUnitHeader::getVersion(), getVersion(), llvm::invalid_argument, llvm::None, llvm::DWARFUnitHeader::setDWOId(), setRangesSection(), llvm::Error::success(), llvm::dwarf::toSectionOffset(), llvm::toString(), and llvm::dwarf::toUnsigned().
void DWARFUnit::updateAddressDieMap | ( | DWARFDie | Die | ) |
Recursively update address to Die map.
Definition at line 636 of file DWARFUnit.cpp.
References B, llvm::consumeError(), llvm::DWARFDie::getAddressRanges(), llvm::DWARFDie::getFirstChild(), llvm::DWARFDie::getSibling(), and llvm::DWARFDie::isSubroutineDIE().
Referenced by getSubroutineForAddress().