124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBProcess.cpp -------------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea#include "lldb/lldb-python.h" 11d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea 127a62c8b129b7e1b5e838b7616a794e01df01818bEli Friedman#include "lldb/API/SBProcess.h" 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-defines.h" 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-types.h" 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1784cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham#include "lldb/Interpreter/Args.h" 181a3083a04c20cc8e7298e03b731cab5d09aa7badGreg Clayton#include "lldb/Core/Debugger.h" 197826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice#include "lldb/Core/Log.h" 2049ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Core/Module.h" 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/State.h" 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Stream.h" 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/StreamFile.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Process.h" 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/RegisterContext.h" 2663094e0bb161580564954dee512955c1c79d3476Greg Clayton#include "lldb/Target/Target.h" 2763094e0bb161580564954dee512955c1c79d3476Greg Clayton#include "lldb/Target/Thread.h" 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 317a62c8b129b7e1b5e838b7616a794e01df01818bEli Friedman#include "lldb/API/SBBroadcaster.h" 327a62c8b129b7e1b5e838b7616a794e01df01818bEli Friedman#include "lldb/API/SBCommandReturnObject.h" 330a8dcacde404c520f1131c641041dceb9f68b6faGreg Clayton#include "lldb/API/SBDebugger.h" 347a62c8b129b7e1b5e838b7616a794e01df01818bEli Friedman#include "lldb/API/SBEvent.h" 350a8dcacde404c520f1131c641041dceb9f68b6faGreg Clayton#include "lldb/API/SBFileSpec.h" 367a62c8b129b7e1b5e838b7616a794e01df01818bEli Friedman#include "lldb/API/SBThread.h" 3798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice#include "lldb/API/SBStream.h" 387a62c8b129b7e1b5e838b7616a794e01df01818bEli Friedman#include "lldb/API/SBStringList.h" 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::SBProcess () : 45bcaf99a74367d464dd38011e26b9b4be56b503baGreg Clayton m_opaque_wp() 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// SBProcess constructor 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::SBProcess (const SBProcess& rhs) : 55bcaf99a74367d464dd38011e26b9b4be56b503baGreg Clayton m_opaque_wp (rhs.m_opaque_wp) 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::SBProcess (const lldb::ProcessSP &process_sp) : 61bcaf99a74367d464dd38011e26b9b4be56b503baGreg Clayton m_opaque_wp (process_sp) 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 65538eb82a89a68dbc57251915080bd5152b333978Greg Claytonconst SBProcess& 66538eb82a89a68dbc57251915080bd5152b333978Greg ClaytonSBProcess::operator = (const SBProcess& rhs) 67538eb82a89a68dbc57251915080bd5152b333978Greg Clayton{ 68538eb82a89a68dbc57251915080bd5152b333978Greg Clayton if (this != &rhs) 69bcaf99a74367d464dd38011e26b9b4be56b503baGreg Clayton m_opaque_wp = rhs.m_opaque_wp; 70538eb82a89a68dbc57251915080bd5152b333978Greg Clayton return *this; 71538eb82a89a68dbc57251915080bd5152b333978Greg Clayton} 72538eb82a89a68dbc57251915080bd5152b333978Greg Clayton 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Destructor 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::~SBProcess() 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 805a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Inghamconst char * 815a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim InghamSBProcess::GetBroadcasterClassName () 825a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham{ 835a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham return Process::GetStaticBroadcasterClass().AsCString(); 845a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham} 855a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham 86fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Inghamconst char * 87fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim InghamSBProcess::GetPluginName () 88fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Ingham{ 89fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Ingham ProcessSP process_sp(GetSP()); 90fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Ingham if (process_sp) 91fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Ingham { 920e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton return process_sp->GetPluginName().GetCString(); 93fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Ingham } 94fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Ingham return "<Unknown>"; 95fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Ingham} 96fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Ingham 97fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Inghamconst char * 98fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim InghamSBProcess::GetShortPluginName () 99fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Ingham{ 100fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Ingham ProcessSP process_sp(GetSP()); 101fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Ingham if (process_sp) 102fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Ingham { 1030e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton return process_sp->GetPluginName().GetCString(); 104fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Ingham } 105fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Ingham return "<Unknown>"; 106fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Ingham} 107fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Ingham 108fee26ee9a5db37e71f5d5aed279c634bbdab7c8cJim Ingham 109334d33a19fd28cf41cba74cc61cf149e7101a603Greg Claytonlldb::ProcessSP 110334d33a19fd28cf41cba74cc61cf149e7101a603Greg ClaytonSBProcess::GetSP() const 111334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton{ 112bcaf99a74367d464dd38011e26b9b4be56b503baGreg Clayton return m_opaque_wp.lock(); 113334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton} 114334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 116334d33a19fd28cf41cba74cc61cf149e7101a603Greg ClaytonSBProcess::SetSP (const ProcessSP &process_sp) 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 118bcaf99a74367d464dd38011e26b9b4be56b503baGreg Clayton m_opaque_wp = process_sp; 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::Clear () 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 124bcaf99a74367d464dd38011e26b9b4be56b503baGreg Clayton m_opaque_wp.reset(); 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::IsValid() const 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 131d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham ProcessSP process_sp(m_opaque_wp.lock()); 132d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham return ((bool) process_sp && process_sp->IsValid()); 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1353809340ce8954dbeaf24907ece29cd6b179143eaJames McIlreebool 1363809340ce8954dbeaf24907ece29cd6b179143eaJames McIlreeSBProcess::RemoteLaunch (char const **argv, 1373809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree char const **envp, 1383809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree const char *stdin_path, 1393809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree const char *stdout_path, 1403809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree const char *stderr_path, 1413809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree const char *working_directory, 1423809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree uint32_t launch_flags, 1433809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree bool stop_at_entry, 1443809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree lldb::SBError& error) 1453809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree{ 146952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1473809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree if (log) { 1483809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree 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))...", 149bcaf99a74367d464dd38011e26b9b4be56b503baGreg Clayton m_opaque_wp.lock().get(), 1503809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree argv, 1513809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree envp, 1523809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree stdin_path ? stdin_path : "NULL", 1533809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree stdout_path ? stdout_path : "NULL", 1543809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree stderr_path ? stderr_path : "NULL", 1553809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree working_directory ? working_directory : "NULL", 1563809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree launch_flags, 1573809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree stop_at_entry, 1583809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree error.get()); 1593809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree } 1603809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree 1610416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 1620416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 1633809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree { 1649f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 1659f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton if (process_sp->GetState() == eStateConnected) 1663809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree { 1679f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton if (stop_at_entry) 1689f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton launch_flags |= eLaunchFlagStopAtEntry; 1699f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton ProcessLaunchInfo launch_info (stdin_path, 1709f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton stdout_path, 1719f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton stderr_path, 1729f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton working_directory, 1739f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton launch_flags); 1749f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton Module *exe_module = process_sp->GetTarget().GetExecutableModulePointer(); 1759f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton if (exe_module) 176151416f6288315ef6d6061f60154db21798180a9Greg Clayton launch_info.SetExecutableFile(exe_module->GetPlatformFileSpec(), true); 1779f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton if (argv) 1789f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton launch_info.GetArguments().AppendArguments (argv); 1799f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton if (envp) 1809f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton launch_info.GetEnvironmentEntries ().SetArguments (envp); 1819f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton error.SetError (process_sp->Launch (launch_info)); 1823809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree } 1833809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree else 1843809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree { 1859f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton error.SetErrorString ("must be in eStateConnected to call RemoteLaunch"); 1863809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree } 1873809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree } 1883809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree else 1893809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree { 1903809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree error.SetErrorString ("unable to attach pid"); 1913809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree } 1923809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree 1933809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree if (log) { 1943809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree SBStream sstr; 1953809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree error.GetDescription (sstr); 1960416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton log->Printf ("SBProcess(%p)::RemoteLaunch (...) => SBError (%p): %s", process_sp.get(), error.get(), sstr.GetData()); 1973809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree } 1983809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree 1993809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree return error.Success(); 2003809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree} 2013809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree 2023809340ce8954dbeaf24907ece29cd6b179143eaJames McIlreebool 2033809340ce8954dbeaf24907ece29cd6b179143eaJames McIlreeSBProcess::RemoteAttachToProcessWithID (lldb::pid_t pid, lldb::SBError& error) 2043809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree{ 2050416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 2060416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 2073809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree { 2089f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 2099f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton if (process_sp->GetState() == eStateConnected) 2103809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree { 2119f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton ProcessAttachInfo attach_info; 2129f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton attach_info.SetProcessID (pid); 2139f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton error.SetError (process_sp->Attach (attach_info)); 2143809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree } 2153809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree else 2163809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree { 2179f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton error.SetErrorString ("must be in eStateConnected to call RemoteAttachToProcessWithID"); 2183809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree } 2193809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree } 2203809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree else 2213809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree { 2223809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree error.SetErrorString ("unable to attach pid"); 2233809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree } 2243809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree 225952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 2263809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree if (log) { 2273809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree SBStream sstr; 2283809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree error.GetDescription (sstr); 2295f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBProcess(%p)::RemoteAttachToProcessWithID (%" PRIu64 ") => SBError (%p): %s", process_sp.get(), pid, error.get(), sstr.GetData()); 2303809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree } 2313809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree 2323809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree return error.Success(); 2333809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree} 2343809340ce8954dbeaf24907ece29cd6b179143eaJames McIlree 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint32_t 23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetNumThreads () 23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 239952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 2407826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 2417826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice uint32_t num_threads = 0; 2420416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 2430416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 245a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Process::StopLocker stop_locker; 246a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton 247a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton const bool can_update = stop_locker.TryLock(&process_sp->GetRunLock()); 2480416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 2490416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton num_threads = process_sp->GetThreadList().GetSize(can_update); 25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 2517826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 2527826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 2530416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton log->Printf ("SBProcess(%p)::GetNumThreads () => %d", process_sp.get(), num_threads); 2547826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 2557826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice return num_threads; 25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBThread 259c833295baeec641086f536e78050388af36784f8Jim InghamSBProcess::GetSelectedThread () const 26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 261952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 2627826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBThread sb_thread; 26490c5214bc61ee2cdf68236b36d9746ecd275302eGreg Clayton ThreadSP thread_sp; 2650416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 2660416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 267bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 2680416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 2690416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton thread_sp = process_sp->GetThreadList().GetSelectedThread(); 27090c5214bc61ee2cdf68236b36d9746ecd275302eGreg Clayton sb_thread.SetThread (thread_sp); 271bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 2727826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 2737826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 2747826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice { 2750416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton log->Printf ("SBProcess(%p)::GetSelectedThread () => SBThread(%p)", process_sp.get(), thread_sp.get()); 2767826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice } 2777826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return sb_thread; 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28152ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonSBThread 28252ebc0aab1fdecb634801deceeddd71a14c2148cGreg ClaytonSBProcess::CreateOSPluginThread (lldb::tid_t tid, lldb::addr_t context) 28352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton{ 284952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 28552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 28652ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton SBThread sb_thread; 28752ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton ThreadSP thread_sp; 28852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton ProcessSP process_sp(GetSP()); 28952ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (process_sp) 29052ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton { 29152ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 29252ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton thread_sp = process_sp->CreateOSPluginThread(tid, context); 29352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton sb_thread.SetThread (thread_sp); 29452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton } 29552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 29652ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton if (log) 29752ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton log->Printf ("SBProcess(%p)::CreateOSPluginThread (tid=0x%" PRIx64 ", context=0x%" PRIx64 ") => SBThread(%p)", process_sp.get(), tid, context, thread_sp.get()); 29852ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 29952ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return sb_thread; 30052ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton} 30152ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBTarget 30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetTarget() const 30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 305952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3067826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBTarget sb_target; 308334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton TargetSP target_sp; 3090416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 3100416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 311334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton { 3120416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton target_sp = process_sp->GetTarget().shared_from_this(); 313334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton sb_target.SetSP (target_sp); 314334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton } 3157826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 3167826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 3170416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton log->Printf ("SBProcess(%p)::GetTarget () => SBTarget(%p)", process_sp.get(), target_sp.get()); 3187826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return sb_target; 32024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 32224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 32324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t 32424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::PutSTDIN (const char *src, size_t src_len) 32524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 326952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3277826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 3287826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice size_t ret_val = 0; 3290416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 3300416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 33224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error error; 3330416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ret_val = process_sp->PutSTDIN (src, src_len, error); 33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 3357826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 3367826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 3377e5fa7fc1f8efd24c078e063b2c4b5e13ba5be20Jason Molenda log->Printf ("SBProcess(%p)::PutSTDIN (src=\"%s\", src_len=%d) => %lu", 3380416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp.get(), 3393f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton src, 3403f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton (uint32_t) src_len, 3413f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton ret_val); 3427826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 3437826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice return ret_val; 34424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 34624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t 34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetSTDOUT (char *dst, size_t dst_len) const 34824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 34949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton size_t bytes_read = 0; 3500416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 3510416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error error; 3540416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton bytes_read = process_sp->GetSTDOUT (dst, dst_len, error); 35524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 3567826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 357952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3587826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 3595f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBProcess(%p)::GetSTDOUT (dst=\"%.*s\", dst_len=%" PRIu64 ") => %" PRIu64, 360851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton process_sp.get(), 361851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton (int) bytes_read, 362851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton dst, 363851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton (uint64_t)dst_len, 364851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton (uint64_t)bytes_read); 3657826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 36649ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton return bytes_read; 36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 36824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t 37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetSTDERR (char *dst, size_t dst_len) const 37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 37249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton size_t bytes_read = 0; 3730416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 3740416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 37524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 37624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error error; 3770416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton bytes_read = process_sp->GetSTDERR (dst, dst_len, error); 37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 3797826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 380952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3817826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 3825f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBProcess(%p)::GetSTDERR (dst=\"%.*s\", dst_len=%" PRIu64 ") => %" PRIu64, 383851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton process_sp.get(), 384851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton (int) bytes_read, 385851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton dst, 386851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton (uint64_t)dst_len, 387851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton (uint64_t)bytes_read); 3887826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 38949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton return bytes_read; 39024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 39124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 392fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ongsize_t 393fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming OngSBProcess::GetAsyncProfileData(char *dst, size_t dst_len) const 394fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong{ 395fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong size_t bytes_read = 0; 396fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong ProcessSP process_sp(GetSP()); 397fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong if (process_sp) 398fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong { 399fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong Error error; 400fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong bytes_read = process_sp->GetAsyncProfileData (dst, dst_len, error); 401fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong } 402fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong 403952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 404fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong if (log) 4055f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBProcess(%p)::GetProfileData (dst=\"%.*s\", dst_len=%" PRIu64 ") => %" PRIu64, 406fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong process_sp.get(), 407fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong (int) bytes_read, 408fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong dst, 409fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong (uint64_t)dst_len, 410fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong (uint64_t)bytes_read); 411fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong 412fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong return bytes_read; 413fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong} 414fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong 41524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 416c833295baeec641086f536e78050388af36784f8Jim InghamSBProcess::ReportEventState (const SBEvent &event, FILE *out) const 41724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 41824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (out == NULL) 41924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return; 42024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4210416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 4220416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 42324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 42424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const StateType event_state = SBProcess::GetStateFromEvent (event); 42524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner char message[1024]; 42624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int message_len = ::snprintf (message, 42724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner sizeof (message), 4285f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea "Process %" PRIu64 " %s\n", 4290416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp->GetID(), 43024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBDebugger::StateAsCString (event_state)); 43124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 43224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (message_len > 0) 43324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ::fwrite (message, 1, message_len, out); 43424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 43524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 43624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 43724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 438c833295baeec641086f536e78050388af36784f8Jim InghamSBProcess::AppendEventStateReport (const SBEvent &event, SBCommandReturnObject &result) 43924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4400416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 4410416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 44224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 44324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const StateType event_state = SBProcess::GetStateFromEvent (event); 44424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner char message[1024]; 44524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ::snprintf (message, 44624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner sizeof (message), 4475f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea "Process %" PRIu64 " %s\n", 4480416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp->GetID(), 44924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBDebugger::StateAsCString (event_state)); 45024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 45124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendMessage (message); 45224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 45324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 45424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 45524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 456c833295baeec641086f536e78050388af36784f8Jim InghamSBProcess::SetSelectedThread (const SBThread &thread) 45724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4580416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 4590416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 460bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 4610416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 4620416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton return process_sp->GetThreadList().SetSelectedThreadByID (thread.GetThreadID()); 463bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 46424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 46524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 46624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 46724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 46882560f25ae1b4a55c927df9ccf1bd1becc01b1c1Greg ClaytonSBProcess::SetSelectedThreadByID (lldb::tid_t tid) 46982560f25ae1b4a55c927df9ccf1bd1becc01b1c1Greg Clayton{ 470952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4717826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 4727826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice bool ret_val = false; 4730416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 4740416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 475bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 4760416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 4770416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ret_val = process_sp->GetThreadList().SetSelectedThreadByID (tid); 478bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 4797826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 4807826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 4815f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBProcess(%p)::SetSelectedThreadByID (tid=0x%4.4" PRIx64 ") => %s", 4820416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp.get(), tid, (ret_val ? "true" : "false")); 4837826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 4847826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice return ret_val; 48524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 48624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 487efbdd2280873cc87634bf4f4a37ab8b99662522aJim Inghambool 488efbdd2280873cc87634bf4f4a37ab8b99662522aJim InghamSBProcess::SetSelectedThreadByIndexID (uint32_t index_id) 489efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham{ 490952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 491efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham 492efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham bool ret_val = false; 493efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham ProcessSP process_sp(GetSP()); 494efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham if (process_sp) 495efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham { 496efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 497efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham ret_val = process_sp->GetThreadList().SetSelectedThreadByIndexID (index_id); 498efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham } 499efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham 500efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham if (log) 501efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham log->Printf ("SBProcess(%p)::SetSelectedThreadByID (tid=0x%x) => %s", 502efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham process_sp.get(), index_id, (ret_val ? "true" : "false")); 503efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham 504efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham return ret_val; 505efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham} 506efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham 50724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBThread 50824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetThreadAtIndex (size_t index) 50924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 510952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 5117826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 51290c5214bc61ee2cdf68236b36d9746ecd275302eGreg Clayton SBThread sb_thread; 51390c5214bc61ee2cdf68236b36d9746ecd275302eGreg Clayton ThreadSP thread_sp; 5140416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 5150416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 516bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 517a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Process::StopLocker stop_locker; 518a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton const bool can_update = stop_locker.TryLock(&process_sp->GetRunLock()); 5190416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 520a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton thread_sp = process_sp->GetThreadList().GetThreadAtIndex(index, can_update); 52190c5214bc61ee2cdf68236b36d9746ecd275302eGreg Clayton sb_thread.SetThread (thread_sp); 522bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 5237826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 5247826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 5257826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice { 5263f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton log->Printf ("SBProcess(%p)::GetThreadAtIndex (index=%d) => SBThread(%p)", 5270416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp.get(), (uint32_t) index, thread_sp.get()); 5287826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice } 5297826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 53090c5214bc61ee2cdf68236b36d9746ecd275302eGreg Clayton return sb_thread; 53124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 53224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5330e3b98e7de6d69613a9729bac9d4b965c0635698Jim Inghamuint32_t 5340e3b98e7de6d69613a9729bac9d4b965c0635698Jim InghamSBProcess::GetStopID(bool include_expression_stops) 5350e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham{ 5360e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham ProcessSP process_sp(GetSP()); 5370e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham if (process_sp) 5380e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham { 5390e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 5400e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham if (include_expression_stops) 5410e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham return process_sp->GetStopID(); 5420e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham else 5430e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham return process_sp->GetLastNaturalStopID(); 5440e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham } 5450e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham return 0; 5460e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham} 5470e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham 54824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerStateType 54924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetState () 55024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5517826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 5527826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice StateType ret_val = eStateInvalid; 5530416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 5540416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 555bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 5560416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 5570416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ret_val = process_sp->GetState(); 558bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 5597826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 560952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 5617826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 56249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBProcess(%p)::GetState () => %s", 5630416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp.get(), 56461ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice lldb_private::StateAsCString (ret_val)); 5657826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 5667826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice return ret_val; 56724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 56824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 56924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 57024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerint 57124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetExitStatus () 57224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 573a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton int exit_status = 0; 5740416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 5750416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 576bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 5770416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 5780416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton exit_status = process_sp->GetExitStatus (); 579bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 580952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 581a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 582a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBProcess(%p)::GetExitStatus () => %i (0x%8.8x)", 5830416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp.get(), exit_status, exit_status); 584a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 585a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton return exit_status; 58624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 58724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 58824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst char * 58924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetExitDescription () 59024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 591a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton const char *exit_desc = NULL; 5920416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 5930416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 594bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 5950416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 5960416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton exit_desc = process_sp->GetExitDescription (); 597bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 598952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 599a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 600a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBProcess(%p)::GetExitDescription () => %s", 6010416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp.get(), exit_desc); 602a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton return exit_desc; 60324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 60424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 60524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb::pid_t 60624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetProcessID () 60724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 6087826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice lldb::pid_t ret_val = LLDB_INVALID_PROCESS_ID; 6090416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 6100416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 6110416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ret_val = process_sp->GetID(); 6127826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 613952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 6147826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 6155f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBProcess(%p)::GetProcessID () => %" PRIu64, process_sp.get(), ret_val); 6167826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 6177826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice return ret_val; 61824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 61924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 62064742744396c966e8de770e765130629b0c78335Greg Claytonuint32_t 62164742744396c966e8de770e765130629b0c78335Greg ClaytonSBProcess::GetUniqueID() 62264742744396c966e8de770e765130629b0c78335Greg Clayton{ 62364742744396c966e8de770e765130629b0c78335Greg Clayton uint32_t ret_val = 0; 62464742744396c966e8de770e765130629b0c78335Greg Clayton ProcessSP process_sp(GetSP()); 62564742744396c966e8de770e765130629b0c78335Greg Clayton if (process_sp) 62664742744396c966e8de770e765130629b0c78335Greg Clayton ret_val = process_sp->GetUniqueID(); 627952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 62864742744396c966e8de770e765130629b0c78335Greg Clayton if (log) 62964742744396c966e8de770e765130629b0c78335Greg Clayton log->Printf ("SBProcess(%p)::GetUniqueID () => %" PRIu32, process_sp.get(), ret_val); 63064742744396c966e8de770e765130629b0c78335Greg Clayton return ret_val; 63164742744396c966e8de770e765130629b0c78335Greg Clayton} 63264742744396c966e8de770e765130629b0c78335Greg Clayton 63360a544f23362d4f2fbe1e68b9c5340aa5e11302cJohnny ChenByteOrder 63460a544f23362d4f2fbe1e68b9c5340aa5e11302cJohnny ChenSBProcess::GetByteOrder () const 63560a544f23362d4f2fbe1e68b9c5340aa5e11302cJohnny Chen{ 63660a544f23362d4f2fbe1e68b9c5340aa5e11302cJohnny Chen ByteOrder byteOrder = eByteOrderInvalid; 6370416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 6380416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 6390416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton byteOrder = process_sp->GetTarget().GetArchitecture().GetByteOrder(); 64060a544f23362d4f2fbe1e68b9c5340aa5e11302cJohnny Chen 641952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 64260a544f23362d4f2fbe1e68b9c5340aa5e11302cJohnny Chen if (log) 6430416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton log->Printf ("SBProcess(%p)::GetByteOrder () => %d", process_sp.get(), byteOrder); 64460a544f23362d4f2fbe1e68b9c5340aa5e11302cJohnny Chen 64560a544f23362d4f2fbe1e68b9c5340aa5e11302cJohnny Chen return byteOrder; 64660a544f23362d4f2fbe1e68b9c5340aa5e11302cJohnny Chen} 64760a544f23362d4f2fbe1e68b9c5340aa5e11302cJohnny Chen 64824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint32_t 64924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetAddressByteSize () const 65024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 6517826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice uint32_t size = 0; 6520416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 6530416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 6540416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton size = process_sp->GetTarget().GetArchitecture().GetAddressByteSize(); 6557826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 656952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 6577826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 6580416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton log->Printf ("SBProcess(%p)::GetAddressByteSize () => %d", process_sp.get(), size); 6597826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 6607826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice return size; 66124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 66224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 66324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBError 66424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::Continue () 66524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 666952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 6677826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 66824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBError sb_error; 6690416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 6700416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton 6710416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (log) 6720416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton log->Printf ("SBProcess(%p)::Continue ()...", process_sp.get()); 6730416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton 6740416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 6751a3083a04c20cc8e7298e03b731cab5d09aa7badGreg Clayton { 6760416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 677de1dd81e18b0310501f3b76ae41f04a09f4dd474Greg Clayton 6780416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton Error error (process_sp->Resume()); 6791a3083a04c20cc8e7298e03b731cab5d09aa7badGreg Clayton if (error.Success()) 6801a3083a04c20cc8e7298e03b731cab5d09aa7badGreg Clayton { 6810416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp->GetTarget().GetDebugger().GetAsyncExecution () == false) 682a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton { 683a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 6840416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton log->Printf ("SBProcess(%p)::Continue () waiting for process to stop...", process_sp.get()); 6850416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp->WaitForProcessToStop (NULL); 686a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton } 6871a3083a04c20cc8e7298e03b731cab5d09aa7badGreg Clayton } 6881a3083a04c20cc8e7298e03b731cab5d09aa7badGreg Clayton sb_error.SetError(error); 6891a3083a04c20cc8e7298e03b731cab5d09aa7badGreg Clayton } 69024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 69124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner sb_error.SetErrorString ("SBProcess is invalid"); 69224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6937826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 6947826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice { 6957826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice SBStream sstr; 6967826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice sb_error.GetDescription (sstr); 6970416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton log->Printf ("SBProcess(%p)::Continue () => SBError (%p): %s", process_sp.get(), sb_error.get(), sstr.GetData()); 6987826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice } 6997826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 70024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return sb_error; 70124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 70224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 70324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 70424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBError 70524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::Destroy () 70624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 70724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBError sb_error; 7080416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 7090416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 71072e1c782ba1e4226da37af4722af608de9f39408Greg Clayton { 7110416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 7120416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton sb_error.SetError(process_sp->Destroy()); 71372e1c782ba1e4226da37af4722af608de9f39408Greg Clayton } 71424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 71524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner sb_error.SetErrorString ("SBProcess is invalid"); 71624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 717952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 718a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 719a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton { 720a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton SBStream sstr; 721a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton sb_error.GetDescription (sstr); 72272e1c782ba1e4226da37af4722af608de9f39408Greg Clayton log->Printf ("SBProcess(%p)::Destroy () => SBError (%p): %s", 7230416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp.get(), 72472e1c782ba1e4226da37af4722af608de9f39408Greg Clayton sb_error.get(), 72572e1c782ba1e4226da37af4722af608de9f39408Greg Clayton sstr.GetData()); 726a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton } 727a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 72824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return sb_error; 72924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 73024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 73124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 73224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBError 73324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::Stop () 73424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 73524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBError sb_error; 7360416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 7370416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 738bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 7390416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 7400416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton sb_error.SetError (process_sp->Halt()); 741bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 74224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 74324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner sb_error.SetErrorString ("SBProcess is invalid"); 7447826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 745952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 7467826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 7477826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice { 7487826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice SBStream sstr; 7497826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice sb_error.GetDescription (sstr); 7503f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton log->Printf ("SBProcess(%p)::Stop () => SBError (%p): %s", 7510416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp.get(), 7523f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton sb_error.get(), 75361ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice sstr.GetData()); 7547826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice } 7557826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 75624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return sb_error; 75724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 75824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 75924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBError 76024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::Kill () 76124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 76224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBError sb_error; 7630416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 7640416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 765bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 7660416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 7670416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton sb_error.SetError (process_sp->Destroy()); 768bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 76924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 77024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner sb_error.SetErrorString ("SBProcess is invalid"); 7717826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 772952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 7737826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 7747826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice { 7757826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice SBStream sstr; 7767826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice sb_error.GetDescription (sstr); 7773f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton log->Printf ("SBProcess(%p)::Kill () => SBError (%p): %s", 7780416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp.get(), 7793f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton sb_error.get(), 78061ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice sstr.GetData()); 7817826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice } 7827826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 78324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return sb_error; 78424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 78524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 78624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBError 78724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::Detach () 78824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 789761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham // FIXME: This should come from a process default. 790761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham bool keep_stopped = false; 791761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham return Detach (keep_stopped); 792761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham} 793761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham 794761afb822b18c46b2ad84be03f372e90ac1e6143Jim InghamSBError 795761afb822b18c46b2ad84be03f372e90ac1e6143Jim InghamSBProcess::Detach (bool keep_stopped) 796761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham{ 79724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBError sb_error; 7980416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 7990416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 800bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 8010416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 802761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham sb_error.SetError (process_sp->Detach(keep_stopped)); 803bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 80424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 80524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner sb_error.SetErrorString ("SBProcess is invalid"); 80624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 80724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return sb_error; 80824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 80924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 81024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBError 811a66ba46379fe41036d870975c56ccc2319cb6618Greg ClaytonSBProcess::Signal (int signo) 81224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 81324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBError sb_error; 8140416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 8150416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 816bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 8170416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 8180416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton sb_error.SetError (process_sp->Signal (signo)); 819bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 82024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 82124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner sb_error.SetErrorString ("SBProcess is invalid"); 822952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 823a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 824a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton { 825a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton SBStream sstr; 826a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton sb_error.GetDescription (sstr); 827a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBProcess(%p)::Signal (signo=%i) => SBError (%p): %s", 8280416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp.get(), 829a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton signo, 830a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton sb_error.get(), 831a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton sstr.GetData()); 832a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton } 83324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return sb_error; 83424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 83524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8365d90ade8e8e0d776fe8e1b9e88fc1c86d02e8e4eJim Inghamvoid 8375d90ade8e8e0d776fe8e1b9e88fc1c86d02e8e4eJim InghamSBProcess::SendAsyncInterrupt () 8385d90ade8e8e0d776fe8e1b9e88fc1c86d02e8e4eJim Ingham{ 8395d90ade8e8e0d776fe8e1b9e88fc1c86d02e8e4eJim Ingham ProcessSP process_sp(GetSP()); 8405d90ade8e8e0d776fe8e1b9e88fc1c86d02e8e4eJim Ingham if (process_sp) 8415d90ade8e8e0d776fe8e1b9e88fc1c86d02e8e4eJim Ingham { 8425d90ade8e8e0d776fe8e1b9e88fc1c86d02e8e4eJim Ingham process_sp->SendAsyncInterrupt (); 8435d90ade8e8e0d776fe8e1b9e88fc1c86d02e8e4eJim Ingham } 8445d90ade8e8e0d776fe8e1b9e88fc1c86d02e8e4eJim Ingham} 8455d90ade8e8e0d776fe8e1b9e88fc1c86d02e8e4eJim Ingham 84624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBThread 847a66ba46379fe41036d870975c56ccc2319cb6618Greg ClaytonSBProcess::GetThreadByID (tid_t tid) 84824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 849a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton SBThread sb_thread; 85090c5214bc61ee2cdf68236b36d9746ecd275302eGreg Clayton ThreadSP thread_sp; 8510416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 8520416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 853bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 8540416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 855a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Process::StopLocker stop_locker; 856a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton const bool can_update = stop_locker.TryLock(&process_sp->GetRunLock()); 857a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton thread_sp = process_sp->GetThreadList().FindThreadByID (tid, can_update); 85890c5214bc61ee2cdf68236b36d9746ecd275302eGreg Clayton sb_thread.SetThread (thread_sp); 859bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 860a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 861952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 862a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 863a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton { 8645f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBProcess(%p)::GetThreadByID (tid=0x%4.4" PRIx64 ") => SBThread (%p)", 8650416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp.get(), 866a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton tid, 86790c5214bc61ee2cdf68236b36d9746ecd275302eGreg Clayton thread_sp.get()); 868a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton } 869a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 870a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton return sb_thread; 87124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 87224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 873efbdd2280873cc87634bf4f4a37ab8b99662522aJim InghamSBThread 874efbdd2280873cc87634bf4f4a37ab8b99662522aJim InghamSBProcess::GetThreadByIndexID (uint32_t index_id) 875efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham{ 876efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham SBThread sb_thread; 877efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham ThreadSP thread_sp; 878efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham ProcessSP process_sp(GetSP()); 879efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham if (process_sp) 880efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham { 881efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 882efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham Process::StopLocker stop_locker; 883efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham const bool can_update = stop_locker.TryLock(&process_sp->GetRunLock()); 884efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham thread_sp = process_sp->GetThreadList().FindThreadByIndexID (index_id, can_update); 885efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham sb_thread.SetThread (thread_sp); 886efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham } 887efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham 888952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 889efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham if (log) 890efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham { 891efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham log->Printf ("SBProcess(%p)::GetThreadByID (tid=0x%x) => SBThread (%p)", 892efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham process_sp.get(), 893efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham index_id, 894efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham thread_sp.get()); 895efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham } 896efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham 897efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham return sb_thread; 898efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham} 899efbdd2280873cc87634bf4f4a37ab8b99662522aJim Ingham 90024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerStateType 90124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetStateFromEvent (const SBEvent &event) 90224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 903952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 9047826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 9057826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice StateType ret_val = Process::ProcessEventData::GetStateFromEvent (event.get()); 9067826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 9077826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 90849ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBProcess::GetStateFromEvent (event.sp=%p) => %s", event.get(), 90961ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice lldb_private::StateAsCString (ret_val)); 9107826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 9117826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice return ret_val; 91224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 91324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 91424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 91524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetRestartedFromEvent (const SBEvent &event) 91624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 91763094e0bb161580564954dee512955c1c79d3476Greg Clayton return Process::ProcessEventData::GetRestartedFromEvent (event.get()); 91824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 91924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 92089e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Inghamsize_t 92189e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim InghamSBProcess::GetNumRestartedReasonsFromEvent (const lldb::SBEvent &event) 92289e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham{ 92389e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham return Process::ProcessEventData::GetNumRestartedReasons(event.get()); 92489e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham} 92589e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham 92689e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Inghamconst char * 92789e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim InghamSBProcess::GetRestartedReasonAtIndexFromEvent (const lldb::SBEvent &event, size_t idx) 92889e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham{ 92989e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham return Process::ProcessEventData::GetRestartedReasonAtIndex(event.get(), idx); 93089e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham} 93189e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham 93224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess 93324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetProcessFromEvent (const SBEvent &event) 93424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 93563094e0bb161580564954dee512955c1c79d3476Greg Clayton SBProcess process(Process::ProcessEventData::GetProcessFromEvent (event.get())); 93624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return process; 93724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 93824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 93928e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Inghambool 94028e23861bedbeb5e46be7d2af4c33bf5132422c6Jim InghamSBProcess::EventIsProcessEvent (const SBEvent &event) 94128e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham{ 9425a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham return strcmp (event.GetBroadcasterClass(), SBProcess::GetBroadcasterClass()) == 0; 94328e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham} 94424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 94524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBroadcaster 94624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetBroadcaster () const 94724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 948952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 9497826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 9500416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 9510416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton 9520416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton SBBroadcaster broadcaster(process_sp.get(), false); 9537826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 9547826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 9550416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton log->Printf ("SBProcess(%p)::GetBroadcaster () => SBBroadcaster (%p)", process_sp.get(), 95661ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice broadcaster.get()); 9577826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 95824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return broadcaster; 95924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 96024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9615a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Inghamconst char * 9625a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim InghamSBProcess::GetBroadcasterClass () 9635a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham{ 9645a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham return Process::GetStaticBroadcasterClass().AsCString(); 9655a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham} 9665a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham 96724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t 96824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::ReadMemory (addr_t addr, void *dst, size_t dst_len, SBError &sb_error) 96924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 970952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 9717826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 97224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t bytes_read = 0; 97324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9740416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 9750416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton 976a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 977a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton { 9785f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBProcess(%p)::ReadMemory (addr=0x%" PRIx64 ", dst=%p, dst_len=%" PRIu64 ", SBError (%p))...", 9790416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp.get(), 980a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton addr, 981a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton dst, 982851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton (uint64_t)dst_len, 983a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton sb_error.get()); 984a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton } 9850416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton 9860416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 98724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 988a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Process::StopLocker stop_locker; 989a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton if (stop_locker.TryLock(&process_sp->GetRunLock())) 990a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton { 991a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 992a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton bytes_read = process_sp->ReadMemory (addr, dst, dst_len, sb_error.ref()); 993a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton } 994a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton else 995a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton { 9969f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton if (log) 9979f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton log->Printf ("SBProcess(%p)::ReadMemory() => error: process is running", process_sp.get()); 998a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton sb_error.SetErrorString("process is running"); 999a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton } 100024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 100124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 100224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 100324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner sb_error.SetErrorString ("SBProcess is invalid"); 100424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 100524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10067826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 10073f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton { 10083f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton SBStream sstr; 10093f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton sb_error.GetDescription (sstr); 10105f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBProcess(%p)::ReadMemory (addr=0x%" PRIx64 ", dst=%p, dst_len=%" PRIu64 ", SBError (%p): %s) => %" PRIu64, 10110416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp.get(), 10123f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton addr, 10133f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton dst, 1014851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton (uint64_t)dst_len, 10153f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton sb_error.get(), 10163f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton sstr.GetData(), 1017851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton (uint64_t)bytes_read); 10183f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton } 10197826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 102024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return bytes_read; 102124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 102224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 102324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t 10244a2e33769873d68d5703da5742c0e248f46e3a72Greg ClaytonSBProcess::ReadCStringFromMemory (addr_t addr, void *buf, size_t size, lldb::SBError &sb_error) 10254a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton{ 10264a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton size_t bytes_read = 0; 10270416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 10280416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 10294a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton { 1030a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Process::StopLocker stop_locker; 1031a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton if (stop_locker.TryLock(&process_sp->GetRunLock())) 1032a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton { 1033a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 1034a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton bytes_read = process_sp->ReadCStringFromMemory (addr, (char *)buf, size, sb_error.ref()); 1035a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton } 1036a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton else 1037a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton { 1038952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 10399f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton if (log) 10409f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton log->Printf ("SBProcess(%p)::ReadCStringFromMemory() => error: process is running", process_sp.get()); 1041a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton sb_error.SetErrorString("process is running"); 1042a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton } 10434a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton } 10444a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton else 10454a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton { 10464a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton sb_error.SetErrorString ("SBProcess is invalid"); 10474a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton } 10484a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton return bytes_read; 10494a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton} 10504a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton 10514a2e33769873d68d5703da5742c0e248f46e3a72Greg Claytonuint64_t 10524a2e33769873d68d5703da5742c0e248f46e3a72Greg ClaytonSBProcess::ReadUnsignedFromMemory (addr_t addr, uint32_t byte_size, lldb::SBError &sb_error) 10534a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton{ 1054a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton uint64_t value = 0; 10550416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 10560416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 10574a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton { 1058a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Process::StopLocker stop_locker; 1059a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton if (stop_locker.TryLock(&process_sp->GetRunLock())) 1060a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton { 1061a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 1062a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton value = process_sp->ReadUnsignedIntegerFromMemory (addr, byte_size, 0, sb_error.ref()); 1063a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton } 1064a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton else 1065a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton { 1066952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 10679f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton if (log) 10689f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton log->Printf ("SBProcess(%p)::ReadUnsignedFromMemory() => error: process is running", process_sp.get()); 1069a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton sb_error.SetErrorString("process is running"); 1070a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton } 10714a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton } 10724a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton else 10734a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton { 10744a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton sb_error.SetErrorString ("SBProcess is invalid"); 10754a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton } 1076a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton return value; 10774a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton} 10784a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton 10794a2e33769873d68d5703da5742c0e248f46e3a72Greg Claytonlldb::addr_t 10804a2e33769873d68d5703da5742c0e248f46e3a72Greg ClaytonSBProcess::ReadPointerFromMemory (addr_t addr, lldb::SBError &sb_error) 10814a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton{ 10824a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton lldb::addr_t ptr = LLDB_INVALID_ADDRESS; 10830416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 10840416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 10854a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton { 1086a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Process::StopLocker stop_locker; 1087a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton if (stop_locker.TryLock(&process_sp->GetRunLock())) 1088a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton { 1089a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 1090a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton ptr = process_sp->ReadPointerFromMemory (addr, sb_error.ref()); 1091a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton } 1092a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton else 1093a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton { 1094952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 10959f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton if (log) 10969f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton log->Printf ("SBProcess(%p)::ReadPointerFromMemory() => error: process is running", process_sp.get()); 1097a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton sb_error.SetErrorString("process is running"); 1098a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton } 10994a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton } 11004a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton else 11014a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton { 11024a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton sb_error.SetErrorString ("SBProcess is invalid"); 11034a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton } 11044a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton return ptr; 11054a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton} 11064a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton 11074a2e33769873d68d5703da5742c0e248f46e3a72Greg Claytonsize_t 110824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::WriteMemory (addr_t addr, const void *src, size_t src_len, SBError &sb_error) 110924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 111024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t bytes_written = 0; 111124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1112952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 11130416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton 11140416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 11150416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton 1116a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 1117a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton { 11185f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBProcess(%p)::WriteMemory (addr=0x%" PRIx64 ", src=%p, src_len=%" PRIu64 ", SBError (%p))...", 11190416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp.get(), 1120a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton addr, 1121a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton src, 1122851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton (uint64_t)src_len, 1123a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton sb_error.get()); 1124a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton } 1125a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 11260416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 112724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 1128a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Process::StopLocker stop_locker; 1129a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton if (stop_locker.TryLock(&process_sp->GetRunLock())) 1130a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton { 1131a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 1132a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton bytes_written = process_sp->WriteMemory (addr, src, src_len, sb_error.ref()); 1133a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton } 1134a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton else 1135a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton { 11369f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton if (log) 11379f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton log->Printf ("SBProcess(%p)::WriteMemory() => error: process is running", process_sp.get()); 1138a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton sb_error.SetErrorString("process is running"); 1139a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton } 114024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 114124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1142a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 1143a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton { 1144a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton SBStream sstr; 1145a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton sb_error.GetDescription (sstr); 11465f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBProcess(%p)::WriteMemory (addr=0x%" PRIx64 ", src=%p, src_len=%" PRIu64 ", SBError (%p): %s) => %" PRIu64, 11470416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp.get(), 1148a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton addr, 1149a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton src, 1150851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton (uint64_t)src_len, 1151a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton sb_error.get(), 1152a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton sstr.GetData(), 1153851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton (uint64_t)bytes_written); 1154a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton } 1155a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 115624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return bytes_written; 115724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 115824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 115998f930f429160f9777f626c3ac6aa609f4e965d2Caroline Ticebool 116098f930f429160f9777f626c3ac6aa609f4e965d2Caroline TiceSBProcess::GetDescription (SBStream &description) 116198f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice{ 116296154be69fa240a662419183ed08e1cfc5418164Greg Clayton Stream &strm = description.ref(); 116396154be69fa240a662419183ed08e1cfc5418164Greg Clayton 11640416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 11650416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 116698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice { 116798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice char path[PATH_MAX]; 116898f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice GetTarget().GetExecutable().GetPath (path, sizeof(path)); 11690416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton Module *exe_module = process_sp->GetTarget().GetExecutableModulePointer(); 11705c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton const char *exe_name = NULL; 11715c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton if (exe_module) 11725c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton exe_name = exe_module->GetFileSpec().GetFilename().AsCString(); 11735c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton 11745f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea strm.Printf ("SBProcess: pid = %" PRIu64 ", state = %s, threads = %d%s%s", 11750416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton process_sp->GetID(), 117696154be69fa240a662419183ed08e1cfc5418164Greg Clayton lldb_private::StateAsCString (GetState()), 117796154be69fa240a662419183ed08e1cfc5418164Greg Clayton GetNumThreads(), 117896154be69fa240a662419183ed08e1cfc5418164Greg Clayton exe_name ? ", executable = " : "", 117996154be69fa240a662419183ed08e1cfc5418164Greg Clayton exe_name ? exe_name : ""); 118098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice } 118198f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice else 118296154be69fa240a662419183ed08e1cfc5418164Greg Clayton strm.PutCString ("No value"); 118398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice 118498f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice return true; 118598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice} 11860baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton 11870baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Claytonuint32_t 1188191343e7213d3d717327319352d086f981fa8e58Johnny ChenSBProcess::GetNumSupportedHardwareWatchpoints (lldb::SBError &sb_error) const 1189191343e7213d3d717327319352d086f981fa8e58Johnny Chen{ 1190952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1191191343e7213d3d717327319352d086f981fa8e58Johnny Chen 1192191343e7213d3d717327319352d086f981fa8e58Johnny Chen uint32_t num = 0; 1193191343e7213d3d717327319352d086f981fa8e58Johnny Chen ProcessSP process_sp(GetSP()); 1194191343e7213d3d717327319352d086f981fa8e58Johnny Chen if (process_sp) 1195191343e7213d3d717327319352d086f981fa8e58Johnny Chen { 1196191343e7213d3d717327319352d086f981fa8e58Johnny Chen Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 1197191343e7213d3d717327319352d086f981fa8e58Johnny Chen sb_error.SetError(process_sp->GetWatchpointSupportInfo (num)); 1198191343e7213d3d717327319352d086f981fa8e58Johnny Chen if (log) 1199191343e7213d3d717327319352d086f981fa8e58Johnny Chen log->Printf ("SBProcess(%p)::GetNumSupportedHardwareWatchpoints () => %u", 1200191343e7213d3d717327319352d086f981fa8e58Johnny Chen process_sp.get(), num); 1201191343e7213d3d717327319352d086f981fa8e58Johnny Chen } 1202191343e7213d3d717327319352d086f981fa8e58Johnny Chen else 1203191343e7213d3d717327319352d086f981fa8e58Johnny Chen { 1204191343e7213d3d717327319352d086f981fa8e58Johnny Chen sb_error.SetErrorString ("SBProcess is invalid"); 1205191343e7213d3d717327319352d086f981fa8e58Johnny Chen } 1206191343e7213d3d717327319352d086f981fa8e58Johnny Chen return num; 1207191343e7213d3d717327319352d086f981fa8e58Johnny Chen} 1208191343e7213d3d717327319352d086f981fa8e58Johnny Chen 1209191343e7213d3d717327319352d086f981fa8e58Johnny Chenuint32_t 12100baa394cd55c6dfb7a6259d215d0dea2b708067bGreg ClaytonSBProcess::LoadImage (lldb::SBFileSpec &sb_image_spec, lldb::SBError &sb_error) 12110baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton{ 12120416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 12130416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 1214bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 1215a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Process::StopLocker stop_locker; 1216a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton if (stop_locker.TryLock(&process_sp->GetRunLock())) 1217a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton { 1218a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 1219a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton return process_sp->LoadImage (*sb_image_spec, sb_error.ref()); 1220a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton } 1221a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton else 1222a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton { 1223952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 12249f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton if (log) 12259f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton log->Printf ("SBProcess(%p)::LoadImage() => error: process is running", process_sp.get()); 1226a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton sb_error.SetErrorString("process is running"); 1227a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton } 1228bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 12290baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton return LLDB_INVALID_IMAGE_TOKEN; 12300baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton} 12310baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton 12320baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Claytonlldb::SBError 12330baa394cd55c6dfb7a6259d215d0dea2b708067bGreg ClaytonSBProcess::UnloadImage (uint32_t image_token) 12340baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton{ 12350baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton lldb::SBError sb_error; 12360416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton ProcessSP process_sp(GetSP()); 12370416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton if (process_sp) 1238bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 1239a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Process::StopLocker stop_locker; 1240a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton if (stop_locker.TryLock(&process_sp->GetRunLock())) 1241a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton { 1242a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); 1243a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton sb_error.SetError (process_sp->UnloadImage (image_token)); 1244a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton } 1245a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton else 1246a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton { 1247952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 12489f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton if (log) 12499f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton log->Printf ("SBProcess(%p)::UnloadImage() => error: process is running", process_sp.get()); 1250a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton sb_error.SetErrorString("process is running"); 1251a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton } 1252bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 12530baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton else 12540baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton sb_error.SetErrorString("invalid process"); 12550baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton return sb_error; 12560baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton} 1257