blob: dd887cf08944016a0450bf8b57e7c674d16c39ee [file] [log] [blame]
Johnny Chen9ed5b492012-01-05 21:48:15 +00001//===-- 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_