ProcessPOSIX.h revision 2341d35bc77ffa8597a85b1ffe50b5653a2ec46d
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 DoLaunch (lldb_private::Module *exe_module, 53 const lldb_private::ProcessLaunchInfo &launch_info); 54 55 virtual void 56 DidLaunch(); 57 58 virtual lldb_private::Error 59 DoResume(); 60 61 virtual lldb_private::Error 62 DoHalt(bool &caused_stop); 63 64 virtual lldb_private::Error 65 DoDetach(); 66 67 virtual lldb_private::Error 68 DoSignal(int signal); 69 70 virtual lldb_private::Error 71 DoDestroy(); 72 73 virtual void 74 RefreshStateAfterStop(); 75 76 virtual bool 77 IsAlive(); 78 79 virtual size_t 80 DoReadMemory(lldb::addr_t vm_addr, 81 void *buf, 82 size_t size, 83 lldb_private::Error &error); 84 85 virtual size_t 86 DoWriteMemory(lldb::addr_t vm_addr, const void *buf, size_t size, 87 lldb_private::Error &error); 88 89 virtual lldb::addr_t 90 DoAllocateMemory(size_t size, uint32_t permissions, 91 lldb_private::Error &error); 92 93 virtual lldb_private::Error 94 DoDeallocateMemory(lldb::addr_t ptr); 95 96 virtual size_t 97 GetSoftwareBreakpointTrapOpcode(lldb_private::BreakpointSite* bp_site); 98 99 virtual lldb_private::Error 100 EnableBreakpoint(lldb_private::BreakpointSite *bp_site); 101 102 virtual lldb_private::Error 103 DisableBreakpoint(lldb_private::BreakpointSite *bp_site); 104 105 virtual uint32_t 106 UpdateThreadListIfNeeded(); 107 108 virtual uint32_t 109 UpdateThreadList(lldb_private::ThreadList &old_thread_list, 110 lldb_private::ThreadList &new_thread_list) = 0; 111 112 virtual lldb::ByteOrder 113 GetByteOrder() const; 114 115 virtual lldb::addr_t 116 GetImageInfoAddress(); 117 118 virtual size_t 119 PutSTDIN(const char *buf, size_t len, lldb_private::Error &error); 120 121 virtual size_t 122 GetSTDOUT(char *buf, size_t len, lldb_private::Error &error); 123 124 virtual size_t 125 GetSTDERR(char *buf, size_t len, lldb_private::Error &error); 126 127 //-------------------------------------------------------------------------- 128 // ProcessPOSIX internal API. 129 130 /// Registers the given message with this process. 131 void SendMessage(const ProcessMessage &message); 132 133 ProcessMonitor & 134 GetMonitor() { assert(m_monitor); return *m_monitor; } 135 136 lldb_private::UnixSignals & 137 GetUnixSignals(); 138 139 const char * 140 GetFilePath(const lldb_private::ProcessLaunchInfo::FileAction *file_action, 141 const char *default_path); 142 143protected: 144 /// Target byte order. 145 lldb::ByteOrder m_byte_order; 146 147 /// Process monitor; 148 ProcessMonitor *m_monitor; 149 150 /// The module we are executing. 151 lldb_private::Module *m_module; 152 153 /// Message queue notifying this instance of inferior process state changes. 154 lldb_private::Mutex m_message_mutex; 155 std::queue<ProcessMessage> m_message_queue; 156 157 /// True when the process has entered a state of "limbo". 158 /// 159 /// This flag qualifies eStateStopped. It lets us know that when we 160 /// continue from this state the process will exit. Also, when true, 161 /// Process::m_exit_status is set. 162 bool m_in_limbo; 163 164 /// Drive any exit events to completion. 165 bool m_exit_now; 166 167 /// OS-specific signal set. 168 lldb_private::UnixSignals m_signals; 169 170 /// Returns true if the process has exited. 171 bool HasExited(); 172 173 /// Returns true if the process is stopped. 174 bool IsStopped(); 175 176 typedef std::map<lldb::addr_t, lldb::addr_t> MMapMap; 177 MMapMap m_addr_to_mmap_size; 178}; 179 180#endif // liblldb_MacOSXProcess_H_ 181