diff options
Diffstat (limited to 'lldb/source/Symbol/Symtab.cpp')
| -rw-r--r-- | lldb/source/Symbol/Symtab.cpp | 39 |
1 files changed, 15 insertions, 24 deletions
diff --git a/lldb/source/Symbol/Symtab.cpp b/lldb/source/Symbol/Symtab.cpp index c4e6c2ccfb098..f5bd22ee5ee27 100644 --- a/lldb/source/Symbol/Symtab.cpp +++ b/lldb/source/Symbol/Symtab.cpp @@ -13,7 +13,6 @@ #include "lldb/Core/Module.h" #include "lldb/Core/RichManglingContext.h" -#include "lldb/Core/STLUtils.h" #include "lldb/Core/Section.h" #include "lldb/Symbol/ObjectFile.h" #include "lldb/Symbol/Symbol.h" @@ -29,7 +28,7 @@ using namespace lldb; using namespace lldb_private; Symtab::Symtab(ObjectFile *objfile) - : m_objfile(objfile), m_symbols(), m_file_addr_to_index(), + : m_objfile(objfile), m_symbols(), m_file_addr_to_index(*this), m_name_to_index(), m_mutex(), m_file_addr_to_index_computed(false), m_name_indexes_computed(false) {} @@ -70,7 +69,8 @@ void Symtab::SectionFileAddressesChanged() { m_file_addr_to_index_computed = false; } -void Symtab::Dump(Stream *s, Target *target, SortOrder sort_order) { +void Symtab::Dump(Stream *s, Target *target, SortOrder sort_order, + Mangled::NamePreference name_preference) { std::lock_guard<std::recursive_mutex> guard(m_mutex); // s->Printf("%.*p: ", (int)sizeof(void*) * 2, this); @@ -97,7 +97,7 @@ void Symtab::Dump(Stream *s, Target *target, SortOrder sort_order) { const_iterator end = m_symbols.end(); for (const_iterator pos = m_symbols.begin(); pos != end; ++pos) { s->Indent(); - pos->Dump(s, target, std::distance(begin, pos)); + pos->Dump(s, target, std::distance(begin, pos), name_preference); } } break; @@ -106,10 +106,8 @@ void Symtab::Dump(Stream *s, Target *target, SortOrder sort_order) { // sorted by name. So we must make the ordered symbol list up ourselves. s->PutCString(" (sorted by name):\n"); DumpSymbolHeader(s); - typedef std::multimap<const char *, const Symbol *, - CStringCompareFunctionObject> - CStringToSymbol; - CStringToSymbol name_map; + + std::multimap<llvm::StringRef, const Symbol *> name_map; for (const_iterator pos = m_symbols.begin(), end = m_symbols.end(); pos != end; ++pos) { const char *name = pos->GetName().AsCString(); @@ -117,11 +115,10 @@ void Symtab::Dump(Stream *s, Target *target, SortOrder sort_order) { name_map.insert(std::make_pair(name, &(*pos))); } - for (CStringToSymbol::const_iterator pos = name_map.begin(), - end = name_map.end(); - pos != end; ++pos) { + for (const auto &name_to_symbol : name_map) { + const Symbol *symbol = name_to_symbol.second; s->Indent(); - pos->second->Dump(s, target, pos->second - &m_symbols[0]); + symbol->Dump(s, target, symbol - &m_symbols[0], name_preference); } } break; @@ -134,7 +131,7 @@ void Symtab::Dump(Stream *s, Target *target, SortOrder sort_order) { for (size_t i = 0; i < num_entries; ++i) { s->Indent(); const uint32_t symbol_idx = m_file_addr_to_index.GetEntryRef(i).data; - m_symbols[symbol_idx].Dump(s, target, symbol_idx); + m_symbols[symbol_idx].Dump(s, target, symbol_idx, name_preference); } break; } @@ -143,8 +140,8 @@ void Symtab::Dump(Stream *s, Target *target, SortOrder sort_order) { } } -void Symtab::Dump(Stream *s, Target *target, - std::vector<uint32_t> &indexes) const { +void Symtab::Dump(Stream *s, Target *target, std::vector<uint32_t> &indexes, + Mangled::NamePreference name_preference) const { std::lock_guard<std::recursive_mutex> guard(m_mutex); const size_t num_symbols = GetNumSymbols(); @@ -162,7 +159,7 @@ void Symtab::Dump(Stream *s, Target *target, size_t idx = *pos; if (idx < num_symbols) { s->Indent(); - m_symbols[idx].Dump(s, target, idx); + m_symbols[idx].Dump(s, target, idx, name_preference); } } } @@ -893,14 +890,8 @@ void Symtab::InitAddressIndexes() { for (size_t i = 0; i < num_entries; i++) { FileRangeToIndexMap::Entry *entry = m_file_addr_to_index.GetMutableEntryAtIndex(i); - if (entry->GetByteSize() > 0) - continue; - addr_t curr_base_addr = entry->GetRangeBase(); - // Symbols with non-zero size will show after zero-sized symbols on the - // same address. So do not set size of a non-last zero-sized symbol. - if (i == num_entries - 1 || - m_file_addr_to_index.GetMutableEntryAtIndex(i + 1) - ->GetRangeBase() != curr_base_addr) { + if (entry->GetByteSize() == 0) { + addr_t curr_base_addr = entry->GetRangeBase(); const RangeVector<addr_t, addr_t>::Entry *containing_section = section_ranges.FindEntryThatContains(curr_base_addr); |
