blob: 7bb67263f3b85f5ee82826fb0594720b7619cf06 [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
Eugene Zelenkoedb35d92015-10-24 01:08:35 +000015#include <string>
Tamas Berghammere13c2732015-02-11 10:29:30 +000016
17// Other libraries and framework includes
Eugene Zelenkoedb35d92015-10-24 01:08:35 +000018// Project includes
Tamas Berghammere13c2732015-02-11 10:29:30 +000019#include "lldb/lldb-private-forward.h"
Tamas Berghammere13c2732015-02-11 10:29:30 +000020#include "lldb/Target/Process.h"
21
Tamas Berghammere13c2732015-02-11 10:29:30 +000022#include "GDBRemoteCommunicationServer.h"
23#include "GDBRemoteCommunicationServerCommon.h"
24
Tamas Berghammere13c2732015-02-11 10:29:30 +000025class StringExtractorGDBRemote;
26
Tamas Berghammerdb264a62015-03-31 09:52:22 +000027namespace lldb_private {
28namespace process_gdb_remote {
29
30class ProcessGDBRemote;
31
Tamas Berghammere13c2732015-02-11 10:29:30 +000032class GDBRemoteCommunicationServerCommon :
33 public GDBRemoteCommunicationServer
34{
35public:
36 GDBRemoteCommunicationServerCommon(const char *comm_name, const char *listener_name);
37
Eugene Zelenkoedb35d92015-10-24 01:08:35 +000038 ~GDBRemoteCommunicationServerCommon() override;
Tamas Berghammere13c2732015-02-11 10:29:30 +000039
Tamas Berghammere13c2732015-02-11 10:29:30 +000040protected:
Tamas Berghammerdb264a62015-03-31 09:52:22 +000041 ProcessLaunchInfo m_process_launch_info;
42 Error m_process_launch_error;
43 ProcessInstanceInfoList m_proc_infos;
Tamas Berghammere13c2732015-02-11 10:29:30 +000044 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
Tamas Berghammere13c2732015-02-11 10:29:30 +000073 Handle_vFile_Open (StringExtractorGDBRemote &packet);
74
75 PacketResult
76 Handle_vFile_Close (StringExtractorGDBRemote &packet);
77
78 PacketResult
79 Handle_vFile_pRead (StringExtractorGDBRemote &packet);
80
81 PacketResult
82 Handle_vFile_pWrite (StringExtractorGDBRemote &packet);
83
84 PacketResult
85 Handle_vFile_Size (StringExtractorGDBRemote &packet);
86
87 PacketResult
88 Handle_vFile_Mode (StringExtractorGDBRemote &packet);
89
90 PacketResult
91 Handle_vFile_Exists (StringExtractorGDBRemote &packet);
92
93 PacketResult
94 Handle_vFile_symlink (StringExtractorGDBRemote &packet);
95
96 PacketResult
97 Handle_vFile_unlink (StringExtractorGDBRemote &packet);
98
99 PacketResult
100 Handle_vFile_Stat (StringExtractorGDBRemote &packet);
101
102 PacketResult
103 Handle_vFile_MD5 (StringExtractorGDBRemote &packet);
104
105 PacketResult
Greg Clayton420562a2015-05-29 00:15:15 +0000106 Handle_qEcho (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
Chaoren Lin0ddb7222015-03-31 22:37:59 +0000148 Handle_QEnvironment (StringExtractorGDBRemote &packet);
149
150 PacketResult
151 Handle_QEnvironmentHexEncoded (StringExtractorGDBRemote &packet);
Tamas Berghammere13c2732015-02-11 10:29:30 +0000152
153 PacketResult
154 Handle_QLaunchArch (StringExtractorGDBRemote &packet);
155
Tamas Berghammere13c2732015-02-11 10:29:30 +0000156 static void
Tamas Berghammerdb264a62015-03-31 09:52:22 +0000157 CreateProcessInfoResponse (const ProcessInstanceInfo &proc_info,
158 StreamString &response);
Tamas Berghammere13c2732015-02-11 10:29:30 +0000159
160 static void
Tamas Berghammerdb264a62015-03-31 09:52:22 +0000161 CreateProcessInfoResponse_DebugServerStyle (const ProcessInstanceInfo &proc_info,
162 StreamString &response);
Tamas Berghammere13c2732015-02-11 10:29:30 +0000163
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,
Tamas Berghammerdb264a62015-03-31 09:52:22 +0000171 Error &error,
Tamas Berghammere13c2732015-02-11 10:29:30 +0000172 bool &interrupt,
173 bool &quit)
174 {
175 return (static_cast<T*>(this)->*handler) (packet);
176 });
177 }
Tamas Berghammer7cb18bf2015-03-24 11:15:23 +0000178
Tamas Berghammer7cb18bf2015-03-24 11:15:23 +0000179 //------------------------------------------------------------------
180 /// Launch a process with the current launch settings.
181 ///
182 /// This method supports running an lldb-gdbserver or similar
183 /// server in a situation where the startup code has been provided
184 /// with all the information for a child process to be launched.
185 ///
186 /// @return
187 /// An Error object indicating the success or failure of the
188 /// launch.
189 //------------------------------------------------------------------
Tamas Berghammerdb264a62015-03-31 09:52:22 +0000190 virtual Error
Tamas Berghammer7cb18bf2015-03-24 11:15:23 +0000191 LaunchProcess () = 0;
192
Tamas Berghammerdb264a62015-03-31 09:52:22 +0000193 virtual FileSpec
194 FindModuleFile (const std::string& module_path, const ArchSpec& arch);
Tamas Berghammere13c2732015-02-11 10:29:30 +0000195};
196
Tamas Berghammerdb264a62015-03-31 09:52:22 +0000197} // namespace process_gdb_remote
198} // namespace lldb_private
199
Eugene Zelenkoedb35d92015-10-24 01:08:35 +0000200#endif // liblldb_GDBRemoteCommunicationServerCommon_h_