Process.h revision 0296fe73a7cb1482226b1303a795ede00e12d677
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project//===-- Process.h -----------------------------------------------*- C++ -*-===// 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// The LLVM Compiler Infrastructure 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// This file is distributed under the University of Illinois Open Source 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// License. See LICENSE.TXT for details. 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project//===----------------------------------------------------------------------===// 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef liblldb_Process_h_ 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define liblldb_Process_h_ 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// C Includes 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <limits.h> 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <spawn.h> 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// C++ Includes 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <list> 19788717ca599c714d58b2cb5deea1d37b4a711c07Eino-Ville Talvala#include <iosfwd> 2010e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li#include <vector> 2110e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li 224f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala// Other libraries and framework includes 23a696f5d667227365da732481770767dcb330dd23Mathias Agopian// Project includes 244c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li#include "lldb/lldb-private.h" 2530771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li#include "lldb/Core/ArchSpec.h" 26fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis#include "lldb/Core/Broadcaster.h" 274f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala#include "lldb/Core/Communication.h" 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "lldb/Core/Error.h" 294f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala#include "lldb/Core/Event.h" 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "lldb/Core/StringList.h" 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "lldb/Core/ThreadSafeValue.h" 324f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala#include "lldb/Core/PluginInterface.h" 334f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala#include "lldb/Core/UserSettingsController.h" 347005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala#include "lldb/Breakpoint/BreakpointSiteList.h" 357005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala#include "lldb/Expression/ClangPersistentVariables.h" 367005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala#include "lldb/Expression/IRDynamicChecks.h" 377005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala#include "lldb/Host/FileSpec.h" 387005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala#include "lldb/Interpreter/Args.h" 39bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li#include "lldb/Interpreter/Options.h" 400a12018e4cd6eaaeaec795f6b2af4499fe3a8bcdAli Utku Selen#include "lldb/Target/ExecutionContextScope.h" 41bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li#include "lldb/Target/Memory.h" 42bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li#include "lldb/Target/ThreadList.h" 43bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li#include "lldb/Target/UnixSignals.h" 44bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li 45bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Linamespace lldb_private { 46bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li 47bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li//---------------------------------------------------------------------- 487d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin// ProcessInstanceSettings 49bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li//---------------------------------------------------------------------- 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass ProcessInstanceSettings : public InstanceSettings 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 52bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnorpublic: 53bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 54bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor ProcessInstanceSettings (UserSettingsController &owner, bool live_instance = true, const char *name = NULL); 55df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main 56bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor ProcessInstanceSettings (const ProcessInstanceSettings &rhs); 577478ea6848c0059e65a4089b4ec2ff4158520870Wu-cheng Li 58df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main virtual 59df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main ~ProcessInstanceSettings (); 60bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 617478ea6848c0059e65a4089b4ec2ff4158520870Wu-cheng Li ProcessInstanceSettings& 62df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main operator= (const ProcessInstanceSettings &rhs); 63df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main 64df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main 65df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main void 66df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main UpdateInstanceSettingsVariable (const ConstString &var_name, 67bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor const char *index_value, 68bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor const char *value, 69bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor const ConstString &instance_name, 70341ff13689dfe822b598e626272ac2e80041b482Dan Egnor const SettingEntry &entry, 71bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor VarSetOperationType op, 72bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor Error &err, 73bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor bool pending); 74bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 75bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor bool 76bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor GetInstanceSettingsValue (const SettingEntry &entry, 77bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor const ConstString &var_name, 78bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor StringList &value, 79bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor Error *err); 80bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 81bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 82bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnorprotected: 83bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 84bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor void 85bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor CopyInstanceSettings (const lldb::InstanceSettingsSP &new_settings, 86bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor bool pending); 87bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 88bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor const ConstString 89bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor CreateInstanceName (); 90bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor}; 91bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 92bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor//---------------------------------------------------------------------- 93bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor// ProcessInfo 94bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor// 95bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor// A base class for information for a process. This can be used to fill 96bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor// out information for a process prior to launching it, or it can be 97bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor// used for an instance of a process and can be filled in with the 98bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor// existing values for that process. 99bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor//---------------------------------------------------------------------- 100bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnorclass ProcessInfo 101bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor{ 102bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnorpublic: 103bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor ProcessInfo () : 104bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_executable (), 105bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_arguments (), 106bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_environment (), 107bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_uid (UINT32_MAX), 108bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_gid (UINT32_MAX), 109bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_arch(), 110bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_pid (LLDB_INVALID_PROCESS_ID) 111bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor { 112bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 113bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 114bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor ProcessInfo (const char *name, 115bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor const ArchSpec &arch, 116bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor lldb::pid_t pid) : 117bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_executable (name, false), 118bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_arguments (), 119bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_environment(), 120bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_uid (UINT32_MAX), 121bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_gid (UINT32_MAX), 122341ff13689dfe822b598e626272ac2e80041b482Dan Egnor m_arch (arch), 123bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_pid (pid) 124bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor { 125df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main } 126df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main 127df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main void 1287478ea6848c0059e65a4089b4ec2ff4158520870Wu-cheng Li Clear () 129df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main { 1306c5c3c392b8abce93fd2d366f12449c713ed0016Joe Fernandez m_executable.Clear(); 1316c5c3c392b8abce93fd2d366f12449c713ed0016Joe Fernandez m_arguments.Clear(); 1326c5c3c392b8abce93fd2d366f12449c713ed0016Joe Fernandez m_environment.Clear(); 1336c5c3c392b8abce93fd2d366f12449c713ed0016Joe Fernandez m_uid = UINT32_MAX; 1346c5c3c392b8abce93fd2d366f12449c713ed0016Joe Fernandez m_gid = UINT32_MAX; 1356c5c3c392b8abce93fd2d366f12449c713ed0016Joe Fernandez m_arch.Clear(); 136b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala m_pid = LLDB_INVALID_PROCESS_ID; 137b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala } 138b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char * 140b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala GetName() const 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_executable.GetFilename().GetCString(); 1439b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li } 144d2c2929c94bec68741b85f4174e11307fb65157fWu-cheng Li 145da83f4674a564007baac03db062a289c8158d940Benny Wong size_t 146da83f4674a564007baac03db062a289c8158d940Benny Wong GetNameLength() const 147da83f4674a564007baac03db062a289c8158d940Benny Wong { 148da83f4674a564007baac03db062a289c8158d940Benny Wong return m_executable.GetFilename().GetLength(); 149da83f4674a564007baac03db062a289c8158d940Benny Wong } 150da83f4674a564007baac03db062a289c8158d940Benny Wong 151da83f4674a564007baac03db062a289c8158d940Benny Wong void 152da83f4674a564007baac03db062a289c8158d940Benny Wong SetName (const char *name) 153da83f4674a564007baac03db062a289c8158d940Benny Wong { 1544c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li m_executable.GetFilename().SetCString (name); 155bb1e275c0e684dd213f124da77110cdd9d6f090cWu-cheng Li } 1569d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FileSpec & 1584838e338129e09a37b8c8ad5e44f85ec5cd3aea1Ashok Bhat GetExecutableFile () 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_executable; 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void 1647005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala SetExecutableFile (const FileSpec &exe_file, bool add_exe_file_as_first_arg) 165e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks { 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (exe_file) 1679d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li { 1683f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li m_executable = exe_file; 1694c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li if (add_exe_file_as_first_arg) 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_arguments.Clear(); 17294927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp char filename[PATH_MAX]; 1734c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li if (exe_file.GetPath(filename, sizeof(filename))) 174a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin m_arguments.AppendArgument (filename); 1759b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li } 176feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk } 177feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk else 178feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk { 1794c913801141163362dd5bb7c9784c83f69c11054Zhijun He m_executable.Clear(); 1804c913801141163362dd5bb7c9784c83f69c11054Zhijun He if (add_exe_file_as_first_arg) 1814c913801141163362dd5bb7c9784c83f69c11054Zhijun He m_arguments.Clear(); 1824c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 1834c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 184feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const FileSpec & 18610e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li GetExecutableFile () const 18710e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li { 18810e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li return m_executable; 18910e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li } 19010e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li 19110e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li uint32_t 19210e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li GetUserID() const 19310e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li { 19410e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li return m_uid; 19510e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li } 19610e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li 19710e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li uint32_t 19810e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li GetGroupID() const 19910e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li { 20010e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li return m_gid; 20110e09c69d659bf54d6efbe1a3660add7f8a39d6eWu-cheng Li } 2024c913801141163362dd5bb7c9784c83f69c11054Zhijun He 2034c913801141163362dd5bb7c9784c83f69c11054Zhijun He bool 2044c913801141163362dd5bb7c9784c83f69c11054Zhijun He UserIDIsValid () const 2054c913801141163362dd5bb7c9784c83f69c11054Zhijun He { 2064c913801141163362dd5bb7c9784c83f69c11054Zhijun He return m_uid != UINT32_MAX; 2074c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 2084c913801141163362dd5bb7c9784c83f69c11054Zhijun He 2094c913801141163362dd5bb7c9784c83f69c11054Zhijun He bool 210a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin GroupIDIsValid () const 2114c913801141163362dd5bb7c9784c83f69c11054Zhijun He { 2124c913801141163362dd5bb7c9784c83f69c11054Zhijun He return m_gid != UINT32_MAX; 2134c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 2144c913801141163362dd5bb7c9784c83f69c11054Zhijun He 2154c913801141163362dd5bb7c9784c83f69c11054Zhijun He void 216a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin SetUserID (uint32_t uid) 2174c913801141163362dd5bb7c9784c83f69c11054Zhijun He { 2184c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li m_uid = uid; 2194c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li } 220c0c683b3344c67700882f8059e7d18266366daa9Wu-cheng Li 2214c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li void 2224c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li SetGroupID (uint32_t gid) 223c0c683b3344c67700882f8059e7d18266366daa9Wu-cheng Li { 2244c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li m_gid = gid; 225c0c683b3344c67700882f8059e7d18266366daa9Wu-cheng Li } 2264c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li 2274c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li ArchSpec & 228341ff13689dfe822b598e626272ac2e80041b482Dan Egnor GetArchitecture () 229e25cc656392d8866e163f78b60c7791455d0fb44Chih-Chung Chang { 230e25cc656392d8866e163f78b60c7791455d0fb44Chih-Chung Chang return m_arch; 231e25cc656392d8866e163f78b60c7791455d0fb44Chih-Chung Chang } 232e25cc656392d8866e163f78b60c7791455d0fb44Chih-Chung Chang 233341ff13689dfe822b598e626272ac2e80041b482Dan Egnor const ArchSpec & 234b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang GetArchitecture () const 235b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang { 2364f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala return m_arch; 2374f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala } 2384f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala 2394f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala lldb::pid_t 2404f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala GetProcessID () const 2414f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala { 2424f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala return m_pid; 2434f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala } 2444f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala 2454f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala void 2464f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala SetProcessID (lldb::pid_t pid) 2474f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala { 2484f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala m_pid = pid; 2494f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala } 2504f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala 251b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang bool 252b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang ProcessIDIsValid() const 253b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang { 254b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala return m_pid != LLDB_INVALID_PROCESS_ID; 255b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala } 256b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala 257b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang void 258b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala Dump (Stream &s, Platform *platform) const; 259b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang 2607836660f5eb45b7b7e1f5119face65c80e2ade17Wu-cheng Li Args & 2617836660f5eb45b7b7e1f5119face65c80e2ade17Wu-cheng Li GetArguments () 2627836660f5eb45b7b7e1f5119face65c80e2ade17Wu-cheng Li { 263b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang return m_arguments; 2647836660f5eb45b7b7e1f5119face65c80e2ade17Wu-cheng Li } 2657836660f5eb45b7b7e1f5119face65c80e2ade17Wu-cheng Li 2667836660f5eb45b7b7e1f5119face65c80e2ade17Wu-cheng Li const Args & 2677836660f5eb45b7b7e1f5119face65c80e2ade17Wu-cheng Li GetArguments () const 268b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang { 269b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang return m_arguments; 270b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang } 271464cb21e2aaa448072449b82156f18bd64c0e613Joe Fernandez 272b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang void 273b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang SetArguments (const Args& args, 2747836660f5eb45b7b7e1f5119face65c80e2ade17Wu-cheng Li bool first_arg_is_executable, 275b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang bool first_arg_is_executable_and_argument); 276b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang 27732a972c693400db50717435139fa292a63bc937aEino-Ville Talvala void 278b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang SetArguments (char const **argv, 27932a972c693400db50717435139fa292a63bc937aEino-Ville Talvala bool first_arg_is_executable, 280b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang bool first_arg_is_executable_and_argument); 28132a972c693400db50717435139fa292a63bc937aEino-Ville Talvala 2822fe6fcaff4bdab45484055d6c18dd96d1b7b7be1Wu-cheng Li Args & 2832fe6fcaff4bdab45484055d6c18dd96d1b7b7be1Wu-cheng Li GetEnvironmentEntries () 2842fe6fcaff4bdab45484055d6c18dd96d1b7b7be1Wu-cheng Li { 2852fe6fcaff4bdab45484055d6c18dd96d1b7b7be1Wu-cheng Li return m_environment; 28632a972c693400db50717435139fa292a63bc937aEino-Ville Talvala } 287b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang 288b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang const Args & 28969ea4e15e52c456537575d21443ac1efdb03a902Brad Fitzpatrick GetEnvironmentEntries () const 29069ea4e15e52c456537575d21443ac1efdb03a902Brad Fitzpatrick { 29169ea4e15e52c456537575d21443ac1efdb03a902Brad Fitzpatrick return m_environment; 29269ea4e15e52c456537575d21443ac1efdb03a902Brad Fitzpatrick } 293b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang 2947836660f5eb45b7b7e1f5119face65c80e2ade17Wu-cheng Liprotected: 295f7c6c5ad64c8e5d20e1806cc98b9919334c69614Eino-Ville Talvala FileSpec m_executable; 296f7c6c5ad64c8e5d20e1806cc98b9919334c69614Eino-Ville Talvala Args m_arguments; 297f7c6c5ad64c8e5d20e1806cc98b9919334c69614Eino-Ville Talvala Args m_environment; 298f7c6c5ad64c8e5d20e1806cc98b9919334c69614Eino-Ville Talvala uint32_t m_uid; 299f7c6c5ad64c8e5d20e1806cc98b9919334c69614Eino-Ville Talvala uint32_t m_gid; 300f7c6c5ad64c8e5d20e1806cc98b9919334c69614Eino-Ville Talvala ArchSpec m_arch; 301f7c6c5ad64c8e5d20e1806cc98b9919334c69614Eino-Ville Talvala lldb::pid_t m_pid; 302f7c6c5ad64c8e5d20e1806cc98b9919334c69614Eino-Ville Talvala}; 303f7c6c5ad64c8e5d20e1806cc98b9919334c69614Eino-Ville Talvala 304f7c6c5ad64c8e5d20e1806cc98b9919334c69614Eino-Ville Talvala//---------------------------------------------------------------------- 305f7c6c5ad64c8e5d20e1806cc98b9919334c69614Eino-Ville Talvala// ProcessInstanceInfo 306f7c6c5ad64c8e5d20e1806cc98b9919334c69614Eino-Ville Talvala// 307f7c6c5ad64c8e5d20e1806cc98b9919334c69614Eino-Ville Talvala// Describes an existing process and any discoverable information that 308f7c6c5ad64c8e5d20e1806cc98b9919334c69614Eino-Ville Talvala// pertains to that process. 309f7c6c5ad64c8e5d20e1806cc98b9919334c69614Eino-Ville Talvala//---------------------------------------------------------------------- 310b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Changclass ProcessInstanceInfo : public ProcessInfo 311b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang{ 312b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Changpublic: 313a1c41e13b521cdd611a8fc46e43b5ae0a2c00238Wu-cheng Li ProcessInstanceInfo () : 314a1c41e13b521cdd611a8fc46e43b5ae0a2c00238Wu-cheng Li ProcessInfo (), 315a1c41e13b521cdd611a8fc46e43b5ae0a2c00238Wu-cheng Li m_euid (UINT32_MAX), 316a1c41e13b521cdd611a8fc46e43b5ae0a2c00238Wu-cheng Li m_egid (UINT32_MAX), 317bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_parent_pid (LLDB_INVALID_PROCESS_ID) 318bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor { 319bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 320341ff13689dfe822b598e626272ac2e80041b482Dan Egnor 321341ff13689dfe822b598e626272ac2e80041b482Dan Egnor ProcessInstanceInfo (const char *name, 322bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor const ArchSpec &arch, 323bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor lldb::pid_t pid) : 324bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor ProcessInfo (name, arch, pid), 325bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_euid (UINT32_MAX), 326bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_egid (UINT32_MAX), 327bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_parent_pid (LLDB_INVALID_PROCESS_ID) 328bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor { 329bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 330bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 331bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor void 332bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor Clear () 333341ff13689dfe822b598e626272ac2e80041b482Dan Egnor { 334a48b70fa8ff6363d1e5282be70f6be12bc0688dcWu-cheng Li ProcessInfo::Clear(); 335bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_euid = UINT32_MAX; 336a1c41e13b521cdd611a8fc46e43b5ae0a2c00238Wu-cheng Li m_egid = UINT32_MAX; 337a1c41e13b521cdd611a8fc46e43b5ae0a2c00238Wu-cheng Li m_parent_pid = LLDB_INVALID_PROCESS_ID; 338a1c41e13b521cdd611a8fc46e43b5ae0a2c00238Wu-cheng Li } 339facc8ce116bd92f7ba7e8ecb76cbda3953260ef9Wu-cheng Li 340e25cc656392d8866e163f78b60c7791455d0fb44Chih-Chung Chang uint32_t 341e25cc656392d8866e163f78b60c7791455d0fb44Chih-Chung Chang GetEffectiveUserID() const 3427bc1b21a5217c3737ae82edd3ff2d901c69a51adWu-cheng Li { 343e25cc656392d8866e163f78b60c7791455d0fb44Chih-Chung Chang return m_euid; 344e25cc656392d8866e163f78b60c7791455d0fb44Chih-Chung Chang } 345e25cc656392d8866e163f78b60c7791455d0fb44Chih-Chung Chang 346a48b70fa8ff6363d1e5282be70f6be12bc0688dcWu-cheng Li uint32_t 347a48b70fa8ff6363d1e5282be70f6be12bc0688dcWu-cheng Li GetEffectiveGroupID() const 348a48b70fa8ff6363d1e5282be70f6be12bc0688dcWu-cheng Li { 3497836660f5eb45b7b7e1f5119face65c80e2ade17Wu-cheng Li return m_egid; 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3519b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 352a48b70fa8ff6363d1e5282be70f6be12bc0688dcWu-cheng Li bool 353a48b70fa8ff6363d1e5282be70f6be12bc0688dcWu-cheng Li EffectiveUserIDIsValid () const 354a48b70fa8ff6363d1e5282be70f6be12bc0688dcWu-cheng Li { 355a48b70fa8ff6363d1e5282be70f6be12bc0688dcWu-cheng Li return m_euid != UINT32_MAX; 356a48b70fa8ff6363d1e5282be70f6be12bc0688dcWu-cheng Li } 3577bc1b21a5217c3737ae82edd3ff2d901c69a51adWu-cheng Li 358a48b70fa8ff6363d1e5282be70f6be12bc0688dcWu-cheng Li bool 359a48b70fa8ff6363d1e5282be70f6be12bc0688dcWu-cheng Li EffectiveGroupIDIsValid () const 360a48b70fa8ff6363d1e5282be70f6be12bc0688dcWu-cheng Li { 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_egid != UINT32_MAX; 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3634c913801141163362dd5bb7c9784c83f69c11054Zhijun He 3644c913801141163362dd5bb7c9784c83f69c11054Zhijun He void 3654c913801141163362dd5bb7c9784c83f69c11054Zhijun He SetEffectiveUserID (uint32_t uid) 3664c913801141163362dd5bb7c9784c83f69c11054Zhijun He { 3674c913801141163362dd5bb7c9784c83f69c11054Zhijun He m_euid = uid; 3684c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 3694c913801141163362dd5bb7c9784c83f69c11054Zhijun He 3704c913801141163362dd5bb7c9784c83f69c11054Zhijun He void 3714c913801141163362dd5bb7c9784c83f69c11054Zhijun He SetEffectiveGroupID (uint32_t gid) 3724c913801141163362dd5bb7c9784c83f69c11054Zhijun He { 3734c913801141163362dd5bb7c9784c83f69c11054Zhijun He m_egid = gid; 3744c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 3754c913801141163362dd5bb7c9784c83f69c11054Zhijun He 3764c913801141163362dd5bb7c9784c83f69c11054Zhijun He lldb::pid_t 3774c913801141163362dd5bb7c9784c83f69c11054Zhijun He GetParentProcessID () const 3784c913801141163362dd5bb7c9784c83f69c11054Zhijun He { 3794c913801141163362dd5bb7c9784c83f69c11054Zhijun He return m_parent_pid; 3804c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 3814c913801141163362dd5bb7c9784c83f69c11054Zhijun He 3824c913801141163362dd5bb7c9784c83f69c11054Zhijun He void 3834c913801141163362dd5bb7c9784c83f69c11054Zhijun He SetParentProcessID (lldb::pid_t pid) 3844c913801141163362dd5bb7c9784c83f69c11054Zhijun He { 3854c913801141163362dd5bb7c9784c83f69c11054Zhijun He m_parent_pid = pid; 3864c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 387a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin 3884c913801141163362dd5bb7c9784c83f69c11054Zhijun He bool 389a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin ParentProcessIDIsValid() const 390a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin { 391a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin return m_parent_pid != LLDB_INVALID_PROCESS_ID; 3924c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 3934c913801141163362dd5bb7c9784c83f69c11054Zhijun He 3944c913801141163362dd5bb7c9784c83f69c11054Zhijun He void 395a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin Dump (Stream &s, Platform *platform) const; 3964c913801141163362dd5bb7c9784c83f69c11054Zhijun He 397a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin static void 3984c913801141163362dd5bb7c9784c83f69c11054Zhijun He DumpTableHeader (Stream &s, Platform *platform, bool show_args, bool verbose); 3994c913801141163362dd5bb7c9784c83f69c11054Zhijun He 4004c913801141163362dd5bb7c9784c83f69c11054Zhijun He void 4014c913801141163362dd5bb7c9784c83f69c11054Zhijun He DumpAsTableRow (Stream &s, Platform *platform, bool show_args, bool verbose) const; 402a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin 403a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkinprotected: 404a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin uint32_t m_euid; 405a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin uint32_t m_egid; 4064c913801141163362dd5bb7c9784c83f69c11054Zhijun He lldb::pid_t m_parent_pid; 4074c913801141163362dd5bb7c9784c83f69c11054Zhijun He}; 4084c913801141163362dd5bb7c9784c83f69c11054Zhijun He 4094c913801141163362dd5bb7c9784c83f69c11054Zhijun He 4104c913801141163362dd5bb7c9784c83f69c11054Zhijun He//---------------------------------------------------------------------- 4114c913801141163362dd5bb7c9784c83f69c11054Zhijun He// ProcessLaunchInfo 4124c913801141163362dd5bb7c9784c83f69c11054Zhijun He// 4134c913801141163362dd5bb7c9784c83f69c11054Zhijun He// Describes any information that is required to launch a process. 4144c913801141163362dd5bb7c9784c83f69c11054Zhijun He//---------------------------------------------------------------------- 4154c913801141163362dd5bb7c9784c83f69c11054Zhijun He 4164c913801141163362dd5bb7c9784c83f69c11054Zhijun Heclass ProcessLaunchInfo : public ProcessInfo 417a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin{ 4184c913801141163362dd5bb7c9784c83f69c11054Zhijun Hepublic: 4194c913801141163362dd5bb7c9784c83f69c11054Zhijun He 4204c913801141163362dd5bb7c9784c83f69c11054Zhijun He class FileAction 4214c913801141163362dd5bb7c9784c83f69c11054Zhijun He { 4224c913801141163362dd5bb7c9784c83f69c11054Zhijun He public: 4234c913801141163362dd5bb7c9784c83f69c11054Zhijun He enum Action 4244c913801141163362dd5bb7c9784c83f69c11054Zhijun He { 4254c913801141163362dd5bb7c9784c83f69c11054Zhijun He eFileActionNone, 4264c913801141163362dd5bb7c9784c83f69c11054Zhijun He eFileActionClose, 4274c913801141163362dd5bb7c9784c83f69c11054Zhijun He eFileActionDuplicate, 4284c913801141163362dd5bb7c9784c83f69c11054Zhijun He eFileActionOpen 4294c913801141163362dd5bb7c9784c83f69c11054Zhijun He }; 4304c913801141163362dd5bb7c9784c83f69c11054Zhijun He 4314c913801141163362dd5bb7c9784c83f69c11054Zhijun He 4324c913801141163362dd5bb7c9784c83f69c11054Zhijun He FileAction () : 4334c913801141163362dd5bb7c9784c83f69c11054Zhijun He m_action (eFileActionNone), 4344c913801141163362dd5bb7c9784c83f69c11054Zhijun He m_fd (-1), 4354c913801141163362dd5bb7c9784c83f69c11054Zhijun He m_arg (-1), 4364c913801141163362dd5bb7c9784c83f69c11054Zhijun He m_path () 4374c913801141163362dd5bb7c9784c83f69c11054Zhijun He { 4384c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 4394c913801141163362dd5bb7c9784c83f69c11054Zhijun He 4404c913801141163362dd5bb7c9784c83f69c11054Zhijun He void 4414c913801141163362dd5bb7c9784c83f69c11054Zhijun He Clear() 4424c913801141163362dd5bb7c9784c83f69c11054Zhijun He { 4434c913801141163362dd5bb7c9784c83f69c11054Zhijun He m_action = eFileActionNone; 4444c913801141163362dd5bb7c9784c83f69c11054Zhijun He m_fd = -1; 4454c913801141163362dd5bb7c9784c83f69c11054Zhijun He m_arg = -1; 446a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin m_path.clear(); 4474c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 4484c913801141163362dd5bb7c9784c83f69c11054Zhijun He 4494c913801141163362dd5bb7c9784c83f69c11054Zhijun He bool 4504c913801141163362dd5bb7c9784c83f69c11054Zhijun He Close (int fd); 4514c913801141163362dd5bb7c9784c83f69c11054Zhijun He 4524c913801141163362dd5bb7c9784c83f69c11054Zhijun He bool 4534c913801141163362dd5bb7c9784c83f69c11054Zhijun He Duplicate (int fd, int dup_fd); 4544c913801141163362dd5bb7c9784c83f69c11054Zhijun He 4554c913801141163362dd5bb7c9784c83f69c11054Zhijun He bool 4564c913801141163362dd5bb7c9784c83f69c11054Zhijun He Open (int fd, const char *path, bool read, bool write); 4574c913801141163362dd5bb7c9784c83f69c11054Zhijun He 4584c913801141163362dd5bb7c9784c83f69c11054Zhijun He static bool 4594c913801141163362dd5bb7c9784c83f69c11054Zhijun He AddPosixSpawnFileAction (posix_spawn_file_actions_t *file_actions, 4604c913801141163362dd5bb7c9784c83f69c11054Zhijun He const FileAction *info, 4614c913801141163362dd5bb7c9784c83f69c11054Zhijun He Log *log, 4624c913801141163362dd5bb7c9784c83f69c11054Zhijun He Error& error); 4634c913801141163362dd5bb7c9784c83f69c11054Zhijun He 4644c913801141163362dd5bb7c9784c83f69c11054Zhijun He int 4654c913801141163362dd5bb7c9784c83f69c11054Zhijun He GetFD () const 4664c913801141163362dd5bb7c9784c83f69c11054Zhijun He { 4674c913801141163362dd5bb7c9784c83f69c11054Zhijun He return m_fd; 4684c913801141163362dd5bb7c9784c83f69c11054Zhijun He } 469a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin 470a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin Action 471a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin GetAction () const 472a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin { 473a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin return m_action; 474a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin } 475a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin 476a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin int 477a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin GetActionArgument () const 478a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin { 479a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin return m_arg; 480a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin } 481a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin 482a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin const char * 483a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin GetPath () const 484a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin { 485a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin if (m_path.empty()) 486a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin return NULL; 487a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin return m_path.c_str(); 488a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin } 489a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin 490a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin protected: 491a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin Action m_action; // The action for this file 4927bc1b21a5217c3737ae82edd3ff2d901c69a51adWu-cheng Li int m_fd; // An existing file descriptor 493a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin int m_arg; // oflag for eFileActionOpen*, dup_fd for eFileActionDuplicate 494feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk std::string m_path; // A file path to use for opening after fork or posix_spawn 495feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk }; 496feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 497feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk ProcessLaunchInfo () : 498feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk ProcessInfo(), 499feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk m_flags () 500feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk { 501feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk } 502feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 503feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk ProcessLaunchInfo (const char *stdin_path, 504feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk const char *stdout_path, 505feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk const char *stderr_path, 506feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk const char *working_directory, 507feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk uint32_t launch_flags) : 508feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk ProcessInfo(), 509feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk m_flags (launch_flags) 510feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk { 511feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk if (stderr_path) 512feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk { 513feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk ProcessLaunchInfo::FileAction file_action; 514feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk const bool read = true; 515feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk const bool write = true; 516feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk if (file_action.Open(STDERR_FILENO, stderr_path, read, write)) 517feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk AppendFileAction (file_action); 518feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk } 519feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk if (stdout_path) 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 5219b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li ProcessLaunchInfo::FileAction file_action; 5221c04a33c040dfb610952d62da9c93a53c291b2d7Wu-cheng Li const bool read = false; 5231c04a33c040dfb610952d62da9c93a53c291b2d7Wu-cheng Li const bool write = true; 5241c04a33c040dfb610952d62da9c93a53c291b2d7Wu-cheng Li if (file_action.Open(STDOUT_FILENO, stdout_path, read, write)) 5251c04a33c040dfb610952d62da9c93a53c291b2d7Wu-cheng Li AppendFileAction (file_action); 5261c04a33c040dfb610952d62da9c93a53c291b2d7Wu-cheng Li } 5271c04a33c040dfb610952d62da9c93a53c291b2d7Wu-cheng Li if (stdin_path) 528a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin { 5299b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li ProcessLaunchInfo::FileAction file_action; 530e0cc55ac725feec88c77b482d1990221c9a80f74Eino-Ville Talvala const bool read = true; 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const bool write = false; 5329b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li if (file_action.Open(STDIN_FILENO, stdin_path, read, write)) 5334c913801141163362dd5bb7c9784c83f69c11054Zhijun He AppendFileAction (file_action); 534788717ca599c714d58b2cb5deea1d37b4a711c07Eino-Ville Talvala } 535788717ca599c714d58b2cb5deea1d37b4a711c07Eino-Ville Talvala if (working_directory) 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SetWorkingDirectory(working_directory); 5379b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li } 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AppendFileAction (const FileAction &info) 541bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor { 542bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_file_actions.push_back(info); 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5449b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool 5464c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li AppendCloseFileAction (int fd) 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FileAction file_action; 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (file_action.Close (fd)) 550bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor { 551bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor AppendFileAction (file_action); 552bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor return true; 553bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 554bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor return false; 555bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 556bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 557bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor bool 55842419ce28a09eb63e29a8fef87e6f5534f41902fWu-cheng Li AppendDuplciateFileAction (int fd, int dup_fd) 55942419ce28a09eb63e29a8fef87e6f5534f41902fWu-cheng Li { 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FileAction file_action; 561bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor if (file_action.Duplicate (fd, dup_fd)) 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 563bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor AppendFileAction (file_action); 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 565bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 5669b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li return false; 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 568bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 569bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor bool 570bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor AppendOpenFileAction (int fd, const char *path, bool read, bool write) 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 57253b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li FileAction file_action; 57342419ce28a09eb63e29a8fef87e6f5534f41902fWu-cheng Li if (file_action.Open (fd, path, read, write)) 57442419ce28a09eb63e29a8fef87e6f5534f41902fWu-cheng Li { 57542419ce28a09eb63e29a8fef87e6f5534f41902fWu-cheng Li AppendFileAction (file_action); 57642419ce28a09eb63e29a8fef87e6f5534f41902fWu-cheng Li return true; 577bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 578bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor return false; 579bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 580bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool 582ffe1cf251a4f8469695b8acfa37270684dc1b70cWu-cheng Li AppendSuppressFileAction (int fd, bool read, bool write) 5839b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li { 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FileAction file_action; 585bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor if (file_action.Open (fd, "/dev/null", read, write)) 586bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor { 587bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor AppendFileAction (file_action); 588bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor return true; 589bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 59153b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li } 59242419ce28a09eb63e29a8fef87e6f5534f41902fWu-cheng Li 59342419ce28a09eb63e29a8fef87e6f5534f41902fWu-cheng Li void 59442419ce28a09eb63e29a8fef87e6f5534f41902fWu-cheng Li FinalizeFileActions (Target *target, Process *process); 595bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 596bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor size_t 597bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor GetNumFileActions () const 598bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor { 599bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor return m_file_actions.size(); 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 601bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 6029b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li const FileAction * 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetFileActionAtIndex (size_t idx) const 604bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor { 605fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis if (idx < m_file_actions.size()) 606fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis return &m_file_actions[idx]; 607fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis return NULL; 608fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis } 6099b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 610bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor const FileAction * 611bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor GetFileActionForFD (int fd) const 612bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor { 613bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor for (uint32_t idx=0, count=m_file_actions.size(); idx < count; ++idx) 614bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor { 615bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor if (m_file_actions[idx].GetFD () == fd) 616bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor return &m_file_actions[idx]; 617bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 618bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor return NULL; 619bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 620bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 621bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor Flags & 622bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor GetFlags () 6239b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li { 624bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor return m_flags; 625bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 626bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 627bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor const Flags & 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetFlags () const 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 630b8a10fe45657f2dcc50cae8a06805f8438a6937eWu-cheng Li return m_flags; 631feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk } 632b8a10fe45657f2dcc50cae8a06805f8438a6937eWu-cheng Li 633feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk const char * 634b8a10fe45657f2dcc50cae8a06805f8438a6937eWu-cheng Li GetWorkingDirectory () const 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (m_working_dir.empty()) 637feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk return NULL; 638feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk return m_working_dir.c_str(); 639feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk } 640feb50af361e4305a25758966b6b5df2738c00259Ruben Brunk 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SetWorkingDirectory (const char *working_dir) 643fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis { 644fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis if (working_dir && working_dir[0]) 645fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis m_working_dir.assign (working_dir); 646fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis else 647fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis m_working_dir.clear(); 648fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis } 649fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis 650fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis void 651fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis SwapWorkingDirectory (std::string &working_dir) 652fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis { 653fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis m_working_dir.swap (working_dir); 654fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis } 655fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis 656fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis 65732a972c693400db50717435139fa292a63bc937aEino-Ville Talvala const char * 658e309a0fd2e528039b3c1f1372a9a7095bcd852ccEino-Ville Talvala GetProcessPluginName () const 659e309a0fd2e528039b3c1f1372a9a7095bcd852ccEino-Ville Talvala { 660e309a0fd2e528039b3c1f1372a9a7095bcd852ccEino-Ville Talvala if (m_plugin_name.empty()) 661e309a0fd2e528039b3c1f1372a9a7095bcd852ccEino-Ville Talvala return NULL; 662e309a0fd2e528039b3c1f1372a9a7095bcd852ccEino-Ville Talvala return m_plugin_name.c_str(); 663108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala } 664108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala 665108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala void 666108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala SetProcessPluginName (const char *plugin) 667108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala { 668108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala if (plugin && plugin[0]) 669108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala m_plugin_name.assign (plugin); 670fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis else 671fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis m_plugin_name.clear(); 672fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis } 673fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis 674fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis void 675fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis Clear () 676dbc289d6c27968bd05cc547ca73579347c3adc99Glenn Kasten { 677fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis ProcessInfo::Clear(); 678fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis m_working_dir.clear(); 679bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_plugin_name.clear(); 680bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_flags.Clear(); 681bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_file_actions.clear(); 682bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 683bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 684bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnorprotected: 685bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor std::string m_working_dir; 686b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala std::string m_plugin_name; 687b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala Flags m_flags; // Bitwise OR of bits from lldb::LaunchFlags 688b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala std::vector<FileAction> m_file_actions; // File actions for any other files 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 690b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass ProcessLaunchCommandOptions : public Options 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 694bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 695341ff13689dfe822b598e626272ac2e80041b482Dan Egnor ProcessLaunchCommandOptions (CommandInterpreter &interpreter) : 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Options(interpreter) 697951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala { 698951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala // Keep default values of all options in one place: OptionParsingStarting () 699951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala OptionParsingStarting (); 700951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala } 701951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala 702bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor ~ProcessLaunchCommandOptions () 703a696f5d667227365da732481770767dcb330dd23Mathias Agopian { 704df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main } 705da0a56df963353a1f1bd1914fa31f870d982dd5aScott Main 7069b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li Error 7079b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li SetOptionValue (uint32_t option_idx, const char *option_arg); 708bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OptionParsingStarting () 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 7129b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li launch_info.Clear(); 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 714bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 715c5f94d8a4779050125145396ca83fbc862c7ed6bEino-Ville Talvala const OptionDefinition* 716c5f94d8a4779050125145396ca83fbc862c7ed6bEino-Ville Talvala GetDefinitions () 717c5f94d8a4779050125145396ca83fbc862c7ed6bEino-Ville Talvala { 718bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor return g_option_table; 719bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 720bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 721bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor // Options table: Required for subclasses of Options. 722bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 723bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor static OptionDefinition g_option_table[]; 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Instance variables to hold the values for command options. 7269b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ProcessLaunchInfo launch_info; 728bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor}; 729bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project//---------------------------------------------------------------------- 7314c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li// ProcessInstanceInfoMatch 7324c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li// 7334c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li// A class to help matching one ProcessInstanceInfo to another. 734664d72e6630522589cc013b25f5c9cdd5d949fa3Chih-yu Huang//---------------------------------------------------------------------- 735664d72e6630522589cc013b25f5c9cdd5d949fa3Chih-yu Huang 736664d72e6630522589cc013b25f5c9cdd5d949fa3Chih-yu Huangclass ProcessInstanceInfoMatch 737664d72e6630522589cc013b25f5c9cdd5d949fa3Chih-yu Huang{ 738664d72e6630522589cc013b25f5c9cdd5d949fa3Chih-yu Huangpublic: 739f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li ProcessInstanceInfoMatch () : 740f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li m_match_info (), 741f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li m_name_match_type (lldb_private::eNameMatchIgnore), 7429d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li m_match_all_users (false) 7434c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li { 7444c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li } 7454c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li 7469b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li ProcessInstanceInfoMatch (const char *process_name, 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lldb_private::NameMatchType process_name_match_type) : 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_match_info (), 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_name_match_type (process_name_match_type), 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_match_all_users (false) 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_match_info.SetName (process_name); 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7549b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ProcessInstanceInfo & 756108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala GetProcessInfo () 757bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor { 758bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor return m_match_info; 759108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala } 760108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala 761108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala const ProcessInstanceInfo & 762108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala GetProcessInfo () const 763108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala { 764108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala return m_match_info; 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 766bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 767bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor bool 768108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala GetMatchAllUsers () const 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_match_all_users; 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 77394927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp void 7747005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala SetMatchAllUsers (bool b) 7757005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala { 7767005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala m_match_all_users = b; 777a6118c6383c6f5703a576d08586a340fd71d28a4Dave Sparks } 778a6118c6383c6f5703a576d08586a340fd71d28a4Dave Sparks 77994927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp lldb_private::NameMatchType 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetNameMatchType () const 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_name_match_type; 783108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala } 784108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala 785108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala void 786108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala SetNameMatchType (lldb_private::NameMatchType name_match_type) 787108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala { 788108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala m_name_match_type = name_match_type; 789108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala } 790108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool 792bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor NameMatches (const char *process_name) const; 793bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 794108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala bool 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Matches (const ProcessInstanceInfo &proc_info) const; 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 79794927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp bool 79894927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp MatchAllProcesses () const; 79994927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp void 8007005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala Clear (); 8017005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 8027005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvalaprotected: 80394927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp ProcessInstanceInfo m_match_info; 80494927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp lldb_private::NameMatchType m_name_match_type; 80594927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp bool m_match_all_users; 80694927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp}; 80794927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp 80894927dffce1626898b59579dfc5af53b5de8cef6Andrew Harpclass ProcessInstanceInfoList 809108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala{ 810108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvalapublic: 811bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor ProcessInstanceInfoList () : 812108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala m_infos() 813108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala { 81494927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp } 815bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 816bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor void 817bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor Clear() 818108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala { 81994927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp m_infos.clear(); 820108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala } 821bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 822108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala uint32_t 823108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala GetSize() 824108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala { 825108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala return m_infos.size(); 826108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala } 827108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala 82894927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp void 829bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor Append (const ProcessInstanceInfo &info) 830bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor { 831bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor m_infos.push_back (info); 832108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala } 83394927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp 83494927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp const char * 83594927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp GetProcessNameAtIndex (uint32_t idx) 83694927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp { 83794927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp if (idx < m_infos.size()) 8387005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala return m_infos[idx].GetName(); 8397005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala return NULL; 8407005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala } 84194927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetProcessNameLengthAtIndex (uint32_t idx) 84494927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp { 8453f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li if (idx < m_infos.size()) 8463f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li return m_infos[idx].GetNameLength(); 847bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor return 0; 848bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 849bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 850bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor lldb::pid_t 851bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor GetProcessIDAtIndex (uint32_t idx) 852c10275abd6a494c93a025f683dde104a5d4f2793Wu-cheng Li { 853951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala if (idx < m_infos.size()) 854951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala return m_infos[idx].GetProcessID(); 855951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala return 0; 856951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala } 857951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala 858951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala bool 859951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala GetInfoAtIndex (uint32_t idx, ProcessInstanceInfo &info) 860951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala { 861951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala if (idx < m_infos.size()) 862951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala { 863951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala info = m_infos[idx]; 86494927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp return true; 865bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 866e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong return false; 867bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 868bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 869e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong // You must ensure "idx" is valid before calling this function 870e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong const ProcessInstanceInfo & 871e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong GetProcessInfoAtIndex (uint32_t idx) const 87294927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp { 873951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala assert (idx < m_infos.size()); 874951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala return m_infos[idx]; 8755b9bcda3a26e9b1f9b1eff28a2be8853d69614f0Wu-cheng Li } 87694927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp 877e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dongprotected: 878e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong typedef std::vector<ProcessInstanceInfo> collection; 879e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong collection m_infos; 880e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong}; 881e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong 882e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong 883e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong// This class tracks the Modification state of the process. Things that can currently modify 884e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong// the program are running the program (which will up the StopID) and writing memory (which 885e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong// will up the MemoryID.) 886e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong// FIXME: Should we also include modification of register states? 887e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong 888e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dongclass ProcessModID 889e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong{ 890e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dongfriend bool operator== (const ProcessModID &lhs, const ProcessModID &rhs); 891e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dongpublic: 892e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong ProcessModID () : 893e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong m_stop_id (0), 894e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong m_resume_id (0), 895e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong m_memory_id (0), 896e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong m_last_user_expression_resume (0), 897e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong m_running_user_expression (false) 898e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong {} 899e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong 900e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong ProcessModID (const ProcessModID &rhs) : 901e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong m_stop_id (rhs.m_stop_id), 902e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong m_memory_id (rhs.m_memory_id) 903e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong {} 90432a972c693400db50717435139fa292a63bc937aEino-Ville Talvala 90532a972c693400db50717435139fa292a63bc937aEino-Ville Talvala const ProcessModID & operator= (const ProcessModID &rhs) 90632a972c693400db50717435139fa292a63bc937aEino-Ville Talvala { 90732a972c693400db50717435139fa292a63bc937aEino-Ville Talvala if (this != &rhs) 90832a972c693400db50717435139fa292a63bc937aEino-Ville Talvala { 90932a972c693400db50717435139fa292a63bc937aEino-Ville Talvala m_stop_id = rhs.m_stop_id; 910e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong m_memory_id = rhs.m_memory_id; 911e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong } 912e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong return *this; 913e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong } 914e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong 915e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong ~ProcessModID () {} 916e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong 917e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong void BumpStopID () { 918e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong m_stop_id++; 919e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong } 920e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong 921e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong void BumpMemoryID () { m_memory_id++; } 922e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong 923e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong void BumpResumeID () { 924e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong m_resume_id++; 925e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong if (m_running_user_expression > 0) 926e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong m_last_user_expression_resume = m_resume_id; 927e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong } 928e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong 929e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong uint32_t GetStopID() const { return m_stop_id; } 930e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong uint32_t GetMemoryID () const { return m_memory_id; } 931e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong uint32_t GetResumeID () const { return m_resume_id; } 932e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong uint32_t GetLastUserExpressionResumeID () const { return m_last_user_expression_resume; } 933e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong 934e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong bool MemoryIDEqual (const ProcessModID &compare) const 935e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong { 936e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong return m_memory_id == compare.m_memory_id; 937e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong } 938e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong 9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool StopIDEqual (const ProcessModID &compare) const 9407005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala { 9417005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala return m_stop_id == compare.m_stop_id; 9427005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala } 9437005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 9447005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala void SetInvalid () 9457005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala { 9467005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala m_stop_id = UINT32_MAX; 9477005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala } 9487005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 9497005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala bool IsValid () const 9507005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala { 9517005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala return m_stop_id != UINT32_MAX; 9527005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala } 9537005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 9547005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala void 9557005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala SetRunningUserExpression (bool on) 9567005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala { 9577005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala // REMOVEME printf ("Setting running user expression %s at resume id %d - value: %d.\n", on ? "on" : "off", m_resume_id, m_running_user_expression); 9587005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala if (on) 9597005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala m_running_user_expression++; 9607005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala else 9617005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala m_running_user_expression--; 9627005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala } 9637005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 9647005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvalaprivate: 9657005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala uint32_t m_stop_id; 9667005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala uint32_t m_resume_id; 9677005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala uint32_t m_memory_id; 9687005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala uint32_t m_last_user_expression_resume; 9697005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala uint32_t m_running_user_expression; 9707005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala}; 9717005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvalainline bool operator== (const ProcessModID &lhs, const ProcessModID &rhs) 9727005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala{ 9737005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala if (lhs.StopIDEqual (rhs) 9747005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala && lhs.MemoryIDEqual (rhs)) 9757005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala return true; 9767005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala else 9777005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala return false; 9787005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala} 9797005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 9807005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvalainline bool operator!= (const ProcessModID &lhs, const ProcessModID &rhs) 9817005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala{ 9827005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala if (!lhs.StopIDEqual (rhs) 9837005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala || !lhs.MemoryIDEqual (rhs)) 9847005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala return true; 9857005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala else 9867005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala return false; 9877005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala} 9887005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 9897005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala//---------------------------------------------------------------------- 9907005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala/// @class Process Process.h "lldb/Target/Process.h" 9917005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala/// @brief A plug-in interface definition class for debugging a process. 9927005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala//---------------------------------------------------------------------- 9937005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvalaclass Process : 9947005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala public ReferenceCountedBaseVirtual<Process>, 9957005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala public UserID, 9967005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala public Broadcaster, 9977005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala public ExecutionContextScope, 9987005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala public PluginInterface, 9997005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala public ProcessInstanceSettings 10007005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala{ 10017005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvalafriend class ThreadList; 10027005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvalafriend class ClangFunction; // For WaitForStateChangeEventsPrivate 10037005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvalafriend class CommandObjectProcessLaunch; 10047005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvalafriend class ProcessEventData; 10057005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvalafriend class CommandObjectBreakpointCommand; 10067005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvalafriend class StopInfo; 10077005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 10087005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvalapublic: 10097005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 10107005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala //------------------------------------------------------------------ 10117005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala /// Broadcaster event bits definitions. 10127005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala //------------------------------------------------------------------ 10137005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala enum 10147005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala { 10157005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala eBroadcastBitStateChanged = (1 << 0), 10167005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala eBroadcastBitInterrupt = (1 << 1), 10177005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala eBroadcastBitSTDOUT = (1 << 2), 10187005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala eBroadcastBitSTDERR = (1 << 3) 10197005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala }; 10207005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 10217005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala enum 10227005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala { 10237005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala eBroadcastInternalStateControlStop = (1<<0), 10247005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala eBroadcastInternalStateControlPause = (1<<1), 10257005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala eBroadcastInternalStateControlResume = (1<<2) 10267005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala }; 10277005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 10287005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala //------------------------------------------------------------------ 10297005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala /// A notification structure that can be used by clients to listen 10307005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala /// for changes in a process's lifetime. 10317005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala /// 10327005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala /// @see RegisterNotificationCallbacks (const Notifications&) 10337005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala /// @see UnregisterNotificationCallbacks (const Notifications&) 10347005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala //------------------------------------------------------------------ 10357005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala#ifndef SWIG 10367005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala typedef struct 10377005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala { 10387005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala void *baton; 10397005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala void (*initialize)(void *baton, Process *process); 10407005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala void (*process_state_changed) (void *baton, Process *process, lldb::StateType state); 10417005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala } Notifications; 10427005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 10437005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala class ProcessEventData : 10447005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala public EventData 10457005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala { 10467005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala friend class Process; 10477005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 10487005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala public: 10497005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala ProcessEventData (); 10507005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala ProcessEventData (const lldb::ProcessSP &process, lldb::StateType state); 10517005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 10527005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala virtual ~ProcessEventData(); 10537005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 10547005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala static const ConstString & 10557005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala GetFlavorString (); 10567005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 10577005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala virtual const ConstString & 10587005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala GetFlavor () const; 10597005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 10607005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala const lldb::ProcessSP & 10617005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala GetProcessSP() const 10627005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala { 10637005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala return m_process_sp; 10647005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala } 10657005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala lldb::StateType 10667005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala GetState() const 10677005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala { 10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_state; 10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1070a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin bool 10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetRestarted () const 10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_restarted; 10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool 10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetInterrupted () const 10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_interrupted; 10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1080c62f9bd13327937aa2d2f20b44215397120634c1Dave Sparks 10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void 10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Dump (Stream *s) const; 10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void 1085c62f9bd13327937aa2d2f20b44215397120634c1Dave Sparks DoOnRemoval (Event *event_ptr); 1086c62f9bd13327937aa2d2f20b44215397120634c1Dave Sparks 1087e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks static const Process::ProcessEventData * 10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetEventDataFromEvent (const Event *event_ptr); 1089e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks 10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static lldb::ProcessSP 10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetProcessFromEvent (const Event *event_ptr); 1092c62f9bd13327937aa2d2f20b44215397120634c1Dave Sparks 1093e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks static lldb::StateType 10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetStateFromEvent (const Event *event_ptr); 1095e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks 10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static bool 10979b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li GetRestartedFromEvent (const Event *event_ptr); 1098c62f9bd13327937aa2d2f20b44215397120634c1Dave Sparks 1099ca367b717806c4c69190641c3361d3520a44ad08Eino-Ville Talvala static void 1100ca367b717806c4c69190641c3361d3520a44ad08Eino-Ville Talvala SetRestartedInEvent (Event *event_ptr, bool new_value); 11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1102a6118c6383c6f5703a576d08586a340fd71d28a4Dave Sparks static bool 1103a6118c6383c6f5703a576d08586a340fd71d28a4Dave Sparks GetInterruptedFromEvent (const Event *event_ptr); 1104a6118c6383c6f5703a576d08586a340fd71d28a4Dave Sparks 11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void 110694927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp SetInterruptedInEvent (Event *event_ptr, bool new_value); 1107a6118c6383c6f5703a576d08586a340fd71d28a4Dave Sparks 1108a6118c6383c6f5703a576d08586a340fd71d28a4Dave Sparks static bool 1109a6118c6383c6f5703a576d08586a340fd71d28a4Dave Sparks SetUpdateStateOnRemoval (Event *event_ptr); 111094927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp 11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 1112ca367b717806c4c69190641c3361d3520a44ad08Eino-Ville Talvala 11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void 11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SetUpdateStateOnRemoval() 11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1116e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks m_update_state++; 1117e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks } 1118e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks void 1119e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks SetRestarted (bool new_value) 1120e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks { 1121e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks m_restarted = new_value; 1122c62f9bd13327937aa2d2f20b44215397120634c1Dave Sparks } 1123f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li void 1124f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li SetInterrupted (bool new_value) 1125f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li { 1126f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li m_interrupted = new_value; 1127f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li } 1128f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li 1129f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li lldb::ProcessSP m_process_sp; 1130e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks lldb::StateType m_state; 1131e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks bool m_restarted; // For "eStateStopped" events, this is true if the target was automatically restarted. 1132e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks int m_update_state; 1133e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks bool m_interrupted; 11343f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li DISALLOW_COPY_AND_ASSIGN (ProcessEventData); 11353f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li 1136e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks }; 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class SettingsController : public UserSettingsController 1139bb1e275c0e684dd213f124da77110cdd9d6f090cWu-cheng Li { 11404c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li public: 1141f0d6a48c6ad852b84687127f14b1ffde02416dc4Wu-cheng Li 11424c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li SettingsController (); 11434c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li 11444c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li virtual 1145c62f9bd13327937aa2d2f20b44215397120634c1Dave Sparks ~SettingsController (); 11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1147e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks static SettingEntry global_settings_table[]; 11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SettingEntry instance_settings_table[]; 1149e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks 11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected: 11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11529d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li lldb::InstanceSettingsSP 11539d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li CreateInstanceSettings (const char *instance_name); 11549d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li 11559d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li private: 11569d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li 11579d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li // Class-wide settings. 11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DISALLOW_COPY_AND_ASSIGN (SettingsController); 11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void 11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SettingsInitialize (); 11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void 11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SettingsTerminate (); 11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static lldb::UserSettingsControllerSP & 11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetSettingsController (); 11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void 11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project UpdateInstanceName (); 11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 1179bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// Construct with a shared pointer to a target, and the Process listener. 1180bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor //------------------------------------------------------------------ 11817478ea6848c0059e65a4089b4ec2ff4158520870Wu-cheng Li Process(Target &target, Listener &listener); 11827478ea6848c0059e65a4089b4ec2ff4158520870Wu-cheng Li 1183df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main //------------------------------------------------------------------ 1184df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main /// Destructor. 11857478ea6848c0059e65a4089b4ec2ff4158520870Wu-cheng Li /// 1186df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main /// The destructor is virtual since this class is designed to be 1187df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main /// inherited from by the plug-in instance. 1188bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor //------------------------------------------------------------------ 1189bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor virtual 1190b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala ~Process(); 1191b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala 11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 1193b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// Find a Process plug-in that can debug \a module using the 11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// currently selected architecture. 11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// 11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// Scans all loaded plug-in interfaces that implement versions of 119769ea4e15e52c456537575d21443ac1efdb03a902Brad Fitzpatrick /// the Process plug-in interface and returns the first instance 119869ea4e15e52c456537575d21443ac1efdb03a902Brad Fitzpatrick /// that can debug the file. 119969ea4e15e52c456537575d21443ac1efdb03a902Brad Fitzpatrick /// 120069ea4e15e52c456537575d21443ac1efdb03a902Brad Fitzpatrick /// @param[in] module_sp 12019b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// The module shared pointer that this process will debug. 1202b4f95be03e018df825356fe2cd363797c66303f1Wu-cheng Li /// 1203b4f95be03e018df825356fe2cd363797c66303f1Wu-cheng Li /// @param[in] plugin_name 120483d3352cf7a67efd60732c0d40e5928f642f6808Eino-Ville Talvala /// If NULL, select the best plug-in for the binary. If non-NULL 12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// then look for a plugin whose PluginInfo's name matches 12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// this string. 120783d3352cf7a67efd60732c0d40e5928f642f6808Eino-Ville Talvala /// 120883d3352cf7a67efd60732c0d40e5928f642f6808Eino-Ville Talvala /// @see Process::CanDebug () 12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static Process* 121153b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li FindPlugin (Target &target, const char *plugin_name, Listener &listener); 12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1214bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 1215bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor //------------------------------------------------------------------ 1216bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// Static function that can be used with the \b host function 1217bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// Host::StartMonitoringChildProcess (). 1218bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// 1219bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// This function can be used by lldb_private::Process subclasses 1220bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// when they want to watch for a local process and have its exit 1221bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// status automatically set when the host child process exits. 122236322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li /// Subclasses should call Host::StartMonitoringChildProcess () 1223bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// with: 1224da0a56df963353a1f1bd1914fa31f870d982dd5aScott Main /// callback = Process::SetHostProcessExitStatus 12257478ea6848c0059e65a4089b4ec2ff4158520870Wu-cheng Li /// callback_baton = NULL 12267478ea6848c0059e65a4089b4ec2ff4158520870Wu-cheng Li /// pid = Process::GetID() 1227df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main /// monitor_signals = false 1228df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main //------------------------------------------------------------------ 1229bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor static bool 1230068ef42c3ffe1eccec10f97f08541304f679fe67Wu-cheng Li SetProcessExitStatus (void *callback_baton, // The callback baton which should be set to NULL 1231068ef42c3ffe1eccec10f97f08541304f679fe67Wu-cheng Li lldb::pid_t pid, // The process ID we want to monitor 1232bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor int signo, // Zero for no signal 12337478ea6848c0059e65a4089b4ec2ff4158520870Wu-cheng Li int status); // Exit value of process if signal is zero 123453b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li 1235b4f95be03e018df825356fe2cd363797c66303f1Wu-cheng Li lldb::ByteOrder 1236b4f95be03e018df825356fe2cd363797c66303f1Wu-cheng Li GetByteOrder () const; 1237b4f95be03e018df825356fe2cd363797c66303f1Wu-cheng Li 123883d3352cf7a67efd60732c0d40e5928f642f6808Eino-Ville Talvala uint32_t 123953b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li GetAddressByteSize () const; 124053b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li 124153b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li //------------------------------------------------------------------ 124253b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li /// Check if a plug-in instance can debug the file in \a module. 124353b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li /// 124453b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li /// Each plug-in is given a chance to say whether it can debug 1245108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala /// the file in \a module. If the Process plug-in instance can 1246108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala /// debug a file on the current system, it should return \b true. 1247108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala /// 1248108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala /// @return 12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// Returns \b true if this Process plug-in instance can 1250bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// debug the executable, \b false otherwise. 125183d3352cf7a67efd60732c0d40e5928f642f6808Eino-Ville Talvala //------------------------------------------------------------------ 125283d3352cf7a67efd60732c0d40e5928f642f6808Eino-Ville Talvala virtual bool 1253108708b4873fb05cb029b5bcb29a4e917004ca30Eino-Ville Talvala CanDebug (Target &target, 12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool plugin_specified_by_name) = 0; 12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1257f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li //------------------------------------------------------------------ 1258248ba23ad28c1f8fb69904663204df08c5818700James Dong /// This object is about to be destroyed, do any necessary cleanup. 1259248ba23ad28c1f8fb69904663204df08c5818700James Dong /// 1260f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// Subclasses that override this method should always call this 12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// superclass method. 12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void 12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Finalize(); 1265bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 1266bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor //------------------------------------------------------------------ 1267bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// Launch a new process. 1268244f8c26365a303d9dd861bd48a29a4b48578da1Chih-Chung Chang /// 1269bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// Launch a new process by spawning a new process using the 1270bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// target object's executable module's file as the file to launch. 1271244f8c26365a303d9dd861bd48a29a4b48578da1Chih-Chung Chang /// Arguments are given in \a argv, and the environment variables 1272244f8c26365a303d9dd861bd48a29a4b48578da1Chih-Chung Chang /// are in \a envp. Standard input and output files can be 1273244f8c26365a303d9dd861bd48a29a4b48578da1Chih-Chung Chang /// optionally re-directed to \a stdin_path, \a stdout_path, and 1274f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// \a stderr_path. 1275248ba23ad28c1f8fb69904663204df08c5818700James Dong /// 1276248ba23ad28c1f8fb69904663204df08c5818700James Dong /// This function is not meant to be overridden by Process 1277f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// subclasses. It will first call Process::WillLaunch (Module *) 1278f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// and if that returns \b true, Process::DoLaunch (Module*, 1279f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// char const *[],char const *[],const char *,const char *, 1280f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// const char *) will be called to actually do the launching. If 1281f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// DoLaunch returns \b true, then Process::DidLaunch() will be 1282f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// called. 1283f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// 1284f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// @param[in] argv 1285f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// The argument array. 1286f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// 1287f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// @param[in] envp 1288f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// The environment array. 1289f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// 1290f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// @param[in] launch_flags 1291f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// Flags to modify the launch (@see lldb::LaunchFlags) 1292f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// 1293f05c1d63d16e790ac78c5854bb12374f45d6118eWu-cheng Li /// @param[in] stdin_path 1294244f8c26365a303d9dd861bd48a29a4b48578da1Chih-Chung Chang /// The path to use when re-directing the STDIN of the new 1295244f8c26365a303d9dd861bd48a29a4b48578da1Chih-Chung Chang /// process. If all stdXX_path arguments are NULL, a pseudo 1296244f8c26365a303d9dd861bd48a29a4b48578da1Chih-Chung Chang /// terminal will be used. 1297244f8c26365a303d9dd861bd48a29a4b48578da1Chih-Chung Chang /// 12989d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// @param[in] stdout_path 12999d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// The path to use when re-directing the STDOUT of the new 13006574539baecc8610529596554b7bca0f21b334b8Wu-cheng Li /// process. If all stdXX_path arguments are NULL, a pseudo 13016574539baecc8610529596554b7bca0f21b334b8Wu-cheng Li /// terminal will be used. 13026574539baecc8610529596554b7bca0f21b334b8Wu-cheng Li /// 13036574539baecc8610529596554b7bca0f21b334b8Wu-cheng Li /// @param[in] stderr_path 1304b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// The path to use when re-directing the STDERR of the new 1305b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// process. If all stdXX_path arguments are NULL, a pseudo 1306b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// terminal will be used. 13079d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// 1308b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// @param[in] working_directory 13099d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// The working directory to have the child process run in 13109d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// 13119d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// @return 13129d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// An error object. Call GetID() to get the process ID if 13139d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// the error object is success. 13149d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li //------------------------------------------------------------------ 13156574539baecc8610529596554b7bca0f21b334b8Wu-cheng Li virtual Error 13169d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li Launch (const ProcessLaunchInfo &launch_info); 13179d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li 13189d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li //------------------------------------------------------------------ 13199d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// Attach to an existing process using a process ID. 13209d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// 13219d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// This function is not meant to be overridden by Process 13229d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// subclasses. It will first call Process::WillAttach (lldb::pid_t) 13239d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// and if that returns \b true, Process::DoAttach (lldb::pid_t) will 13249d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// be called to actually do the attach. If DoAttach returns \b 13259d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// true, then Process::DidAttach() will be called. 13269d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// 13279d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// @param[in] pid 13289d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// The process ID that we should attempt to attach to. 13299d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// 13309d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// @return 13319d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// Returns \a pid if attaching was successful, or 13329d062cfe94dcd24b1d61fc83e5de565cb67965b1Wu-cheng Li /// LLDB_INVALID_PROCESS_ID if attaching fails. 1333bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor //------------------------------------------------------------------ 1334bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor virtual Error 1335bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor Attach (lldb::pid_t pid); 1336b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala 1337b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala //------------------------------------------------------------------ 1338b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// Attach to an existing process by process name. 13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// 1340b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// This function is not meant to be overridden by Process 13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// subclasses. It will first call 13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// Process::WillAttach (const char *) and if that returns \b 13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// true, Process::DoAttach (const char *) will be called to 1344bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// actually do the attach. If DoAttach returns \b true, then 1345bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// Process::DidAttach() will be called. 1346bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// 1347bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// @param[in] process_name 1348bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// A process name to match against the current process list. 13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// 13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// @return 13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// Returns \a pid if attaching was successful, or 13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// LLDB_INVALID_PROCESS_ID if attaching fails. 13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 1354bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor virtual Error 1355bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor Attach (const char *process_name, bool wait_for_launch); 1356bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 1357b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala virtual Error 1358b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala ConnectRemote (const char *remote_url); 1359b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala 13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool 1361b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala AttachedToProcess() const 13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_attached_to_process; 1364bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 1365bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 1366bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor //------------------------------------------------------------------ 13679b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// Get the image information address for the current process. 13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// 13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// Some runtimes have system functions that can help dynamic 13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// loaders locate the dynamic loader information needed to observe 13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// shared libraries being loaded or unloaded. This function is 13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// in the Process interface (as opposed to the DynamicLoader 13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// interface) to ensure that remote debugging can take advantage of 13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// this functionality. 1375bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// 13769b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// @return 1377bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// The address of the dynamic loader information, or 13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// LLDB_INVALID_ADDRESS if this is not supported by this 13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// interface. 13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 1381e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks virtual lldb::addr_t 1382e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks GetImageInfoAddress (); 1383e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong 1384e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks //------------------------------------------------------------------ 1385e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks /// Load a shared library into this process. 13869b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// 13879b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// Try and load a shared library into the current process. This 13889b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// call might fail in the dynamic loader plug-in says it isn't safe 13899b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// to try and load shared libraries at the moment. 13909b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// 1391e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong /// @param[in] image_spec 1392e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong /// The image file spec that points to the shared library that 13939b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// you want to load. 13949b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// 13959b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// @param[out] error 13969b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// An error object that gets filled in with any errors that 13979b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// might occur when trying to load the shared library. 1398e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks /// 1399bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// @return 1400bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// A token that represents the shared library that can be 1401bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// later used to unload the shared library. A value of 140242419ce28a09eb63e29a8fef87e6f5534f41902fWu-cheng Li /// LLDB_INVALID_IMAGE_TOKEN will be returned if the shared 140342419ce28a09eb63e29a8fef87e6f5534f41902fWu-cheng Li /// library can't be opened. 140442419ce28a09eb63e29a8fef87e6f5534f41902fWu-cheng Li //------------------------------------------------------------------ 140540057ce749c8c4d274db0352a2af4344bda92dbaWu-cheng Li virtual uint32_t 1406bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor LoadImage (const FileSpec &image_spec, Error &error); 1407bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 140840057ce749c8c4d274db0352a2af4344bda92dbaWu-cheng Li virtual Error 1409bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor UnloadImage (uint32_t image_token); 1410bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 1411e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks //------------------------------------------------------------------ 1412bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// Register for process and thread notifications. 1413e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks /// 1414e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks /// Clients can register nofication callbacks by filling out a 1415e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks /// Process::Notifications structure and calling this function. 14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// 14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// @param[in] callbacks 1418e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks /// A structure that contains the notification baton and 14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// callback functions. 1420e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong /// 1421e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong /// @see Process::Notifications 1422e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong //------------------------------------------------------------------ 1423e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong#ifndef SWIG 1424e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong void 1425e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong RegisterNotificationCallbacks (const Process::Notifications& callbacks); 1426e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong#endif 1427e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong //------------------------------------------------------------------ 1428e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong /// Unregister for process and thread notifications. 1429e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong /// 1430e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong /// Clients can unregister nofication callbacks by passing a copy of 1431e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong /// the original baton and callbacks in \a callbacks. 1432e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong /// 1433e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong /// @param[in] callbacks 1434e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong /// A structure that contains the notification baton and 1435e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong /// callback functions. 1436e00cab707dcaf6f05adb5ccb9c80fdf25c483427James Dong /// 1437e9c6c9ccfde7a642a4c0554e2d066f3dbbea98ceWu-cheng Li /// @return 14389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// Returns \b true if the notification callbacks were 14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// successfully removed from the process, \b false otherwise. 1440e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks /// 1441bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// @see Process::Notifications 14423f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li //------------------------------------------------------------------ 14433f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li#ifndef SWIG 1444bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor bool 1445bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor UnregisterNotificationCallbacks (const Process::Notifications& callbacks); 1446bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor#endif 1447bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor //================================================================== 1448bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor // Built in Process Control functions 1449bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor //================================================================== 1450bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor //------------------------------------------------------------------ 1451bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// Resumes all of a process's threads as configured using the 1452bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// Thread run control functions. 145336f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// 145436f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// Threads for a process should be updated with one of the run 145536f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// control actions (resume, step, or suspend) that they should take 14560ca25191c663ef229f1f475b17899f2017ed6980Wu-cheng Li /// when the process is resumed. If no run control action is given 14570ca25191c663ef229f1f475b17899f2017ed6980Wu-cheng Li /// to a thread it will be resumed by default. 1458bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// 145936f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// This function is not meant to be overridden by Process 146036f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// subclasses. This function will take care of disabling any 146136f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// breakpoints that threads may be stopped at, single stepping, and 146236f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// re-enabling breakpoints, and enabling the basic flow control 1463bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// that the plug-in instances need not worry about. 14643f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li /// 14653f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li /// @return 14668cbb8f5e1f939b03515cb4d5942c3fcb226efb9eWu-cheng Li /// Returns an error object. 14670ca25191c663ef229f1f475b17899f2017ed6980Wu-cheng Li /// 14680ca25191c663ef229f1f475b17899f2017ed6980Wu-cheng Li /// @see Thread:Resume() 146936f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// @see Thread:Step() 147036f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// @see Thread:Suspend() 147136f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li //------------------------------------------------------------------ 147236f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li Error 14732fe6fcaff4bdab45484055d6c18dd96d1b7b7be1Wu-cheng Li Resume (); 14742fe6fcaff4bdab45484055d6c18dd96d1b7b7be1Wu-cheng Li 14752fe6fcaff4bdab45484055d6c18dd96d1b7b7be1Wu-cheng Li //------------------------------------------------------------------ 1476b982fb4fd36a3cd24a0bb17c964139fe4c9cbb47Wu-cheng Li /// Halts a running process. 1477b982fb4fd36a3cd24a0bb17c964139fe4c9cbb47Wu-cheng Li /// 1478b982fb4fd36a3cd24a0bb17c964139fe4c9cbb47Wu-cheng Li /// This function is not meant to be overridden by Process 1479d1d7706fce19a9a0cf71ff9b65f3aba9b89eeb3bChih-Chung Chang /// subclasses. 148069ea4e15e52c456537575d21443ac1efdb03a902Brad Fitzpatrick /// If the process is successfully halted, a eStateStopped 14812fe6fcaff4bdab45484055d6c18dd96d1b7b7be1Wu-cheng Li /// process event with GetInterrupted will be broadcast. If false, we will 14822fe6fcaff4bdab45484055d6c18dd96d1b7b7be1Wu-cheng Li /// halt the process with no events generated by the halt. 1483d1d7706fce19a9a0cf71ff9b65f3aba9b89eeb3bChih-Chung Chang /// 148469ea4e15e52c456537575d21443ac1efdb03a902Brad Fitzpatrick /// @return 148569ea4e15e52c456537575d21443ac1efdb03a902Brad Fitzpatrick /// Returns an error object. If the error is empty, the process is halted. 1486b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang /// otherwise the halt has failed. 1487724c52244423feced2677fbd1f905e0b8b0639f2Chih-Chung Chang //------------------------------------------------------------------ 1488724c52244423feced2677fbd1f905e0b8b0639f2Chih-Chung Chang Error 1489724c52244423feced2677fbd1f905e0b8b0639f2Chih-Chung Chang Halt (); 1490724c52244423feced2677fbd1f905e0b8b0639f2Chih-Chung Chang 1491724c52244423feced2677fbd1f905e0b8b0639f2Chih-Chung Chang //------------------------------------------------------------------ 1492724c52244423feced2677fbd1f905e0b8b0639f2Chih-Chung Chang /// Detaches from a running or stopped process. 1493724c52244423feced2677fbd1f905e0b8b0639f2Chih-Chung Chang /// 1494724c52244423feced2677fbd1f905e0b8b0639f2Chih-Chung Chang /// This function is not meant to be overridden by Process 1495724c52244423feced2677fbd1f905e0b8b0639f2Chih-Chung Chang /// subclasses. 1496724c52244423feced2677fbd1f905e0b8b0639f2Chih-Chung Chang /// 1497724c52244423feced2677fbd1f905e0b8b0639f2Chih-Chung Chang /// @return 1498724c52244423feced2677fbd1f905e0b8b0639f2Chih-Chung Chang /// Returns an error object. 1499724c52244423feced2677fbd1f905e0b8b0639f2Chih-Chung Chang //------------------------------------------------------------------ 1500724c52244423feced2677fbd1f905e0b8b0639f2Chih-Chung Chang Error 1501b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang Detach (); 15022fe6fcaff4bdab45484055d6c18dd96d1b7b7be1Wu-cheng Li 15032fe6fcaff4bdab45484055d6c18dd96d1b7b7be1Wu-cheng Li //------------------------------------------------------------------ 15042fe6fcaff4bdab45484055d6c18dd96d1b7b7be1Wu-cheng Li /// Kills the process and shuts down all threads that were spawned 15052fe6fcaff4bdab45484055d6c18dd96d1b7b7be1Wu-cheng Li /// to track and monitor the process. 15062fe6fcaff4bdab45484055d6c18dd96d1b7b7be1Wu-cheng Li /// 15072fe6fcaff4bdab45484055d6c18dd96d1b7b7be1Wu-cheng Li /// This function is not meant to be overridden by Process 15082fe6fcaff4bdab45484055d6c18dd96d1b7b7be1Wu-cheng Li /// subclasses. 1509724c52244423feced2677fbd1f905e0b8b0639f2Chih-Chung Chang /// 1510724c52244423feced2677fbd1f905e0b8b0639f2Chih-Chung Chang /// @return 1511b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang /// Returns an error object. 1512d303362ac21fb9de40f2f2366cbe7ecaa113dc12Wu-cheng Li //------------------------------------------------------------------ 1513d303362ac21fb9de40f2f2366cbe7ecaa113dc12Wu-cheng Li Error 1514d303362ac21fb9de40f2f2366cbe7ecaa113dc12Wu-cheng Li Destroy(); 1515d303362ac21fb9de40f2f2366cbe7ecaa113dc12Wu-cheng Li 1516d1d7706fce19a9a0cf71ff9b65f3aba9b89eeb3bChih-Chung Chang //------------------------------------------------------------------ 1517e7bd22a9d9441916aa9c67d80ee9f02a2d3e10e5Chih-Chung Chang /// Sends a process a UNIX signal \a signal. 1518e7bd22a9d9441916aa9c67d80ee9f02a2d3e10e5Chih-Chung Chang /// 15192fe6fcaff4bdab45484055d6c18dd96d1b7b7be1Wu-cheng Li /// This function is not meant to be overridden by Process 1520d1d7706fce19a9a0cf71ff9b65f3aba9b89eeb3bChih-Chung Chang /// subclasses. 1521d1d7706fce19a9a0cf71ff9b65f3aba9b89eeb3bChih-Chung Chang /// 1522d1d7706fce19a9a0cf71ff9b65f3aba9b89eeb3bChih-Chung Chang /// @return 1523d1d7706fce19a9a0cf71ff9b65f3aba9b89eeb3bChih-Chung Chang /// Returns an error object. 1524487acdfb4eca3859fd688a1ff0a32fe6314b68f6Eino-Ville Talvala //------------------------------------------------------------------ 152569fe527bea12f262bfb1a5838f40e3433ad3cb78Eino-Ville Talvala Error 1526487acdfb4eca3859fd688a1ff0a32fe6314b68f6Eino-Ville Talvala Signal (int signal); 1527487acdfb4eca3859fd688a1ff0a32fe6314b68f6Eino-Ville Talvala 1528487acdfb4eca3859fd688a1ff0a32fe6314b68f6Eino-Ville Talvala virtual UnixSignals & 1529487acdfb4eca3859fd688a1ff0a32fe6314b68f6Eino-Ville Talvala GetUnixSignals () 1530487acdfb4eca3859fd688a1ff0a32fe6314b68f6Eino-Ville Talvala { 153169fe527bea12f262bfb1a5838f40e3433ad3cb78Eino-Ville Talvala return m_unix_signals; 1532487acdfb4eca3859fd688a1ff0a32fe6314b68f6Eino-Ville Talvala } 1533487acdfb4eca3859fd688a1ff0a32fe6314b68f6Eino-Ville Talvala 1534487acdfb4eca3859fd688a1ff0a32fe6314b68f6Eino-Ville Talvala //================================================================== 1535487acdfb4eca3859fd688a1ff0a32fe6314b68f6Eino-Ville Talvala // Plug-in Process Control Overrides 1536487acdfb4eca3859fd688a1ff0a32fe6314b68f6Eino-Ville Talvala //================================================================== 153769fe527bea12f262bfb1a5838f40e3433ad3cb78Eino-Ville Talvala 153869fe527bea12f262bfb1a5838f40e3433ad3cb78Eino-Ville Talvala //------------------------------------------------------------------ 153969fe527bea12f262bfb1a5838f40e3433ad3cb78Eino-Ville Talvala /// Called before attaching to a process. 1540487acdfb4eca3859fd688a1ff0a32fe6314b68f6Eino-Ville Talvala /// 1541487acdfb4eca3859fd688a1ff0a32fe6314b68f6Eino-Ville Talvala /// Allow Process plug-ins to execute some code before attaching a 1542487acdfb4eca3859fd688a1ff0a32fe6314b68f6Eino-Ville Talvala /// process. 1543487acdfb4eca3859fd688a1ff0a32fe6314b68f6Eino-Ville Talvala /// 154469fe527bea12f262bfb1a5838f40e3433ad3cb78Eino-Ville Talvala /// @return 1545487acdfb4eca3859fd688a1ff0a32fe6314b68f6Eino-Ville Talvala /// Returns an error object. 154669fe527bea12f262bfb1a5838f40e3433ad3cb78Eino-Ville Talvala //------------------------------------------------------------------ 154769fe527bea12f262bfb1a5838f40e3433ad3cb78Eino-Ville Talvala virtual Error 15484f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala WillAttachToProcessWithID (lldb::pid_t pid) 15494f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala { 15504f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala return Error(); 15514f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala } 15524f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala 15534f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala //------------------------------------------------------------------ 15544f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala /// Called before attaching to a process. 15554f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala /// 15564f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala /// Allow Process plug-ins to execute some code before attaching a 15574f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala /// process. 15584f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala /// 15594f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala /// @return 15604f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala /// Returns an error object. 15616653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin //------------------------------------------------------------------ 15626653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin virtual Error 15636653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin WillAttachToProcessWithName (const char *process_name, bool wait_for_launch) 15646653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin { 15656653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin return Error(); 15666653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin } 15676653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin 15686653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin virtual Error 15696653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin DoConnectRemote (const char *remote_url) 15706653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin { 15716653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin Error error; 15726653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin error.SetErrorString ("remote connections are not supported"); 15736653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin return error; 15746653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin } 15756653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin 15766653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin //------------------------------------------------------------------ 15776653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin /// Attach to an existing process using a process ID. 15786653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin /// 15796653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin /// @param[in] pid 15806653362f6b5c5854bd88244bcecad72d11bf9404Igor Murashkin /// The process ID that we should attempt to attach to. 15814f8e5ce21df881796d05a1b2117dd8868570a57bEino-Ville Talvala /// 158269fe527bea12f262bfb1a5838f40e3433ad3cb78Eino-Ville Talvala /// @return 158369fe527bea12f262bfb1a5838f40e3433ad3cb78Eino-Ville Talvala /// Returns \a pid if attaching was successful, or 1584bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// LLDB_INVALID_PROCESS_ID if attaching fails. 1585bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor //------------------------------------------------------------------ 1586bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor virtual Error 1587bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor DoAttachToProcessWithID (lldb::pid_t pid) = 0; 1588b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala 1589b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala //------------------------------------------------------------------ 1590b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// Attach to an existing process using a partial process name. 1591e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks /// 1592b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// @param[in] process_name 15933f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li /// The name of the process to attach to. 1594e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks /// 1595e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks /// @param[in] wait_for_launch 1596bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// If \b true, wait for the process to be launched and attach 159736f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// as soon as possible after it does launch. If \b false, then 159836f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// search for a matching process the currently exists. 15993f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li /// 160036f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// @return 160136f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// Returns \a pid if attaching was successful, or 1602e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks /// LLDB_INVALID_PROCESS_ID if attaching fails. 1603e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks //------------------------------------------------------------------ 16043f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li virtual Error 1605e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks DoAttachToProcessWithName (const char *process_name, bool wait_for_launch) 1606e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks { 1607e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks Error error; 16083f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li error.SetErrorString("attach by name is not supported"); 160936f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li return error; 16108cbb8f5e1f939b03515cb4d5942c3fcb226efb9eWu-cheng Li } 16113f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li 16128cbb8f5e1f939b03515cb4d5942c3fcb226efb9eWu-cheng Li //------------------------------------------------------------------ 1613e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks /// Called after attaching a process. 16143f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li /// 1615e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks /// Allow Process plug-ins to execute some code after attaching to 16163f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li /// a process. 1617e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks //------------------------------------------------------------------ 16189b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li virtual void 16194c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li DidAttach () {} 16204c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li 16214c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li 1622b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala //------------------------------------------------------------------ 1623b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// Called before launching to a process. 16244c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// 1625b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// Allow Process plug-ins to execute some code before launching a 16264c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// process. 16274c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// 16284c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// @return 16294c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// Returns an error object. 16304c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li //------------------------------------------------------------------ 163153b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li virtual Error 1632464cb21e2aaa448072449b82156f18bd64c0e613Joe Fernandez WillLaunch (Module* module) 16334c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li { 1634f0d6a48c6ad852b84687127f14b1ffde02416dc4Wu-cheng Li return Error(); 16354c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li } 16364c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li 16374c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li //------------------------------------------------------------------ 1638c0c683b3344c67700882f8059e7d18266366daa9Wu-cheng Li /// Launch a new process. 16394c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// 16404c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// Launch a new process by spawning a new process using \a module's 16414c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// file as the file to launch. Arguments are given in \a argv, 1642c0c683b3344c67700882f8059e7d18266366daa9Wu-cheng Li /// and the environment variables are in \a envp. Standard input 16434c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// and output files can be optionally re-directed to \a stdin_path, 16444c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// \a stdout_path, and \a stderr_path. 16454c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// 16464c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// @param[in] module 16474c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// The module from which to extract the file specification and 16484c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// launch. 16494c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// 1650c0c683b3344c67700882f8059e7d18266366daa9Wu-cheng Li /// @param[in] argv 16514c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// The argument array. 16524c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// 16534c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// @param[in] envp 16544c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// The environment array. 1655c0c683b3344c67700882f8059e7d18266366daa9Wu-cheng Li /// 16564c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// @param[in] launch_flags 16574c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// Flags to modify the launch (@see lldb::LaunchFlags) 16588c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// 16594c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// @param[in] stdin_path 16608c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// The path to use when re-directing the STDIN of the new 16618c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// process. If all stdXX_path arguments are NULL, a pseudo 16628c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// terminal will be used. 16638c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// 16648c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// @param[in] stdout_path 16658c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// The path to use when re-directing the STDOUT of the new 16668c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// process. If all stdXX_path arguments are NULL, a pseudo 16678c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// terminal will be used. 16688c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// 16698c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// @param[in] stderr_path 16708c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// The path to use when re-directing the STDERR of the new 16718c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// process. If all stdXX_path arguments are NULL, a pseudo 16728c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// terminal will be used. 16734c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// 1674c0c683b3344c67700882f8059e7d18266366daa9Wu-cheng Li /// @param[in] working_directory 16754c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// The working directory to have the child process run in 16764c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// 16774c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// @return 16784c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// A new valid process ID, or LLDB_INVALID_PROCESS_ID if 1679c0c683b3344c67700882f8059e7d18266366daa9Wu-cheng Li /// launching fails. 16804c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li //------------------------------------------------------------------ 1681c0c683b3344c67700882f8059e7d18266366daa9Wu-cheng Li virtual Error 16824c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li DoLaunch (Module *exe_module, 16834c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li const ProcessLaunchInfo &launch_info) = 0; 16844c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li 1685c0c683b3344c67700882f8059e7d18266366daa9Wu-cheng Li //------------------------------------------------------------------ 16864c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// Called after launching a process. 16874c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// 16884c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// Allow Process plug-ins to execute some code after launching 16894c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// a process. 1690c0c683b3344c67700882f8059e7d18266366daa9Wu-cheng Li //------------------------------------------------------------------ 16914c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li virtual void 1692464cb21e2aaa448072449b82156f18bd64c0e613Joe Fernandez DidLaunch () {} 16934c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li 16944c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li 16954c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li 16964c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li //------------------------------------------------------------------ 16974c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// Called before resuming to a process. 16984c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// 16994c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// Allow Process plug-ins to execute some code before resuming a 17004c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// process. 17014c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// 17024c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// @return 1703464cb21e2aaa448072449b82156f18bd64c0e613Joe Fernandez /// Returns an error object. 170453b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li //------------------------------------------------------------------ 1705464cb21e2aaa448072449b82156f18bd64c0e613Joe Fernandez virtual Error 1706464cb21e2aaa448072449b82156f18bd64c0e613Joe Fernandez WillResume () { return Error(); } 17074c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li 1708464cb21e2aaa448072449b82156f18bd64c0e613Joe Fernandez //------------------------------------------------------------------ 1709b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// Resumes all of a process's threads as configured using the 1710b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// Thread run control functions. 17114c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// 1712b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// Threads for a process should be updated with one of the run 1713f0d6a48c6ad852b84687127f14b1ffde02416dc4Wu-cheng Li /// control actions (resume, step, or suspend) that they should take 1714c0c683b3344c67700882f8059e7d18266366daa9Wu-cheng Li /// when the process is resumed. If no run control action is given 1715c0c683b3344c67700882f8059e7d18266366daa9Wu-cheng Li /// to a thread it will be resumed by default. 1716c0c683b3344c67700882f8059e7d18266366daa9Wu-cheng Li /// 1717bb1e275c0e684dd213f124da77110cdd9d6f090cWu-cheng Li /// @return 1718bb1e275c0e684dd213f124da77110cdd9d6f090cWu-cheng Li /// Returns \b true if the process successfully resumes using 1719bb1e275c0e684dd213f124da77110cdd9d6f090cWu-cheng Li /// the thread run control actions, \b false otherwise. 17204c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// 17214c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// @see Thread:Resume() 17224c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// @see Thread:Step() 1723c0c683b3344c67700882f8059e7d18266366daa9Wu-cheng Li /// @see Thread:Suspend() 1724c0c683b3344c67700882f8059e7d18266366daa9Wu-cheng Li //------------------------------------------------------------------ 17258c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li virtual Error 17268c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li DoResume () = 0; 17278c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li 17288c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li //------------------------------------------------------------------ 1729f0d6a48c6ad852b84687127f14b1ffde02416dc4Wu-cheng Li /// Called after resuming a process. 1730f0d6a48c6ad852b84687127f14b1ffde02416dc4Wu-cheng Li /// 1731f0d6a48c6ad852b84687127f14b1ffde02416dc4Wu-cheng Li /// Allow Process plug-ins to execute some code after resuming 17328c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// a process. 17338c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li //------------------------------------------------------------------ 17348c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li virtual void 17358c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li DidResume () {} 17368c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li 17378c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li 17388c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li //------------------------------------------------------------------ 17398c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// Called before halting to a process. 17408c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// 17418c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// Allow Process plug-ins to execute some code before halting a 17428c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// process. 17438c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// 17448c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// @return 17458c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li /// Returns an error object. 17468c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li //------------------------------------------------------------------ 17478c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li virtual Error 17488c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li WillHalt () { return Error(); } 17498c13670c13a7a965884d92193b039e26c96b95c6Wu-cheng Li 17504c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li //------------------------------------------------------------------ 1751464cb21e2aaa448072449b82156f18bd64c0e613Joe Fernandez /// Halts a running process. 17524c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// 1753bb1e275c0e684dd213f124da77110cdd9d6f090cWu-cheng Li /// DoHalt must produce one and only one stop StateChanged event if it actually 17544c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// stops the process. If the stop happens through some natural event (for 17554c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// instance a SIGSTOP), then forwarding that event will do. Otherwise, you must 17568df3b2b3989df44953153603681e03140fd853d6Eino-Ville Talvala /// generate the event manually. Note also, the private event thread is stopped when 17578df3b2b3989df44953153603681e03140fd853d6Eino-Ville Talvala /// DoHalt is run to prevent the events generated while halting to trigger 17588df3b2b3989df44953153603681e03140fd853d6Eino-Ville Talvala /// other state changes before the halt is complete. 17598df3b2b3989df44953153603681e03140fd853d6Eino-Ville Talvala /// 17608df3b2b3989df44953153603681e03140fd853d6Eino-Ville Talvala /// @param[out] caused_stop 17618df3b2b3989df44953153603681e03140fd853d6Eino-Ville Talvala /// If true, then this Halt caused the stop, otherwise, the 17628df3b2b3989df44953153603681e03140fd853d6Eino-Ville Talvala /// process was already stopped. 17638df3b2b3989df44953153603681e03140fd853d6Eino-Ville Talvala /// 17644c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// @return 1765464cb21e2aaa448072449b82156f18bd64c0e613Joe Fernandez /// Returns \b true if the process successfully halts, \b false 17664c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// otherwise. 1767bb1e275c0e684dd213f124da77110cdd9d6f090cWu-cheng Li //------------------------------------------------------------------ 1768d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua virtual Error 1769d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua DoHalt (bool &caused_stop) = 0; 1770d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua 1771d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua //------------------------------------------------------------------ 1772d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua /// Called after halting a process. 1773d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua /// 1774d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua /// Allow Process plug-ins to execute some code after halting 1775d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua /// a process. 1776d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua //------------------------------------------------------------------ 1777d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua virtual void 1778d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua DidHalt () {} 1779d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua 1780d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua //------------------------------------------------------------------ 1781d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua /// Called before detaching from a process. 1782d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua /// 1783d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua /// Allow Process plug-ins to execute some code before detaching 1784d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua /// from a process. 1785d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua /// 1786d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua /// @return 1787d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua /// Returns an error object. 1788d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua //------------------------------------------------------------------ 1789d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua virtual Error 1790d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua WillDetach () 1791d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua { 1792d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua return Error(); 1793d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua } 1794d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua 1795d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua //------------------------------------------------------------------ 1796d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua /// Detaches from a running or stopped process. 1797d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua /// 1798d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua /// @return 1799d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua /// Returns \b true if the process successfully detaches, \b 1800d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua /// false otherwise. 1801d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua //------------------------------------------------------------------ 1802d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua virtual Error 1803d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua DoDetach () = 0; 1804d52b308916d5f207791788e00bc48baecb90d8b8Wei Hua 18054c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li //------------------------------------------------------------------ 18064c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// Called after detaching from a process. 1807bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// 1808bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// Allow Process plug-ins to execute some code after detaching 1809bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// from a process. 1810bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor //------------------------------------------------------------------ 1811bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor virtual void 1812bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor DidDetach () {} 18139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1814bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor //------------------------------------------------------------------ 1815bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// Called before sending a signal to a process. 1816bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// 1817bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// Allow Process plug-ins to execute some code before sending a 1818bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// signal to a process. 1819bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// 18209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// @return 18219b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// Returns no error if it is safe to proceed with a call to 18229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// Process::DoSignal(int), otherwise an error describing what 1823bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// prevents the signal from being sent. 1824bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor //------------------------------------------------------------------ 1825bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor virtual Error 1826b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala WillSignal () { return Error(); } 1827b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala 1828b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala //------------------------------------------------------------------ 18299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// Sends a process a UNIX signal \a signal. 1830b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// 18319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// @return 18329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// Returns an error object. 18339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 18349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual Error 18359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DoSignal (int signal) = 0; 18369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual Error 18409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WillDestroy () { return Error(); } 18419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual Error 18439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DoDestroy () = 0; 18449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void 18469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DidDestroy () { } 1847bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 18489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 18509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// Called after sending a signal to a process. 18519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// 18529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// Allow Process plug-ins to execute some code after sending a 18539b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// signal to a process. 18549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 18559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void 18569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DidSignal () {} 18579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1858bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 18599b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li //------------------------------------------------------------------ 18609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// Currently called as part of ShouldStop. 186199a3f3e4e06b4370101ca97cc11dbe81d772fefaWu-cheng Li /// FIXME: Should really happen when the target stops before the 1862bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// event is taken from the queue... 18639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// 18649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// This callback is called as the event 18657005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala /// is about to be queued up to allow Process plug-ins to execute 18667005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala /// some code prior to clients being notified that a process was 18677005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala /// stopped. Common operations include updating the thread list, 18687005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala /// invalidating any thread state (registers, stack, etc) prior to 18697005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala /// letting the notification go out. 18707005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala /// 18717005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala //------------------------------------------------------------------ 18727005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala virtual void 18737005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala RefreshStateAfterStop () = 0; 18747005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala 18757005b67c127d229017840925d2bc1bd84c43aaf5Eino-Ville Talvala //------------------------------------------------------------------ 18769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// Get the target object pointer for this module. 18779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// 18789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// @return 18799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// A Target object pointer to the target that owns this 1880bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// module. 1881bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor //------------------------------------------------------------------ 1882bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor Target & 1883bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor GetTarget () 1884bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor { 18859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_target; 18869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 18899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// Get the const target object pointer for this module. 18909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// 18919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// @return 18929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// A const Target object pointer to the target that owns this 18939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// module. 18941c04a33c040dfb610952d62da9c93a53c291b2d7Wu-cheng Li //------------------------------------------------------------------ 18951c04a33c040dfb610952d62da9c93a53c291b2d7Wu-cheng Li const Target & 1896f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa GetTarget () const 18971c04a33c040dfb610952d62da9c93a53c291b2d7Wu-cheng Li { 18981c04a33c040dfb610952d62da9c93a53c291b2d7Wu-cheng Li return m_target; 18991c04a33c040dfb610952d62da9c93a53c291b2d7Wu-cheng Li } 19001c04a33c040dfb610952d62da9c93a53c291b2d7Wu-cheng Li 19011c04a33c040dfb610952d62da9c93a53c291b2d7Wu-cheng Li 19021c04a33c040dfb610952d62da9c93a53c291b2d7Wu-cheng Li //------------------------------------------------------------------ 19031c04a33c040dfb610952d62da9c93a53c291b2d7Wu-cheng Li /// Get accessor for the current process state. 19041c04a33c040dfb610952d62da9c93a53c291b2d7Wu-cheng Li /// 19051c04a33c040dfb610952d62da9c93a53c291b2d7Wu-cheng Li /// @return 1906df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin /// The current state of the process. 1907df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin /// 1908df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin /// @see lldb::StateType 1909df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin //------------------------------------------------------------------ 1910df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin lldb::StateType 1911df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin GetState (); 1912df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 1913df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin ExecutionResults 1914df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin RunThreadPlan (ExecutionContext &exe_ctx, 1915df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin lldb::ThreadPlanSP &thread_plan_sp, 1916df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin bool stop_others, 1917df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin bool try_all_threads, 1918df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin bool discard_on_error, 1919df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin uint32_t single_thread_timeout_usec, 1920df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin Stream &errors); 1921df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 1922df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin static const char * 1923df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin ExecutionResultAsCString (ExecutionResults result); 1924df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 1925df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin void 1926df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin GetStatus (Stream &ostrm); 1927bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 1928b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala size_t 1929b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala GetThreadStatus (Stream &ostrm, 19309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool only_threads_with_stop_reason, 1931b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala uint32_t start_frame, 19329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t num_frames, 19339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t num_frames_with_source); 19349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19359b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Liprotected: 19369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void 19389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SetState (lldb::EventSP &event_sp); 19399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lldb::StateType 19419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetPrivateState (); 19429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19434c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li //------------------------------------------------------------------ 19444c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li // Called internally 19454c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li //------------------------------------------------------------------ 19464c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li void 19474c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li CompleteAttach (); 19484c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li 19494c4300c71229638183d814ab8374e09f722910f5Wu-cheng Lipublic: 19504c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li //------------------------------------------------------------------ 19514c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li /// Get the exit status for a process. 19524c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li /// 19534c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li /// @return 19544c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li /// The process's return code, or -1 if the current process 19554c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li /// state is not eStateExited. 19564c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li //------------------------------------------------------------------ 19574c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li int 19584c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li GetExitStatus (); 19594c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li 19604c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li //------------------------------------------------------------------ 19614c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li /// Get a textual description of what the process exited. 19629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// 19639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// @return 19649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// The textual description of why the process exited, or NULL 19659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// if there is no description available. 19669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 19679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char * 19689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetExitDescription (); 196932a972c693400db50717435139fa292a63bc937aEino-Ville Talvala 197032a972c693400db50717435139fa292a63bc937aEino-Ville Talvala 197132a972c693400db50717435139fa292a63bc937aEino-Ville Talvala virtual void 197232a972c693400db50717435139fa292a63bc937aEino-Ville Talvala DidExit () 197332a972c693400db50717435139fa292a63bc937aEino-Ville Talvala { 197432a972c693400db50717435139fa292a63bc937aEino-Ville Talvala } 197532a972c693400db50717435139fa292a63bc937aEino-Ville Talvala 197632a972c693400db50717435139fa292a63bc937aEino-Ville Talvala //------------------------------------------------------------------ 197732a972c693400db50717435139fa292a63bc937aEino-Ville Talvala /// Get the Modification ID of the process. 197832a972c693400db50717435139fa292a63bc937aEino-Ville Talvala /// 197932a972c693400db50717435139fa292a63bc937aEino-Ville Talvala /// @return 198032a972c693400db50717435139fa292a63bc937aEino-Ville Talvala /// The modification ID of the process. 198132a972c693400db50717435139fa292a63bc937aEino-Ville Talvala //------------------------------------------------------------------ 198232a972c693400db50717435139fa292a63bc937aEino-Ville Talvala ProcessModID 198332a972c693400db50717435139fa292a63bc937aEino-Ville Talvala GetModID () const 198432a972c693400db50717435139fa292a63bc937aEino-Ville Talvala { 198532a972c693400db50717435139fa292a63bc937aEino-Ville Talvala return m_mod_id; 198632a972c693400db50717435139fa292a63bc937aEino-Ville Talvala } 198732a972c693400db50717435139fa292a63bc937aEino-Ville Talvala 198832a972c693400db50717435139fa292a63bc937aEino-Ville Talvala const ProcessModID & 198932a972c693400db50717435139fa292a63bc937aEino-Ville Talvala GetModIDRef () const 199032a972c693400db50717435139fa292a63bc937aEino-Ville Talvala { 1991bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li return m_mod_id; 1992bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li } 1993bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li 1994bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li uint32_t 1995bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li GetStopID () const 1996bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li { 1997bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li return m_mod_id.GetStopID(); 1998b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala } 1999b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala 2000b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala uint32_t 200130771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li GetResumeID () const 2002b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala { 200330771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li return m_mod_id.GetResumeID(); 200430771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li } 200530771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li 200630771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li uint32_t 200732a972c693400db50717435139fa292a63bc937aEino-Ville Talvala GetLastUserExpressionResumeID () const 200832a972c693400db50717435139fa292a63bc937aEino-Ville Talvala { 200930771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li return m_mod_id.GetLastUserExpressionResumeID(); 201030771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li } 201130771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li 201230771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li //------------------------------------------------------------------ 201330771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// Set accessor for the process exit status (return code). 201430771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// 201530771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// Sometimes a child exits and the exit can be detected by global 201630771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// functions (signal handler for SIGCHLD for example). This 201730771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// accessor allows the exit status to be set from an external 201830771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// source. 201930771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// 202030771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// Setting this will cause a eStateExited event to be posted to 202130771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// the process event queue. 202230771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// 202330771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// @param[in] exit_status 202430771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// The value for the process's return code. 202530771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// 202630771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// @see lldb::StateType 202730771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li //------------------------------------------------------------------ 202830771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li virtual bool 202930771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li SetExitStatus (int exit_status, const char *cstr); 203030771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li 203130771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li //------------------------------------------------------------------ 203230771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// Check if a process is still alive. 203330771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// 203430771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// @return 2035bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li /// Returns \b true if the process is still valid, \b false 203632a972c693400db50717435139fa292a63bc937aEino-Ville Talvala /// otherwise. 203732a972c693400db50717435139fa292a63bc937aEino-Ville Talvala //------------------------------------------------------------------ 203832a972c693400db50717435139fa292a63bc937aEino-Ville Talvala virtual bool 203932a972c693400db50717435139fa292a63bc937aEino-Ville Talvala IsAlive () = 0; 204032a972c693400db50717435139fa292a63bc937aEino-Ville Talvala 2041bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li //------------------------------------------------------------------ 2042bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li /// Actually do the reading of memory from a process. 2043bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li /// 2044bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li /// Subclasses must override this function and can return fewer 204530771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// bytes than requested when memory requests are too large. This 204630771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// class will break up the memory requests and keep advancing the 2047bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li /// arguments along as needed. 204832a972c693400db50717435139fa292a63bc937aEino-Ville Talvala /// 204932a972c693400db50717435139fa292a63bc937aEino-Ville Talvala /// @param[in] vm_addr 205032a972c693400db50717435139fa292a63bc937aEino-Ville Talvala /// A virtual load address that indicates where to start reading 205132a972c693400db50717435139fa292a63bc937aEino-Ville Talvala /// memory from. 205232a972c693400db50717435139fa292a63bc937aEino-Ville Talvala /// 2053bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li /// @param[in] size 2054bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li /// The number of bytes to read. 2055bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li /// 2056bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li /// @param[out] buf 205730771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// A byte buffer that is at least \a size bytes long that 2058bde61a5731cdfef76a0691f8bd53b880606f5f6eWu-cheng Li /// will receive the memory bytes. 205930771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// 206030771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// @return 2061bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// The number of bytes that were actually read into \a buf. 20629b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li //------------------------------------------------------------------ 20639b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li virtual size_t 2064bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor DoReadMemory (lldb::addr_t vm_addr, 2065bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor void *buf, 2066bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor size_t size, 2067bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor Error &error) = 0; 20689b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 20699b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li //------------------------------------------------------------------ 20709b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// Read of memory from a process. 20719b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// 2072bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// This function will read memory from the current process's 2073bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// address space and remove any traps that may have been inserted 2074bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// into the memory. 2075bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor /// 2076b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// This function is not meant to be overridden by Process 2077b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// subclasses, the subclasses should implement 2078b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// Process::DoReadMemory (lldb::addr_t, size_t, void *). 20799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// 2080b942b05093d2b1cee59ac73196a4b99962f10addEino-Ville Talvala /// @param[in] vm_addr 20819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// A virtual load address that indicates where to start reading 20829b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// memory from. 20839b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// 20849b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// @param[out] buf 20859b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// A byte buffer that is at least \a size bytes long that 2086454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li /// will receive the memory bytes. 20879b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// 20889b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// @param[in] size 20894c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li /// The number of bytes to read. 20909b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// 20919b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// @return 20929b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// The number of bytes that were actually read into \a buf. If 20939b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// the returned number is greater than zero, yet less than \a 20949b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// size, then this function will get called again with \a 20959b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// vm_addr, \a buf, and \a size updated appropriately. Zero is 20969b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// returned to indicate an error. 20979b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li //------------------------------------------------------------------ 20989b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li size_t 2099055c986ab841f8f758398841730f1e90313b132aRay Chen ReadMemory (lldb::addr_t vm_addr, 21009b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li void *buf, 21019b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li size_t size, 21029b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li Error &error); 21039b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 21049b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li //------------------------------------------------------------------ 210536322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li /// Read a NULL terminated C string from memory 210630771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// 210730771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li /// This function will read a cache page at a time until the NULL 21086c8d2760736a0753dad96b4bb8f98c7d075e6d54Wu-cheng Li /// C stirng terminator is found. It will stop reading if the NULL 21096c8d2760736a0753dad96b4bb8f98c7d075e6d54Wu-cheng Li /// termination byte isn't found before reading \a cstr_max_len 21106c8d2760736a0753dad96b4bb8f98c7d075e6d54Wu-cheng Li /// bytes, and the results are always guaranteed to be NULL 2111ff723b6c43d5a8fd0ae0e0732f5d47012d74e01dWu-cheng Li /// terminated (at most cstr_max_len - 1 bytes will be read). 211224b326a8978bf78e3e560723dde221792784325bWu-cheng Li //------------------------------------------------------------------ 211324b326a8978bf78e3e560723dde221792784325bWu-cheng Li size_t 211424b326a8978bf78e3e560723dde221792784325bWu-cheng Li ReadCStringFromMemory (lldb::addr_t vm_addr, 21153773eef4e36fa4171a84b495dca849be112df0a8Eino-Ville Talvala char *cstr, 21163773eef4e36fa4171a84b495dca849be112df0a8Eino-Ville Talvala size_t cstr_max_len); 2117d9c2601afa46811bcb1345963d38010690981a01Eino-Ville Talvala 2118d9c2601afa46811bcb1345963d38010690981a01Eino-Ville Talvala size_t 2119e98e4c806320ccb3078805ac019cca3ed9796123Wu-cheng Li ReadMemoryFromInferior (lldb::addr_t vm_addr, 2120e98e4c806320ccb3078805ac019cca3ed9796123Wu-cheng Li void *buf, 21218cbb8f5e1f939b03515cb4d5942c3fcb226efb9eWu-cheng Li size_t size, 21228cbb8f5e1f939b03515cb4d5942c3fcb226efb9eWu-cheng Li Error &error); 21238cbb8f5e1f939b03515cb4d5942c3fcb226efb9eWu-cheng Li 21248cbb8f5e1f939b03515cb4d5942c3fcb226efb9eWu-cheng Li //------------------------------------------------------------------ 21258cbb8f5e1f939b03515cb4d5942c3fcb226efb9eWu-cheng Li /// Reads an unsigned integer of the specified byte size from 2126e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li /// process memory. 2127dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong /// 2128dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong /// @param[in] load_addr 2129dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong /// A load address of the integer to read. 21304c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// 21314c2292efbbfe7338138a9a0e8eefeaabdef1a0b4Wu-cheng Li /// @param[in] byte_size 213225d8fb51dae37f1becf4fb3d32e8600c418eb6e8Wu-cheng Li /// The size in byte of the integer to read. 213398bb251c8b527600e7a4cca6cc33499710bbfbf1Wu-cheng Li /// 2134037abb8bb064c2878858c9b69978f6754f242627Eino-Ville Talvala /// @param[in] fail_value 2135037abb8bb064c2878858c9b69978f6754f242627Eino-Ville Talvala /// The value to return if we fail to read an integer. 2136e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li /// 21379b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// @param[out] error 21389b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// An error that indicates the success or failure of this 21399b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// operation. If error indicates success (error.Success()), 21408cbb8f5e1f939b03515cb4d5942c3fcb226efb9eWu-cheng Li /// then the value returned can be trusted, otherwise zero 21413773eef4e36fa4171a84b495dca849be112df0a8Eino-Ville Talvala /// will be returned. 21428cbb8f5e1f939b03515cb4d5942c3fcb226efb9eWu-cheng Li /// 21439b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// @return 21449b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// The unsigned integer that was read from the process memory 21459b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// space. If the integer was smaller than a uint64_t, any 21469b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// unused upper bytes will be zero filled. If the process 21479b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// byte order differs from the host byte order, the integer 21489b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// value will be appropriately byte swapped into host byte 21499b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// order. 21509b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li //------------------------------------------------------------------ 21519b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li uint64_t 21529b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li ReadUnsignedIntegerFromMemory (lldb::addr_t load_addr, 21539b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li size_t byte_size, 21549b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li uint64_t fail_value, 21559b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li Error &error); 21569b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 21579b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li lldb::addr_t 21589b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li ReadPointerFromMemory (lldb::addr_t vm_addr, 21599b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li Error &error); 21609b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 21619b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li bool 21629b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li WritePointerToMemory (lldb::addr_t vm_addr, 21639b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li lldb::addr_t ptr_value, 21649b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li Error &error); 21659b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 21669b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li //------------------------------------------------------------------ 21679b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// Actually do the writing of memory to a process. 21689b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// 21699b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// @param[in] vm_addr 21709b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// A virtual load address that indicates where to start writing 21719b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// memory to. 21729b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// 21739b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// @param[in] buf 21749b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// A byte buffer that is at least \a size bytes long that 217536f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// contains the data to write. 21769b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// 2177068ef42c3ffe1eccec10f97f08541304f679fe67Wu-cheng Li /// @param[in] size 2178068ef42c3ffe1eccec10f97f08541304f679fe67Wu-cheng Li /// The number of bytes to write. 21799b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// 21809b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// @param[out] error 218136f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// An error value in case the memory write fails. 21829b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// 2183068ef42c3ffe1eccec10f97f08541304f679fe67Wu-cheng Li /// @return 2184068ef42c3ffe1eccec10f97f08541304f679fe67Wu-cheng Li /// The number of bytes that were actually written. 21859b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li //------------------------------------------------------------------ 21869b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li virtual size_t 218736f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li DoWriteMemory (lldb::addr_t vm_addr, const void *buf, size_t size, Error &error) = 0; 21889b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 21899b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li //------------------------------------------------------------------ 21909b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// Write all or part of a scalar value to memory. 21919b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// 219236f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// The value contained in \a scalar will be swapped to match the 219336322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li /// byte order of the process that is being debugged. If \a size is 2194068ef42c3ffe1eccec10f97f08541304f679fe67Wu-cheng Li /// less than the size of scalar, the least significate \a size bytes 2195068ef42c3ffe1eccec10f97f08541304f679fe67Wu-cheng Li /// from scalar will be written. If \a size is larger than the byte 219636322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li /// size of scalar, then the extra space will be padded with zeros 2197068ef42c3ffe1eccec10f97f08541304f679fe67Wu-cheng Li /// and the scalar value will be placed in the least significant 21989b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// bytes in memory. 219900e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// 220000e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// @param[in] vm_addr 220100e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// A virtual load address that indicates where to start writing 22029b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// memory to. 220300e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// 220400e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// @param[in] scalar 220500e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// The scalar to write to the debugged process. 220600e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// 220700e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// @param[in] size 22089b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// This value can be smaller or larger than the scalar value 220900e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// itself. If \a size is smaller than the size of \a scalar, 221000e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// the least significant bytes in \a scalar will be used. If 221100e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// \a size is larger than the byte size of \a scalar, then 221200e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// the extra space will be padded with zeros. If \a size is 22139b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// set to UINT32_MAX, then the size of \a scalar will be used. 221400e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// 221500e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// @param[out] error 221600e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// An error value in case the memory write fails. 221700e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// 22189b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// @return 221900e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// The number of bytes that were actually written. 222000e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li //------------------------------------------------------------------ 222100e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li size_t 222200e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li WriteScalarToMemory (lldb::addr_t vm_addr, 22239b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li const Scalar &scalar, 222400e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li uint32_t size, 222500e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li Error &error); 222600e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li 222700e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li size_t 22289b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li ReadScalarIntegerFromMemory (lldb::addr_t addr, 222900e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li uint32_t byte_size, 223000e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li bool is_signed, 223100e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li Scalar &scalar, 223200e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li Error &error); 22339b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 223400e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li //------------------------------------------------------------------ 223500e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// Write memory to a process. 223600e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// 223700e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// This function will write memory to the current process's 22389b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// address space and maintain any traps that might be present due 223900e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// to software breakpoints. 224000e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// 224100e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// This function is not meant to be overridden by Process 224200e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// subclasses, the subclasses should implement 22439b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// Process::DoWriteMemory (lldb::addr_t, size_t, void *). 224400e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// 224500e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// @param[in] vm_addr 224600e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// A virtual load address that indicates where to start writing 224700e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// memory to. 22489b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// 224900e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// @param[in] buf 225000e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// A byte buffer that is at least \a size bytes long that 225100e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// contains the data to write. 225200e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// 22539b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// @param[in] size 225400e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// The number of bytes to write. 225500e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// 225600e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// @return 225700e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// The number of bytes that were actually written. 22589b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li //------------------------------------------------------------------ 225900e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li size_t 226000e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li WriteMemory (lldb::addr_t vm_addr, const void *buf, size_t size, Error &error); 226100e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li 226200e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li 226300e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li //------------------------------------------------------------------ 22649b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// Actually allocate memory in the process. 226500e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// 226600e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// This function will allocate memory in the process's address 226700e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// space. This can't rely on the generic function calling mechanism, 226800e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// since that requires this function. 22699b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// 227000e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// @param[in] size 227100e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// The size of the allocation requested. 227200e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// 227300e21f8eb57a7ae2c19516aa0290ab4fb5f251c2Wu-cheng Li /// @return 22749b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// The address of the allocated buffer in the process, or 22759b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// LLDB_INVALID_ADDRESS if the allocation failed. 2276c58b42327df5fbc826e2fcc2674ab6db0edfcd92Wu-cheng Li //------------------------------------------------------------------ 2277c58b42327df5fbc826e2fcc2674ab6db0edfcd92Wu-cheng Li 2278c58b42327df5fbc826e2fcc2674ab6db0edfcd92Wu-cheng Li virtual lldb::addr_t 2279c58b42327df5fbc826e2fcc2674ab6db0edfcd92Wu-cheng Li DoAllocateMemory (size_t size, uint32_t permissions, Error &error) = 0; 2280c58b42327df5fbc826e2fcc2674ab6db0edfcd92Wu-cheng Li 2281c58b42327df5fbc826e2fcc2674ab6db0edfcd92Wu-cheng Li //------------------------------------------------------------------ 228236322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li /// The public interface to allocating memory in the process. 2283da2f0ea10822628875a956e4bf096066c0debe9fEino-Ville Talvala /// 2284da2f0ea10822628875a956e4bf096066c0debe9fEino-Ville Talvala /// This function will allocate memory in the process's address 2285da2f0ea10822628875a956e4bf096066c0debe9fEino-Ville Talvala /// space. This can't rely on the generic function calling mechanism, 2286da2f0ea10822628875a956e4bf096066c0debe9fEino-Ville Talvala /// since that requires this function. 2287da2f0ea10822628875a956e4bf096066c0debe9fEino-Ville Talvala /// 2288da2f0ea10822628875a956e4bf096066c0debe9fEino-Ville Talvala /// @param[in] size 2289da2f0ea10822628875a956e4bf096066c0debe9fEino-Ville Talvala /// The size of the allocation requested. 2290da2f0ea10822628875a956e4bf096066c0debe9fEino-Ville Talvala /// 2291f008f3ea82a0518375ee4ea41b32451badffbd95Wu-cheng Li /// @param[in] permissions 2292f008f3ea82a0518375ee4ea41b32451badffbd95Wu-cheng Li /// Or together any of the lldb::Permissions bits. The permissions on 229336322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li /// a given memory allocation can't be changed after allocation. Note 229436322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li /// that a block that isn't set writable can still be written on from lldb, 229536f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// just not by the process itself. 229636322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li /// 229736322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li /// @param[in/out] error 229836322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li /// An error object to fill in if things go wrong. 229936322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li /// @return 230036322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li /// The address of the allocated buffer in the process, or 2301f008f3ea82a0518375ee4ea41b32451badffbd95Wu-cheng Li /// LLDB_INVALID_ADDRESS if the allocation failed. 2302f008f3ea82a0518375ee4ea41b32451badffbd95Wu-cheng Li //------------------------------------------------------------------ 2303f008f3ea82a0518375ee4ea41b32451badffbd95Wu-cheng Li 2304f008f3ea82a0518375ee4ea41b32451badffbd95Wu-cheng Li lldb::addr_t 2305f008f3ea82a0518375ee4ea41b32451badffbd95Wu-cheng Li AllocateMemory (size_t size, uint32_t permissions, Error &error); 2306f008f3ea82a0518375ee4ea41b32451badffbd95Wu-cheng Li 230736322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li //------------------------------------------------------------------ 230836f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li /// Determines whether executing JIT-compiled code in this process 230936322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li /// is possible. 231036322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li /// 231136322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li /// @return 231236322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li /// True if execution of JIT code is possible; false otherwise. 231336322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li //------------------------------------------------------------------ 231436322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li bool CanJIT (); 231536322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li 231636322db5752c7ec196f59ba94abe5d5a63cc19f5Wu-cheng Li //------------------------------------------------------------------ 2317c58b42327df5fbc826e2fcc2674ab6db0edfcd92Wu-cheng Li /// Sets whether executing JIT-compiled code in this process 2318c58b42327df5fbc826e2fcc2674ab6db0edfcd92Wu-cheng Li /// is possible. 2319c58b42327df5fbc826e2fcc2674ab6db0edfcd92Wu-cheng Li /// 2320c58b42327df5fbc826e2fcc2674ab6db0edfcd92Wu-cheng Li /// @param[in] can_jit 2321c58b42327df5fbc826e2fcc2674ab6db0edfcd92Wu-cheng Li /// True if execution of JIT code is possible; false otherwise. 2322c58b42327df5fbc826e2fcc2674ab6db0edfcd92Wu-cheng Li //------------------------------------------------------------------ 2323c58b42327df5fbc826e2fcc2674ab6db0edfcd92Wu-cheng Li void SetCanJIT (bool can_jit); 2324699fe9397974685e6b2c73f9a3a0eb9e5a5a2ccfWu-cheng Li 2325d45cb72ac0d7d57829ffc9223decb89a5fc42ce2Wu-cheng Li //------------------------------------------------------------------ 2326b9ac75d3dfc53ab4a0a104da147f1dfd7bc8c12fWu-cheng Li /// Actually deallocate memory in the process. 2327b9ac75d3dfc53ab4a0a104da147f1dfd7bc8c12fWu-cheng Li /// 2328b9ac75d3dfc53ab4a0a104da147f1dfd7bc8c12fWu-cheng Li /// This function will deallocate memory in the process's address 2329b9ac75d3dfc53ab4a0a104da147f1dfd7bc8c12fWu-cheng Li /// space that was allocated with AllocateMemory. 2330b9ac75d3dfc53ab4a0a104da147f1dfd7bc8c12fWu-cheng Li /// 233153b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li /// @param[in] ptr 233253b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li /// A return value from AllocateMemory, pointing to the memory you 233353b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li /// want to deallocate. 233453b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li /// 233553b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li /// @return 233653b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li /// \btrue if the memory was deallocated, \bfalse otherwise. 233753b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li //------------------------------------------------------------------ 233853b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li 233953b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li virtual Error 234053b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li DoDeallocateMemory (lldb::addr_t ptr) = 0; 234153b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li 234253b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li //------------------------------------------------------------------ 2343d45cb72ac0d7d57829ffc9223decb89a5fc42ce2Wu-cheng Li /// The public interface to deallocating memory in the process. 2344d45cb72ac0d7d57829ffc9223decb89a5fc42ce2Wu-cheng Li /// 2345699fe9397974685e6b2c73f9a3a0eb9e5a5a2ccfWu-cheng Li /// This function will deallocate memory in the process's address 2346b9ac75d3dfc53ab4a0a104da147f1dfd7bc8c12fWu-cheng Li /// space that was allocated with AllocateMemory. 2347b9ac75d3dfc53ab4a0a104da147f1dfd7bc8c12fWu-cheng Li /// 2348b9ac75d3dfc53ab4a0a104da147f1dfd7bc8c12fWu-cheng Li /// @param[in] ptr 2349b9ac75d3dfc53ab4a0a104da147f1dfd7bc8c12fWu-cheng Li /// A return value from AllocateMemory, pointing to the memory you 235053b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li /// want to deallocate. 235153b30912d3e8598c05e47308981971e958e98db2Wu-cheng Li /// 23520f4f97b70f6ad59b32e78720ba7357733bdef3e9Wu-cheng Li /// @return 23530f4f97b70f6ad59b32e78720ba7357733bdef3e9Wu-cheng Li /// \btrue if the memory was deallocated, \bfalse otherwise. 23540f4f97b70f6ad59b32e78720ba7357733bdef3e9Wu-cheng Li //------------------------------------------------------------------ 23550f4f97b70f6ad59b32e78720ba7357733bdef3e9Wu-cheng Li 23560f4f97b70f6ad59b32e78720ba7357733bdef3e9Wu-cheng Li Error 23570f4f97b70f6ad59b32e78720ba7357733bdef3e9Wu-cheng Li DeallocateMemory (lldb::addr_t ptr); 23580f4f97b70f6ad59b32e78720ba7357733bdef3e9Wu-cheng Li 23590f4f97b70f6ad59b32e78720ba7357733bdef3e9Wu-cheng Li //------------------------------------------------------------------ 23600f4f97b70f6ad59b32e78720ba7357733bdef3e9Wu-cheng Li /// Get any available STDOUT. 23610f4f97b70f6ad59b32e78720ba7357733bdef3e9Wu-cheng Li /// 23620f4f97b70f6ad59b32e78720ba7357733bdef3e9Wu-cheng Li /// If the process was launched without supplying valid file paths 23630f4f97b70f6ad59b32e78720ba7357733bdef3e9Wu-cheng Li /// for stdin, stdout, and stderr, then the Process class might 2364b9ac75d3dfc53ab4a0a104da147f1dfd7bc8c12fWu-cheng Li /// try to cache the STDOUT for the process if it is able. Events 2365b9ac75d3dfc53ab4a0a104da147f1dfd7bc8c12fWu-cheng Li /// will be queued indicating that there is STDOUT available that 2366b9ac75d3dfc53ab4a0a104da147f1dfd7bc8c12fWu-cheng Li /// can be retrieved using this function. 2367b9ac75d3dfc53ab4a0a104da147f1dfd7bc8c12fWu-cheng Li /// 2368b9ac75d3dfc53ab4a0a104da147f1dfd7bc8c12fWu-cheng Li /// @param[out] buf 2369e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li /// A buffer that will receive any STDOUT bytes that are 2370e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li /// currently available. 2371e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li /// 2372e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li /// @param[out] buf_size 2373e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li /// The size in bytes for the buffer \a buf. 2374e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li /// 2375e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li /// @return 2376e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li /// The number of bytes written into \a buf. If this value is 2377e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li /// equal to \a buf_size, another call to this function should 2378e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li /// be made to retrieve more STDOUT data. 2379e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li //------------------------------------------------------------------ 2380e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li virtual size_t 2381e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li GetSTDOUT (char *buf, size_t buf_size, Error &error) 2382e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li { 2383e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li error.SetErrorString("stdout unsupported"); 2384e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li return 0; 2385e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li } 2386e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li 2387e339c5edbebedf446581f18ad70214007309bf4bWu-cheng Li 2388ca099614841bc619f217dfa088da630a7eb1ab65Wu-cheng Li //------------------------------------------------------------------ 2389454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li /// Get any available STDERR. 2390454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li /// 2391454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li /// If the process was launched without supplying valid file paths 2392454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li /// for stdin, stdout, and stderr, then the Process class might 2393454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li /// try to cache the STDERR for the process if it is able. Events 2394454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li /// will be queued indicating that there is STDERR available that 2395454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li /// can be retrieved using this function. 2396454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li /// 2397454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li /// @param[out] buf 2398454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li /// A buffer that will receive any STDERR bytes that are 2399454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li /// currently available. 2400454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li /// 2401454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li /// @param[out] buf_size 24029b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// The size in bytes for the buffer \a buf. 24039b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// 24049b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// @return 2405eb68c46a40c773eb56ef7bcf8e7ece5c6a5a8d23Chih-Chung Chang /// The number of bytes written into \a buf. If this value is 240610a1b30dfbd0bbeae6776e353600986647c6e0a8Wu-cheng Li /// equal to \a buf_size, another call to this function should 24079b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// be made to retrieve more STDERR data. 24089b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li //------------------------------------------------------------------ 240970fb9085044c5e6f52c33c970d238b764cf2373bWu-cheng Li virtual size_t 24109b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li GetSTDERR (char *buf, size_t buf_size, Error &error) 24117d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin { 24127d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin error.SetErrorString("stderr unsupported"); 24137d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin return 0; 24147d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin } 24157d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin 24167d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin virtual size_t 24177d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin PutSTDIN (const char *buf, size_t buf_size, Error &error) 24187d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin { 24197d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin error.SetErrorString("stdin unsupported"); 24207d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin return 0; 24217d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin } 24229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //---------------------------------------------------------------------- 24247d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin // Process Breakpoints 24259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //---------------------------------------------------------------------- 24269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t 24279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetSoftwareBreakpointTrapOpcode (BreakpointSite* bp_site); 2428df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 2429df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin virtual Error 2430df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin EnableBreakpoint (BreakpointSite *bp_site) = 0; 2431df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 2432df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin virtual Error 2433df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin DisableBreakpoint (BreakpointSite *bp_site) = 0; 2434df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 2435df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin // This is implemented completely using the lldb::Process API. Subclasses 2436df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin // don't need to implement this function unless the standard flow of 2437df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin // read existing opcode, write breakpoint opcode, verify breakpoint opcode 2438df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin // doesn't work for a specific process plug-in. 2439df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin virtual Error 2440df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin EnableSoftwareBreakpoint (BreakpointSite *bp_site); 2441df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 2442df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin // This is implemented completely using the lldb::Process API. Subclasses 2443df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin // don't need to implement this function unless the standard flow of 2444df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin // restoring original opcode in memory and verifying the restored opcode 2445df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin // doesn't work for a specific process plug-in. 2446d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk virtual Error 2447d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk DisableSoftwareBreakpoint (BreakpointSite *bp_site); 2448d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk 2449d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk BreakpointSiteList & 2450d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk GetBreakpointSiteList(); 2451d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk 2452d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk const BreakpointSiteList & 2453d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk GetBreakpointSiteList() const; 2454d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk 2455d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk void 2456d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk DisableAllBreakpointSites (); 2457d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk 2458d1f113d0f0ce5099f8efba40a88398f7945bb5e0Ruben Brunk Error 2459df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin ClearBreakpointSiteByID (lldb::user_id_t break_id); 24609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lldb::break_id_t 24629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CreateBreakpointSite (lldb::BreakpointLocationSP &owner, 24639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool use_hardware); 2464a1d662716b3da384dfe3a758f079e0cbd089784aIgor Murashkin 24659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Error 24669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DisableBreakpointSiteByID (lldb::user_id_t break_id); 24679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Error 24699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EnableBreakpointSiteByID (lldb::user_id_t break_id); 24709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // BreakpointLocations use RemoveOwnerFromBreakpointSite to remove 24739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // themselves from the owner's list of this breakpoint sites. This has to 24749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // be a static function because you can't be sure that removing the 24759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // breakpoint from it's containing map won't delete the breakpoint site, 24769b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li // and doing that in an instance method isn't copasetic. 24779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void 24789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RemoveOwnerFromBreakpointSite (lldb::user_id_t owner_id, 24799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lldb::user_id_t owner_loc_id, 24809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lldb::BreakpointSiteSP &bp_site_sp); 24810a12018e4cd6eaaeaec795f6b2af4499fe3a8bcdAli Utku Selen 24829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //---------------------------------------------------------------------- 24839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Process Watchpoints (optional) 24849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //---------------------------------------------------------------------- 24859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual Error 24869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EnableWatchpoint (Watchpoint *wp); 24879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual Error 24899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DisableWatchpoint (Watchpoint *wp); 24909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 24929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Thread Queries 24939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 24949b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li virtual uint32_t 24959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project UpdateThreadList (ThreadList &old_thread_list, ThreadList &new_thread_list) = 0; 24969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24979b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li void 24989b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li UpdateThreadListIfNeeded (); 24999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ThreadList & 25019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetThreadList () 25029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 25039b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li return m_thread_list; 25040a12018e4cd6eaaeaec795f6b2af4499fe3a8bcdAli Utku Selen } 25050a12018e4cd6eaaeaec795f6b2af4499fe3a8bcdAli Utku Selen 25060a12018e4cd6eaaeaec795f6b2af4499fe3a8bcdAli Utku Selen 25079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t 25089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetNextThreadIndexID (); 25099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 25119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Event Handling 25129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 25139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lldb::StateType 25149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetNextEvent (lldb::EventSP &event_sp); 25159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25169b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li lldb::StateType 25179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WaitForProcessToStop (const TimeValue *timeout); 25189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lldb::StateType 25209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WaitForStateChangedEvents (const TimeValue *timeout, lldb::EventSP &event_sp); 25219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Event * 25239b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li PeekAtStateChangedEvents (); 25249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class 25279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ProcessEventHijacker 2528cb56923ba6350cf7441260886f6e8a1c6785886dEino-Ville Talvala { 2529cb56923ba6350cf7441260886f6e8a1c6785886dEino-Ville Talvala public: 25309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ProcessEventHijacker (Process &process, Listener *listener) : 25319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_process (process), 2532cb56923ba6350cf7441260886f6e8a1c6785886dEino-Ville Talvala m_listener (listener) 2533cb56923ba6350cf7441260886f6e8a1c6785886dEino-Ville Talvala { 25349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_process.HijackProcessEvents (listener); 25359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ~ProcessEventHijacker () 25377d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin { 25389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_process.RestoreProcessEvents(); 25399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 25429b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li Process &m_process; 25439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Listener *m_listener; 25449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 25459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project friend class ProcessEventHijacker; 25469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 25477d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin /// If you need to ensure that you and only you will hear about some public 25487d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin /// event, then make a new listener, set to listen to process events, and 25497d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin /// then call this with that listener. Then you will have to wait on that 25507d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin /// listener explicitly for events (rather than using the GetNextEvent & WaitFor* 25517d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin /// calls above. Be sure to call RestoreProcessEvents when you are done. 25527d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin /// 25537d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin /// @param[in] listener 25547d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin /// This is the new listener to whom all process events will be delivered. 25557d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin /// 25567d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin /// @return 25577d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin /// Returns \b true if the new listener could be installed, 25587d9a8ffd08fa950eb14f8224f6090fe46ab4aa9fIgor Murashkin /// \b false otherwise. 25599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 25609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool 2561e98e4c806320ccb3078805ac019cca3ed9796123Wu-cheng Li HijackProcessEvents (Listener *listener); 2562f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li 2563f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li //------------------------------------------------------------------ 2564f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li /// Restores the process event broadcasting to its normal state. 2565f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li /// 2566f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li //------------------------------------------------------------------ 2567f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li void 2568f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li RestoreProcessEvents (); 2569f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li 2570f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Liprotected: 2571f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li //------------------------------------------------------------------ 2572f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li /// This is the part of the event handling that for a process event. 2573f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li /// It decides what to do with the event and returns true if the 2574f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li /// event needs to be propagated to the user, and false otherwise. 2575f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li /// If the event is not propagated, this call will most likely set 2576f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li /// the target to executing again. 2577f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li /// 2578f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li /// @param[in] event_ptr 2579f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li /// This is the event we are handling. 2580f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li /// 2581f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li /// @return 2582f715bf95ded30821e81ba93bb48c08725e1c34aaWu-cheng Li /// Returns \b true if the event should be reported to the 2583e98e4c806320ccb3078805ac019cca3ed9796123Wu-cheng Li /// user, \b false otherwise. 2584e98e4c806320ccb3078805ac019cca3ed9796123Wu-cheng Li //------------------------------------------------------------------ 2585e98e4c806320ccb3078805ac019cca3ed9796123Wu-cheng Li bool 25869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ShouldBroadcastEvent (Event *event_ptr); 25879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25889b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Lipublic: 25899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const lldb::ABISP & 25909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetABI (); 25919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DynamicLoader * 25939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetDynamicLoader () 25949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 25959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_dyld_ap.get(); 25969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25989b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li OperatingSystem * 25999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetOperatingSystem () 26009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 26019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_os_ap.get(); 26029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual LanguageRuntime * 26069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GetLanguageRuntime (lldb::LanguageType language); 260726274fae33b7b056cf5fe9fd6e823cae9e4ddae2Wu-cheng Li 260826274fae33b7b056cf5fe9fd6e823cae9e4ddae2Wu-cheng Li virtual CPPLanguageRuntime * 260926274fae33b7b056cf5fe9fd6e823cae9e4ddae2Wu-cheng Li GetCPPLanguageRuntime (); 26109b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 2611c157e0cd161e5b3b28b72bafebb3360ed856a608Wu-cheng Li virtual ObjCLanguageRuntime * 2612c157e0cd161e5b3b28b72bafebb3360ed856a608Wu-cheng Li GetObjCLanguageRuntime (); 2613c157e0cd161e5b3b28b72bafebb3360ed856a608Wu-cheng Li 2614c157e0cd161e5b3b28b72bafebb3360ed856a608Wu-cheng Li bool 2615c157e0cd161e5b3b28b72bafebb3360ed856a608Wu-cheng Li IsRunning () const; 2616c157e0cd161e5b3b28b72bafebb3360ed856a608Wu-cheng Li 2617c157e0cd161e5b3b28b72bafebb3360ed856a608Wu-cheng Li DynamicCheckerFunctions *GetDynamicCheckers() 2618c157e0cd161e5b3b28b72bafebb3360ed856a608Wu-cheng Li { 2619c157e0cd161e5b3b28b72bafebb3360ed856a608Wu-cheng Li return m_dynamic_checkers_ap.get(); 2620c157e0cd161e5b3b28b72bafebb3360ed856a608Wu-cheng Li } 2621c157e0cd161e5b3b28b72bafebb3360ed856a608Wu-cheng Li 26229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void SetDynamicCheckers(DynamicCheckerFunctions *dynamic_checkers) 26239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2624c157e0cd161e5b3b28b72bafebb3360ed856a608Wu-cheng Li m_dynamic_checkers_ap.reset(dynamic_checkers); 2625c157e0cd161e5b3b28b72bafebb3360ed856a608Wu-cheng Li } 2626c157e0cd161e5b3b28b72bafebb3360ed856a608Wu-cheng Li 2627c157e0cd161e5b3b28b72bafebb3360ed856a608Wu-cheng Li //------------------------------------------------------------------ 26289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// Call this to set the lldb in the mode where it breaks on new thread 26299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// creations, and then auto-restarts. This is useful when you are trying 26309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// to run only one thread, but either that thread or the kernel is creating 26319b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// new threads in the process. If you stop when the thread is created, you 26329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// can immediately suspend it, and keep executing only the one thread you intend. 26339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// 26349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// @return 26359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /// Returns \b true if we were able to start up the notification 26369b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// \b false otherwise. 2637dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong //------------------------------------------------------------------ 26389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool 26399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StartNoticingNewThreads() 26409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 26419b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li return true; 26429b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li } 26439b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 26449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //------------------------------------------------------------------ 26459b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// Call this to turn off the stop & notice new threads mode. 26469b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// 26479b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li /// @return 26483f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li /// Returns \b true if we were able to start up the notification 26499c79938d47a3caa06e5fb956955374f30c55992bWu-cheng Li /// \b false otherwise. 26509b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li //------------------------------------------------------------------ 26519b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li virtual bool 26529b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li StopNoticingNewThreads() 26539b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li { 26549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 26559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 265732a972c693400db50717435139fa292a63bc937aEino-Ville Talvala void 265832a972c693400db50717435139fa292a63bc937aEino-Ville Talvala SetRunningUserExpression (bool on); 2659dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong 266032a972c693400db50717435139fa292a63bc937aEino-Ville Talvala //------------------------------------------------------------------ 2661dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong // lldb::ExecutionContextScope pure virtual functions 2662dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong //------------------------------------------------------------------ 2663dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong virtual Target * 2664dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong CalculateTarget () 266532a972c693400db50717435139fa292a63bc937aEino-Ville Talvala { 2666dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong return &m_target; 2667dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong } 2668dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong 2669dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong virtual Process * 2670dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong CalculateProcess () 2671dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong { 2672dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong return this; 2673dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong } 2674dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong 2675dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong virtual Thread * 2676dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong CalculateThread () 2677dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong { 2678dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong return NULL; 2679dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong } 2680dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong 2681dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong virtual StackFrame * 2682dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong CalculateStackFrame () 2683dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong { 2684dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong return NULL; 2685dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong } 2686dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong 2687dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong virtual void 2688dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong CalculateExecutionContext (ExecutionContext &exe_ctx); 2689dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong 2690dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong lldb::ProcessSP 2691dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong GetSP (); 2692dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong 2693dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dongprotected: 2694dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong //------------------------------------------------------------------ 2695dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong // NextEventAction provides a way to register an action on the next 2696dd0b16c26834d9a58b9865a467c7a26ea14482f3James Dong // event that is delivered to this process. There is currently only 269732a972c693400db50717435139fa292a63bc937aEino-Ville Talvala // one next event action allowed in the process at one time. If a 26984c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li // new "NextEventAction" is added while one is already present, the 269932a972c693400db50717435139fa292a63bc937aEino-Ville Talvala // old action will be discarded (with HandleBeingUnshipped called 27009b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li // after it is discarded.) 270132a972c693400db50717435139fa292a63bc937aEino-Ville Talvala //------------------------------------------------------------------ 270232a972c693400db50717435139fa292a63bc937aEino-Ville Talvala class NextEventAction 2703c157e0cd161e5b3b28b72bafebb3360ed856a608Wu-cheng Li { 27049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 27059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project typedef enum EventActionResult 2706c157e0cd161e5b3b28b72bafebb3360ed856a608Wu-cheng Li { 27079b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li eEventActionSuccess, 27089b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li eEventActionRetry, 27099b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li eEventActionExit 27109b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li } EventActionResult; 27119b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 27129b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li NextEventAction (Process *process) : 27139b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li m_process(process) 27149b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li {} 27159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~NextEventAction() {} 27169b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 27179b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li virtual EventActionResult PerformAction (lldb::EventSP &event_sp) = 0; 27189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void HandleBeingUnshipped () {}; 27199b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li virtual EventActionResult HandleBeingInterrupted () = 0; 27209b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li virtual const char *GetExitString() = 0; 27219b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li protected: 27229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Process *m_process; 27239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 27249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27254c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li void SetNextEventAction (Process::NextEventAction *next_event_action) 27264c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li { 27273f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li if (m_next_event_action_ap.get()) 27284c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li m_next_event_action_ap->HandleBeingUnshipped(); 27294c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li 27304c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li m_next_event_action_ap.reset(next_event_action); 27314c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li } 27324c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li 27334c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li // This is the completer for Attaching: 27344c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li class AttachCompletionHandler : public NextEventAction 27354c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li { 27364c4300c71229638183d814ab8374e09f722910f5Wu-cheng Li public: 27379b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li AttachCompletionHandler (Process *process) : 27389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NextEventAction(process) 27399b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li {} 27409b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li virtual ~AttachCompletionHandler() {} 27419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27429b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li virtual EventActionResult PerformAction (lldb::EventSP &event_sp); 27439b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li virtual EventActionResult HandleBeingInterrupted (); 27449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual const char *GetExitString(); 27459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private: 27469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project std::string m_exit_string; 27479b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li }; 27489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27499b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li bool 27509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project HijackPrivateProcessEvents (Listener *listener); 27519b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 27529b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li void 27539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RestorePrivateProcessEvents (); 27549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool 27569b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li PrivateStateThreadIsValid () const 27579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 27589b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li return m_private_state_thread != LLDB_INVALID_HOST_THREAD; 27599b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li } 27609b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 27619b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li //------------------------------------------------------------------ 27629b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li // Member variables 27639b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li //------------------------------------------------------------------ 27649b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li Target & m_target; ///< The target that owns this process. 27659b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li ThreadSafeValue<lldb::StateType> m_public_state; 27669b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li ThreadSafeValue<lldb::StateType> m_private_state; // The actual state of our process 27679b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li Broadcaster m_private_state_broadcaster; // This broadcaster feeds state changed events into the private state thread's listener. 27689b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li Broadcaster m_private_state_control_broadcaster; // This is the control broadcaster, used to pause, resume & stop the private state thread. 27699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Listener m_private_state_listener; // This is the listener for the private state thread. 27709b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li Predicate<bool> m_private_state_control_wait; /// This Predicate is used to signal that a control operation is complete. 27719b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li lldb::thread_t m_private_state_thread; // Thread ID for the thread that watches interal state events 27729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ProcessModID m_mod_id; ///< Tracks the state of the process over stops and other alterations. 27739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t m_thread_index_id; ///< Each thread is created with a 1 based index that won't get re-used. 27749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int m_exit_status; ///< The exit status of the process, or -1 if not set. 2775a18e90176a8e2442837d0503fbfd4adb9df0818fWu-cheng Li std::string m_exit_string; ///< A textual description of why a process exited. 2776a18e90176a8e2442837d0503fbfd4adb9df0818fWu-cheng Li ThreadList m_thread_list; ///< The threads for this process. 27779b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li std::vector<Notifications> m_notifications; ///< The list of notifications that this process can deliver. 27789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project std::vector<lldb::addr_t> m_image_tokens; 27795f1e69c76ef5886ed65e303490c5f660da4756efWu-cheng Li Listener &m_listener; 27809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BreakpointSiteList m_breakpoint_site_list; ///< This is the list of breakpoint locations we intend 27815f1e69c76ef5886ed65e303490c5f660da4756efWu-cheng Li ///< to insert in the target. 27829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project std::auto_ptr<DynamicLoader> m_dyld_ap; 27839b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li std::auto_ptr<DynamicCheckerFunctions> m_dynamic_checkers_ap; ///< The functions used by the expression parser to validate data that expressions use. 27849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project std::auto_ptr<OperatingSystem> m_os_ap; 27859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project UnixSignals m_unix_signals; /// This is the current signal set for this process. 27869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lldb::ABISP m_abi_sp; 2787a18e90176a8e2442837d0503fbfd4adb9df0818fWu-cheng Li lldb::InputReaderSP m_process_input_reader; 2788a18e90176a8e2442837d0503fbfd4adb9df0818fWu-cheng Li lldb_private::Communication m_stdio_communication; 2789a18e90176a8e2442837d0503fbfd4adb9df0818fWu-cheng Li lldb_private::Mutex m_stdio_communication_mutex; 27909b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li std::string m_stdout_data; 27919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MemoryCache m_memory_cache; 27925f1e69c76ef5886ed65e303490c5f660da4756efWu-cheng Li AllocatedMemoryCache m_allocated_memory_cache; 27939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool m_attached_to_process; /// Did we launch the process or attach to it? 27945f1e69c76ef5886ed65e303490c5f660da4756efWu-cheng Li 27959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project typedef std::map<lldb::LanguageType, lldb::LanguageRuntimeSP> LanguageRuntimeCollection; 27969b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li LanguageRuntimeCollection m_language_runtimes; 27979b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li std::auto_ptr<NextEventAction> m_next_event_action_ap; 27989b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 27999b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li enum { 28009b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li eCanJITDontKnow= 0, 28019b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li eCanJITYes, 28023f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li eCanJITNo 28033f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li } m_can_jit; 28045f1e69c76ef5886ed65e303490c5f660da4756efWu-cheng Li 28059b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li size_t 28065f1e69c76ef5886ed65e303490c5f660da4756efWu-cheng Li RemoveBreakpointOpcodesFromBuffer (lldb::addr_t addr, size_t size, uint8_t *buf) const; 28079b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li 28089b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li void 28099b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li SynchronouslyNotifyStateChanged (lldb::StateType state); 28109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void 28129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SetPublicState (lldb::StateType new_state); 28134a68e3c26dd2512c319071dc20074baa6e7d171fHai Guo 28141620d118a49dc6df7b0e83d7343f8a8bb6e23b12Wu-cheng Li void 2815454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li SetPrivateState (lldb::StateType state); 2816454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li 2817454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li bool 2818454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li StartPrivateStateThread (); 2819454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li 2820454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li void 2821454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li StopPrivateStateThread (); 2822454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li 2823454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li void 2824454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li PausePrivateStateThread (); 2825454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li 2826454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li void 2827454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li ResumePrivateStateThread (); 2828454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li 2829454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li static void * 2830454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li PrivateStateThread (void *arg); 2831454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li 2832454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li void * 2833454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li RunPrivateStateThread (); 2834454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li 2835454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li void 2836454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li HandlePrivateEvent (lldb::EventSP &event_sp); 2837454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li 2838454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li lldb::StateType 2839454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li WaitForProcessStopPrivate (const TimeValue *timeout, lldb::EventSP &event_sp); 28405f1e69c76ef5886ed65e303490c5f660da4756efWu-cheng Li 2841454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li // This waits for both the state change broadcaster, and the control broadcaster. 2842454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li // If control_only, it only waits for the control broadcaster. 2843454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li 2844454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li bool 2845454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li WaitForEventsPrivate (const TimeValue *timeout, lldb::EventSP &event_sp, bool control_only); 2846454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li 2847454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li lldb::StateType 2848454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li WaitForStateChangedEventsPrivate (const TimeValue *timeout, lldb::EventSP &event_sp); 2849454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li 2850454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li lldb::StateType 2851454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li WaitForState (const TimeValue *timeout, 2852454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li const lldb::StateType *match_states, 2853454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li const uint32_t num_match_states); 2854454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li 2855454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li size_t 2856454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li WriteMemoryPrivate (lldb::addr_t addr, const void *buf, size_t size, Error &error); 2857454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li 2858454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li void 2859454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li AppendSTDOUT (const char *s, size_t len); 2860454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li 2861454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li static void 2862454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li STDIOReadThreadBytesReceived (void *baton, const void *src, size_t src_len); 2863454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li 2864454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li void 2865454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li PushProcessInputReader (); 2866454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li 2867454630f23784afcf3dd6fc58becbb9fb6aa878a9Wu-cheng Li void 28687478ea6848c0059e65a4089b4ec2ff4158520870Wu-cheng Li PopProcessInputReader (); 2869da0a56df963353a1f1bd1914fa31f870d982dd5aScott Main 2870a696f5d667227365da732481770767dcb330dd23Mathias Agopian void 2871df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main ResetProcessInputReader (); 28727478ea6848c0059e65a4089b4ec2ff4158520870Wu-cheng Li 2873951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala void 2874951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala SetUpProcessInputReader (int file_descriptor); 2875951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala 2876951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala static size_t 2877951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala ProcessInputReaderCallback (void *baton, 2878951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala InputReader &reader, 2879951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala lldb::InputReaderAction notification, 2880951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala const char *bytes, 2881951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala size_t bytes_len); 2882951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala 2883951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala 2884951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvalaprivate: 2885951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala //------------------------------------------------------------------ 2886951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala // For Process only 2887951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala //------------------------------------------------------------------ 2888951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala void ControlPrivateStateThread (uint32_t signal); 2889951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala 2890951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala DISALLOW_COPY_AND_ASSIGN (Process); 2891951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala 2892951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala}; 2893951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala 2894951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala} // namespace lldb_private 2895951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala 2896951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala#endif // liblldb_Process_h_ 2897951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala