LLDB mainline
lldb_private::ModuleList Class Reference

A collection class for Module objects. More...

#include "lldb/Core/ModuleList.h"

Classes

class  Notifier

Public Types

typedef LockingAdaptedIterable< std::recursive_mutex, collectionModuleIterable
typedef llvm::iterator_range< collection::const_iterator > ModuleIterableNoLocking

Public Member Functions

 ModuleList ()
 Default constructor.
 ModuleList (const ModuleList &rhs)
 Copy Constructor.
 ModuleList (ModuleList::Notifier *notifier)
 ~ModuleList ()
 Destructor.
const ModuleListoperator= (const ModuleList &rhs)
 Assignment operator.
void Append (const lldb::ModuleSP &module_sp, bool notify=true)
 Append a module to the module list.
void ReplaceEquivalent (const lldb::ModuleSP &module_sp, llvm::SmallVectorImpl< lldb::ModuleSP > *old_modules=nullptr)
 Append a module to the module list and remove any equivalent modules.
bool AppendIfNeeded (const lldb::ModuleSP &new_module, bool notify=true)
 Append a module to the module list, if it is not already there.
void Append (const ModuleList &module_list)
bool AppendIfNeeded (const ModuleList &module_list)
bool ReplaceModule (const lldb::ModuleSP &old_module_sp, const lldb::ModuleSP &new_module_sp)
void Clear ()
 Clear the object's state.
void Destroy ()
 Clear the object's state.
void Dump (Stream *s) const
 Dump the description of each module contained in this list.
void LogUUIDAndPaths (Log *log, const char *prefix_cstr)
std::recursive_mutex & GetMutex () const
size_t GetIndexForModule (const Module *module) const
lldb::ModuleSP GetModuleAtIndex (size_t idx) const
 Get the module shared pointer for the module at index idx.
lldb::ModuleSP GetModuleAtIndexUnlocked (size_t idx) const
 Get the module shared pointer for the module at index idx without acquiring the ModuleList mutex.
ModuleGetModulePointerAtIndex (size_t idx) const
 Get the module pointer for the module at index idx.
void FindCompileUnits (const FileSpec &path, SymbolContextList &sc_list) const
 Find compile units by partial or full path.
void FindFunctions (ConstString name, lldb::FunctionNameType name_type_mask, const ModuleFunctionSearchOptions &options, SymbolContextList &sc_list) const
void FindFunctionSymbols (ConstString name, lldb::FunctionNameType name_type_mask, SymbolContextList &sc_list)
void FindFunctions (const RegularExpression &name, const ModuleFunctionSearchOptions &options, SymbolContextList &sc_list)
void FindGlobalVariables (ConstString name, size_t max_matches, VariableList &variable_list) const
 Find global and static variables by name.
void FindGlobalVariables (const RegularExpression &regex, size_t max_matches, VariableList &variable_list) const
 Find global and static variables by regular expression.
void FindModules (const ModuleSpec &module_spec, ModuleList &matching_module_list) const
 Finds modules whose file specification matches module_spec.
lldb::ModuleSP FindModule (const Module *module_ptr) const
lldb::ModuleSP FindModule (const UUID &uuid) const
lldb::ModuleSP FindModule (lldb::user_id_t uid) const
 Find a module by LLDB-specific unique identifier.
lldb::ModuleSP FindFirstModule (const ModuleSpec &module_spec) const
 Finds the first module whose file specification matches module_spec.
void FindSymbolsWithNameAndType (ConstString name, lldb::SymbolType symbol_type, SymbolContextList &sc_list) const
void FindSymbolsMatchingRegExAndType (const RegularExpression &regex, lldb::SymbolType symbol_type, SymbolContextList &sc_list) const
void FindTypes (Module *search_first, const TypeQuery &query, lldb_private::TypeResults &results) const
 Find types using a type-matching object that contains all search parameters.
bool FindSourceFile (const FileSpec &orig_spec, FileSpec &new_spec) const
void FindAddressesForLine (const lldb::TargetSP target_sp, const FileSpec &file, uint32_t line, Function *function, std::vector< Address > &output_local, std::vector< Address > &output_extern)
 Find addresses by file/line.
bool Remove (const lldb::ModuleSP &module_sp, bool notify=true)
 Remove a module from the module list.
size_t Remove (ModuleList &module_list)
bool RemoveIfOrphaned (const Module *module_ptr)
size_t RemoveOrphans (bool mandatory)
bool ResolveFileAddress (lldb::addr_t vm_addr, Address &so_addr) const
uint32_t ResolveSymbolContextForAddress (const Address &so_addr, lldb::SymbolContextItem resolve_scope, SymbolContext &sc) const
 Resolve the symbol context for the given address. (const Address&,uint32_t,SymbolContext&)
uint32_t ResolveSymbolContextForFilePath (const char *file_path, uint32_t line, bool check_inlines, lldb::SymbolContextItem resolve_scope, SymbolContextList &sc_list) const
 Resolve items in the symbol context for a given file and line. (const char*,uint32_t,bool,uint32_t,SymbolContextList&)
uint32_t ResolveSymbolContextsForFileSpec (const FileSpec &file_spec, uint32_t line, bool check_inlines, lldb::SymbolContextItem resolve_scope, SymbolContextList &sc_list) const
 Resolve items in the symbol context for a given file and line. (const FileSpec&,uint32_t,bool,uint32_t,SymbolContextList&)
size_t GetSize () const
 Gets the size of the module list.
bool IsEmpty () const
bool LoadScriptingResourcesInTarget (Target *target, std::list< Status > &errors, Stream &feedback_stream, bool continue_on_error=true)
void ForEach (std::function< IterationAction(const lldb::ModuleSP &module_sp)> const &callback) const
 Applies 'callback' to each module in this ModuleList.
bool AnyOf (std::function< bool(lldb_private::Module &module)> const &callback) const
 Returns true if 'callback' returns true for one of the modules in this ModuleList.
void Swap (ModuleList &other)
 Atomically swaps the contents of this module list with other.
ModuleIterable Modules () const
ModuleIterableNoLocking ModulesNoLocking () const

Static Public Member Functions

static ModuleListPropertiesGetGlobalModuleListProperties ()
static bool ModuleIsInCache (const Module *module_ptr)
static Status GetSharedModule (const ModuleSpec &module_spec, lldb::ModuleSP &module_sp, const FileSpecList *module_search_paths_ptr, llvm::SmallVectorImpl< lldb::ModuleSP > *old_modules, bool *did_create_ptr, bool always_create=false)
static bool RemoveSharedModule (lldb::ModuleSP &module_sp)
static void FindSharedModules (const ModuleSpec &module_spec, ModuleList &matching_module_list)
static lldb::ModuleSP FindSharedModule (const UUID &uuid)
static size_t RemoveOrphanSharedModules (bool mandatory)
static bool RemoveSharedModuleIfOrphaned (const Module *module_ptr)

Protected Types

typedef std::vector< lldb::ModuleSPcollection
 The module collection type.

Protected Member Functions

void AppendImpl (const lldb::ModuleSP &module_sp, bool use_notifier=true)
bool RemoveImpl (const lldb::ModuleSP &module_sp, bool use_notifier=true)
collection::iterator RemoveImpl (collection::iterator pos, bool use_notifier=true)
void ClearImpl (bool use_notifier=true)

Protected Attributes

collection m_modules
 The collection of modules.
std::recursive_mutex m_modules_mutex
Notifierm_notifier = nullptr

Detailed Description

A collection class for Module objects.

Modules in the module collection class are stored as reference counted shared pointers to Module objects.

Definition at line 104 of file ModuleList.h.

Member Typedef Documentation

◆ collection

typedef std::vector<lldb::ModuleSP> lldb_private::ModuleList::collection
protected

The module collection type.

Definition at line 517 of file ModuleList.h.

◆ ModuleIterable

Definition at line 536 of file ModuleList.h.

◆ ModuleIterableNoLocking

typedef llvm::iterator_range<collection::const_iterator> lldb_private::ModuleList::ModuleIterableNoLocking

Definition at line 542 of file ModuleList.h.

Constructor & Destructor Documentation

◆ ModuleList() [1/3]

◆ ModuleList() [2/3]

ModuleList::ModuleList ( const ModuleList & rhs)

Copy Constructor.

Creates a new module list object with a copy of the modules from rhs.

Parameters
[in]rhsAnother module list object.

Definition at line 193 of file ModuleList.cpp.

References m_modules, m_modules_mutex, and ModuleList().

◆ ModuleList() [3/3]

ModuleList::ModuleList ( ModuleList::Notifier * notifier)

Definition at line 199 of file ModuleList.cpp.

References m_modules, m_modules_mutex, and m_notifier.

◆ ~ModuleList()

ModuleList::~ModuleList ( )
default

Destructor.

References ModuleList().

Member Function Documentation

◆ AnyOf()

bool ModuleList::AnyOf ( std::function< bool(lldb_private::Module &module)> const & callback) const

Returns true if 'callback' returns true for one of the modules in this ModuleList.

This function is thread-safe.

Definition at line 1332 of file ModuleList.cpp.

References m_modules, and m_modules_mutex.

Referenced by lldb_private::Target::ModulesDidUnload().

◆ Append() [1/2]

void ModuleList::Append ( const lldb::ModuleSP & module_sp,
bool notify = true )

Append a module to the module list.

Parameters
[in]module_spA shared pointer to a module to add to this collection.
[in]notifyIf true, and a notifier function is set, the notifier function will be called. Defaults to true.

When this ModuleList is the Target's ModuleList, the notifier function is Target::ModulesDidLoad – the call to ModulesDidLoad may be deferred when adding multiple Modules to the Target, but it must be called at the end, before resuming execution.

Definition at line 251 of file ModuleList.cpp.

References AppendImpl().

Referenced by lldb_private::DynamicLoaderDarwin::AddModulesUsingPreloadedModules(), CommandObjectTargetSymbolsAdd::AddModuleSymbols(), Append(), AppendIfNeeded(), lldb::SBTarget::ClearModuleLoadAddress(), lldb::SBTarget::ClearSectionLoadAddress(), DynamicLoaderHexagonDYLD::DidAttach(), DynamicLoaderPOSIXDYLD::DidAttach(), lldb_private::DynamicLoaderWindowsDYLD::DidAttach(), DynamicLoaderPOSIXDYLD::DidLaunch(), lldb_private::DynamicLoaderWindowsDYLD::DidLaunch(), lldb_private::SymbolChangeEventData::DoOnRemoval(), FindModules(), lldb_private::plugin::dwarf::SymbolFileDWARFDebugMap::GetDebugInfoModules(), DynamicLoaderMacOSXDYLD::InitializeFromAllImageInfos(), lldb_private::ClangUtilityFunction::Install(), DynamicLoaderHexagonDYLD::LoadAllCurrentModules(), DynamicLoaderPOSIXDYLD::LoadAllCurrentModules(), lldb_private::DynamicLoader::LoadBinaryWithUUIDAndAddress(), ObjectFileMachO::LoadCoreFileImages(), DynamicLoaderDarwinKernel::KextImageInfo::LoadImageUsingMemoryModule(), DynamicLoaderPOSIXDYLD::LoadInterpreterModule(), lldb_private::process_gdb_remote::ProcessGDBRemote::LoadModules(), lldb_private::process_gdb_remote::ProcessGDBRemote::MaybeLoadExecutableModule(), lldb_private::Breakpoint::ModuleReplaced(), lldb_private::Target::NotifyModuleAdded(), lldb_private::Target::NotifyModuleRemoved(), lldb_private::ProcessWindows::OnExitProcess(), lldb_private::DynamicLoaderWindowsDYLD::OnLoadModule(), lldb_private::DynamicLoaderWindowsDYLD::OnUnloadModule(), lldb_private::ClangUserExpression::Parse(), DynamicLoaderMacOSXDYLD::ReadDYLDInfoFromMemoryAndSetNotificationCallback(), JITLoaderGDB::ReadJITDescriptorImpl(), lldb_private::minidump::ProcessMinidump::ReadModuleList(), DynamicLoaderHexagonDYLD::RefreshModules(), DynamicLoaderPOSIXDYLD::RefreshModules(), ReplaceEquivalent(), lldb_private::Symbol::ResolveReExportedSymbolInModuleSpec(), lldb::SBModule::SBModule(), lldb::SBTarget::SetSectionLoadAddress(), lldb_private::DynamicLoaderDarwin::UnloadAllImages(), and lldb_private::FunctionCaller::WriteFunctionWrapper().

◆ Append() [2/2]

void ModuleList::Append ( const ModuleList & module_list)

Definition at line 298 of file ModuleList.cpp.

References Append(), m_modules, and ModuleList().

◆ AppendIfNeeded() [1/2]

bool ModuleList::AppendIfNeeded ( const lldb::ModuleSP & new_module,
bool notify = true )

Append a module to the module list, if it is not already there.

Parameters
[in]notifyIf true, and a notifier function is set, the notifier function will be called. Defaults to true.

When this ModuleList is the Target's ModuleList, the notifier function is Target::ModulesDidLoad – the call to ModulesDidLoad may be deferred when adding multiple Modules to the Target, but it must be called at the end, before resuming execution.

Definition at line 284 of file ModuleList.cpp.

References Append(), m_modules, and m_modules_mutex.

Referenced by lldb_private::DynamicLoaderDarwin::AddModulesUsingPreloadedModules(), AppendIfNeeded(), CreateAllImageInfosPayload(), FindModulesByName(), lldb_private::ScriptedProcess::GetLoadedDynamicLibrariesInfos(), DynamicLoaderStatic::LoadAllImagesAtFileAddresses(), lldb_private::DynamicLoader::LoadBinaryWithUUIDAndAddress(), DynamicLoaderDarwinKernel::KextImageInfo::LoadImageUsingMemoryModule(), DynamicLoaderFreeBSDKernel::KModImageInfo::LoadImageUsingMemoryModule(), lldb_private::process_gdb_remote::ProcessGDBRemote::LoadModules(), lldb_private::Breakpoint::ModulesChanged(), DynamicLoaderDarwinKernel::ParseKextSummaries(), DynamicLoaderFreeBSDKernel::ParseKmods(), DynamicLoaderMacOSXDYLD::ReadDYLDInfoFromMemoryAndSetNotificationCallback(), JITLoaderGDB::ReadJITDescriptorImpl(), DynamicLoaderHexagonDYLD::RefreshModules(), DynamicLoaderPOSIXDYLD::RefreshModules(), DynamicLoaderMacOSXDYLD::RemoveModulesUsingImageInfosAddress(), lldb_private::Symbol::ResolveReExportedSymbolInModuleSpec(), lldb_private::Target::SetExecutableModule(), lldb_private::DynamicLoaderDarwin::UnloadImages(), lldb_private::DynamicLoaderDarwin::UpdateDYLDImageInfoFromNewImageInfo(), DynamicLoaderMacOSXDYLD::UpdateImageInfosHeaderAndLoadCommands(), and lldb_private::DynamicLoaderDarwin::UpdateSpecialBinariesFromPreloadedModules().

◆ AppendIfNeeded() [2/2]

bool ModuleList::AppendIfNeeded ( const ModuleList & module_list)

Definition at line 303 of file ModuleList.cpp.

References AppendIfNeeded(), m_modules, and ModuleList().

◆ AppendImpl()

void ModuleList::AppendImpl ( const lldb::ModuleSP & module_sp,
bool use_notifier = true )
protected

◆ Clear()

void ModuleList::Clear ( )

Clear the object's state.

Clears the list of modules and releases a reference to each module object and if the reference count goes to zero, the module will be deleted.

Definition at line 415 of file ModuleList.cpp.

References ClearImpl().

Referenced by CreateAllImageInfosPayload(), CommandObjectSourceList::DoExecute(), CommandObjectSourceList::FindMatchingFunctions(), CommandObjectSourceList::FindMatchingFunctionSymbols(), and DynamicLoaderMacOS::NotifyBreakpointHit().

◆ ClearImpl()

void ModuleList::ClearImpl ( bool use_notifier = true)
protected

Definition at line 419 of file ModuleList.cpp.

References m_modules, m_modules_mutex, and m_notifier.

Referenced by Clear(), and Destroy().

◆ Destroy()

void ModuleList::Destroy ( )

Clear the object's state.

Clears the list of modules and releases a reference to each module object and if the reference count goes to zero, the module will be deleted. Also release all memory that might be held by any collection classes (like std::vector)

Definition at line 417 of file ModuleList.cpp.

References ClearImpl().

◆ Dump()

void ModuleList::Dump ( Stream * s) const

Dump the description of each module contained in this list.

Dump the description of each module contained in this list to the supplied stream s.

Parameters
[in]sThe stream to which to dump the object description.
See also
Module::Dump(Stream *) const

Definition at line 665 of file ModuleList.cpp.

References m_modules, and m_modules_mutex.

◆ FindAddressesForLine()

void ModuleList::FindAddressesForLine ( const lldb::TargetSP target_sp,
const FileSpec & file,
uint32_t line,
Function * function,
std::vector< Address > & output_local,
std::vector< Address > & output_extern )

Find addresses by file/line.

Parameters
[in]target_spThe target the addresses are desired for.
[in]fileSource file to locate.
[in]lineSource line to locate.
[in]functionOptional filter function. Addresses within this function will be added to the 'local' list. All others will be added to the 'extern' list.
[out]output_localAll matching addresses within 'function'
[out]output_externAll matching addresses not within 'function'

Definition at line 632 of file ModuleList.cpp.

References m_modules, and m_modules_mutex.

Referenced by lldb_private::Thread::JumpToLine().

◆ FindCompileUnits()

void ModuleList::FindCompileUnits ( const FileSpec & path,
SymbolContextList & sc_list ) const

Find compile units by partial or full path.

Finds all compile units that match path in all of the modules and returns the results in sc_list.

Parameters
[in]pathThe name of the compile unit we are looking for.
[out]sc_listA symbol context list that gets filled in with all of the matches.

Definition at line 507 of file ModuleList.cpp.

References m_modules, and m_modules_mutex.

Referenced by CommandObjectTargetVariable::DoExecute().

◆ FindFirstModule()

◆ FindFunctions() [1/2]

void ModuleList::FindFunctions ( const RegularExpression & name,
const ModuleFunctionSearchOptions & options,
SymbolContextList & sc_list )
See also
Module::FindFunctions ()

Definition at line 499 of file ModuleList.cpp.

References m_modules, and m_modules_mutex.

◆ FindFunctions() [2/2]

◆ FindFunctionSymbols()

◆ FindGlobalVariables() [1/2]

void ModuleList::FindGlobalVariables ( const RegularExpression & regex,
size_t max_matches,
VariableList & variable_list ) const

Find global and static variables by regular expression.

Parameters
[in]regexA regular expression to use when matching the name.
[in]max_matchesAllow the number of matches to be limited to max_matches. Specify UINT32_MAX to get all possible matches.
[in]variable_listA list of variables that gets the matches appended to.

Definition at line 523 of file ModuleList.cpp.

References m_modules, and m_modules_mutex.

◆ FindGlobalVariables() [2/2]

void ModuleList::FindGlobalVariables ( ConstString name,
size_t max_matches,
VariableList & variable_list ) const

Find global and static variables by name.

Parameters
[in]nameThe name of the global or static variable we are looking for.
[in]max_matchesAllow the number of matches to be limited to max_matches. Specify UINT32_MAX to get all possible matches.
[in]variable_listA list of variables that gets the matches appended to.

Definition at line 514 of file ModuleList.cpp.

References m_modules, and m_modules_mutex.

Referenced by CommandObjectTargetVariable::DoExecute(), lldb_private::ClangExpressionDeclMap::FindGlobalVariable(), and CommandObjectTargetVariable::GetVariableCallback().

◆ FindModule() [1/3]

◆ FindModule() [2/3]

ModuleSP ModuleList::FindModule ( const UUID & uuid) const

Definition at line 574 of file ModuleList.cpp.

References lldb_private::UUID::IsValid(), m_modules, and m_modules_mutex.

◆ FindModule() [3/3]

ModuleSP ModuleList::FindModule ( lldb::user_id_t uid) const

Find a module by LLDB-specific unique identifier.

Parameters
[in]uidThe UID of the module assigned to it on construction.
Returns
ModuleSP of module with uid. Returns nullptr if no such module could be found.

Definition at line 591 of file ModuleList.cpp.

References lldb_private::Continue, ForEach(), and lldb_private::Stop.

◆ FindModules()

void ModuleList::FindModules ( const ModuleSpec & module_spec,
ModuleList & matching_module_list ) const

Finds modules whose file specification matches module_spec.

Parameters
[in]module_specA file specification object to match against the Module's file specifications. If module_spec does not have directory information, matches will occur by matching only the basename of any modules in this list. If this value is NULL, then file specifications won't be compared when searching for matching modules.
[out]matching_module_listA module list that gets filled in with any modules that match the search criteria.

Definition at line 547 of file ModuleList.cpp.

References Append(), m_modules, m_modules_mutex, and ModuleList().

Referenced by CommandObjectTargetSymbolsAdd::AddModuleSymbols(), CommandObjectSourceInfo::DoExecute(), CommandObjectSourceList::DoExecute(), CommandObjectTargetModulesLoad::DoExecute(), CommandObjectSourceList::FindMatchingFunctions(), CommandObjectSourceList::FindMatchingFunctionSymbols(), FindModulesByName(), FindSharedModules(), GetSharedModule(), and lldb_private::Target::ModuleIsExcludedForUnconstrainedSearches().

◆ FindSharedModule()

lldb::ModuleSP ModuleList::FindSharedModule ( const UUID & uuid)
static

Definition at line 1022 of file ModuleList.cpp.

References FindModule(), and GetSharedModuleList().

◆ FindSharedModules()

void ModuleList::FindSharedModules ( const ModuleSpec & module_spec,
ModuleList & matching_module_list )
static

Definition at line 1017 of file ModuleList.cpp.

References FindModules(), GetSharedModuleList(), and ModuleList().

Referenced by FindModulesByName().

◆ FindSourceFile()

bool ModuleList::FindSourceFile ( const FileSpec & orig_spec,
FileSpec & new_spec ) const

Definition at line 622 of file ModuleList.cpp.

References m_modules, and m_modules_mutex.

◆ FindSymbolsMatchingRegExAndType()

void ModuleList::FindSymbolsMatchingRegExAndType ( const RegularExpression & regex,
lldb::SymbolType symbol_type,
SymbolContextList & sc_list ) const

◆ FindSymbolsWithNameAndType()

◆ FindTypes()

void ModuleList::FindTypes ( Module * search_first,
const TypeQuery & query,
lldb_private::TypeResults & results ) const

Find types using a type-matching object that contains all search parameters.

Parameters
[in]search_firstIf non-null, this module will be searched before any other modules.
[in]queryA type matching object that contains all of the details of the type search.
[in]resultsAny matching types will be populated into the results object using TypeMap::InsertUnique(...).

Definition at line 605 of file ModuleList.cpp.

References lldb_private::TypeResults::Done(), lldb_private::Module::FindTypes(), m_modules, and m_modules_mutex.

Referenced by CommandObjectMemoryRead::DoExecute(), lldb_private::ClangASTSource::FindCompleteType(), lldb::SBTarget::FindTypes(), and lldb_private::TypeFormatImpl_EnumType::FormatObject().

◆ ForEach()

void ModuleList::ForEach ( std::function< IterationAction(const lldb::ModuleSP &module_sp)> const & callback) const

Applies 'callback' to each module in this ModuleList.

If 'callback' returns false, iteration terminates. The 'module_sp' passed to 'callback' is guaranteed to be non-null.

This function is thread-safe.

Definition at line 1321 of file ModuleList.cpp.

References m_modules, m_modules_mutex, and lldb_private::Stop.

Referenced by lldb_private::minidump::ProcessMinidump::BuildMemoryRegions(), FindModule(), lldb_private::Target::GetOrCreateModule(), lldb_private::GetPreferredAsanModule(), lldb_private::process_gdb_remote::ProcessGDBRemote::LoadModules(), lldb_private::InstrumentationRuntime::ModulesDidLoad(), and lldb_private::CommandCompletions::ModuleUUIDs().

◆ GetGlobalModuleListProperties()

◆ GetIndexForModule()

size_t ModuleList::GetIndexForModule ( const Module * module) const

◆ GetModuleAtIndex()

ModuleSP ModuleList::GetModuleAtIndex ( size_t idx) const

Get the module shared pointer for the module at index idx.

Parameters
[in]idxAn index into this module collection.
Returns
A shared pointer to a Module which can contain NULL if idx is out of range.
See also
ModuleList::GetSize()

Definition at line 433 of file ModuleList.cpp.

References GetModuleAtIndexUnlocked(), and m_modules_mutex.

Referenced by AddLinkMapSections(), MinidumpFileBuilder::AddModuleList(), CommandObjectTargetSymbolsAdd::AddModuleSymbols(), lldb_private::OptionValueUUID::AutoComplete(), BuildModulesSection(), CreateAllImageInfosPayload(), CommandObjectSourceList::DoExecute(), CommandObjectTargetModulesLoad::DoExecute(), lldb_private::Target::GetEntryPointAddress(), lldb_private::AppleObjCRuntime::GetFoundationVersion(), lldb::SBTarget::GetModuleAtIndexFromEvent(), lldb_private::AppleObjCRuntime::GetObjCModule(), lldb_private::DynamicLoaderDarwin::GetPThreadLibraryModule(), GetSharedModule(), CommandObjectSourceInfo::GetSymbolContextsForAddress(), lldb_private::process_gdb_remote::ProcessGDBRemote::LoadModules(), lldb_private::Target::ModuleIsExcludedForUnconstrainedSearches(), lldb_private::StructuredDataDarwinLog::ModulesDidLoad(), lldb_private::Target::ModulesDidLoad(), lldb_private::AppleObjCRuntime::ReadObjCLibraryIfNeeded(), lldb_private::ObjCLanguageRuntime::ReadObjCLibraryIfNeeded(), lldb_private::DebuggerStats::ReportStatistics(), lldb_private::DebuggerStats::ResetStatistics(), ScanForGNUstepObjCLibraryCandidate(), and lldb_private::Target::UnloadModuleSections().

◆ GetModuleAtIndexUnlocked()

ModuleSP ModuleList::GetModuleAtIndexUnlocked ( size_t idx) const

Get the module shared pointer for the module at index idx without acquiring the ModuleList mutex.

This MUST already have been acquired with ModuleList::GetMutex and locked for this call to be safe.

Parameters
[in]idxAn index into this module collection.
Returns
A shared pointer to a Module which can contain NULL if idx is out of range.
See also
ModuleList::GetSize()

Definition at line 438 of file ModuleList.cpp.

References m_modules.

Referenced by CommandObjectTargetModulesList::DoExecute(), and GetModuleAtIndex().

◆ GetModulePointerAtIndex()

Module * ModuleList::GetModulePointerAtIndex ( size_t idx) const

◆ GetMutex()

◆ GetSharedModule()

Status ModuleList::GetSharedModule ( const ModuleSpec & module_spec,
lldb::ModuleSP & module_sp,
const FileSpecList * module_search_paths_ptr,
llvm::SmallVectorImpl< lldb::ModuleSP > * old_modules,
bool * did_create_ptr,
bool always_create = false )
static

Definition at line 1031 of file ModuleList.cpp.

References error(), lldb_private::ObjectFile::eTypeStubLibrary, FindModules(), lldb_private::Status::FromErrorString(), lldb_private::Status::FromErrorStringWithFormat(), lldb_private::ModuleSpec::GetArchitecture(), lldb_private::ArchSpec::GetArchitectureName(), lldb_private::UUID::GetAsString(), lldb_private::FileSpec::GetFilename(), lldb_private::ModuleSpec::GetFileSpec(), lldb_private::FileSpecList::GetFileSpecAtIndex(), lldb_private::GetLog(), lldb_private::FileSystem::GetModificationTime(), GetModuleAtIndex(), lldb_private::FileSpec::GetPath(), lldb_private::ModuleSpec::GetPlatformFileSpec(), GetSharedModuleList(), lldb_private::FileSpecList::GetSize(), GetSize(), lldb_private::ConstString::GetStringRef(), lldb_private::ModuleSpec::GetSymbolFileSpec(), lldb_private::ModuleSpec::GetUUIDPtr(), lldb_private::FileSystem::Instance(), IsEmpty(), lldb_private::ArchSpec::IsValid(), lldb_private::UUID::IsValid(), LLDB_LOGF, lldb_private::PluginManager::LocateExecutableObjectFile(), m_modules_mutex, ModuleList(), lldb_private::Modules, PATH_MAX, Remove(), ReplaceEquivalent(), lldb_private::FileSystem::Resolve(), and lldb_private::Status.

Referenced by lldb_private::Platform::CallLocateModuleCallbackIfSet(), ProcessElfCore::CanDebug(), ProcessMachCore::CanDebug(), lldb_private::ModuleCache::Get(), lldb_private::Target::GetOrCreateModule(), lldb_private::Platform::GetRemoteSharedModule(), lldb_private::Platform::GetSharedModule(), lldb_private::PlatformAppleSimulator::GetSharedModule(), lldb_private::PlatformRemoteDarwinDevice::GetSharedModule(), lldb_private::PlatformDarwinDevice::GetSharedModuleWithLocalCache(), lldb_private::DynamicLoader::LoadBinaryWithUUIDAndAddress(), lldb_private::Platform::ResolveExecutable(), lldb::SBModule::SBModule(), lldb_private::Target::SetArchitecture(), and lldb_private::plugin::dwarf::SymbolFileDWARF::UpdateExternalModuleListIfNeeded().

◆ GetSize()

size_t ModuleList::GetSize ( ) const

Gets the size of the module list.

Returns
The number of modules in the module list.

Definition at line 656 of file ModuleList.cpp.

References m_modules, and m_modules_mutex.

Referenced by AddLinkMapSections(), MinidumpFileBuilder::AddModuleList(), lldb_private::DynamicLoaderDarwin::AddModulesUsingPreloadedModules(), CommandObjectTargetSymbolsAdd::AddModuleSymbols(), lldb_private::OptionValueUUID::AutoComplete(), BuildModulesSection(), DynamicLoaderMacOS::CanLoadImage(), CreateAllImageInfosPayload(), CommandObjectSourceInfo::DoExecute(), CommandObjectSourceList::DoExecute(), CommandObjectTargetModulesDumpClangAST::DoExecute(), CommandObjectTargetModulesDumpLineTable::DoExecute(), CommandObjectTargetModulesDumpSections::DoExecute(), CommandObjectTargetModulesDumpSeparateDebugInfoFiles::DoExecute(), CommandObjectTargetModulesDumpSymfile::DoExecute(), CommandObjectTargetModulesDumpSymtab::DoExecute(), CommandObjectTargetModulesList::DoExecute(), CommandObjectTargetModulesLoad::DoExecute(), CommandObjectTargetModulesLookup::DoExecute(), CommandObjectSourceInfo::DumpLinesForFile(), CommandObjectSourceInfo::DumpLinesInSymbolContexts(), DumpModuleObjfileHeaders(), FindModulesByName(), lldb_private::Target::GetEntryPointAddress(), lldb_private::AppleObjCRuntime::GetFoundationVersion(), lldb::SBTarget::GetNumModulesFromEvent(), lldb_private::AppleObjCRuntime::GetObjCModule(), lldb_private::DynamicLoaderDarwin::GetPThreadLibraryModule(), GetSharedModule(), CommandObjectSourceInfo::GetSymbolContextsForAddress(), DynamicLoaderMacOSXDYLD::InitializeFromAllImageInfos(), IsEmpty(), ObjectFileMachO::LoadCoreFileImages(), lldb_private::process_gdb_remote::ProcessGDBRemote::LoadModules(), lldb_private::Target::ModuleIsExcludedForUnconstrainedSearches(), lldb_private::Breakpoint::ModulesChanged(), lldb_private::StructuredDataDarwinLog::ModulesDidLoad(), lldb_private::Target::ModulesDidLoad(), lldb_private::Target::ModulesDidUnload(), DynamicLoaderMacOS::NotifyBreakpointHit(), lldb_private::AppleObjCRuntime::ReadObjCLibraryIfNeeded(), lldb_private::ObjCLanguageRuntime::ReadObjCLibraryIfNeeded(), DynamicLoaderMacOSXDYLD::RemoveModulesUsingImageInfosAddress(), lldb_private::DebuggerStats::ReportStatistics(), lldb_private::DebuggerStats::ResetStatistics(), ScanForGNUstepObjCLibraryCandidate(), lldb_private::Target::SymbolsDidLoad(), lldb_private::DynamicLoaderDarwin::UnloadAllImages(), lldb_private::DynamicLoaderDarwin::UnloadImages(), and lldb_private::Target::UnloadModuleSections().

◆ IsEmpty()

bool lldb_private::ModuleList::IsEmpty ( ) const
inline

◆ LoadScriptingResourcesInTarget()

bool ModuleList::LoadScriptingResourcesInTarget ( Target * target,
std::list< Status > & errors,
Stream & feedback_stream,
bool continue_on_error = true )

◆ LogUUIDAndPaths()

◆ ModuleIsInCache()

bool ModuleList::ModuleIsInCache ( const Module * module_ptr)
static

◆ Modules()

◆ ModulesNoLocking()

◆ operator=()

const ModuleList & ModuleList::operator= ( const ModuleList & rhs)

Assignment operator.

Copies the module list from rhs into this list.

Parameters
[in]rhsAnother module list object.
Returns
A const reference to this object.

Definition at line 202 of file ModuleList.cpp.

References m_modules, m_modules_mutex, and ModuleList().

◆ Remove() [1/2]

bool ModuleList::Remove ( const lldb::ModuleSP & module_sp,
bool notify = true )

Remove a module from the module list.

Parameters
[in]module_spA shared pointer to a module to remove from this collection.
[in]notifyIf true, and a notifier function is set, the notifier function will be called. Defaults to true.

When this ModuleList is the Target's ModuleList, the notifier function is Target::ModulesDidUnload – the call to ModulesDidUnload may be deferred when removing multiple Modules from the Target, but it must be called at the end, before resuming execution.

Definition at line 338 of file ModuleList.cpp.

References RemoveImpl().

Referenced by lldb_private::IRExecutionUnit::FindInSymbols(), lldb_private::minidump::ProcessMinidump::GetOrCreateModule(), GetSharedModule(), DynamicLoaderMacOSXDYLD::InitializeFromAllImageInfos(), DynamicLoaderDarwinKernel::KextImageInfo::LoadImageUsingMemoryModule(), lldb_private::process_gdb_remote::ProcessGDBRemote::LoadModules(), JITLoaderGDB::ReadJITDescriptorImpl(), DynamicLoaderHexagonDYLD::RefreshModules(), DynamicLoaderPOSIXDYLD::RefreshModules(), Remove(), RemoveSharedModule(), and lldb_private::DynamicLoaderDarwin::UnloadAllImages().

◆ Remove() [2/2]

size_t ModuleList::Remove ( ModuleList & module_list)

Definition at line 402 of file ModuleList.cpp.

References m_modules, m_modules_mutex, m_notifier, ModuleList(), and Remove().

◆ RemoveIfOrphaned()

bool ModuleList::RemoveIfOrphaned ( const Module * module_ptr)

Definition at line 352 of file ModuleList.cpp.

References m_modules, m_modules_mutex, and RemoveImpl().

Referenced by RemoveSharedModuleIfOrphaned().

◆ RemoveImpl() [1/2]

collection::iterator lldb_private::ModuleList::RemoveImpl ( collection::iterator pos,
bool use_notifier = true )
protected

◆ RemoveImpl() [2/2]

bool ModuleList::RemoveImpl ( const lldb::ModuleSP & module_sp,
bool use_notifier = true )
protected

◆ RemoveOrphans()

size_t ModuleList::RemoveOrphans ( bool mandatory)

Definition at line 369 of file ModuleList.cpp.

References m_modules, m_modules_mutex, and RemoveImpl().

Referenced by RemoveOrphanSharedModules().

◆ RemoveOrphanSharedModules()

size_t ModuleList::RemoveOrphanSharedModules ( bool mandatory)
static

◆ RemoveSharedModule()

bool ModuleList::RemoveSharedModule ( lldb::ModuleSP & module_sp)
static

Definition at line 1277 of file ModuleList.cpp.

References GetSharedModuleList(), and Remove().

◆ RemoveSharedModuleIfOrphaned()

bool ModuleList::RemoveSharedModuleIfOrphaned ( const Module * module_ptr)
static

Definition at line 1281 of file ModuleList.cpp.

References GetSharedModuleList(), and RemoveIfOrphaned().

Referenced by lldb_private::Target::GetOrCreateModule().

◆ ReplaceEquivalent()

void ModuleList::ReplaceEquivalent ( const lldb::ModuleSP & module_sp,
llvm::SmallVectorImpl< lldb::ModuleSP > * old_modules = nullptr )

Append a module to the module list and remove any equivalent modules.

Equivalent modules are ones whose file, platform file and architecture matches.

Replaces the module to the collection.

Parameters
[in]module_spA shared pointer to a module to replace in this collection.
[in]old_modulesOptional pointer to a vector which, if provided, will have shared pointers to the replaced module(s) appended to it.

Definition at line 255 of file ModuleList.cpp.

References Append(), lldb_private::ModuleSpec::GetPlatformFileSpec(), m_modules, m_modules_mutex, and RemoveImpl().

Referenced by GetSharedModule().

◆ ReplaceModule()

bool ModuleList::ReplaceModule ( const lldb::ModuleSP & old_module_sp,
const lldb::ModuleSP & new_module_sp )

Definition at line 342 of file ModuleList.cpp.

References AppendImpl(), m_notifier, and RemoveImpl().

◆ ResolveFileAddress()

bool ModuleList::ResolveFileAddress ( lldb::addr_t vm_addr,
Address & so_addr ) const

Definition at line 688 of file ModuleList.cpp.

References m_modules, and m_modules_mutex.

Referenced by ResolveAddress().

◆ ResolveSymbolContextForAddress()

uint32_t ModuleList::ResolveSymbolContextForAddress ( const Address & so_addr,
lldb::SymbolContextItem resolve_scope,
SymbolContext & sc ) const

Resolve the symbol context for the given address. (const Address&,uint32_t,SymbolContext&)

Tries to resolve the matching symbol context based on a lookup from the current symbol vendor. If the lazy lookup fails, an attempt is made to parse the eh_frame section to handle stripped symbols. If this fails, an attempt is made to resolve the symbol to the previous address to handle the case of a function with a tail call.

Use properties of the modified SymbolContext to inspect any resolved target, module, compilation unit, symbol, function, function block or line entry. Use the return value to determine which of these properties have been modified.

Parameters
[in]so_addrA load address to resolve.
[in]resolve_scopeThe scope that should be resolved (see SymbolContext::Scope). A combination of flags from the enumeration SymbolContextItem requesting a resolution depth. Note that the flags that are actually resolved may be a superset of the requested flags. For instance, eSymbolContextSymbol requires resolution of eSymbolContextModule, and eSymbolContextFunction requires eSymbolContextSymbol.
[out]scThe SymbolContext that is modified based on symbol resolution.
[in]resolve_tail_call_addressDetermines if so_addr should resolve to a symbol in the case of a function whose last instruction is a call. In this case, the PC can be one past the address range of the function.
Returns
The scope that has been resolved (see SymbolContext::Scope).
See also
SymbolContext::Scope (const Address&,uint32_t,SymbolContext&)

Definition at line 700 of file ModuleList.cpp.

References lldb_private::Address::GetModule(), m_modules, and m_modules_mutex.

Referenced by lldb_private::Address::Dump(), and lldb_private::CPPLanguageRuntime::FindLibCppStdFunctionCallableInfo().

◆ ResolveSymbolContextForFilePath()

uint32_t ModuleList::ResolveSymbolContextForFilePath ( const char * file_path,
uint32_t line,
bool check_inlines,
lldb::SymbolContextItem resolve_scope,
SymbolContextList & sc_list ) const

Resolve items in the symbol context for a given file and line. (const char*,uint32_t,bool,uint32_t,SymbolContextList&)

Tries to resolve file_path and line to a list of matching symbol contexts.

The line table entries contains addresses that can be used to further resolve the values in each match: the function, block, symbol. Care should be taken to minimize the amount of information that is requested to only what is needed – typically the module, compile unit, line table and line table entry are sufficient.

Parameters
[in]file_pathA path to a source file to match. If file_path does not specify a directory, then this query will match all files whose base filename matches. If file_path does specify a directory, the fullpath to the file must match.
[in]lineThe source line to match, or zero if just the compile unit should be resolved.
[in]check_inlinesCheck for inline file and line number matches. This option should be used sparingly as it will cause all line tables for every compile unit to be parsed and searched for matching inline file entries.
[in]resolve_scopeThe scope that should be resolved (see SymbolContext::Scope).
[out]sc_listA symbol context list that gets matching symbols contexts appended to.
Returns
The number of matches that were added to sc_list.
See also
SymbolContext::Scope (const char*,uint32_t,bool,uint32_t,SymbolContextList&)

Definition at line 723 of file ModuleList.cpp.

References ResolveSymbolContextsForFileSpec().

◆ ResolveSymbolContextsForFileSpec()

uint32_t ModuleList::ResolveSymbolContextsForFileSpec ( const FileSpec & file_spec,
uint32_t line,
bool check_inlines,
lldb::SymbolContextItem resolve_scope,
SymbolContextList & sc_list ) const

Resolve items in the symbol context for a given file and line. (const FileSpec&,uint32_t,bool,uint32_t,SymbolContextList&)

Tries to resolve file_spec and line to a list of matching symbol contexts.

The line table entries contains addresses that can be used to further resolve the values in each match: the function, block, symbol. Care should be taken to minimize the amount of information that is requested to only what is needed – typically the module, compile unit, line table and line table entry are sufficient.

Parameters
[in]file_specA file spec to a source file to match. If file_path does not specify a directory, then this query will match all files whose base filename matches. If file_path does specify a directory, the fullpath to the file must match.
[in]lineThe source line to match, or zero if just the compile unit should be resolved.
[in]check_inlinesCheck for inline file and line number matches. This option should be used sparingly as it will cause all line tables for every compile unit to be parsed and searched for matching inline file entries.
[in]resolve_scopeThe scope that should be resolved (see SymbolContext::Scope).
[out]sc_listA symbol context list that gets filled in with all of the matches.
Returns
A integer that contains SymbolContext::Scope bits set for each item that was successfully resolved.
See also
SymbolContext::Scope (const FileSpec&,uint32_t,bool,uint32_t,SymbolContextList&)

Definition at line 731 of file ModuleList.cpp.

References lldb_private::SymbolContextList::GetSize(), m_modules, and m_modules_mutex.

Referenced by CommandObjectSourceList::DoExecute(), and ResolveSymbolContextForFilePath().

◆ Swap()

void ModuleList::Swap ( ModuleList & other)

Atomically swaps the contents of this module list with other.

Definition at line 1346 of file ModuleList.cpp.

References m_modules, m_modules_mutex, and ModuleList().

Member Data Documentation

◆ m_modules

◆ m_modules_mutex

◆ m_notifier

Notifier* lldb_private::ModuleList::m_notifier = nullptr
protected

Definition at line 532 of file ModuleList.h.

Referenced by AppendImpl(), ClearImpl(), ModuleList(), Remove(), RemoveImpl(), and ReplaceModule().


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