//===-- ProcessMacOSXRemote.h -----------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// //---------------------------------------------------------------------- // // ProcessMacOSXRemote.h // liblldb // // Created by Greg Clayton on 4/21/09. // // //---------------------------------------------------------------------- #ifndef liblldb_ProcessMacOSXRemote_H_ #define liblldb_ProcessMacOSXRemote_H_ // C Includes // C++ Includes #include <list> // Other libraries and framework includes #include "lldb/Target/Process.h" #include "lldb/Target/Thread.h" class ThreadMacOSXRemote; class ProcessMacOSXRemote : public Process { public: friend class ThreadMacOSX; //------------------------------------------------------------------ // Constructors and Destructors //------------------------------------------------------------------ ProcessMacOSXRemote(Target& target); virtual ~DCProcessMacOSXRemote(); static Process* CreateInstance (Target& target); //------------------------------------------------------------------ // Check if a given Process //------------------------------------------------------------------ virtual bool CanDebug(Target &target); //------------------------------------------------------------------ // Creating a new process, or attaching to an existing one //------------------------------------------------------------------ virtual lldb::pid_t DoLaunch (Module* module, char const *argv[], // Can be NULL char const *envp[], // Can be NULL const char *stdin_path, // Can be NULL const char *stdout_path, // Can be NULL const char *stderr_path); // Can be NULL virtual void DidLaunch (); virtual lldb::pid_t DoAttach (lldb::pid_t pid); virtual void DidAttach (); //------------------------------------------------------------------ // Process Control //------------------------------------------------------------------ // virtual bool WillResume (); virtual bool DoResume (); // virtual void DidResume (); virtual bool DoHalt (); virtual bool WillDetach (); virtual bool DoDetach (); virtual bool DoKill (int signal); virtual bool ShouldStop (); //------------------------------------------------------------------ // Process Queries //------------------------------------------------------------------ virtual bool IsAlive (); virtual bool IsRunning (); virtual lldb::addr_t GetImageInfoAddress(); //------------------------------------------------------------------ // Process Memory //------------------------------------------------------------------ virtual size_t DoReadMemory (lldb::addr_t addr, void *buf, size_t size); virtual size_t DoWriteMemory (lldb::addr_t addr, const void *buf, size_t size); //------------------------------------------------------------------ // Process STDIO //------------------------------------------------------------------ virtual size_t GetSTDOUT (char *buf, size_t buf_size); virtual size_t GetSTDERR (char *buf, size_t buf_size); //---------------------------------------------------------------------- // Process Breakpoints //---------------------------------------------------------------------- virtual size_t GetSoftwareBreakpointTrapOpcode (lldb::BreakpointSite *bp_site); //---------------------------------------------------------------------- // Process Breakpoints //---------------------------------------------------------------------- virtual bool EnableBreakpoint (lldb::BreakpointSite *bp_site); virtual bool DisableBreakpoint (lldb::BreakpointSite *bp_site); //---------------------------------------------------------------------- // Process Watchpoints //---------------------------------------------------------------------- virtual bool EnableWatchpoint (WatchpointLocation *wp_loc); virtual bool DisableWatchpoint (WatchpointLocation *wp_loc); //------------------------------------------------------------------ // Thread Queries //------------------------------------------------------------------ virtual Thread * GetCurrentThread (); virtual bool SetCurrentThread (lldb::tid_t tid); virtual Thread * GetThreadAtIndex (uint32_t idx); virtual Thread * GetThreadByID (lldb::tid_t tid); virtual size_t GetNumThreads (); virtual ByteOrder GetByteOrder () const; virtual DynamicLoader * GetDynamicLoader (); protected: Flags m_flags; // Process specific flags (see eFlags enums) ArchSpec m_arch_spec; std::auto_ptr<DynamicLoader> m_dynamic_loader_ap; ByteOrder m_byte_order; //---------------------------------------------------------------------- // Accessors //---------------------------------------------------------------------- bool ProcessIDIsValid ( ) const; bool IsRunning ( State state ) { return state == eStateRunning || IsStepping(state); } bool IsStepping ( State state) { return state == eStateStepping; } bool CanResume ( State state) { return state == eStateStopped; } ArchSpec& GetArchSpec() { return m_arch_spec; } const ArchSpec& GetArchSpec() const { return m_arch_spec; } enum { eFlagsNone = 0, eFlagsAttached = (1 << 0), eFlagsUsingSBS = (1 << 1) }; void Clear ( ); Flags & GetFlags () { return m_flags; } const Flags & GetFlags () const { return m_flags; } uint32_t UpdateThreadListIfNeeded (); private: //------------------------------------------------------------------ // For ProcessMacOSXRemote only //------------------------------------------------------------------ DISALLOW_COPY_AND_ASSIGN (ProcessMacOSXRemote); }; #endif // liblldb_ProcessMacOSXRemote_H_