diff options
Diffstat (limited to 'source/Symbol/SymbolVendor.cpp')
| -rw-r--r-- | source/Symbol/SymbolVendor.cpp | 89 |
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 ®ex, 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 ®ex, } 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() { |
