Revert "[Symbol] Search symbols with name and type in a symbol file"
authorDavide Italiano <davide@freebsd.org>
Fri, 2 Nov 2018 21:59:14 +0000 (21:59 +0000)
committerDavide Italiano <davide@freebsd.org>
Fri, 2 Nov 2018 21:59:14 +0000 (21:59 +0000)
It broke MacOS buildbots.

llvm-svn: 346045

lldb/include/lldb/Symbol/SymbolFile.h
lldb/include/lldb/Symbol/SymbolVendor.h
lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
lldb/source/Plugins/ObjectFile/JIT/ObjectFileJIT.cpp
lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp
lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h
lldb/source/Symbol/SymbolVendor.cpp
lldb/unittests/SymbolFile/PDB/SymbolFilePDBTests.cpp

index b51d952..10e9e3f 100644 (file)
@@ -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.
index 77733de..a6e4df5 100644 (file)
@@ -165,8 +165,6 @@ protected:
                                    // file)
   std::unique_ptr<SymbolFile> 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:
   //------------------------------------------------------------------
index 8d16166..ba82165 100644 (file)
@@ -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();
index 455741e..af04032 100644 (file)
@@ -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();
index b232a00..d92f6bc 100644 (file)
@@ -1315,6 +1315,7 @@ Symtab *ObjectFileMachO::GetSymtab() {
       std::lock_guard<std::recursive_mutex> 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;
index f746c36..4063757 100644 (file)
@@ -651,6 +651,7 @@ Symtab *ObjectFilePECOFF::GetSymtab() {
           symbols[i].SetDebug(true);
         }
       }
+      m_symtab_ap->CalculateSymbolSizes();
     }
   }
   return m_symtab_ap.get();
index 264d954..0b71f6c 100644 (file)
@@ -1331,55 +1331,6 @@ void SymbolFilePDB::GetMangledNamesForFunction(
     const std::string &scope_qualified_name,
     std::vector<lldb_private::ConstString> &mangled_names) {}
 
-void SymbolFilePDB::AddSymbols(lldb_private::Symtab &symtab) {
-  std::set<lldb::addr_t> 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<PDBSymbolPublicSymbol>();
-  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,
index 7e0e4d1..71234d4 100644 (file)
@@ -133,8 +133,6 @@ public:
       const std::string &scope_qualified_name,
       std::vector<lldb_private::ConstString> &mangled_names) override;
 
-  void AddSymbols(lldb_private::Symtab &symtab) override;
-
   uint32_t
   FindTypes(const lldb_private::SymbolContext &sc,
             const lldb_private::ConstString &name,
index 1d01a52..6dc45c3 100644 (file)
@@ -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<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);
-
-  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() {
index 9183dd7..7f722b0 100644 (file)
@@ -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<Module>(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());
-}