LLDB
mainline
|
#include <ManualDWARFIndex.h>
Classes | |
struct | IndexSet |
Public Member Functions | |
ManualDWARFIndex (Module &module, SymbolFileDWARF &dwarf, llvm::DenseSet< dw_offset_t > units_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. More... | |
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(). More... | |
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 (ConstString name, SymbolFileDWARF &dwarf, const CompilerDeclContext &parent_decl_ctx, uint32_t name_type_mask, 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 |
![]() | |
DWARFIndex (Module &module) | |
virtual | ~DWARFIndex () |
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. More... | |
bool | Encode (DataEncoder &encoder) const |
Encode this object into a data encoder object. More... | |
std::string | GetCacheKey () |
Get the cache key string for this symbol table. More... | |
void | SaveToCache () |
Save the symbol table data out into a cache. More... | |
bool | LoadFromCache () |
Load the symbol table from the index cache. More... | |
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. More... | |
llvm::DenseSet< dw_offset_t > | m_units_to_avoid |
Which dwarf units should we skip while building the index. More... | |
IndexSet | m_set |
bool | m_indexed = false |
Additional Inherited Members | |
![]() | |
bool | ProcessFunctionDIE (llvm::StringRef name, DIERef ref, SymbolFileDWARF &dwarf, const CompilerDeclContext &parent_decl_ctx, uint32_t name_type_mask, llvm::function_ref< bool(DWARFDIE die)> callback) |
Helper function implementing common logic for processing function dies. More... | |
DIERefCallbackImpl | DIERefCallback (llvm::function_ref< bool(DWARFDIE die)> callback, llvm::StringRef name={}) const |
void | ReportInvalidDIERef (DIERef ref, llvm::StringRef name) const |
![]() | |
Module & | m_module |
StatsDuration | m_index_time |
Definition at line 20 of file ManualDWARFIndex.h.
|
inline |
Definition at line 22 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 626 of file ManualDWARFIndex.cpp.
References lldb_private::CacheSignature::Decode(), and set().
|
overridevirtual |
Implements lldb_private::DWARFIndex.
Definition at line 471 of file ManualDWARFIndex.cpp.
References lldb_private::Stream::Format(), and lldb_private::Stream::Printf().
|
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 644 of file ManualDWARFIndex.cpp.
References lldb_private::CacheSignature::Encode().
|
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 652 of file ManualDWARFIndex.cpp.
References lldb_private::ObjectFile::GetCacheHash(), lldb_private::ModuleChild::GetModule(), and string().
|
overridevirtual |
Implements lldb_private::DWARFIndex.
Definition at line 384 of file ManualDWARFIndex.cpp.
References lldb_private::ConstString::GetStringRef().
|
overridevirtual |
Implements lldb_private::DWARFIndex.
Definition at line 458 of file ManualDWARFIndex.cpp.
References lldb_private::RegularExpression::GetText().
|
overridevirtual |
Implements lldb_private::DWARFIndex.
Definition at line 413 of file ManualDWARFIndex.cpp.
References SymbolFileDWARF::DIEInDeclContext(), lldb_private::ConstString::GetStringRef(), and lldb_private::CompilerDeclContext::IsValid().
|
overridevirtual |
Implements lldb_private::DWARFIndex.
Definition at line 363 of file ManualDWARFIndex.cpp.
References lldb_private::RegularExpression::GetText().
|
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::DWARFIndex.
Definition at line 356 of file ManualDWARFIndex.cpp.
References lldb_private::ConstString::GetStringRef().
|
overridevirtual |
cu must be the skeleton unit if possible, not GetNonSkeletonUnit().
Implements lldb_private::DWARFIndex.
Definition at line 370 of file ManualDWARFIndex.cpp.
References SymbolFileDWARF::GetDwoNum(), DWARFUnit::GetSymbolFileDWARF(), and lldbassert.
|
overridevirtual |
Implements lldb_private::DWARFIndex.
Definition at line 407 of file ManualDWARFIndex.cpp.
References lldb_private::ConstString::GetStringRef().
|
overridevirtual |
Implements lldb_private::DWARFIndex.
Definition at line 377 of file ManualDWARFIndex.cpp.
References lldb_private::ConstString::GetStringRef().
|
overridevirtual |
Implements lldb_private::DWARFIndex.
Definition at line 398 of file ManualDWARFIndex.cpp.
|
overridevirtual |
Implements lldb_private::DWARFIndex.
Definition at line 392 of file ManualDWARFIndex.cpp.
References lldb_private::ConstString::GetStringRef().
|
private |
Definition at line 31 of file ManualDWARFIndex.cpp.
References NameToDIE::Append(), lldb_private::Stream::AsRawOstream(), DWARFDebugInfo::ContainsTypeUnits(), SymbolFileDWARF::DebugInfo(), lldb::eDescriptionLevelBrief, elapsed(), NameToDIE::Finalize(), lldb_private::StreamString::GetData(), SymbolFileDWARF::GetDwpSymbolFile(), DWARFDebugInfo::GetNumUnits(), DWARFUnit::GetOffset(), lldb_private::Debugger::GetThreadPool(), DWARFDebugInfo::GetUnitAtIndex(), lldb_private::Progress::Increment(), LLDB_SCOPED_TIMERF, and set().
Referenced by Preload().
|
private |
Definition at line 139 of file ManualDWARFIndex.cpp.
References DWARFUnit::GetDwoSymbolFile(), SymbolFileDWARF::GetLanguage(), lldb_private::GetLog(), DWARFUnit::GetNonSkeletonUnit(), DWARFDebugInfo::GetNumUnits(), DWARFUnit::GetOffset(), DWARFDebugInfo::GetUnitAtIndex(), lldb_private::Lookups, and set().
|
staticprivate |
Definition at line 167 of file ManualDWARFIndex.cpp.
References DWARFFormValue::AsCString(), DWARFAttributes::AttributeAtIndex(), DWARFUnit::dies(), lldb::eLanguageTypeObjC, lldb::eLanguageTypeObjC_plus_plus, DWARFAttributes::ExtractFormValueAtIndex(), lldb_private::ObjCLanguage::MethodName::GetClassName(), lldb_private::ObjCLanguage::MethodName::GetClassNameWithCategory(), DWARFBaseDIE::GetDIERef(), lldb_private::ObjCLanguage::MethodName::GetFullNameWithoutCategory(), lldb_private::ObjCLanguage::MethodName::GetSelector(), DWARFDIE::IsMethod(), lldb_private::ObjCLanguage::MethodName::IsValid(), set(), and DWARFFormValue::Unsigned().
|
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 665 of file ManualDWARFIndex.cpp.
References lldb_private::ObjectFile::GetAddressByteSize(), lldb_private::DataFileCache::GetCachedData(), lldb_private::Module::GetIndexCache(), lldb_private::endian::InlHostByteOrder(), and lldb_private::DataFileCache::RemoveCacheFile().
|
inlineoverridevirtual |
Implements lldb_private::DWARFIndex.
Definition at line 27 of file ManualDWARFIndex.h.
References Index().
Referenced by lldb_private::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 688 of file ManualDWARFIndex.cpp.
References lldb_private::ObjectFile::GetAddressByteSize(), lldb_private::Module::GetIndexCache(), lldb_private::endian::InlHostByteOrder(), and lldb_private::DataFileCache::SetCachedData().
|
private |
The DWARF file which we are indexing.
Definition at line 169 of file ManualDWARFIndex.h.
|
private |
Definition at line 174 of file ManualDWARFIndex.h.
|
private |
Definition at line 173 of file ManualDWARFIndex.h.
|
private |
Which dwarf units should we skip while building the index.
Definition at line 171 of file ManualDWARFIndex.h.