summaryrefslogtreecommitdiff
path: root/source/Symbol/SymbolVendor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Symbol/SymbolVendor.cpp')
-rw-r--r--source/Symbol/SymbolVendor.cpp89
1 files changed, 48 insertions, 41 deletions
diff --git a/source/Symbol/SymbolVendor.cpp b/source/Symbol/SymbolVendor.cpp
index 245f7bbf8add..a9badc15a5d6 100644
--- a/source/Symbol/SymbolVendor.cpp
+++ b/source/Symbol/SymbolVendor.cpp
@@ -9,10 +9,6 @@
#include "lldb/Symbol/SymbolVendor.h"
-// C Includes
-// C++ Includes
-// Other libraries and framework includes
-// Project includes
#include "lldb/Core/Module.h"
#include "lldb/Core/PluginManager.h"
#include "lldb/Symbol/CompileUnit.h"
@@ -61,7 +57,7 @@ SymbolVendor *SymbolVendor::FindPlugin(const lldb::ModuleSP &module_sp,
//----------------------------------------------------------------------
SymbolVendor::SymbolVendor(const lldb::ModuleSP &module_sp)
: ModuleChild(module_sp), m_type_list(), m_compile_units(),
- m_sym_file_ap() {}
+ m_sym_file_ap(), m_symtab() {}
//----------------------------------------------------------------------
// Destructor
@@ -122,63 +118,62 @@ size_t SymbolVendor::GetNumCompileUnits() {
return m_compile_units.size();
}
-lldb::LanguageType
-SymbolVendor::ParseCompileUnitLanguage(const SymbolContext &sc) {
+lldb::LanguageType SymbolVendor::ParseLanguage(CompileUnit &comp_unit) {
ModuleSP module_sp(GetModule());
if (module_sp) {
std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex());
if (m_sym_file_ap.get())
- return m_sym_file_ap->ParseCompileUnitLanguage(sc);
+ return m_sym_file_ap->ParseLanguage(comp_unit);
}
return eLanguageTypeUnknown;
}
-size_t SymbolVendor::ParseCompileUnitFunctions(const SymbolContext &sc) {
+size_t SymbolVendor::ParseFunctions(CompileUnit &comp_unit) {
ModuleSP module_sp(GetModule());
if (module_sp) {
std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex());
if (m_sym_file_ap.get())
- return m_sym_file_ap->ParseCompileUnitFunctions(sc);
+ return m_sym_file_ap->ParseFunctions(comp_unit);
}
return 0;
}
-bool SymbolVendor::ParseCompileUnitLineTable(const SymbolContext &sc) {
+bool SymbolVendor::ParseLineTable(CompileUnit &comp_unit) {
ModuleSP module_sp(GetModule());
if (module_sp) {
std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex());
if (m_sym_file_ap.get())
- return m_sym_file_ap->ParseCompileUnitLineTable(sc);
+ return m_sym_file_ap->ParseLineTable(comp_unit);
}
return false;
}
-bool SymbolVendor::ParseCompileUnitDebugMacros(const SymbolContext &sc) {
+bool SymbolVendor::ParseDebugMacros(CompileUnit &comp_unit) {
ModuleSP module_sp(GetModule());
if (module_sp) {
std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex());
if (m_sym_file_ap.get())
- return m_sym_file_ap->ParseCompileUnitDebugMacros(sc);
+ return m_sym_file_ap->ParseDebugMacros(comp_unit);
}
return false;
}
-bool SymbolVendor::ParseCompileUnitSupportFiles(const SymbolContext &sc,
- FileSpecList &support_files) {
+bool SymbolVendor::ParseSupportFiles(CompileUnit &comp_unit,
+ FileSpecList &support_files) {
ModuleSP module_sp(GetModule());
if (module_sp) {
std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex());
if (m_sym_file_ap.get())
- return m_sym_file_ap->ParseCompileUnitSupportFiles(sc, support_files);
+ return m_sym_file_ap->ParseSupportFiles(comp_unit, support_files);
}
return false;
}
-bool SymbolVendor::ParseCompileUnitIsOptimized(const SymbolContext &sc) {
+bool SymbolVendor::ParseIsOptimized(CompileUnit &comp_unit) {
ModuleSP module_sp(GetModule());
if (module_sp) {
std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex());
if (m_sym_file_ap.get())
- return m_sym_file_ap->ParseCompileUnitIsOptimized(sc);
+ return m_sym_file_ap->ParseIsOptimized(comp_unit);
}
return false;
}
@@ -194,22 +189,22 @@ bool SymbolVendor::ParseImportedModules(
return false;
}
-size_t SymbolVendor::ParseFunctionBlocks(const SymbolContext &sc) {
+size_t SymbolVendor::ParseBlocksRecursive(Function &func) {
ModuleSP module_sp(GetModule());
if (module_sp) {
std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex());
if (m_sym_file_ap.get())
- return m_sym_file_ap->ParseFunctionBlocks(sc);
+ return m_sym_file_ap->ParseBlocksRecursive(func);
}
return 0;
}
-size_t SymbolVendor::ParseTypes(const SymbolContext &sc) {
+size_t SymbolVendor::ParseTypes(CompileUnit &comp_unit) {
ModuleSP module_sp(GetModule());
if (module_sp) {
std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex());
if (m_sym_file_ap.get())
- return m_sym_file_ap->ParseTypes(sc);
+ return m_sym_file_ap->ParseTypes(comp_unit);
}
return 0;
}
@@ -235,7 +230,7 @@ Type *SymbolVendor::ResolveTypeUID(lldb::user_id_t type_uid) {
}
uint32_t SymbolVendor::ResolveSymbolContext(const Address &so_addr,
- uint32_t resolve_scope,
+ SymbolContextItem resolve_scope,
SymbolContext &sc) {
ModuleSP module_sp(GetModule());
if (module_sp) {
@@ -248,7 +243,7 @@ uint32_t SymbolVendor::ResolveSymbolContext(const Address &so_addr,
uint32_t SymbolVendor::ResolveSymbolContext(const FileSpec &file_spec,
uint32_t line, bool check_inlines,
- uint32_t resolve_scope,
+ SymbolContextItem resolve_scope,
SymbolContextList &sc_list) {
ModuleSP module_sp(GetModule());
if (module_sp) {
@@ -288,7 +283,7 @@ size_t SymbolVendor::FindGlobalVariables(const RegularExpression &regex,
size_t SymbolVendor::FindFunctions(const ConstString &name,
const CompilerDeclContext *parent_decl_ctx,
- uint32_t name_type_mask,
+ FunctionNameType name_type_mask,
bool include_inlines, bool append,
SymbolContextList &sc_list) {
ModuleSP module_sp(GetModule());
@@ -315,15 +310,15 @@ size_t SymbolVendor::FindFunctions(const RegularExpression &regex,
}
size_t SymbolVendor::FindTypes(
- const SymbolContext &sc, const ConstString &name,
- const CompilerDeclContext *parent_decl_ctx, bool append, size_t max_matches,
+ const ConstString &name, const CompilerDeclContext *parent_decl_ctx,
+ bool append, size_t max_matches,
llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files,
TypeMap &types) {
ModuleSP module_sp(GetModule());
if (module_sp) {
std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex());
if (m_sym_file_ap.get())
- return m_sym_file_ap->FindTypes(sc, name, parent_decl_ctx, append,
+ return m_sym_file_ap->FindTypes(name, parent_decl_ctx, append,
max_matches, searched_symbol_files,
types);
}
@@ -345,7 +340,7 @@ size_t SymbolVendor::FindTypes(const std::vector<CompilerContext> &context,
return 0;
}
-size_t SymbolVendor::GetTypes(SymbolContextScope *sc_scope, uint32_t type_mask,
+size_t SymbolVendor::GetTypes(SymbolContextScope *sc_scope, TypeClass type_mask,
lldb_private::TypeList &type_list) {
ModuleSP module_sp(GetModule());
if (module_sp) {
@@ -357,15 +352,14 @@ size_t SymbolVendor::GetTypes(SymbolContextScope *sc_scope, uint32_t type_mask,
}
CompilerDeclContext
-SymbolVendor::FindNamespace(const SymbolContext &sc, const ConstString &name,
+SymbolVendor::FindNamespace(const ConstString &name,
const CompilerDeclContext *parent_decl_ctx) {
CompilerDeclContext namespace_decl_ctx;
ModuleSP module_sp(GetModule());
if (module_sp) {
std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex());
if (m_sym_file_ap.get())
- namespace_decl_ctx =
- m_sym_file_ap->FindNamespace(sc, name, parent_decl_ctx);
+ namespace_decl_ctx = m_sym_file_ap->FindNamespace(name, parent_decl_ctx);
}
return namespace_decl_ctx;
}
@@ -381,6 +375,7 @@ void SymbolVendor::Dump(Stream *s) {
s->Indent();
s->PutCString("SymbolVendor");
if (m_sym_file_ap.get()) {
+ *s << " " << m_sym_file_ap->GetPluginName();
ObjectFile *objfile = m_sym_file_ap->GetObjectFile();
if (objfile) {
const FileSpec &objfile_file_spec = objfile->GetFileSpec();
@@ -405,6 +400,9 @@ void SymbolVendor::Dump(Stream *s) {
(*cu_pos)->Dump(s, show_context);
}
+ if (Symtab *symtab = GetSymtab())
+ symtab->Dump(s, nullptr, eSortOrderNone);
+
s->IndentLess();
}
}
@@ -438,14 +436,23 @@ FileSpec SymbolVendor::GetMainFileSpec() const {
Symtab *SymbolVendor::GetSymtab() {
ModuleSP module_sp(GetModule());
- if (module_sp) {
- ObjectFile *objfile = module_sp->GetObjectFile();
- if (objfile) {
- // Get symbol table from unified section list.
- return objfile->GetSymtab();
- }
- }
- return nullptr;
+ if (!module_sp)
+ return nullptr;
+
+ std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex());
+
+ if (m_symtab)
+ return m_symtab;
+
+ ObjectFile *objfile = module_sp->GetObjectFile();
+ if (!objfile)
+ return nullptr;
+
+ m_symtab = objfile->GetSymtab();
+ if (m_symtab && m_sym_file_ap)
+ m_sym_file_ap->AddSymbols(*m_symtab);
+
+ return m_symtab;
}
void SymbolVendor::ClearSymtab() {