124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- Process.h -----------------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_Process_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_Process_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1407c51d09d4b61891cdc37f44bb332dc286b4de2fBenjamin Kramer#include <limits.h> 15b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton#include <spawn.h> 16b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <list> 19b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton#include <iosfwd> 20ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton#include <vector> 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h" 25e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton#include "lldb/Core/ArchSpec.h" 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Broadcaster.h" 27861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice#include "lldb/Core/Communication.h" 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Error.h" 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Event.h" 30a9385537809ef342c843c5ab972e513742652047Greg Clayton#include "lldb/Core/RangeMap.h" 317508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham#include "lldb/Core/StringList.h" 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ThreadSafeValue.h" 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/PluginInterface.h" 346e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice#include "lldb/Core/UserSettingsController.h" 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Breakpoint/BreakpointSiteList.h" 36a48fe1637ec6a381e500633c087f76662e364c20Sean Callanan#include "lldb/Expression/ClangPersistentVariables.h" 37f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan#include "lldb/Expression/IRDynamicChecks.h" 38ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton#include "lldb/Host/FileSpec.h" 391c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton#include "lldb/Host/Host.h" 40cf88b95d435873bd312e716da5701cf3882c5da4Ed Maste#include "lldb/Host/ProcessRunLock.h" 41e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton#include "lldb/Interpreter/Args.h" 42e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton#include "lldb/Interpreter/Options.h" 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/ExecutionContextScope.h" 44613b8739a4d489b7f1c571288d5786768c024205Greg Clayton#include "lldb/Target/Memory.h" 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/ThreadList.h" 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/UnixSignals.h" 47464c6161464694412b7472129e789248f1cf21b9Greg Clayton#include "lldb/Utility/PseudoTerminal.h" 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 51c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton//---------------------------------------------------------------------- 52c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton// ProcessProperties 53c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton//---------------------------------------------------------------------- 54c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Claytonclass ProcessProperties : public Properties 55c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton{ 56c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Claytonpublic: 57c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton ProcessProperties(bool is_global); 5886827fbccc9a4d1f9993d74940f724d63d826e45Jim Ingham 59c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton virtual 60c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton ~ProcessProperties(); 61c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton 62c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton bool 63c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton GetDisableMemoryCache() const; 6473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 65c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton Args 66c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton GetExtraStartupCommands () const; 676e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 68c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton void 69c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton SetExtraStartupCommands (const Args &args); 702e7f313dc473b036788319690116b324cb44b765Greg Clayton 712e7f313dc473b036788319690116b324cb44b765Greg Clayton FileSpec 722e7f313dc473b036788319690116b324cb44b765Greg Clayton GetPythonOSPluginPath () const; 732e7f313dc473b036788319690116b324cb44b765Greg Clayton 742e7f313dc473b036788319690116b324cb44b765Greg Clayton void 752e7f313dc473b036788319690116b324cb44b765Greg Clayton SetPythonOSPluginPath (const FileSpec &file); 76b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham 77b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham bool 78b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham GetIgnoreBreakpointsInExpressions () const; 79b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham 80b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham void 81b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham SetIgnoreBreakpointsInExpressions (bool ignore); 82b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham 83b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham bool 84b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham GetUnwindOnErrorInExpressions () const; 85b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham 86b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham void 87b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham SetUnwindOnErrorInExpressions (bool ignore); 88090f83176695d86197b0e86b67dee4160ec5003dJim Ingham 89090f83176695d86197b0e86b67dee4160ec5003dJim Ingham bool 90090f83176695d86197b0e86b67dee4160ec5003dJim Ingham GetStopOnSharedLibraryEvents () const; 91090f83176695d86197b0e86b67dee4160ec5003dJim Ingham 92090f83176695d86197b0e86b67dee4160ec5003dJim Ingham void 93090f83176695d86197b0e86b67dee4160ec5003dJim Ingham SetStopOnSharedLibraryEvents (bool stop); 94761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham 95761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham bool 96761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham GetDetachKeepsStopped () const; 97761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham 98761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham void 99761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham SetDetachKeepsStopped (bool keep_stopped); 100c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton}; 101c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton 102102b2c2681c9a830afe25bfea35557421905e42cGreg Claytontypedef std::shared_ptr<ProcessProperties> ProcessPropertiesSP; 1036e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 104b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 105b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// ProcessInfo 106b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// 107b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// A base class for information for a process. This can be used to fill 108b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// out information for a process prior to launching it, or it can be 109b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// used for an instance of a process and can be filled in with the 110b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// existing values for that process. 111b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 112e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Claytonclass ProcessInfo 113e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton{ 114e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Claytonpublic: 115e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton ProcessInfo () : 116ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton m_executable (), 117b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_arguments (), 118b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_environment (), 119444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton m_uid (UINT32_MAX), 120444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton m_gid (UINT32_MAX), 121e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_arch(), 122b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_pid (LLDB_INVALID_PROCESS_ID) 123e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 124e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 125b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 126e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton ProcessInfo (const char *name, 127e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton const ArchSpec &arch, 128e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton lldb::pid_t pid) : 129b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_executable (name, false), 130b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_arguments (), 131b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_environment(), 132444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton m_uid (UINT32_MAX), 133444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton m_gid (UINT32_MAX), 134e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_arch (arch), 135b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_pid (pid) 136e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 137e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 138e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 139e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton void 140e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton Clear () 141e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 142ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton m_executable.Clear(); 143b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_arguments.Clear(); 144b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_environment.Clear(); 145444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton m_uid = UINT32_MAX; 146444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton m_gid = UINT32_MAX; 147e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_arch.Clear(); 148e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_pid = LLDB_INVALID_PROCESS_ID; 149e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 150e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 151e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton const char * 152e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetName() const 153e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 154ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton return m_executable.GetFilename().GetCString(); 155e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 156b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 157e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton size_t 158e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetNameLength() const 159e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 160ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton return m_executable.GetFilename().GetLength(); 161e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 162e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 163ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton FileSpec & 164ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton GetExecutableFile () 165ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 166ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton return m_executable; 167e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 16836bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton 16936bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton void 17036bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton SetExecutableFile (const FileSpec &exe_file, bool add_exe_file_as_first_arg) 17136bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton { 17236bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton if (exe_file) 17336bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton { 17436bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton m_executable = exe_file; 17536bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton if (add_exe_file_as_first_arg) 17636bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton { 17736bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton char filename[PATH_MAX]; 17836bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton if (exe_file.GetPath(filename, sizeof(filename))) 179c86723f0a71f5d929f4543c544d9255da52ea49dHan Ming Ong m_arguments.InsertArgumentAtIndex (0, filename); 18036bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton } 18136bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton } 18236bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton else 18336bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton { 18436bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton m_executable.Clear(); 18536bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton } 18636bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton } 18736bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton 188ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton const FileSpec & 189ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton GetExecutableFile () const 19024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 191ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton return m_executable; 19224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 19324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 194a733c04608cc94592a15d27583529588e19db552Greg Clayton uint32_t 195b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetUserID() const 196a733c04608cc94592a15d27583529588e19db552Greg Clayton { 197b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_uid; 198a733c04608cc94592a15d27583529588e19db552Greg Clayton } 199b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 200a733c04608cc94592a15d27583529588e19db552Greg Clayton uint32_t 201b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetGroupID() const 202a733c04608cc94592a15d27583529588e19db552Greg Clayton { 203b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_gid; 204a733c04608cc94592a15d27583529588e19db552Greg Clayton } 20524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 20624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 207b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton UserIDIsValid () const 20824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 209b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_uid != UINT32_MAX; 21024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 21124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 21224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 213b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GroupIDIsValid () const 21424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 215b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_gid != UINT32_MAX; 21624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 21724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 218a733c04608cc94592a15d27583529588e19db552Greg Clayton void 219b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetUserID (uint32_t uid) 220a733c04608cc94592a15d27583529588e19db552Greg Clayton { 221b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_uid = uid; 222a733c04608cc94592a15d27583529588e19db552Greg Clayton } 223a733c04608cc94592a15d27583529588e19db552Greg Clayton 224a733c04608cc94592a15d27583529588e19db552Greg Clayton void 225b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetGroupID (uint32_t gid) 226a733c04608cc94592a15d27583529588e19db552Greg Clayton { 227b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_gid = gid; 228a733c04608cc94592a15d27583529588e19db552Greg Clayton } 229b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 230e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton ArchSpec & 231e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetArchitecture () 232e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 233e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_arch; 234e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 235b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 236e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton const ArchSpec & 237e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetArchitecture () const 238e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 239e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_arch; 240e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 241b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 242e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton lldb::pid_t 243e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetProcessID () const 244e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 245e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_pid; 246e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 247e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 248e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton void 249e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton SetProcessID (lldb::pid_t pid) 250e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 251e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_pid = pid; 252e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 253e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 254a733c04608cc94592a15d27583529588e19db552Greg Clayton bool 255a733c04608cc94592a15d27583529588e19db552Greg Clayton ProcessIDIsValid() const 256a733c04608cc94592a15d27583529588e19db552Greg Clayton { 257a733c04608cc94592a15d27583529588e19db552Greg Clayton return m_pid != LLDB_INVALID_PROCESS_ID; 258a733c04608cc94592a15d27583529588e19db552Greg Clayton } 259b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 260b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 261b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Dump (Stream &s, Platform *platform) const; 262b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 263b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Args & 264b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetArguments () 265b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 266b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_arguments; 267b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 268b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 269b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const Args & 270b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetArguments () const 271b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 272b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_arguments; 273b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 274b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 2750c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton const char * 2760c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton GetArg0 () const 2770c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton { 2780c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton if (m_arg0.empty()) 2790c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton return NULL; 2800c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton return m_arg0.c_str(); 2810c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton } 2820c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton 2830c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton void 2840c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton SetArg0 (const char *arg) 2850c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton { 2860c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton if (arg && arg[0]) 2870c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton m_arg0 = arg; 288ff1bbd78581ab2f1e43fbbc8b6e2dc23a9745967Andrew Kaylor else 289ff1bbd78581ab2f1e43fbbc8b6e2dc23a9745967Andrew Kaylor m_arg0.clear(); 2900c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton } 2910c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton 292b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 2930c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton SetArguments (const Args& args, bool first_arg_is_executable); 294b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 29536bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton void 2960c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton SetArguments (char const **argv, bool first_arg_is_executable); 29736bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton 298b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Args & 299b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetEnvironmentEntries () 300b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 301b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_environment; 302b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 303b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 304b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const Args & 305b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetEnvironmentEntries () const 306b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 307b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_environment; 308b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 309b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 310b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonprotected: 311b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileSpec m_executable; 3120c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton std::string m_arg0; // argv[0] if supported. If empty, then use m_executable. 3130c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton // Not all process plug-ins support specifying an argv[0] 3140c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton // that differs from the resolved platform executable 3150c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton // (which is in m_executable) 3160c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton Args m_arguments; // All program arguments except argv[0] 317b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Args m_environment; 318b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t m_uid; 319b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t m_gid; 320b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ArchSpec m_arch; 321b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton lldb::pid_t m_pid; 322b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton}; 323b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 324b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 325b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// ProcessInstanceInfo 326b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// 327b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// Describes an existing process and any discoverable information that 328b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// pertains to that process. 329b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 330b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonclass ProcessInstanceInfo : public ProcessInfo 331b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton{ 332b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonpublic: 333b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfo () : 334b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInfo (), 335b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_euid (UINT32_MAX), 336b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_egid (UINT32_MAX), 337b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_parent_pid (LLDB_INVALID_PROCESS_ID) 338b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 339b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 340b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 341b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfo (const char *name, 342b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const ArchSpec &arch, 343b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton lldb::pid_t pid) : 344b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInfo (name, arch, pid), 345b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_euid (UINT32_MAX), 346b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_egid (UINT32_MAX), 347b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_parent_pid (LLDB_INVALID_PROCESS_ID) 348b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 349b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 350b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 351b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 352b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Clear () 353b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 354b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInfo::Clear(); 355b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_euid = UINT32_MAX; 356b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_egid = UINT32_MAX; 357b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_parent_pid = LLDB_INVALID_PROCESS_ID; 358b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 359b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 360b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t 361b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetEffectiveUserID() const 362b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 363b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_euid; 364b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 365b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 366b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t 367b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetEffectiveGroupID() const 368b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 369b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_egid; 370b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 371b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 372b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool 373b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton EffectiveUserIDIsValid () const 374b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 375b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_euid != UINT32_MAX; 376b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 377b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 378b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool 379b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton EffectiveGroupIDIsValid () const 380b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 381b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_egid != UINT32_MAX; 382b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 383b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 384b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 385b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetEffectiveUserID (uint32_t uid) 386b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 387b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_euid = uid; 388b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 389b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 390b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 391b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetEffectiveGroupID (uint32_t gid) 392b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 393b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_egid = gid; 394b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 395a733c04608cc94592a15d27583529588e19db552Greg Clayton 396a733c04608cc94592a15d27583529588e19db552Greg Clayton lldb::pid_t 397a733c04608cc94592a15d27583529588e19db552Greg Clayton GetParentProcessID () const 398a733c04608cc94592a15d27583529588e19db552Greg Clayton { 399a733c04608cc94592a15d27583529588e19db552Greg Clayton return m_parent_pid; 400a733c04608cc94592a15d27583529588e19db552Greg Clayton } 401a733c04608cc94592a15d27583529588e19db552Greg Clayton 402a733c04608cc94592a15d27583529588e19db552Greg Clayton void 403a733c04608cc94592a15d27583529588e19db552Greg Clayton SetParentProcessID (lldb::pid_t pid) 404a733c04608cc94592a15d27583529588e19db552Greg Clayton { 405a733c04608cc94592a15d27583529588e19db552Greg Clayton m_parent_pid = pid; 406a733c04608cc94592a15d27583529588e19db552Greg Clayton } 407a733c04608cc94592a15d27583529588e19db552Greg Clayton 408a733c04608cc94592a15d27583529588e19db552Greg Clayton bool 409a733c04608cc94592a15d27583529588e19db552Greg Clayton ParentProcessIDIsValid() const 410a733c04608cc94592a15d27583529588e19db552Greg Clayton { 411a733c04608cc94592a15d27583529588e19db552Greg Clayton return m_parent_pid != LLDB_INVALID_PROCESS_ID; 412a733c04608cc94592a15d27583529588e19db552Greg Clayton } 41324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 41424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 41524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton Dump (Stream &s, Platform *platform) const; 41624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 41724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton static void 418b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton DumpTableHeader (Stream &s, Platform *platform, bool show_args, bool verbose); 419b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 420b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 421b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton DumpAsTableRow (Stream &s, Platform *platform, bool show_args, bool verbose) const; 422b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 423b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonprotected: 424b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t m_euid; 425b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton uint32_t m_egid; 426b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton lldb::pid_t m_parent_pid; 427b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton}; 4281c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton 429b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 430b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 431b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// ProcessLaunchInfo 432b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// 433b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// Describes any information that is required to launch a process. 434b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 435b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 436b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonclass ProcessLaunchInfo : public ProcessInfo 437b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton{ 438b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonpublic: 439b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 440b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton class FileAction 441b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 442b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton public: 44336bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton enum Action 44436bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton { 44536bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton eFileActionNone, 44636bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton eFileActionClose, 44736bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton eFileActionDuplicate, 44836bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton eFileActionOpen 44936bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton }; 45036bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton 451b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 452b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction () : 453b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_action (eFileActionNone), 454b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_fd (-1), 455b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_arg (-1), 456b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_path () 457b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 458b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 459b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 460b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 461b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Clear() 462b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 463b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_action = eFileActionNone; 464b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_fd = -1; 465b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_arg = -1; 466b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_path.clear(); 467b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 468b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 469b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool 470b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Close (int fd); 471b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 472b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool 473b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Duplicate (int fd, int dup_fd); 474b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 475b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool 476b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Open (int fd, const char *path, bool read, bool write); 477b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 478b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton static bool 479b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AddPosixSpawnFileAction (posix_spawn_file_actions_t *file_actions, 480b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const FileAction *info, 481b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Log *log, 482b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Error& error); 483b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 48436bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton int 48536bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton GetFD () const 486b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 48736bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton return m_fd; 48836bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton } 48936bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton 49036bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton Action 49136bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton GetAction () const 49236bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton { 49336bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton return m_action; 49436bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton } 49536bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton 49636bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton int 49736bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton GetActionArgument () const 49836bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton { 49936bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton return m_arg; 50036bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton } 50136bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton 50236bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton const char * 50336bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton GetPath () const 50436bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton { 50536bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton if (m_path.empty()) 50636bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton return NULL; 50736bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton return m_path.c_str(); 50836bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton } 509b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 51036bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton protected: 511b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Action m_action; // The action for this file 512b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton int m_fd; // An existing file descriptor 513b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton int m_arg; // oflag for eFileActionOpen*, dup_fd for eFileActionDuplicate 514b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton std::string m_path; // A file path to use for opening after fork or posix_spawn 515b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton }; 516b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 517b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessLaunchInfo () : 518b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInfo(), 519ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton m_working_dir (), 520ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton m_plugin_name (), 521ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton m_shell (), 522ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton m_flags (0), 523ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton m_file_actions (), 524464c6161464694412b7472129e789248f1cf21b9Greg Clayton m_pty (), 525ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton m_resume_count (0), 526ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton m_monitor_callback (NULL), 527ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton m_monitor_callback_baton (NULL), 528ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton m_monitor_signals (false) 529b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 530b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 531b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 53236bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton ProcessLaunchInfo (const char *stdin_path, 53336bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton const char *stdout_path, 53436bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton const char *stderr_path, 53536bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton const char *working_directory, 53636bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton uint32_t launch_flags) : 53736bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton ProcessInfo(), 5381c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton m_working_dir (), 5391c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton m_plugin_name (), 5401c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton m_shell (), 5411c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton m_flags (launch_flags), 5421c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton m_file_actions (), 543464c6161464694412b7472129e789248f1cf21b9Greg Clayton m_pty (), 5441c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton m_resume_count (0), 5451c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton m_monitor_callback (NULL), 5461c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton m_monitor_callback_baton (NULL), 5471c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton m_monitor_signals (false) 54836bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton { 54995ec1688db0efe51509ad9356052f5004d8856e0Greg Clayton if (stdin_path) 55036bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton { 55136bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton ProcessLaunchInfo::FileAction file_action; 55236bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton const bool read = true; 55395ec1688db0efe51509ad9356052f5004d8856e0Greg Clayton const bool write = false; 55495ec1688db0efe51509ad9356052f5004d8856e0Greg Clayton if (file_action.Open(STDIN_FILENO, stdin_path, read, write)) 55536bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton AppendFileAction (file_action); 55636bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton } 55736bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton if (stdout_path) 55836bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton { 55936bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton ProcessLaunchInfo::FileAction file_action; 56036bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton const bool read = false; 56136bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton const bool write = true; 56236bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton if (file_action.Open(STDOUT_FILENO, stdout_path, read, write)) 56336bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton AppendFileAction (file_action); 56436bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton } 56595ec1688db0efe51509ad9356052f5004d8856e0Greg Clayton if (stderr_path) 56636bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton { 56736bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton ProcessLaunchInfo::FileAction file_action; 56895ec1688db0efe51509ad9356052f5004d8856e0Greg Clayton const bool read = false; 56995ec1688db0efe51509ad9356052f5004d8856e0Greg Clayton const bool write = true; 57095ec1688db0efe51509ad9356052f5004d8856e0Greg Clayton if (file_action.Open(STDERR_FILENO, stderr_path, read, write)) 57136bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton AppendFileAction (file_action); 57236bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton } 57336bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton if (working_directory) 57436bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton SetWorkingDirectory(working_directory); 57536bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton } 576abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton 577b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 578b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendFileAction (const FileAction &info) 579b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 580b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_file_actions.push_back(info); 581b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 582b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 583abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton bool 584b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendCloseFileAction (int fd) 585b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 586b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction file_action; 587abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton if (file_action.Close (fd)) 588abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton { 589abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton AppendFileAction (file_action); 590abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton return true; 591abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton } 592abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton return false; 593b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 594b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 595abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton bool 5960a8dcacde404c520f1131c641041dceb9f68b6faGreg Clayton AppendDuplicateFileAction (int fd, int dup_fd) 597b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 598b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction file_action; 599abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton if (file_action.Duplicate (fd, dup_fd)) 600abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton { 601abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton AppendFileAction (file_action); 602abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton return true; 603abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton } 604abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton return false; 605b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 606b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 607abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton bool 608b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendOpenFileAction (int fd, const char *path, bool read, bool write) 609b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 610b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction file_action; 611abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton if (file_action.Open (fd, path, read, write)) 612abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton { 613abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton AppendFileAction (file_action); 614abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton return true; 615abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton } 616abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton return false; 617b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 618b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 619abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton bool 620b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton AppendSuppressFileAction (int fd, bool read, bool write) 621b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 622b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FileAction file_action; 623abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton if (file_action.Open (fd, "/dev/null", read, write)) 624abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton { 625abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton AppendFileAction (file_action); 626abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton return true; 627abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton } 628abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton return false; 629b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 630abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton 631abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton void 632464c6161464694412b7472129e789248f1cf21b9Greg Clayton FinalizeFileActions (Target *target, 633464c6161464694412b7472129e789248f1cf21b9Greg Clayton bool default_to_use_pty); 634b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 635b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton size_t 636b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetNumFileActions () const 637b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 638b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_file_actions.size(); 639b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 640b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 641b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const FileAction * 642b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetFileActionAtIndex (size_t idx) const 643b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 644b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (idx < m_file_actions.size()) 645b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return &m_file_actions[idx]; 646b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return NULL; 647b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 648b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 64936bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton const FileAction * 65036bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton GetFileActionForFD (int fd) const 65136bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton { 65236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton for (size_t idx=0, count=m_file_actions.size(); idx < count; ++idx) 65336bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton { 65436bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton if (m_file_actions[idx].GetFD () == fd) 65536bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton return &m_file_actions[idx]; 65636bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton } 65736bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton return NULL; 65836bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton } 65936bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton 660b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Flags & 661b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetFlags () 662b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 663b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_flags; 664b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 665b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 666b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const Flags & 667b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetFlags () const 668b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 669b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_flags; 670b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 671b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 672b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const char * 673b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetWorkingDirectory () const 674b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 675b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (m_working_dir.empty()) 676b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return NULL; 677b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_working_dir.c_str(); 678b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 67924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 68024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 681b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetWorkingDirectory (const char *working_dir) 682b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 683b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (working_dir && working_dir[0]) 684b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_working_dir.assign (working_dir); 685b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton else 686b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_working_dir.clear(); 687b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 688ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 689b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 690b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SwapWorkingDirectory (std::string &working_dir) 691ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 692b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_working_dir.swap (working_dir); 693b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 694b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 695b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 696b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const char * 697b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetProcessPluginName () const 698b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 699b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (m_plugin_name.empty()) 700b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return NULL; 701b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return m_plugin_name.c_str(); 702b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 703b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 704b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 705b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton SetProcessPluginName (const char *plugin) 706b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 707b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (plugin && plugin[0]) 708b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_plugin_name.assign (plugin); 709b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton else 710b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_plugin_name.clear(); 711ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 712ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 713527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton const char * 714527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton GetShell () const 715527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton { 716527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton if (m_shell.empty()) 717527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton return NULL; 718527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton return m_shell.c_str(); 719527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton } 720527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton 721527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton void 722527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton SetShell (const char * path) 723527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton { 724527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton if (path && path[0]) 725527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton { 726527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_shell.assign (path); 727527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_flags.Set (lldb::eLaunchFlagLaunchInShell); 728527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton } 729527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton else 730527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton { 731527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_shell.clear(); 732527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_flags.Clear (lldb::eLaunchFlagLaunchInShell); 733527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton } 734527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton } 735527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton 736527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton uint32_t 737527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton GetResumeCount () const 738527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton { 739527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton return m_resume_count; 740527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton } 741527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton 742527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton void 743527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton SetResumeCount (uint32_t c) 744527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton { 745527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_resume_count = c; 746527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton } 747b7b2532bf23c852ea3e43d10f2377338be5b464fJim Ingham 748b7b2532bf23c852ea3e43d10f2377338be5b464fJim Ingham bool 749b7b2532bf23c852ea3e43d10f2377338be5b464fJim Ingham GetLaunchInSeparateProcessGroup () 750b7b2532bf23c852ea3e43d10f2377338be5b464fJim Ingham { 751b7b2532bf23c852ea3e43d10f2377338be5b464fJim Ingham return m_flags.Test(lldb::eLaunchFlagLaunchInSeparateProcessGroup); 752b7b2532bf23c852ea3e43d10f2377338be5b464fJim Ingham } 753b7b2532bf23c852ea3e43d10f2377338be5b464fJim Ingham 754b7b2532bf23c852ea3e43d10f2377338be5b464fJim Ingham void 755b7b2532bf23c852ea3e43d10f2377338be5b464fJim Ingham SetLaunchInSeparateProcessGroup (bool separate) 756b7b2532bf23c852ea3e43d10f2377338be5b464fJim Ingham { 757b7b2532bf23c852ea3e43d10f2377338be5b464fJim Ingham if (separate) 758b7b2532bf23c852ea3e43d10f2377338be5b464fJim Ingham m_flags.Set(lldb::eLaunchFlagLaunchInSeparateProcessGroup); 759b7b2532bf23c852ea3e43d10f2377338be5b464fJim Ingham else 760b7b2532bf23c852ea3e43d10f2377338be5b464fJim Ingham m_flags.Clear (lldb::eLaunchFlagLaunchInSeparateProcessGroup); 761b7b2532bf23c852ea3e43d10f2377338be5b464fJim Ingham 762b7b2532bf23c852ea3e43d10f2377338be5b464fJim Ingham } 763527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton 764b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 765b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Clear () 766ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 767b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInfo::Clear(); 768b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_working_dir.clear(); 769b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_plugin_name.clear(); 770527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_shell.clear(); 771b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_flags.Clear(); 772b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_file_actions.clear(); 773527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_resume_count = 0; 774ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 775a733c04608cc94592a15d27583529588e19db552Greg Clayton 776527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton bool 77797471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton ConvertArgumentsForLaunchingInShell (Error &error, 77897471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton bool localhost, 77997471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton bool will_debug, 78097471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton bool first_arg_is_full_shell_command); 781527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton 7821c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton void 7831c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton SetMonitorProcessCallback (Host::MonitorChildProcessCallback callback, 7841c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton void *baton, 7851c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton bool monitor_signals) 7861c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton { 7871c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton m_monitor_callback = callback; 7881c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton m_monitor_callback_baton = baton; 7891c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton m_monitor_signals = monitor_signals; 7901c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton } 7911c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton 7921c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton bool 7931c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton MonitorProcess () const 7941c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton { 7951c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton if (m_monitor_callback && ProcessIDIsValid()) 7961c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton { 7971c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton Host::StartMonitoringChildProcess (m_monitor_callback, 7981c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton m_monitor_callback_baton, 7991c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton GetProcessID(), 8001c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton m_monitor_signals); 8011c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton return true; 8021c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton } 8031c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton return false; 8041c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton } 8051c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton 806464c6161464694412b7472129e789248f1cf21b9Greg Clayton lldb_utility::PseudoTerminal & 807464c6161464694412b7472129e789248f1cf21b9Greg Clayton GetPTY () 808464c6161464694412b7472129e789248f1cf21b9Greg Clayton { 809464c6161464694412b7472129e789248f1cf21b9Greg Clayton return m_pty; 810464c6161464694412b7472129e789248f1cf21b9Greg Clayton } 8111c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton 812e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Claytonprotected: 813b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton std::string m_working_dir; 814b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton std::string m_plugin_name; 815527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton std::string m_shell; 816b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Flags m_flags; // Bitwise OR of bits from lldb::LaunchFlags 817b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton std::vector<FileAction> m_file_actions; // File actions for any other files 818464c6161464694412b7472129e789248f1cf21b9Greg Clayton lldb_utility::PseudoTerminal m_pty; 819527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton uint32_t m_resume_count; // How many times do we resume after launching 8201c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton Host::MonitorChildProcessCallback m_monitor_callback; 8211c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton void *m_monitor_callback_baton; 8221c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton bool m_monitor_signals; 823b7b2532bf23c852ea3e43d10f2377338be5b464fJim Ingham 824527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton}; 825527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton 826527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton//---------------------------------------------------------------------- 827527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton// ProcessLaunchInfo 828527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton// 829527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton// Describes any information that is required to launch a process. 830527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton//---------------------------------------------------------------------- 831527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton 832527154d8e532f27f25af226c9e1dac607c48b5d1Greg Claytonclass ProcessAttachInfo : public ProcessInstanceInfo 833527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton{ 834527154d8e532f27f25af226c9e1dac607c48b5d1Greg Claytonpublic: 835527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton ProcessAttachInfo() : 836527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton ProcessInstanceInfo(), 837527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_plugin_name (), 838527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_resume_count (0), 8397c09997f9a65bdfd9a0cbd7783d5a5f0a9f83646Johnny Chen m_wait_for_launch (false), 8403a458eb1e413d39546b664813bba9f9ac292357eJim Ingham m_ignore_existing (true), 8417c09997f9a65bdfd9a0cbd7783d5a5f0a9f83646Johnny Chen m_continue_once_attached (false) 842527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton { 843527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton } 844527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton 845527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton ProcessAttachInfo (const ProcessLaunchInfo &launch_info) : 846527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton ProcessInstanceInfo(), 847527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_plugin_name (), 848527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_resume_count (0), 8497c09997f9a65bdfd9a0cbd7783d5a5f0a9f83646Johnny Chen m_wait_for_launch (false), 8503a458eb1e413d39546b664813bba9f9ac292357eJim Ingham m_ignore_existing (true), 8517c09997f9a65bdfd9a0cbd7783d5a5f0a9f83646Johnny Chen m_continue_once_attached (false) 852527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton { 853527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton ProcessInfo::operator= (launch_info); 854527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton SetProcessPluginName (launch_info.GetProcessPluginName()); 855527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton SetResumeCount (launch_info.GetResumeCount()); 856527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton } 857527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton 858527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton bool 859527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton GetWaitForLaunch () const 860527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton { 861527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton return m_wait_for_launch; 862527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton } 863527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton 864527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton void 865527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton SetWaitForLaunch (bool b) 866527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton { 867527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_wait_for_launch = b; 868527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton } 869527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton 8707c09997f9a65bdfd9a0cbd7783d5a5f0a9f83646Johnny Chen bool 8713a458eb1e413d39546b664813bba9f9ac292357eJim Ingham GetIgnoreExisting () const 8723a458eb1e413d39546b664813bba9f9ac292357eJim Ingham { 8733a458eb1e413d39546b664813bba9f9ac292357eJim Ingham return m_ignore_existing; 8743a458eb1e413d39546b664813bba9f9ac292357eJim Ingham } 8753a458eb1e413d39546b664813bba9f9ac292357eJim Ingham 8763a458eb1e413d39546b664813bba9f9ac292357eJim Ingham void 8773a458eb1e413d39546b664813bba9f9ac292357eJim Ingham SetIgnoreExisting (bool b) 8783a458eb1e413d39546b664813bba9f9ac292357eJim Ingham { 8793a458eb1e413d39546b664813bba9f9ac292357eJim Ingham m_ignore_existing = b; 8803a458eb1e413d39546b664813bba9f9ac292357eJim Ingham } 8813a458eb1e413d39546b664813bba9f9ac292357eJim Ingham 8823a458eb1e413d39546b664813bba9f9ac292357eJim Ingham bool 8837c09997f9a65bdfd9a0cbd7783d5a5f0a9f83646Johnny Chen GetContinueOnceAttached () const 8847c09997f9a65bdfd9a0cbd7783d5a5f0a9f83646Johnny Chen { 8857c09997f9a65bdfd9a0cbd7783d5a5f0a9f83646Johnny Chen return m_continue_once_attached; 8867c09997f9a65bdfd9a0cbd7783d5a5f0a9f83646Johnny Chen } 8877c09997f9a65bdfd9a0cbd7783d5a5f0a9f83646Johnny Chen 8887c09997f9a65bdfd9a0cbd7783d5a5f0a9f83646Johnny Chen void 8897c09997f9a65bdfd9a0cbd7783d5a5f0a9f83646Johnny Chen SetContinueOnceAttached (bool b) 8907c09997f9a65bdfd9a0cbd7783d5a5f0a9f83646Johnny Chen { 8917c09997f9a65bdfd9a0cbd7783d5a5f0a9f83646Johnny Chen m_continue_once_attached = b; 8927c09997f9a65bdfd9a0cbd7783d5a5f0a9f83646Johnny Chen } 8937c09997f9a65bdfd9a0cbd7783d5a5f0a9f83646Johnny Chen 894527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton uint32_t 895527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton GetResumeCount () const 896527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton { 897527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton return m_resume_count; 898527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton } 899527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton 900527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton void 901527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton SetResumeCount (uint32_t c) 902527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton { 903527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_resume_count = c; 904527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton } 905527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton 906527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton const char * 907527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton GetProcessPluginName () const 908527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton { 909527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton if (m_plugin_name.empty()) 910527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton return NULL; 911527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton return m_plugin_name.c_str(); 912527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton } 913527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton 914527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton void 915527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton SetProcessPluginName (const char *plugin) 916527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton { 917527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton if (plugin && plugin[0]) 918527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_plugin_name.assign (plugin); 919527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton else 920527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_plugin_name.clear(); 921527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton } 922527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton 923527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton void 924527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton Clear () 925527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton { 926527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton ProcessInstanceInfo::Clear(); 927527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_plugin_name.clear(); 928527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_resume_count = 0; 929527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_wait_for_launch = false; 9303a458eb1e413d39546b664813bba9f9ac292357eJim Ingham m_ignore_existing = true; 9313a458eb1e413d39546b664813bba9f9ac292357eJim Ingham m_continue_once_attached = false; 932527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton } 933527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton 934527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton bool 935527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton ProcessInfoSpecified () const 936527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton { 937527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton if (GetExecutableFile()) 938527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton return true; 939527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton if (GetProcessID() != LLDB_INVALID_PROCESS_ID) 940527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton return true; 941527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton if (GetParentProcessID() != LLDB_INVALID_PROCESS_ID) 942527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton return true; 943527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton return false; 944527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton } 945527154d8e532f27f25af226c9e1dac607c48b5d1Greg Claytonprotected: 946527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton std::string m_plugin_name; 947527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton uint32_t m_resume_count; // How many times do we resume after launching 948527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton bool m_wait_for_launch; 9493a458eb1e413d39546b664813bba9f9ac292357eJim Ingham bool m_ignore_existing; 9507c09997f9a65bdfd9a0cbd7783d5a5f0a9f83646Johnny Chen bool m_continue_once_attached; // Supports the use-case scenario of immediately continuing the process once attached. 951e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton}; 952e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 953b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonclass ProcessLaunchCommandOptions : public Options 95424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton{ 95524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonpublic: 956b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 957b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessLaunchCommandOptions (CommandInterpreter &interpreter) : 958b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Options(interpreter) 959b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 960143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton // Keep default values of all options in one place: OptionParsingStarting () 961143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionParsingStarting (); 962b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 963b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 964b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ~ProcessLaunchCommandOptions () 965b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 966b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 967b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 968b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Error 969143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton SetOptionValue (uint32_t option_idx, const char *option_arg); 970b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 971b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton void 972143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionParsingStarting () 973b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 974b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton launch_info.Clear(); 975b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 976b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 977b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const OptionDefinition* 978b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetDefinitions () 979b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 980b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return g_option_table; 981b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 982b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 983b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton // Options table: Required for subclasses of Options. 984b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 985b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton static OptionDefinition g_option_table[]; 986b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 987b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton // Instance variables to hold the values for command options. 988b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 989b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessLaunchInfo launch_info; 990b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton}; 991b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 992b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 993b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// ProcessInstanceInfoMatch 994b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// 995b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// A class to help matching one ProcessInstanceInfo to another. 996b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 997b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 998b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonclass ProcessInstanceInfoMatch 999b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton{ 1000b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonpublic: 1001b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfoMatch () : 100224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_match_info (), 1003a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton m_name_match_type (eNameMatchIgnore), 100424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_match_all_users (false) 100524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 100624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 100724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 1008b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfoMatch (const char *process_name, 1009a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton NameMatchType process_name_match_type) : 101024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_match_info (), 101124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_name_match_type (process_name_match_type), 101224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_match_all_users (false) 101324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 1014527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton m_match_info.GetExecutableFile().SetFile(process_name, false); 101524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 101624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 1017b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfo & 101824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetProcessInfo () 101924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 102024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_match_info; 102124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 102224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 1023b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const ProcessInstanceInfo & 102424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetProcessInfo () const 102524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 102624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_match_info; 102724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 102824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 102924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 103024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetMatchAllUsers () const 103124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 103224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_match_all_users; 103324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 103424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 103524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 103624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton SetMatchAllUsers (bool b) 103724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 103824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_match_all_users = b; 103924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 104024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 1041a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton NameMatchType 104224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetNameMatchType () const 104324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 104424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_name_match_type; 104524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 104624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 104724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 1048a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton SetNameMatchType (NameMatchType name_match_type) 104924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 105024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton m_name_match_type = name_match_type; 105124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 105224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 105324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 105424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton NameMatches (const char *process_name) const; 105524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 105624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 1057b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Matches (const ProcessInstanceInfo &proc_info) const; 105824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 105924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool 106024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton MatchAllProcesses () const; 106124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 106224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton Clear (); 106324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 106424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonprotected: 1065b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfo m_match_info; 1066a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton NameMatchType m_name_match_type; 106724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool m_match_all_users; 106824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton}; 106924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 1070b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonclass ProcessInstanceInfoList 1071e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton{ 1072e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Claytonpublic: 1073b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfoList () : 1074e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_infos() 1075e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 1076e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 1077e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 1078e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton void 1079e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton Clear() 1080e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 1081e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_infos.clear(); 1082e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 1083e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 108436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t 1085e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton GetSize() 1086e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 1087e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_infos.size(); 1088e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 1089e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 1090e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton void 1091b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Append (const ProcessInstanceInfo &info) 1092e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 1093e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton m_infos.push_back (info); 1094e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 1095e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 1096e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton const char * 109736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetProcessNameAtIndex (size_t idx) 1098e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 1099e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton if (idx < m_infos.size()) 1100e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_infos[idx].GetName(); 1101e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return NULL; 1102e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 1103e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 1104e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton size_t 110536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetProcessNameLengthAtIndex (size_t idx) 1106e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 1107e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton if (idx < m_infos.size()) 1108e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_infos[idx].GetNameLength(); 1109e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return 0; 1110e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 1111e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 1112e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton lldb::pid_t 111336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetProcessIDAtIndex (size_t idx) 1114e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 1115e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton if (idx < m_infos.size()) 1116e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return m_infos[idx].GetProcessID(); 11172bc9eb3ba78efc64a273729b480bafc3bbaa433aJohnny Chen return 0; 1118e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 1119e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 1120e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton bool 112136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetInfoAtIndex (size_t idx, ProcessInstanceInfo &info) 1122e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 1123e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton if (idx < m_infos.size()) 1124e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton { 1125e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton info = m_infos[idx]; 1126e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return true; 1127e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 1128e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton return false; 1129e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton } 1130e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 113124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // You must ensure "idx" is valid before calling this function 1132b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const ProcessInstanceInfo & 113336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetProcessInfoAtIndex (size_t idx) const 113424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 113524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton assert (idx < m_infos.size()); 113624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return m_infos[idx]; 113724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 113824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 1139e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Claytonprotected: 1140b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton typedef std::vector<ProcessInstanceInfo> collection; 1141e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton collection m_infos; 1142e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton}; 1143e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 11446e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 114521f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham// This class tracks the Modification state of the process. Things that can currently modify 114621f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham// the program are running the program (which will up the StopID) and writing memory (which 114721f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham// will up the MemoryID.) 114821f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham// FIXME: Should we also include modification of register states? 114921f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham 115021f37ad875d4f50d1b4b3d307e120f6d27103730Jim Inghamclass ProcessModID 115121f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham{ 115221f37ad875d4f50d1b4b3d307e120f6d27103730Jim Inghamfriend bool operator== (const ProcessModID &lhs, const ProcessModID &rhs); 115321f37ad875d4f50d1b4b3d307e120f6d27103730Jim Inghampublic: 115421f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham ProcessModID () : 11550296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham m_stop_id (0), 11560e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham m_last_natural_stop_id(0), 11570296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham m_resume_id (0), 11580296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham m_memory_id (0), 11590296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham m_last_user_expression_resume (0), 11600296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham m_running_user_expression (false) 116121f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham {} 116221f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham 116321f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham ProcessModID (const ProcessModID &rhs) : 116421f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham m_stop_id (rhs.m_stop_id), 116521f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham m_memory_id (rhs.m_memory_id) 116621f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham {} 116721f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham 116821f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham const ProcessModID & operator= (const ProcessModID &rhs) 116921f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham { 117021f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham if (this != &rhs) 117121f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham { 117221f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham m_stop_id = rhs.m_stop_id; 117321f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham m_memory_id = rhs.m_memory_id; 117421f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham } 117521f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham return *this; 117621f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham } 117721f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham 117821f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham ~ProcessModID () {} 117921f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham 11800296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham void BumpStopID () { 11810e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham m_stop_id++; 11820e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham if (!IsLastResumeForUserExpression()) 11830e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham m_last_natural_stop_id++; 11840296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham } 11850296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham 118621f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham void BumpMemoryID () { m_memory_id++; } 118721f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham 11880296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham void BumpResumeID () { 11890296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham m_resume_id++; 11900296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham if (m_running_user_expression > 0) 11910296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham m_last_user_expression_resume = m_resume_id; 11920296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham } 11930296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham 119421f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham uint32_t GetStopID() const { return m_stop_id; } 11950e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham uint32_t GetLastNaturalStopID() const { return m_last_natural_stop_id; } 119621f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham uint32_t GetMemoryID () const { return m_memory_id; } 11970296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham uint32_t GetResumeID () const { return m_resume_id; } 11980296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham uint32_t GetLastUserExpressionResumeID () const { return m_last_user_expression_resume; } 119921f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham 120021f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham bool MemoryIDEqual (const ProcessModID &compare) const 120121f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham { 120221f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham return m_memory_id == compare.m_memory_id; 120321f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham } 120421f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham 120521f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham bool StopIDEqual (const ProcessModID &compare) const 120621f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham { 120721f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham return m_stop_id == compare.m_stop_id; 120821f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham } 120921f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham 121021f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham void SetInvalid () 121121f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham { 121221f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham m_stop_id = UINT32_MAX; 121321f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham } 121421f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham 121521f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham bool IsValid () const 121621f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham { 121721f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham return m_stop_id != UINT32_MAX; 121821f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham } 12190296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham 12205a60f5e8c81e8263e0d8af85a4f1e6cd1594970aEnrico Granata bool 12215a60f5e8c81e8263e0d8af85a4f1e6cd1594970aEnrico Granata IsLastResumeForUserExpression () const 12225a60f5e8c81e8263e0d8af85a4f1e6cd1594970aEnrico Granata { 12235a60f5e8c81e8263e0d8af85a4f1e6cd1594970aEnrico Granata return m_resume_id == m_last_user_expression_resume; 12245a60f5e8c81e8263e0d8af85a4f1e6cd1594970aEnrico Granata } 12255a60f5e8c81e8263e0d8af85a4f1e6cd1594970aEnrico Granata 12260296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham void 12270296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham SetRunningUserExpression (bool on) 12280296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham { 12290296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham // REMOVEME printf ("Setting running user expression %s at resume id %d - value: %d.\n", on ? "on" : "off", m_resume_id, m_running_user_expression); 12300296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham if (on) 12310296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham m_running_user_expression++; 12320296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham else 12330296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham m_running_user_expression--; 12340296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham } 12350296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham 123621f37ad875d4f50d1b4b3d307e120f6d27103730Jim Inghamprivate: 123721f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham uint32_t m_stop_id; 12380e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham uint32_t m_last_natural_stop_id; 12390296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham uint32_t m_resume_id; 124021f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham uint32_t m_memory_id; 12410296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham uint32_t m_last_user_expression_resume; 12420296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham uint32_t m_running_user_expression; 124321f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham}; 124421f37ad875d4f50d1b4b3d307e120f6d27103730Jim Inghaminline bool operator== (const ProcessModID &lhs, const ProcessModID &rhs) 124521f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham{ 124621f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham if (lhs.StopIDEqual (rhs) 124721f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham && lhs.MemoryIDEqual (rhs)) 124821f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham return true; 124921f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham else 125021f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham return false; 125121f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham} 125221f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham 125321f37ad875d4f50d1b4b3d307e120f6d27103730Jim Inghaminline bool operator!= (const ProcessModID &lhs, const ProcessModID &rhs) 125421f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham{ 125521f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham if (!lhs.StopIDEqual (rhs) 125621f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham || !lhs.MemoryIDEqual (rhs)) 125721f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham return true; 125821f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham else 125921f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham return false; 126021f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham} 1261a9385537809ef342c843c5ab972e513742652047Greg Clayton 1262a9385537809ef342c843c5ab972e513742652047Greg Claytonclass MemoryRegionInfo 1263a9385537809ef342c843c5ab972e513742652047Greg Clayton{ 1264a9385537809ef342c843c5ab972e513742652047Greg Claytonpublic: 1265a9385537809ef342c843c5ab972e513742652047Greg Clayton typedef Range<lldb::addr_t, lldb::addr_t> RangeType; 12661f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda 12671f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda enum OptionalBool { 12681f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda eDontKnow = -1, 12691f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda eNo = 0, 12701f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda eYes = 1 12711f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda }; 12721f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda 1273a9385537809ef342c843c5ab972e513742652047Greg Clayton MemoryRegionInfo () : 1274a9385537809ef342c843c5ab972e513742652047Greg Clayton m_range (), 12751f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda m_read (eDontKnow), 12761f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda m_write (eDontKnow), 12771f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda m_execute (eDontKnow) 1278a9385537809ef342c843c5ab972e513742652047Greg Clayton { 1279a9385537809ef342c843c5ab972e513742652047Greg Clayton } 1280a9385537809ef342c843c5ab972e513742652047Greg Clayton 1281a9385537809ef342c843c5ab972e513742652047Greg Clayton ~MemoryRegionInfo () 1282a9385537809ef342c843c5ab972e513742652047Greg Clayton { 1283a9385537809ef342c843c5ab972e513742652047Greg Clayton } 1284a9385537809ef342c843c5ab972e513742652047Greg Clayton 1285a9385537809ef342c843c5ab972e513742652047Greg Clayton RangeType & 1286a9385537809ef342c843c5ab972e513742652047Greg Clayton GetRange() 1287a9385537809ef342c843c5ab972e513742652047Greg Clayton { 1288a9385537809ef342c843c5ab972e513742652047Greg Clayton return m_range; 1289a9385537809ef342c843c5ab972e513742652047Greg Clayton } 1290a9385537809ef342c843c5ab972e513742652047Greg Clayton 1291a9385537809ef342c843c5ab972e513742652047Greg Clayton void 1292a9385537809ef342c843c5ab972e513742652047Greg Clayton Clear() 1293a9385537809ef342c843c5ab972e513742652047Greg Clayton { 1294a9385537809ef342c843c5ab972e513742652047Greg Clayton m_range.Clear(); 12951f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda m_read = m_write = m_execute = eDontKnow; 1296a9385537809ef342c843c5ab972e513742652047Greg Clayton } 1297a9385537809ef342c843c5ab972e513742652047Greg Clayton 1298a9385537809ef342c843c5ab972e513742652047Greg Clayton const RangeType & 1299a9385537809ef342c843c5ab972e513742652047Greg Clayton GetRange() const 1300a9385537809ef342c843c5ab972e513742652047Greg Clayton { 1301a9385537809ef342c843c5ab972e513742652047Greg Clayton return m_range; 1302a9385537809ef342c843c5ab972e513742652047Greg Clayton } 13031f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda 13041f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda OptionalBool 13051f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda GetReadable () const 1306a9385537809ef342c843c5ab972e513742652047Greg Clayton { 13071f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda return m_read; 1308a9385537809ef342c843c5ab972e513742652047Greg Clayton } 13091f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda 13101f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda OptionalBool 13111f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda GetWritable () const 1312a9385537809ef342c843c5ab972e513742652047Greg Clayton { 13131f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda return m_write; 13141f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda } 13151f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda 13161f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda OptionalBool 13171f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda GetExecutable () const 13181f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda { 13191f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda return m_execute; 1320a9385537809ef342c843c5ab972e513742652047Greg Clayton } 1321a9385537809ef342c843c5ab972e513742652047Greg Clayton 1322a9385537809ef342c843c5ab972e513742652047Greg Clayton void 13231f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda SetReadable (OptionalBool val) 1324a9385537809ef342c843c5ab972e513742652047Greg Clayton { 13251f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda m_read = val; 1326a9385537809ef342c843c5ab972e513742652047Greg Clayton } 13271f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda 1328a9385537809ef342c843c5ab972e513742652047Greg Clayton void 13291f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda SetWritable (OptionalBool val) 1330a9385537809ef342c843c5ab972e513742652047Greg Clayton { 13311f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda m_write = val; 1332a9385537809ef342c843c5ab972e513742652047Greg Clayton } 1333a9385537809ef342c843c5ab972e513742652047Greg Clayton 1334a9385537809ef342c843c5ab972e513742652047Greg Clayton void 13351f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda SetExecutable (OptionalBool val) 1336a9385537809ef342c843c5ab972e513742652047Greg Clayton { 13371f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda m_execute = val; 1338a9385537809ef342c843c5ab972e513742652047Greg Clayton } 1339a9385537809ef342c843c5ab972e513742652047Greg Clayton 1340a9385537809ef342c843c5ab972e513742652047Greg Claytonprotected: 1341a9385537809ef342c843c5ab972e513742652047Greg Clayton RangeType m_range; 13421f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda OptionalBool m_read; 13431f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda OptionalBool m_write; 13441f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda OptionalBool m_execute; 1345a9385537809ef342c843c5ab972e513742652047Greg Clayton}; 134621f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham 134724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 134824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class Process Process.h "lldb/Target/Process.h" 134924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A plug-in interface definition class for debugging a process. 135024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 135124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Process : 1352102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton public std::enable_shared_from_this<Process>, 135373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton public ProcessProperties, 135424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public UserID, 135524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public Broadcaster, 135624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public ExecutionContextScope, 135773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton public PluginInterface 135824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 135924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerfriend class ThreadList; 1360d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Inghamfriend class ClangFunction; // For WaitForStateChangeEventsPrivate 136121f37ad875d4f50d1b4b3d307e120f6d27103730Jim Inghamfriend class CommandObjectProcessLaunch; 136221f37ad875d4f50d1b4b3d307e120f6d27103730Jim Inghamfriend class ProcessEventData; 136321f37ad875d4f50d1b4b3d307e120f6d27103730Jim Inghamfriend class CommandObjectBreakpointCommand; 136421f37ad875d4f50d1b4b3d307e120f6d27103730Jim Inghamfriend class StopInfo; 136524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 136624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 136724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 136824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 136924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Broadcaster event bits definitions. 137024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 137124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum 137224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 137324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastBitStateChanged = (1 << 0), 137424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastBitInterrupt = (1 << 1), 137524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastBitSTDOUT = (1 << 2), 1376fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong eBroadcastBitSTDERR = (1 << 3), 1377fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong eBroadcastBitProfileData = (1 << 4) 137824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 137924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 138024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum 138124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 138224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastInternalStateControlStop = (1<<0), 138324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastInternalStateControlPause = (1<<1), 138424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eBroadcastInternalStateControlResume = (1<<2) 138524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 13865a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham 1387761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton typedef Range<lldb::addr_t, lldb::addr_t> LoadRange; 1388a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // We use a read/write lock to allow on or more clients to 1389a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // access the process state while the process is stopped (reader). 1390a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // We lock the write lock to control access to the process 1391a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // while it is running (readers, or clients that want the process 1392a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // stopped can block waiting for the process to stop, or just 1393a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // try to lock it to see if they can immediately access the stopped 1394a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // process. If the try read lock fails, then the process is running. 1395cf88b95d435873bd312e716da5701cf3882c5da4Ed Maste typedef ProcessRunLock::ProcessRunLocker StopLocker; 1396761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton 13975a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham // These two functions fill out the Broadcaster interface: 13985a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham 13995a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham static ConstString &GetStaticBroadcasterClass (); 14005a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham 14015a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham virtual ConstString &GetBroadcasterClass() const 14025a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham { 14035a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham return GetStaticBroadcasterClass(); 14045a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham } 14055a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham 140664742744396c966e8de770e765130629b0c78335Greg Clayton 140724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 140824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A notification structure that can be used by clients to listen 140924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// for changes in a process's lifetime. 141024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 141124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see RegisterNotificationCallbacks (const Notifications&) 141224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see UnregisterNotificationCallbacks (const Notifications&) 141324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 141424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef SWIG 141524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef struct 141624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 141724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void *baton; 141824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void (*initialize)(void *baton, Process *process); 141924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void (*process_state_changed) (void *baton, Process *process, lldb::StateType state); 142024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } Notifications; 142124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 142224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner class ProcessEventData : 142324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public EventData 142424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 14253ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham friend class Process; 14263ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham 142724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public: 142824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ProcessEventData (); 142924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ProcessEventData (const lldb::ProcessSP &process, lldb::StateType state); 143024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 143124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual ~ProcessEventData(); 143224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 143324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static const ConstString & 143424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFlavorString (); 143524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 143624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual const ConstString & 143724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFlavor () const; 143824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 143924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb::ProcessSP & 14403ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham GetProcessSP() const 14413ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 14423ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham return m_process_sp; 14433ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 144424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 14453ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham GetState() const 14463ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 14473ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham return m_state; 14483ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 144924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 14503ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham GetRestarted () const 14513ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 14523ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham return m_restarted; 14533ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 145489e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham 145589e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham size_t 145689e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham GetNumRestartedReasons () 145789e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham { 145889e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham return m_restarted_reasons.size(); 145989e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham } 146089e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham 146189e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham const char * 146289e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham GetRestartedReasonAtIndex(size_t idx) 146389e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham { 146489e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham if (idx > m_restarted_reasons.size()) 146589e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham return NULL; 146689e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham else 146789e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham return m_restarted_reasons[idx].c_str(); 146889e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham } 146989e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham 14703ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham bool 14713ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham GetInterrupted () const 14723ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 14733ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham return m_interrupted; 14743ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 147524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 147624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 147724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump (Stream *s) const; 147824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 147924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 148024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoOnRemoval (Event *event_ptr); 148124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 148224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static const Process::ProcessEventData * 148324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetEventDataFromEvent (const Event *event_ptr); 148424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 148524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static lldb::ProcessSP 148624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetProcessFromEvent (const Event *event_ptr); 148724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 148824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static lldb::StateType 148924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetStateFromEvent (const Event *event_ptr); 149024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 149124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool 149224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetRestartedFromEvent (const Event *event_ptr); 149389e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham 149489e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham static size_t 149589e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham GetNumRestartedReasons(const Event *event_ptr); 149689e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham 149789e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham static const char * 149889e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham GetRestartedReasonAtIndex(const Event *event_ptr, size_t idx); 149989e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham 150089e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham static void 150189e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham AddRestartedReason (Event *event_ptr, const char *reason); 150224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 150324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void 150424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetRestartedInEvent (Event *event_ptr, bool new_value); 150524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 150624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool 15073ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham GetInterruptedFromEvent (const Event *event_ptr); 15083ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham 15093ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham static void 15103ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham SetInterruptedInEvent (Event *event_ptr, bool new_value); 15113ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham 15123ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham static bool 151324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetUpdateStateOnRemoval (Event *event_ptr); 151424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 151524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner private: 151624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 151724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 15183ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham SetUpdateStateOnRemoval() 15193ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 15206cf4d2b31bf208cd6e48d4e37af671ab9b451446Jim Ingham m_update_state++; 15213ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 152224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 15233ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham SetRestarted (bool new_value) 15243ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 15253ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham m_restarted = new_value; 15263ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 15273ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham void 15283ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham SetInterrupted (bool new_value) 15293ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham { 15303ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham m_interrupted = new_value; 15313ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham } 153289e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham void 153389e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham AddRestartedReason (const char *reason) 153489e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham { 153589e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham m_restarted_reasons.push_back(reason); 153689e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham } 153724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 153824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::ProcessSP m_process_sp; 153924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType m_state; 154089e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham std::vector<std::string> m_restarted_reasons; 154124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool m_restarted; // For "eStateStopped" events, this is true if the target was automatically restarted. 15426cf4d2b31bf208cd6e48d4e37af671ab9b451446Jim Ingham int m_update_state; 15433ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham bool m_interrupted; 154424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN (ProcessEventData); 154524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 154624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 15476e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice 154824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif 154924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1550990de7bb41d3afec6b789155408ff322187d8682Greg Clayton static void 15512a456816c5d7c575f2e141acd48bb5f8085d9910Caroline Tice SettingsInitialize (); 1552990de7bb41d3afec6b789155408ff322187d8682Greg Clayton 1553990de7bb41d3afec6b789155408ff322187d8682Greg Clayton static void 15542a456816c5d7c575f2e141acd48bb5f8085d9910Caroline Tice SettingsTerminate (); 155573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 155673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton static const ProcessPropertiesSP & 155773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton GetGlobalProperties(); 1558990de7bb41d3afec6b789155408ff322187d8682Greg Clayton 155924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 156024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Construct with a shared pointer to a target, and the Process listener. 156124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 156224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Process(Target &target, Listener &listener); 156324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 156424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 156524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Destructor. 156624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 156724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The destructor is virtual since this class is designed to be 156824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// inherited from by the plug-in instance. 156924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 157024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 157124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~Process(); 157224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 157324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 157424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find a Process plug-in that can debug \a module using the 157524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// currently selected architecture. 157624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 157724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Scans all loaded plug-in interfaces that implement versions of 157824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the Process plug-in interface and returns the first instance 157924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// that can debug the file. 158024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 158124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] module_sp 158224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The module shared pointer that this process will debug. 158324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 158424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] plugin_name 158524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If NULL, select the best plug-in for the binary. If non-NULL 158624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// then look for a plugin whose PluginInfo's name matches 158724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// this string. 158824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 158924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Process::CanDebug () 159024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 159146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton static lldb::ProcessSP 159246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton FindPlugin (Target &target, 159346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton const char *plugin_name, 159446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton Listener &listener, 159546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton const FileSpec *crash_file_path); 159624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 159724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 159824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 159924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 160024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Static function that can be used with the \b host function 160124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Host::StartMonitoringChildProcess (). 160224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 160324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function can be used by lldb_private::Process subclasses 160424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// when they want to watch for a local process and have its exit 160524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// status automatically set when the host child process exits. 160624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Subclasses should call Host::StartMonitoringChildProcess () 160724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// with: 160824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// callback = Process::SetHostProcessExitStatus 160924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// callback_baton = NULL 161024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// pid = Process::GetID() 161124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// monitor_signals = false 161224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 161324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool 161424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetProcessExitStatus (void *callback_baton, // The callback baton which should be set to NULL 161524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::pid_t pid, // The process ID we want to monitor 16161c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton bool exited, 161724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int signo, // Zero for no signal 161824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int status); // Exit value of process if signal is zero 161924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1620395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton lldb::ByteOrder 1621395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetByteOrder () const; 1622395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton 1623395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton uint32_t 1624395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetAddressByteSize () const; 1625395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton 162664742744396c966e8de770e765130629b0c78335Greg Clayton uint32_t 162764742744396c966e8de770e765130629b0c78335Greg Clayton GetUniqueID() const 162864742744396c966e8de770e765130629b0c78335Greg Clayton { 162964742744396c966e8de770e765130629b0c78335Greg Clayton return m_process_unique_id; 163064742744396c966e8de770e765130629b0c78335Greg Clayton } 163124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 163224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Check if a plug-in instance can debug the file in \a module. 163324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1634fe424a92fc6fd92f810d243912461fe028a2b63cGreg Clayton /// Each plug-in is given a chance to say whether it can debug 163524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the file in \a module. If the Process plug-in instance can 163624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// debug a file on the current system, it should return \b true. 163724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 163824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 163924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if this Process plug-in instance can 164024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// debug the executable, \b false otherwise. 164124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 164224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 16438d2ea2888a4acb7f140f9af64ddd2b16b2dee870Greg Clayton CanDebug (Target &target, 16448d2ea2888a4acb7f140f9af64ddd2b16b2dee870Greg Clayton bool plugin_specified_by_name) = 0; 164524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 164624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 164724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 164824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This object is about to be destroyed, do any necessary cleanup. 164924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 165024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Subclasses that override this method should always call this 165124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// superclass method. 165224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 165324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 165424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Finalize(); 1655d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham 1656d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham 1657d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham //------------------------------------------------------------------ 1658d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham /// Return whether this object is valid (i.e. has not been finalized.) 1659d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham /// 1660d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham /// @return 1661d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham /// Returns \b true if this Process has not been finalized 1662d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham /// and \b false otherwise. 1663d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham //------------------------------------------------------------------ 1664d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham bool 1665d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham IsValid() const 1666d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham { 1667d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham return !m_finalize_called; 1668d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham } 166924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 167024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 167113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton /// Return a multi-word command object that can be used to expose 167213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton /// plug-in specific commands. 167313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton /// 167413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton /// This object will be used to resolve plug-in commands and can be 167513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton /// triggered by a call to: 167613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton /// 167713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton /// (lldb) process commmand <args> 167813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton /// 167913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton /// @return 168013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton /// A CommandObject which can be one of the concrete subclasses 168113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton /// of CommandObject like CommandObjectRaw, CommandObjectParsed, 168213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton /// or CommandObjectMultiword. 168313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton //------------------------------------------------------------------ 168413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual CommandObject * 168513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton GetPluginCommandObject() 168613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton { 168713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton return NULL; 168813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton } 168913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 169013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton //------------------------------------------------------------------ 169124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Launch a new process. 169224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 169324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Launch a new process by spawning a new process using the 169424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// target object's executable module's file as the file to launch. 169524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Arguments are given in \a argv, and the environment variables 169624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// are in \a envp. Standard input and output files can be 169724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// optionally re-directed to \a stdin_path, \a stdout_path, and 169824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a stderr_path. 169924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 170024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 170124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. It will first call Process::WillLaunch (Module *) 170224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// and if that returns \b true, Process::DoLaunch (Module*, 170324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// char const *[],char const *[],const char *,const char *, 170424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// const char *) will be called to actually do the launching. If 170524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// DoLaunch returns \b true, then Process::DidLaunch() will be 170624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// called. 170724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 170824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] argv 170924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The argument array. 171024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 171124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] envp 171224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The environment array. 171324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1714452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// @param[in] launch_flags 1715452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// Flags to modify the launch (@see lldb::LaunchFlags) 1716452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// 171724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stdin_path 171824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDIN of the new 171924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 172024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 172124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 172224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stdout_path 172324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDOUT of the new 172424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 172524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 172624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 172724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stderr_path 172824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDERR of the new 172924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 173024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 173124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1732de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// @param[in] working_directory 1733de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// The working directory to have the child process run in 1734de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// 173524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 173624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// An error object. Call GetID() to get the process ID if 173724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the error object is success. 173824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 173924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 174036bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton Launch (const ProcessLaunchInfo &launch_info); 174124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 174246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton virtual Error 174346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton LoadCore (); 174446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton 174546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton virtual Error 174646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton DoLoadCore () 174746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton { 174846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton Error error; 17490e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton error.SetErrorStringWithFormat("error: %s does not support loading core files.", GetPluginName().GetCString()); 175046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton return error; 175146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton } 17529ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton 17539ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton //------------------------------------------------------------------ 17549ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton /// Get the dynamic loader plug-in for this process. 17559ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton /// 17569ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton /// The default action is to let the DynamicLoader plug-ins check 17579ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton /// the main executable and the DynamicLoader will select itself 17589ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton /// automatically. Subclasses can override this if inspecting the 17599ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton /// executable is not desired, or if Process subclasses can only 17609ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton /// use a specific DynamicLoader plug-in. 17619ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton //------------------------------------------------------------------ 17629ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton virtual DynamicLoader * 17639ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton GetDynamicLoader (); 176446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton 176524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 1766527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton /// Attach to an existing process using the process attach info. 176724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 176824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 1769527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton /// subclasses. It will first call WillAttach (lldb::pid_t) 1770527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton /// or WillAttach (const char *), and if that returns \b 1771527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton /// true, DoAttach (lldb::pid_t) or DoAttach (const char *) will 177224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be called to actually do the attach. If DoAttach returns \b 177324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// true, then Process::DidAttach() will be called. 177424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 177524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] pid 177624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The process ID that we should attempt to attach to. 177724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 177824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 177924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \a pid if attaching was successful, or 178024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_PROCESS_ID if attaching fails. 178124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 178224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 1783527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton Attach (ProcessAttachInfo &attach_info); 178424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1785fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda //------------------------------------------------------------------ 1786fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// Attach to a remote system via a URL 1787fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// 1788fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// @param[in] strm 1789fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// A stream where output intended for the user 1790fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// (if the driver has a way to display that) generated during 1791fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// the connection. This may be NULL if no output is needed.A 1792fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// 1793fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// @param[in] remote_url 1794fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// The URL format that we are connecting to. 1795fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// 1796fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// @return 1797fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// Returns an error object. 1798fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda //------------------------------------------------------------------ 1799e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton virtual Error 1800fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda ConnectRemote (Stream *strm, const char *remote_url); 18017508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham 1802dbcf98c194742f911c963854084c66aa49a5e513Jim Ingham bool 1803ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton GetShouldDetach () const 1804dbcf98c194742f911c963854084c66aa49a5e513Jim Ingham { 1805ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton return m_should_detach; 1806dbcf98c194742f911c963854084c66aa49a5e513Jim Ingham } 1807ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton 1808ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton void 1809ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton SetShouldDetach (bool b) 1810ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton { 1811ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton m_should_detach = b; 1812ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton } 1813ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton 18147508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham //------------------------------------------------------------------ 181524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the image information address for the current process. 181624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 181724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Some runtimes have system functions that can help dynamic 181824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// loaders locate the dynamic loader information needed to observe 181924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// shared libraries being loaded or unloaded. This function is 182024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// in the Process interface (as opposed to the DynamicLoader 182124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// interface) to ensure that remote debugging can take advantage of 182224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// this functionality. 182324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 182424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 182524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The address of the dynamic loader information, or 182624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_ADDRESS if this is not supported by this 182724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// interface. 182824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 182924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual lldb::addr_t 183024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetImageInfoAddress (); 183124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 183224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 18330baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// Load a shared library into this process. 18340baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// 18350baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// Try and load a shared library into the current process. This 18360baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// call might fail in the dynamic loader plug-in says it isn't safe 18370baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// to try and load shared libraries at the moment. 18380baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// 18390baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// @param[in] image_spec 18400baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// The image file spec that points to the shared library that 18410baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// you want to load. 18420baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// 18430baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// @param[out] error 18440baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// An error object that gets filled in with any errors that 18450baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// might occur when trying to load the shared library. 18460baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// 18470baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// @return 18480baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// A token that represents the shared library that can be 18490baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// later used to unload the shared library. A value of 18500baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// LLDB_INVALID_IMAGE_TOKEN will be returned if the shared 18510baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton /// library can't be opened. 18520baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton //------------------------------------------------------------------ 18530baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton virtual uint32_t 18540baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton LoadImage (const FileSpec &image_spec, Error &error); 18550baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton 18560baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton virtual Error 18570baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton UnloadImage (uint32_t image_token); 18580baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton 18590baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton //------------------------------------------------------------------ 186024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Register for process and thread notifications. 186124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 186224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Clients can register nofication callbacks by filling out a 186324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Process::Notifications structure and calling this function. 186424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 186524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] callbacks 186624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A structure that contains the notification baton and 186724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// callback functions. 186824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 186924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Process::Notifications 187024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 187124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef SWIG 187224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 187324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RegisterNotificationCallbacks (const Process::Notifications& callbacks); 187424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif 187524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 187624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Unregister for process and thread notifications. 187724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 187824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Clients can unregister nofication callbacks by passing a copy of 187924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the original baton and callbacks in \a callbacks. 188024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 188124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] callbacks 188224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A structure that contains the notification baton and 188324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// callback functions. 188424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 188524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 188624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the notification callbacks were 188724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// successfully removed from the process, \b false otherwise. 188824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 188924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Process::Notifications 189024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 189124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef SWIG 189224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 189324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner UnregisterNotificationCallbacks (const Process::Notifications& callbacks); 189424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif 189524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //================================================================== 189624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Built in Process Control functions 189724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //================================================================== 189824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 189924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Resumes all of a process's threads as configured using the 190024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Thread run control functions. 190124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 190224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Threads for a process should be updated with one of the run 190324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// control actions (resume, step, or suspend) that they should take 190424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// when the process is resumed. If no run control action is given 190524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// to a thread it will be resumed by default. 190624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 190724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 190824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. This function will take care of disabling any 190924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// breakpoints that threads may be stopped at, single stepping, and 191024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// re-enabling breakpoints, and enabling the basic flow control 191124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// that the plug-in instances need not worry about. 191224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1913027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham /// N.B. This function also sets the Write side of the Run Lock, 1914027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham /// which is unset when the corresponding stop event is pulled off 1915027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham /// the Public Event Queue. If you need to resume the process without 1916027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham /// setting the Run Lock, use PrivateResume (though you should only do 1917027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham /// that from inside the Process class. 1918027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham /// 191924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 192024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 192124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 192224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Resume() 192324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Step() 192424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Suspend() 192524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19263ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham Error 1927027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham Resume(); 1928027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham 192924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 193024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Halts a running process. 193124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 193224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 193324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. 19343ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// If the process is successfully halted, a eStateStopped 19353ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// process event with GetInterrupted will be broadcast. If false, we will 19363ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// halt the process with no events generated by the halt. 193724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1938addad59552c206466dea98c4a645a471a41252b4Greg Clayton /// @param[in] clear_thread_plans 1939addad59552c206466dea98c4a645a471a41252b4Greg Clayton /// If true, when the process stops, clear all thread plans. 1940addad59552c206466dea98c4a645a471a41252b4Greg Clayton /// 194124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 19423ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// Returns an error object. If the error is empty, the process is halted. 19433ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// otherwise the halt has failed. 194424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19453ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham Error 1946addad59552c206466dea98c4a645a471a41252b4Greg Clayton Halt (bool clear_thread_plans = false); 194724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 194824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 194924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Detaches from a running or stopped process. 195024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 195124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 195224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. 195324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 1954761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham /// @param[in] keep_stopped 1955761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham /// If true, don't resume the process on detach. 1956761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham /// 195724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 195824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 195924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19603ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham Error 1961761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham Detach (bool keep_stopped); 196224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 196324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 196424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Kills the process and shuts down all threads that were spawned 196524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// to track and monitor the process. 196624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 196724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 196824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. 196924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 197024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 197124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 197224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19733ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham Error 197424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Destroy(); 197524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 197624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 197724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Sends a process a UNIX signal \a signal. 197824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 197924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 198024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses. 198124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 198224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 198324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 198424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19853ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham Error 198624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Signal (int signal); 198724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 198824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual UnixSignals & 1989395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetUnixSignals () 1990395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 1991395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return m_unix_signals; 1992395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 199324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 199424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //================================================================== 199524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Plug-in Process Control Overrides 199624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //================================================================== 199724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 199824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 199924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before attaching to a process. 200024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 200124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before attaching a 200224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. 200324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 200424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 200524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 200624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 200724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 200854e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton WillAttachToProcessWithID (lldb::pid_t pid) 200924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 201024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return Error(); 201124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 201224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 201324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 201424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before attaching to a process. 201524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 201624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before attaching a 201724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. 201824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 201924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 202024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 202124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 202224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 202354e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton WillAttachToProcessWithName (const char *process_name, bool wait_for_launch) 202424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 202524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return Error(); 202624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 202724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2028fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda //------------------------------------------------------------------ 2029fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// Attach to a remote system via a URL 2030fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// 2031fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// @param[in] strm 2032fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// A stream where output intended for the user 2033fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// (if the driver has a way to display that) generated during 2034fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// the connection. This may be NULL if no output is needed.A 2035fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// 2036fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// @param[in] remote_url 2037fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// The URL format that we are connecting to. 2038fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// 2039fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// @return 2040fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda /// Returns an error object. 2041fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda //------------------------------------------------------------------ 2042e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton virtual Error 2043fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda DoConnectRemote (Stream *strm, const char *remote_url) 2044e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton { 2045e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton Error error; 2046e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton error.SetErrorString ("remote connections are not supported"); 2047e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton return error; 2048e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton } 2049e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton 205024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 205124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Attach to an existing process using a process ID. 205224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 205324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] pid 205424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The process ID that we should attempt to attach to. 205524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 205624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 205724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \a pid if attaching was successful, or 205824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_PROCESS_ID if attaching fails. 205924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 206024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 206146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton DoAttachToProcessWithID (lldb::pid_t pid) 206246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton { 206346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton Error error; 20640e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton error.SetErrorStringWithFormat("error: %s does not support attaching to a process by pid", GetPluginName().GetCString()); 206546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton return error; 206646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton } 206724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 206824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 2069d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong /// Attach to an existing process using a process ID. 2070d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong /// 2071d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong /// @param[in] pid 2072d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong /// The process ID that we should attempt to attach to. 2073d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong /// 2074d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong /// @param[in] attach_info 2075d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong /// Information on how to do the attach. For example, GetUserID() 2076d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong /// will return the uid to attach as. 2077d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong /// 2078d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong /// @return 2079d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong /// Returns \a pid if attaching was successful, or 2080d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong /// LLDB_INVALID_PROCESS_ID if attaching fails. 2081d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong /// hanming : need flag 2082d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong //------------------------------------------------------------------ 2083d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong virtual Error 2084d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong DoAttachToProcessWithID (lldb::pid_t pid, const ProcessAttachInfo &attach_info) 2085d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong { 2086d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong Error error; 20870e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton error.SetErrorStringWithFormat("error: %s does not support attaching to a process by pid", GetPluginName().GetCString()); 2088d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong return error; 2089d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong } 2090d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong 2091d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong //------------------------------------------------------------------ 209224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Attach to an existing process using a partial process name. 209324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 209424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] process_name 209524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The name of the process to attach to. 209624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 209724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] wait_for_launch 209824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \b true, wait for the process to be launched and attach 209924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// as soon as possible after it does launch. If \b false, then 210024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// search for a matching process the currently exists. 210124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 2102d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong /// @param[in] attach_info 2103d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong /// Information on how to do the attach. For example, GetUserID() 2104d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong /// will return the uid to attach as. 2105d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong /// 210624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 210724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \a pid if attaching was successful, or 210824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_PROCESS_ID if attaching fails. 210924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 211024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 2111d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong DoAttachToProcessWithName (const char *process_name, bool wait_for_launch, const ProcessAttachInfo &attach_info) 211224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 211324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error error; 211424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner error.SetErrorString("attach by name is not supported"); 211524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return error; 211624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 211724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 211824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 211924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after attaching a process. 212024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 212124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after attaching to 212224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a process. 212324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 212424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 212524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidAttach () {} 212624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 212724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 212824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 21290bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton /// Called after a process re-execs itself. 21300bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton /// 21310bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton /// Allow Process plug-ins to execute some code after a process has 21320bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton /// exec'ed itself. Subclasses typically should override DoDidExec() 21330bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton /// as the lldb_private::Process class needs to remove its dynamic 21340bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton /// loader, runtime, ABI and other plug-ins, as well as unload all 21350bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton /// shared libraries. 21360bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton //------------------------------------------------------------------ 21370bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton virtual void 21380bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton DidExec (); 21390bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton 21400bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton //------------------------------------------------------------------ 21410bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton /// Subclasses of Process should implement this function if they 21420bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton /// need to do anything after a process exec's itself. 21430bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton //------------------------------------------------------------------ 21440bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton virtual void 21450bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton DoDidExec () 21460bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton { 21470bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton } 21480bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton 21490bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton //------------------------------------------------------------------ 215024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before launching to a process. 215124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 215224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before launching a 215324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. 215424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 215524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 215624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 215724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 215824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 215924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillLaunch (Module* module) 216024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 216124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return Error(); 216224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 216324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 216424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 216524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Launch a new process. 216624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 216724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Launch a new process by spawning a new process using \a module's 216824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// file as the file to launch. Arguments are given in \a argv, 216924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// and the environment variables are in \a envp. Standard input 217024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// and output files can be optionally re-directed to \a stdin_path, 217124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \a stdout_path, and \a stderr_path. 217224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 217324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] module 217424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The module from which to extract the file specification and 217524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// launch. 217624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 217724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] argv 217824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The argument array. 217924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 218024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] envp 218124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The environment array. 218224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 2183452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// @param[in] launch_flags 2184452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// Flags to modify the launch (@see lldb::LaunchFlags) 2185452bf613496c7290c6b7a1a1eb28efbce63fd3b9Greg Clayton /// 218624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stdin_path 218724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDIN of the new 218824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 218924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 219024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 219124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stdout_path 219224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDOUT of the new 219324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 219424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 219524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 219624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] stderr_path 219724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The path to use when re-directing the STDERR of the new 219824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. If all stdXX_path arguments are NULL, a pseudo 219924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// terminal will be used. 220024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 2201de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// @param[in] working_directory 2202de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// The working directory to have the child process run in 2203de915beb5febe597505ba33fdc2c39eea2abdbd4Greg Clayton /// 220424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 220524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A new valid process ID, or LLDB_INVALID_PROCESS_ID if 220624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// launching fails. 220724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 220824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 220936bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton DoLaunch (Module *exe_module, 221046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton const ProcessLaunchInfo &launch_info) 221146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton { 221246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton Error error; 22130e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton error.SetErrorStringWithFormat("error: %s does not support launching processes", GetPluginName().GetCString()); 221446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton return error; 221546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton } 221646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton 221724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 221824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 221924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after launching a process. 222024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 222124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after launching 222224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a process. 222324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 222424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 222524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidLaunch () {} 222624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 222724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 222824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 222924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 223024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before resuming to a process. 223124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 223224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before resuming a 223324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. 223424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 223524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 223624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 223724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 223824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 223924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillResume () { return Error(); } 224024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 224124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 224224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Resumes all of a process's threads as configured using the 224324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Thread run control functions. 224424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 224524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Threads for a process should be updated with one of the run 224624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// control actions (resume, step, or suspend) that they should take 224724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// when the process is resumed. If no run control action is given 224824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// to a thread it will be resumed by default. 224924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 225024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 225124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the process successfully resumes using 225224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the thread run control actions, \b false otherwise. 225324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 225424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Resume() 225524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Step() 225624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see Thread:Suspend() 225724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 225824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 225946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton DoResume () 226046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton { 226146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton Error error; 22620e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton error.SetErrorStringWithFormat("error: %s does not support resuming processes", GetPluginName().GetCString()); 226346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton return error; 226446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton } 226546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton 226624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 226724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 226824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after resuming a process. 226924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 227024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after resuming 227124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a process. 227224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 227324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 227424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidResume () {} 227524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 227624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 227724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 227824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before halting to a process. 227924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 228024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before halting a 228124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. 228224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 228324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 228424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 228524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 228624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 228724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillHalt () { return Error(); } 228824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 228924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 229024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Halts a running process. 229124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 2292360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// DoHalt must produce one and only one stop StateChanged event if it actually 2293360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// stops the process. If the stop happens through some natural event (for 2294360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// instance a SIGSTOP), then forwarding that event will do. Otherwise, you must 2295360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// generate the event manually. Note also, the private event thread is stopped when 2296360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// DoHalt is run to prevent the events generated while halting to trigger 2297360f53f3c216ee4fb433da0a367168785328a856Jim Ingham /// other state changes before the halt is complete. 22983ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// 22993ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// @param[out] caused_stop 230020d338fad87eba91de65aa9bec76e01c04472848Greg Clayton /// If true, then this Halt caused the stop, otherwise, the 230120d338fad87eba91de65aa9bec76e01c04472848Greg Clayton /// process was already stopped. 23023ae449a5c3b4f51afc0da22cfeaef00c303c0accJim Ingham /// 230324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 230424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the process successfully halts, \b false 230524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// otherwise. 230624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 230724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 230846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton DoHalt (bool &caused_stop) 230946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton { 231046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton Error error; 23110e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton error.SetErrorStringWithFormat("error: %s does not support halting processes", GetPluginName().GetCString()); 231246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton return error; 231346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton } 231446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton 231524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 231624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 231724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after halting a process. 231824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 231924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after halting 232024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a process. 232124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 232224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 232324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidHalt () {} 232424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 232524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 232624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before detaching from a process. 232724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 232824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before detaching 232924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// from a process. 233024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 233124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 233224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 233324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 233424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 233524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillDetach () 233624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 233724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return Error(); 233824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 233924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 234024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 234124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Detaches from a running or stopped process. 234224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 234324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 234424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the process successfully detaches, \b 234524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// false otherwise. 234624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 234724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 2348761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham DoDetach (bool keep_stopped) 234946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton { 235046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton Error error; 23510e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton error.SetErrorStringWithFormat("error: %s does not support detaching from processes", GetPluginName().GetCString()); 235246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton return error; 235346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton } 235446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton 235524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 235624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 235724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after detaching from a process. 235824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 235924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after detaching 236024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// from a process. 236124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 236224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 236324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidDetach () {} 2364e33bb5b0dabf62498715afe3d1cd22cda0af1d24Jim Ingham 2365e33bb5b0dabf62498715afe3d1cd22cda0af1d24Jim Ingham virtual bool 2366e33bb5b0dabf62498715afe3d1cd22cda0af1d24Jim Ingham DetachRequiresHalt() { return false; } 236724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 236824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 236924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called before sending a signal to a process. 237024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 237124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code before sending a 237224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// signal to a process. 237324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 237424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 237524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns no error if it is safe to proceed with a call to 237624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Process::DoSignal(int), otherwise an error describing what 237724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// prevents the signal from being sent. 237824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 237924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 238024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillSignal () { return Error(); } 238124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 238224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 238324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Sends a process a UNIX signal \a signal. 238424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 238524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 238624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns an error object. 238724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 238824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 238946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton DoSignal (int signal) 239046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton { 239146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton Error error; 23920e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton error.SetErrorStringWithFormat("error: %s does not support senging signals to processes", GetPluginName().GetCString()); 239346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton return error; 239446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton } 239524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 239624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 239724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WillDestroy () { return Error(); } 239824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 239924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 240024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoDestroy () = 0; 240124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 240224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 240324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidDestroy () { } 2404e33bb5b0dabf62498715afe3d1cd22cda0af1d24Jim Ingham 2405e33bb5b0dabf62498715afe3d1cd22cda0af1d24Jim Ingham virtual bool 2406e33bb5b0dabf62498715afe3d1cd22cda0af1d24Jim Ingham DestroyRequiresHalt() { return true; } 240724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 240824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 240924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 241024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Called after sending a signal to a process. 241124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 241224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Allow Process plug-ins to execute some code after sending a 241324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// signal to a process. 241424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 241524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 241624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidSignal () {} 241724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 241824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 241924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Currently called as part of ShouldStop. 242024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// FIXME: Should really happen when the target stops before the 242124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// event is taken from the queue... 242224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 242324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This callback is called as the event 242424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// is about to be queued up to allow Process plug-ins to execute 242524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// some code prior to clients being notified that a process was 242624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// stopped. Common operations include updating the thread list, 242724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// invalidating any thread state (registers, stack, etc) prior to 242824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// letting the notification go out. 242924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 243024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 243124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 243224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RefreshStateAfterStop () = 0; 243324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 243424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 243524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the target object pointer for this module. 243624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 243724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 243824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A Target object pointer to the target that owns this 243924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// module. 244024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 244124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Target & 2442395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetTarget () 2443395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 2444395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return m_target; 2445395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 244624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 244724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 244824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the const target object pointer for this module. 244924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 245024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 245124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A const Target object pointer to the target that owns this 245224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// module. 245324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 245424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Target & 2455395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetTarget () const 2456395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 2457395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return m_target; 2458395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 2459395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton 2460cf5927ee246f5e431162f2753ed9e040dd060fe5Greg Clayton //------------------------------------------------------------------ 2461cf5927ee246f5e431162f2753ed9e040dd060fe5Greg Clayton /// Flush all data in the process. 2462cf5927ee246f5e431162f2753ed9e040dd060fe5Greg Clayton /// 2463cf5927ee246f5e431162f2753ed9e040dd060fe5Greg Clayton /// Flush the memory caches, all threads, and any other cached data 2464cf5927ee246f5e431162f2753ed9e040dd060fe5Greg Clayton /// in the process. 2465cf5927ee246f5e431162f2753ed9e040dd060fe5Greg Clayton /// 2466cf5927ee246f5e431162f2753ed9e040dd060fe5Greg Clayton /// This function can be called after a world changing event like 2467cf5927ee246f5e431162f2753ed9e040dd060fe5Greg Clayton /// adding a new symbol file, or after the process makes a large 2468cf5927ee246f5e431162f2753ed9e040dd060fe5Greg Clayton /// context switch (from boot ROM to booted into an OS). 2469cf5927ee246f5e431162f2753ed9e040dd060fe5Greg Clayton //------------------------------------------------------------------ 2470cf5927ee246f5e431162f2753ed9e040dd060fe5Greg Clayton void 2471cf5927ee246f5e431162f2753ed9e040dd060fe5Greg Clayton Flush (); 247224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 247324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 247424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get accessor for the current process state. 247524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 247624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 247724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The current state of the process. 247824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 247924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see lldb::StateType 248024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 248124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 248224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetState (); 2483360f53f3c216ee4fb433da0a367168785328a856Jim Ingham 2484b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton ExecutionResults 2485360f53f3c216ee4fb433da0a367168785328a856Jim Ingham RunThreadPlan (ExecutionContext &exe_ctx, 2486360f53f3c216ee4fb433da0a367168785328a856Jim Ingham lldb::ThreadPlanSP &thread_plan_sp, 2487360f53f3c216ee4fb433da0a367168785328a856Jim Ingham bool stop_others, 248847beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham bool run_others, 2489b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham bool unwind_on_error, 2490b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham bool ignore_breakpoints, 249147beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham uint32_t timeout_usec, 2492360f53f3c216ee4fb433da0a367168785328a856Jim Ingham Stream &errors); 2493360f53f3c216ee4fb433da0a367168785328a856Jim Ingham 2494360f53f3c216ee4fb433da0a367168785328a856Jim Ingham static const char * 2495b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton ExecutionResultAsCString (ExecutionResults result); 249624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2497abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton void 2498abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton GetStatus (Stream &ostrm); 2499abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton 2500abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton size_t 2501abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton GetThreadStatus (Stream &ostrm, 2502abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton bool only_threads_with_stop_reason, 2503abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton uint32_t start_frame, 2504abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton uint32_t num_frames, 2505abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton uint32_t num_frames_with_source); 2506abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton 25075d90ade8e8e0d776fe8e1b9e88fc1c86d02e8e4eJim Ingham void 25085d90ade8e8e0d776fe8e1b9e88fc1c86d02e8e4eJim Ingham SendAsyncInterrupt (); 25095d90ade8e8e0d776fe8e1b9e88fc1c86d02e8e4eJim Ingham 251024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 251124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 251224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 251324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetState (lldb::EventSP &event_sp); 251424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 251524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 251624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetPrivateState (); 251724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 251875c703dd8b492bad25a987b96853626641ae7246Greg Clayton //------------------------------------------------------------------ 2519027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham /// The "private" side of resuming a process. This doesn't alter the 2520027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham /// state of m_run_lock, but just causes the process to resume. 2521027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham /// 2522027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham /// @return 2523027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham /// An Error object describing the success or failure of the resume. 2524027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham //------------------------------------------------------------------ 2525027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham Error 2526027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham PrivateResume (); 2527027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham 2528027aaa74a914823ab4c9cf8f3274d179e97fdb53Jim Ingham //------------------------------------------------------------------ 252975c703dd8b492bad25a987b96853626641ae7246Greg Clayton // Called internally 253075c703dd8b492bad25a987b96853626641ae7246Greg Clayton //------------------------------------------------------------------ 253175c703dd8b492bad25a987b96853626641ae7246Greg Clayton void 253275c703dd8b492bad25a987b96853626641ae7246Greg Clayton CompleteAttach (); 253375c703dd8b492bad25a987b96853626641ae7246Greg Clayton 253424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 253524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 253624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the exit status for a process. 253724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 253824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 253924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The process's return code, or -1 if the current process 254024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// state is not eStateExited. 254124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 254224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int 254324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetExitStatus (); 254424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 254524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 254624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get a textual description of what the process exited. 254724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 254824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 254924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The textual description of why the process exited, or NULL 255024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// if there is no description available. 255124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 255224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * 255324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetExitDescription (); 255424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 255524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 255624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 255724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DidExit () 255824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 255924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 256024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 256124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 256221f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham /// Get the Modification ID of the process. 256324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 256424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 256521f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham /// The modification ID of the process. 256624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 256721f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham ProcessModID 256821f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham GetModID () const 256921f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham { 257021f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham return m_mod_id; 257121f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham } 257221f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham 25730296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham const ProcessModID & 25740296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham GetModIDRef () const 25750296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham { 25760296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham return m_mod_id; 25770296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham } 25780296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham 257924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 258021f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham GetStopID () const 258121f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham { 258221f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham return m_mod_id.GetStopID(); 258321f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham } 258421f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham 25850296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham uint32_t 25860296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham GetResumeID () const 25870296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham { 25880296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham return m_mod_id.GetResumeID(); 25890296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham } 25900296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham 25910296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham uint32_t 25920296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham GetLastUserExpressionResumeID () const 25930296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham { 25940296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham return m_mod_id.GetLastUserExpressionResumeID(); 25950296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham } 25960296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham 25970e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham uint32_t 25980e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham GetLastNaturalStopID() 25990e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham { 26000e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham return m_mod_id.GetLastNaturalStopID(); 26010e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham } 26020e3b98e7de6d69613a9729bac9d4b965c0635698Jim Ingham 260324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 260424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Set accessor for the process exit status (return code). 260524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 260624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Sometimes a child exits and the exit can be detected by global 260724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// functions (signal handler for SIGCHLD for example). This 260824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// accessor allows the exit status to be set from an external 260924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// source. 261024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 261124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Setting this will cause a eStateExited event to be posted to 261224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the process event queue. 261324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 261424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] exit_status 261524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The value for the process's return code. 261624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 261724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see lldb::StateType 261824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 261972e1c782ba1e4226da37af4722af608de9f39408Greg Clayton virtual bool 262024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetExitStatus (int exit_status, const char *cstr); 262124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 262224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 262324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Check if a process is still alive. 262424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 262524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 262624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the process is still valid, \b false 262724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// otherwise. 262824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 262924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 263024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsAlive () = 0; 263124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 263224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 2633ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda /// Before lldb detaches from a process, it warns the user that they are about to lose their debug session. 2634ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda /// In some cases, this warning doesn't need to be emitted -- for instance, with core file debugging where 2635ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda /// the user can reconstruct the "state" by simply re-running the debugger on the core file. 2636ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda /// 2637ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda /// @return 2638ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda // true if the user should be warned about detaching from this process. 2639ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda //------------------------------------------------------------------ 2640ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda virtual bool 2641ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda WarnBeforeDetach () const 2642ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda { 2643ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda return true; 2644ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda } 2645ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda 2646ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda //------------------------------------------------------------------ 264724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Actually do the reading of memory from a process. 264824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 264924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Subclasses must override this function and can return fewer 265024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// bytes than requested when memory requests are too large. This 265124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// class will break up the memory requests and keep advancing the 265224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// arguments along as needed. 265324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 265424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] vm_addr 265524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A virtual load address that indicates where to start reading 265624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// memory from. 265724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 265824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 265924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes to read. 266024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 266124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf 266224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A byte buffer that is at least \a size bytes long that 266324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// will receive the memory bytes. 266424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 266524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 266624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that were actually read into \a buf. 266724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 266824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 266924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DoReadMemory (lldb::addr_t vm_addr, 267024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void *buf, 267124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t size, 267224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error &error) = 0; 267324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 267424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 267524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Read of memory from a process. 267624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 267724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will read memory from the current process's 267824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// address space and remove any traps that may have been inserted 267924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// into the memory. 268024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 268124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 268224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses, the subclasses should implement 268324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Process::DoReadMemory (lldb::addr_t, size_t, void *). 268424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 268524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] vm_addr 268624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A virtual load address that indicates where to start reading 268724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// memory from. 268824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 268924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf 269024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A byte buffer that is at least \a size bytes long that 269124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// will receive the memory bytes. 269224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 269324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 269424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes to read. 269524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 269624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 269724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that were actually read into \a buf. If 269824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the returned number is greater than zero, yet less than \a 269924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// size, then this function will get called again with \a 270024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// vm_addr, \a buf, and \a size updated appropriately. Zero is 270124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// returned to indicate an error. 270224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 27039ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton virtual size_t 270424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ReadMemory (lldb::addr_t vm_addr, 270524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void *buf, 270624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t size, 270724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error &error); 270824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2709b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton //------------------------------------------------------------------ 2710347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// Read a NULL terminated string from memory 2711347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// 2712347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// This function will read a cache page at a time until a NULL 2713347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// string terminator is found. It will stop reading if an aligned 2714347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// sequence of NULL termination \a type_width bytes is not found 2715347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// before reading \a cstr_max_len bytes. The results are always 2716347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// guaranteed to be NULL terminated, and that no more than 2717347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// (max_bytes - type_width) bytes will be read. 2718347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// 2719347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// @param[in] vm_addr 2720347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// The virtual load address to start the memory read. 2721347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// 2722347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// @param[in] str 2723347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// A character buffer containing at least max_bytes. 2724347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// 2725347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// @param[in] max_bytes 2726347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// The maximum number of bytes to read. 2727347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// 2728347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// @param[in] error 2729347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// The error status of the read operation. 2730347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// 2731347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// @param[in] type_width 2732347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// The size of the null terminator (1 to 4 bytes per 2733347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// character). Defaults to 1. 2734347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// 2735347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// @return 2736347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi /// The error status or the number of bytes prior to the null terminator. 2737347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi //------------------------------------------------------------------ 2738347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi size_t 2739347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi ReadStringFromMemory (lldb::addr_t vm_addr, 2740347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi char *str, 2741347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi size_t max_bytes, 2742347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi Error &error, 2743347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi size_t type_width = 1); 2744347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi 2745347d722127cc6a19b077244305c3d350ea4ef80eAshok Thirumurthi //------------------------------------------------------------------ 2746b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// Read a NULL terminated C string from memory 2747b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// 2748b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// This function will read a cache page at a time until the NULL 2749b0e3c7c4d063da2cc6a2550ad4979d5c342c8306Jason Molenda /// C string terminator is found. It will stop reading if the NULL 2750b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// termination byte isn't found before reading \a cstr_max_len 2751b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// bytes, and the results are always guaranteed to be NULL 2752b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton /// terminated (at most cstr_max_len - 1 bytes will be read). 2753b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton //------------------------------------------------------------------ 2754b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton size_t 2755b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ReadCStringFromMemory (lldb::addr_t vm_addr, 2756b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton char *cstr, 27574a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton size_t cstr_max_len, 27584a2e33769873d68d5703da5742c0e248f46e3a72Greg Clayton Error &error); 2759b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 2760fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton size_t 2761dd29b97f71187509df339596c3397dea0e429754Greg Clayton ReadCStringFromMemory (lldb::addr_t vm_addr, 2762dd29b97f71187509df339596c3397dea0e429754Greg Clayton std::string &out_str, 2763dd29b97f71187509df339596c3397dea0e429754Greg Clayton Error &error); 2764dd29b97f71187509df339596c3397dea0e429754Greg Clayton 2765dd29b97f71187509df339596c3397dea0e429754Greg Clayton size_t 2766fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton ReadMemoryFromInferior (lldb::addr_t vm_addr, 2767fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton void *buf, 2768fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton size_t size, 2769fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton Error &error); 2770fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton 27716d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton //------------------------------------------------------------------ 27726d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// Reads an unsigned integer of the specified byte size from 27736d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// process memory. 27746d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// 27756d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// @param[in] load_addr 27766d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// A load address of the integer to read. 27776d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// 27786d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// @param[in] byte_size 27796d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// The size in byte of the integer to read. 27806d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// 2781c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// @param[in] fail_value 2782c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// The value to return if we fail to read an integer. 2783c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// 27846d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// @param[out] error 27856d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// An error that indicates the success or failure of this 27866d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// operation. If error indicates success (error.Success()), 27876d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// then the value returned can be trusted, otherwise zero 27886d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// will be returned. 27896d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// 27906d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// @return 27916d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// The unsigned integer that was read from the process memory 27926d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// space. If the integer was smaller than a uint64_t, any 27936d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// unused upper bytes will be zero filled. If the process 27946d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// byte order differs from the host byte order, the integer 27956d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// value will be appropriately byte swapped into host byte 27966d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton /// order. 27976d29aebd9e7f8fa947dcc9c344aec2393922973dGreg Clayton //------------------------------------------------------------------ 2798f72fdeee129bbd7195f3db888b561ede689886aaGreg Clayton uint64_t 2799c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton ReadUnsignedIntegerFromMemory (lldb::addr_t load_addr, 2800c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton size_t byte_size, 2801c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton uint64_t fail_value, 2802c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton Error &error); 2803c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton 2804c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton lldb::addr_t 2805c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton ReadPointerFromMemory (lldb::addr_t vm_addr, 2806c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton Error &error); 2807c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton 2808c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton bool 2809c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton WritePointerToMemory (lldb::addr_t vm_addr, 2810c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton lldb::addr_t ptr_value, 2811c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton Error &error); 2812c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton 281324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 281424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Actually do the writing of memory to a process. 281524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 281624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] vm_addr 281724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A virtual load address that indicates where to start writing 281824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// memory to. 281924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 282024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] buf 282124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A byte buffer that is at least \a size bytes long that 282224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// contains the data to write. 282324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 282424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 282524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes to write. 282624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 2827c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// @param[out] error 2828c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// An error value in case the memory write fails. 2829c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// 283024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 283124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that were actually written. 283224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 283324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 283446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton DoWriteMemory (lldb::addr_t vm_addr, const void *buf, size_t size, Error &error) 283546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton { 28360e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton error.SetErrorStringWithFormat("error: %s does not support writing to processes", GetPluginName().GetCString()); 283746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton return 0; 283846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton } 283946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton 284024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 284124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 2842c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// Write all or part of a scalar value to memory. 2843c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// 2844c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// The value contained in \a scalar will be swapped to match the 2845c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// byte order of the process that is being debugged. If \a size is 2846c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// less than the size of scalar, the least significate \a size bytes 2847c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// from scalar will be written. If \a size is larger than the byte 2848c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// size of scalar, then the extra space will be padded with zeros 2849c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// and the scalar value will be placed in the least significant 2850c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// bytes in memory. 2851c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// 2852c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// @param[in] vm_addr 2853c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// A virtual load address that indicates where to start writing 2854c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// memory to. 2855c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// 2856c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// @param[in] scalar 2857c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// The scalar to write to the debugged process. 2858c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// 2859c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// @param[in] size 2860c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// This value can be smaller or larger than the scalar value 2861c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// itself. If \a size is smaller than the size of \a scalar, 2862c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// the least significant bytes in \a scalar will be used. If 2863c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// \a size is larger than the byte size of \a scalar, then 2864c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// the extra space will be padded with zeros. If \a size is 2865c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// set to UINT32_MAX, then the size of \a scalar will be used. 2866c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// 2867c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// @param[out] error 2868c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// An error value in case the memory write fails. 2869c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// 2870c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// @return 2871c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton /// The number of bytes that were actually written. 2872c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton //------------------------------------------------------------------ 2873c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton size_t 2874c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton WriteScalarToMemory (lldb::addr_t vm_addr, 2875c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton const Scalar &scalar, 287636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t size, 2877c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton Error &error); 2878c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton 2879c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton size_t 2880c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton ReadScalarIntegerFromMemory (lldb::addr_t addr, 2881c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton uint32_t byte_size, 2882c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton bool is_signed, 2883c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton Scalar &scalar, 2884c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton Error &error); 2885c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton 2886c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton //------------------------------------------------------------------ 288724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Write memory to a process. 288824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 288924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will write memory to the current process's 289024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// address space and maintain any traps that might be present due 289124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// to software breakpoints. 289224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 289324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function is not meant to be overridden by Process 289424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// subclasses, the subclasses should implement 289524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Process::DoWriteMemory (lldb::addr_t, size_t, void *). 289624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 289724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] vm_addr 289824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A virtual load address that indicates where to start writing 289924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// memory to. 290024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 290124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] buf 290224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A byte buffer that is at least \a size bytes long that 290324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// contains the data to write. 290424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 290524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 290624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes to write. 290724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 290824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 290924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes that were actually written. 291024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 291124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 291224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WriteMemory (lldb::addr_t vm_addr, const void *buf, size_t size, Error &error); 291324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 291424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 291524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 291624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Actually allocate memory in the process. 291724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 291824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will allocate memory in the process's address 291924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// space. This can't rely on the generic function calling mechanism, 292024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// since that requires this function. 292124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 292224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 292324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The size of the allocation requested. 292424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 292524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 292624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The address of the allocated buffer in the process, or 292724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_ADDRESS if the allocation failed. 292824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 292924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 293024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual lldb::addr_t 293146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton DoAllocateMemory (size_t size, uint32_t permissions, Error &error) 293246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton { 29330e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton error.SetErrorStringWithFormat("error: %s does not support allocating in the debug process", GetPluginName().GetCString()); 293446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton return LLDB_INVALID_ADDRESS; 293546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton } 293646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton 293724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 293824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 293924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The public interface to allocating memory in the process. 294024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 294124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will allocate memory in the process's address 294224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// space. This can't rely on the generic function calling mechanism, 294324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// since that requires this function. 294424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 294524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] size 294624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The size of the allocation requested. 294724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 294824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] permissions 294924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Or together any of the lldb::Permissions bits. The permissions on 295024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a given memory allocation can't be changed after allocation. Note 295124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// that a block that isn't set writable can still be written on from lldb, 295224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// just not by the process itself. 295324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 2954b9e8f6e7a374d9313f89193e90ae41ef91712e5bGreg Clayton /// @param[in/out] error 2955b9e8f6e7a374d9313f89193e90ae41ef91712e5bGreg Clayton /// An error object to fill in if things go wrong. 295624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 295724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The address of the allocated buffer in the process, or 295824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// LLDB_INVALID_ADDRESS if the allocation failed. 295924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 296024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 296124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t 296224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner AllocateMemory (size_t size, uint32_t permissions, Error &error); 296324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 29644f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec 29654f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec //------------------------------------------------------------------ 29664f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec /// Resolve dynamically loaded indirect functions. 29674f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec /// 29684f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec /// @param[in] address 29694f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec /// The load address of the indirect function to resolve. 29704f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec /// 29714f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec /// @param[out] error 29724f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec /// An error value in case the resolve fails. 29734f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec /// 29744f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec /// @return 29754f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec /// The address of the resolved function. 29764f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec /// LLDB_INVALID_ADDRESS if the resolution failed. 29774f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec //------------------------------------------------------------------ 29784f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec 29794f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec virtual lldb::addr_t 29804f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec ResolveIndirectFunction(const Address *address, Error &error) 29814f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec { 29820e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton error.SetErrorStringWithFormat("error: %s does not support indirect functions in the debug process", GetPluginName().GetCString()); 29834f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec return LLDB_INVALID_ADDRESS; 29844f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec } 29854f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec 2986a9385537809ef342c843c5ab972e513742652047Greg Clayton virtual Error 2987a9385537809ef342c843c5ab972e513742652047Greg Clayton GetMemoryRegionInfo (lldb::addr_t load_addr, 2988a9385537809ef342c843c5ab972e513742652047Greg Clayton MemoryRegionInfo &range_info) 2989a9385537809ef342c843c5ab972e513742652047Greg Clayton { 2990a9385537809ef342c843c5ab972e513742652047Greg Clayton Error error; 2991a9385537809ef342c843c5ab972e513742652047Greg Clayton error.SetErrorString ("Process::GetMemoryRegionInfo() not supported"); 2992a9385537809ef342c843c5ab972e513742652047Greg Clayton return error; 2993a9385537809ef342c843c5ab972e513742652047Greg Clayton } 29941f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda 29957cbdcfb0cefcfd877b507ff2d83e51a1bde3fcc7Johnny Chen virtual Error 29967cbdcfb0cefcfd877b507ff2d83e51a1bde3fcc7Johnny Chen GetWatchpointSupportInfo (uint32_t &num) 29977cbdcfb0cefcfd877b507ff2d83e51a1bde3fcc7Johnny Chen { 29987cbdcfb0cefcfd877b507ff2d83e51a1bde3fcc7Johnny Chen Error error; 299908f60c88b61c42c35abf3233f0cbe19d29fbe814Jason Molenda num = 0; 30007cbdcfb0cefcfd877b507ff2d83e51a1bde3fcc7Johnny Chen error.SetErrorString ("Process::GetWatchpointSupportInfo() not supported"); 30017cbdcfb0cefcfd877b507ff2d83e51a1bde3fcc7Johnny Chen return error; 30027cbdcfb0cefcfd877b507ff2d83e51a1bde3fcc7Johnny Chen } 30037cbdcfb0cefcfd877b507ff2d83e51a1bde3fcc7Johnny Chen 30047de2a3b03f37987c67f142ce328cc2484c831468Enrico Granata virtual Error 30057de2a3b03f37987c67f142ce328cc2484c831468Enrico Granata GetWatchpointSupportInfo (uint32_t &num, bool& after) 30067de2a3b03f37987c67f142ce328cc2484c831468Enrico Granata { 30077de2a3b03f37987c67f142ce328cc2484c831468Enrico Granata Error error; 300808f60c88b61c42c35abf3233f0cbe19d29fbe814Jason Molenda num = 0; 300908f60c88b61c42c35abf3233f0cbe19d29fbe814Jason Molenda after = true; 30107de2a3b03f37987c67f142ce328cc2484c831468Enrico Granata error.SetErrorString ("Process::GetWatchpointSupportInfo() not supported"); 30117de2a3b03f37987c67f142ce328cc2484c831468Enrico Granata return error; 30127de2a3b03f37987c67f142ce328cc2484c831468Enrico Granata } 30137de2a3b03f37987c67f142ce328cc2484c831468Enrico Granata 3014b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton lldb::ModuleSP 3015b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton ReadModuleFromMemory (const FileSpec& file_spec, 30162ddb2b8aed6d43665c6955255f6a077574a08412Greg Clayton lldb::addr_t header_addr); 3017b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton 30181f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda //------------------------------------------------------------------ 30191f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// Attempt to get the attributes for a region of memory in the process. 30201f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// 30211f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// It may be possible for the remote debug server to inspect attributes 30221f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// for a region of memory in the process, such as whether there is a 30231f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// valid page of memory at a given address or whether that page is 30241f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// readable/writable/executable by the process. 30251f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// 30261f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// @param[in] load_addr 30271f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// The address of interest in the process. 30281f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// 30291f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// @param[out] permissions 30301f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// If this call returns successfully, this bitmask will have 30311f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// its Permissions bits set to indicate whether the region is 30321f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// readable/writable/executable. If this call fails, the 30331f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// bitmask values are undefined. 30341f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// 30351f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// @return 30361f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// Returns true if it was able to determine the attributes of the 30371f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda /// memory region. False if not. 30381f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda //------------------------------------------------------------------ 30391f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda 30401f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda virtual bool 30411f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda GetLoadAddressPermissions (lldb::addr_t load_addr, uint32_t &permissions) 3042a9385537809ef342c843c5ab972e513742652047Greg Clayton { 3043a9385537809ef342c843c5ab972e513742652047Greg Clayton MemoryRegionInfo range_info; 30441f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda permissions = 0; 3045a9385537809ef342c843c5ab972e513742652047Greg Clayton Error error (GetMemoryRegionInfo (load_addr, range_info)); 30461f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda if (!error.Success()) 30471f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda return false; 30481f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda if (range_info.GetReadable() == MemoryRegionInfo::eDontKnow 30491f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda || range_info.GetWritable() == MemoryRegionInfo::eDontKnow 30501f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda || range_info.GetExecutable() == MemoryRegionInfo::eDontKnow) 30511f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda { 30521f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda return false; 30531f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda } 30541f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda 30551f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda if (range_info.GetReadable() == MemoryRegionInfo::eYes) 30561f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda permissions |= lldb::ePermissionsReadable; 30571f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda 30581f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda if (range_info.GetWritable() == MemoryRegionInfo::eYes) 30591f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda permissions |= lldb::ePermissionsWritable; 30601f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda 30611f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda if (range_info.GetExecutable() == MemoryRegionInfo::eYes) 30621f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda permissions |= lldb::ePermissionsExecutable; 30631f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda 30641f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda return true; 3065a9385537809ef342c843c5ab972e513742652047Greg Clayton } 30661f9c39c3c146f3c057575f53707e97019f402c46Jason Molenda 306724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 30686cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan /// Determines whether executing JIT-compiled code in this process 30696cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan /// is possible. 30706cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan /// 30716cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan /// @return 30726cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan /// True if execution of JIT code is possible; false otherwise. 30736cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan //------------------------------------------------------------------ 30746cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan bool CanJIT (); 30756cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan 30766cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan //------------------------------------------------------------------ 30776cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan /// Sets whether executing JIT-compiled code in this process 30786cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan /// is possible. 30796cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan /// 30806cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan /// @param[in] can_jit 30816cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan /// True if execution of JIT code is possible; false otherwise. 30826cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan //------------------------------------------------------------------ 30836cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan void SetCanJIT (bool can_jit); 30846cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan 30856cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan //------------------------------------------------------------------ 308624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Actually deallocate memory in the process. 308724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 308824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will deallocate memory in the process's address 308924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// space that was allocated with AllocateMemory. 309024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 309124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] ptr 309224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A return value from AllocateMemory, pointing to the memory you 309324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// want to deallocate. 309424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 309524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 309624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \btrue if the memory was deallocated, \bfalse otherwise. 309724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 309824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 309924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 310046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton DoDeallocateMemory (lldb::addr_t ptr) 310146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton { 310246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton Error error; 31030e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton error.SetErrorStringWithFormat("error: %s does not support deallocating in the debug process", GetPluginName().GetCString()); 310446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton return error; 310546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton } 310646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton 310724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 310824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 310924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The public interface to deallocating memory in the process. 311024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 311124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This function will deallocate memory in the process's address 311224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// space that was allocated with AllocateMemory. 311324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 311424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] ptr 311524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A return value from AllocateMemory, pointing to the memory you 311624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// want to deallocate. 311724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 311824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 311924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \btrue if the memory was deallocated, \bfalse otherwise. 312024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 312124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 312224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error 312324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DeallocateMemory (lldb::addr_t ptr); 3124fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong 312524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 312624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get any available STDOUT. 312724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 312824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the process was launched without supplying valid file paths 312924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// for stdin, stdout, and stderr, then the Process class might 313024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// try to cache the STDOUT for the process if it is able. Events 313124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// will be queued indicating that there is STDOUT available that 313224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// can be retrieved using this function. 313324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 313424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf 313524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A buffer that will receive any STDOUT bytes that are 313624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// currently available. 313724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 313824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf_size 313924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The size in bytes for the buffer \a buf. 314024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 314124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 314224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes written into \a buf. If this value is 314324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// equal to \a buf_size, another call to this function should 314424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be made to retrieve more STDOUT data. 314524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 314624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 3147bd06ff435614ff4e884c40f3ea13e24f0cef96f7Greg Clayton GetSTDOUT (char *buf, size_t buf_size, Error &error); 314824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 314924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 315024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get any available STDERR. 315124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 315224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the process was launched without supplying valid file paths 315324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// for stdin, stdout, and stderr, then the Process class might 315424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// try to cache the STDERR for the process if it is able. Events 315524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// will be queued indicating that there is STDERR available that 315624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// can be retrieved using this function. 315724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 315824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf 315924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A buffer that will receive any STDERR bytes that are 316024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// currently available. 316124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 316224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] buf_size 316324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The size in bytes for the buffer \a buf. 316424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 316524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 316624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of bytes written into \a buf. If this value is 316724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// equal to \a buf_size, another call to this function should 316824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// be made to retrieve more STDERR data. 316924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 317024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 3171bd06ff435614ff4e884c40f3ea13e24f0cef96f7Greg Clayton GetSTDERR (char *buf, size_t buf_size, Error &error); 317224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 317324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 317424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner PutSTDIN (const char *buf, size_t buf_size, Error &error) 317524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 317624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner error.SetErrorString("stdin unsupported"); 317724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return 0; 317824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 317924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3180fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong //------------------------------------------------------------------ 3181fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong /// Get any available profile data. 3182fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong /// 3183fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong /// @param[out] buf 3184fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong /// A buffer that will receive any profile data bytes that are 3185fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong /// currently available. 3186fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong /// 3187fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong /// @param[out] buf_size 3188fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong /// The size in bytes for the buffer \a buf. 3189fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong /// 3190fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong /// @return 3191fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong /// The number of bytes written into \a buf. If this value is 3192fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong /// equal to \a buf_size, another call to this function should 3193fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong /// be made to retrieve more profile data. 3194fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong //------------------------------------------------------------------ 3195fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong virtual size_t 3196fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong GetAsyncProfileData (char *buf, size_t buf_size, Error &error); 3197fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong 319824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //---------------------------------------------------------------------- 319924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Process Breakpoints 320024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //---------------------------------------------------------------------- 3201b1888f24fa181489840b9acf193e224d125d0776Greg Clayton size_t 3202b1888f24fa181489840b9acf193e224d125d0776Greg Clayton GetSoftwareBreakpointTrapOpcode (BreakpointSite* bp_site); 320324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 320424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 3205efb4aeba2bd8411ac0aee9934f08959094d50711Jim Ingham EnableBreakpointSite (BreakpointSite *bp_site) 320646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton { 320746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton Error error; 32080e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton error.SetErrorStringWithFormat("error: %s does not support enabling breakpoints", GetPluginName().GetCString()); 320946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton return error; 321046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton } 321146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton 321224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 321324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 3214efb4aeba2bd8411ac0aee9934f08959094d50711Jim Ingham DisableBreakpointSite (BreakpointSite *bp_site) 321546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton { 321646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton Error error; 32170e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton error.SetErrorStringWithFormat("error: %s does not support disabling breakpoints", GetPluginName().GetCString()); 321846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton return error; 321946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton } 322046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton 322124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 322224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // This is implemented completely using the lldb::Process API. Subclasses 322324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // don't need to implement this function unless the standard flow of 322424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // read existing opcode, write breakpoint opcode, verify breakpoint opcode 322524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // doesn't work for a specific process plug-in. 322624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 322724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner EnableSoftwareBreakpoint (BreakpointSite *bp_site); 322824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 322924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // This is implemented completely using the lldb::Process API. Subclasses 323024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // don't need to implement this function unless the standard flow of 323124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // restoring original opcode in memory and verifying the restored opcode 323224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // doesn't work for a specific process plug-in. 323324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 323424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DisableSoftwareBreakpoint (BreakpointSite *bp_site); 323524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 323624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner BreakpointSiteList & 323724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetBreakpointSiteList(); 323824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 323924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const BreakpointSiteList & 324024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetBreakpointSiteList() const; 324124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 324224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 324324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DisableAllBreakpointSites (); 324424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 324524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error 324624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ClearBreakpointSiteByID (lldb::user_id_t break_id); 324724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 32483fd1f36c937575dbf57bae04c7ebaef78d8ecc1dStephen Wilson lldb::break_id_t 324913d24fb1817faa7ccc4cfd799113ba1a2b8968ebGreg Clayton CreateBreakpointSite (const lldb::BreakpointLocationSP &owner, 325024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool use_hardware); 325124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 325224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error 325324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DisableBreakpointSiteByID (lldb::user_id_t break_id); 325424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 325524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error 325624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner EnableBreakpointSiteByID (lldb::user_id_t break_id); 325724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 325824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 325924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // BreakpointLocations use RemoveOwnerFromBreakpointSite to remove 3260d5dc67a10267a7b7e856fb67652e70e6c5ead8beJim Ingham // themselves from the owner's list of this breakpoint sites. 326124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 326224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RemoveOwnerFromBreakpointSite (lldb::user_id_t owner_id, 326324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t owner_loc_id, 326424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::BreakpointSiteSP &bp_site_sp); 326524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 326624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //---------------------------------------------------------------------- 326724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Process Watchpoints (optional) 326824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //---------------------------------------------------------------------- 326924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 32709c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham EnableWatchpoint (Watchpoint *wp, bool notify = true); 327124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 327224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 32739c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham DisableWatchpoint (Watchpoint *wp, bool notify = true); 327424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 327524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 327624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Thread Queries 327724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 3278ae932359b80098532f3c3766fa9e6527352fbb67Greg Clayton virtual bool 327937f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton UpdateThreadList (ThreadList &old_thread_list, ThreadList &new_thread_list) = 0; 328037f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton 328137f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton void 328237f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton UpdateThreadListIfNeeded (); 328324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 328424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ThreadList & 3285395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton GetThreadList () 3286395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 3287395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton return m_thread_list; 3288395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 3289ccd5c4ee85d1592f9ae3da02c85f5647ca02fab2Han Ming Ong 3290ccd5c4ee85d1592f9ae3da02c85f5647ca02fab2Han Ming Ong uint32_t 3291ccd5c4ee85d1592f9ae3da02c85f5647ca02fab2Han Ming Ong GetNextThreadIndexID (uint64_t thread_id); 3292ccd5c4ee85d1592f9ae3da02c85f5647ca02fab2Han Ming Ong 329352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton lldb::ThreadSP 329452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton CreateOSPluginThread (lldb::tid_t tid, lldb::addr_t context); 329552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 3296ccd5c4ee85d1592f9ae3da02c85f5647ca02fab2Han Ming Ong // Returns true if an index id has been assigned to a thread. 3297ccd5c4ee85d1592f9ae3da02c85f5647ca02fab2Han Ming Ong bool 3298ccd5c4ee85d1592f9ae3da02c85f5647ca02fab2Han Ming Ong HasAssignedIndexIDToThread(uint64_t sb_thread_id); 3299ccd5c4ee85d1592f9ae3da02c85f5647ca02fab2Han Ming Ong 3300ccd5c4ee85d1592f9ae3da02c85f5647ca02fab2Han Ming Ong // Given a thread_id, it will assign a more reasonable index id for display to the user. 3301ccd5c4ee85d1592f9ae3da02c85f5647ca02fab2Han Ming Ong // If the thread_id has previously been assigned, the same index id will be used. 3302ccd5c4ee85d1592f9ae3da02c85f5647ca02fab2Han Ming Ong uint32_t 3303ccd5c4ee85d1592f9ae3da02c85f5647ca02fab2Han Ming Ong AssignIndexIDToThread(uint64_t thread_id); 330424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 330524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 330624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Event Handling 330724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 330824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 330924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetNextEvent (lldb::EventSP &event_sp); 331024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 331124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 3312bb1af9ce3e25eae9916f85cb9a0c82e291c20bb4Greg Clayton WaitForProcessToStop (const TimeValue *timeout, lldb::EventSP *event_sp_ptr = NULL); 331324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 331424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 331524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WaitForStateChangedEvents (const TimeValue *timeout, lldb::EventSP &event_sp); 331624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 331724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Event * 331824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner PeekAtStateChangedEvents (); 331963e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham 332024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3321f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham class 3322f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham ProcessEventHijacker 3323f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham { 3324f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham public: 3325f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham ProcessEventHijacker (Process &process, Listener *listener) : 33262827e26d7d85636dd0d934a7e15d9ef5b95fac67Filipe Cabecinhas m_process (process) 3327f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham { 3328f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham m_process.HijackProcessEvents (listener); 3329f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham } 3330f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham ~ProcessEventHijacker () 3331f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham { 3332f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham m_process.RestoreProcessEvents(); 3333f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham } 3334f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham 3335f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham private: 3336f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham Process &m_process; 3337f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham }; 3338f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham friend class ProcessEventHijacker; 333924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 334063e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// If you need to ensure that you and only you will hear about some public 334163e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// event, then make a new listener, set to listen to process events, and 334263e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// then call this with that listener. Then you will have to wait on that 334363e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// listener explicitly for events (rather than using the GetNextEvent & WaitFor* 334463e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// calls above. Be sure to call RestoreProcessEvents when you are done. 334563e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// 334663e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// @param[in] listener 334763e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// This is the new listener to whom all process events will be delivered. 334863e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// 334963e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// @return 335063e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// Returns \b true if the new listener could be installed, 335163e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// \b false otherwise. 335263e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham //------------------------------------------------------------------ 335363e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham bool 335463e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham HijackProcessEvents (Listener *listener); 335563e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham 335663e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham //------------------------------------------------------------------ 335763e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// Restores the process event broadcasting to its normal state. 335863e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham /// 335963e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham //------------------------------------------------------------------ 336063e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham void 336163e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham RestoreProcessEvents (); 336263e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham 33637c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Inghamprivate: 336463e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Ingham //------------------------------------------------------------------ 336524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This is the part of the event handling that for a process event. 336624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// It decides what to do with the event and returns true if the 336724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// event needs to be propagated to the user, and false otherwise. 336824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If the event is not propagated, this call will most likely set 336924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the target to executing again. 33707c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham /// There is only one place where this call should be called, HandlePrivateEvent. 33717c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham /// Don't call it from anywhere else... 337224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 337324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] event_ptr 337424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This is the event we are handling. 337524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 337624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 337724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if the event should be reported to the 337824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// user, \b false otherwise. 337924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 338024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 338124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ShouldBroadcastEvent (Event *event_ptr); 338224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 338363e24d7aeae8a7feb2aae0581e597b922749d4a1Jim Inghampublic: 338475906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton const lldb::ABISP & 338524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetABI (); 338624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 338737f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton OperatingSystem * 338837f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton GetOperatingSystem () 338937f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton { 339037f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton return m_os_ap.get(); 339137f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton } 339237f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton 339337f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton 3394642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham virtual LanguageRuntime * 3395e31176627725f4236c9ca049edc027756709780bJim Ingham GetLanguageRuntime (lldb::LanguageType language, bool retry_if_null = true); 3396642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 3397642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham virtual CPPLanguageRuntime * 3398e31176627725f4236c9ca049edc027756709780bJim Ingham GetCPPLanguageRuntime (bool retry_if_null = true); 3399642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 3400642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham virtual ObjCLanguageRuntime * 3401e31176627725f4236c9ca049edc027756709780bJim Ingham GetObjCLanguageRuntime (bool retry_if_null = true); 3402e31176627725f4236c9ca049edc027756709780bJim Ingham 340324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 34046b1763b5ab8f182029807293d74a66e1e1c6bafdEnrico Granata IsPossibleDynamicValue (ValueObject& in_value); 34056b1763b5ab8f182029807293d74a66e1e1c6bafdEnrico Granata 34066b1763b5ab8f182029807293d74a66e1e1c6bafdEnrico Granata bool 340724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsRunning () const; 3408f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan 3409f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan DynamicCheckerFunctions *GetDynamicCheckers() 3410f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan { 3411d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham return m_dynamic_checkers_ap.get(); 3412f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan } 3413f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan 3414f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan void SetDynamicCheckers(DynamicCheckerFunctions *dynamic_checkers) 3415f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan { 3416d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham m_dynamic_checkers_ap.reset(dynamic_checkers); 3417f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan } 341824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3419c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham //------------------------------------------------------------------ 3420c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// Call this to set the lldb in the mode where it breaks on new thread 3421c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// creations, and then auto-restarts. This is useful when you are trying 3422c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// to run only one thread, but either that thread or the kernel is creating 3423c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// new threads in the process. If you stop when the thread is created, you 3424c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// can immediately suspend it, and keep executing only the one thread you intend. 3425c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// 3426c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// @return 3427c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// Returns \b true if we were able to start up the notification 3428c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// \b false otherwise. 3429c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham //------------------------------------------------------------------ 343055e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham virtual bool 343155e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham StartNoticingNewThreads() 343255e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham { 343355e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham return true; 343455e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham } 343555e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham 3436c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham //------------------------------------------------------------------ 3437c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// Call this to turn off the stop & notice new threads mode. 3438c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// 3439c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// @return 3440c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// Returns \b true if we were able to start up the notification 3441c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham /// \b false otherwise. 3442c7129c3ca353eb7f0bc8c2aa0d99b54de21b9de6Jim Ingham //------------------------------------------------------------------ 344355e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham virtual bool 344455e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham StopNoticingNewThreads() 344555e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham { 344655e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham return true; 344755e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham } 344855e01d8635032ee10cc06e0114213a76a8677be0Jim Ingham 34490296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham void 34500296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham SetRunningUserExpression (bool on); 34510296fe73a7cb1482226b1303a795ede00e12d677Jim Ingham 345224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 345324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // lldb::ExecutionContextScope pure virtual functions 345424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 3455289afcb5e26c2527a0d2e71f84e780b86bbcf90aGreg Clayton virtual lldb::TargetSP 3456289afcb5e26c2527a0d2e71f84e780b86bbcf90aGreg Clayton CalculateTarget (); 3457289afcb5e26c2527a0d2e71f84e780b86bbcf90aGreg Clayton 3458289afcb5e26c2527a0d2e71f84e780b86bbcf90aGreg Clayton virtual lldb::ProcessSP 3459395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton CalculateProcess () 3460395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 3461289afcb5e26c2527a0d2e71f84e780b86bbcf90aGreg Clayton return shared_from_this(); 3462395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 3463289afcb5e26c2527a0d2e71f84e780b86bbcf90aGreg Clayton 3464289afcb5e26c2527a0d2e71f84e780b86bbcf90aGreg Clayton virtual lldb::ThreadSP 3465395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton CalculateThread () 3466395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 3467289afcb5e26c2527a0d2e71f84e780b86bbcf90aGreg Clayton return lldb::ThreadSP(); 3468395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 3469289afcb5e26c2527a0d2e71f84e780b86bbcf90aGreg Clayton 3470289afcb5e26c2527a0d2e71f84e780b86bbcf90aGreg Clayton virtual lldb::StackFrameSP 3471395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton CalculateStackFrame () 3472395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton { 3473289afcb5e26c2527a0d2e71f84e780b86bbcf90aGreg Clayton return lldb::StackFrameSP(); 3474395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton } 347524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 347624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 3477a830adbcd63d1995a01e6e18da79893c1426ca43Greg Clayton CalculateExecutionContext (ExecutionContext &exe_ctx); 347824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3479464c6161464694412b7472129e789248f1cf21b9Greg Clayton void 3480464c6161464694412b7472129e789248f1cf21b9Greg Clayton SetSTDIOFileDescriptor (int file_descriptor); 3481464c6161464694412b7472129e789248f1cf21b9Greg Clayton 3482761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton //------------------------------------------------------------------ 3483761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton // Add a permanent region of memory that should never be read or 3484761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton // written to. This can be used to ensure that memory reads or writes 3485761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton // to certain areas of memory never end up being sent to the 3486761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton // DoReadMemory or DoWriteMemory functions which can improve 3487761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton // performance. 3488761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton //------------------------------------------------------------------ 3489761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton void 3490761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton AddInvalidMemoryRegion (const LoadRange ®ion); 3491761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton 3492761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton //------------------------------------------------------------------ 3493761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton // Remove a permanent region of memory that should never be read or 3494761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton // written to that was previously added with AddInvalidMemoryRegion. 3495761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton //------------------------------------------------------------------ 3496761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton bool 3497761133029ba2d5bb0c21c3a871dede340b2775fcGreg Clayton RemoveInvalidMemoryRange (const LoadRange ®ion); 34981831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham 34991831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham //------------------------------------------------------------------ 35001831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham // If the setup code of a thread plan needs to do work that might involve 35011831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham // calling a function in the target, it should not do that work directly 35021831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham // in one of the thread plan functions (DidPush/WillResume) because 35031831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham // such work needs to be handled carefully. Instead, put that work in 35041831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham // a PreResumeAction callback, and register it with the process. It will 35051831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham // get done before the actual "DoResume" gets called. 35061831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham //------------------------------------------------------------------ 35071831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham 35081831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham typedef bool (PreResumeActionCallback)(void *); 35091831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham 35101831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham void 35111831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham AddPreResumeAction (PreResumeActionCallback callback, void *baton); 35121831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham 35131831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham bool 35141831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham RunPreResumeActions (); 35151831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham 35161831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham void 35171831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham ClearPreResumeActions (); 35181831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham 3519cf88b95d435873bd312e716da5701cf3882c5da4Ed Maste ProcessRunLock & 3520a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton GetRunLock () 3521a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton { 3522061ca65c4b666f8352ba08700ca4e5fa71ebb4a9Greg Clayton if (Host::GetCurrentThread() == m_private_state_thread) 3523061ca65c4b666f8352ba08700ca4e5fa71ebb4a9Greg Clayton return m_private_run_lock; 3524061ca65c4b666f8352ba08700ca4e5fa71ebb4a9Greg Clayton else 3525061ca65c4b666f8352ba08700ca4e5fa71ebb4a9Greg Clayton return m_public_run_lock; 3526a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton } 35275acdec75cbdb5078de36d0bcf5b0c9bd97f46336Sean Callanan 352824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 3529c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham //------------------------------------------------------------------ 353021f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham // NextEventAction provides a way to register an action on the next 353121f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham // event that is delivered to this process. There is currently only 353221f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham // one next event action allowed in the process at one time. If a 353321f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham // new "NextEventAction" is added while one is already present, the 353421f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham // old action will be discarded (with HandleBeingUnshipped called 353521f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham // after it is discarded.) 35367c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham // 35377c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham // If you want to resume the process as a result of a resume action, 35387c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham // call RequestResume, don't call Resume directly. 3539c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham //------------------------------------------------------------------ 3540c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham class NextEventAction 3541c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham { 3542c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham public: 3543c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham typedef enum EventActionResult 3544c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham { 3545c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham eEventActionSuccess, 3546c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham eEventActionRetry, 3547c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham eEventActionExit 3548c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham } EventActionResult; 3549c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 3550c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham NextEventAction (Process *process) : 3551c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham m_process(process) 35522d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton { 35532d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton } 35542d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton 35552d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton virtual 35562d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton ~NextEventAction() 35572d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton { 35582d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton } 3559c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 3560c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual EventActionResult PerformAction (lldb::EventSP &event_sp) = 0; 3561293b98f5e24ef736766db37feedfefd3b215a0ceFilipe Cabecinhas virtual void HandleBeingUnshipped () {} 3562c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual EventActionResult HandleBeingInterrupted () = 0; 3563c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual const char *GetExitString() = 0; 35647c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham void RequestResume() 35657c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham { 35667c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham m_process->m_resume_requested = true; 35677c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham } 3568c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham protected: 3569c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham Process *m_process; 3570c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham }; 3571c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 3572c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham void SetNextEventAction (Process::NextEventAction *next_event_action) 3573c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham { 357468bffc51b218dc3a124820cb4d983204bf20be4aJim Ingham if (m_next_event_action_ap.get()) 357568bffc51b218dc3a124820cb4d983204bf20be4aJim Ingham m_next_event_action_ap->HandleBeingUnshipped(); 357668bffc51b218dc3a124820cb4d983204bf20be4aJim Ingham 357768bffc51b218dc3a124820cb4d983204bf20be4aJim Ingham m_next_event_action_ap.reset(next_event_action); 3578c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham } 3579c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 3580c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham // This is the completer for Attaching: 3581c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham class AttachCompletionHandler : public NextEventAction 3582c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham { 3583c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham public: 35842d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton AttachCompletionHandler (Process *process, uint32_t exec_count) : 35852d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton NextEventAction (process), 35862d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton m_exec_count (exec_count) 35872d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton { 35882d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton } 35892d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton 35902d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton virtual 35912d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton ~AttachCompletionHandler() 35922d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton { 35932d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton } 3594c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 3595c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual EventActionResult PerformAction (lldb::EventSP &event_sp); 3596c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual EventActionResult HandleBeingInterrupted (); 3597c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham virtual const char *GetExitString(); 3598c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham private: 35992d9adb73af7520bec430e0585ca40467828e6ed1Greg Clayton uint32_t m_exec_count; 3600c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham std::string m_exit_string; 3601c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham }; 3602c2dc7c88cebe05cce059970cc907768256b28a42Jim Ingham 3603f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham bool 3604f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham HijackPrivateProcessEvents (Listener *listener); 3605f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham 3606f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham void 3607f9f40c20b210eea72ab042c63178ca000f005ed9Jim Ingham RestorePrivateProcessEvents (); 3608a2f7423310044cf76d8d52aa9153b7fd8b226b49Greg Clayton 3609a2f7423310044cf76d8d52aa9153b7fd8b226b49Greg Clayton bool 3610a2f7423310044cf76d8d52aa9153b7fd8b226b49Greg Clayton PrivateStateThreadIsValid () const 3611a2f7423310044cf76d8d52aa9153b7fd8b226b49Greg Clayton { 36121831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham return IS_VALID_LLDB_HOST_THREAD(m_private_state_thread); 3613a2f7423310044cf76d8d52aa9153b7fd8b226b49Greg Clayton } 3614fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton 361524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 3616a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // Type definitions 3617a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton //------------------------------------------------------------------ 3618a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton typedef std::map<lldb::LanguageType, lldb::LanguageRuntimeSP> LanguageRuntimeCollection; 3619a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton 36205ba82b9dfd5b9c6b8849a56bc74a6828d1dd109bJim Ingham struct PreResumeCallbackAndBaton 36215ba82b9dfd5b9c6b8849a56bc74a6828d1dd109bJim Ingham { 36225ba82b9dfd5b9c6b8849a56bc74a6828d1dd109bJim Ingham bool (*callback) (void *); 36235ba82b9dfd5b9c6b8849a56bc74a6828d1dd109bJim Ingham void *baton; 36245ba82b9dfd5b9c6b8849a56bc74a6828d1dd109bJim Ingham PreResumeCallbackAndBaton (PreResumeActionCallback in_callback, void *in_baton) : 36255ba82b9dfd5b9c6b8849a56bc74a6828d1dd109bJim Ingham callback (in_callback), 36265ba82b9dfd5b9c6b8849a56bc74a6828d1dd109bJim Ingham baton (in_baton) 36275ba82b9dfd5b9c6b8849a56bc74a6828d1dd109bJim Ingham { 36285ba82b9dfd5b9c6b8849a56bc74a6828d1dd109bJim Ingham } 36295ba82b9dfd5b9c6b8849a56bc74a6828d1dd109bJim Ingham }; 36305ba82b9dfd5b9c6b8849a56bc74a6828d1dd109bJim Ingham 3631a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton //------------------------------------------------------------------ 363224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Member variables 363324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 363424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Target & m_target; ///< The target that owns this process. 363524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ThreadSafeValue<lldb::StateType> m_public_state; 363624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ThreadSafeValue<lldb::StateType> m_private_state; // The actual state of our process 363724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Broadcaster m_private_state_broadcaster; // This broadcaster feeds state changed events into the private state thread's listener. 363824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Broadcaster m_private_state_control_broadcaster; // This is the control broadcaster, used to pause, resume & stop the private state thread. 363924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Listener m_private_state_listener; // This is the listener for the private state thread. 364024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Predicate<bool> m_private_state_control_wait; /// This Predicate is used to signal that a control operation is complete. 364124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::thread_t m_private_state_thread; // Thread ID for the thread that watches interal state events 3642a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton ProcessModID m_mod_id; ///< Tracks the state of the process over stops and other alterations. 364364742744396c966e8de770e765130629b0c78335Greg Clayton uint32_t m_process_unique_id; ///< Each lldb_private::Process class that is created gets a unique integer ID that increments with each new instance 364424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t m_thread_index_id; ///< Each thread is created with a 1 based index that won't get re-used. 3645ccd5c4ee85d1592f9ae3da02c85f5647ca02fab2Han Ming Ong std::map<uint64_t, uint32_t> m_thread_id_to_index_id_map; 364624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int m_exit_status; ///< The exit status of the process, or -1 if not set. 364724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::string m_exit_string; ///< A textual description of why a process exited. 36484e75e3533bddc7cf7264c6c7f7b4d812d4466e96Andrew Kaylor Mutex m_thread_mutex; 36494e75e3533bddc7cf7264c6c7f7b4d812d4466e96Andrew Kaylor ThreadList m_thread_list_real; ///< The threads for this process as are known to the protocol we are debugging with 36504e75e3533bddc7cf7264c6c7f7b4d812d4466e96Andrew Kaylor ThreadList m_thread_list; ///< The threads for this process as the user will see them. This is usually the same as 36514e75e3533bddc7cf7264c6c7f7b4d812d4466e96Andrew Kaylor ///< m_thread_list_real, but might be different if there is an OS plug-in creating memory threads 365224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::vector<Notifications> m_notifications; ///< The list of notifications that this process can deliver. 36530baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton std::vector<lldb::addr_t> m_image_tokens; 365424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Listener &m_listener; 3655a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton BreakpointSiteList m_breakpoint_site_list; ///< This is the list of breakpoint locations we intend to insert in the target. 3656102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton std::unique_ptr<DynamicLoader> m_dyld_ap; 3657102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton std::unique_ptr<DynamicCheckerFunctions> m_dynamic_checkers_ap; ///< The functions used by the expression parser to validate data that expressions use. 3658102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton std::unique_ptr<OperatingSystem> m_os_ap; 365924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner UnixSignals m_unix_signals; /// This is the current signal set for this process. 366024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::ABISP m_abi_sp; 3661861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice lldb::InputReaderSP m_process_input_reader; 3662559cf6e8b52b940f5f4362b32d628838d6301e2eJason Molenda Communication m_stdio_communication; 3663559cf6e8b52b940f5f4362b32d628838d6301e2eJason Molenda Mutex m_stdio_communication_mutex; 3664861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice std::string m_stdout_data; 3665bd06ff435614ff4e884c40f3ea13e24f0cef96f7Greg Clayton std::string m_stderr_data; 3666fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong Mutex m_profile_data_comm_mutex; 3667f14269add7f6fb84da7ccfd866f8e9f7e81068beHan Ming Ong std::vector<std::string> m_profile_data; 3668fd119995f2693eb6e9e2ea3e685f9d872f5cd4f1Greg Clayton MemoryCache m_memory_cache; 3669613b8739a4d489b7f1c571288d5786768c024205Greg Clayton AllocatedMemoryCache m_allocated_memory_cache; 3670ffa43a6bc42bfcccae46eec9cf7bf73f17c328e9Greg Clayton bool m_should_detach; /// Should we detach if the process object goes away with an explicit call to Kill or Detach? 3671559cf6e8b52b940f5f4362b32d628838d6301e2eJason Molenda LanguageRuntimeCollection m_language_runtimes; 3672102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton std::unique_ptr<NextEventAction> m_next_event_action_ap; 36731831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham std::vector<PreResumeCallbackAndBaton> m_pre_resume_actions; 3674cf88b95d435873bd312e716da5701cf3882c5da4Ed Maste ProcessRunLock m_public_run_lock; 3675cf88b95d435873bd312e716da5701cf3882c5da4Ed Maste ProcessRunLock m_private_run_lock; 36767c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham Predicate<bool> m_currently_handling_event; // This predicate is set in HandlePrivateEvent while all its business is being done. 36777c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham bool m_currently_handling_do_on_removals; 36787c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham bool m_resume_requested; // If m_currently_handling_event or m_currently_handling_do_on_removals are true, Resume will only request a resume, using this flag to check. 3679d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham bool m_finalize_called; 3680addad59552c206466dea98c4a645a471a41252b4Greg Clayton bool m_clear_thread_plans_on_stop; 368189e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham lldb::StateType m_last_broadcast_state; /// This helps with the Public event coalescing in ShouldBroadcastEvent. 3682eb17530206e3f501476a32c5d28c8dc36bac419aJim Ingham bool m_destroy_in_process; 368389e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham 36846cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan enum { 36856cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan eCanJITDontKnow= 0, 36866cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan eCanJITYes, 36876cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan eCanJITNo 36886cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan } m_can_jit; 36896cf6c474742a23e7cb6b4f618bf1de711db90a85Sean Callanan 369024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 369124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RemoveBreakpointOpcodesFromBuffer (lldb::addr_t addr, size_t size, uint8_t *buf) const; 369224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 369324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 369424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SynchronouslyNotifyStateChanged (lldb::StateType state); 369524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 369624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 36977c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham SetPublicState (lldb::StateType new_state, bool restarted); 369824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 369924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 370024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetPrivateState (lldb::StateType state); 370124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 370224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 37031831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham StartPrivateStateThread (bool force = false); 370424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 370524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 370624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StopPrivateStateThread (); 370724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 370824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 370924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner PausePrivateStateThread (); 371024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 371124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 371224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResumePrivateStateThread (); 371324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 371424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void * 371524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner PrivateStateThread (void *arg); 371624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 371724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void * 371824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RunPrivateStateThread (); 371924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 372024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 372124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner HandlePrivateEvent (lldb::EventSP &event_sp); 372224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 372324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 372424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WaitForProcessStopPrivate (const TimeValue *timeout, lldb::EventSP &event_sp); 372524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 372624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // This waits for both the state change broadcaster, and the control broadcaster. 372724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // If control_only, it only waits for the control broadcaster. 372824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 372924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 373024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WaitForEventsPrivate (const TimeValue *timeout, lldb::EventSP &event_sp, bool control_only); 373124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 373224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 373324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WaitForStateChangedEventsPrivate (const TimeValue *timeout, lldb::EventSP &event_sp); 373424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 373524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StateType 373624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WaitForState (const TimeValue *timeout, 373724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb::StateType *match_states, 373824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const uint32_t num_match_states); 373924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 374024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 374124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WriteMemoryPrivate (lldb::addr_t addr, const void *buf, size_t size, Error &error); 3742861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 3743861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice void 3744861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice AppendSTDOUT (const char *s, size_t len); 3745861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 3746bd06ff435614ff4e884c40f3ea13e24f0cef96f7Greg Clayton void 3747bd06ff435614ff4e884c40f3ea13e24f0cef96f7Greg Clayton AppendSTDERR (const char *s, size_t len); 3748bd06ff435614ff4e884c40f3ea13e24f0cef96f7Greg Clayton 3749fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong void 3750a1f156aa2695963058615edeabedfcb0f1ca5fabHan Ming Ong BroadcastAsyncProfileData(const std::string &one_profile_data); 3751fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong 3752861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice static void 3753861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice STDIOReadThreadBytesReceived (void *baton, const void *src, size_t src_len); 3754861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 3755861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice void 3756861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice PushProcessInputReader (); 3757861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 3758861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice void 3759861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice PopProcessInputReader (); 3760861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 3761861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice void 3762861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice ResetProcessInputReader (); 3763861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 3764861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice static size_t 3765861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice ProcessInputReaderCallback (void *baton, 3766861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice InputReader &reader, 3767861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice lldb::InputReaderAction notification, 3768861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice const char *bytes, 3769861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice size_t bytes_len); 3770861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 3771e33bb5b0dabf62498715afe3d1cd22cda0af1d24Jim Ingham Error 3772e33bb5b0dabf62498715afe3d1cd22cda0af1d24Jim Ingham HaltForDestroyOrDetach(lldb::EventSP &exit_event_sp); 3773861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice 377424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 377524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 377624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // For Process only 377724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 377824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void ControlPrivateStateThread (uint32_t signal); 377989e248f04ecb87d0df4a4b96158c3fac0a3e43c7Jim Ingham 378024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN (Process); 378124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 378224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 378324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 378424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 378524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 378624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_Process_h_ 3787