[lldb/Plugins] Add Attach capabilities to ScriptedProcess
This patch adds process attach capabilities to the ScriptedProcess
plugin. This doesn't really expects a PID or process name, since the
process state is already script, however, this allows to create a
scripted process without requiring to have an executuble in the target.
In order to do so, this patch also turns the scripted process related
getters and setters from the `ProcessLaunchInfo` and
`ProcessAttachInfo` classes to a `ScriptedMetadata` instance and moves
it in the `ProcessInfo` class, so it can be accessed interchangeably.
This also adds the necessary SWIG wrappers to convert the internal
`Process{Attach,Launch}InfoSP` into a `SB{Attach,Launch}Info` to pass it
as argument the scripted process python implementation and convert it
back to the internal representation.
rdar://104577406
Differential Revision: https://reviews.llvm.org/D143104
Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
This commit is contained in:
@@ -195,6 +195,34 @@ Status ScriptedProcess::DoResume() {
|
||||
return error;
|
||||
}
|
||||
|
||||
Status ScriptedProcess::DoAttach(const ProcessAttachInfo &attach_info) {
|
||||
Status error = GetInterface().Attach(attach_info);
|
||||
SetPrivateState(eStateRunning);
|
||||
SetPrivateState(eStateStopped);
|
||||
if (error.Fail())
|
||||
return error;
|
||||
// NOTE: We need to set the PID before finishing to attach otherwise we will
|
||||
// hit an assert when calling the attach completion handler.
|
||||
DidLaunch();
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
Status
|
||||
ScriptedProcess::DoAttachToProcessWithID(lldb::pid_t pid,
|
||||
const ProcessAttachInfo &attach_info) {
|
||||
return DoAttach(attach_info);
|
||||
}
|
||||
|
||||
Status ScriptedProcess::DoAttachToProcessWithName(
|
||||
const char *process_name, const ProcessAttachInfo &attach_info) {
|
||||
return DoAttach(attach_info);
|
||||
}
|
||||
|
||||
void ScriptedProcess::DidAttach(ArchSpec &process_arch) {
|
||||
process_arch = GetArchitecture();
|
||||
}
|
||||
|
||||
Status ScriptedProcess::DoStop() {
|
||||
Log *log = GetLog(LLDBLog::Process);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user