blob: cce0e4e64c1e8d6bc1d679a9fa1a5ba2c6ca3037 [file] [log] [blame]
Greg Clayton61d043b2011-03-22 04:00:09 +00001//===-- GDBRemoteCommunicationServer.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_GDBRemoteCommunicationServer_h_
11#define liblldb_GDBRemoteCommunicationServer_h_
12
13// C Includes
14// C++ Includes
15// Other libraries and framework includes
16// Project includes
Greg Clayton24bc5d92011-03-30 18:16:51 +000017#include "lldb/Target/Process.h"
18
Greg Clayton61d043b2011-03-22 04:00:09 +000019#include "GDBRemoteCommunication.h"
20
21class ProcessGDBRemote;
Greg Clayton24bc5d92011-03-30 18:16:51 +000022class StringExtractorGDBRemote;
Greg Clayton61d043b2011-03-22 04:00:09 +000023
24class GDBRemoteCommunicationServer : public GDBRemoteCommunication
25{
26public:
27 enum
28 {
29 eBroadcastBitRunPacketSent = kLoUserBroadcastBit
30 };
31 //------------------------------------------------------------------
32 // Constructors and Destructors
33 //------------------------------------------------------------------
Greg Claytonb72d0f02011-04-12 05:54:46 +000034 GDBRemoteCommunicationServer(bool is_platform);
Greg Clayton61d043b2011-03-22 04:00:09 +000035
36 virtual
37 ~GDBRemoteCommunicationServer();
38
39 bool
Greg Clayton63afdb02011-06-17 01:22:15 +000040 GetPacketAndSendResponse (uint32_t timeout_usec,
Greg Clayton58e26e02011-03-24 04:28:38 +000041 lldb_private::Error &error,
Greg Claytoncb8977d2011-03-23 00:09:55 +000042 bool &interrupt,
43 bool &quit);
Greg Clayton61d043b2011-03-22 04:00:09 +000044
45 virtual bool
46 GetThreadSuffixSupported ()
47 {
48 return true;
49 }
50
Greg Clayton58e26e02011-03-24 04:28:38 +000051 // After connecting, do a little handshake with the client to make sure
52 // we are at least communicating
53 bool
54 HandshakeWithClient (lldb_private::Error *error_ptr);
Greg Clayton61d043b2011-03-22 04:00:09 +000055
Greg Claytonb72d0f02011-04-12 05:54:46 +000056 // Set both ports to zero to let the platform automatically bind to
57 // a port chosen by the OS.
58 void
59 SetPortRange (uint16_t lo_port_num, uint16_t hi_port_num)
60 {
61 m_lo_port_num = lo_port_num;
62 m_hi_port_num = hi_port_num;
63 }
64
Greg Clayton61d043b2011-03-22 04:00:09 +000065protected:
Greg Claytonb72d0f02011-04-12 05:54:46 +000066 //typedef std::map<uint16_t, lldb::pid_t> PortToPIDMap;
67
Greg Clayton61d043b2011-03-22 04:00:09 +000068 lldb::thread_t m_async_thread;
Greg Claytonb72d0f02011-04-12 05:54:46 +000069 lldb_private::ProcessLaunchInfo m_process_launch_info;
70 lldb_private::Error m_process_launch_error;
71 lldb_private::ProcessInstanceInfoList m_proc_infos;
Greg Clayton24bc5d92011-03-30 18:16:51 +000072 uint32_t m_proc_infos_index;
Greg Claytonb72d0f02011-04-12 05:54:46 +000073 uint16_t m_lo_port_num;
74 uint16_t m_hi_port_num;
75 //PortToPIDMap m_port_to_pid_map;
Greg Clayton61d043b2011-03-22 04:00:09 +000076
77 size_t
Greg Clayton24bc5d92011-03-30 18:16:51 +000078 SendUnimplementedResponse (const char *packet);
79
80 size_t
81 SendErrorResponse (uint8_t error);
Greg Clayton61d043b2011-03-22 04:00:09 +000082
Greg Clayton58e26e02011-03-24 04:28:38 +000083 size_t
84 SendOKResponse ();
Greg Clayton61d043b2011-03-22 04:00:09 +000085
86 bool
Greg Claytonb72d0f02011-04-12 05:54:46 +000087 Handle_A (StringExtractorGDBRemote &packet);
88
89 bool
90 Handle_qLaunchSuccess (StringExtractorGDBRemote &packet);
91
92 bool
Greg Clayton24bc5d92011-03-30 18:16:51 +000093 Handle_qHostInfo (StringExtractorGDBRemote &packet);
94
95 bool
Greg Claytonb72d0f02011-04-12 05:54:46 +000096 Handle_qLaunchGDBServer (StringExtractorGDBRemote &packet);
97
98 bool
Greg Clayton24bc5d92011-03-30 18:16:51 +000099 Handle_qProcessInfoPID (StringExtractorGDBRemote &packet);
100
101 bool
102 Handle_qfProcessInfo (StringExtractorGDBRemote &packet);
103
104 bool
105 Handle_qsProcessInfo (StringExtractorGDBRemote &packet);
106
Greg Claytonb72d0f02011-04-12 05:54:46 +0000107 bool
108 Handle_qC (StringExtractorGDBRemote &packet);
109
Greg Clayton24bc5d92011-03-30 18:16:51 +0000110 bool
111 Handle_qUserName (StringExtractorGDBRemote &packet);
112
113 bool
114 Handle_qGroupName (StringExtractorGDBRemote &packet);
Greg Clayton61d043b2011-03-22 04:00:09 +0000115
Greg Clayton58e26e02011-03-24 04:28:38 +0000116 bool
Greg Clayton06d7cc82011-04-04 18:18:57 +0000117 Handle_qSpeedTest (StringExtractorGDBRemote &packet);
118
119 bool
Greg Claytonb72d0f02011-04-12 05:54:46 +0000120 Handle_QEnvironment (StringExtractorGDBRemote &packet);
121
122 bool
123 Handle_QSetDisableASLR (StringExtractorGDBRemote &packet);
124
125 bool
126 Handle_QSetWorkingDir (StringExtractorGDBRemote &packet);
127
128 bool
Greg Clayton24bc5d92011-03-30 18:16:51 +0000129 Handle_QStartNoAckMode (StringExtractorGDBRemote &packet);
Greg Clayton58e26e02011-03-24 04:28:38 +0000130
Greg Claytonb72d0f02011-04-12 05:54:46 +0000131 bool
132 Handle_QSetSTDIN (StringExtractorGDBRemote &packet);
133
134 bool
135 Handle_QSetSTDOUT (StringExtractorGDBRemote &packet);
136
137 bool
138 Handle_QSetSTDERR (StringExtractorGDBRemote &packet);
139
Greg Clayton61d043b2011-03-22 04:00:09 +0000140private:
141 //------------------------------------------------------------------
142 // For GDBRemoteCommunicationServer only
143 //------------------------------------------------------------------
144 DISALLOW_COPY_AND_ASSIGN (GDBRemoteCommunicationServer);
145};
146
147#endif // liblldb_GDBRemoteCommunicationServer_h_