DWARFUnit: Add a couple of helpers to access the DIE array.

To be used in dsymutil (or any other client that wants to take
advantage of the fact that DIEs are stored in a vector).

llvm-svn: 229179
This commit is contained in:
Frederic Riss 2015-02-13 23:18:24 +00:00
parent 1036e64bcc
commit 898a67dfb7
1 changed files with 20 additions and 0 deletions

View File

@ -233,6 +233,26 @@ public:
return DIE - &DieArray[0];
}
/// \brief Return the DIE object at the given index.
const DWARFDebugInfoEntryMinimal *getDIEAtIndex(unsigned Index) const {
assert(Index < DieArray.size());
return &DieArray[Index];
}
/// \brief Return the DIE object for a given offset inside the
/// unit's DIE vector.
///
/// The unit needs to have his DIEs extracted for this method to work.
const DWARFDebugInfoEntryMinimal *getDIEForOffset(uint32_t Offset) const {
assert(!DieArray.empty());
auto it = std::lower_bound(
DieArray.begin(), DieArray.end(), Offset,
[=](const DWARFDebugInfoEntryMinimal &LHS, uint32_t Offset) {
return LHS.getOffset() < Offset;
});
return it == DieArray.end() ? nullptr : &*it;
}
private:
/// Size in bytes of the .debug_info data associated with this compile unit.
size_t getDebugInfoSize() const { return Length + 4 - getHeaderSize(); }