1 //===-- ProcessGDBRemote.h --------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_ProcessGDBRemote_h_
11 #define liblldb_ProcessGDBRemote_h_
20 // Other libraries and framework includes
22 #include "lldb/Core/ArchSpec.h"
23 #include "lldb/Core/Broadcaster.h"
24 #include "lldb/Core/ConstString.h"
25 #include "lldb/Core/Error.h"
26 #include "lldb/Core/StreamString.h"
27 #include "lldb/Core/StringList.h"
28 #include "lldb/Core/StructuredData.h"
29 #include "lldb/Core/ThreadSafeValue.h"
30 #include "lldb/Core/LoadedModuleInfoList.h"
31 #include "lldb/Host/HostThread.h"
32 #include "lldb/lldb-private-forward.h"
33 #include "lldb/Utility/StringExtractor.h"
34 #include "lldb/Target/Process.h"
35 #include "lldb/Target/Thread.h"
37 #include "GDBRemoteCommunicationClient.h"
38 #include "GDBRemoteRegisterContext.h"
40 namespace lldb_private {
41 namespace process_gdb_remote {
43 class ThreadGDBRemote;
45 class ProcessGDBRemote : public Process
48 ProcessGDBRemote(lldb::TargetSP target_sp, Listener &listener);
50 ~ProcessGDBRemote() override;
52 static lldb::ProcessSP
53 CreateInstance (lldb::TargetSP target_sp,
55 const FileSpec *crash_file_path);
61 DebuggerInitialize (Debugger &debugger);
67 GetPluginNameStatic();
70 GetPluginDescriptionStatic();
72 //------------------------------------------------------------------
73 // Check if a given Process
74 //------------------------------------------------------------------
76 CanDebug (lldb::TargetSP target_sp, bool plugin_specified_by_name) override;
79 GetPluginCommandObject() override;
81 //------------------------------------------------------------------
82 // Creating a new process, or attaching to an existing one
83 //------------------------------------------------------------------
85 WillLaunch (Module* module) override;
88 DoLaunch (Module *exe_module, ProcessLaunchInfo &launch_info) override;
91 DidLaunch () override;
94 WillAttachToProcessWithID (lldb::pid_t pid) override;
97 WillAttachToProcessWithName (const char *process_name, bool wait_for_launch) override;
100 DoConnectRemote (Stream *strm, const char *remote_url) override;
103 WillLaunchOrAttach ();
106 DoAttachToProcessWithID (lldb::pid_t pid, const ProcessAttachInfo &attach_info) override;
109 DoAttachToProcessWithName (const char *process_name,
110 const ProcessAttachInfo &attach_info) override;
113 DidAttach (ArchSpec &process_arch) override;
115 //------------------------------------------------------------------
116 // PluginInterface protocol
117 //------------------------------------------------------------------
119 GetPluginName() override;
122 GetPluginVersion() override;
124 //------------------------------------------------------------------
126 //------------------------------------------------------------------
128 WillResume () override;
131 DoResume () override;
134 DoHalt (bool &caused_stop) override;
137 DoDetach (bool keep_stopped) override;
140 DetachRequiresHalt() override { return true; }
143 DoSignal (int signal) override;
146 DoDestroy () override;
149 RefreshStateAfterStop() override;
152 SetUnixSignals(const lldb::UnixSignalsSP &signals_sp);
154 //------------------------------------------------------------------
156 //------------------------------------------------------------------
161 GetImageInfoAddress() override;
164 WillPublicStop () override;
166 //------------------------------------------------------------------
168 //------------------------------------------------------------------
170 DoReadMemory (lldb::addr_t addr, void *buf, size_t size, Error &error) override;
173 DoWriteMemory (lldb::addr_t addr, const void *buf, size_t size, Error &error) override;
176 DoAllocateMemory (size_t size, uint32_t permissions, Error &error) override;
179 GetMemoryRegionInfo (lldb::addr_t load_addr, MemoryRegionInfo ®ion_info) override;
182 DoDeallocateMemory (lldb::addr_t ptr) override;
184 //------------------------------------------------------------------
186 //------------------------------------------------------------------
188 PutSTDIN (const char *buf, size_t buf_size, Error &error) override;
190 //----------------------------------------------------------------------
191 // Process Breakpoints
192 //----------------------------------------------------------------------
194 EnableBreakpointSite (BreakpointSite *bp_site) override;
197 DisableBreakpointSite (BreakpointSite *bp_site) override;
199 //----------------------------------------------------------------------
200 // Process Watchpoints
201 //----------------------------------------------------------------------
203 EnableWatchpoint (Watchpoint *wp, bool notify = true) override;
206 DisableWatchpoint (Watchpoint *wp, bool notify = true) override;
209 GetWatchpointSupportInfo (uint32_t &num) override;
212 GetWatchpointSupportInfo (uint32_t &num, bool& after) override;
215 StartNoticingNewThreads() override;
218 StopNoticingNewThreads() override;
220 GDBRemoteCommunicationClient &
227 SendEventData(const char *data) override;
229 //----------------------------------------------------------------------
230 // Override DidExit so we can disconnect from the remote GDB server
231 //----------------------------------------------------------------------
236 SetUserSpecifiedMaxMemoryTransferSize (uint64_t user_specified_max);
239 GetModuleSpec(const FileSpec& module_file_spec,
240 const ArchSpec& arch,
241 ModuleSpec &module_spec) override;
244 GetHostOSVersion(uint32_t &major,
246 uint32_t &update) override;
249 LoadModules(LoadedModuleInfoList &module_list) override;
252 LoadModules() override;
255 GetFileLoadAddress(const FileSpec& file, bool& is_loaded, lldb::addr_t& load_addr) override;
258 ModulesDidLoad (ModuleList &module_list) override;
260 StructuredData::ObjectSP
261 GetLoadedDynamicLibrariesInfos (lldb::addr_t image_list_address, lldb::addr_t image_count) override;
264 friend class ThreadGDBRemote;
265 friend class GDBRemoteCommunicationClient;
266 friend class GDBRemoteRegisterContext;
268 //------------------------------------------------------------------
269 /// Broadcaster event bits definitions.
270 //------------------------------------------------------------------
273 eBroadcastBitAsyncContinue = (1 << 0),
274 eBroadcastBitAsyncThreadShouldExit = (1 << 1),
275 eBroadcastBitAsyncThreadDidExit = (1 << 2)
278 Flags m_flags; // Process specific flags (see eFlags enums)
279 GDBRemoteCommunicationClient m_gdb_comm;
280 std::atomic<lldb::pid_t> m_debugserver_pid;
281 std::vector<StringExtractorGDBRemote> m_stop_packet_stack; // The stop packet stack replaces the last stop packet variable
282 Mutex m_last_stop_packet_mutex;
283 GDBRemoteDynamicRegisterInfo m_register_info;
284 Broadcaster m_async_broadcaster;
285 Listener m_async_listener;
286 HostThread m_async_thread;
287 Mutex m_async_thread_state_mutex;
288 typedef std::vector<lldb::tid_t> tid_collection;
289 typedef std::vector< std::pair<lldb::tid_t,int> > tid_sig_collection;
290 typedef std::map<lldb::addr_t, lldb::addr_t> MMapMap;
291 typedef std::map<uint32_t, std::string> ExpeditedRegisterMap;
292 tid_collection m_thread_ids; // Thread IDs for all threads. This list gets updated after stopping
293 std::vector<lldb::addr_t> m_thread_pcs; // PC values for all the threads.
294 StructuredData::ObjectSP m_jstopinfo_sp; // Stop info only for any threads that have valid stop infos
295 StructuredData::ObjectSP m_jthreadsinfo_sp; // Full stop info, expedited registers and memory for all threads if "jThreadsInfo" packet is supported
296 tid_collection m_continue_c_tids; // 'c' for continue
297 tid_sig_collection m_continue_C_tids; // 'C' for continue with signal
298 tid_collection m_continue_s_tids; // 's' for step
299 tid_sig_collection m_continue_S_tids; // 'S' for step with signal
300 uint64_t m_max_memory_size; // The maximum number of bytes to read/write when reading and writing memory
301 uint64_t m_remote_stub_max_memory_size; // The maximum memory size the remote gdb stub can handle
302 MMapMap m_addr_to_mmap_size;
303 lldb::BreakpointSP m_thread_create_bp_sp;
304 bool m_waiting_for_attach;
305 bool m_destroy_tried_resuming;
306 lldb::CommandObjectSP m_command_sp;
307 int64_t m_breakpoint_pc_offset;
308 lldb::tid_t m_initial_tid; // The initial thread ID, given by stub on attach
310 //----------------------------------------------------------------------
312 //----------------------------------------------------------------------
314 IsRunning ( lldb::StateType state )
316 return state == lldb::eStateRunning || IsStepping(state);
320 IsStepping ( lldb::StateType state)
322 return state == lldb::eStateStepping;
326 CanResume ( lldb::StateType state)
328 return state == lldb::eStateStopped;
332 HasExited (lldb::StateType state)
334 return state == lldb::eStateExited;
338 ProcessIDIsValid ( ) const;
356 UpdateThreadList (ThreadList &old_thread_list,
357 ThreadList &new_thread_list) override;
360 EstablishConnectionIfNeeded (const ProcessInfo &process_info);
363 LaunchAndConnectToDebugserver (const ProcessInfo &process_info);
366 KillDebugserverProcess ();
369 BuildDynamicRegisterInfo (bool force);
372 SetLastStopPacket (const StringExtractorGDBRemote &response);
375 ParsePythonTargetDefinition(const FileSpec &target_definition_fspec);
377 const lldb::DataBufferSP
378 GetAuxvData() override;
380 StructuredData::ObjectSP
381 GetExtendedInfoForThread (lldb::tid_t tid);
387 CalculateThreadStopInfo (ThreadGDBRemote *thread);
390 UpdateThreadPCsFromStopReplyThreadsValue (std::string &value);
393 UpdateThreadIDsFromStopReplyThreadsValue (std::string &value);
396 HandleNotifyPacket(StringExtractorGDBRemote &packet);
404 static lldb::thread_result_t
405 AsyncThread (void *arg);
408 MonitorDebugserverProcess (void *callback_baton,
415 SetThreadStopInfo (StringExtractor& stop_packet);
418 GetThreadStopInfoFromJSON (ThreadGDBRemote *thread, const StructuredData::ObjectSP &thread_infos_sp);
421 SetThreadStopInfo (StructuredData::Dictionary *thread_dict);
424 SetThreadStopInfo (lldb::tid_t tid,
425 ExpeditedRegisterMap &expedited_register_map,
427 const std::string &thread_name,
428 const std::string &reason,
429 const std::string &description,
431 const std::vector<lldb::addr_t> &exc_data,
432 lldb::addr_t thread_dispatch_qaddr,
433 bool queue_vars_valid,
434 lldb_private::LazyBool associated_with_libdispatch_queue,
435 lldb::addr_t dispatch_queue_t,
436 std::string &queue_name,
437 lldb::QueueKind queue_kind,
438 uint64_t queue_serial);
441 HandleStopReplySequence ();
444 ClearThreadIDList ();
447 UpdateThreadIDList ();
450 DidLaunchOrAttach (ArchSpec& process_arch);
453 ConnectToDebugserver (const char *host_port);
456 GetDispatchQueueNameForThread (lldb::addr_t thread_dispatch_qaddr,
457 std::string &dispatch_queue_name);
460 GetDynamicLoader () override;
462 // Query remote GDBServer for register information
464 GetGDBServerRegisterInfo ();
466 // Query remote GDBServer for a detailed loaded library list
468 GetLoadedModuleList (LoadedModuleInfoList &);
471 LoadModuleAtAddress (const FileSpec &file, lldb::addr_t base_addr, bool value_is_offset);
474 //------------------------------------------------------------------
475 // For ProcessGDBRemote only
476 //------------------------------------------------------------------
478 NewThreadNotifyBreakpointHit (void *baton,
479 StoppointCallbackContext *context,
480 lldb::user_id_t break_id,
481 lldb::user_id_t break_loc_id);
483 DISALLOW_COPY_AND_ASSIGN (ProcessGDBRemote);
486 } // namespace process_gdb_remote
487 } // namespace lldb_private
489 #endif // liblldb_ProcessGDBRemote_h_