ProcessPOSIX.h revision c643077dd2048204d78bc8b19629d0a3dca055fd
1//===-- ProcessPOSIX.h ------------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef liblldb_ProcessPOSIX_H_ 11#define liblldb_ProcessPOSIX_H_ 12 13// C Includes 14 15// C++ Includes 16#include <queue> 17 18// Other libraries and framework includes 19#include "lldb/Target/Process.h" 20#include "lldb/Target/UnixSignals.h" 21#include "ProcessMessage.h" 22 23class ProcessMonitor; 24 25class ProcessPOSIX : 26 public lldb_private::Process 27{ 28public: 29 30 //------------------------------------------------------------------ 31 // Constructors and destructors 32 //------------------------------------------------------------------ 33 ProcessPOSIX(lldb_private::Target& target, 34 lldb_private::Listener &listener); 35 36 virtual 37 ~ProcessPOSIX(); 38 39 //------------------------------------------------------------------ 40 // Process protocol. 41 //------------------------------------------------------------------ 42 virtual bool 43 CanDebug(lldb_private::Target &target, bool plugin_specified_by_name); 44 45 virtual lldb_private::Error 46 WillLaunch(lldb_private::Module *module); 47 48 virtual lldb_private::Error 49 DoAttachToProcessWithID(lldb::pid_t pid); 50 51 virtual lldb_private::Error 52 DoAttachToProcessWithID (lldb::pid_t pid, const lldb_private::ProcessAttachInfo &attach_info); 53 54 virtual lldb_private::Error 55 DoLaunch (lldb_private::Module *exe_module, 56 const lldb_private::ProcessLaunchInfo &launch_info); 57 58 virtual void 59 DidLaunch(); 60 61 virtual lldb_private::Error 62 DoResume(); 63 64 virtual lldb_private::Error 65 DoHalt(bool &caused_stop); 66 67 virtual lldb_private::Error 68 DoDetach(); 69 70 virtual lldb_private::Error 71 DoSignal(int signal); 72 73 virtual lldb_private::Error 74 DoDestroy(); 75 76 virtual void 77 RefreshStateAfterStop(); 78 79 virtual bool 80 IsAlive(); 81 82 virtual size_t 83 DoReadMemory(lldb::addr_t vm_addr, 84 void *buf, 85 size_t size, 86 lldb_private::Error &error); 87 88 virtual size_t 89 DoWriteMemory(lldb::addr_t vm_addr, const void *buf, size_t size, 90 lldb_private::Error &error); 91 92 virtual lldb::addr_t 93 DoAllocateMemory(size_t size, uint32_t permissions, 94 lldb_private::Error &error); 95 96 virtual lldb_private::Error 97 DoDeallocateMemory(lldb::addr_t ptr); 98 99 virtual size_t 100 GetSoftwareBreakpointTrapOpcode(lldb_private::BreakpointSite* bp_site); 101 102 virtual lldb_private::Error 103 EnableBreakpoint(lldb_private::BreakpointSite *bp_site); 104 105 virtual lldb_private::Error 106 DisableBreakpoint(lldb_private::BreakpointSite *bp_site); 107 108 virtual uint32_t 109 UpdateThreadListIfNeeded(); 110 111 virtual bool 112 UpdateThreadList(lldb_private::ThreadList &old_thread_list, 113 lldb_private::ThreadList &new_thread_list) = 0; 114 115 virtual lldb::ByteOrder 116 GetByteOrder() const; 117 118 virtual lldb::addr_t 119 GetImageInfoAddress(); 120 121 virtual size_t 122 PutSTDIN(const char *buf, size_t len, lldb_private::Error &error); 123 124 virtual size_t 125 GetSTDOUT(char *buf, size_t len, lldb_private::Error &error); 126 127 virtual size_t 128 GetSTDERR(char *buf, size_t len, lldb_private::Error &error); 129 130 //-------------------------------------------------------------------------- 131 // ProcessPOSIX internal API. 132 133 /// Registers the given message with this process. 134 void SendMessage(const ProcessMessage &message); 135 136 ProcessMonitor & 137 GetMonitor() { assert(m_monitor); return *m_monitor; } 138 139 lldb_private::UnixSignals & 140 GetUnixSignals(); 141 142 const char * 143 GetFilePath(const lldb_private::ProcessLaunchInfo::FileAction *file_action, 144 const char *default_path); 145 146protected: 147 /// Target byte order. 148 lldb::ByteOrder m_byte_order; 149 150 /// Process monitor; 151 ProcessMonitor *m_monitor; 152 153 /// The module we are executing. 154 lldb_private::Module *m_module; 155 156 /// Message queue notifying this instance of inferior process state changes. 157 lldb_private::Mutex m_message_mutex; 158 std::queue<ProcessMessage> m_message_queue; 159 160 /// True when the process has entered a state of "limbo". 161 /// 162 /// This flag qualifies eStateStopped. It lets us know that when we 163 /// continue from this state the process will exit. Also, when true, 164 /// Process::m_exit_status is set. 165 bool m_in_limbo; 166 167 /// Drive any exit events to completion. 168 bool m_exit_now; 169 170 /// OS-specific signal set. 171 lldb_private::UnixSignals m_signals; 172 173 /// Returns true if the process has exited. 174 bool HasExited(); 175 176 /// Returns true if the process is stopped. 177 bool IsStopped(); 178 179 typedef std::map<lldb::addr_t, lldb::addr_t> MMapMap; 180 MMapMap m_addr_to_mmap_size; 181}; 182 183#endif // liblldb_MacOSXProcess_H_ 184