[Lldb-commits] [lldb] 1b96e13 - [lldb/DWARF] Simplify DIE extraction code slightly

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Mon Mar 29 23:44:26 PDT 2021


Author: Pavel Labath
Date: 2021-03-30T08:44:17+02:00
New Revision: 1b96e133cf5215cb9ebfe7f14630f479c1611f22

URL: https://github.com/llvm/llvm-project/commit/1b96e133cf5215cb9ebfe7f14630f479c1611f22
DIFF: https://github.com/llvm/llvm-project/commit/1b96e133cf5215cb9ebfe7f14630f479c1611f22.diff

LOG: [lldb/DWARF] Simplify DIE extraction code slightly

Remove the "depth" variable, as the same information can be obtained
through die_index_stack.size().

Also add a test case for a one tricky case I noticed -- a unit
containing only a null unit die.

Added: 
    

Modified: 
    lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
index 86b18615da7d..e501bb9af7fb 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
@@ -153,17 +153,15 @@ void DWARFUnit::ExtractDIEsRWLocked() {
 
   DWARFDebugInfoEntry die;
 
-  uint32_t depth = 0;
   // We are in our compile unit, parse starting at the offset we were told to
   // parse
   const DWARFDataExtractor &data = GetData();
   std::vector<uint32_t> die_index_stack;
   die_index_stack.reserve(32);
-  die_index_stack.push_back(0);
   bool prev_die_had_children = false;
   while (offset < next_cu_offset && die.Extract(data, this, &offset)) {
     const bool null_die = die.IsNULL();
-    if (depth == 0) {
+    if (die_index_stack.size() == 0) {
       assert(m_die_array.empty() && "Compile unit DIE already added");
 
       // The average bytes per DIE entry has been seen to be around 14-20 so
@@ -201,11 +199,12 @@ void DWARFUnit::ExtractDIEsRWLocked() {
             m_die_array.back().SetHasChildren(false);
         }
       } else {
-        die.SetParentIndex(m_die_array.size() - die_index_stack[depth - 1]);
+        die.SetParentIndex(m_die_array.size() - die_index_stack.rbegin()[1]);
 
         if (die_index_stack.back())
           m_die_array[die_index_stack.back()].SetSiblingIndex(
               m_die_array.size() - die_index_stack.back());
+        die_index_stack.back() = m_die_array.size();
 
         // Only push the DIE if it isn't a NULL DIE
         m_die_array.push_back(die);
@@ -214,24 +213,19 @@ void DWARFUnit::ExtractDIEsRWLocked() {
 
     if (null_die) {
       // NULL DIE.
-      if (!die_index_stack.empty())
+      if (!die_index_stack.empty()) {
         die_index_stack.pop_back();
-
-      if (depth > 0)
-        --depth;
-      prev_die_had_children = false;
+        prev_die_had_children = false;
+      }
     } else {
-      die_index_stack.back() = m_die_array.size() - 1;
       // Normal DIE
       const bool die_has_children = die.HasChildren();
-      if (die_has_children) {
+      if (die_has_children)
         die_index_stack.push_back(0);
-        ++depth;
-      }
       prev_die_had_children = die_has_children;
     }
 
-    if (depth == 0)
+    if (die_index_stack.size() == 0)
       break; // We are done with this compile unit!
   }
 


        


More information about the lldb-commits mailing list