blob: 5b44637d785f202d518098065188ecf99b5de021 [file] [log] [blame]
Greg Clayton269f91e2011-07-15 18:02:58 +00001//===-- ProcessKDP.h --------------------------------------------*- C++ -*-===//
Greg Clayton363be3f2011-07-15 03:27:12 +00002//
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_ProcessKDP_h_
11#define liblldb_ProcessKDP_h_
12
13// C Includes
14
15// C++ Includes
16#include <list>
17#include <vector>
18
19// Other libraries and framework includes
20#include "lldb/Core/ArchSpec.h"
21#include "lldb/Core/Broadcaster.h"
22#include "lldb/Core/Error.h"
23#include "lldb/Core/InputReader.h"
24#include "lldb/Core/StreamString.h"
25#include "lldb/Core/StringList.h"
26#include "lldb/Core/ThreadSafeValue.h"
27#include "lldb/Target/Process.h"
28#include "lldb/Target/Thread.h"
29
30#include "CommunicationKDP.h"
31#include "Utility/StringExtractor.h"
32
33class ThreadKDP;
34
35class ProcessKDP : public lldb_private::Process
36{
37public:
38 //------------------------------------------------------------------
39 // Constructors and Destructors
40 //------------------------------------------------------------------
Greg Clayton46c9a352012-02-09 06:16:32 +000041 static lldb::ProcessSP
42 CreateInstance (lldb_private::Target& target,
43 lldb_private::Listener &listener,
44 const lldb_private::FileSpec *crash_file_path);
Greg Clayton363be3f2011-07-15 03:27:12 +000045
46 static void
47 Initialize();
48
49 static void
50 Terminate();
51
52 static const char *
53 GetPluginNameStatic();
54
55 static const char *
56 GetPluginDescriptionStatic();
57
58 //------------------------------------------------------------------
59 // Constructors and Destructors
60 //------------------------------------------------------------------
61 ProcessKDP(lldb_private::Target& target, lldb_private::Listener &listener);
62
63 virtual
64 ~ProcessKDP();
65
66 //------------------------------------------------------------------
67 // Check if a given Process
68 //------------------------------------------------------------------
69 virtual bool
Greg Clayton8d2ea282011-07-17 20:36:25 +000070 CanDebug (lldb_private::Target &target,
71 bool plugin_specified_by_name);
Greg Clayton363be3f2011-07-15 03:27:12 +000072
73 // virtual uint32_t
74 // ListProcessesMatchingName (const char *name, lldb_private::StringList &matches, std::vector<lldb::pid_t> &pids);
75
76 //------------------------------------------------------------------
77 // Creating a new process, or attaching to an existing one
78 //------------------------------------------------------------------
79 virtual lldb_private::Error
80 WillLaunch (lldb_private::Module* module);
81
82 virtual lldb_private::Error
Greg Clayton36bc5ea2011-11-03 21:22:33 +000083 DoLaunch (lldb_private::Module *exe_module,
84 const lldb_private::ProcessLaunchInfo &launch_info);
Greg Clayton363be3f2011-07-15 03:27:12 +000085
86 virtual lldb_private::Error
87 WillAttachToProcessWithID (lldb::pid_t pid);
88
89 virtual lldb_private::Error
90 WillAttachToProcessWithName (const char *process_name, bool wait_for_launch);
91
92 virtual lldb_private::Error
93 DoConnectRemote (const char *remote_url);
94
95 virtual lldb_private::Error
96 DoAttachToProcessWithID (lldb::pid_t pid);
97
98 virtual lldb_private::Error
99 DoAttachToProcessWithName (const char *process_name, bool wait_for_launch);
100
101 virtual void
102 DidAttach ();
103
104 //------------------------------------------------------------------
105 // PluginInterface protocol
106 //------------------------------------------------------------------
107 virtual const char *
108 GetPluginName();
109
110 virtual const char *
111 GetShortPluginName();
112
113 virtual uint32_t
114 GetPluginVersion();
115
116 //------------------------------------------------------------------
117 // Process Control
118 //------------------------------------------------------------------
119 virtual lldb_private::Error
120 WillResume ();
121
122 virtual lldb_private::Error
123 DoResume ();
124
125 virtual lldb_private::Error
126 DoHalt (bool &caused_stop);
127
128 virtual lldb_private::Error
129 WillDetach ();
130
131 virtual lldb_private::Error
132 DoDetach ();
133
134 virtual lldb_private::Error
135 DoSignal (int signal);
136
137 virtual lldb_private::Error
138 DoDestroy ();
139
140 virtual void
141 RefreshStateAfterStop();
142
143 //------------------------------------------------------------------
144 // Process Queries
145 //------------------------------------------------------------------
146 virtual bool
147 IsAlive ();
148
149 //------------------------------------------------------------------
150 // Process Memory
151 //------------------------------------------------------------------
152 virtual size_t
153 DoReadMemory (lldb::addr_t addr, void *buf, size_t size, lldb_private::Error &error);
154
155 virtual size_t
156 DoWriteMemory (lldb::addr_t addr, const void *buf, size_t size, lldb_private::Error &error);
157
158 virtual lldb::addr_t
159 DoAllocateMemory (size_t size, uint32_t permissions, lldb_private::Error &error);
160
161 virtual lldb_private::Error
162 DoDeallocateMemory (lldb::addr_t ptr);
163
164 //----------------------------------------------------------------------
165 // Process Breakpoints
166 //----------------------------------------------------------------------
167 virtual lldb_private::Error
168 EnableBreakpoint (lldb_private::BreakpointSite *bp_site);
169
170 virtual lldb_private::Error
171 DisableBreakpoint (lldb_private::BreakpointSite *bp_site);
172
173 //----------------------------------------------------------------------
174 // Process Watchpoints
175 //----------------------------------------------------------------------
176 virtual lldb_private::Error
Johnny Chenecd4feb2011-10-14 00:42:25 +0000177 EnableWatchpoint (lldb_private::Watchpoint *wp);
Greg Clayton363be3f2011-07-15 03:27:12 +0000178
179 virtual lldb_private::Error
Johnny Chenecd4feb2011-10-14 00:42:25 +0000180 DisableWatchpoint (lldb_private::Watchpoint *wp);
Greg Clayton363be3f2011-07-15 03:27:12 +0000181
Greg Clayton0fa51242011-07-19 03:57:15 +0000182 CommunicationKDP &
183 GetCommunication()
184 {
185 return m_comm;
186 }
187
Greg Clayton363be3f2011-07-15 03:27:12 +0000188protected:
189 friend class ThreadKDP;
190 friend class CommunicationKDP;
191
192 //----------------------------------------------------------------------
193 // Accessors
194 //----------------------------------------------------------------------
195 bool
196 IsRunning ( lldb::StateType state )
197 {
198 return state == lldb::eStateRunning || IsStepping(state);
199 }
200
201 bool
202 IsStepping ( lldb::StateType state)
203 {
204 return state == lldb::eStateStepping;
205 }
206
207 bool
208 CanResume ( lldb::StateType state)
209 {
210 return state == lldb::eStateStopped;
211 }
212
213 bool
214 HasExited (lldb::StateType state)
215 {
216 return state == lldb::eStateExited;
217 }
218
219 bool
220 ProcessIDIsValid ( ) const;
221
222 // static void
223 // STDIOReadThreadBytesReceived (void *baton, const void *src, size_t src_len);
224
225 // void
226 // AppendSTDOUT (const char* s, size_t len);
227
228 void
229 Clear ( );
230
231 uint32_t
Greg Clayton37f962e2011-08-22 02:49:39 +0000232 UpdateThreadList (lldb_private::ThreadList &old_thread_list,
233 lldb_private::ThreadList &new_thread_list);
Greg Clayton363be3f2011-07-15 03:27:12 +0000234
Greg Clayton363be3f2011-07-15 03:27:12 +0000235 enum
236 {
237 eBroadcastBitAsyncContinue = (1 << 0),
238 eBroadcastBitAsyncThreadShouldExit = (1 << 1)
239 };
240
241 lldb_private::Error
242 InterruptIfRunning (bool discard_thread_plans,
243 bool catch_stop_event,
244 lldb::EventSP &stop_event_sp);
245
246 //------------------------------------------------------------------
247 /// Broadcaster event bits definitions.
248 //------------------------------------------------------------------
249 CommunicationKDP m_comm;
250 lldb_private::Broadcaster m_async_broadcaster;
251 lldb::thread_t m_async_thread;
252
253 bool
254 StartAsyncThread ();
255
256 void
257 StopAsyncThread ();
258
259 static void *
260 AsyncThread (void *arg);
261
262 lldb::StateType
263 SetThreadStopInfo (StringExtractor& stop_packet);
264
Greg Clayton363be3f2011-07-15 03:27:12 +0000265private:
266 //------------------------------------------------------------------
267 // For ProcessKDP only
268 //------------------------------------------------------------------
269
270 DISALLOW_COPY_AND_ASSIGN (ProcessKDP);
271
272};
273
274#endif // liblldb_ProcessKDP_h_