blob: 8fc270fa4627a4fd161d3ae31fe38cb68d41f189 [file] [log] [blame]
Tamas Berghammere13c2732015-02-11 10:29:30 +00001//===-- GDBRemoteCommunicationServerCommon.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_GDBRemoteCommunicationServerCommon_h_
11#define liblldb_GDBRemoteCommunicationServerCommon_h_
12
13// C Includes
14// C++ Includes
15#include <set>
16
17// Other libraries and framework includes
18#include "lldb/lldb-private-forward.h"
19#include "lldb/Host/Mutex.h"
20#include "lldb/Target/Process.h"
21
22// Project includes
23#include "GDBRemoteCommunicationServer.h"
24#include "GDBRemoteCommunicationServerCommon.h"
25
26class ProcessGDBRemote;
27class StringExtractorGDBRemote;
28
29class GDBRemoteCommunicationServerCommon :
30 public GDBRemoteCommunicationServer
31{
32public:
33 GDBRemoteCommunicationServerCommon(const char *comm_name, const char *listener_name);
34
35 virtual
36 ~GDBRemoteCommunicationServerCommon();
37
Tamas Berghammere13c2732015-02-11 10:29:30 +000038protected:
39 std::set<lldb::pid_t> m_spawned_pids;
40 lldb_private::Mutex m_spawned_pids_mutex;
41 lldb_private::ProcessLaunchInfo m_process_launch_info;
42 lldb_private::Error m_process_launch_error;
43 lldb_private::ProcessInstanceInfoList m_proc_infos;
44 uint32_t m_proc_infos_index;
45 bool m_thread_suffix_supported;
46 bool m_list_threads_in_stop_reply;
47
48 PacketResult
49 Handle_A (StringExtractorGDBRemote &packet);
50
51 PacketResult
52 Handle_qHostInfo (StringExtractorGDBRemote &packet);
53
54 PacketResult
55 Handle_qProcessInfoPID (StringExtractorGDBRemote &packet);
56
57 PacketResult
58 Handle_qfProcessInfo (StringExtractorGDBRemote &packet);
59
60 PacketResult
61 Handle_qsProcessInfo (StringExtractorGDBRemote &packet);
62
63 PacketResult
64 Handle_qUserName (StringExtractorGDBRemote &packet);
65
66 PacketResult
67 Handle_qGroupName (StringExtractorGDBRemote &packet);
68
69 PacketResult
70 Handle_qSpeedTest (StringExtractorGDBRemote &packet);
71
72 PacketResult
73 Handle_qKillSpawnedProcess (StringExtractorGDBRemote &packet);
74
75 PacketResult
76 Handle_vFile_Open (StringExtractorGDBRemote &packet);
77
78 PacketResult
79 Handle_vFile_Close (StringExtractorGDBRemote &packet);
80
81 PacketResult
82 Handle_vFile_pRead (StringExtractorGDBRemote &packet);
83
84 PacketResult
85 Handle_vFile_pWrite (StringExtractorGDBRemote &packet);
86
87 PacketResult
88 Handle_vFile_Size (StringExtractorGDBRemote &packet);
89
90 PacketResult
91 Handle_vFile_Mode (StringExtractorGDBRemote &packet);
92
93 PacketResult
94 Handle_vFile_Exists (StringExtractorGDBRemote &packet);
95
96 PacketResult
97 Handle_vFile_symlink (StringExtractorGDBRemote &packet);
98
99 PacketResult
100 Handle_vFile_unlink (StringExtractorGDBRemote &packet);
101
102 PacketResult
103 Handle_vFile_Stat (StringExtractorGDBRemote &packet);
104
105 PacketResult
106 Handle_vFile_MD5 (StringExtractorGDBRemote &packet);
107
108 PacketResult
Oleksiy Vyalov6801be32015-02-25 22:15:44 +0000109 Handle_qModuleInfo (StringExtractorGDBRemote &packet);
110
111 PacketResult
Tamas Berghammere13c2732015-02-11 10:29:30 +0000112 Handle_qPlatform_shell (StringExtractorGDBRemote &packet);
113
114 PacketResult
115 Handle_qPlatform_mkdir (StringExtractorGDBRemote &packet);
116
117 PacketResult
118 Handle_qPlatform_chmod (StringExtractorGDBRemote &packet);
119
120 PacketResult
121 Handle_qSupported (StringExtractorGDBRemote &packet);
122
123 PacketResult
124 Handle_QThreadSuffixSupported (StringExtractorGDBRemote &packet);
125
126 PacketResult
127 Handle_QListThreadsInStopReply (StringExtractorGDBRemote &packet);
128
129 PacketResult
130 Handle_QSetDetachOnError (StringExtractorGDBRemote &packet);
131
132 PacketResult
133 Handle_QStartNoAckMode (StringExtractorGDBRemote &packet);
134
135 PacketResult
136 Handle_QSetSTDIN (StringExtractorGDBRemote &packet);
137
138 PacketResult
139 Handle_QSetSTDOUT (StringExtractorGDBRemote &packet);
140
141 PacketResult
142 Handle_QSetSTDERR (StringExtractorGDBRemote &packet);
143
144 PacketResult
145 Handle_qLaunchSuccess (StringExtractorGDBRemote &packet);
146
147 PacketResult
148 Handle_QEnvironment (StringExtractorGDBRemote &packet);
149
150 PacketResult
151 Handle_QLaunchArch (StringExtractorGDBRemote &packet);
152
153 bool
154 KillSpawnedProcess (lldb::pid_t pid);
155
156 static void
157 CreateProcessInfoResponse (const lldb_private::ProcessInstanceInfo &proc_info,
158 lldb_private::StreamString &response);
159
160 static void
161 CreateProcessInfoResponse_DebugServerStyle (const lldb_private::ProcessInstanceInfo &proc_info,
162 lldb_private::StreamString &response);
163
164 template <typename T>
Tamas Berghammere13c2732015-02-11 10:29:30 +0000165 void
Tamas Berghammer81e92392015-02-18 11:37:46 +0000166 RegisterMemberFunctionHandler (StringExtractorGDBRemote::ServerPacketType packet_type,
167 PacketResult (T::*handler) (StringExtractorGDBRemote& packet))
Tamas Berghammere13c2732015-02-11 10:29:30 +0000168 {
169 RegisterPacketHandler(packet_type,
170 [this, handler] (StringExtractorGDBRemote packet,
171 lldb_private::Error &error,
172 bool &interrupt,
173 bool &quit)
174 {
175 return (static_cast<T*>(this)->*handler) (packet);
176 });
177 }
Tamas Berghammer7cb18bf2015-03-24 11:15:23 +0000178
179 bool
180 GetThreadSuffixSupported () override
181 {
182 return true;
183 }
184
185 //------------------------------------------------------------------
186 /// Launch a process with the current launch settings.
187 ///
188 /// This method supports running an lldb-gdbserver or similar
189 /// server in a situation where the startup code has been provided
190 /// with all the information for a child process to be launched.
191 ///
192 /// @return
193 /// An Error object indicating the success or failure of the
194 /// launch.
195 //------------------------------------------------------------------
196 virtual lldb_private::Error
197 LaunchProcess () = 0;
198
199 virtual lldb_private::FileSpec
200 FindModuleFile (const std::string& module_path, const lldb_private::ArchSpec& arch);
Tamas Berghammere13c2732015-02-11 10:29:30 +0000201};
202
203#endif // liblldb_GDBRemoteCommunicationServerCommon_h_