summaryrefslogtreecommitdiffstats
path: root/lldb/source/API
diff options
context:
space:
mode:
authorJames McIlree <jmcilree@apple.com>2011-03-04 00:31:13 +0000
committerJames McIlree <jmcilree@apple.com>2011-03-04 00:31:13 +0000
commit9631aae211e557f1ddad20a30d4b4276b853bbec (patch)
tree4b89527ff9e428a421bc8eab3190182eabd719bc /lldb/source/API
parent54366f12cb614f3d3546e39ff12f4ca0a5d161fe (diff)
downloadbcm5719-llvm-9631aae211e557f1ddad20a30d4b4276b853bbec.tar.gz
bcm5719-llvm-9631aae211e557f1ddad20a30d4b4276b853bbec.zip
Expose ConnectRemote API through SBTarget and SBProcess.
Patch verified by Greg Clayton prior to checkin. llvm-svn: 126974
Diffstat (limited to 'lldb/source/API')
-rw-r--r--lldb/source/API/SBProcess.cpp82
-rw-r--r--lldb/source/API/SBTarget.cpp35
2 files changed, 117 insertions, 0 deletions
diff --git a/lldb/source/API/SBProcess.cpp b/lldb/source/API/SBProcess.cpp
index b56df41ac05..4566f76687f 100644
--- a/lldb/source/API/SBProcess.cpp
+++ b/lldb/source/API/SBProcess.cpp
@@ -95,6 +95,88 @@ SBProcess::IsValid() const
return m_opaque_sp.get() != NULL;
}
+bool
+SBProcess::RemoteLaunch (char const **argv,
+ char const **envp,
+ const char *stdin_path,
+ const char *stdout_path,
+ const char *stderr_path,
+ const char *working_directory,
+ uint32_t launch_flags,
+ bool stop_at_entry,
+ lldb::SBError& error)
+{
+ LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+ if (log) {
+ log->Printf ("SBProcess(%p)::RemoteLaunch (argv=%p, envp=%p, stdin=%s, stdout=%s, stderr=%s, working-dir=%s, launch_flags=0x%x, stop_at_entry=%i, &error (%p))...",
+ m_opaque_sp.get(),
+ argv,
+ envp,
+ stdin_path ? stdin_path : "NULL",
+ stdout_path ? stdout_path : "NULL",
+ stderr_path ? stderr_path : "NULL",
+ working_directory ? working_directory : "NULL",
+ launch_flags,
+ stop_at_entry,
+ error.get());
+ }
+
+ if (m_opaque_sp)
+ {
+ Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
+ if (m_opaque_sp->GetState() == eStateConnected)
+ {
+ error.SetError (m_opaque_sp->Launch (argv, envp, launch_flags, stdin_path, stdout_path, stderr_path, working_directory));
+ }
+ else
+ {
+ error.SetErrorString ("must be in eStateConnected to call RemoteLaunch");
+ }
+ }
+ else
+ {
+ error.SetErrorString ("unable to attach pid");
+ }
+
+ if (log) {
+ SBStream sstr;
+ error.GetDescription (sstr);
+ log->Printf ("SBProcess(%p)::RemoteLaunch (...) => SBError (%p): %s", error.get(), sstr.GetData());
+ }
+
+ return error.Success();
+}
+
+bool
+SBProcess::RemoteAttachToProcessWithID (lldb::pid_t pid, lldb::SBError& error)
+{
+ if (m_opaque_sp)
+ {
+ Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex());
+ if (m_opaque_sp->GetState() == eStateConnected)
+ {
+ error.SetError (m_opaque_sp->Attach (pid));
+ }
+ else
+ {
+ error.SetErrorString ("must be in eStateConnected to call RemoteAttachToProcessWithID");
+ }
+ }
+ else
+ {
+ error.SetErrorString ("unable to attach pid");
+ }
+
+ LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+ if (log) {
+ SBStream sstr;
+ error.GetDescription (sstr);
+ log->Printf ("SBProcess(%p)::RemoteAttachToProcessWithID (%d) => SBError (%p): %s", error.get(), sstr.GetData());
+ }
+
+ return error.Success();
+}
+
uint32_t
SBProcess::GetNumThreads ()
diff --git a/lldb/source/API/SBTarget.cpp b/lldb/source/API/SBTarget.cpp
index 7358a386946..d1a1f275e33 100644
--- a/lldb/source/API/SBTarget.cpp
+++ b/lldb/source/API/SBTarget.cpp
@@ -366,6 +366,41 @@ SBTarget::AttachToProcessWithName
}
+lldb::SBProcess
+SBTarget::ConnectRemote
+(
+ SBListener &listener,
+ const char *url,
+ const char *plugin_name,
+ SBError& error
+)
+{
+ SBProcess sb_process;
+ if (m_opaque_sp)
+ {
+ Mutex::Locker api_locker (m_opaque_sp->GetAPIMutex());
+ if (listener.IsValid())
+ sb_process.SetProcess (m_opaque_sp->CreateProcess (listener.ref(), plugin_name));
+ else
+ sb_process.SetProcess (m_opaque_sp->CreateProcess (m_opaque_sp->GetDebugger().GetListener(), plugin_name));
+
+
+ if (sb_process.IsValid())
+ {
+ error.SetError (sb_process->ConnectRemote (url));
+ }
+ else
+ {
+ error.SetErrorString ("unable to create lldb_private::Process");
+ }
+ }
+ else
+ {
+ error.SetErrorString ("SBTarget is invalid");
+ }
+ return sb_process;
+}
+
SBFileSpec
SBTarget::GetExecutable ()
{
OpenPOWER on IntegriCloud