Provide a mechanism to do some pre-loading of symbols up front.

Loading a shared library can require a large amount of work; rather than do that serially for each library,
this patch will allow parallelization of the symbols and debug info name indexes.

From scott.smith@purestorage.com

https://reviews.llvm.org/D32598

llvm-svn: 301609
This commit is contained in:
Jim Ingham
2017-04-28 00:51:06 +00:00
parent b242e93541
commit 7fca8c0757
11 changed files with 78 additions and 4 deletions

View File

@@ -1432,6 +1432,22 @@ size_t Module::FindSymbolsMatchingRegExAndType(const RegularExpression &regex,
return sc_list.GetSize() - initial_size;
}
void Module::PreloadSymbols() {
std::lock_guard<std::recursive_mutex> guard(m_mutex);
SymbolVendor * sym_vendor = GetSymbolVendor();
if (!sym_vendor) {
return;
}
// Prime the symbol file first, since it adds symbols to the symbol table.
if (SymbolFile *symbol_file = sym_vendor->GetSymbolFile()) {
symbol_file->PreloadSymbols();
}
// Now we can prime the symbol table.
if (Symtab * symtab = sym_vendor->GetSymtab()) {
symtab->PreloadSymbols();
}
}
void Module::SetSymbolFileFileSpec(const FileSpec &file) {
if (!file.Exists())
return;