Process.h revision b72d0f098e45936fa72e26b1a026c603e17e2d6c
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" 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/ThreadList.h" 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/UnixSignals.h" 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 45b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 46b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// ProcessInstanceSettings 47b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 486e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Ticeclass ProcessInstanceSettings : public InstanceSettings 496e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice{ 506e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Ticepublic: 516e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 52004afcb95736e97d071b1dd9b5254800e11e581cCaroline Tice ProcessInstanceSettings (UserSettingsController &owner, bool live_instance = true, const char *name = NULL); 536e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 546e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice ProcessInstanceSettings (const ProcessInstanceSettings &rhs); 556e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 566e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice virtual 576e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice ~ProcessInstanceSettings (); 586e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 596e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice ProcessInstanceSettings& 606e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice operator= (const ProcessInstanceSettings &rhs); 616e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 626e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 636e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice void 646e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice UpdateInstanceSettingsVariable (const ConstString &var_name, 656e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice const char *index_value, 666e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice const char *value, 676e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice const ConstString &instance_name, 686e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice const SettingEntry &entry, 69b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton VarSetOperationType op, 706e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice Error &err, 716e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice bool pending); 726e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 73bcb5b454767121980d937d2610ba762fdb575c45Caroline Tice bool 746e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice GetInstanceSettingsValue (const SettingEntry &entry, 756e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice const ConstString &var_name, 765bc8c97d62b2e399bd90fb7e00c903d7887412abCaroline Tice StringList &value, 77bcb5b454767121980d937d2610ba762fdb575c45Caroline Tice Error *err); 786e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 796e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 80238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton const Args & 81238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton GetRunArguments () const 82238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 83238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton return m_run_args; 84238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 85238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 86238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton void 87238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton SetRunArguments (const Args &args) 88238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 89238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton m_run_args = args; 90238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 91238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 92638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton void 93638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton GetHostEnvironmentIfNeeded (); 94638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton 95238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton size_t 96638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton GetEnvironmentAsArgs (Args &env); 97238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 98238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton const char * 99238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton GetStandardInputPath () const 100238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 101238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton if (m_input_path.empty()) 102238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton return NULL; 103238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton return m_input_path.c_str(); 104238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 105238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 106238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton void 107238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton SetStandardInputPath (const char *path) 108238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 109238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton if (path && path[0]) 110238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton m_input_path.assign (path); 111238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton else 112238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 113238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton // Make sure we deallocate memory in string... 114238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton std::string tmp; 115238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton tmp.swap (m_input_path); 116238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 117238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 118238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 119238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton const char * 120238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton GetStandardOutputPath () const 121238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 122238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton if (m_output_path.empty()) 123238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton return NULL; 124238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton return m_output_path.c_str(); 125238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 126238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 127238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton void 128238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton SetStandardOutputPath (const char *path) 129238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 130238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton if (path && path[0]) 131238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton m_output_path.assign (path); 132238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton else 133238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 134238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton // Make sure we deallocate memory in string... 135238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton std::string tmp; 136238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton tmp.swap (m_output_path); 137238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 138238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 139238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 140238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton const char * 141238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton GetStandardErrorPath () const 142238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 143238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton if (m_error_path.empty()) 144238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton return NULL; 145238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton return m_error_path.c_str(); 146238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 147238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 148238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton void 149238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton SetStandardErrorPath (const char *path) 150238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 151238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton if (path && path[0]) 152238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton m_error_path.assign (path); 153238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton else 154238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 155238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton // Make sure we deallocate memory in string... 156238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton std::string tmp; 157238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton tmp.swap (m_error_path); 158238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 159238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 160238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 161238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton bool 162238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton GetDisableASLR () const 163238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 164238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton return m_disable_aslr; 165238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 166238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 167238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton void 168238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton SetDisableASLR (bool b) 169238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton { 170238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton m_disable_aslr = b; 171238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton } 172bd666017403e102e0ca435d6da585ff979f83598Caroline Tice 173bd666017403e102e0ca435d6da585ff979f83598Caroline Tice bool 174bd666017403e102e0ca435d6da585ff979f83598Caroline Tice GetDisableSTDIO () const 175bd666017403e102e0ca435d6da585ff979f83598Caroline Tice { 176bd666017403e102e0ca435d6da585ff979f83598Caroline Tice return m_disable_stdio; 177bd666017403e102e0ca435d6da585ff979f83598Caroline Tice } 178bd666017403e102e0ca435d6da585ff979f83598Caroline Tice 179bd666017403e102e0ca435d6da585ff979f83598Caroline Tice void 180bd666017403e102e0ca435d6da585ff979f83598Caroline Tice SetDisableSTDIO (bool b) 181bd666017403e102e0ca435d6da585ff979f83598Caroline Tice { 182bd666017403e102e0ca435d6da585ff979f83598Caroline Tice m_disable_stdio = b; 183bd666017403e102e0ca435d6da585ff979f83598Caroline Tice } 184238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton 1856e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Ticeprotected: 1866e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 1876e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice void 1886e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice CopyInstanceSettings (const lldb::InstanceSettingsSP &new_settings, 1896e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice bool pending); 1906e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 1910021c97fbd17e38113d2e76b93c94ee05213ee45Johnny Chen const ConstString 1926e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice CreateInstanceName (); 1936e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 194c3c24084efb0e1c4734c136532c1e43e9427c912Jim Ingham static const ConstString & 1956e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice RunArgsVarName (); 1966e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 197c3c24084efb0e1c4734c136532c1e43e9427c912Jim Ingham static const ConstString & 1986e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice EnvVarsVarName (); 1996e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 200c3c24084efb0e1c4734c136532c1e43e9427c912Jim Ingham static const ConstString & 201638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton InheritHostEnvVarName (); 202638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton 203638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton static const ConstString & 2046e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice InputPathVarName (); 2056e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 206c3c24084efb0e1c4734c136532c1e43e9427c912Jim Ingham static const ConstString & 2076e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice OutputPathVarName (); 2086e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 209c3c24084efb0e1c4734c136532c1e43e9427c912Jim Ingham static const ConstString & 2106e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice ErrorPathVarName (); 2116e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 212c3c24084efb0e1c4734c136532c1e43e9427c912Jim Ingham static const ConstString & 2136e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice DisableASLRVarName(); 2146e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 215bd666017403e102e0ca435d6da585ff979f83598Caroline Tice static const ConstString & 216bd666017403e102e0ca435d6da585ff979f83598Caroline Tice DisableSTDIOVarName (); 217bd666017403e102e0ca435d6da585ff979f83598Caroline Tice 2186e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Ticeprivate: 2196e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 220238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton typedef std::map<std::string, std::string> dictionary; 2216e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice Args m_run_args; 222238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton dictionary m_env_vars; 2236e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice std::string m_input_path; 2246e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice std::string m_output_path; 2256e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice std::string m_error_path; 2266e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice bool m_disable_aslr; 227bd666017403e102e0ca435d6da585ff979f83598Caroline Tice bool m_disable_stdio; 228638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton bool m_inherit_host_env; 229638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton bool m_got_host_env; 2306e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice}; 2316e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 232b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 233b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// ProcessInfo 234b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// 235b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// A base class for information for a process. This can be used to fill 236b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// out information for a process prior to launching it, or it can be 237b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// used for an instance of a process and can be filled in with the 238b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// existing values for that process. 239b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 240e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Claytonclass ProcessInfo 241e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton{ 242e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Claytonpublic: 243e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton ProcessInfo () : 244ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton m_executable (), 245b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_arguments (), 246b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_environment (), 247b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_uid (LLDB_INVALID_UID), 248b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_gid (LLDB_INVALID_UID), 249e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_arch(), 250b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_pid (LLDB_INVALID_PROCESS_ID) 251e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 252e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 253b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 254e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton ProcessInfo (const char *name, 255e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton const ArchSpec &arch, 256e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton lldb::pid_t pid) : 257b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_executable (name, false), 258b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_arguments (), 259b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_environment(), 260b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_uid (LLDB_INVALID_UID), 261b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_gid (LLDB_INVALID_UID), 262e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_arch (arch), 263b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_pid (pid) 264e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 265e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 266e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 267e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton void 268e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton Clear () 269e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 270ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton m_executable.Clear(); 271b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_arguments.Clear(); 272b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_environment.Clear(); 273b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_uid = LLDB_INVALID_UID; 274b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_gid = LLDB_INVALID_UID; 275e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_arch.Clear(); 276e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_pid = LLDB_INVALID_PROCESS_ID; 277e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 278e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 279e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton const char * 280e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetName() const 281e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 282ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton return m_executable.GetFilename().GetCString(); 283e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 284b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 285e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton size_t 286e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetNameLength() const 287e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 288ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton return m_executable.GetFilename().GetLength(); 289e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 290e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 291e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton void 292e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton SetName (const char *name) 293e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 294ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton m_executable.GetFilename().SetCString (name); 295ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 296ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 297ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton FileSpec & 298ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton GetExecutableFile () 299ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 300ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton return m_executable; 301e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 302b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 303ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton const FileSpec & 304ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton GetExecutableFile () const 30524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 306ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton return m_executable; 30724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 30824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 309a733c04608cc94592a15d27583529588e19db552Greg Clayton uint32_t 310b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetUserID() const 311a733c04608cc94592a15d27583529588e19db552Greg Clayton { 312b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_uid; 313a733c04608cc94592a15d27583529588e19db552Greg Clayton } 314b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 315a733c04608cc94592a15d27583529588e19db552Greg Clayton uint32_t 316b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetGroupID() const 317a733c04608cc94592a15d27583529588e19db552Greg Clayton { 318b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_gid; 319a733c04608cc94592a15d27583529588e19db552Greg Clayton } 32024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 32124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 322b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton UserIDIsValid () const 32324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 324b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_uid != UINT32_MAX; 32524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 32624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 32724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 328b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GroupIDIsValid () const 32924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 330b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_gid != UINT32_MAX; 33124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 33224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 333a733c04608cc94592a15d27583529588e19db552Greg Clayton void 334b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetUserID (uint32_t uid) 335a733c04608cc94592a15d27583529588e19db552Greg Clayton { 336b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_uid = uid; 337a733c04608cc94592a15d27583529588e19db552Greg Clayton } 338a733c04608cc94592a15d27583529588e19db552Greg Clayton 339a733c04608cc94592a15d27583529588e19db552Greg Clayton void 340b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetGroupID (uint32_t gid) 341a733c04608cc94592a15d27583529588e19db552Greg Clayton { 342b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_gid = gid; 343a733c04608cc94592a15d27583529588e19db552Greg Clayton } 344b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 345e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton ArchSpec & 346e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetArchitecture () 347e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 348e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_arch; 349e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 350b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 351e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton const ArchSpec & 352e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetArchitecture () const 353e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 354e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_arch; 355e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 356b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 357e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton lldb::pid_t 358e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetProcessID () const 359e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 360e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_pid; 361e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 362e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 363e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton void 364e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton SetProcessID (lldb::pid_t pid) 365e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 366e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_pid = pid; 367e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 368e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 369a733c04608cc94592a15d27583529588e19db552Greg Clayton bool 370a733c04608cc94592a15d27583529588e19db552Greg Clayton ProcessIDIsValid() const 371a733c04608cc94592a15d27583529588e19db552Greg Clayton { 372a733c04608cc94592a15d27583529588e19db552Greg Clayton return m_pid != LLDB_INVALID_PROCESS_ID; 373a733c04608cc94592a15d27583529588e19db552Greg Clayton } 374b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 375b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 376b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Dump (Stream &s, Platform *platform) const; 377b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 378b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Args & 379b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetArguments () 380b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 381b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_arguments; 382b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 383b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 384b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const Args & 385b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetArguments () const 386b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 387b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_arguments; 388b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 389b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 390b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 391b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetArgumentsFromArgs (const Args& args, 392b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool first_arg_is_executable, 393b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool first_arg_is_executable_and_argument); 394b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 395b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Args & 396b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetEnvironmentEntries () 397b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 398b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_environment; 399b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 400b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 401b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const Args & 402b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetEnvironmentEntries () const 403b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 404b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_environment; 405b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 406b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 407b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonprotected: 408b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileSpec m_executable; 409b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Args m_arguments; 410b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Args m_environment; 411b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t m_uid; 412b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t m_gid; 413b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ArchSpec m_arch; 414b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton lldb::pid_t m_pid; 415b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton}; 416b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 417b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 418b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// ProcessInstanceInfo 419b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// 420b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// Describes an existing process and any discoverable information that 421b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// pertains to that process. 422b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 423b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonclass ProcessInstanceInfo : public ProcessInfo 424b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton{ 425b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonpublic: 426b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfo () : 427b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInfo (), 428b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_euid (UINT32_MAX), 429b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_egid (UINT32_MAX), 430b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_parent_pid (LLDB_INVALID_PROCESS_ID) 431b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 432b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 433b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 434b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfo (const char *name, 435b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const ArchSpec &arch, 436b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton lldb::pid_t pid) : 437b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInfo (name, arch, pid), 438b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_euid (UINT32_MAX), 439b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_egid (UINT32_MAX), 440b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_parent_pid (LLDB_INVALID_PROCESS_ID) 441b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 442b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 443b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 444b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 445b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Clear () 446b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 447b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInfo::Clear(); 448b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_euid = UINT32_MAX; 449b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_egid = UINT32_MAX; 450b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_parent_pid = LLDB_INVALID_PROCESS_ID; 451b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 452b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 453b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t 454b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetEffectiveUserID() const 455b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 456b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_euid; 457b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 458b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 459b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t 460b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetEffectiveGroupID() const 461b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 462b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_egid; 463b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 464b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 465b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool 466b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton EffectiveUserIDIsValid () const 467b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 468b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_euid != UINT32_MAX; 469b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 470b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 471b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool 472b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton EffectiveGroupIDIsValid () const 473b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 474b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_egid != UINT32_MAX; 475b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 476b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 477b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 478b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetEffectiveUserID (uint32_t uid) 479b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 480b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_euid = uid; 481b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 482b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 483b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 484b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetEffectiveGroupID (uint32_t gid) 485b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 486b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_egid = gid; 487b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 488a733c04608cc94592a15d27583529588e19db552Greg Clayton 489a733c04608cc94592a15d27583529588e19db552Greg Clayton lldb::pid_t 490a733c04608cc94592a15d27583529588e19db552Greg Clayton GetParentProcessID () const 491a733c04608cc94592a15d27583529588e19db552Greg Clayton { 492a733c04608cc94592a15d27583529588e19db552Greg Clayton return m_parent_pid; 493a733c04608cc94592a15d27583529588e19db552Greg Clayton } 494a733c04608cc94592a15d27583529588e19db552Greg Clayton 495a733c04608cc94592a15d27583529588e19db552Greg Clayton void 496a733c04608cc94592a15d27583529588e19db552Greg Clayton SetParentProcessID (lldb::pid_t pid) 497a733c04608cc94592a15d27583529588e19db552Greg Clayton { 498a733c04608cc94592a15d27583529588e19db552Greg Clayton m_parent_pid = pid; 499a733c04608cc94592a15d27583529588e19db552Greg Clayton } 500a733c04608cc94592a15d27583529588e19db552Greg Clayton 501a733c04608cc94592a15d27583529588e19db552Greg Clayton bool 502a733c04608cc94592a15d27583529588e19db552Greg Clayton ParentProcessIDIsValid() const 503a733c04608cc94592a15d27583529588e19db552Greg Clayton { 504a733c04608cc94592a15d27583529588e19db552Greg Clayton return m_parent_pid != LLDB_INVALID_PROCESS_ID; 505a733c04608cc94592a15d27583529588e19db552Greg Clayton } 50624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 50724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 50824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton Dump (Stream &s, Platform *platform) const; 50924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 51024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton static void 511b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton DumpTableHeader (Stream &s, Platform *platform, bool show_args, bool verbose); 512b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 513b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 514b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton DumpAsTableRow (Stream &s, Platform *platform, bool show_args, bool verbose) const; 515b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 516b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonprotected: 517b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t m_euid; 518b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t m_egid; 519b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton lldb::pid_t m_parent_pid; 520b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton}; 521b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 522b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 523b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 524b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// ProcessLaunchInfo 525b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// 526b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// Describes any information that is required to launch a process. 527b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 528b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 529b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonclass ProcessLaunchInfo : public ProcessInfo 530b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton{ 531b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonpublic: 532b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 533b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton class FileAction 534b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 535b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton public: 536b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 537b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction () : 538b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_action (eFileActionNone), 539b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_fd (-1), 540b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_arg (-1), 541b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_path () 542b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 543b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 544b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 545b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 546b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Clear() 547b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 548b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_action = eFileActionNone; 549b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_fd = -1; 550b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_arg = -1; 551b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_path.clear(); 552b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 553b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 554b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool 555b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Close (int fd); 556b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 557b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool 558b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Duplicate (int fd, int dup_fd); 559b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 560b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool 561b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Open (int fd, const char *path, bool read, bool write); 562b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 563b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton static bool 564b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AddPosixSpawnFileAction (posix_spawn_file_actions_t *file_actions, 565b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const FileAction *info, 566b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Log *log, 567b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Error& error); 568b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 569b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton protected: 570b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton enum Action 571b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 572b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton eFileActionNone, 573b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton eFileActionClose, 574b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton eFileActionDuplicate, 575b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton eFileActionOpen 576b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton }; 577b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 578b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Action m_action; // The action for this file 579b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton int m_fd; // An existing file descriptor 580b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton int m_arg; // oflag for eFileActionOpen*, dup_fd for eFileActionDuplicate 581b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton std::string m_path; // A file path to use for opening after fork or posix_spawn 582b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton }; 583b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 584b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessLaunchInfo () : 585b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInfo(), 586b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_flags (), 587b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_stdin_info (), 588b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_stdout_info (), 589b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_stderr_info () 590b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 591b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 592b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 593b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 594b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendFileAction (const FileAction &info) 595b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 596b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_file_actions.push_back(info); 597b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 598b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 599b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 600b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendCloseFileAction (int fd) 601b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 602b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction file_action; 603b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton file_action.Close (fd); 604b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendFileAction (file_action); 605b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 606b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 607b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 608b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendDuplciateFileAction (int fd, int dup_fd) 609b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 610b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction file_action; 611b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton file_action.Duplicate (fd, dup_fd); 612b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendFileAction (file_action); 613b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 614b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 615b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 616b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendOpenFileAction (int fd, const char *path, bool read, bool write) 617b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 618b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction file_action; 619b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton file_action.Open (fd, path, read, write); 620b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendFileAction (file_action); 621b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 622b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 623b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 624b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendSuppressFileAction (int fd, bool read, bool write) 625b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 626b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction file_action; 627b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton file_action.Open (fd, "/dev/null", read, write); 628b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendFileAction (file_action); 629b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 630b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 631b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton size_t 632b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetNumFileActions () const 633b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 634b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_file_actions.size(); 635b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 636b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 637b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const FileAction * 638b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetFileActionAtIndex (size_t idx) const 639b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 640b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (idx < m_file_actions.size()) 641b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return &m_file_actions[idx]; 642b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return NULL; 643b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 644b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 645b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Flags & 646b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetFlags () 647b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 648b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_flags; 649b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 650b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 651b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const Flags & 652b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetFlags () const 653b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 654b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_flags; 655b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 656b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 657b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const char * 658b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetWorkingDirectory () const 659b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 660b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (m_working_dir.empty()) 661b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return NULL; 662b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_working_dir.c_str(); 663b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 66424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 66524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 666b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetWorkingDirectory (const char *working_dir) 667b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 668b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (working_dir && working_dir[0]) 669b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_working_dir.assign (working_dir); 670b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton else 671b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_working_dir.clear(); 672b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 673ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 674b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 675b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SwapWorkingDirectory (std::string &working_dir) 676ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 677b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_working_dir.swap (working_dir); 678b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 679b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 680b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 681b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const char * 682b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetProcessPluginName () const 683b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 684b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (m_plugin_name.empty()) 685b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return NULL; 686b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_plugin_name.c_str(); 687b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 688b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 689b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 690b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetProcessPluginName (const char *plugin) 691b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 692b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (plugin && plugin[0]) 693b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_plugin_name.assign (plugin); 694b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton else 695b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_plugin_name.clear(); 696ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 697ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 698b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 699b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Clear () 700ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 701b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInfo::Clear(); 702b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_working_dir.clear(); 703b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_plugin_name.clear(); 704b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_flags.Clear(); 705b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_stdin_info.Clear(); 706b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_stdout_info.Clear(); 707b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_stderr_info.Clear(); 708b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_file_actions.clear(); 709ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 710a733c04608cc94592a15d27583529588e19db552Greg Clayton 711e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Claytonprotected: 712b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton std::string m_working_dir; 713b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton std::string m_plugin_name; 714b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Flags m_flags; // Bitwise OR of bits from lldb::LaunchFlags 715b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction m_stdin_info; // File action for stdin 716b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction m_stdout_info; // File action for stdout 717b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction m_stderr_info; // File action for stderr 718b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton std::vector<FileAction> m_file_actions; // File actions for any other files 719e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton}; 720e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 721b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonclass ProcessLaunchCommandOptions : public Options 72224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton{ 72324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonpublic: 724b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 725b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessLaunchCommandOptions (CommandInterpreter &interpreter) : 726b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Options(interpreter) 727b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 728b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton // Keep default values of all options in one place: ResetOptionValues () 729b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ResetOptionValues (); 730b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 731b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 732b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ~ProcessLaunchCommandOptions () 733b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 734b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 735b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 736b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Error 737b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetOptionValue (int option_idx, const char *option_arg); 738b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 739b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 740b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ResetOptionValues () 741b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 742b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton launch_info.Clear(); 743b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 744b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 745b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const OptionDefinition* 746b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetDefinitions () 747b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 748b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return g_option_table; 749b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 750b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 751b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton // Options table: Required for subclasses of Options. 752b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 753b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton static OptionDefinition g_option_table[]; 754b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 755b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton // Instance variables to hold the values for command options. 756b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 757b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessLaunchInfo launch_info; 758b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton}; 759b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 760b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 761b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// ProcessInstanceInfoMatch 762b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// 763b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// A class to help matching one ProcessInstanceInfo to another. 764b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 765b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 766b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonclass ProcessInstanceInfoMatch 767b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton{ 768b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonpublic: 769b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfoMatch () : 77024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_match_info (), 77124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_name_match_type (lldb_private::eNameMatchIgnore), 77224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_match_all_users (false) 77324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 77424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 77524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 776b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfoMatch (const char *process_name, 77724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton lldb_private::NameMatchType process_name_match_type) : 77824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_match_info (), 77924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_name_match_type (process_name_match_type), 78024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_match_all_users (false) 78124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 78224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_match_info.SetName (process_name); 78324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 78424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 785b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfo & 78624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetProcessInfo () 78724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 78824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_match_info; 78924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 79024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 791b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const ProcessInstanceInfo & 79224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetProcessInfo () const 79324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 79424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_match_info; 79524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 79624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 79724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 79824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetMatchAllUsers () const 79924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 80024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_match_all_users; 80124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 80224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 80324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 80424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton SetMatchAllUsers (bool b) 80524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 80624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_match_all_users = b; 80724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 80824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 80924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton lldb_private::NameMatchType 81024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetNameMatchType () const 81124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 81224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_name_match_type; 81324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 81424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 81524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 81624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton SetNameMatchType (lldb_private::NameMatchType name_match_type) 81724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 81824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_name_match_type = name_match_type; 81924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 82024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 82124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 82224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton NameMatches (const char *process_name) const; 82324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 82424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 825b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Matches (const ProcessInstanceInfo &proc_info) const; 82624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 82724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 82824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton MatchAllProcesses () const; 82924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 83024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton Clear (); 83124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 83224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonprotected: 833b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfo m_match_info; 83424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton lldb_private::NameMatchType m_name_match_type; 83524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool m_match_all_users; 83624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton}; 83724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 838b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonclass ProcessInstanceInfoList 839e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton{ 840e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Claytonpublic: 841b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfoList () : 842e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_infos() 843e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 844e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 845e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 846e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton void 847e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton Clear() 848e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 849e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_infos.clear(); 850e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 851e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 852e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton uint32_t 853e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetSize() 854e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 855e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_infos.size(); 856e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 857e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 858e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton void 859b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Append (const ProcessInstanceInfo &info) 860e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 861e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_infos.push_back (info); 862e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 863e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 864e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton const char * 865e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetProcessNameAtIndex (uint32_t idx) 866e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 867e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton if (idx < m_infos.size()) 868e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_infos[idx].GetName(); 869e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return NULL; 870e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 871e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 872e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton size_t 873e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetProcessNameLengthAtIndex (uint32_t idx) 874e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 875e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton if (idx < m_infos.size()) 876e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_infos[idx].GetNameLength(); 877e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return 0; 878e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 879e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 880e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton lldb::pid_t 881e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetProcessIDAtIndex (uint32_t idx) 882e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 883e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton if (idx < m_infos.size()) 884e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_infos[idx].GetProcessID(); 885e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return NULL; 886e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 887e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 888e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton bool 889b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetInfoAtIndex (uint32_t idx, ProcessInstanceInfo &info) 890e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 891e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton if (idx < m_infos.size()) 892e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 893e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton info = m_infos[idx]; 894e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return true; 895e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 896e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return false; 897e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 898e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 89924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // You must ensure "idx" is valid before calling this function 900b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const ProcessInstanceInfo & 90124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetProcessInfoAtIndex (uint32_t idx) const 90224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 90324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton assert (idx < m_infos.size()); 90424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_infos[idx]; 90524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 90624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 907e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Claytonprotected: 908b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton typedef std::vector<ProcessInstanceInfo> collection; 909e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton collection m_infos; 910e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton}; 911e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 9126e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 91324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 91424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class Process Process.h "lldb/Target/Process.h" 91524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A plug-in interface definition class for debugging a process. 91624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 91724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Process : 91824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public UserID, 91924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public Broadcaster, 92024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public ExecutionContextScope, 9216e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice public PluginInterface, 9226e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice public ProcessInstanceSettings 92324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 92424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerfriend class ThreadList; 925d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Inghamfriend class ClangFunction; // For WaitForStateChangeEventsPrivate 92624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 92724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 92824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 92924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 93024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Broadcaster event bits definitions. 93124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 93224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum 93324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 93424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastBitStateChanged = (1 << 0), 93524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastBitInterrupt = (1 << 1), 93624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastBitSTDOUT = (1 << 2), 937e28824e0b988221c7eedf8e3d212527d2bdac6a7Eli Friedman eBroadcastBitSTDERR = (1 << 3) 93824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 93924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 94024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum 94124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 94224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastInternalStateControlStop = (1<<0), 94324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastInternalStateControlPause = (1<<1), 94424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastInternalStateControlResume = (1<<2) 94524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 946360f53f3c216ee4fb433da0a367168785328a856Jim Ingham 94724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 94824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A notification structure that can be used by clients to listen 94924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// for changes in a process's lifetime. 95024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 95124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see RegisterNotificationCallbacks (const Notifications&) 95224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see UnregisterNotificationCallbacks (const Notifications&) 95324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 95424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef SWIG 95524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef struct 95624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 95724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void *baton; 95824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void (*initialize)(void *baton, Process *process); 95924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void (*process_state_changed) (void *baton, Process *process, lldb::StateType state); 96024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } Notifications; 96124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 96224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner class ProcessEventData : 96324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public EventData 96424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 9653ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham friend class Process; 9663ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham 96724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public: 96824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ProcessEventData (); 96924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ProcessEventData (const lldb::ProcessSP &process, lldb::StateType state); 97024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 97124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual ~ProcessEventData(); 97224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 97324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static const ConstString & 97424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFlavorString (); 97524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 97624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual const ConstString & 97724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFlavor () const; 97824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 97924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb::ProcessSP & 9803ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham GetProcessSP() const 9813ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 9823ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham return m_process_sp; 9833ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 98424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 9853ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham GetState() const 9863ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 9873ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham return m_state; 9883ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 98924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 9903ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham GetRestarted () const 9913ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 9923ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham return m_restarted; 9933ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 9943ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham bool 9953ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham GetInterrupted () const 9963ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 9973ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham return m_interrupted; 9983ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 99924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 100024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 100124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump (Stream *s) const; 100224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 100324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 100424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoOnRemoval (Event *event_ptr); 100524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 100624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static const Process::ProcessEventData * 100724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetEventDataFromEvent (const Event *event_ptr); 100824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 100924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static lldb::ProcessSP 101024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetProcessFromEvent (const Event *event_ptr); 101124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 101224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static lldb::StateType 101324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetStateFromEvent (const Event *event_ptr); 101424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 101524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool 101624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetRestartedFromEvent (const Event *event_ptr); 101724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 101824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void 101924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetRestartedInEvent (Event *event_ptr, bool new_value); 102024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 102124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool 10223ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham GetInterruptedFromEvent (const Event *event_ptr); 10233ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham 10243ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham static void 10253ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham SetInterruptedInEvent (Event *event_ptr, bool new_value); 10263ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham 10273ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham static bool 102824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetUpdateStateOnRemoval (Event *event_ptr); 102924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 103024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner private: 103124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 103224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 10333ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham SetUpdateStateOnRemoval() 10343ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 10353ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham m_update_state = true; 10363ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 103724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 10383ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham SetRestarted (bool new_value) 10393ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 10403ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham m_restarted = new_value; 10413ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 10423ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham void 10433ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham SetInterrupted (bool new_value) 10443ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 10453ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham m_interrupted = new_value; 10463ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 104724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 104824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::ProcessSP m_process_sp; 104924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType m_state; 105024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool m_restarted; // For "eStateStopped" events, this is true if the target was automatically restarted. 105124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool m_update_state; 10523ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham bool m_interrupted; 105324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN (ProcessEventData); 105424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 105524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 10566e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 1057d0a5a23d734da7a2170802ccd096f53b8a527811Greg Clayton class SettingsController : public UserSettingsController 10586e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice { 10596e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice public: 10606e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 1061d0a5a23d734da7a2170802ccd096f53b8a527811Greg Clayton SettingsController (); 10626e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 10636e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice virtual 1064d0a5a23d734da7a2170802ccd096f53b8a527811Greg Clayton ~SettingsController (); 10656e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 10666e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice static SettingEntry global_settings_table[]; 10676e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice static SettingEntry instance_settings_table[]; 10686e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 10696e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice protected: 10706e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 10716e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice lldb::InstanceSettingsSP 1072d0a5a23d734da7a2170802ccd096f53b8a527811Greg Clayton CreateInstanceSettings (const char *instance_name); 10736e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 10746e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice private: 10756e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 10766e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice // Class-wide settings. 10776e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 1078d0a5a23d734da7a2170802ccd096f53b8a527811Greg Clayton DISALLOW_COPY_AND_ASSIGN (SettingsController); 10796e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice }; 10806e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 108124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif 108224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1083990de7bb41d3afec6b789155408ff322187d8682Greg Clayton static void 10842a456816c5d7c575f2e141acd48bb5f8085d9910Caroline Tice SettingsInitialize (); 1085990de7bb41d3afec6b789155408ff322187d8682Greg Clayton 1086990de7bb41d3afec6b789155408ff322187d8682Greg Clayton static void 10872a456816c5d7c575f2e141acd48bb5f8085d9910Caroline Tice SettingsTerminate (); 1088990de7bb41d3afec6b789155408ff322187d8682Greg Clayton 1089990de7bb41d3afec6b789155408ff322187d8682Greg Clayton static lldb::UserSettingsControllerSP & 1090990de7bb41d3afec6b789155408ff322187d8682Greg Clayton GetSettingsController (); 10916e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 10921ebef44c126bd3a615b3ad844c46a82a82efa0e7Caroline Tice void 10931ebef44c126bd3a615b3ad844c46a82a82efa0e7Caroline Tice UpdateInstanceName (); 10941ebef44c126bd3a615b3ad844c46a82a82efa0e7Caroline Tice 1095395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton 109624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 109724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with a shared pointer to a target, and the Process listener. 109824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 109924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Process(Target &target, Listener &listener); 110024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 110124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 110224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Destructor. 110324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 110424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The destructor is virtual since this class is designed to be 110524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// inherited from by the plug-in instance. 110624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 110724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 110824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~Process(); 110924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 111024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 111124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find a Process plug-in that can debug \a module using the 111224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// currently selected architecture. 111324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 111424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Scans all loaded plug-in interfaces that implement versions of 111524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the Process plug-in interface and returns the first instance 111624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// that can debug the file. 111724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 111824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] module_sp 111924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The module shared pointer that this process will debug. 112024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 112124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] plugin_name 112224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If NULL, select the best plug-in for the binary. If non-NULL 112324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// then look for a plugin whose PluginInfo's name matches 112424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// this string. 112524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 112624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Process::CanDebug () 112724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 112824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static Process* 112924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FindPlugin (Target &target, const char *plugin_name, Listener &listener); 113024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 113124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 113224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 113324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 113424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Static function that can be used with the \b host function 113524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Host::StartMonitoringChildProcess (). 113624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 113724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function can be used by lldb_private::Process subclasses 113824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// when they want to watch for a local process and have its exit 113924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// status automatically set when the host child process exits. 114024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Subclasses should call Host::StartMonitoringChildProcess () 114124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// with: 114224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// callback = Process::SetHostProcessExitStatus 114324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// callback_baton = NULL 114424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// pid = Process::GetID() 114524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// monitor_signals = false 114624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 114724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool 114824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetProcessExitStatus (void *callback_baton, // The callback baton which should be set to NULL 114924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::pid_t pid, // The process ID we want to monitor 115024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int signo, // Zero for no signal 115124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int status); // Exit value of process if signal is zero 115224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1153395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton lldb::ByteOrder 1154395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetByteOrder () const; 1155395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton 1156395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton uint32_t 1157395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetAddressByteSize () const; 1158395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton 115924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 116024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Check if a plug-in instance can debug the file in \a module. 116124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1162fe424a92fc6fd92f810d243912461fe028a2b63cGreg Clayton /// Each plug-in is given a chance to say whether it can debug 116324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the file in \a module. If the Process plug-in instance can 116424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// debug a file on the current system, it should return \b true. 116524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 116624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 116724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if this Process plug-in instance can 116824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// debug the executable, \b false otherwise. 116924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 117024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 117124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CanDebug (Target &target) = 0; 117224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 117324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 117424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 117524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This object is about to be destroyed, do any necessary cleanup. 117624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 117724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Subclasses that override this method should always call this 117824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// superclass method. 117924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 118024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 118124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Finalize(); 118224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 118324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 118424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Launch a new process. 118524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 118624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Launch a new process by spawning a new process using the 118724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// target object's executable module's file as the file to launch. 118824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Arguments are given in \a argv, and the environment variables 118924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// are in \a envp. Standard input and output files can be 119024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// optionally re-directed to \a stdin_path, \a stdout_path, and 119124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a stderr_path. 119224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 119324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 119424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. It will first call Process::WillLaunch (Module *) 119524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// and if that returns \b true, Process::DoLaunch (Module*, 119624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// char const *[],char const *[],const char *,const char *, 119724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// const char *) will be called to actually do the launching. If 119824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// DoLaunch returns \b true, then Process::DidLaunch() will be 119924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// called. 120024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 120124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] argv 120224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The argument array. 120324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 120424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] envp 120524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The environment array. 120624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1207452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// @param[in] launch_flags 1208452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// Flags to modify the launch (@see lldb::LaunchFlags) 1209452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// 121024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stdin_path 121124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDIN of the new 121224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 121324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 121424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 121524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stdout_path 121624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDOUT of the new 121724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 121824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 121924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 122024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stderr_path 122124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDERR of the new 122224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 122324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 122424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1225de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// @param[in] working_directory 1226de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// The working directory to have the child process run in 1227de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// 122824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 122924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// An error object. Call GetID() to get the process ID if 123024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the error object is success. 123124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 123224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 123324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Launch (char const *argv[], 123424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner char const *envp[], 1235452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton uint32_t launch_flags, 123624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *stdin_path, 123724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *stdout_path, 1238de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton const char *stderr_path, 1239de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton const char *working_directory); 124024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 124124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 124224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Attach to an existing process using a process ID. 124324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 124424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 124524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. It will first call Process::WillAttach (lldb::pid_t) 124624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// and if that returns \b true, Process::DoAttach (lldb::pid_t) will 124724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be called to actually do the attach. If DoAttach returns \b 124824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// true, then Process::DidAttach() will be called. 124924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 125024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] pid 125124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The process ID that we should attempt to attach to. 125224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 125324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 125424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \a pid if attaching was successful, or 125524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_PROCESS_ID if attaching fails. 125624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 125724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 125824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Attach (lldb::pid_t pid); 125924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 126024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 126124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Attach to an existing process by process name. 126224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 126324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 126424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. It will first call 126524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Process::WillAttach (const char *) and if that returns \b 126624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// true, Process::DoAttach (const char *) will be called to 126724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// actually do the attach. If DoAttach returns \b true, then 126824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Process::DidAttach() will be called. 126924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 127024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] process_name 127124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A process name to match against the current process list. 127224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 127324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 127424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \a pid if attaching was successful, or 127524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_PROCESS_ID if attaching fails. 127624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 127724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 127824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Attach (const char *process_name, bool wait_for_launch); 12797508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham 1280e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton virtual Error 1281e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton ConnectRemote (const char *remote_url); 12827508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham //------------------------------------------------------------------ 12837508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// List the processes matching the given partial name. 12847508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 12857508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// FIXME: Is it too heavyweight to create an entire process object to do this? 12867508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// The problem is for remote processes we're going to have to set up the same transport 12877508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// to get this data as to actually attach. So we need to factor out transport 12887508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// and process before we can do this separately from the process. 12897508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 12907508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// @param[in] name 12917508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// A partial name to match against the current process list. 12927508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 12937508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// @param[out] matches 12947508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// The list of process names matching \a name. 12957508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 12967508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// @param[in] pids 12977508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// A vector filled with the pids that correspond to the names in \a matches. 12987508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 12997508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// @return 13007508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// Returns the number of matching processes. 13017508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham //------------------------------------------------------------------ 13027508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham 1303e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// virtual uint32_t 1304e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// ListProcessesMatchingName (const char *name, StringList &matches, std::vector<lldb::pid_t> &pids); 13057508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham 13067508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham //------------------------------------------------------------------ 13077508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// Find the architecture of a process by pid. 13087508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 13097508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// FIXME: See comment for ListProcessesMatchingName. 13107508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 13117508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// @param[in] pid 13127508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// A pid to inspect. 13137508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 13147508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// @return 13157508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// Returns the architecture of the process or an invalid architecture if the process can't be found. 13167508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham //------------------------------------------------------------------ 1317e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// virtual ArchSpec 1318e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// GetArchSpecForExistingProcess (lldb::pid_t pid); 13197508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham 13207508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham //------------------------------------------------------------------ 13217508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// Find the architecture of a process by name. 13227508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 13237508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// FIXME: See comment for ListProcessesMatchingName. 13247508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 13257508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// @param[in] process_name 13267508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// The process name to inspect. 13277508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// 13287508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// @return 13297508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham /// Returns the architecture of the process or an invalid architecture if the process can't be found. 13307508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham //------------------------------------------------------------------ 1331e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// virtual ArchSpec 1332e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// GetArchSpecForExistingProcess (const char *process_name); 133324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 133424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 133524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the image information address for the current process. 133624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 133724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Some runtimes have system functions that can help dynamic 133824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// loaders locate the dynamic loader information needed to observe 133924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// shared libraries being loaded or unloaded. This function is 134024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// in the Process interface (as opposed to the DynamicLoader 134124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// interface) to ensure that remote debugging can take advantage of 134224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// this functionality. 134324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 134424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 134524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The address of the dynamic loader information, or 134624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_ADDRESS if this is not supported by this 134724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// interface. 134824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 134924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual lldb::addr_t 135024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetImageInfoAddress (); 135124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 135224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 13530baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// Load a shared library into this process. 13540baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// 13550baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// Try and load a shared library into the current process. This 13560baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// call might fail in the dynamic loader plug-in says it isn't safe 13570baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// to try and load shared libraries at the moment. 13580baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// 13590baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// @param[in] image_spec 13600baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// The image file spec that points to the shared library that 13610baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// you want to load. 13620baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// 13630baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// @param[out] error 13640baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// An error object that gets filled in with any errors that 13650baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// might occur when trying to load the shared library. 13660baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// 13670baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// @return 13680baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// A token that represents the shared library that can be 13690baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// later used to unload the shared library. A value of 13700baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// LLDB_INVALID_IMAGE_TOKEN will be returned if the shared 13710baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// library can't be opened. 13720baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton //------------------------------------------------------------------ 13730baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton virtual uint32_t 13740baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton LoadImage (const FileSpec &image_spec, Error &error); 13750baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton 13760baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton virtual Error 13770baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton UnloadImage (uint32_t image_token); 13780baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton 13790baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton //------------------------------------------------------------------ 138024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Register for process and thread notifications. 138124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 138224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Clients can register nofication callbacks by filling out a 138324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Process::Notifications structure and calling this function. 138424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 138524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] callbacks 138624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A structure that contains the notification baton and 138724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// callback functions. 138824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 138924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Process::Notifications 139024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 139124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef SWIG 139224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 139324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RegisterNotificationCallbacks (const Process::Notifications& callbacks); 139424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif 139524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 139624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Unregister for process and thread notifications. 139724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 139824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Clients can unregister nofication callbacks by passing a copy of 139924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the original baton and callbacks in \a callbacks. 140024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 140124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] callbacks 140224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A structure that contains the notification baton and 140324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// callback functions. 140424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 140524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 140624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the notification callbacks were 140724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// successfully removed from the process, \b false otherwise. 140824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 140924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Process::Notifications 141024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 141124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef SWIG 141224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 141324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner UnregisterNotificationCallbacks (const Process::Notifications& callbacks); 141424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif 141524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //================================================================== 141624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Built in Process Control functions 141724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //================================================================== 141824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 141924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Resumes all of a process's threads as configured using the 142024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Thread run control functions. 142124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 142224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Threads for a process should be updated with one of the run 142324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// control actions (resume, step, or suspend) that they should take 142424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// when the process is resumed. If no run control action is given 142524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// to a thread it will be resumed by default. 142624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 142724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 142824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. This function will take care of disabling any 142924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// breakpoints that threads may be stopped at, single stepping, and 143024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// re-enabling breakpoints, and enabling the basic flow control 143124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// that the plug-in instances need not worry about. 143224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 143324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 143424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 143524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 143624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Resume() 143724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Step() 143824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Suspend() 143924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14403ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham Error 144124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Resume (); 144224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 144324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 144424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Halts a running process. 144524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 144624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 144724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. 14483ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// If the process is successfully halted, a eStateStopped 14493ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// process event with GetInterrupted will be broadcast. If false, we will 14503ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// halt the process with no events generated by the halt. 145124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 145224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 14533ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// Returns an error object. If the error is empty, the process is halted. 14543ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// otherwise the halt has failed. 145524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14563ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham Error 145724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Halt (); 145824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 145924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 146024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Detaches from a running or stopped process. 146124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 146224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 146324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. 146424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 146524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 146624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 146724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14683ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham Error 146924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Detach (); 147024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 147124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 147224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Kills the process and shuts down all threads that were spawned 147324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// to track and monitor the process. 147424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 147524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 147624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. 147724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 147824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 147924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 148024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14813ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham Error 148224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Destroy(); 148324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 148424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 148524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Sends a process a UNIX signal \a signal. 148624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 148724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 148824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. 148924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 149024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 149124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 149224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 14933ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham Error 149424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Signal (int signal); 149524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 149624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual UnixSignals & 1497395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetUnixSignals () 1498395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 1499395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return m_unix_signals; 1500395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 150124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 150224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //================================================================== 150324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Plug-in Process Control Overrides 150424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //================================================================== 150524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 150624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 150724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before attaching to a process. 150824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 150924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before attaching a 151024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. 151124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 151224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 151324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 151424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 151524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 151654e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton WillAttachToProcessWithID (lldb::pid_t pid) 151724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 151824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return Error(); 151924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 152024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 152124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 152224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before attaching to a process. 152324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 152424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before attaching a 152524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. 152624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 152724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 152824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 152924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 153024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 153154e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton WillAttachToProcessWithName (const char *process_name, bool wait_for_launch) 153224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 153324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return Error(); 153424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 153524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1536e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton virtual Error 1537e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton DoConnectRemote (const char *remote_url) 1538e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton { 1539e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton Error error; 1540e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton error.SetErrorString ("remote connections are not supported"); 1541e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton return error; 1542e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton } 1543e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton 154424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 154524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Attach to an existing process using a process ID. 154624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 154724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] pid 154824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The process ID that we should attempt to attach to. 154924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 155024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 155124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \a pid if attaching was successful, or 155224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_PROCESS_ID if attaching fails. 155324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 155424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 155554e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton DoAttachToProcessWithID (lldb::pid_t pid) = 0; 155624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 155724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 155824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Attach to an existing process using a partial process name. 155924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 156024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] process_name 156124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The name of the process to attach to. 156224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 156324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] wait_for_launch 156424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \b true, wait for the process to be launched and attach 156524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// as soon as possible after it does launch. If \b false, then 156624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// search for a matching process the currently exists. 156724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 156824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 156924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \a pid if attaching was successful, or 157024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_PROCESS_ID if attaching fails. 157124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 157224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 157354e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton DoAttachToProcessWithName (const char *process_name, bool wait_for_launch) 157424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 157524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error error; 157624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner error.SetErrorString("attach by name is not supported"); 157724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return error; 157824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 157924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 158024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 158124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after attaching a process. 158224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 158324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after attaching to 158424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a process. 158524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 158624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 158724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidAttach () {} 158824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 158924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 159024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 159124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before launching to a process. 159224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 159324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before launching a 159424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. 159524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 159624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 159724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 159824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 159924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 160024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillLaunch (Module* module) 160124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 160224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return Error(); 160324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 160424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 160524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 160624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Launch a new process. 160724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 160824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Launch a new process by spawning a new process using \a module's 160924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// file as the file to launch. Arguments are given in \a argv, 161024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// and the environment variables are in \a envp. Standard input 161124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// and output files can be optionally re-directed to \a stdin_path, 161224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a stdout_path, and \a stderr_path. 161324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 161424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] module 161524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The module from which to extract the file specification and 161624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// launch. 161724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 161824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] argv 161924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The argument array. 162024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 162124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] envp 162224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The environment array. 162324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1624452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// @param[in] launch_flags 1625452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// Flags to modify the launch (@see lldb::LaunchFlags) 1626452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// 162724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stdin_path 162824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDIN of the new 162924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 163024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 163124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 163224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stdout_path 163324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDOUT of the new 163424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 163524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 163624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 163724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stderr_path 163824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDERR of the new 163924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 164024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 164124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1642de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// @param[in] working_directory 1643de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// The working directory to have the child process run in 1644de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// 164524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 164624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A new valid process ID, or LLDB_INVALID_PROCESS_ID if 164724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// launching fails. 164824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 164924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 165024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoLaunch (Module* module, 165124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner char const *argv[], 165224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner char const *envp[], 1653452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton uint32_t launch_flags, 165424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *stdin_path, 165524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *stdout_path, 1656de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton const char *stderr_path, 1657de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton const char *working_directory) = 0; 165824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 165924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 166024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after launching a process. 166124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 166224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after launching 166324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a process. 166424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 166524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 166624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidLaunch () {} 166724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 166824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 166924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 167024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 167124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before resuming to a process. 167224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 167324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before resuming a 167424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. 167524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 167624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 167724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 167824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 167924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 168024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillResume () { return Error(); } 168124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 168224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 168324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Resumes all of a process's threads as configured using the 168424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Thread run control functions. 168524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 168624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Threads for a process should be updated with one of the run 168724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// control actions (resume, step, or suspend) that they should take 168824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// when the process is resumed. If no run control action is given 168924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// to a thread it will be resumed by default. 169024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 169124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 169224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the process successfully resumes using 169324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the thread run control actions, \b false otherwise. 169424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 169524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Resume() 169624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Step() 169724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Suspend() 169824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 169924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 170024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoResume () = 0; 170124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 170224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 170324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after resuming a process. 170424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 170524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after resuming 170624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a process. 170724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 170824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 170924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidResume () {} 171024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 171124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 171224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 171324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before halting to a process. 171424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 171524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before halting a 171624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. 171724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 171824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 171924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 172024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 172124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 172224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillHalt () { return Error(); } 172324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 172424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 172524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Halts a running process. 172624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1727360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// DoHalt must produce one and only one stop StateChanged event if it actually 1728360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// stops the process. If the stop happens through some natural event (for 1729360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// instance a SIGSTOP), then forwarding that event will do. Otherwise, you must 1730360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// generate the event manually. Note also, the private event thread is stopped when 1731360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// DoHalt is run to prevent the events generated while halting to trigger 1732360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// other state changes before the halt is complete. 17333ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// 17343ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// @param[out] caused_stop 173520d338fad87eba91de65aa9bec76e01c04472848Greg Clayton /// If true, then this Halt caused the stop, otherwise, the 173620d338fad87eba91de65aa9bec76e01c04472848Greg Clayton /// process was already stopped. 17373ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// 173824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 173924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the process successfully halts, \b false 174024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// otherwise. 174124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 174224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 17433ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham DoHalt (bool &caused_stop) = 0; 174424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 174524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 174624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after halting a process. 174724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 174824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after halting 174924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a process. 175024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 175124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 175224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidHalt () {} 175324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 175424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 175524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before detaching from a process. 175624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 175724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before detaching 175824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// from a process. 175924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 176024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 176124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 176224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 176324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 176424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillDetach () 176524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 176624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return Error(); 176724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 176824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 176924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 177024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Detaches from a running or stopped process. 177124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 177224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 177324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the process successfully detaches, \b 177424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// false otherwise. 177524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 177624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 177724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoDetach () = 0; 177824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 177924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 178024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after detaching from a process. 178124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 178224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after detaching 178324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// from a process. 178424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 178524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 178624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidDetach () {} 178724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 178824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 178924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before sending a signal to a process. 179024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 179124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before sending a 179224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// signal to a process. 179324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 179424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 179524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns no error if it is safe to proceed with a call to 179624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Process::DoSignal(int), otherwise an error describing what 179724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// prevents the signal from being sent. 179824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 179924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 180024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillSignal () { return Error(); } 180124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 180224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 180324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Sends a process a UNIX signal \a signal. 180424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 180524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 180624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 180724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 180824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 180924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoSignal (int signal) = 0; 181024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 181124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 181224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 181324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 181424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillDestroy () { return Error(); } 181524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 181624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 181724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoDestroy () = 0; 181824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 181924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 182024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidDestroy () { } 182124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 182224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 182324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 182424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after sending a signal to a process. 182524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 182624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after sending a 182724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// signal to a process. 182824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 182924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 183024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidSignal () {} 183124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 183224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 183324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 183424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Currently called as part of ShouldStop. 183524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// FIXME: Should really happen when the target stops before the 183624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// event is taken from the queue... 183724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 183824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This callback is called as the event 183924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// is about to be queued up to allow Process plug-ins to execute 184024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// some code prior to clients being notified that a process was 184124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// stopped. Common operations include updating the thread list, 184224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// invalidating any thread state (registers, stack, etc) prior to 184324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// letting the notification go out. 184424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 184524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 184624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 184724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RefreshStateAfterStop () = 0; 184824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 184924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 185024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the target object pointer for this module. 185124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 185224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 185324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A Target object pointer to the target that owns this 185424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// module. 185524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 185624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Target & 1857395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetTarget () 1858395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 1859395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return m_target; 1860395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 186124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 186224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 186324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the const target object pointer for this module. 186424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 186524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 186624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const Target object pointer to the target that owns this 186724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// module. 186824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 186924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Target & 1870395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetTarget () const 1871395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 1872395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return m_target; 1873395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 1874395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton 187524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 187624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 187724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the current process state. 187824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 187924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 188024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The current state of the process. 188124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 188224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see lldb::StateType 188324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 188424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 188524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetState (); 1886360f53f3c216ee4fb433da0a367168785328a856Jim Ingham 1887b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton ExecutionResults 1888360f53f3c216ee4fb433da0a367168785328a856Jim Ingham RunThreadPlan (ExecutionContext &exe_ctx, 1889360f53f3c216ee4fb433da0a367168785328a856Jim Ingham lldb::ThreadPlanSP &thread_plan_sp, 1890360f53f3c216ee4fb433da0a367168785328a856Jim Ingham bool stop_others, 1891360f53f3c216ee4fb433da0a367168785328a856Jim Ingham bool try_all_threads, 1892360f53f3c216ee4fb433da0a367168785328a856Jim Ingham bool discard_on_error, 1893360f53f3c216ee4fb433da0a367168785328a856Jim Ingham uint32_t single_thread_timeout_usec, 1894360f53f3c216ee4fb433da0a367168785328a856Jim Ingham Stream &errors); 1895360f53f3c216ee4fb433da0a367168785328a856Jim Ingham 1896360f53f3c216ee4fb433da0a367168785328a856Jim Ingham static const char * 1897b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton ExecutionResultAsCString (ExecutionResults result); 189824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 189924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 190024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class CommandObjectProcessLaunch; 190124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class ProcessEventData; 190224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class CommandObjectBreakpointCommand; 190324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 190424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 190524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetState (lldb::EventSP &event_sp); 190624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 190724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 190824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetPrivateState (); 190924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 191075c703dd8b492bad25a987b96853626641ae7246Greg Clayton //------------------------------------------------------------------ 191175c703dd8b492bad25a987b96853626641ae7246Greg Clayton // Called internally 191275c703dd8b492bad25a987b96853626641ae7246Greg Clayton //------------------------------------------------------------------ 191375c703dd8b492bad25a987b96853626641ae7246Greg Clayton void 191475c703dd8b492bad25a987b96853626641ae7246Greg Clayton CompleteAttach (); 191575c703dd8b492bad25a987b96853626641ae7246Greg Clayton 191624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 191724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 191824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the exit status for a process. 191924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 192024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 192124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The process's return code, or -1 if the current process 192224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// state is not eStateExited. 192324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 192424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int 192524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetExitStatus (); 192624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 192724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 192824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get a textual description of what the process exited. 192924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 193024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 193124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The textual description of why the process exited, or NULL 193224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// if there is no description available. 193324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 193424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * 193524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetExitDescription (); 193624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 193724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 193824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 193924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidExit () 194024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 194124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 194224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 194324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 194424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the number of times this process has posted a stop event. 194524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 194624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 194724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of times this process has stopped while being 194824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// debugged. 194924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 195024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 195124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetStopID () const; 195224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 195324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 195424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Set accessor for the process exit status (return code). 195524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 195624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Sometimes a child exits and the exit can be detected by global 195724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// functions (signal handler for SIGCHLD for example). This 195824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// accessor allows the exit status to be set from an external 195924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// source. 196024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 196124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Setting this will cause a eStateExited event to be posted to 196224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the process event queue. 196324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 196424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] exit_status 196524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The value for the process's return code. 196624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 196724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see lldb::StateType 196824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 196972e1c782ba1e4226da37af4722af608de9f39408Greg Clayton virtual bool 197024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetExitStatus (int exit_status, const char *cstr); 197124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 197224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 197324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Check if a process is still alive. 197424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 197524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 197624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the process is still valid, \b false 197724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// otherwise. 197824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 197924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 198024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsAlive () = 0; 198124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 198224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 198324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Actually do the reading of memory from a process. 198424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 198524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Subclasses must override this function and can return fewer 198624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// bytes than requested when memory requests are too large. This 198724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// class will break up the memory requests and keep advancing the 198824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// arguments along as needed. 198924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 199024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] vm_addr 199124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A virtual load address that indicates where to start reading 199224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// memory from. 199324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 199424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 199524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes to read. 199624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 199724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf 199824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A byte buffer that is at least \a size bytes long that 199924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// will receive the memory bytes. 200024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 200124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 200224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that were actually read into \a buf. 200324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 200424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 200524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoReadMemory (lldb::addr_t vm_addr, 200624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void *buf, 200724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t size, 200824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error &error) = 0; 200924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 201024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 201124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Read of memory from a process. 201224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 201324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will read memory from the current process's 201424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// address space and remove any traps that may have been inserted 201524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// into the memory. 201624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 201724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 201824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses, the subclasses should implement 201924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Process::DoReadMemory (lldb::addr_t, size_t, void *). 202024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 202124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] vm_addr 202224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A virtual load address that indicates where to start reading 202324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// memory from. 202424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 202524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf 202624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A byte buffer that is at least \a size bytes long that 202724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// will receive the memory bytes. 202824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 202924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 203024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes to read. 203124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 203224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 203324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that were actually read into \a buf. If 203424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the returned number is greater than zero, yet less than \a 203524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// size, then this function will get called again with \a 203624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// vm_addr, \a buf, and \a size updated appropriately. Zero is 203724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// returned to indicate an error. 203824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 203924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 204024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ReadMemory (lldb::addr_t vm_addr, 204124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void *buf, 204224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t size, 204324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error &error); 204424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2045b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton //------------------------------------------------------------------ 2046b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// Read a NULL terminated C string from memory 2047b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// 2048b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// This function will read a cache page at a time until the NULL 2049b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// C stirng terminator is found. It will stop reading if the NULL 2050b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// termination byte isn't found before reading \a cstr_max_len 2051b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// bytes, and the results are always guaranteed to be NULL 2052b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// terminated (at most cstr_max_len - 1 bytes will be read). 2053b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton //------------------------------------------------------------------ 2054b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton size_t 2055b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ReadCStringFromMemory (lldb::addr_t vm_addr, 2056b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton char *cstr, 2057b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton size_t cstr_max_len); 2058b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 2059fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton size_t 2060fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton ReadMemoryFromInferior (lldb::addr_t vm_addr, 2061fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton void *buf, 2062fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton size_t size, 2063fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton Error &error); 2064fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton 20656d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton //------------------------------------------------------------------ 20666d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// Reads an unsigned integer of the specified byte size from 20676d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// process memory. 20686d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// 20696d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// @param[in] load_addr 20706d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// A load address of the integer to read. 20716d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// 20726d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// @param[in] byte_size 20736d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// The size in byte of the integer to read. 20746d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// 20756d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// @param[out] error 20766d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// An error that indicates the success or failure of this 20776d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// operation. If error indicates success (error.Success()), 20786d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// then the value returned can be trusted, otherwise zero 20796d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// will be returned. 20806d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// 20816d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// @return 20826d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// The unsigned integer that was read from the process memory 20836d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// space. If the integer was smaller than a uint64_t, any 20846d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// unused upper bytes will be zero filled. If the process 20856d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// byte order differs from the host byte order, the integer 20866d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// value will be appropriately byte swapped into host byte 20876d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// order. 20886d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton //------------------------------------------------------------------ 2089f72fdeee129bbd7195f3db888b561ede689886aaGreg Clayton uint64_t 20906d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton ReadUnsignedInteger (lldb::addr_t load_addr, 20916d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton size_t byte_size, 2092f72fdeee129bbd7195f3db888b561ede689886aaGreg Clayton Error &error); 209324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 209424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Actually do the writing of memory to a process. 209524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 209624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] vm_addr 209724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A virtual load address that indicates where to start writing 209824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// memory to. 209924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 210024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] buf 210124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A byte buffer that is at least \a size bytes long that 210224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// contains the data to write. 210324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 210424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 210524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes to write. 210624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 210724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 210824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that were actually written. 210924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 211024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 211124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoWriteMemory (lldb::addr_t vm_addr, const void *buf, size_t size, Error &error) = 0; 211224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 211324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 211424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Write memory to a process. 211524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 211624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will write memory to the current process's 211724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// address space and maintain any traps that might be present due 211824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// to software breakpoints. 211924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 212024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 212124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses, the subclasses should implement 212224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Process::DoWriteMemory (lldb::addr_t, size_t, void *). 212324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 212424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] vm_addr 212524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A virtual load address that indicates where to start writing 212624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// memory to. 212724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 212824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] buf 212924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A byte buffer that is at least \a size bytes long that 213024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// contains the data to write. 213124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 213224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 213324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes to write. 213424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 213524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 213624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that were actually written. 213724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 213824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 213924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WriteMemory (lldb::addr_t vm_addr, const void *buf, size_t size, Error &error); 214024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 214124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 214224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 214324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Actually allocate memory in the process. 214424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 214524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will allocate memory in the process's address 214624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// space. This can't rely on the generic function calling mechanism, 214724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// since that requires this function. 214824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 214924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 215024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The size of the allocation requested. 215124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 215224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 215324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The address of the allocated buffer in the process, or 215424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_ADDRESS if the allocation failed. 215524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 215624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 215724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual lldb::addr_t 215824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoAllocateMemory (size_t size, uint32_t permissions, Error &error) = 0; 215924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 216024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 216124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The public interface to allocating memory in the process. 216224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 216324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will allocate memory in the process's address 216424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// space. This can't rely on the generic function calling mechanism, 216524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// since that requires this function. 216624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 216724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 216824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The size of the allocation requested. 216924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 217024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] permissions 217124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Or together any of the lldb::Permissions bits. The permissions on 217224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a given memory allocation can't be changed after allocation. Note 217324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// that a block that isn't set writable can still be written on from lldb, 217424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// just not by the process itself. 217524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 217624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 217724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The address of the allocated buffer in the process, or 217824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_ADDRESS if the allocation failed. 217924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 218024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 218124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t 218224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner AllocateMemory (size_t size, uint32_t permissions, Error &error); 218324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 218424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 218524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Actually deallocate memory in the process. 218624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 218724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will deallocate memory in the process's address 218824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// space that was allocated with AllocateMemory. 218924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 219024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] ptr 219124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A return value from AllocateMemory, pointing to the memory you 219224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// want to deallocate. 219324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 219424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 219524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \btrue if the memory was deallocated, \bfalse otherwise. 219624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 219724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 219824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 219924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoDeallocateMemory (lldb::addr_t ptr) = 0; 220024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 220124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 220224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The public interface to deallocating memory in the process. 220324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 220424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will deallocate memory in the process's address 220524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// space that was allocated with AllocateMemory. 220624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 220724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] ptr 220824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A return value from AllocateMemory, pointing to the memory you 220924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// want to deallocate. 221024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 221124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 221224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \btrue if the memory was deallocated, \bfalse otherwise. 221324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 221424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 221524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error 221624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DeallocateMemory (lldb::addr_t ptr); 221724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 221824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 221924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get any available STDOUT. 222024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 222124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the process was launched without supplying valid file paths 222224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// for stdin, stdout, and stderr, then the Process class might 222324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// try to cache the STDOUT for the process if it is able. Events 222424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// will be queued indicating that there is STDOUT available that 222524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// can be retrieved using this function. 222624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 222724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf 222824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A buffer that will receive any STDOUT bytes that are 222924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// currently available. 223024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 223124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf_size 223224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The size in bytes for the buffer \a buf. 223324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 223424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 223524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes written into \a buf. If this value is 223624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// equal to \a buf_size, another call to this function should 223724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be made to retrieve more STDOUT data. 223824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 223924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 224024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSTDOUT (char *buf, size_t buf_size, Error &error) 224124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 224224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner error.SetErrorString("stdout unsupported"); 224324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return 0; 224424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 224524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 224624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 224724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 224824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get any available STDERR. 224924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 225024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the process was launched without supplying valid file paths 225124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// for stdin, stdout, and stderr, then the Process class might 225224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// try to cache the STDERR for the process if it is able. Events 225324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// will be queued indicating that there is STDERR available that 225424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// can be retrieved using this function. 225524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 225624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf 225724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A buffer that will receive any STDERR bytes that are 225824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// currently available. 225924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 226024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf_size 226124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The size in bytes for the buffer \a buf. 226224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 226324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 226424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes written into \a buf. If this value is 226524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// equal to \a buf_size, another call to this function should 226624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be made to retrieve more STDERR data. 226724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 226824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 226924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSTDERR (char *buf, size_t buf_size, Error &error) 227024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 227124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner error.SetErrorString("stderr unsupported"); 227224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return 0; 227324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 227424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 227524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 227624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner PutSTDIN (const char *buf, size_t buf_size, Error &error) 227724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 227824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner error.SetErrorString("stdin unsupported"); 227924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return 0; 228024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 228124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 228224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //---------------------------------------------------------------------- 228324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Process Breakpoints 228424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //---------------------------------------------------------------------- 2285b1888f24fa181489840b9acf193e224d125d0776Greg Clayton size_t 2286b1888f24fa181489840b9acf193e224d125d0776Greg Clayton GetSoftwareBreakpointTrapOpcode (BreakpointSite* bp_site); 228724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 228824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 228924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner EnableBreakpoint (BreakpointSite *bp_site) = 0; 229024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 229124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 229224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DisableBreakpoint (BreakpointSite *bp_site) = 0; 229324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 229424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // This is implemented completely using the lldb::Process API. Subclasses 229524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // don't need to implement this function unless the standard flow of 229624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // read existing opcode, write breakpoint opcode, verify breakpoint opcode 229724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // doesn't work for a specific process plug-in. 229824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 229924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner EnableSoftwareBreakpoint (BreakpointSite *bp_site); 230024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 230124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // This is implemented completely using the lldb::Process API. Subclasses 230224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // don't need to implement this function unless the standard flow of 230324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // restoring original opcode in memory and verifying the restored opcode 230424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // doesn't work for a specific process plug-in. 230524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 230624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DisableSoftwareBreakpoint (BreakpointSite *bp_site); 230724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 230824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner BreakpointSiteList & 230924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetBreakpointSiteList(); 231024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 231124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const BreakpointSiteList & 231224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetBreakpointSiteList() const; 231324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 231424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 231524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DisableAllBreakpointSites (); 231624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 231724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error 231824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ClearBreakpointSiteByID (lldb::user_id_t break_id); 231924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23203fd1f36c937575dbf57bae04c7ebaef78d8ecc1dStephen Wilson lldb::break_id_t 232124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CreateBreakpointSite (lldb::BreakpointLocationSP &owner, 232224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool use_hardware); 232324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 232424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error 232524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DisableBreakpointSiteByID (lldb::user_id_t break_id); 232624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 232724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error 232824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner EnableBreakpointSiteByID (lldb::user_id_t break_id); 232924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 233024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 233124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // BreakpointLocations use RemoveOwnerFromBreakpointSite to remove 233224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // themselves from the owner's list of this breakpoint sites. This has to 233324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // be a static function because you can't be sure that removing the 233424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // breakpoint from it's containing map won't delete the breakpoint site, 233524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // and doing that in an instance method isn't copasetic. 233624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 233724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RemoveOwnerFromBreakpointSite (lldb::user_id_t owner_id, 233824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t owner_loc_id, 233924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::BreakpointSiteSP &bp_site_sp); 234024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 234124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //---------------------------------------------------------------------- 234224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Process Watchpoints (optional) 234324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //---------------------------------------------------------------------- 234424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 234524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner EnableWatchpoint (WatchpointLocation *bp_loc); 234624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 234724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 234824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DisableWatchpoint (WatchpointLocation *bp_loc); 234924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 235024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 235124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Thread Queries 235224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 235324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual uint32_t 235424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner UpdateThreadListIfNeeded () = 0; 235524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 235624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ThreadList & 2357395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetThreadList () 2358395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 2359395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return m_thread_list; 2360395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 236124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 236224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ThreadList & 2363395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetThreadList () const 2364395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 2365395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return m_thread_list; 2366395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 236724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 236824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 236924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetNextThreadIndexID (); 237024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 237124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 237224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Event Handling 237324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 237424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 237524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetNextEvent (lldb::EventSP &event_sp); 237624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 237724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 237824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WaitForProcessToStop (const TimeValue *timeout); 237924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 238024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 238124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WaitForStateChangedEvents (const TimeValue *timeout, lldb::EventSP &event_sp); 238224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 238324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Event * 238424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner PeekAtStateChangedEvents (); 238563e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham 238624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2387f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham class 2388f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham ProcessEventHijacker 2389f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham { 2390f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham public: 2391f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham ProcessEventHijacker (Process &process, Listener *listener) : 2392f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham m_process (process), 2393f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham m_listener (listener) 2394f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham { 2395f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham m_process.HijackProcessEvents (listener); 2396f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham } 2397f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham ~ProcessEventHijacker () 2398f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham { 2399f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham m_process.RestoreProcessEvents(); 2400f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham } 2401f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham 2402f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham private: 2403f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham Process &m_process; 2404f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham Listener *m_listener; 2405f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham }; 2406f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham friend class ProcessEventHijacker; 240724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 240863e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// If you need to ensure that you and only you will hear about some public 240963e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// event, then make a new listener, set to listen to process events, and 241063e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// then call this with that listener. Then you will have to wait on that 241163e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// listener explicitly for events (rather than using the GetNextEvent & WaitFor* 241263e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// calls above. Be sure to call RestoreProcessEvents when you are done. 241363e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// 241463e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// @param[in] listener 241563e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// This is the new listener to whom all process events will be delivered. 241663e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// 241763e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// @return 241863e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// Returns \b true if the new listener could be installed, 241963e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// \b false otherwise. 242063e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham //------------------------------------------------------------------ 242163e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham bool 242263e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham HijackProcessEvents (Listener *listener); 242363e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham 242463e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham //------------------------------------------------------------------ 242563e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// Restores the process event broadcasting to its normal state. 242663e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// 242763e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham //------------------------------------------------------------------ 242863e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham void 242963e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham RestoreProcessEvents (); 243063e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham 243163e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Inghamprotected: 243263e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham //------------------------------------------------------------------ 243324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This is the part of the event handling that for a process event. 243424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// It decides what to do with the event and returns true if the 243524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// event needs to be propagated to the user, and false otherwise. 243624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the event is not propagated, this call will most likely set 243724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the target to executing again. 243824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 243924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] event_ptr 244024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This is the event we are handling. 244124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 244224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 244324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the event should be reported to the 244424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// user, \b false otherwise. 244524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 244624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 244724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ShouldBroadcastEvent (Event *event_ptr); 244824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 244963e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Inghampublic: 245024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ABI * 245124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetABI (); 245224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 245375c703dd8b492bad25a987b96853626641ae7246Greg Clayton DynamicLoader * 245475c703dd8b492bad25a987b96853626641ae7246Greg Clayton GetDynamicLoader () 245575c703dd8b492bad25a987b96853626641ae7246Greg Clayton { 245675c703dd8b492bad25a987b96853626641ae7246Greg Clayton return m_dyld_ap.get(); 245775c703dd8b492bad25a987b96853626641ae7246Greg Clayton } 245875c703dd8b492bad25a987b96853626641ae7246Greg Clayton 2459642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham virtual LanguageRuntime * 2460642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham GetLanguageRuntime (lldb::LanguageType language); 2461642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 2462642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham virtual CPPLanguageRuntime * 2463642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham GetCPPLanguageRuntime (); 2464642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 2465642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham virtual ObjCLanguageRuntime * 2466642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham GetObjCLanguageRuntime (); 246724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 246824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 246924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsRunning () const; 2470f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan 2471f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan DynamicCheckerFunctions *GetDynamicCheckers() 2472f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan { 2473d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham return m_dynamic_checkers_ap.get(); 2474f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan } 2475f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan 2476f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan void SetDynamicCheckers(DynamicCheckerFunctions *dynamic_checkers) 2477f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan { 2478d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham m_dynamic_checkers_ap.reset(dynamic_checkers); 2479f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan } 248024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2481c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham //------------------------------------------------------------------ 2482c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// Call this to set the lldb in the mode where it breaks on new thread 2483c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// creations, and then auto-restarts. This is useful when you are trying 2484c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// to run only one thread, but either that thread or the kernel is creating 2485c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// new threads in the process. If you stop when the thread is created, you 2486c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// can immediately suspend it, and keep executing only the one thread you intend. 2487c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// 2488c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// @return 2489c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// Returns \b true if we were able to start up the notification 2490c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// \b false otherwise. 2491c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham //------------------------------------------------------------------ 249255e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham virtual bool 249355e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham StartNoticingNewThreads() 249455e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham { 249555e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham return true; 249655e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham } 249755e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham 2498c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham //------------------------------------------------------------------ 2499c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// Call this to turn off the stop & notice new threads mode. 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 StopNoticingNewThreads() 250755e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham { 250855e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham return true; 250955e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham } 251055e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham 251124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 251224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // lldb::ExecutionContextScope pure virtual functions 251324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 251424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Target * 2515395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton CalculateTarget () 2516395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 2517395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return &m_target; 2518395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 251924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 252024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Process * 2521395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton CalculateProcess () 2522395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 2523395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return this; 2524395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 252524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 252624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Thread * 2527395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton CalculateThread () 2528395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 2529395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return NULL; 2530395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 253124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 253224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual StackFrame * 2533395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton CalculateStackFrame () 2534395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 2535395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return NULL; 2536395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 253724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 253824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 2539a830adbcd63d1995a01e6e18da79893c1426ca43Greg Clayton CalculateExecutionContext (ExecutionContext &exe_ctx); 254024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 254124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::ProcessSP 254224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSP (); 254324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 254424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 2545c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham //------------------------------------------------------------------ 2546c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham // lldb::ExecutionContextScope pure virtual functions 2547c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham //------------------------------------------------------------------ 2548c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham class NextEventAction 2549c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham { 2550c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham public: 2551c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham typedef enum EventActionResult 2552c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham { 2553c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham eEventActionSuccess, 2554c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham eEventActionRetry, 2555c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham eEventActionExit 2556c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham } EventActionResult; 2557c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 2558c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham NextEventAction (Process *process) : 2559c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham m_process(process) 2560c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham {} 2561c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual ~NextEventAction() {} 2562c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 2563c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual EventActionResult PerformAction (lldb::EventSP &event_sp) = 0; 2564c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual void HandleBeingUnshipped () {}; 2565c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual EventActionResult HandleBeingInterrupted () = 0; 2566c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual const char *GetExitString() = 0; 2567c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham protected: 2568c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham Process *m_process; 2569c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham }; 2570c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 2571c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham void SetNextEventAction (Process::NextEventAction *next_event_action) 2572c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham { 257368bffc51b218dc3a124820cb4d983204bf20be4aJim Ingham if (m_next_event_action_ap.get()) 257468bffc51b218dc3a124820cb4d983204bf20be4aJim Ingham m_next_event_action_ap->HandleBeingUnshipped(); 257568bffc51b218dc3a124820cb4d983204bf20be4aJim Ingham 257668bffc51b218dc3a124820cb4d983204bf20be4aJim Ingham m_next_event_action_ap.reset(next_event_action); 2577c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham } 2578c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 2579c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham // This is the completer for Attaching: 2580c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham class AttachCompletionHandler : public NextEventAction 2581c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham { 2582c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham public: 2583c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham AttachCompletionHandler (Process *process) : 2584c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham NextEventAction(process) 2585c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham {} 2586c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual ~AttachCompletionHandler() {} 2587c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 2588c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual EventActionResult PerformAction (lldb::EventSP &event_sp); 2589c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual EventActionResult HandleBeingInterrupted (); 2590c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual const char *GetExitString(); 2591c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham private: 2592c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham std::string m_exit_string; 2593c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham }; 2594c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 2595c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 2596fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton class MemoryCache 2597fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton { 2598fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton public: 2599fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton //------------------------------------------------------------------ 2600fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton // Constructors and Destructors 2601fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton //------------------------------------------------------------------ 2602fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton MemoryCache (); 2603fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton 2604fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton ~MemoryCache (); 2605fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton 2606fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton void 2607fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton Clear(); 2608fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton 2609fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton void 2610fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton Flush (lldb::addr_t addr, size_t size); 2611fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton 2612fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton size_t 2613fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton Read (Process *process, 2614fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton lldb::addr_t addr, 2615fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton void *dst, 2616fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton size_t dst_len, 2617fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton Error &error); 2618fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton 2619b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t 2620b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetMemoryCacheLineSize() const 2621b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 2622b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_cache_line_byte_size ; 2623b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 2624fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton protected: 2625fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton typedef std::map<lldb::addr_t, lldb::DataBufferSP> collection; 2626fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton //------------------------------------------------------------------ 2627fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton // Classes that inherit from MemoryCache can see and modify these 2628fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton //------------------------------------------------------------------ 2629fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton uint32_t m_cache_line_byte_size; 2630fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton Mutex m_cache_mutex; 2631fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton collection m_cache; 2632fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton 2633fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton private: 2634fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton DISALLOW_COPY_AND_ASSIGN (MemoryCache); 2635fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton }; 2636fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton 2637f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham bool 2638f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham HijackPrivateProcessEvents (Listener *listener); 2639f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham 2640f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham void 2641f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham RestorePrivateProcessEvents (); 2642a2f7423310044cf76d8d52aa9153b7fd8b226b49Greg Clayton 2643a2f7423310044cf76d8d52aa9153b7fd8b226b49Greg Clayton bool 2644a2f7423310044cf76d8d52aa9153b7fd8b226b49Greg Clayton PrivateStateThreadIsValid () const 2645a2f7423310044cf76d8d52aa9153b7fd8b226b49Greg Clayton { 2646a2f7423310044cf76d8d52aa9153b7fd8b226b49Greg Clayton return m_private_state_thread != LLDB_INVALID_HOST_THREAD; 2647a2f7423310044cf76d8d52aa9153b7fd8b226b49Greg Clayton } 2648fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton 264924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 265024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Member variables 265124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 265224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Target & m_target; ///< The target that owns this process. 265324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ThreadSafeValue<lldb::StateType> m_public_state; 265424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ThreadSafeValue<lldb::StateType> m_private_state; // The actual state of our process 265524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Broadcaster m_private_state_broadcaster; // This broadcaster feeds state changed events into the private state thread's listener. 265624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Broadcaster m_private_state_control_broadcaster; // This is the control broadcaster, used to pause, resume & stop the private state thread. 265724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Listener m_private_state_listener; // This is the listener for the private state thread. 265824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Predicate<bool> m_private_state_control_wait; /// This Predicate is used to signal that a control operation is complete. 265924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::thread_t m_private_state_thread; // Thread ID for the thread that watches interal state events 266024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t m_stop_id; ///< A count of many times the process has stopped. 266124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t m_thread_index_id; ///< Each thread is created with a 1 based index that won't get re-used. 266224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int m_exit_status; ///< The exit status of the process, or -1 if not set. 266324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::string m_exit_string; ///< A textual description of why a process exited. 266424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ThreadList m_thread_list; ///< The threads for this process. 266524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::vector<Notifications> m_notifications; ///< The list of notifications that this process can deliver. 26660baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton std::vector<lldb::addr_t> m_image_tokens; 266724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Listener &m_listener; 266824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner BreakpointSiteList m_breakpoint_site_list; ///< This is the list of breakpoint locations we intend 266924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ///< to insert in the target. 267075c703dd8b492bad25a987b96853626641ae7246Greg Clayton std::auto_ptr<DynamicLoader> m_dyld_ap; 2671d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham std::auto_ptr<DynamicCheckerFunctions> m_dynamic_checkers_ap; ///< The functions used by the expression parser to validate data that expressions use. 267224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner UnixSignals m_unix_signals; /// This is the current signal set for this process. 267324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::ABISP m_abi_sp; 2674861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice lldb::InputReaderSP m_process_input_reader; 2675861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice lldb_private::Communication m_stdio_communication; 267620d338fad87eba91de65aa9bec76e01c04472848Greg Clayton lldb_private::Mutex m_stdio_communication_mutex; 2677861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice std::string m_stdout_data; 2678fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton MemoryCache m_memory_cache; 2679fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton 2680642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham typedef std::map<lldb::LanguageType, lldb::LanguageRuntimeSP> LanguageRuntimeCollection; 2681642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham LanguageRuntimeCollection m_language_runtimes; 26827e2f91cb958c8670774cb2190db7b858618b5b9bGreg Clayton std::auto_ptr<NextEventAction> m_next_event_action_ap; 268324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 268424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 268524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RemoveBreakpointOpcodesFromBuffer (lldb::addr_t addr, size_t size, uint8_t *buf) const; 268624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 268724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 268824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SynchronouslyNotifyStateChanged (lldb::StateType state); 268924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 269024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 269124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetPublicState (lldb::StateType new_state); 269224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 269324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 269424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetPrivateState (lldb::StateType state); 269524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 269624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 269724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StartPrivateStateThread (); 269824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 269924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 270024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StopPrivateStateThread (); 270124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 270224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 270324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner PausePrivateStateThread (); 270424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 270524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 270624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResumePrivateStateThread (); 270724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 270824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void * 270924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner PrivateStateThread (void *arg); 271024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 271124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void * 271224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RunPrivateStateThread (); 271324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 271424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 271524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner HandlePrivateEvent (lldb::EventSP &event_sp); 271624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 271724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 271824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WaitForProcessStopPrivate (const TimeValue *timeout, lldb::EventSP &event_sp); 271924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 272024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // This waits for both the state change broadcaster, and the control broadcaster. 272124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // If control_only, it only waits for the control broadcaster. 272224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 272324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 272424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WaitForEventsPrivate (const TimeValue *timeout, lldb::EventSP &event_sp, bool control_only); 272524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 272624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 272724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WaitForStateChangedEventsPrivate (const TimeValue *timeout, lldb::EventSP &event_sp); 272824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 272924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 273024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WaitForState (const TimeValue *timeout, 273124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb::StateType *match_states, 273224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const uint32_t num_match_states); 273324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 273424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 273524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WriteMemoryPrivate (lldb::addr_t addr, const void *buf, size_t size, Error &error); 2736861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 2737861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice void 2738861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice AppendSTDOUT (const char *s, size_t len); 2739861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 2740861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice static void 2741861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice STDIOReadThreadBytesReceived (void *baton, const void *src, size_t src_len); 2742861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 2743861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice void 2744861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice PushProcessInputReader (); 2745861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 2746861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice void 2747861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice PopProcessInputReader (); 2748861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 2749861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice void 2750861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice ResetProcessInputReader (); 2751861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 2752861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice void 2753861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice SetUpProcessInputReader (int file_descriptor); 2754861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 2755861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice static size_t 2756861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice ProcessInputReaderCallback (void *baton, 2757861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice InputReader &reader, 2758861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice lldb::InputReaderAction notification, 2759861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice const char *bytes, 2760861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice size_t bytes_len); 2761861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 2762861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 276324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 276424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 276524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // For Process only 276624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 276724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void ControlPrivateStateThread (uint32_t signal); 27686e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 276924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN (Process); 277024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 277124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 277224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 277324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 277424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 277524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_Process_h_ 2776