From 33c9f17f2c6d09a617fe056dd871240c28938371 Mon Sep 17 00:00:00 2001 From: Frederic Riss Date: Wed, 28 Jan 2015 22:15:07 +0000 Subject: [PATCH] Add DWARFUnit::getNumDIEs() and getDIEIndex() Parsed DIEs are stored in a vector and that makes it easy to get their indices. Having easy access to a DIE's index makes it possible to use arrays or vectors to efficiently store/access DIE related information. There's no test for that new functionality (I don't see how to test it standalone), but it'll be used in a subsequent dsymutil commit. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227381 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/DebugInfo/DWARFUnit.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/include/llvm/DebugInfo/DWARFUnit.h b/include/llvm/DebugInfo/DWARFUnit.h index d71a1b60b73..0413a9431d1 100644 --- a/include/llvm/DebugInfo/DWARFUnit.h +++ b/include/llvm/DebugInfo/DWARFUnit.h @@ -213,6 +213,26 @@ public: /// getUnitSection - Return the DWARFUnitSection containing this unit. const DWARFUnitSectionBase &getUnitSection() const { return UnitSection; } + /// \brief Returns the number of DIEs in the unit. Parses the unit + /// if necessary. + unsigned getNumDIEs() { + extractDIEsIfNeeded(false); + return DieArray.size(); + } + + /// \brief 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 + /// getCompileUnitDIE(). + uint32_t getDIEIndex(const DWARFDebugInfoEntryMinimal *DIE) { + assert(!DieArray.empty() && DIE >= &DieArray[0] && + DIE < &DieArray[0] + DieArray.size()); + return DIE - &DieArray[0]; + } + private: /// Size in bytes of the .debug_info data associated with this compile unit. size_t getDebugInfoSize() const { return Length + 4 - getHeaderSize(); }