[llvm] r227381 - Add DWARFUnit::getNumDIEs() and getDIEIndex()

Frederic Riss friss at apple.com
Wed Jan 28 14:15:07 PST 2015


Author: friss
Date: Wed Jan 28 16:15:07 2015
New Revision: 227381

URL: http://llvm.org/viewvc/llvm-project?rev=227381&view=rev
Log:
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.

Modified:
    llvm/trunk/include/llvm/DebugInfo/DWARFUnit.h

Modified: llvm/trunk/include/llvm/DebugInfo/DWARFUnit.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DWARFUnit.h?rev=227381&r1=227380&r2=227381&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/DWARFUnit.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/DWARFUnit.h Wed Jan 28 16:15:07 2015
@@ -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(); }





More information about the llvm-commits mailing list