LLDB  mainline
Classes | Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
lldb_private::ManualDWARFIndex Class Reference

#include <ManualDWARFIndex.h>

Inheritance diagram for lldb_private::ManualDWARFIndex:
Inheritance graph
[legend]
Collaboration diagram for lldb_private::ManualDWARFIndex:
Collaboration graph
[legend]

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 &regex, 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 &regex, llvm::function_ref< bool(DWARFDIE die)> callback) override
 
void Dump (Stream &s) override
 
- Public Member Functions inherited from lldb_private::DWARFIndex
 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

SymbolFileDWARFm_dwarf
 The DWARF file which we are indexing. More...
 
llvm::DenseSet< dw_offset_tm_units_to_avoid
 Which dwarf units should we skip while building the index. More...
 
IndexSet m_set
 
bool m_indexed = false
 

Additional Inherited Members

- Protected Member Functions inherited from lldb_private::DWARFIndex
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
 
- Protected Attributes inherited from lldb_private::DWARFIndex
Modulem_module
 
StatsDuration m_index_time
 

Detailed Description

Definition at line 20 of file ManualDWARFIndex.h.

Constructor & Destructor Documentation

◆ ManualDWARFIndex()

lldb_private::ManualDWARFIndex::ManualDWARFIndex ( Module module,
SymbolFileDWARF dwarf,
llvm::DenseSet< dw_offset_t units_to_avoid = {} 
)
inline

Definition at line 22 of file ManualDWARFIndex.h.

Member Function Documentation

◆ Decode()

bool ManualDWARFIndex::Decode ( const DataExtractor data,
lldb::offset_t offset_ptr,
bool &  signature_mismatch 
)
private

Decode a serialized version of this object from data.

Parameters
dataThe decoder object that references the serialized data.
offset_ptrA pointer that contains the offset from which the data will be decoded from that gets updated as data gets decoded.
strtabAll 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().

◆ Dump()

void ManualDWARFIndex::Dump ( Stream s)
overridevirtual

◆ Encode()

bool ManualDWARFIndex::Encode ( DataEncoder &  encoder) const
private

Encode this object into a data encoder object.

This allows this object to be serialized to disk.

Parameters
encoderA data encoder object that serialized bytes will be encoded into.
strtabAll 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.
Returns
True if the symbol table's object file can generate a valid signature and all data for the symbol table was encoded, false otherwise.

Definition at line 644 of file ManualDWARFIndex.cpp.

References lldb_private::CacheSignature::Encode().

◆ GetCacheKey()

std::string ManualDWARFIndex::GetCacheKey ( )
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.

Returns
The unique cache key used to save and retrieve data from the index cache.

Definition at line 652 of file ManualDWARFIndex.cpp.

References lldb_private::ObjectFile::GetCacheHash(), lldb_private::ModuleChild::GetModule(), and string().

◆ GetCompleteObjCClass()

void ManualDWARFIndex::GetCompleteObjCClass ( ConstString  class_name,
bool  must_be_implementation,
llvm::function_ref< bool(DWARFDIE die)>  callback 
)
overridevirtual

◆ GetFunctions() [1/2]

void ManualDWARFIndex::GetFunctions ( const RegularExpression regex,
llvm::function_ref< bool(DWARFDIE die)>  callback 
)
overridevirtual

◆ GetFunctions() [2/2]

void ManualDWARFIndex::GetFunctions ( ConstString  name,
SymbolFileDWARF dwarf,
const CompilerDeclContext parent_decl_ctx,
uint32_t  name_type_mask,
llvm::function_ref< bool(DWARFDIE die)>  callback 
)
overridevirtual

◆ GetGlobalVariables() [1/3]

void ManualDWARFIndex::GetGlobalVariables ( const RegularExpression regex,
llvm::function_ref< bool(DWARFDIE die)>  callback 
)
overridevirtual

◆ GetGlobalVariables() [2/3]

void ManualDWARFIndex::GetGlobalVariables ( ConstString  basename,
llvm::function_ref< bool(DWARFDIE die)>  callback 
)
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().

◆ GetGlobalVariables() [3/3]

void ManualDWARFIndex::GetGlobalVariables ( DWARFUnit cu,
llvm::function_ref< bool(DWARFDIE die)>  callback 
)
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.

◆ GetNamespaces()

void ManualDWARFIndex::GetNamespaces ( ConstString  name,
llvm::function_ref< bool(DWARFDIE die)>  callback 
)
overridevirtual

◆ GetObjCMethods()

void ManualDWARFIndex::GetObjCMethods ( ConstString  class_name,
llvm::function_ref< bool(DWARFDIE die)>  callback 
)
overridevirtual

◆ GetTypes() [1/2]

void ManualDWARFIndex::GetTypes ( const DWARFDeclContext context,
llvm::function_ref< bool(DWARFDIE die)>  callback 
)
overridevirtual

Implements lldb_private::DWARFIndex.

Definition at line 398 of file ManualDWARFIndex.cpp.

◆ GetTypes() [2/2]

void ManualDWARFIndex::GetTypes ( ConstString  name,
llvm::function_ref< bool(DWARFDIE die)>  callback 
)
overridevirtual

◆ Index()

void ManualDWARFIndex::Index ( )
private

◆ IndexUnit()

void ManualDWARFIndex::IndexUnit ( DWARFUnit unit,
SymbolFileDWARFDwo dwp,
IndexSet set 
)
private

◆ IndexUnitImpl()

void ManualDWARFIndex::IndexUnitImpl ( DWARFUnit unit,
const lldb::LanguageType  cu_language,
IndexSet set 
)
staticprivate

◆ LoadFromCache()

bool ManualDWARFIndex::LoadFromCache ( )
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.

Returns
True if the symbol table was successfully loaded from the index cache, false if the symbol table wasn't cached or was out of date.

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().

◆ Preload()

void lldb_private::ManualDWARFIndex::Preload ( )
inlineoverridevirtual

Implements lldb_private::DWARFIndex.

Definition at line 27 of file ManualDWARFIndex.h.

References Index().

Referenced by lldb_private::DebugNamesDWARFIndex::Preload().

◆ SaveToCache()

void ManualDWARFIndex::SaveToCache ( )
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:

  • standard symbol table
  • dynamic symbol table (ELF)
  • compressed debug info sections
  • unwind information
  • function pointers found in runtimes for global constructor/destructors
  • other sources. All of the above sources are combined and one symbol table results after all sources have been considered.

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().

Member Data Documentation

◆ m_dwarf

SymbolFileDWARF* lldb_private::ManualDWARFIndex::m_dwarf
private

The DWARF file which we are indexing.

Definition at line 169 of file ManualDWARFIndex.h.

◆ m_indexed

bool lldb_private::ManualDWARFIndex::m_indexed = false
private

Definition at line 174 of file ManualDWARFIndex.h.

◆ m_set

IndexSet lldb_private::ManualDWARFIndex::m_set
private

Definition at line 173 of file ManualDWARFIndex.h.

◆ m_units_to_avoid

llvm::DenseSet<dw_offset_t> lldb_private::ManualDWARFIndex::m_units_to_avoid
private

Which dwarf units should we skip while building the index.

Definition at line 171 of file ManualDWARFIndex.h.


The documentation for this class was generated from the following files: