summaryrefslogtreecommitdiff
path: root/lldb/source/Symbol/Symtab.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Symbol/Symtab.cpp')
-rw-r--r--lldb/source/Symbol/Symtab.cpp39
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);