LLDB mainline
|
#include <ManualDWARFIndex.h>
Classes | |
struct | IndexSet |
Public Member Functions | |
ManualDWARFIndex (Module &module, SymbolFileDWARF &dwarf, llvm::DenseSet< dw_offset_t > units_to_avoid={}, llvm::DenseSet< uint64_t > type_sigs_to_avoid={}) | |
void | Preload () override |
void | GetGlobalVariables (ConstString basename, llvm::function_ref< bool(DWARFDIE die)> callback) override |
Finds global variables with the given base name. | |
void | GetGlobalVariables (const RegularExpression ®ex, llvm::function_ref< bool(DWARFDIE die)> callback) override |
void | GetGlobalVariables (DWARFUnit &unit, llvm::function_ref< bool(DWARFDIE die)> callback) override |
cu must be the skeleton unit if possible, not GetNonSkeletonUnit(). | |
void | GetObjCMethods (ConstString class_name, llvm::function_ref< bool(DWARFDIE die)> callback) override |
void | GetCompleteObjCClass (ConstString class_name, bool must_be_implementation, llvm::function_ref< bool(DWARFDIE die)> callback) override |
void | GetTypes (ConstString name, llvm::function_ref< bool(DWARFDIE die)> callback) override |
void | GetTypes (const DWARFDeclContext &context, llvm::function_ref< bool(DWARFDIE die)> callback) override |
void | GetNamespaces (ConstString name, llvm::function_ref< bool(DWARFDIE die)> callback) override |
void | GetFunctions (const Module::LookupInfo &lookup_info, SymbolFileDWARF &dwarf, const CompilerDeclContext &parent_decl_ctx, llvm::function_ref< bool(DWARFDIE die)> callback) override |
void | GetFunctions (const RegularExpression ®ex, llvm::function_ref< bool(DWARFDIE die)> callback) override |
void | Dump (Stream &s) override |
Public Member Functions inherited from lldb_private::plugin::dwarf::DWARFIndex | |
DWARFIndex (Module &module) | |
virtual | ~DWARFIndex () |
virtual void | Preload ()=0 |
virtual void | GetGlobalVariables (ConstString basename, llvm::function_ref< bool(DWARFDIE die)> callback)=0 |
Finds global variables with the given base name. | |
virtual void | GetGlobalVariables (const RegularExpression ®ex, llvm::function_ref< bool(DWARFDIE die)> callback)=0 |
virtual void | GetGlobalVariables (DWARFUnit &cu, llvm::function_ref< bool(DWARFDIE die)> callback)=0 |
cu must be the skeleton unit if possible, not GetNonSkeletonUnit(). | |
virtual void | GetObjCMethods (ConstString class_name, llvm::function_ref< bool(DWARFDIE die)> callback)=0 |
virtual void | GetCompleteObjCClass (ConstString class_name, bool must_be_implementation, llvm::function_ref< bool(DWARFDIE die)> callback)=0 |
virtual void | GetTypes (ConstString name, llvm::function_ref< bool(DWARFDIE die)> callback)=0 |
virtual void | GetTypes (const DWARFDeclContext &context, llvm::function_ref< bool(DWARFDIE die)> callback)=0 |
virtual void | GetFullyQualifiedType (const DWARFDeclContext &context, llvm::function_ref< bool(DWARFDIE die)> callback) |
Finds all DIEs whose fully qualified name matches context . | |
virtual void | GetNamespaces (ConstString name, llvm::function_ref< bool(DWARFDIE die)> callback)=0 |
virtual void | GetFunctions (const Module::LookupInfo &lookup_info, SymbolFileDWARF &dwarf, const CompilerDeclContext &parent_decl_ctx, llvm::function_ref< bool(DWARFDIE die)> callback)=0 |
virtual void | GetFunctions (const RegularExpression ®ex, llvm::function_ref< bool(DWARFDIE die)> callback)=0 |
virtual void | Dump (Stream &s)=0 |
StatsDuration::Duration | GetIndexTime () |
Private Member Functions | |
void | Index () |
bool | Decode (const DataExtractor &data, lldb::offset_t *offset_ptr, bool &signature_mismatch) |
Decode a serialized version of this object from data. | |
bool | Encode (DataEncoder &encoder) const |
Encode this object into a data encoder object. | |
std::string | GetCacheKey () |
Get the cache key string for this symbol table. | |
void | SaveToCache () |
Save the symbol table data out into a cache. | |
bool | LoadFromCache () |
Load the symbol table from the index cache. | |
void | IndexUnit (DWARFUnit &unit, SymbolFileDWARFDwo *dwp, IndexSet &set) |
Static Private Member Functions | |
static void | IndexUnitImpl (DWARFUnit &unit, const lldb::LanguageType cu_language, IndexSet &set) |
Private Attributes | |
SymbolFileDWARF * | m_dwarf |
The DWARF file which we are indexing. | |
llvm::DenseSet< dw_offset_t > | m_units_to_avoid |
Which dwarf units should we skip while building the index. | |
llvm::DenseSet< uint64_t > | m_type_sigs_to_avoid |
IndexSet | m_set |
bool | m_indexed = false |
Additional Inherited Members | |
Protected Member Functions inherited from lldb_private::plugin::dwarf::DWARFIndex | |
bool | ProcessFunctionDIE (const Module::LookupInfo &lookup_info, DWARFDIE die, const CompilerDeclContext &parent_decl_ctx, llvm::function_ref< bool(DWARFDIE die)> callback) |
Helper function implementing common logic for processing function dies. | |
DIERefCallbackImpl | DIERefCallback (llvm::function_ref< bool(DWARFDIE die)> callback, llvm::StringRef name={}) const |
void | ReportInvalidDIERef (DIERef ref, llvm::StringRef name) const |
bool | GetFullyQualifiedTypeImpl (const DWARFDeclContext &context, DWARFDIE die, llvm::function_ref< bool(DWARFDIE die)> callback) |
Implementation of GetFullyQualifiedType to check a single entry, shareable with derived classes. | |
Protected Attributes inherited from lldb_private::plugin::dwarf::DWARFIndex | |
Module & | m_module |
StatsDuration | m_index_time |
Definition at line 21 of file ManualDWARFIndex.h.
|
inline |
Definition at line 23 of file ManualDWARFIndex.h.
|
private |
Decode a serialized version of this object from data.
data | The decoder object that references the serialized data. |
offset_ptr | A pointer that contains the offset from which the data will be decoded from that gets updated as data gets decoded. |
strtab | All strings in cache files are put into string tables for efficiency and cache file size reduction. Strings are stored as uint32_t string table offsets in the cache data. |
Definition at line 664 of file ManualDWARFIndex.cpp.
References lldb_private::CacheSignature::Decode(), lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::Decode(), lldb_private::SymbolFileCommon::GetObjectFile(), m_dwarf, and m_set.
Referenced by LoadFromCache().
|
overridevirtual |
Implements lldb_private::plugin::dwarf::DWARFIndex.
Definition at line 506 of file ManualDWARFIndex.cpp.
References lldb_private::plugin::dwarf::NameToDIE::Dump(), lldb_private::Stream::Format(), lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_basenames, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_fullnames, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_methods, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_selectors, lldb_private::Module::GetArchitecture(), lldb_private::ArchSpec::GetArchitectureName(), lldb_private::ObjectFile::GetFileSpec(), lldb_private::Module::GetObjectFile(), lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::globals, lldb_private::plugin::dwarf::DWARFIndex::m_module, m_set, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::namespaces, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::objc_class_selectors, lldb_private::Stream::Printf(), and lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::types.
Referenced by lldb_private::plugin::dwarf::DebugNamesDWARFIndex::Dump().
|
private |
Encode this object into a data encoder object.
This allows this object to be serialized to disk.
encoder | A data encoder object that serialized bytes will be encoded into. |
strtab | All strings in cache files are put into string tables for efficiency and cache file size reduction. Strings are stored as uint32_t string table offsets in the cache data. |
Definition at line 682 of file ManualDWARFIndex.cpp.
References lldb_private::CacheSignature::Encode(), lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::Encode(), lldb_private::SymbolFileCommon::GetObjectFile(), m_dwarf, and m_set.
Referenced by SaveToCache().
|
private |
Get the cache key string for this symbol table.
The cache key must start with the module's cache key and is followed by information that indicates this key is for caching the symbol table contents and should also include the has of the object file. A module can be represented by an ObjectFile object for the main executable, but can also have a symbol file that is from the same or a different object file. This means we might have two symbol tables cached in the index cache, one for the main executable and one for the symbol file.
Definition at line 690 of file ManualDWARFIndex.cpp.
References lldb_private::ObjectFile::GetCacheHash(), lldb_private::ModuleChild::GetModule(), lldb_private::SymbolFileCommon::GetObjectFile(), and m_dwarf.
Referenced by LoadFromCache(), and SaveToCache().
|
overridevirtual |
Implements lldb_private::plugin::dwarf::DWARFIndex.
Definition at line 417 of file ManualDWARFIndex.cpp.
References lldb_private::plugin::dwarf::DWARFIndex::DIERefCallback(), lldb_private::plugin::dwarf::NameToDIE::Find(), lldb_private::ConstString::GetStringRef(), Index(), m_set, and lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::types.
Referenced by lldb_private::plugin::dwarf::DebugNamesDWARFIndex::GetCompleteObjCClass().
|
overridevirtual |
Implements lldb_private::plugin::dwarf::DWARFIndex.
Definition at line 446 of file ManualDWARFIndex.cpp.
References lldb_private::plugin::dwarf::SymbolFileDWARF::DIEInDeclContext(), lldb_private::plugin::dwarf::DWARFIndex::DIERefCallback(), lldb_private::plugin::dwarf::NameToDIE::Find(), lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_basenames, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_fullnames, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_methods, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_selectors, lldb_private::Module::LookupInfo::GetLookupName(), lldb_private::Module::LookupInfo::GetNameTypeMask(), lldb_private::ConstString::GetStringRef(), Index(), lldb_private::CompilerDeclContext::IsValid(), and m_set.
Referenced by lldb_private::plugin::dwarf::DebugNamesDWARFIndex::GetFunctions().
|
overridevirtual |
Implements lldb_private::plugin::dwarf::DWARFIndex.
Definition at line 493 of file ManualDWARFIndex.cpp.
References lldb_private::plugin::dwarf::DWARFIndex::DIERefCallback(), lldb_private::plugin::dwarf::NameToDIE::Find(), lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_basenames, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_fullnames, lldb_private::RegularExpression::GetText(), Index(), and m_set.
|
overridevirtual |
Implements lldb_private::plugin::dwarf::DWARFIndex.
Definition at line 397 of file ManualDWARFIndex.cpp.
References lldb_private::plugin::dwarf::DWARFIndex::DIERefCallback(), lldb_private::plugin::dwarf::NameToDIE::Find(), lldb_private::RegularExpression::GetText(), lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::globals, Index(), and m_set.
|
overridevirtual |
Finds global variables with the given base name.
Any additional filtering (e.g., to only retrieve variables from a given context) should be done by the consumer.
Implements lldb_private::plugin::dwarf::DWARFIndex.
Definition at line 390 of file ManualDWARFIndex.cpp.
References lldb_private::plugin::dwarf::DWARFIndex::DIERefCallback(), lldb_private::plugin::dwarf::NameToDIE::Find(), lldb_private::ConstString::GetStringRef(), lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::globals, Index(), and m_set.
Referenced by lldb_private::plugin::dwarf::DebugNamesDWARFIndex::GetGlobalVariables().
|
overridevirtual |
cu must be the skeleton unit if possible, not GetNonSkeletonUnit().
Implements lldb_private::plugin::dwarf::DWARFIndex.
Definition at line 404 of file ManualDWARFIndex.cpp.
References lldb_private::plugin::dwarf::DWARFIndex::DIERefCallback(), lldb_private::plugin::dwarf::NameToDIE::FindAllEntriesForUnit(), lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::globals, Index(), and m_set.
|
overridevirtual |
Implements lldb_private::plugin::dwarf::DWARFIndex.
Definition at line 440 of file ManualDWARFIndex.cpp.
References lldb_private::plugin::dwarf::DWARFIndex::DIERefCallback(), lldb_private::plugin::dwarf::NameToDIE::Find(), lldb_private::ConstString::GetStringRef(), Index(), m_set, and lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::namespaces.
Referenced by lldb_private::plugin::dwarf::DebugNamesDWARFIndex::GetNamespaces().
|
overridevirtual |
Implements lldb_private::plugin::dwarf::DWARFIndex.
Definition at line 410 of file ManualDWARFIndex.cpp.
References lldb_private::plugin::dwarf::DWARFIndex::DIERefCallback(), lldb_private::plugin::dwarf::NameToDIE::Find(), lldb_private::ConstString::GetStringRef(), Index(), m_set, and lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::objc_class_selectors.
|
overridevirtual |
Implements lldb_private::plugin::dwarf::DWARFIndex.
Definition at line 431 of file ManualDWARFIndex.cpp.
References lldb_private::plugin::dwarf::DWARFIndex::DIERefCallback(), lldb_private::plugin::dwarf::NameToDIE::Find(), Index(), m_set, and lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::types.
|
overridevirtual |
Implements lldb_private::plugin::dwarf::DWARFIndex.
Definition at line 425 of file ManualDWARFIndex.cpp.
References lldb_private::plugin::dwarf::DWARFIndex::DIERefCallback(), lldb_private::plugin::dwarf::NameToDIE::Find(), lldb_private::ConstString::GetStringRef(), Index(), m_set, and lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::types.
Referenced by lldb_private::plugin::dwarf::DebugNamesDWARFIndex::GetTypes().
|
private |
Definition at line 33 of file ManualDWARFIndex.cpp.
References lldb_private::plugin::dwarf::NameToDIE::Append(), lldb_private::Stream::AsRawOstream(), lldb_private::plugin::dwarf::DWARFDebugInfo::ContainsTypeUnits(), lldb_private::plugin::dwarf::SymbolFileDWARF::DebugInfo(), lldb::eDescriptionLevelBrief, elapsed(), lldb_private::plugin::dwarf::NameToDIE::Finalize(), lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_basenames, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_fullnames, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_methods, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_selectors, lldb_private::StreamString::GetData(), lldb_private::Module::GetDescription(), lldb_private::plugin::dwarf::SymbolFileDWARF::GetDwpSymbolFile(), lldb_private::plugin::dwarf::DWARFDebugInfo::GetNumUnits(), lldb_private::plugin::dwarf::DWARFUnit::GetOffset(), lldb_private::Debugger::GetThreadPool(), lldb_private::plugin::dwarf::DWARFDebugInfo::GetUnitAtIndex(), lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::globals, lldb_private::Progress::Increment(), IndexUnit(), LLDB_SCOPED_TIMERF, LoadFromCache(), m_dwarf, lldb_private::plugin::dwarf::DWARFIndex::m_index_time, m_indexed, lldb_private::plugin::dwarf::DWARFIndex::m_module, m_set, m_type_sigs_to_avoid, m_units_to_avoid, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::namespaces, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::objc_class_selectors, SaveToCache(), lldb_private::SymbolFileCommon::SetDebugInfoIndexWasLoadedFromCache(), and lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::types.
Referenced by GetCompleteObjCClass(), GetFunctions(), GetGlobalVariables(), GetNamespaces(), GetObjCMethods(), GetTypes(), and Preload().
|
private |
Definition at line 143 of file ManualDWARFIndex.cpp.
References lldb_private::plugin::dwarf::DWARFUnit::GetDIE(), lldb_private::plugin::dwarf::DWARFUnit::GetDWOId(), lldb_private::plugin::dwarf::DWARFUnit::GetDwoSymbolFile(), lldb_private::plugin::dwarf::DWARFDIE::GetFirstChild(), lldb_private::plugin::dwarf::DWARFUnit::GetFirstDIEOffset(), lldb_private::plugin::dwarf::SymbolFileDWARF::GetLanguage(), lldb_private::GetLog(), lldb_private::plugin::dwarf::DWARFUnit::GetNonSkeletonUnit(), lldb_private::plugin::dwarf::DWARFDebugInfo::GetNumUnits(), lldb_private::plugin::dwarf::DWARFUnit::GetOffset(), lldb_private::plugin::dwarf::DWARFDebugInfo::GetUnitAtIndex(), lldb_private::plugin::dwarf::DWARFUnit::GetVersion(), IndexUnitImpl(), lldb_private::plugin::dwarf::DWARFUnit::IsSkeletonUnit(), lldb_private::Module::LogMessage(), lldb_private::Lookups, lldb_private::plugin::dwarf::DWARFIndex::m_module, and lldb_private::plugin::dwarf::DWARFBaseDIE::Tag().
Referenced by Index().
|
staticprivate |
Definition at line 200 of file ManualDWARFIndex.cpp.
References lldb_private::plugin::dwarf::DWARFFormValue::AsCString(), lldb_private::plugin::dwarf::DWARFAttributes::AttributeAtIndex(), lldb_private::ObjCLanguage::MethodName::Create(), lldb_private::plugin::dwarf::DWARFUnit::dies(), lldb::eLanguageTypeObjC, lldb::eLanguageTypeObjC_plus_plus, lldb_private::plugin::dwarf::DWARFAttributes::ExtractFormValueAtIndex(), lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_basenames, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_fullnames, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_methods, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::function_selectors, lldb_private::plugin::dwarf::DWARFBaseDIE::GetDIERef(), lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::globals, lldb_private::plugin::dwarf::NameToDIE::Insert(), lldb_private::plugin::dwarf::DWARFDIE::IsMethod(), lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::namespaces, lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::objc_class_selectors, lldb_private::plugin::dwarf::DWARFAttributes::Size(), lldb_private::plugin::dwarf::ManualDWARFIndex::IndexSet::types, and lldb_private::plugin::dwarf::DWARFFormValue::Unsigned().
Referenced by IndexUnit().
|
private |
Load the symbol table from the index cache.
Quickly load the finalized symbol table from the index cache. This saves time when the debugger starts up. The index cache file for the symbol table has the modification time set to the same time as the main module. If the cache file exists and the modification times match, we will load the symbol table from the serlized cache file.
Definition at line 703 of file ManualDWARFIndex.cpp.
References Decode(), lldb_private::ObjectFile::GetAddressByteSize(), lldb_private::DataFileCache::GetCachedData(), GetCacheKey(), lldb_private::Module::GetIndexCache(), lldb_private::SymbolFileCommon::GetObjectFile(), lldb_private::endian::InlHostByteOrder(), m_dwarf, and lldb_private::DataFileCache::RemoveCacheFile().
Referenced by Index().
|
inlineoverridevirtual |
Implements lldb_private::plugin::dwarf::DWARFIndex.
Definition at line 30 of file ManualDWARFIndex.h.
References Index().
Referenced by lldb_private::plugin::dwarf::DebugNamesDWARFIndex::Preload().
|
private |
Save the symbol table data out into a cache.
The symbol table will only be saved to a cache file if caching is enabled.
We cache the contents of the symbol table since symbol tables in LLDB take some time to initialize. This is due to the many sources for data that are used to create a symbol table:
Definition at line 726 of file ManualDWARFIndex.cpp.
References Encode(), lldb_private::ObjectFile::GetAddressByteSize(), GetCacheKey(), lldb_private::DataEncoder::GetData(), lldb_private::Module::GetIndexCache(), lldb_private::SymbolFileCommon::GetObjectFile(), lldb_private::endian::InlHostByteOrder(), m_dwarf, lldb_private::DataFileCache::SetCachedData(), and lldb_private::SymbolFileCommon::SetDebugInfoIndexWasSavedToCache().
Referenced by Index().
|
private |
The DWARF file which we are indexing.
Definition at line 172 of file ManualDWARFIndex.h.
Referenced by Decode(), Encode(), GetCacheKey(), Index(), LoadFromCache(), and SaveToCache().
|
private |
Definition at line 178 of file ManualDWARFIndex.h.
Referenced by Index().
|
private |
Definition at line 177 of file ManualDWARFIndex.h.
Referenced by Decode(), Dump(), Encode(), GetCompleteObjCClass(), GetFunctions(), GetGlobalVariables(), GetNamespaces(), GetObjCMethods(), GetTypes(), and Index().
|
private |
Definition at line 175 of file ManualDWARFIndex.h.
Referenced by Index().
|
private |
Which dwarf units should we skip while building the index.
Definition at line 174 of file ManualDWARFIndex.h.
Referenced by Index().