[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