From 407c6910d4e16b4f4cc13435fa9a40b985dc2cc7 Mon Sep 17 00:00:00 2001 From: Davide Italiano Date: Fri, 2 Nov 2018 21:59:14 +0000 Subject: [PATCH] Revert "[Symbol] Search symbols with name and type in a symbol file" It broke MacOS buildbots. llvm-svn: 346045 --- lldb/include/lldb/Symbol/SymbolFile.h | 2 - lldb/include/lldb/Symbol/SymbolVendor.h | 2 - .../Plugins/ObjectFile/ELF/ObjectFileELF.cpp | 2 + .../Plugins/ObjectFile/JIT/ObjectFileJIT.cpp | 1 + .../ObjectFile/Mach-O/ObjectFileMachO.cpp | 11 +++++ .../ObjectFile/PECOFF/ObjectFilePECOFF.cpp | 1 + .../Plugins/SymbolFile/PDB/SymbolFilePDB.cpp | 49 ------------------- .../Plugins/SymbolFile/PDB/SymbolFilePDB.h | 2 - lldb/source/Symbol/SymbolVendor.cpp | 30 ++++-------- .../SymbolFile/PDB/SymbolFilePDBTests.cpp | 17 ------- 10 files changed, 24 insertions(+), 93 deletions(-) diff --git a/lldb/include/lldb/Symbol/SymbolFile.h b/lldb/include/lldb/Symbol/SymbolFile.h index b51d952d41b7..10e9e3f99d0a 100644 --- a/lldb/include/lldb/Symbol/SymbolFile.h +++ b/lldb/include/lldb/Symbol/SymbolFile.h @@ -214,8 +214,6 @@ public: return {}; } - virtual void AddSymbols(Symtab &symtab) {} - //------------------------------------------------------------------ /// Notify the SymbolFile that the file addresses in the Sections /// for this module have been changed. diff --git a/lldb/include/lldb/Symbol/SymbolVendor.h b/lldb/include/lldb/Symbol/SymbolVendor.h index 77733de0823d..a6e4df58f3fd 100644 --- a/lldb/include/lldb/Symbol/SymbolVendor.h +++ b/lldb/include/lldb/Symbol/SymbolVendor.h @@ -165,8 +165,6 @@ protected: // file) std::unique_ptr m_sym_file_ap; // 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: //------------------------------------------------------------------ diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp index 8d16166cf0f6..ba8216527f3b 100644 --- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp +++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp @@ -2876,6 +2876,8 @@ Symtab *ObjectFileELF::GetSymtab() { // do the section lookup next time. if (m_symtab_ap == nullptr) m_symtab_ap.reset(new Symtab(this)); + + m_symtab_ap->CalculateSymbolSizes(); } return m_symtab_ap.get(); diff --git a/lldb/source/Plugins/ObjectFile/JIT/ObjectFileJIT.cpp b/lldb/source/Plugins/ObjectFile/JIT/ObjectFileJIT.cpp index 455741e5bd3b..af040322ec52 100644 --- a/lldb/source/Plugins/ObjectFile/JIT/ObjectFileJIT.cpp +++ b/lldb/source/Plugins/ObjectFile/JIT/ObjectFileJIT.cpp @@ -124,6 +124,7 @@ Symtab *ObjectFileJIT::GetSymtab() { if (delegate_sp) delegate_sp->PopulateSymtab(this, *m_symtab_ap); // TODO: get symbols from delegate + m_symtab_ap->Finalize(); } } return m_symtab_ap.get(); diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp index b232a001e0cb..d92f6bc31763 100644 --- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp +++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp @@ -1315,6 +1315,7 @@ Symtab *ObjectFileMachO::GetSymtab() { std::lock_guard symtab_guard( m_symtab_ap->GetMutex()); ParseSymtab(); + m_symtab_ap->Finalize(); } } return m_symtab_ap.get(); @@ -4806,6 +4807,16 @@ size_t ObjectFileMachO::ParseSymtab() { } } + // StreamFile s(stdout, false); + // s.Printf ("Symbol table before CalculateSymbolSizes():\n"); + // symtab->Dump(&s, NULL, eSortOrderNone); + // Set symbol byte sizes correctly since mach-o nlist entries don't have + // sizes + symtab->CalculateSymbolSizes(); + + // s.Printf ("Symbol table after CalculateSymbolSizes():\n"); + // symtab->Dump(&s, NULL, eSortOrderNone); + return symtab->GetNumSymbols(); } return 0; diff --git a/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp b/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp index f746c368f3df..40637574e4bf 100644 --- a/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp +++ b/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp @@ -651,6 +651,7 @@ Symtab *ObjectFilePECOFF::GetSymtab() { symbols[i].SetDebug(true); } } + m_symtab_ap->CalculateSymbolSizes(); } } return m_symtab_ap.get(); diff --git a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp index 264d9540440d..0b71f6c68297 100644 --- a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp +++ b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp @@ -1331,55 +1331,6 @@ void SymbolFilePDB::GetMangledNamesForFunction( const std::string &scope_qualified_name, std::vector &mangled_names) {} -void SymbolFilePDB::AddSymbols(lldb_private::Symtab &symtab) { - std::set sym_addresses; - for (size_t i = 0; i < symtab.GetNumSymbols(); i++) - sym_addresses.insert(symtab.SymbolAtIndex(i)->GetFileAddress()); - - auto results = m_global_scope_up->findAllChildren(); - if (!results) - return; - - auto section_list = m_obj_file->GetSectionList(); - if (!section_list) - return; - - while (auto pub_symbol = results->getNext()) { - auto section_idx = pub_symbol->getAddressSection() - 1; - if (section_idx >= section_list->GetSize()) - continue; - - auto section = section_list->GetSectionAtIndex(section_idx); - if (!section) - continue; - - auto offset = pub_symbol->getAddressOffset(); - - auto file_addr = section->GetFileAddress() + offset; - if (sym_addresses.find(file_addr) != sym_addresses.end()) - continue; - sym_addresses.insert(file_addr); - - auto size = pub_symbol->getLength(); - symtab.AddSymbol( - Symbol(pub_symbol->getSymIndexId(), // symID - pub_symbol->getName().c_str(), // name - true, // name_is_mangled - pub_symbol->isCode() ? eSymbolTypeCode : eSymbolTypeData, // type - true, // external - false, // is_debug - false, // is_trampoline - false, // is_artificial - section, // section_sp - offset, // value - size, // size - size != 0, // size_is_valid - false, // contains_linker_annotations - 0 // flags - )); - } -} - uint32_t SymbolFilePDB::FindTypes( const lldb_private::SymbolContext &sc, const lldb_private::ConstString &name, diff --git a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h index 7e0e4d14f13d..71234d4ec668 100644 --- a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h +++ b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h @@ -133,8 +133,6 @@ public: const std::string &scope_qualified_name, std::vector &mangled_names) override; - void AddSymbols(lldb_private::Symtab &symtab) override; - uint32_t FindTypes(const lldb_private::SymbolContext &sc, const lldb_private::ConstString &name, diff --git a/lldb/source/Symbol/SymbolVendor.cpp b/lldb/source/Symbol/SymbolVendor.cpp index 1d01a526164d..6dc45c3117e8 100644 --- a/lldb/source/Symbol/SymbolVendor.cpp +++ b/lldb/source/Symbol/SymbolVendor.cpp @@ -61,7 +61,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_symtab() {} + m_sym_file_ap() {} //---------------------------------------------------------------------- // Destructor @@ -438,26 +438,14 @@ FileSpec SymbolVendor::GetMainFileSpec() const { Symtab *SymbolVendor::GetSymtab() { ModuleSP module_sp(GetModule()); - if (!module_sp) - return nullptr; - - std::lock_guard 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); - - m_symtab->CalculateSymbolSizes(); - m_symtab->Finalize(); - - return m_symtab; + if (module_sp) { + ObjectFile *objfile = module_sp->GetObjectFile(); + if (objfile) { + // Get symbol table from unified section list. + return objfile->GetSymtab(); + } + } + return nullptr; } void SymbolVendor::ClearSymtab() { diff --git a/lldb/unittests/SymbolFile/PDB/SymbolFilePDBTests.cpp b/lldb/unittests/SymbolFile/PDB/SymbolFilePDBTests.cpp index 9183dd7bc8e0..7f722b055bf6 100644 --- a/lldb/unittests/SymbolFile/PDB/SymbolFilePDBTests.cpp +++ b/lldb/unittests/SymbolFile/PDB/SymbolFilePDBTests.cpp @@ -621,20 +621,3 @@ TEST_F(SymbolFilePDBTests, TestNullName) { EXPECT_EQ(0u, num_results); EXPECT_EQ(0u, results.GetSize()); } - -TEST_F(SymbolFilePDBTests, TestFindSymbolsWithNameAndType) { - FileSpec fspec(m_pdb_test_exe.c_str(), false); - ArchSpec aspec("i686-pc-windows"); - lldb::ModuleSP module = std::make_shared(fspec, aspec); - - SymbolContextList sc_list; - EXPECT_EQ(1u, - module->FindSymbolsWithNameAndType(ConstString("?foo@@YAHH@Z"), - lldb::eSymbolTypeAny, sc_list)); - EXPECT_EQ(1u, sc_list.GetSize()); - - SymbolContext sc; - EXPECT_TRUE(sc_list.GetContextAtIndex(0, sc)); - EXPECT_STREQ("int foo(int)", - sc.GetFunctionName(Mangled::ePreferDemangled).AsCString()); -} -- 2.34.1