Patch from Andrew Kaylor for linux:

The attached patch fixes a problem with performing an attach from the SBTarget API on Linux (and other systems that use ProcessPOSIX).
 
When Process::Attach was called from SBTarget, it resulted in a call to a form of the DoAttachWithID function that wasn't implemented in ProcessPOSIX, and so it fell back to the default implementation (which just returns an error).  It didn't seem necessary to use the attach_info parameter for this case, so I just implemented it as a call to the simpler version of the function.
 
In debugging this problem, I also found that SBTarget wasn't checking the return value from the Attach call, causing it to hang when the attach fails.

llvm-svn: 163399
This commit is contained in:
Greg Clayton 2012-09-07 17:51:47 +00:00
parent 542e407581
commit e2186ed6d9
3 changed files with 15 additions and 3 deletions

View File

@ -957,10 +957,13 @@ SBTarget::AttachToProcessWithID
attach_info.SetUserID(instance_info.GetEffectiveUserID());
}
error.SetError (process_sp->Attach (attach_info));
// If we are doing synchronous mode, then wait for the
// process to stop!
if (target_sp->GetDebugger().GetAsyncExecution () == false)
if (error.Success())
{
// If we are doing synchronous mode, then wait for the
// process to stop!
if (target_sp->GetDebugger().GetAsyncExecution () == false)
process_sp->WaitForProcessToStop (NULL);
}
}
else
{

View File

@ -117,6 +117,12 @@ ProcessPOSIX::DoAttachToProcessWithID(lldb::pid_t pid)
return error;
}
Error
ProcessPOSIX::DoAttachToProcessWithID (lldb::pid_t pid, const ProcessAttachInfo &attach_info)
{
return DoAttachToProcessWithID(pid);
}
Error
ProcessPOSIX::WillLaunch(Module* module)
{

View File

@ -48,6 +48,9 @@ public:
virtual lldb_private::Error
DoAttachToProcessWithID(lldb::pid_t pid);
virtual lldb_private::Error
DoAttachToProcessWithID (lldb::pid_t pid, const lldb_private::ProcessAttachInfo &attach_info);
virtual lldb_private::Error
DoLaunch (lldb_private::Module *exe_module,
const lldb_private::ProcessLaunchInfo &launch_info);