summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/SymbolFile
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Plugins/SymbolFile')
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp10
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h10
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp4
3 files changed, 16 insertions, 8 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp
index aa8699f0ad2..096710cd258 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp
@@ -271,7 +271,17 @@ DWARFCompileUnit::ExtractDIEsIfNeeded (bool cu_die_only)
}
fprintf (stderr, "warning: DWARF compile unit extends beyond its bounds cu 0x%8.8x at 0x%8.8x in '%s'\n", GetOffset(), offset, path);
}
+
+ // Since std::vector objects will double their size, we really need to
+ // make a new array with the perfect size so we don't end up wasting
+ // space. So here we copy and swap to make sure we don't have any extra
+ // memory taken up.
+ if (m_die_array.size () < m_die_array.capacity())
+ {
+ DWARFDebugInfoEntry::collection exact_size_die_array (m_die_array.begin(), m_die_array.end());
+ exact_size_die_array.swap (m_die_array);
+ }
LogSP log (LogChannelDWARF::GetLogIfAll (DWARF_LOG_DEBUG_INFO));
if (log)
{
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h
index 49b05d14473..fc3dd3bbb01 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h
@@ -74,13 +74,11 @@ public:
}
void
- AddDIE(DWARFDebugInfoEntry& die)
+ AddDIE (DWARFDebugInfoEntry& die)
{
// The average bytes per DIE entry has been seen to be
- // around 14-20 so lets pre-reserve the needed memory for
- // our DIE entries accordingly. Search forward for "Compute
- // average bytes per DIE" to see #if'ed out code that does
- // that determination.
+ // around 14-20 so lets pre-reserve half of that since
+ // we are now stripping the NULL tags.
// Only reserve the memory if we are adding children of
// the main compile unit DIE. The compile unit DIE is always
@@ -88,7 +86,7 @@ public:
// the first compile unit child DIE and should reserve
// the memory.
if (m_die_array.empty())
- m_die_array.reserve(GetDebugInfoSize() / 14);
+ m_die_array.reserve(GetDebugInfoSize() / 24);
m_die_array.push_back(die);
}
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp
index 0d2adb05cf9..20bac6b7423 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp
@@ -1926,8 +1926,8 @@ DWARFDebugInfoEntry::DumpDIECollection (Stream &strm, DWARFDebugInfoEntry::colle
{
DWARFDebugInfoEntry::const_iterator pos;
DWARFDebugInfoEntry::const_iterator end = die_collection.end();
- puts("offset parent sibling child");
- puts("-------- -------- -------- --------");
+ strm.PutCString("\noffset parent sibling child\n");
+ strm.PutCString("-------- -------- -------- --------\n");
for (pos = die_collection.begin(); pos != end; ++pos)
{
const DWARFDebugInfoEntry& die_ref = *pos;
OpenPOWER on IntegriCloud