diff --git a/lldb/include/lldb/Symbol/Symtab.h b/lldb/include/lldb/Symbol/Symtab.h index da929ccdf508..6f0a9ac14509 100644 --- a/lldb/include/lldb/Symbol/Symtab.h +++ b/lldb/include/lldb/Symbol/Symtab.h @@ -78,6 +78,16 @@ public: static void DumpSymbolHeader (Stream *s); + + void Finalize () + { + // Shrink to fit the symbols so we don't waste memory + if (m_symbols.capacity() > m_symbols.size()) + { + collection new_symbols (m_symbols.begin(), m_symbols.end()); + m_symbols.swap (new_symbols); + } + } protected: typedef std::vector collection; typedef collection::iterator iterator; diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp index 0e9b1219d092..a8f33f2062e2 100644 --- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp +++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp @@ -320,6 +320,7 @@ ObjectFileMachO::GetSymtab() m_symtab_ap.reset(new Symtab(this)); Mutex::Locker symtab_locker (m_symtab_ap->GetMutex()); ParseSymtab (true); + m_symtab_ap->Finalize (); } return m_symtab_ap.get(); } @@ -1488,6 +1489,8 @@ ObjectFileMachO::ParseSymtab (bool minimize) } } } + + return symtab->GetNumSymbols(); }