forked from OSchip/llvm-project
Make DynamicLoaderPOSIXDYLD::DidAttach to deduce a target executable by pid if no executable hasn't been assigned to a target so far.
http://reviews.llvm.org/D6740 llvm-svn: 225332
This commit is contained in:
parent
d00a923e5d
commit
0ddd41cd2d
|
@ -112,9 +112,6 @@ void
|
||||||
DynamicLoaderPOSIXDYLD::DidAttach()
|
DynamicLoaderPOSIXDYLD::DidAttach()
|
||||||
{
|
{
|
||||||
Log *log (GetLogIfAnyCategoriesSet(LIBLLDB_LOG_DYNAMIC_LOADER));
|
Log *log (GetLogIfAnyCategoriesSet(LIBLLDB_LOG_DYNAMIC_LOADER));
|
||||||
ModuleSP executable_sp;
|
|
||||||
addr_t load_offset;
|
|
||||||
|
|
||||||
if (log)
|
if (log)
|
||||||
log->Printf ("DynamicLoaderPOSIXDYLD::%s() pid %" PRIu64, __FUNCTION__, m_process ? m_process->GetID () : LLDB_INVALID_PROCESS_ID);
|
log->Printf ("DynamicLoaderPOSIXDYLD::%s() pid %" PRIu64, __FUNCTION__, m_process ? m_process->GetID () : LLDB_INVALID_PROCESS_ID);
|
||||||
|
|
||||||
|
@ -122,8 +119,19 @@ DynamicLoaderPOSIXDYLD::DidAttach()
|
||||||
if (log)
|
if (log)
|
||||||
log->Printf ("DynamicLoaderPOSIXDYLD::%s pid %" PRIu64 " reloaded auxv data", __FUNCTION__, m_process ? m_process->GetID () : LLDB_INVALID_PROCESS_ID);
|
log->Printf ("DynamicLoaderPOSIXDYLD::%s pid %" PRIu64 " reloaded auxv data", __FUNCTION__, m_process ? m_process->GetID () : LLDB_INVALID_PROCESS_ID);
|
||||||
|
|
||||||
executable_sp = GetTargetExecutable();
|
ModuleSP executable_sp = GetTargetExecutable();
|
||||||
load_offset = ComputeLoadOffset();
|
ModuleSpec process_module_spec;
|
||||||
|
if (GetProcessModuleSpec(process_module_spec))
|
||||||
|
{
|
||||||
|
if (executable_sp == nullptr || !executable_sp->MatchesModuleSpec(process_module_spec))
|
||||||
|
{
|
||||||
|
executable_sp.reset(new Module(process_module_spec));
|
||||||
|
assert(m_process != nullptr);
|
||||||
|
m_process->GetTarget().SetExecutableModule(executable_sp, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
addr_t load_offset = ComputeLoadOffset();
|
||||||
if (log)
|
if (log)
|
||||||
log->Printf ("DynamicLoaderPOSIXDYLD::%s pid %" PRIu64 " executable '%s', load_offset 0x%" PRIx64, __FUNCTION__, m_process ? m_process->GetID () : LLDB_INVALID_PROCESS_ID, executable_sp ? executable_sp->GetFileSpec().GetPath().c_str () : "<null executable>", load_offset);
|
log->Printf ("DynamicLoaderPOSIXDYLD::%s pid %" PRIu64 " executable '%s', load_offset 0x%" PRIx64, __FUNCTION__, m_process ? m_process->GetID () : LLDB_INVALID_PROCESS_ID, executable_sp ? executable_sp->GetFileSpec().GetPath().c_str () : "<null executable>", load_offset);
|
||||||
|
|
||||||
|
@ -613,3 +621,18 @@ DynamicLoaderPOSIXDYLD::GetThreadLocalData (const lldb::ModuleSP module, const l
|
||||||
|
|
||||||
return tls_block;
|
return tls_block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
DynamicLoaderPOSIXDYLD::GetProcessModuleSpec (ModuleSpec& module_spec)
|
||||||
|
{
|
||||||
|
if (m_process == nullptr)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
auto& target = m_process->GetTarget ();
|
||||||
|
ProcessInstanceInfo process_info;
|
||||||
|
if (!target.GetPlatform ()->GetProcessInfo (m_process->GetID (), process_info))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
module_spec = ModuleSpec (process_info.GetExecutableFile (), process_info.GetArchitecture ());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -168,6 +168,10 @@ protected:
|
||||||
lldb::addr_t
|
lldb::addr_t
|
||||||
GetEntryPoint();
|
GetEntryPoint();
|
||||||
|
|
||||||
|
/// Loads ModuleSpec data from inferior process.
|
||||||
|
bool
|
||||||
|
GetProcessModuleSpec(lldb_private::ModuleSpec& module_spec);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DISALLOW_COPY_AND_ASSIGN(DynamicLoaderPOSIXDYLD);
|
DISALLOW_COPY_AND_ASSIGN(DynamicLoaderPOSIXDYLD);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue