This revision was automatically updated to reflect the committed changes. Closed by commit rL367086: SymbolVendor: Move Symtab construction into the SymbolFile (authored by labath, committed by ). Herald added a project: LLVM. Herald added a subscriber: llvm-commits.
Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D65208/new/ https://reviews.llvm.org/D65208 Files: lldb/trunk/include/lldb/Symbol/SymbolFile.h lldb/trunk/include/lldb/Symbol/SymbolVendor.h lldb/trunk/source/Symbol/SymbolFile.cpp lldb/trunk/source/Symbol/SymbolVendor.cpp lldb/trunk/unittests/Core/CMakeLists.txt lldb/trunk/unittests/Core/MangledTest.cpp lldb/trunk/unittests/ObjectFile/ELF/CMakeLists.txt lldb/trunk/unittests/ObjectFile/ELF/TestObjectFileELF.cpp lldb/trunk/unittests/Symbol/CMakeLists.txt lldb/trunk/unittests/Symbol/TestDWARFCallFrameInfo.cpp lldb/trunk/unittests/Target/CMakeLists.txt lldb/trunk/unittests/Target/ModuleCacheTest.cpp
Index: lldb/trunk/unittests/ObjectFile/ELF/TestObjectFileELF.cpp =================================================================== --- lldb/trunk/unittests/ObjectFile/ELF/TestObjectFileELF.cpp +++ lldb/trunk/unittests/ObjectFile/ELF/TestObjectFileELF.cpp @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// #include "Plugins/ObjectFile/ELF/ObjectFileELF.h" -#include "Plugins/SymbolVendor/ELF/SymbolVendorELF.h" +#include "Plugins/SymbolFile/Symtab/SymbolFileSymtab.h" #include "TestingSupport/TestUtilities.h" #include "lldb/Core/Module.h" #include "lldb/Core/ModuleSpec.h" @@ -34,11 +34,11 @@ FileSystem::Initialize(); HostInfo::Initialize(); ObjectFileELF::Initialize(); - SymbolVendorELF::Initialize(); + SymbolFileSymtab::Initialize(); } void TearDown() override { - SymbolVendorELF::Terminate(); + SymbolFileSymtab::Terminate(); ObjectFileELF::Terminate(); HostInfo::Terminate(); FileSystem::Terminate(); Index: lldb/trunk/unittests/ObjectFile/ELF/CMakeLists.txt =================================================================== --- lldb/trunk/unittests/ObjectFile/ELF/CMakeLists.txt +++ lldb/trunk/unittests/ObjectFile/ELF/CMakeLists.txt @@ -3,7 +3,7 @@ LINK_LIBS lldbPluginObjectFileELF - lldbPluginSymbolVendorELF + lldbPluginSymbolFileSymtab lldbCore lldbUtilityHelpers LLVMTestingSupport Index: lldb/trunk/unittests/Symbol/TestDWARFCallFrameInfo.cpp =================================================================== --- lldb/trunk/unittests/Symbol/TestDWARFCallFrameInfo.cpp +++ lldb/trunk/unittests/Symbol/TestDWARFCallFrameInfo.cpp @@ -11,6 +11,7 @@ #include "Plugins/ObjectFile/ELF/ObjectFileELF.h" #include "Plugins/Process/Utility/RegisterContext_x86.h" +#include "Plugins/SymbolFile/Symtab/SymbolFileSymtab.h" #include "TestingSupport/TestUtilities.h" #include "lldb/Core/Module.h" @@ -36,9 +37,11 @@ FileSystem::Initialize(); HostInfo::Initialize(); ObjectFileELF::Initialize(); + SymbolFileSymtab::Initialize(); } void TearDown() override { + SymbolFileSymtab::Terminate(); ObjectFileELF::Terminate(); HostInfo::Terminate(); FileSystem::Terminate(); Index: lldb/trunk/unittests/Symbol/CMakeLists.txt =================================================================== --- lldb/trunk/unittests/Symbol/CMakeLists.txt +++ lldb/trunk/unittests/Symbol/CMakeLists.txt @@ -13,6 +13,7 @@ lldbPluginObjectFileELF lldbPluginObjectFileMachO lldbPluginSymbolFileDWARF + lldbPluginSymbolFileSymtab LLVMTestingSupport ) Index: lldb/trunk/unittests/Core/CMakeLists.txt =================================================================== --- lldb/trunk/unittests/Core/CMakeLists.txt +++ lldb/trunk/unittests/Core/CMakeLists.txt @@ -9,7 +9,7 @@ lldbHost lldbSymbol lldbPluginObjectFileELF - lldbPluginSymbolVendorELF + lldbPluginSymbolFileSymtab lldbUtilityHelpers LLVMTestingSupport LINK_COMPONENTS Index: lldb/trunk/unittests/Core/MangledTest.cpp =================================================================== --- lldb/trunk/unittests/Core/MangledTest.cpp +++ lldb/trunk/unittests/Core/MangledTest.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "Plugins/ObjectFile/ELF/ObjectFileELF.h" -#include "Plugins/SymbolVendor/ELF/SymbolVendorELF.h" +#include "Plugins/SymbolFile/Symtab/SymbolFileSymtab.h" #include "TestingSupport/TestUtilities.h" #include "lldb/Core/Mangled.h" @@ -54,7 +54,7 @@ FileSystem::Initialize(); HostInfo::Initialize(); ObjectFileELF::Initialize(); - SymbolVendorELF::Initialize(); + SymbolFileSymtab::Initialize(); llvm::SmallString<128> Obj; ASSERT_NO_ERROR(llvm::sys::fs::createTemporaryFile( @@ -146,7 +146,7 @@ EXPECT_EQ(0, Count("undemangable", eFunctionNameTypeBase)); EXPECT_EQ(0, Count("undemangable", eFunctionNameTypeMethod)); - SymbolVendorELF::Terminate(); + SymbolFileSymtab::Terminate(); ObjectFileELF::Terminate(); HostInfo::Terminate(); FileSystem::Terminate(); Index: lldb/trunk/unittests/Target/CMakeLists.txt =================================================================== --- lldb/trunk/unittests/Target/CMakeLists.txt +++ lldb/trunk/unittests/Target/CMakeLists.txt @@ -10,6 +10,7 @@ lldbSymbol lldbUtility lldbPluginObjectFileELF + lldbPluginSymbolFileSymtab lldbUtilityHelpers LINK_COMPONENTS Support Index: lldb/trunk/unittests/Target/ModuleCacheTest.cpp =================================================================== --- lldb/trunk/unittests/Target/ModuleCacheTest.cpp +++ lldb/trunk/unittests/Target/ModuleCacheTest.cpp @@ -5,6 +5,7 @@ #include "llvm/Support/Path.h" #include "Plugins/ObjectFile/ELF/ObjectFileELF.h" +#include "Plugins/SymbolFile/Symtab/SymbolFileSymtab.h" #include "TestingSupport/TestUtilities.h" #include "lldb/Core/Module.h" #include "lldb/Core/ModuleSpec.h" @@ -69,12 +70,14 @@ FileSystem::Initialize(); HostInfo::Initialize(); ObjectFileELF::Initialize(); + SymbolFileSymtab::Initialize(); s_cache_dir = HostInfo::GetProcessTempDir(); s_test_executable = GetInputFilePath(module_name); } void ModuleCacheTest::TearDownTestCase() { + SymbolFileSymtab::Terminate(); ObjectFileELF::Terminate(); HostInfo::Terminate(); FileSystem::Terminate(); Index: lldb/trunk/source/Symbol/SymbolVendor.cpp =================================================================== --- lldb/trunk/source/Symbol/SymbolVendor.cpp +++ lldb/trunk/source/Symbol/SymbolVendor.cpp @@ -58,7 +58,7 @@ // SymbolVendor constructor SymbolVendor::SymbolVendor(const lldb::ModuleSP &module_sp) - : ModuleChild(module_sp), m_sym_file_up(), m_symtab() {} + : ModuleChild(module_sp), m_sym_file_up() {} // Destructor SymbolVendor::~SymbolVendor() {} @@ -384,35 +384,9 @@ } Symtab *SymbolVendor::GetSymtab() { - ModuleSP module_sp(GetModule()); - 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_up) - m_sym_file_up->AddSymbols(*m_symtab); - - return m_symtab; -} - -void SymbolVendor::ClearSymtab() { - ModuleSP module_sp(GetModule()); - if (module_sp) { - ObjectFile *objfile = module_sp->GetObjectFile(); - if (objfile) { - // Clear symbol table from unified section list. - objfile->ClearSymtab(); - } - } + if (m_sym_file_up) + return m_sym_file_up->GetSymtab(); + return nullptr; } void SymbolVendor::SectionFileAddressesChanged() { Index: lldb/trunk/source/Symbol/SymbolFile.cpp =================================================================== --- lldb/trunk/source/Symbol/SymbolFile.cpp +++ lldb/trunk/source/Symbol/SymbolFile.cpp @@ -200,6 +200,21 @@ (*m_compile_units)[idx] = cu_sp; } +Symtab *SymbolFile::GetSymtab() { + std::lock_guard<std::recursive_mutex> guard(GetModuleMutex()); + if (m_symtab) + return m_symtab; + + // Fetch the symtab from the main object file. + m_symtab = m_obj_file->GetModule()->GetObjectFile()->GetSymtab(); + + // Then add our symbols to it. + if (m_symtab) + AddSymbols(*m_symtab); + + return m_symtab; +} + void SymbolFile::Dump(Stream &s) { s.PutCString("Types:\n"); m_type_list.Dump(&s, /*show_context*/ false); Index: lldb/trunk/include/lldb/Symbol/SymbolFile.h =================================================================== --- lldb/trunk/include/lldb/Symbol/SymbolFile.h +++ lldb/trunk/include/lldb/Symbol/SymbolFile.h @@ -114,6 +114,8 @@ uint32_t GetNumCompileUnits(); lldb::CompUnitSP GetCompileUnitAtIndex(uint32_t idx); + Symtab *GetSymtab(); + virtual lldb::LanguageType ParseLanguage(CompileUnit &comp_unit) = 0; virtual size_t ParseFunctions(CompileUnit &comp_unit) = 0; virtual bool ParseLineTable(CompileUnit &comp_unit) = 0; @@ -246,6 +248,7 @@ ObjectFile *m_obj_file; // The object file that symbols can be extracted from. llvm::Optional<std::vector<lldb::CompUnitSP>> m_compile_units; TypeList m_type_list; + Symtab *m_symtab = nullptr; uint32_t m_abilities; bool m_calculated_abilities; Index: lldb/trunk/include/lldb/Symbol/SymbolVendor.h =================================================================== --- lldb/trunk/include/lldb/Symbol/SymbolVendor.h +++ lldb/trunk/include/lldb/Symbol/SymbolVendor.h @@ -121,9 +121,6 @@ // Get module unified section list symbol table. virtual Symtab *GetSymtab(); - // Clear module unified section list symbol table. - virtual void ClearSymtab(); - /// Notify the SymbolVendor that the file addresses in the Sections /// for this module have been changed. virtual void SectionFileAddressesChanged(); @@ -140,8 +137,6 @@ // file) std::unique_ptr<SymbolFile> m_sym_file_up; // A single symbol file. Subclasses // can add more of these if needed. - Symtab *m_symtab; // Save a symtab once to not pass it through `AddSymbols` of - // the symbol file each time when it is needed private: // For SymbolVendor only
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits