Process.h revision 6cf4d2b31bf208cd6e48d4e37af671ab9b451446
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- Process.h -----------------------------------------------*- 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 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_Process_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_Process_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 14b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton#include <spawn.h> 15b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <list> 18b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton#include <iosfwd> 19ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton#include <vector> 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h" 24e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton#include "lldb/Core/ArchSpec.h" 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Broadcaster.h" 26861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice#include "lldb/Core/Communication.h" 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Error.h" 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Event.h" 297508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham#include "lldb/Core/StringList.h" 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ThreadSafeValue.h" 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/PluginInterface.h" 326e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice#include "lldb/Core/UserSettingsController.h" 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Breakpoint/BreakpointSiteList.h" 34a48fe1637ec6a381e500633c087f76662e364c20Sean Callanan#include "lldb/Expression/ClangPersistentVariables.h" 35f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan#include "lldb/Expression/IRDynamicChecks.h" 36ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton#include "lldb/Host/FileSpec.h" 37e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton#include "lldb/Interpreter/Args.h" 38e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton#include "lldb/Interpreter/Options.h" 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/ExecutionContextScope.h" 40613b8739a4d489b7f1c571288d5786768c024205Greg Clayton#include "lldb/Target/Memory.h" 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/ThreadList.h" 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/UnixSignals.h" 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 46b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 47b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// ProcessInstanceSettings 48b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 496e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Ticeclass ProcessInstanceSettings : public InstanceSettings 506e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice{ 516e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Ticepublic: 526e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 53004afcb95736e97d071b1dd9b5254800e11e581cCaroline Tice ProcessInstanceSettings (UserSettingsController &owner, bool live_instance = true, const char *name = NULL); 546e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 556e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice ProcessInstanceSettings (const ProcessInstanceSettings &rhs); 566e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 576e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice virtual 586e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice ~ProcessInstanceSettings (); 596e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 606e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice ProcessInstanceSettings& 616e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice operator= (const ProcessInstanceSettings &rhs); 626e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 636e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 646e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice void 656e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice UpdateInstanceSettingsVariable (const ConstString &var_name, 666e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice const char *index_value, 676e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice const char *value, 686e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice const ConstString &instance_name, 696e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice const SettingEntry &entry, 70b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton VarSetOperationType op, 716e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice Error &err, 726e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice bool pending); 736e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 74bcb5b454767121980d937d2610ba762fdb575c45Caroline Tice bool 756e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice GetInstanceSettingsValue (const SettingEntry &entry, 766e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice const ConstString &var_name, 775bc8c97d62b2e399bd90fb7e00c903d7887412abCaroline Tice StringList &value, 78bcb5b454767121980d937d2610ba762fdb575c45Caroline Tice Error *err); 796e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 806e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 81238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton const Args & 82238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton GetRunArguments () const 83238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 84238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton return m_run_args; 85238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 86238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 87238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton void 88238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton SetRunArguments (const Args &args) 89238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 90238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton m_run_args = args; 91238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 92238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 93638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton void 94638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton GetHostEnvironmentIfNeeded (); 95638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton 96238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton size_t 97638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton GetEnvironmentAsArgs (Args &env); 98238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 99238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton const char * 100238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton GetStandardInputPath () const 101238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 102238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton if (m_input_path.empty()) 103238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton return NULL; 104238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton return m_input_path.c_str(); 105238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 106238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 107238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton void 108238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton SetStandardInputPath (const char *path) 109238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 110238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton if (path && path[0]) 111238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton m_input_path.assign (path); 112238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton else 113238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 114238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton // Make sure we deallocate memory in string... 115238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton std::string tmp; 116238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton tmp.swap (m_input_path); 117238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 118238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 119238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 120238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton const char * 121238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton GetStandardOutputPath () const 122238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 123238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton if (m_output_path.empty()) 124238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton return NULL; 125238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton return m_output_path.c_str(); 126238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 127238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 128238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton void 129238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton SetStandardOutputPath (const char *path) 130238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 131238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton if (path && path[0]) 132238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton m_output_path.assign (path); 133238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton else 134238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 135238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton // Make sure we deallocate memory in string... 136238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton std::string tmp; 137238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton tmp.swap (m_output_path); 138238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 139238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 140238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 141238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton const char * 142238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton GetStandardErrorPath () const 143238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 144238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton if (m_error_path.empty()) 145238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton return NULL; 146238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton return m_error_path.c_str(); 147238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 148238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 149238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton void 150238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton SetStandardErrorPath (const char *path) 151238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 152238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton if (path && path[0]) 153238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton m_error_path.assign (path); 154238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton else 155238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 156238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton // Make sure we deallocate memory in string... 157238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton std::string tmp; 158238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton tmp.swap (m_error_path); 159238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 160238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 161238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 162238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton bool 163238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton GetDisableASLR () const 164238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 165238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton return m_disable_aslr; 166238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 167238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 168238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton void 169238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton SetDisableASLR (bool b) 170238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 171238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton m_disable_aslr = b; 172238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 173bd666017403e102e0ca435d6da585ff979f83598Caroline Tice 174bd666017403e102e0ca435d6da585ff979f83598Caroline Tice bool 175bd666017403e102e0ca435d6da585ff979f83598Caroline Tice GetDisableSTDIO () const 176bd666017403e102e0ca435d6da585ff979f83598Caroline Tice { 177bd666017403e102e0ca435d6da585ff979f83598Caroline Tice return m_disable_stdio; 178bd666017403e102e0ca435d6da585ff979f83598Caroline Tice } 179bd666017403e102e0ca435d6da585ff979f83598Caroline Tice 180bd666017403e102e0ca435d6da585ff979f83598Caroline Tice void 181bd666017403e102e0ca435d6da585ff979f83598Caroline Tice SetDisableSTDIO (bool b) 182bd666017403e102e0ca435d6da585ff979f83598Caroline Tice { 183bd666017403e102e0ca435d6da585ff979f83598Caroline Tice m_disable_stdio = b; 184bd666017403e102e0ca435d6da585ff979f83598Caroline Tice } 185238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 1866e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Ticeprotected: 1876e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 1886e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice void 1896e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice CopyInstanceSettings (const lldb::InstanceSettingsSP &new_settings, 1906e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice bool pending); 1916e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 1920021c97fbd17e38113d2e76b93c94ee05213ee45Johnny Chen const ConstString 1936e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice CreateInstanceName (); 1946e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 195c3c24084efb0e1c4734c136532c1e43e9427c912Jim Ingham static const ConstString & 1966e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice RunArgsVarName (); 1976e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 198c3c24084efb0e1c4734c136532c1e43e9427c912Jim Ingham static const ConstString & 1996e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice EnvVarsVarName (); 2006e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 201c3c24084efb0e1c4734c136532c1e43e9427c912Jim Ingham static const ConstString & 202638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton InheritHostEnvVarName (); 203638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton 204638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton static const ConstString & 2056e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice InputPathVarName (); 2066e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 207c3c24084efb0e1c4734c136532c1e43e9427c912Jim Ingham static const ConstString & 2086e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice OutputPathVarName (); 2096e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 210c3c24084efb0e1c4734c136532c1e43e9427c912Jim Ingham static const ConstString & 2116e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice ErrorPathVarName (); 2126e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 213c3c24084efb0e1c4734c136532c1e43e9427c912Jim Ingham static const ConstString & 2146e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice DisableASLRVarName(); 2156e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 216bd666017403e102e0ca435d6da585ff979f83598Caroline Tice static const ConstString & 217bd666017403e102e0ca435d6da585ff979f83598Caroline Tice DisableSTDIOVarName (); 218bd666017403e102e0ca435d6da585ff979f83598Caroline Tice 2196e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Ticeprivate: 2206e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 221238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton typedef std::map<std::string, std::string> dictionary; 2226e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice Args m_run_args; 223238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton dictionary m_env_vars; 2246e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice std::string m_input_path; 2256e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice std::string m_output_path; 2266e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice std::string m_error_path; 2276e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice bool m_disable_aslr; 228bd666017403e102e0ca435d6da585ff979f83598Caroline Tice bool m_disable_stdio; 229638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton bool m_inherit_host_env; 230638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton bool m_got_host_env; 2316e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice}; 2326e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 233b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 234b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// ProcessInfo 235b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// 236b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// A base class for information for a process. This can be used to fill 237b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// out information for a process prior to launching it, or it can be 238b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// used for an instance of a process and can be filled in with the 239b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// existing values for that process. 240b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 241e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Claytonclass ProcessInfo 242e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton{ 243e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Claytonpublic: 244e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton ProcessInfo () : 245ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton m_executable (), 246b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_arguments (), 247b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_environment (), 248b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_uid (LLDB_INVALID_UID), 249b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_gid (LLDB_INVALID_UID), 250e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_arch(), 251b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_pid (LLDB_INVALID_PROCESS_ID) 252e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 253e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 254b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 255e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton ProcessInfo (const char *name, 256e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton const ArchSpec &arch, 257e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton lldb::pid_t pid) : 258b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_executable (name, false), 259b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_arguments (), 260b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_environment(), 261b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_uid (LLDB_INVALID_UID), 262b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_gid (LLDB_INVALID_UID), 263e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_arch (arch), 264b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_pid (pid) 265e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 266e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 267e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 268e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton void 269e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton Clear () 270e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 271ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton m_executable.Clear(); 272b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_arguments.Clear(); 273b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_environment.Clear(); 274b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_uid = LLDB_INVALID_UID; 275b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_gid = LLDB_INVALID_UID; 276e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_arch.Clear(); 277e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_pid = LLDB_INVALID_PROCESS_ID; 278e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 279e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 280e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton const char * 281e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetName() const 282e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 283ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton return m_executable.GetFilename().GetCString(); 284e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 285b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 286e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton size_t 287e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetNameLength() const 288e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 289ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton return m_executable.GetFilename().GetLength(); 290e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 291e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 292e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton void 293e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton SetName (const char *name) 294e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 295ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton m_executable.GetFilename().SetCString (name); 296ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 297ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 298ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton FileSpec & 299ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton GetExecutableFile () 300ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 301ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton return m_executable; 302e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 303b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 304ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton const FileSpec & 305ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton GetExecutableFile () const 30624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 307ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton return m_executable; 30824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 30924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 310a733c04608cc94592a15d27583529588e19db552Greg Clayton uint32_t 311b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetUserID() const 312a733c04608cc94592a15d27583529588e19db552Greg Clayton { 313b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_uid; 314a733c04608cc94592a15d27583529588e19db552Greg Clayton } 315b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 316a733c04608cc94592a15d27583529588e19db552Greg Clayton uint32_t 317b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetGroupID() const 318a733c04608cc94592a15d27583529588e19db552Greg Clayton { 319b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_gid; 320a733c04608cc94592a15d27583529588e19db552Greg Clayton } 32124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 32224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 323b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton UserIDIsValid () const 32424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 325b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_uid != UINT32_MAX; 32624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 32724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 32824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 329b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GroupIDIsValid () const 33024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 331b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_gid != UINT32_MAX; 33224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 33324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 334a733c04608cc94592a15d27583529588e19db552Greg Clayton void 335b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetUserID (uint32_t uid) 336a733c04608cc94592a15d27583529588e19db552Greg Clayton { 337b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_uid = uid; 338a733c04608cc94592a15d27583529588e19db552Greg Clayton } 339a733c04608cc94592a15d27583529588e19db552Greg Clayton 340a733c04608cc94592a15d27583529588e19db552Greg Clayton void 341b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetGroupID (uint32_t gid) 342a733c04608cc94592a15d27583529588e19db552Greg Clayton { 343b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_gid = gid; 344a733c04608cc94592a15d27583529588e19db552Greg Clayton } 345b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 346e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton ArchSpec & 347e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetArchitecture () 348e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 349e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_arch; 350e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 351b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 352e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton const ArchSpec & 353e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetArchitecture () const 354e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 355e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_arch; 356e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 357b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 358e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton lldb::pid_t 359e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetProcessID () const 360e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 361e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_pid; 362e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 363e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 364e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton void 365e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton SetProcessID (lldb::pid_t pid) 366e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 367e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_pid = pid; 368e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 369e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 370a733c04608cc94592a15d27583529588e19db552Greg Clayton bool 371a733c04608cc94592a15d27583529588e19db552Greg Clayton ProcessIDIsValid() const 372a733c04608cc94592a15d27583529588e19db552Greg Clayton { 373a733c04608cc94592a15d27583529588e19db552Greg Clayton return m_pid != LLDB_INVALID_PROCESS_ID; 374a733c04608cc94592a15d27583529588e19db552Greg Clayton } 375b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 376b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 377b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Dump (Stream &s, Platform *platform) const; 378b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 379b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Args & 380b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetArguments () 381b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 382b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_arguments; 383b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 384b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 385b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const Args & 386b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetArguments () const 387b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 388b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_arguments; 389b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 390b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 391b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 392b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetArgumentsFromArgs (const Args& args, 393b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool first_arg_is_executable, 394b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool first_arg_is_executable_and_argument); 395b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 396b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Args & 397b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetEnvironmentEntries () 398b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 399b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_environment; 400b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 401b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 402b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const Args & 403b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetEnvironmentEntries () const 404b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 405b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_environment; 406b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 407b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 408b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonprotected: 409b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileSpec m_executable; 410b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Args m_arguments; 411b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Args m_environment; 412b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t m_uid; 413b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t m_gid; 414b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ArchSpec m_arch; 415b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton lldb::pid_t m_pid; 416b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton}; 417b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 418b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 419b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// ProcessInstanceInfo 420b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// 421b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// Describes an existing process and any discoverable information that 422b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// pertains to that process. 423b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 424b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonclass ProcessInstanceInfo : public ProcessInfo 425b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton{ 426b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonpublic: 427b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfo () : 428b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInfo (), 429b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_euid (UINT32_MAX), 430b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_egid (UINT32_MAX), 431b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_parent_pid (LLDB_INVALID_PROCESS_ID) 432b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 433b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 434b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 435b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfo (const char *name, 436b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const ArchSpec &arch, 437b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton lldb::pid_t pid) : 438b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInfo (name, arch, pid), 439b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_euid (UINT32_MAX), 440b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_egid (UINT32_MAX), 441b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_parent_pid (LLDB_INVALID_PROCESS_ID) 442b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 443b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 444b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 445b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 446b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Clear () 447b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 448b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInfo::Clear(); 449b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_euid = UINT32_MAX; 450b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_egid = UINT32_MAX; 451b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_parent_pid = LLDB_INVALID_PROCESS_ID; 452b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 453b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 454b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t 455b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetEffectiveUserID() const 456b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 457b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_euid; 458b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 459b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 460b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t 461b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetEffectiveGroupID() const 462b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 463b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_egid; 464b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 465b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 466b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool 467b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton EffectiveUserIDIsValid () const 468b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 469b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_euid != UINT32_MAX; 470b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 471b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 472b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool 473b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton EffectiveGroupIDIsValid () const 474b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 475b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_egid != UINT32_MAX; 476b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 477b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 478b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 479b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetEffectiveUserID (uint32_t uid) 480b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 481b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_euid = uid; 482b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 483b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 484b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 485b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetEffectiveGroupID (uint32_t gid) 486b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 487b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_egid = gid; 488b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 489a733c04608cc94592a15d27583529588e19db552Greg Clayton 490a733c04608cc94592a15d27583529588e19db552Greg Clayton lldb::pid_t 491a733c04608cc94592a15d27583529588e19db552Greg Clayton GetParentProcessID () const 492a733c04608cc94592a15d27583529588e19db552Greg Clayton { 493a733c04608cc94592a15d27583529588e19db552Greg Clayton return m_parent_pid; 494a733c04608cc94592a15d27583529588e19db552Greg Clayton } 495a733c04608cc94592a15d27583529588e19db552Greg Clayton 496a733c04608cc94592a15d27583529588e19db552Greg Clayton void 497a733c04608cc94592a15d27583529588e19db552Greg Clayton SetParentProcessID (lldb::pid_t pid) 498a733c04608cc94592a15d27583529588e19db552Greg Clayton { 499a733c04608cc94592a15d27583529588e19db552Greg Clayton m_parent_pid = pid; 500a733c04608cc94592a15d27583529588e19db552Greg Clayton } 501a733c04608cc94592a15d27583529588e19db552Greg Clayton 502a733c04608cc94592a15d27583529588e19db552Greg Clayton bool 503a733c04608cc94592a15d27583529588e19db552Greg Clayton ParentProcessIDIsValid() const 504a733c04608cc94592a15d27583529588e19db552Greg Clayton { 505a733c04608cc94592a15d27583529588e19db552Greg Clayton return m_parent_pid != LLDB_INVALID_PROCESS_ID; 506a733c04608cc94592a15d27583529588e19db552Greg Clayton } 50724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 50824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 50924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton Dump (Stream &s, Platform *platform) const; 51024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 51124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton static void 512b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton DumpTableHeader (Stream &s, Platform *platform, bool show_args, bool verbose); 513b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 514b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 515b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton DumpAsTableRow (Stream &s, Platform *platform, bool show_args, bool verbose) const; 516b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 517b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonprotected: 518b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t m_euid; 519b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t m_egid; 520b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton lldb::pid_t m_parent_pid; 521b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton}; 522b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 523b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 524b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 525b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// ProcessLaunchInfo 526b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// 527b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// Describes any information that is required to launch a process. 528b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 529b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 530b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonclass ProcessLaunchInfo : public ProcessInfo 531b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton{ 532b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonpublic: 533b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 534b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton class FileAction 535b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 536b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton public: 537b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 538b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction () : 539b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_action (eFileActionNone), 540b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_fd (-1), 541b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_arg (-1), 542b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_path () 543b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 544b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 545b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 546b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 547b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Clear() 548b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 549b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_action = eFileActionNone; 550b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_fd = -1; 551b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_arg = -1; 552b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_path.clear(); 553b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 554b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 555b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool 556b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Close (int fd); 557b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 558b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool 559b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Duplicate (int fd, int dup_fd); 560b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 561b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool 562b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Open (int fd, const char *path, bool read, bool write); 563b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 564b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton static bool 565b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AddPosixSpawnFileAction (posix_spawn_file_actions_t *file_actions, 566b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const FileAction *info, 567b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Log *log, 568b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Error& error); 569b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 570b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton protected: 571b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton enum Action 572b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 573b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton eFileActionNone, 574b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton eFileActionClose, 575b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton eFileActionDuplicate, 576b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton eFileActionOpen 577b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton }; 578b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 579b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Action m_action; // The action for this file 580b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton int m_fd; // An existing file descriptor 581b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton int m_arg; // oflag for eFileActionOpen*, dup_fd for eFileActionDuplicate 582b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton std::string m_path; // A file path to use for opening after fork or posix_spawn 583b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton }; 584b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 585b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessLaunchInfo () : 586b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInfo(), 587b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_flags (), 588b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_stdin_info (), 589b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_stdout_info (), 590b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_stderr_info () 591b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 592b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 593b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 594b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 595b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendFileAction (const FileAction &info) 596b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 597b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_file_actions.push_back(info); 598b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 599b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 600b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 601b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendCloseFileAction (int fd) 602b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 603b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction file_action; 604b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton file_action.Close (fd); 605b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendFileAction (file_action); 606b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 607b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 608b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 609b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendDuplciateFileAction (int fd, int dup_fd) 610b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 611b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction file_action; 612b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton file_action.Duplicate (fd, dup_fd); 613b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendFileAction (file_action); 614b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 615b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 616b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 617b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendOpenFileAction (int fd, const char *path, bool read, bool write) 618b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 619b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction file_action; 620b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton file_action.Open (fd, path, read, write); 621b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendFileAction (file_action); 622b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 623b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 624b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 625b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendSuppressFileAction (int fd, bool read, bool write) 626b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 627b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction file_action; 628b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton file_action.Open (fd, "/dev/null", read, write); 629b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendFileAction (file_action); 630b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 631b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 632b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton size_t 633b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetNumFileActions () const 634b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 635b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_file_actions.size(); 636b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 637b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 638b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const FileAction * 639b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetFileActionAtIndex (size_t idx) const 640b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 641b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (idx < m_file_actions.size()) 642b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return &m_file_actions[idx]; 643b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return NULL; 644b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 645b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 646b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Flags & 647b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetFlags () 648b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 649b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_flags; 650b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 651b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 652b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const Flags & 653b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetFlags () const 654b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 655b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_flags; 656b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 657b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 658b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const char * 659b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetWorkingDirectory () const 660b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 661b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (m_working_dir.empty()) 662b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return NULL; 663b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_working_dir.c_str(); 664b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 66524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 66624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 667b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetWorkingDirectory (const char *working_dir) 668b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 669b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (working_dir && working_dir[0]) 670b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_working_dir.assign (working_dir); 671b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton else 672b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_working_dir.clear(); 673b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 674ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 675b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 676b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SwapWorkingDirectory (std::string &working_dir) 677ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 678b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_working_dir.swap (working_dir); 679b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 680b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 681b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 682b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const char * 683b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetProcessPluginName () const 684b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 685b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (m_plugin_name.empty()) 686b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return NULL; 687b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_plugin_name.c_str(); 688b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 689b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 690b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 691b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetProcessPluginName (const char *plugin) 692b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 693b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (plugin && plugin[0]) 694b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_plugin_name.assign (plugin); 695b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton else 696b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_plugin_name.clear(); 697ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 698ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 699b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 700b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Clear () 701ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 702b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInfo::Clear(); 703b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_working_dir.clear(); 704b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_plugin_name.clear(); 705b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_flags.Clear(); 706b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_stdin_info.Clear(); 707b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_stdout_info.Clear(); 708b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_stderr_info.Clear(); 709b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_file_actions.clear(); 710ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 711a733c04608cc94592a15d27583529588e19db552Greg Clayton 712e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Claytonprotected: 713b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton std::string m_working_dir; 714b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton std::string m_plugin_name; 715b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Flags m_flags; // Bitwise OR of bits from lldb::LaunchFlags 716b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction m_stdin_info; // File action for stdin 717b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction m_stdout_info; // File action for stdout 718b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction m_stderr_info; // File action for stderr 719b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton std::vector<FileAction> m_file_actions; // File actions for any other files 720e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton}; 721e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 722b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonclass ProcessLaunchCommandOptions : public Options 72324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton{ 72424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonpublic: 725b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 726b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessLaunchCommandOptions (CommandInterpreter &interpreter) : 727b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Options(interpreter) 728b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 729143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton // Keep default values of all options in one place: OptionParsingStarting () 730143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionParsingStarting (); 731b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 732b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 733b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ~ProcessLaunchCommandOptions () 734b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 735b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 736b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 737b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Error 738143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton SetOptionValue (uint32_t option_idx, const char *option_arg); 739b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 740b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 741143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionParsingStarting () 742b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 743b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton launch_info.Clear(); 744b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 745b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 746b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const OptionDefinition* 747b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetDefinitions () 748b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 749b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return g_option_table; 750b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 751b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 752b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton // Options table: Required for subclasses of Options. 753b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 754b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton static OptionDefinition g_option_table[]; 755b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 756b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton // Instance variables to hold the values for command options. 757b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 758b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessLaunchInfo launch_info; 759b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton}; 760b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 761b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 762b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// ProcessInstanceInfoMatch 763b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// 764b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// A class to help matching one ProcessInstanceInfo to another. 765b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 766b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 767b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonclass ProcessInstanceInfoMatch 768b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton{ 769b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonpublic: 770b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfoMatch () : 77124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_match_info (), 77224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_name_match_type (lldb_private::eNameMatchIgnore), 77324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_match_all_users (false) 77424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 77524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 77624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 777b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfoMatch (const char *process_name, 77824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton lldb_private::NameMatchType process_name_match_type) : 77924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_match_info (), 78024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_name_match_type (process_name_match_type), 78124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_match_all_users (false) 78224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 78324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_match_info.SetName (process_name); 78424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 78524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 786b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfo & 78724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetProcessInfo () 78824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 78924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_match_info; 79024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 79124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 792b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const ProcessInstanceInfo & 79324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetProcessInfo () const 79424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 79524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_match_info; 79624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 79724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 79824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 79924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetMatchAllUsers () const 80024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 80124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_match_all_users; 80224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 80324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 80424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 80524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton SetMatchAllUsers (bool b) 80624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 80724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_match_all_users = b; 80824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 80924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 81024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton lldb_private::NameMatchType 81124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetNameMatchType () const 81224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 81324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_name_match_type; 81424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 81524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 81624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 81724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton SetNameMatchType (lldb_private::NameMatchType name_match_type) 81824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 81924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_name_match_type = name_match_type; 82024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 82124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 82224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 82324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton NameMatches (const char *process_name) const; 82424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 82524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 826b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Matches (const ProcessInstanceInfo &proc_info) const; 82724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 82824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 82924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton MatchAllProcesses () const; 83024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 83124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton Clear (); 83224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 83324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonprotected: 834b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfo m_match_info; 83524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton lldb_private::NameMatchType m_name_match_type; 83624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool m_match_all_users; 83724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton}; 83824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 839b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonclass ProcessInstanceInfoList 840e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton{ 841e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Claytonpublic: 842b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfoList () : 843e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_infos() 844e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 845e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 846e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 847e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton void 848e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton Clear() 849e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 850e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_infos.clear(); 851e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 852e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 853e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton uint32_t 854e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetSize() 855e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 856e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_infos.size(); 857e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 858e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 859e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton void 860b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Append (const ProcessInstanceInfo &info) 861e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 862e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_infos.push_back (info); 863e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 864e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 865e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton const char * 866e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetProcessNameAtIndex (uint32_t idx) 867e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 868e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton if (idx < m_infos.size()) 869e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_infos[idx].GetName(); 870e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return NULL; 871e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 872e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 873e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton size_t 874e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetProcessNameLengthAtIndex (uint32_t idx) 875e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 876e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton if (idx < m_infos.size()) 877e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_infos[idx].GetNameLength(); 878e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return 0; 879e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 880e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 881e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton lldb::pid_t 882e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetProcessIDAtIndex (uint32_t idx) 883e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 884e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton if (idx < m_infos.size()) 885e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_infos[idx].GetProcessID(); 886e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return NULL; 887e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 888e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 889e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton bool 890b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetInfoAtIndex (uint32_t idx, ProcessInstanceInfo &info) 891e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 892e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton if (idx < m_infos.size()) 893e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 894e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton info = m_infos[idx]; 895e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return true; 896e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 897e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return false; 898e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 899e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 90024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // You must ensure "idx" is valid before calling this function 901b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const ProcessInstanceInfo & 90224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetProcessInfoAtIndex (uint32_t idx) const 90324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 90424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton assert (idx < m_infos.size()); 90524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_infos[idx]; 90624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 90724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 908e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Claytonprotected: 909b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton typedef std::vector<ProcessInstanceInfo> collection; 910e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton collection m_infos; 911e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton}; 912e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 9136e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 91424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 91524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class Process Process.h "lldb/Target/Process.h" 91624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A plug-in interface definition class for debugging a process. 91724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 91824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Process : 91924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public UserID, 92024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public Broadcaster, 92124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public ExecutionContextScope, 9226e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice public PluginInterface, 9236e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice public ProcessInstanceSettings 92424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 92524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerfriend class ThreadList; 926d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Inghamfriend class ClangFunction; // For WaitForStateChangeEventsPrivate 92724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 92824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 92924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 93024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 93124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Broadcaster event bits definitions. 93224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 93324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum 93424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 93524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastBitStateChanged = (1 << 0), 93624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastBitInterrupt = (1 << 1), 93724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastBitSTDOUT = (1 << 2), 938e28824e0b988221c7eedf8e3d212527d2bdac6a7Eli Friedman eBroadcastBitSTDERR = (1 << 3) 93924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 94024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 94124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum 94224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 94324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastInternalStateControlStop = (1<<0), 94424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastInternalStateControlPause = (1<<1), 94524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastInternalStateControlResume = (1<<2) 94624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 947360f53f3c216ee4fb433da0a367168785328a856Jim Ingham 94824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 94924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A notification structure that can be used by clients to listen 95024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// for changes in a process's lifetime. 95124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 95224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see RegisterNotificationCallbacks (const Notifications&) 95324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see UnregisterNotificationCallbacks (const Notifications&) 95424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 95524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef SWIG 95624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef struct 95724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 95824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void *baton; 95924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void (*initialize)(void *baton, Process *process); 96024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void (*process_state_changed) (void *baton, Process *process, lldb::StateType state); 96124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } Notifications; 96224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 96324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner class ProcessEventData : 96424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public EventData 96524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 9663ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham friend class Process; 9673ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham 96824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public: 96924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ProcessEventData (); 97024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ProcessEventData (const lldb::ProcessSP &process, lldb::StateType state); 97124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 97224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual ~ProcessEventData(); 97324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 97424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static const ConstString & 97524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFlavorString (); 97624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 97724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual const ConstString & 97824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFlavor () const; 97924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 98024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb::ProcessSP & 9813ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham GetProcessSP() const 9823ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 9833ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham return m_process_sp; 9843ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 98524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 9863ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham GetState() const 9873ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 9883ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham return m_state; 9893ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 99024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 9913ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham GetRestarted () const 9923ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 9933ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham return m_restarted; 9943ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 9953ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham bool 9963ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham GetInterrupted () const 9973ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 9983ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham return m_interrupted; 9993ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 100024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 100124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 100224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump (Stream *s) const; 100324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 100424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 100524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoOnRemoval (Event *event_ptr); 100624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 100724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static const Process::ProcessEventData * 100824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetEventDataFromEvent (const Event *event_ptr); 100924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 101024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static lldb::ProcessSP 101124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetProcessFromEvent (const Event *event_ptr); 101224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 101324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static lldb::StateType 101424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetStateFromEvent (const Event *event_ptr); 101524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 101624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool 101724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetRestartedFromEvent (const Event *event_ptr); 101824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 101924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void 102024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetRestartedInEvent (Event *event_ptr, bool new_value); 102124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 102224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool 10233ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham GetInterruptedFromEvent (const Event *event_ptr); 10243ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham 10253ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham static void 10263ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham SetInterruptedInEvent (Event *event_ptr, bool new_value); 10273ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham 10283ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham static bool 102924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetUpdateStateOnRemoval (Event *event_ptr); 103024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 103124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner private: 103224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 103324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 10343ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham SetUpdateStateOnRemoval() 10353ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 10366cf4d2b31bf208cd6e48d4e37af671ab9b451446Jim Ingham m_update_state++; 10373ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 103824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 10393ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham SetRestarted (bool new_value) 10403ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 10413ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham m_restarted = new_value; 10423ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 10433ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham void 10443ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham SetInterrupted (bool new_value) 10453ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 10463ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham m_interrupted = new_value; 10473ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 104824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 104924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::ProcessSP m_process_sp; 105024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType m_state; 105124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool m_restarted; // For "eStateStopped" events, this is true if the target was automatically restarted. 10526cf4d2b31bf208cd6e48d4e37af671ab9b451446Jim Ingham int m_update_state; 10533ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham bool m_interrupted; 105424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN (ProcessEventData); 105524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 105624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 10576e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 1058d0a5a23d734da7a2170802ccd096f53b8a527811Greg Clayton class SettingsController : public UserSettingsController 10596e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice { 10606e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice public: 10616e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 1062d0a5a23d734da7a2170802ccd096f53b8a527811Greg Clayton SettingsController (); 10636e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 10646e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice virtual 1065d0a5a23d734da7a2170802ccd096f53b8a527811Greg Clayton ~SettingsController (); 10666e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 10676e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice static SettingEntry global_settings_table[]; 10686e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice static SettingEntry instance_settings_table[]; 10696e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 10706e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice protected: 10716e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 10726e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice lldb::InstanceSettingsSP 1073d0a5a23d734da7a2170802ccd096f53b8a527811Greg Clayton CreateInstanceSettings (const char *instance_name); 10746e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 10756e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice private: 10766e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 10776e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice // Class-wide settings. 10786e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 1079d0a5a23d734da7a2170802ccd096f53b8a527811Greg Clayton DISALLOW_COPY_AND_ASSIGN (SettingsController); 10806e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice }; 10816e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 108224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif 108324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1084990de7bb41d3afec6b789155408ff322187d8682Greg Clayton static void 10852a456816c5d7c575f2e141acd48bb5f8085d9910Caroline Tice SettingsInitialize (); 1086990de7bb41d3afec6b789155408ff322187d8682Greg Clayton 1087990de7bb41d3afec6b789155408ff322187d8682Greg Clayton static void 10882a456816c5d7c575f2e141acd48bb5f8085d9910Caroline Tice SettingsTerminate (); 1089990de7bb41d3afec6b789155408ff322187d8682Greg Clayton 1090990de7bb41d3afec6b789155408ff322187d8682Greg Clayton static lldb::UserSettingsControllerSP & 1091990de7bb41d3afec6b789155408ff322187d8682Greg Clayton GetSettingsController (); 10926e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 10931ebef44c126bd3a615b3ad844c46a82a82efa0e7Caroline Tice void 10941ebef44c126bd3a615b3ad844c46a82a82efa0e7Caroline Tice UpdateInstanceName (); 10951ebef44c126bd3a615b3ad844c46a82a82efa0e7Caroline Tice 1096395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton 109724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 109824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with a shared pointer to a target, and the Process listener. 109924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 110024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Process(Target &target, Listener &listener); 110124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 110224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 110324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Destructor. 110424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 110524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The destructor is virtual since this class is designed to be 110624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// inherited from by the plug-in instance. 110724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 110824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 110924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~Process(); 111024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 111124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 111224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find a Process plug-in that can debug \a module using the 111324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// currently selected architecture. 111424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 111524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Scans all loaded plug-in interfaces that implement versions of 111624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the Process plug-in interface and returns the first instance 111724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// that can debug the file. 111824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 111924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] module_sp 112024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The module shared pointer that this process will debug. 112124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 112224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] plugin_name 112324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If NULL, select the best plug-in for the binary. If non-NULL 112424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// then look for a plugin whose PluginInfo's name matches 112524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// this string. 112624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 112724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Process::CanDebug () 112824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 112924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static Process* 113024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FindPlugin (Target &target, const char *plugin_name, Listener &listener); 113124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 113224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 113324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 113424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 113524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Static function that can be used with the \b host function 113624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Host::StartMonitoringChildProcess (). 113724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 113824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function can be used by lldb_private::Process subclasses 113924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// when they want to watch for a local process and have its exit 114024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// status automatically set when the host child process exits. 114124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Subclasses should call Host::StartMonitoringChildProcess () 114224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// with: 114324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// callback = Process::SetHostProcessExitStatus 114424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// callback_baton = NULL 114524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// pid = Process::GetID() 114624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// monitor_signals = false 114724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 114824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool 114924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetProcessExitStatus (void *callback_baton, // The callback baton which should be set to NULL 115024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::pid_t pid, // The process ID we want to monitor 115124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int signo, // Zero for no signal 115224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int status); // Exit value of process if signal is zero 115324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1154395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton lldb::ByteOrder 1155395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetByteOrder () const; 1156395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton 1157395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton uint32_t 1158395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetAddressByteSize () const; 1159395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton 116024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 116124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Check if a plug-in instance can debug the file in \a module. 116224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1163fe424a92fc6fd92f810d243912461fe028a2b63cGreg Clayton /// Each plug-in is given a chance to say whether it can debug 116424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the file in \a module. If the Process plug-in instance can 116524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// debug a file on the current system, it should return \b true. 116624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 116724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 116824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if this Process plug-in instance can 116924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// debug the executable, \b false otherwise. 117024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 117124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 117224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CanDebug (Target &target) = 0; 117324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 117424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 117524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 117624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This object is about to be destroyed, do any necessary cleanup. 117724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 117824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Subclasses that override this method should always call this 117924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// superclass method. 118024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 118124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 118224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Finalize(); 118324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 118424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 118524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Launch a new process. 118624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 118724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Launch a new process by spawning a new process using the 118824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// target object's executable module's file as the file to launch. 118924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Arguments are given in \a argv, and the environment variables 119024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// are in \a envp. Standard input and output files can be 119124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// optionally re-directed to \a stdin_path, \a stdout_path, and 119224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a stderr_path. 119324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 119424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 119524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. It will first call Process::WillLaunch (Module *) 119624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// and if that returns \b true, Process::DoLaunch (Module*, 119724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// char const *[],char const *[],const char *,const char *, 119824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// const char *) will be called to actually do the launching. If 119924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// DoLaunch returns \b true, then Process::DidLaunch() will be 120024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// called. 120124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 120224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] argv 120324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The argument array. 120424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 120524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] envp 120624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The environment array. 120724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1208452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// @param[in] launch_flags 1209452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// Flags to modify the launch (@see lldb::LaunchFlags) 1210452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// 121124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stdin_path 121224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDIN of the new 121324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 121424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 121524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 121624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stdout_path 121724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDOUT of the new 121824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 121924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 122024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 122124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stderr_path 122224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDERR of the new 122324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 122424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 122524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1226de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// @param[in] working_directory 1227de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// The working directory to have the child process run in 1228de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// 122924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 123024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// An error object. Call GetID() to get the process ID if 123124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the error object is success. 123224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 123324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 123424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Launch (char const *argv[], 123524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner char const *envp[], 1236452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton uint32_t launch_flags, 123724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *stdin_path, 123824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *stdout_path, 1239de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton const char *stderr_path, 1240de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton const char *working_directory); 124124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 124224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 124324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Attach to an existing process using a process ID. 124424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 124524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 124624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. It will first call Process::WillAttach (lldb::pid_t) 124724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// and if that returns \b true, Process::DoAttach (lldb::pid_t) will 124824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be called to actually do the attach. If DoAttach returns \b 124924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// true, then Process::DidAttach() will be called. 125024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 125124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] pid 125224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The process ID that we should attempt to attach to. 125324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 125424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 125524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \a pid if attaching was successful, or 125624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_PROCESS_ID if attaching fails. 125724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 125824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 125924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Attach (lldb::pid_t pid); 126024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 126124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 126224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Attach to an existing process by process name. 126324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 126424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 126524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. It will first call 126624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Process::WillAttach (const char *) and if that returns \b 126724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// true, Process::DoAttach (const char *) will be called to 126824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// actually do the attach. If DoAttach returns \b true, then 126924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Process::DidAttach() will be called. 127024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 127124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] process_name 127224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A process name to match against the current process list. 127324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 127424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 127524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \a pid if attaching was successful, or 127624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_PROCESS_ID if attaching fails. 127724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 127824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 127924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Attach (const char *process_name, bool wait_for_launch); 12807508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham 1281e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton virtual Error 1282e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton ConnectRemote (const char *remote_url); 12837508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham //------------------------------------------------------------------ 12847508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// List the processes matching the given partial name. 12857508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 12867508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// FIXME: Is it too heavyweight to create an entire process object to do this? 12877508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// The problem is for remote processes we're going to have to set up the same transport 12887508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// to get this data as to actually attach. So we need to factor out transport 12897508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// and process before we can do this separately from the process. 12907508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 12917508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// @param[in] name 12927508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// A partial name to match against the current process list. 12937508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 12947508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// @param[out] matches 12957508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// The list of process names matching \a name. 12967508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 12977508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// @param[in] pids 12987508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// A vector filled with the pids that correspond to the names in \a matches. 12997508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 13007508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// @return 13017508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// Returns the number of matching processes. 13027508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham //------------------------------------------------------------------ 13037508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham 1304e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// virtual uint32_t 1305e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// ListProcessesMatchingName (const char *name, StringList &matches, std::vector<lldb::pid_t> &pids); 13067508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham 13077508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham //------------------------------------------------------------------ 13087508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// Find the architecture of a process by pid. 13097508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 13107508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// FIXME: See comment for ListProcessesMatchingName. 13117508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 13127508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// @param[in] pid 13137508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// A pid to inspect. 13147508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 13157508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// @return 13167508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// Returns the architecture of the process or an invalid architecture if the process can't be found. 13177508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham //------------------------------------------------------------------ 1318e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// virtual ArchSpec 1319e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// GetArchSpecForExistingProcess (lldb::pid_t pid); 13207508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham 13217508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham //------------------------------------------------------------------ 13227508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// Find the architecture of a process by name. 13237508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 13247508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// FIXME: See comment for ListProcessesMatchingName. 13257508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 13267508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// @param[in] process_name 13277508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// The process name to inspect. 13287508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 13297508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// @return 13307508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// Returns the architecture of the process or an invalid architecture if the process can't be found. 13317508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham //------------------------------------------------------------------ 1332e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// virtual ArchSpec 1333e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// GetArchSpecForExistingProcess (const char *process_name); 133424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 133524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 133624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the image information address for the current process. 133724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 133824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Some runtimes have system functions that can help dynamic 133924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// loaders locate the dynamic loader information needed to observe 134024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// shared libraries being loaded or unloaded. This function is 134124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// in the Process interface (as opposed to the DynamicLoader 134224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// interface) to ensure that remote debugging can take advantage of 134324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// this functionality. 134424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 134524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 134624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The address of the dynamic loader information, or 134724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_ADDRESS if this is not supported by this 134824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// interface. 134924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 135024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual lldb::addr_t 135124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetImageInfoAddress (); 135224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 135324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 13540baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// Load a shared library into this process. 13550baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// 13560baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// Try and load a shared library into the current process. This 13570baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// call might fail in the dynamic loader plug-in says it isn't safe 13580baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// to try and load shared libraries at the moment. 13590baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// 13600baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// @param[in] image_spec 13610baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// The image file spec that points to the shared library that 13620baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// you want to load. 13630baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// 13640baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// @param[out] error 13650baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// An error object that gets filled in with any errors that 13660baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// might occur when trying to load the shared library. 13670baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// 13680baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// @return 13690baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// A token that represents the shared library that can be 13700baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// later used to unload the shared library. A value of 13710baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// LLDB_INVALID_IMAGE_TOKEN will be returned if the shared 13720baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// library can't be opened. 13730baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton //------------------------------------------------------------------ 13740baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton virtual uint32_t 13750baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton LoadImage (const FileSpec &image_spec, Error &error); 13760baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton 13770baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton virtual Error 13780baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton UnloadImage (uint32_t image_token); 13790baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton 13800baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton //------------------------------------------------------------------ 138124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Register for process and thread notifications. 138224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 138324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Clients can register nofication callbacks by filling out a 138424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Process::Notifications structure and calling this function. 138524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 138624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] callbacks 138724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A structure that contains the notification baton and 138824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// callback functions. 138924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 139024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Process::Notifications 139124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 139224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef SWIG 139324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 139424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RegisterNotificationCallbacks (const Process::Notifications& callbacks); 139524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif 139624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 139724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Unregister for process and thread notifications. 139824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 139924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Clients can unregister nofication callbacks by passing a copy of 140024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the original baton and callbacks in \a callbacks. 140124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 140224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] callbacks 140324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A structure that contains the notification baton and 140424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// callback functions. 140524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 140624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 140724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the notification callbacks were 140824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// successfully removed from the process, \b false otherwise. 140924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 141024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Process::Notifications 141124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 141224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef SWIG 141324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 141424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner UnregisterNotificationCallbacks (const Process::Notifications& callbacks); 141524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif 141624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //================================================================== 141724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Built in Process Control functions 141824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //================================================================== 141924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 142024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Resumes all of a process's threads as configured using the 142124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Thread run control functions. 142224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 142324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Threads for a process should be updated with one of the run 142424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// control actions (resume, step, or suspend) that they should take 142524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// when the process is resumed. If no run control action is given 142624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// to a thread it will be resumed by default. 142724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 142824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 142924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. This function will take care of disabling any 143024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// breakpoints that threads may be stopped at, single stepping, and 143124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// re-enabling breakpoints, and enabling the basic flow control 143224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// that the plug-in instances need not worry about. 143324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 143424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 143524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 143624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 143724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Resume() 143824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Step() 143924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Suspend() 144024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14413ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham Error 144224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Resume (); 144324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 144424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 144524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Halts a running process. 144624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 144724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 144824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. 14493ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// If the process is successfully halted, a eStateStopped 14503ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// process event with GetInterrupted will be broadcast. If false, we will 14513ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// halt the process with no events generated by the halt. 145224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 145324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 14543ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// Returns an error object. If the error is empty, the process is halted. 14553ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// otherwise the halt has failed. 145624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14573ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham Error 145824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Halt (); 145924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 146024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 146124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Detaches from a running or stopped process. 146224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 146324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 146424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. 146524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 146624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 146724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 146824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14693ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham Error 147024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Detach (); 147124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 147224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 147324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Kills the process and shuts down all threads that were spawned 147424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// to track and monitor the process. 147524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 147624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 147724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. 147824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 147924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 148024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 148124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14823ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham Error 148324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Destroy(); 148424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 148524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 148624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Sends a process a UNIX signal \a signal. 148724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 148824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 148924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. 149024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 149124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 149224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 149324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14943ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham Error 149524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Signal (int signal); 149624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 149724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual UnixSignals & 1498395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetUnixSignals () 1499395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 1500395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return m_unix_signals; 1501395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 150224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 150324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //================================================================== 150424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Plug-in Process Control Overrides 150524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //================================================================== 150624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 150724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 150824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before attaching to a process. 150924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 151024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before attaching a 151124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. 151224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 151324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 151424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 151524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 151624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 151754e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton WillAttachToProcessWithID (lldb::pid_t pid) 151824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 151924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return Error(); 152024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 152124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 152224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 152324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before attaching to a process. 152424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 152524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before attaching a 152624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. 152724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 152824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 152924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 153024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 153124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 153254e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton WillAttachToProcessWithName (const char *process_name, bool wait_for_launch) 153324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 153424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return Error(); 153524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 153624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1537e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton virtual Error 1538e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton DoConnectRemote (const char *remote_url) 1539e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton { 1540e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton Error error; 1541e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton error.SetErrorString ("remote connections are not supported"); 1542e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton return error; 1543e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton } 1544e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton 154524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 154624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Attach to an existing process using a process ID. 154724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 154824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] pid 154924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The process ID that we should attempt to attach to. 155024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 155124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 155224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \a pid if attaching was successful, or 155324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_PROCESS_ID if attaching fails. 155424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 155524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 155654e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton DoAttachToProcessWithID (lldb::pid_t pid) = 0; 155724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 155824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 155924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Attach to an existing process using a partial process name. 156024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 156124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] process_name 156224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The name of the process to attach to. 156324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 156424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] wait_for_launch 156524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \b true, wait for the process to be launched and attach 156624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// as soon as possible after it does launch. If \b false, then 156724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// search for a matching process the currently exists. 156824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 156924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 157024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \a pid if attaching was successful, or 157124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_PROCESS_ID if attaching fails. 157224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 157324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 157454e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton DoAttachToProcessWithName (const char *process_name, bool wait_for_launch) 157524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 157624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error error; 157724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner error.SetErrorString("attach by name is not supported"); 157824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return error; 157924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 158024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 158124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 158224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after attaching a process. 158324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 158424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after attaching to 158524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a process. 158624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 158724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 158824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidAttach () {} 158924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 159024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 159124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 159224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before launching to a process. 159324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 159424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before launching a 159524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. 159624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 159724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 159824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 159924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 160024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 160124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillLaunch (Module* module) 160224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 160324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return Error(); 160424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 160524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 160624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 160724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Launch a new process. 160824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 160924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Launch a new process by spawning a new process using \a module's 161024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// file as the file to launch. Arguments are given in \a argv, 161124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// and the environment variables are in \a envp. Standard input 161224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// and output files can be optionally re-directed to \a stdin_path, 161324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a stdout_path, and \a stderr_path. 161424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 161524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] module 161624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The module from which to extract the file specification and 161724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// launch. 161824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 161924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] argv 162024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The argument array. 162124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 162224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] envp 162324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The environment array. 162424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1625452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// @param[in] launch_flags 1626452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// Flags to modify the launch (@see lldb::LaunchFlags) 1627452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// 162824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stdin_path 162924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDIN of the new 163024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 163124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 163224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 163324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stdout_path 163424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDOUT of the new 163524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 163624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 163724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 163824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stderr_path 163924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDERR of the new 164024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 164124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 164224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1643de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// @param[in] working_directory 1644de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// The working directory to have the child process run in 1645de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// 164624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 164724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A new valid process ID, or LLDB_INVALID_PROCESS_ID if 164824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// launching fails. 164924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 165024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 165124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoLaunch (Module* module, 165224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner char const *argv[], 165324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner char const *envp[], 1654452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton uint32_t launch_flags, 165524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *stdin_path, 165624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *stdout_path, 1657de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton const char *stderr_path, 1658de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton const char *working_directory) = 0; 165924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 166024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 166124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after launching a process. 166224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 166324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after launching 166424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a process. 166524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 166624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 166724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidLaunch () {} 166824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 166924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 167024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 167124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 167224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before resuming to a process. 167324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 167424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before resuming a 167524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. 167624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 167724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 167824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 167924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 168024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 168124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillResume () { return Error(); } 168224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 168324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 168424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Resumes all of a process's threads as configured using the 168524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Thread run control functions. 168624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 168724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Threads for a process should be updated with one of the run 168824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// control actions (resume, step, or suspend) that they should take 168924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// when the process is resumed. If no run control action is given 169024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// to a thread it will be resumed by default. 169124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 169224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 169324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the process successfully resumes using 169424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the thread run control actions, \b false otherwise. 169524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 169624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Resume() 169724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Step() 169824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Suspend() 169924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 170024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 170124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoResume () = 0; 170224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 170324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 170424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after resuming a process. 170524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 170624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after resuming 170724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a process. 170824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 170924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 171024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidResume () {} 171124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 171224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 171324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 171424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before halting to a process. 171524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 171624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before halting a 171724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. 171824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 171924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 172024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 172124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 172224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 172324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillHalt () { return Error(); } 172424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 172524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 172624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Halts a running process. 172724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1728360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// DoHalt must produce one and only one stop StateChanged event if it actually 1729360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// stops the process. If the stop happens through some natural event (for 1730360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// instance a SIGSTOP), then forwarding that event will do. Otherwise, you must 1731360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// generate the event manually. Note also, the private event thread is stopped when 1732360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// DoHalt is run to prevent the events generated while halting to trigger 1733360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// other state changes before the halt is complete. 17343ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// 17353ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// @param[out] caused_stop 173620d338fad87eba91de65aa9bec76e01c04472848Greg Clayton /// If true, then this Halt caused the stop, otherwise, the 173720d338fad87eba91de65aa9bec76e01c04472848Greg Clayton /// process was already stopped. 17383ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// 173924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 174024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the process successfully halts, \b false 174124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// otherwise. 174224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 174324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 17443ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham DoHalt (bool &caused_stop) = 0; 174524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 174624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 174724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after halting a process. 174824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 174924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after halting 175024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a process. 175124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 175224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 175324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidHalt () {} 175424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 175524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 175624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before detaching from a process. 175724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 175824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before detaching 175924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// from a process. 176024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 176124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 176224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 176324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 176424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 176524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillDetach () 176624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 176724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return Error(); 176824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 176924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 177024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 177124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Detaches from a running or stopped process. 177224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 177324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 177424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the process successfully detaches, \b 177524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// false otherwise. 177624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 177724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 177824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoDetach () = 0; 177924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 178024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 178124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after detaching from a process. 178224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 178324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after detaching 178424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// from a process. 178524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 178624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 178724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidDetach () {} 178824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 178924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 179024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before sending a signal to a process. 179124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 179224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before sending a 179324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// signal to a process. 179424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 179524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 179624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns no error if it is safe to proceed with a call to 179724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Process::DoSignal(int), otherwise an error describing what 179824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// prevents the signal from being sent. 179924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 180024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 180124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillSignal () { return Error(); } 180224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 180324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 180424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Sends a process a UNIX signal \a signal. 180524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 180624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 180724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 180824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 180924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 181024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoSignal (int signal) = 0; 181124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 181224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 181324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 181424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 181524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillDestroy () { return Error(); } 181624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 181724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 181824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoDestroy () = 0; 181924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 182024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 182124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidDestroy () { } 182224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 182324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 182424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 182524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after sending a signal to a process. 182624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 182724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after sending a 182824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// signal to a process. 182924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 183024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 183124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidSignal () {} 183224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 183324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 183424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 183524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Currently called as part of ShouldStop. 183624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// FIXME: Should really happen when the target stops before the 183724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// event is taken from the queue... 183824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 183924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This callback is called as the event 184024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// is about to be queued up to allow Process plug-ins to execute 184124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// some code prior to clients being notified that a process was 184224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// stopped. Common operations include updating the thread list, 184324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// invalidating any thread state (registers, stack, etc) prior to 184424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// letting the notification go out. 184524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 184624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 184724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 184824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RefreshStateAfterStop () = 0; 184924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 185024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 185124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the target object pointer for this module. 185224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 185324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 185424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A Target object pointer to the target that owns this 185524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// module. 185624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 185724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Target & 1858395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetTarget () 1859395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 1860395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return m_target; 1861395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 186224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 186324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 186424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the const target object pointer for this module. 186524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 186624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 186724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const Target object pointer to the target that owns this 186824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// module. 186924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 187024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Target & 1871395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetTarget () const 1872395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 1873395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return m_target; 1874395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 1875395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton 187624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 187724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 187824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the current process state. 187924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 188024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 188124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The current state of the process. 188224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 188324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see lldb::StateType 188424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 188524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 188624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetState (); 1887360f53f3c216ee4fb433da0a367168785328a856Jim Ingham 1888b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton ExecutionResults 1889360f53f3c216ee4fb433da0a367168785328a856Jim Ingham RunThreadPlan (ExecutionContext &exe_ctx, 1890360f53f3c216ee4fb433da0a367168785328a856Jim Ingham lldb::ThreadPlanSP &thread_plan_sp, 1891360f53f3c216ee4fb433da0a367168785328a856Jim Ingham bool stop_others, 1892360f53f3c216ee4fb433da0a367168785328a856Jim Ingham bool try_all_threads, 1893360f53f3c216ee4fb433da0a367168785328a856Jim Ingham bool discard_on_error, 1894360f53f3c216ee4fb433da0a367168785328a856Jim Ingham uint32_t single_thread_timeout_usec, 1895360f53f3c216ee4fb433da0a367168785328a856Jim Ingham Stream &errors); 1896360f53f3c216ee4fb433da0a367168785328a856Jim Ingham 1897360f53f3c216ee4fb433da0a367168785328a856Jim Ingham static const char * 1898b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton ExecutionResultAsCString (ExecutionResults result); 189924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1900abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton void 1901abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton GetStatus (Stream &ostrm); 1902abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton 1903abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton size_t 1904abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton GetThreadStatus (Stream &ostrm, 1905abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton bool only_threads_with_stop_reason, 1906abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton uint32_t start_frame, 1907abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton uint32_t num_frames, 1908abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton uint32_t num_frames_with_source); 1909abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton 191024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 191124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class CommandObjectProcessLaunch; 191224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class ProcessEventData; 191324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class CommandObjectBreakpointCommand; 191424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 191524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 191624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetState (lldb::EventSP &event_sp); 191724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 191824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 191924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetPrivateState (); 192024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 192175c703dd8b492bad25a987b96853626641ae7246Greg Clayton //------------------------------------------------------------------ 192275c703dd8b492bad25a987b96853626641ae7246Greg Clayton // Called internally 192375c703dd8b492bad25a987b96853626641ae7246Greg Clayton //------------------------------------------------------------------ 192475c703dd8b492bad25a987b96853626641ae7246Greg Clayton void 192575c703dd8b492bad25a987b96853626641ae7246Greg Clayton CompleteAttach (); 192675c703dd8b492bad25a987b96853626641ae7246Greg Clayton 192724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 192824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 192924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the exit status for a process. 193024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 193124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 193224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The process's return code, or -1 if the current process 193324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// state is not eStateExited. 193424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 193524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int 193624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetExitStatus (); 193724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 193824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 193924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get a textual description of what the process exited. 194024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 194124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 194224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The textual description of why the process exited, or NULL 194324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// if there is no description available. 194424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 194524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * 194624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetExitDescription (); 194724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 194824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 194924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 195024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidExit () 195124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 195224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 195324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 195424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 195524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the number of times this process has posted a stop event. 195624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 195724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 195824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of times this process has stopped while being 195924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// debugged. 196024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 196124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 196224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetStopID () const; 196324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 196424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 196524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Set accessor for the process exit status (return code). 196624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 196724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Sometimes a child exits and the exit can be detected by global 196824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// functions (signal handler for SIGCHLD for example). This 196924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// accessor allows the exit status to be set from an external 197024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// source. 197124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 197224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Setting this will cause a eStateExited event to be posted to 197324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the process event queue. 197424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 197524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] exit_status 197624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The value for the process's return code. 197724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 197824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see lldb::StateType 197924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 198072e1c782ba1e4226da37af4722af608de9f39408Greg Clayton virtual bool 198124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetExitStatus (int exit_status, const char *cstr); 198224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 198324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 198424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Check if a process is still alive. 198524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 198624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 198724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the process is still valid, \b false 198824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// otherwise. 198924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 199024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 199124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsAlive () = 0; 199224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 199324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 199424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Actually do the reading of memory from a process. 199524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 199624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Subclasses must override this function and can return fewer 199724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// bytes than requested when memory requests are too large. This 199824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// class will break up the memory requests and keep advancing the 199924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// arguments along as needed. 200024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 200124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] vm_addr 200224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A virtual load address that indicates where to start reading 200324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// memory from. 200424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 200524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 200624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes to read. 200724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 200824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf 200924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A byte buffer that is at least \a size bytes long that 201024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// will receive the memory bytes. 201124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 201224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 201324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that were actually read into \a buf. 201424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 201524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 201624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoReadMemory (lldb::addr_t vm_addr, 201724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void *buf, 201824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t size, 201924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error &error) = 0; 202024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 202124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 202224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Read of memory from a process. 202324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 202424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will read memory from the current process's 202524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// address space and remove any traps that may have been inserted 202624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// into the memory. 202724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 202824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 202924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses, the subclasses should implement 203024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Process::DoReadMemory (lldb::addr_t, size_t, void *). 203124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 203224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] vm_addr 203324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A virtual load address that indicates where to start reading 203424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// memory from. 203524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 203624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf 203724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A byte buffer that is at least \a size bytes long that 203824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// will receive the memory bytes. 203924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 204024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 204124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes to read. 204224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 204324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 204424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that were actually read into \a buf. If 204524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the returned number is greater than zero, yet less than \a 204624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// size, then this function will get called again with \a 204724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// vm_addr, \a buf, and \a size updated appropriately. Zero is 204824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// returned to indicate an error. 204924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 205024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 205124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ReadMemory (lldb::addr_t vm_addr, 205224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void *buf, 205324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t size, 205424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error &error); 205524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2056b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton //------------------------------------------------------------------ 2057b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// Read a NULL terminated C string from memory 2058b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// 2059b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// This function will read a cache page at a time until the NULL 2060b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// C stirng terminator is found. It will stop reading if the NULL 2061b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// termination byte isn't found before reading \a cstr_max_len 2062b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// bytes, and the results are always guaranteed to be NULL 2063b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// terminated (at most cstr_max_len - 1 bytes will be read). 2064b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton //------------------------------------------------------------------ 2065b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton size_t 2066b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ReadCStringFromMemory (lldb::addr_t vm_addr, 2067b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton char *cstr, 2068b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton size_t cstr_max_len); 2069b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 2070fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton size_t 2071fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton ReadMemoryFromInferior (lldb::addr_t vm_addr, 2072fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton void *buf, 2073fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton size_t size, 2074fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton Error &error); 2075fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton 20766d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton //------------------------------------------------------------------ 20776d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// Reads an unsigned integer of the specified byte size from 20786d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// process memory. 20796d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// 20806d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// @param[in] load_addr 20816d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// A load address of the integer to read. 20826d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// 20836d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// @param[in] byte_size 20846d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// The size in byte of the integer to read. 20856d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// 20866d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// @param[out] error 20876d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// An error that indicates the success or failure of this 20886d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// operation. If error indicates success (error.Success()), 20896d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// then the value returned can be trusted, otherwise zero 20906d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// will be returned. 20916d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// 20926d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// @return 20936d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// The unsigned integer that was read from the process memory 20946d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// space. If the integer was smaller than a uint64_t, any 20956d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// unused upper bytes will be zero filled. If the process 20966d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// byte order differs from the host byte order, the integer 20976d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// value will be appropriately byte swapped into host byte 20986d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// order. 20996d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton //------------------------------------------------------------------ 2100f72fdeee129bbd7195f3db888b561ede689886aaGreg Clayton uint64_t 21016d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton ReadUnsignedInteger (lldb::addr_t load_addr, 21026d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton size_t byte_size, 2103f72fdeee129bbd7195f3db888b561ede689886aaGreg Clayton Error &error); 210424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 210524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Actually do the writing of memory to a process. 210624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 210724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] vm_addr 210824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A virtual load address that indicates where to start writing 210924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// memory to. 211024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 211124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] buf 211224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A byte buffer that is at least \a size bytes long that 211324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// contains the data to write. 211424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 211524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 211624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes to write. 211724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 211824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 211924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that were actually written. 212024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 212124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 212224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoWriteMemory (lldb::addr_t vm_addr, const void *buf, size_t size, Error &error) = 0; 212324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 212424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 212524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Write memory to a process. 212624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 212724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will write memory to the current process's 212824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// address space and maintain any traps that might be present due 212924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// to software breakpoints. 213024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 213124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 213224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses, the subclasses should implement 213324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Process::DoWriteMemory (lldb::addr_t, size_t, void *). 213424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 213524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] vm_addr 213624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A virtual load address that indicates where to start writing 213724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// memory to. 213824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 213924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] buf 214024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A byte buffer that is at least \a size bytes long that 214124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// contains the data to write. 214224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 214324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 214424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes to write. 214524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 214624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 214724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that were actually written. 214824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 214924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 215024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WriteMemory (lldb::addr_t vm_addr, const void *buf, size_t size, Error &error); 215124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 215224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 215324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 215424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Actually allocate memory in the process. 215524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 215624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will allocate memory in the process's address 215724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// space. This can't rely on the generic function calling mechanism, 215824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// since that requires this function. 215924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 216024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 216124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The size of the allocation requested. 216224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 216324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 216424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The address of the allocated buffer in the process, or 216524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_ADDRESS if the allocation failed. 216624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 216724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 216824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual lldb::addr_t 216924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoAllocateMemory (size_t size, uint32_t permissions, Error &error) = 0; 217024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 217124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 217224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The public interface to allocating memory in the process. 217324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 217424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will allocate memory in the process's address 217524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// space. This can't rely on the generic function calling mechanism, 217624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// since that requires this function. 217724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 217824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 217924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The size of the allocation requested. 218024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 218124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] permissions 218224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Or together any of the lldb::Permissions bits. The permissions on 218324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a given memory allocation can't be changed after allocation. Note 218424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// that a block that isn't set writable can still be written on from lldb, 218524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// just not by the process itself. 218624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 2187b9e8f6e7a374d9313f89193e90ae41ef91712e5bGreg Clayton /// @param[in/out] error 2188b9e8f6e7a374d9313f89193e90ae41ef91712e5bGreg Clayton /// An error object to fill in if things go wrong. 218924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 219024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The address of the allocated buffer in the process, or 219124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_ADDRESS if the allocation failed. 219224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 219324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 219424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t 219524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner AllocateMemory (size_t size, uint32_t permissions, Error &error); 219624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 219724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 219824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Actually deallocate memory in the process. 219924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 220024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will deallocate memory in the process's address 220124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// space that was allocated with AllocateMemory. 220224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 220324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] ptr 220424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A return value from AllocateMemory, pointing to the memory you 220524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// want to deallocate. 220624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 220724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 220824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \btrue if the memory was deallocated, \bfalse otherwise. 220924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 221024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 221124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 221224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoDeallocateMemory (lldb::addr_t ptr) = 0; 221324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 221424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 221524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The public interface to deallocating memory in the process. 221624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 221724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will deallocate memory in the process's address 221824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// space that was allocated with AllocateMemory. 221924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 222024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] ptr 222124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A return value from AllocateMemory, pointing to the memory you 222224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// want to deallocate. 222324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 222424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 222524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \btrue if the memory was deallocated, \bfalse otherwise. 222624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 222724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 222824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error 222924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DeallocateMemory (lldb::addr_t ptr); 223024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 223124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 223224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get any available STDOUT. 223324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 223424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the process was launched without supplying valid file paths 223524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// for stdin, stdout, and stderr, then the Process class might 223624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// try to cache the STDOUT for the process if it is able. Events 223724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// will be queued indicating that there is STDOUT available that 223824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// can be retrieved using this function. 223924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 224024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf 224124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A buffer that will receive any STDOUT bytes that are 224224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// currently available. 224324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 224424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf_size 224524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The size in bytes for the buffer \a buf. 224624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 224724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 224824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes written into \a buf. If this value is 224924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// equal to \a buf_size, another call to this function should 225024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be made to retrieve more STDOUT data. 225124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 225224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 225324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSTDOUT (char *buf, size_t buf_size, Error &error) 225424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 225524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner error.SetErrorString("stdout unsupported"); 225624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return 0; 225724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 225824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 225924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 226024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 226124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get any available STDERR. 226224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 226324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the process was launched without supplying valid file paths 226424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// for stdin, stdout, and stderr, then the Process class might 226524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// try to cache the STDERR for the process if it is able. Events 226624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// will be queued indicating that there is STDERR available that 226724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// can be retrieved using this function. 226824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 226924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf 227024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A buffer that will receive any STDERR bytes that are 227124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// currently available. 227224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 227324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf_size 227424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The size in bytes for the buffer \a buf. 227524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 227624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 227724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes written into \a buf. If this value is 227824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// equal to \a buf_size, another call to this function should 227924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be made to retrieve more STDERR data. 228024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 228124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 228224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSTDERR (char *buf, size_t buf_size, Error &error) 228324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 228424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner error.SetErrorString("stderr unsupported"); 228524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return 0; 228624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 228724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 228824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 228924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner PutSTDIN (const char *buf, size_t buf_size, Error &error) 229024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 229124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner error.SetErrorString("stdin unsupported"); 229224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return 0; 229324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 229424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 229524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //---------------------------------------------------------------------- 229624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Process Breakpoints 229724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //---------------------------------------------------------------------- 2298b1888f24fa181489840b9acf193e224d125d0776Greg Clayton size_t 2299b1888f24fa181489840b9acf193e224d125d0776Greg Clayton GetSoftwareBreakpointTrapOpcode (BreakpointSite* bp_site); 230024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 230124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 230224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner EnableBreakpoint (BreakpointSite *bp_site) = 0; 230324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 230424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 230524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DisableBreakpoint (BreakpointSite *bp_site) = 0; 230624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 230724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // This is implemented completely using the lldb::Process API. Subclasses 230824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // don't need to implement this function unless the standard flow of 230924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // read existing opcode, write breakpoint opcode, verify breakpoint opcode 231024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // doesn't work for a specific process plug-in. 231124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 231224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner EnableSoftwareBreakpoint (BreakpointSite *bp_site); 231324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 231424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // This is implemented completely using the lldb::Process API. Subclasses 231524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // don't need to implement this function unless the standard flow of 231624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // restoring original opcode in memory and verifying the restored opcode 231724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // doesn't work for a specific process plug-in. 231824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 231924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DisableSoftwareBreakpoint (BreakpointSite *bp_site); 232024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 232124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner BreakpointSiteList & 232224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetBreakpointSiteList(); 232324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 232424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const BreakpointSiteList & 232524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetBreakpointSiteList() const; 232624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 232724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 232824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DisableAllBreakpointSites (); 232924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 233024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error 233124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ClearBreakpointSiteByID (lldb::user_id_t break_id); 233224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23333fd1f36c937575dbf57bae04c7ebaef78d8ecc1dStephen Wilson lldb::break_id_t 233424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CreateBreakpointSite (lldb::BreakpointLocationSP &owner, 233524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool use_hardware); 233624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 233724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error 233824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DisableBreakpointSiteByID (lldb::user_id_t break_id); 233924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 234024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error 234124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner EnableBreakpointSiteByID (lldb::user_id_t break_id); 234224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 234324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 234424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // BreakpointLocations use RemoveOwnerFromBreakpointSite to remove 234524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // themselves from the owner's list of this breakpoint sites. This has to 234624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // be a static function because you can't be sure that removing the 234724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // breakpoint from it's containing map won't delete the breakpoint site, 234824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // and doing that in an instance method isn't copasetic. 234924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 235024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RemoveOwnerFromBreakpointSite (lldb::user_id_t owner_id, 235124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t owner_loc_id, 235224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::BreakpointSiteSP &bp_site_sp); 235324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 235424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //---------------------------------------------------------------------- 235524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Process Watchpoints (optional) 235624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //---------------------------------------------------------------------- 235724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 235824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner EnableWatchpoint (WatchpointLocation *bp_loc); 235924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 236024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 236124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DisableWatchpoint (WatchpointLocation *bp_loc); 236224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 236324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 236424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Thread Queries 236524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 236624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual uint32_t 236724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner UpdateThreadListIfNeeded () = 0; 236824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 236924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ThreadList & 2370395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetThreadList () 2371395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 2372395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return m_thread_list; 2373395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 237424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 237524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ThreadList & 2376395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetThreadList () const 2377395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 2378395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return m_thread_list; 2379395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 238024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 238124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 238224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetNextThreadIndexID (); 238324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 238424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 238524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Event Handling 238624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 238724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 238824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetNextEvent (lldb::EventSP &event_sp); 238924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 239024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 239124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WaitForProcessToStop (const TimeValue *timeout); 239224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 239324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 239424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WaitForStateChangedEvents (const TimeValue *timeout, lldb::EventSP &event_sp); 239524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 239624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Event * 239724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner PeekAtStateChangedEvents (); 239863e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham 239924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2400f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham class 2401f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham ProcessEventHijacker 2402f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham { 2403f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham public: 2404f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham ProcessEventHijacker (Process &process, Listener *listener) : 2405f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham m_process (process), 2406f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham m_listener (listener) 2407f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham { 2408f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham m_process.HijackProcessEvents (listener); 2409f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham } 2410f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham ~ProcessEventHijacker () 2411f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham { 2412f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham m_process.RestoreProcessEvents(); 2413f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham } 2414f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham 2415f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham private: 2416f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham Process &m_process; 2417f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham Listener *m_listener; 2418f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham }; 2419f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham friend class ProcessEventHijacker; 242024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 242163e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// If you need to ensure that you and only you will hear about some public 242263e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// event, then make a new listener, set to listen to process events, and 242363e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// then call this with that listener. Then you will have to wait on that 242463e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// listener explicitly for events (rather than using the GetNextEvent & WaitFor* 242563e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// calls above. Be sure to call RestoreProcessEvents when you are done. 242663e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// 242763e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// @param[in] listener 242863e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// This is the new listener to whom all process events will be delivered. 242963e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// 243063e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// @return 243163e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// Returns \b true if the new listener could be installed, 243263e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// \b false otherwise. 243363e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham //------------------------------------------------------------------ 243463e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham bool 243563e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham HijackProcessEvents (Listener *listener); 243663e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham 243763e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham //------------------------------------------------------------------ 243863e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// Restores the process event broadcasting to its normal state. 243963e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// 244063e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham //------------------------------------------------------------------ 244163e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham void 244263e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham RestoreProcessEvents (); 244363e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham 244463e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Inghamprotected: 244563e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham //------------------------------------------------------------------ 244624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This is the part of the event handling that for a process event. 244724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// It decides what to do with the event and returns true if the 244824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// event needs to be propagated to the user, and false otherwise. 244924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the event is not propagated, this call will most likely set 245024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the target to executing again. 245124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 245224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] event_ptr 245324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This is the event we are handling. 245424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 245524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 245624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the event should be reported to the 245724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// user, \b false otherwise. 245824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 245924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 246024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ShouldBroadcastEvent (Event *event_ptr); 246124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 246263e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Inghampublic: 246375906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton const lldb::ABISP & 246424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetABI (); 246524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 246675c703dd8b492bad25a987b96853626641ae7246Greg Clayton DynamicLoader * 246775c703dd8b492bad25a987b96853626641ae7246Greg Clayton GetDynamicLoader () 246875c703dd8b492bad25a987b96853626641ae7246Greg Clayton { 246975c703dd8b492bad25a987b96853626641ae7246Greg Clayton return m_dyld_ap.get(); 247075c703dd8b492bad25a987b96853626641ae7246Greg Clayton } 247175c703dd8b492bad25a987b96853626641ae7246Greg Clayton 2472642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham virtual LanguageRuntime * 2473642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham GetLanguageRuntime (lldb::LanguageType language); 2474642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 2475642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham virtual CPPLanguageRuntime * 2476642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham GetCPPLanguageRuntime (); 2477642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 2478642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham virtual ObjCLanguageRuntime * 2479642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham GetObjCLanguageRuntime (); 248024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 248124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 248224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsRunning () const; 2483f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan 2484f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan DynamicCheckerFunctions *GetDynamicCheckers() 2485f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan { 2486d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham return m_dynamic_checkers_ap.get(); 2487f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan } 2488f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan 2489f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan void SetDynamicCheckers(DynamicCheckerFunctions *dynamic_checkers) 2490f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan { 2491d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham m_dynamic_checkers_ap.reset(dynamic_checkers); 2492f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan } 249324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2494c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham //------------------------------------------------------------------ 2495c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// Call this to set the lldb in the mode where it breaks on new thread 2496c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// creations, and then auto-restarts. This is useful when you are trying 2497c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// to run only one thread, but either that thread or the kernel is creating 2498c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// new threads in the process. If you stop when the thread is created, you 2499c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// can immediately suspend it, and keep executing only the one thread you intend. 2500c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// 2501c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// @return 2502c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// Returns \b true if we were able to start up the notification 2503c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// \b false otherwise. 2504c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham //------------------------------------------------------------------ 250555e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham virtual bool 250655e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham StartNoticingNewThreads() 250755e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham { 250855e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham return true; 250955e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham } 251055e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham 2511c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham //------------------------------------------------------------------ 2512c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// Call this to turn off the stop & notice new threads mode. 2513c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// 2514c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// @return 2515c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// Returns \b true if we were able to start up the notification 2516c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// \b false otherwise. 2517c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham //------------------------------------------------------------------ 251855e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham virtual bool 251955e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham StopNoticingNewThreads() 252055e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham { 252155e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham return true; 252255e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham } 252355e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham 252424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 252524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // lldb::ExecutionContextScope pure virtual functions 252624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 252724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Target * 2528395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton CalculateTarget () 2529395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 2530395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return &m_target; 2531395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 253224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 253324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Process * 2534395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton CalculateProcess () 2535395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 2536395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return this; 2537395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 253824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 253924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Thread * 2540395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton CalculateThread () 2541395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 2542395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return NULL; 2543395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 254424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 254524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual StackFrame * 2546395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton CalculateStackFrame () 2547395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 2548395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return NULL; 2549395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 255024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 255124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 2552a830adbcd63d1995a01e6e18da79893c1426ca43Greg Clayton CalculateExecutionContext (ExecutionContext &exe_ctx); 255324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 255424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::ProcessSP 255524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSP (); 255624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 255724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 2558c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham //------------------------------------------------------------------ 2559c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham // lldb::ExecutionContextScope pure virtual functions 2560c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham //------------------------------------------------------------------ 2561c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham class NextEventAction 2562c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham { 2563c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham public: 2564c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham typedef enum EventActionResult 2565c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham { 2566c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham eEventActionSuccess, 2567c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham eEventActionRetry, 2568c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham eEventActionExit 2569c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham } EventActionResult; 2570c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 2571c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham NextEventAction (Process *process) : 2572c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham m_process(process) 2573c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham {} 2574c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual ~NextEventAction() {} 2575c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 2576c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual EventActionResult PerformAction (lldb::EventSP &event_sp) = 0; 2577c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual void HandleBeingUnshipped () {}; 2578c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual EventActionResult HandleBeingInterrupted () = 0; 2579c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual const char *GetExitString() = 0; 2580c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham protected: 2581c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham Process *m_process; 2582c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham }; 2583c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 2584c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham void SetNextEventAction (Process::NextEventAction *next_event_action) 2585c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham { 258668bffc51b218dc3a124820cb4d983204bf20be4aJim Ingham if (m_next_event_action_ap.get()) 258768bffc51b218dc3a124820cb4d983204bf20be4aJim Ingham m_next_event_action_ap->HandleBeingUnshipped(); 258868bffc51b218dc3a124820cb4d983204bf20be4aJim Ingham 258968bffc51b218dc3a124820cb4d983204bf20be4aJim Ingham m_next_event_action_ap.reset(next_event_action); 2590c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham } 2591c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 2592c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham // This is the completer for Attaching: 2593c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham class AttachCompletionHandler : public NextEventAction 2594c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham { 2595c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham public: 2596c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham AttachCompletionHandler (Process *process) : 2597c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham NextEventAction(process) 2598c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham {} 2599c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual ~AttachCompletionHandler() {} 2600c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 2601c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual EventActionResult PerformAction (lldb::EventSP &event_sp); 2602c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual EventActionResult HandleBeingInterrupted (); 2603c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual const char *GetExitString(); 2604c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham private: 2605c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham std::string m_exit_string; 2606c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham }; 2607c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 2608f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham bool 2609f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham HijackPrivateProcessEvents (Listener *listener); 2610f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham 2611f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham void 2612f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham RestorePrivateProcessEvents (); 2613a2f7423310044cf76d8d52aa9153b7fd8b226b49Greg Clayton 2614a2f7423310044cf76d8d52aa9153b7fd8b226b49Greg Clayton bool 2615a2f7423310044cf76d8d52aa9153b7fd8b226b49Greg Clayton PrivateStateThreadIsValid () const 2616a2f7423310044cf76d8d52aa9153b7fd8b226b49Greg Clayton { 2617a2f7423310044cf76d8d52aa9153b7fd8b226b49Greg Clayton return m_private_state_thread != LLDB_INVALID_HOST_THREAD; 2618a2f7423310044cf76d8d52aa9153b7fd8b226b49Greg Clayton } 2619fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton 262024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 262124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Member variables 262224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 262324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Target & m_target; ///< The target that owns this process. 262424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ThreadSafeValue<lldb::StateType> m_public_state; 262524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ThreadSafeValue<lldb::StateType> m_private_state; // The actual state of our process 262624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Broadcaster m_private_state_broadcaster; // This broadcaster feeds state changed events into the private state thread's listener. 262724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Broadcaster m_private_state_control_broadcaster; // This is the control broadcaster, used to pause, resume & stop the private state thread. 262824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Listener m_private_state_listener; // This is the listener for the private state thread. 262924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Predicate<bool> m_private_state_control_wait; /// This Predicate is used to signal that a control operation is complete. 263024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::thread_t m_private_state_thread; // Thread ID for the thread that watches interal state events 263124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t m_stop_id; ///< A count of many times the process has stopped. 263224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t m_thread_index_id; ///< Each thread is created with a 1 based index that won't get re-used. 263324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int m_exit_status; ///< The exit status of the process, or -1 if not set. 263424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::string m_exit_string; ///< A textual description of why a process exited. 263524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ThreadList m_thread_list; ///< The threads for this process. 263624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::vector<Notifications> m_notifications; ///< The list of notifications that this process can deliver. 26370baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton std::vector<lldb::addr_t> m_image_tokens; 263824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Listener &m_listener; 263924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner BreakpointSiteList m_breakpoint_site_list; ///< This is the list of breakpoint locations we intend 264024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ///< to insert in the target. 264175c703dd8b492bad25a987b96853626641ae7246Greg Clayton std::auto_ptr<DynamicLoader> m_dyld_ap; 2642d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham std::auto_ptr<DynamicCheckerFunctions> m_dynamic_checkers_ap; ///< The functions used by the expression parser to validate data that expressions use. 264324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner UnixSignals m_unix_signals; /// This is the current signal set for this process. 264424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::ABISP m_abi_sp; 2645861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice lldb::InputReaderSP m_process_input_reader; 2646861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice lldb_private::Communication m_stdio_communication; 264720d338fad87eba91de65aa9bec76e01c04472848Greg Clayton lldb_private::Mutex m_stdio_communication_mutex; 2648861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice std::string m_stdout_data; 2649fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton MemoryCache m_memory_cache; 2650613b8739a4d489b7f1c571288d5786768c024205Greg Clayton AllocatedMemoryCache m_allocated_memory_cache; 2651fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton 2652642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham typedef std::map<lldb::LanguageType, lldb::LanguageRuntimeSP> LanguageRuntimeCollection; 2653642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham LanguageRuntimeCollection m_language_runtimes; 26547e2f91cb958c8670774cb2190db7b858618b5b9bGreg Clayton std::auto_ptr<NextEventAction> m_next_event_action_ap; 265524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 265624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 265724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RemoveBreakpointOpcodesFromBuffer (lldb::addr_t addr, size_t size, uint8_t *buf) const; 265824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 265924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 266024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SynchronouslyNotifyStateChanged (lldb::StateType state); 266124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 266224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 266324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetPublicState (lldb::StateType new_state); 266424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 266524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 266624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetPrivateState (lldb::StateType state); 266724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 266824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 266924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StartPrivateStateThread (); 267024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 267124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 267224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StopPrivateStateThread (); 267324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 267424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 267524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner PausePrivateStateThread (); 267624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 267724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 267824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResumePrivateStateThread (); 267924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 268024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void * 268124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner PrivateStateThread (void *arg); 268224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 268324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void * 268424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RunPrivateStateThread (); 268524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 268624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 268724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner HandlePrivateEvent (lldb::EventSP &event_sp); 268824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 268924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 269024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WaitForProcessStopPrivate (const TimeValue *timeout, lldb::EventSP &event_sp); 269124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 269224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // This waits for both the state change broadcaster, and the control broadcaster. 269324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // If control_only, it only waits for the control broadcaster. 269424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 269524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 269624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WaitForEventsPrivate (const TimeValue *timeout, lldb::EventSP &event_sp, bool control_only); 269724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 269824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 269924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WaitForStateChangedEventsPrivate (const TimeValue *timeout, lldb::EventSP &event_sp); 270024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 270124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 270224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WaitForState (const TimeValue *timeout, 270324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb::StateType *match_states, 270424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const uint32_t num_match_states); 270524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 270624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 270724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WriteMemoryPrivate (lldb::addr_t addr, const void *buf, size_t size, Error &error); 2708861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 2709861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice void 2710861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice AppendSTDOUT (const char *s, size_t len); 2711861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 2712861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice static void 2713861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice STDIOReadThreadBytesReceived (void *baton, const void *src, size_t src_len); 2714861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 2715861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice void 2716861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice PushProcessInputReader (); 2717861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 2718861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice void 2719861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice PopProcessInputReader (); 2720861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 2721861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice void 2722861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice ResetProcessInputReader (); 2723861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 2724861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice void 2725861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice SetUpProcessInputReader (int file_descriptor); 2726861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 2727861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice static size_t 2728861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice ProcessInputReaderCallback (void *baton, 2729861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice InputReader &reader, 2730861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice lldb::InputReaderAction notification, 2731861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice const char *bytes, 2732861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice size_t bytes_len); 2733861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 2734861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 273524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 273624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 273724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // For Process only 273824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 273924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void ControlPrivateStateThread (uint32_t signal); 27406e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 274124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN (Process); 274224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 274324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 274424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 274524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 274624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 274724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_Process_h_ 2748