blob: 0badcf7df531c860e73535fcf9488275920ac9b5 [file] [log] [blame]
Greg Clayton59ec5122011-07-15 18:02:58 +00001//===-- ProcessKDP.h --------------------------------------------*- C++ -*-===//
Greg Claytonf9765ac2011-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"
Jason Molenda2e56a252013-05-11 03:09:05 +000022#include "lldb/Core/ConstString.h"
Greg Claytonf9765ac2011-07-15 03:27:12 +000023#include "lldb/Core/Error.h"
Greg Claytonf9765ac2011-07-15 03:27:12 +000024#include "lldb/Core/StreamString.h"
25#include "lldb/Core/StringList.h"
26#include "lldb/Core/ThreadSafeValue.h"
Zachary Turner39de3112014-09-09 20:54:56 +000027#include "lldb/Host/HostThread.h"
Greg Claytonf9765ac2011-07-15 03:27:12 +000028#include "lldb/Target/Process.h"
29#include "lldb/Target/Thread.h"
30
31#include "CommunicationKDP.h"
Greg Claytonf9765ac2011-07-15 03:27:12 +000032
33class ThreadKDP;
34
35class ProcessKDP : public lldb_private::Process
36{
37public:
38 //------------------------------------------------------------------
39 // Constructors and Destructors
40 //------------------------------------------------------------------
Greg Claytonc3776bf2012-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 Claytonf9765ac2011-07-15 03:27:12 +000045
46 static void
47 Initialize();
48
49 static void
Greg Clayton7f982402013-07-15 22:54:20 +000050 DebuggerInitialize (lldb_private::Debugger &debugger);
51
52 static void
Greg Claytonf9765ac2011-07-15 03:27:12 +000053 Terminate();
54
Greg Clayton57abc5d2013-05-10 21:47:16 +000055 static lldb_private::ConstString
Greg Claytonf9765ac2011-07-15 03:27:12 +000056 GetPluginNameStatic();
57
58 static const char *
59 GetPluginDescriptionStatic();
60
61 //------------------------------------------------------------------
62 // Constructors and Destructors
63 //------------------------------------------------------------------
64 ProcessKDP(lldb_private::Target& target, lldb_private::Listener &listener);
65
66 virtual
67 ~ProcessKDP();
68
69 //------------------------------------------------------------------
70 // Check if a given Process
71 //------------------------------------------------------------------
72 virtual bool
Greg Clayton3a29bdb2011-07-17 20:36:25 +000073 CanDebug (lldb_private::Target &target,
74 bool plugin_specified_by_name);
Greg Claytonf9765ac2011-07-15 03:27:12 +000075
Greg Clayton1d19a2f2012-10-19 22:22:57 +000076 virtual lldb_private::CommandObject *
77 GetPluginCommandObject();
Greg Claytonf9765ac2011-07-15 03:27:12 +000078
79 //------------------------------------------------------------------
80 // Creating a new process, or attaching to an existing one
81 //------------------------------------------------------------------
82 virtual lldb_private::Error
83 WillLaunch (lldb_private::Module* module);
84
85 virtual lldb_private::Error
Greg Clayton982c9762011-11-03 21:22:33 +000086 DoLaunch (lldb_private::Module *exe_module,
Jean-Daniel Dupas7782de92013-12-09 22:52:50 +000087 lldb_private::ProcessLaunchInfo &launch_info);
Greg Claytonf9765ac2011-07-15 03:27:12 +000088
89 virtual lldb_private::Error
90 WillAttachToProcessWithID (lldb::pid_t pid);
91
92 virtual lldb_private::Error
93 WillAttachToProcessWithName (const char *process_name, bool wait_for_launch);
94
95 virtual lldb_private::Error
Jason Molenda4bd4e7e2012-09-29 04:02:01 +000096 DoConnectRemote (lldb_private::Stream *strm, const char *remote_url);
Greg Claytonf9765ac2011-07-15 03:27:12 +000097
98 virtual lldb_private::Error
Han Ming Ong84647042012-02-25 01:07:38 +000099 DoAttachToProcessWithID (lldb::pid_t pid, const lldb_private::ProcessAttachInfo &attach_info);
100
101 virtual lldb_private::Error
Jean-Daniel Dupas9c517c02013-12-23 22:32:54 +0000102 DoAttachToProcessWithName (const char *process_name, const lldb_private::ProcessAttachInfo &attach_info);
Greg Claytonf9765ac2011-07-15 03:27:12 +0000103
104 virtual void
Jim Inghambb006ce2014-08-02 00:33:35 +0000105 DidAttach (lldb_private::ArchSpec &process_arch);
Greg Claytonf9765ac2011-07-15 03:27:12 +0000106
Jason Molenda5e8534e2012-10-03 01:29:34 +0000107 lldb::addr_t
108 GetImageInfoAddress();
109
110 lldb_private::DynamicLoader *
111 GetDynamicLoader ();
112
Greg Claytonf9765ac2011-07-15 03:27:12 +0000113 //------------------------------------------------------------------
114 // PluginInterface protocol
115 //------------------------------------------------------------------
Greg Clayton57abc5d2013-05-10 21:47:16 +0000116 virtual lldb_private::ConstString
Greg Claytonf9765ac2011-07-15 03:27:12 +0000117 GetPluginName();
118
Greg Claytonf9765ac2011-07-15 03:27:12 +0000119 virtual uint32_t
120 GetPluginVersion();
121
122 //------------------------------------------------------------------
123 // Process Control
124 //------------------------------------------------------------------
125 virtual lldb_private::Error
126 WillResume ();
127
128 virtual lldb_private::Error
129 DoResume ();
130
131 virtual lldb_private::Error
132 DoHalt (bool &caused_stop);
133
134 virtual lldb_private::Error
Jim Inghamacff8952013-05-02 00:27:30 +0000135 DoDetach (bool keep_stopped);
Greg Claytonf9765ac2011-07-15 03:27:12 +0000136
137 virtual lldb_private::Error
138 DoSignal (int signal);
139
140 virtual lldb_private::Error
141 DoDestroy ();
142
143 virtual void
144 RefreshStateAfterStop();
145
146 //------------------------------------------------------------------
147 // Process Queries
148 //------------------------------------------------------------------
149 virtual bool
150 IsAlive ();
151
152 //------------------------------------------------------------------
153 // Process Memory
154 //------------------------------------------------------------------
155 virtual size_t
156 DoReadMemory (lldb::addr_t addr, void *buf, size_t size, lldb_private::Error &error);
157
158 virtual size_t
159 DoWriteMemory (lldb::addr_t addr, const void *buf, size_t size, lldb_private::Error &error);
160
161 virtual lldb::addr_t
162 DoAllocateMemory (size_t size, uint32_t permissions, lldb_private::Error &error);
163
164 virtual lldb_private::Error
165 DoDeallocateMemory (lldb::addr_t ptr);
166
167 //----------------------------------------------------------------------
168 // Process Breakpoints
169 //----------------------------------------------------------------------
170 virtual lldb_private::Error
Jim Ingham299c0c12013-02-15 02:06:30 +0000171 EnableBreakpointSite (lldb_private::BreakpointSite *bp_site);
Greg Claytonf9765ac2011-07-15 03:27:12 +0000172
173 virtual lldb_private::Error
Jim Ingham299c0c12013-02-15 02:06:30 +0000174 DisableBreakpointSite (lldb_private::BreakpointSite *bp_site);
Greg Claytonf9765ac2011-07-15 03:27:12 +0000175
176 //----------------------------------------------------------------------
177 // Process Watchpoints
178 //----------------------------------------------------------------------
179 virtual lldb_private::Error
Jim Ingham1b5792e2012-12-18 02:03:49 +0000180 EnableWatchpoint (lldb_private::Watchpoint *wp, bool notify = true);
Greg Claytonf9765ac2011-07-15 03:27:12 +0000181
182 virtual lldb_private::Error
Jim Ingham1b5792e2012-12-18 02:03:49 +0000183 DisableWatchpoint (lldb_private::Watchpoint *wp, bool notify = true);
Greg Claytonf9765ac2011-07-15 03:27:12 +0000184
Greg Claytona63d08c2011-07-19 03:57:15 +0000185 CommunicationKDP &
186 GetCommunication()
187 {
188 return m_comm;
189 }
190
Greg Claytonf9765ac2011-07-15 03:27:12 +0000191protected:
192 friend class ThreadKDP;
193 friend class CommunicationKDP;
194
195 //----------------------------------------------------------------------
196 // Accessors
197 //----------------------------------------------------------------------
198 bool
199 IsRunning ( lldb::StateType state )
200 {
201 return state == lldb::eStateRunning || IsStepping(state);
202 }
203
204 bool
205 IsStepping ( lldb::StateType state)
206 {
207 return state == lldb::eStateStepping;
208 }
209
210 bool
211 CanResume ( lldb::StateType state)
212 {
213 return state == lldb::eStateStopped;
214 }
215
216 bool
217 HasExited (lldb::StateType state)
218 {
219 return state == lldb::eStateExited;
220 }
221
222 bool
223 ProcessIDIsValid ( ) const;
224
Greg Claytonf9765ac2011-07-15 03:27:12 +0000225 void
226 Clear ( );
227
Greg Clayton9fc13552012-04-10 00:18:59 +0000228 virtual bool
Greg Clayton56d9a1b2011-08-22 02:49:39 +0000229 UpdateThreadList (lldb_private::ThreadList &old_thread_list,
230 lldb_private::ThreadList &new_thread_list);
Greg Claytonf9765ac2011-07-15 03:27:12 +0000231
Greg Claytonf9765ac2011-07-15 03:27:12 +0000232 enum
233 {
234 eBroadcastBitAsyncContinue = (1 << 0),
235 eBroadcastBitAsyncThreadShouldExit = (1 << 1)
236 };
Greg Clayton7925fbb2012-09-21 16:31:20 +0000237
Greg Clayton97d5cf02012-09-25 02:40:06 +0000238 lldb::ThreadSP
Andrew Kaylorba4e61d2013-05-07 18:35:34 +0000239 GetKernelThread ();
Greg Claytonf9765ac2011-07-15 03:27:12 +0000240
241 //------------------------------------------------------------------
242 /// Broadcaster event bits definitions.
243 //------------------------------------------------------------------
244 CommunicationKDP m_comm;
245 lldb_private::Broadcaster m_async_broadcaster;
Zachary Turner39de3112014-09-09 20:54:56 +0000246 lldb_private::HostThread m_async_thread;
Jason Molenda2e56a252013-05-11 03:09:05 +0000247 lldb_private::ConstString m_dyld_plugin_name;
Jason Molenda5e8534e2012-10-03 01:29:34 +0000248 lldb::addr_t m_kernel_load_addr;
Greg Clayton1d19a2f2012-10-19 22:22:57 +0000249 lldb::CommandObjectSP m_command_sp;
Andrew Kaylorba4e61d2013-05-07 18:35:34 +0000250 lldb::ThreadWP m_kernel_thread_wp;
Greg Clayton1d19a2f2012-10-19 22:22:57 +0000251
Greg Claytonf9765ac2011-07-15 03:27:12 +0000252
253 bool
254 StartAsyncThread ();
255
256 void
257 StopAsyncThread ();
258
259 static void *
260 AsyncThread (void *arg);
261
Greg Claytonf9765ac2011-07-15 03:27:12 +0000262private:
263 //------------------------------------------------------------------
264 // For ProcessKDP only
265 //------------------------------------------------------------------
266
267 DISALLOW_COPY_AND_ASSIGN (ProcessKDP);
268
269};
270
271#endif // liblldb_ProcessKDP_h_