diff options
Diffstat (limited to 'lldb/source/Plugins/SymbolFile')
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; |