summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/include/lldb/Symbol/SymbolFile.h2
-rw-r--r--lldb/include/lldb/Symbol/SymbolVendor.h2
-rw-r--r--lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp2
-rw-r--r--lldb/source/Plugins/ObjectFile/JIT/ObjectFileJIT.cpp1
-rw-r--r--lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp11
-rw-r--r--lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp1
-rw-r--r--lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp49
-rw-r--r--lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h2
-rw-r--r--lldb/source/Symbol/SymbolVendor.cpp30
-rw-r--r--lldb/unittests/SymbolFile/PDB/SymbolFilePDBTests.cpp17
10 files changed, 24 insertions, 93 deletions
diff --git a/lldb/include/lldb/Symbol/SymbolFile.h b/lldb/include/lldb/Symbol/SymbolFile.h
index b51d952d41b..10e9e3f99d0 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 77733de0823..a6e4df58f3f 100644
--- a/lldb/include/lldb/Symbol/SymbolVendor.h
+++ b/lldb/include/lldb/Symbol/SymbolVendor.h
@@ -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:
//------------------------------------------------------------------
diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
index 8d16166cf0f..ba8216527f3 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 455741e5bd3..af040322ec5 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 b232a001e0c..d92f6bc3176 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<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;
diff --git a/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp b/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
index f746c368f3d..40637574e4b 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 264d9540440..0b71f6c6829 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<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,
diff --git a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h
index 7e0e4d14f13..71234d4ec66 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<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,
diff --git a/lldb/source/Symbol/SymbolVendor.cpp b/lldb/source/Symbol/SymbolVendor.cpp
index 1d01a526164..6dc45c3117e 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<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() {
diff --git a/lldb/unittests/SymbolFile/PDB/SymbolFilePDBTests.cpp b/lldb/unittests/SymbolFile/PDB/SymbolFilePDBTests.cpp
index 9183dd7bc8e..7f722b055bf 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<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());
-}
OpenPOWER on IntegriCloud