]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/Utility/StringExtractorGDBRemote.h
Merge CK as of commit 255a47553aa5e8d0bb5f8eec63acac7f4c25a6d8, mostly
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / source / Utility / StringExtractorGDBRemote.h
1 //===-- StringExtractorGDBRemote.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 utility_StringExtractorGDBRemote_h_
11 #define utility_StringExtractorGDBRemote_h_
12
13 // C Includes
14 // C++ Includes
15 #include <string>
16 // Other libraries and framework includes
17 // Project includes
18 #include "lldb/Utility/StringExtractor.h"
19
20 class StringExtractorGDBRemote : public StringExtractor
21 {
22 public:
23     typedef bool (*ResponseValidatorCallback)(void * baton, const StringExtractorGDBRemote &response);
24
25     StringExtractorGDBRemote() :
26         StringExtractor(),
27         m_validator(nullptr)
28     {
29     }
30
31     StringExtractorGDBRemote(const char *cstr) :
32         StringExtractor(cstr),
33         m_validator(nullptr)
34     {
35     }
36
37     StringExtractorGDBRemote(const StringExtractorGDBRemote& rhs) :
38         StringExtractor(rhs),
39         m_validator(rhs.m_validator)
40     {
41     }
42
43     virtual ~StringExtractorGDBRemote()
44     {
45     }
46
47     bool
48     ValidateResponse() const;
49
50     void
51     CopyResponseValidator(const StringExtractorGDBRemote& rhs);
52
53     void
54     SetResponseValidator(ResponseValidatorCallback callback, void *baton);
55
56     void
57     SetResponseValidatorToOKErrorNotSupported();
58
59     void
60     SetResponseValidatorToASCIIHexBytes();
61
62     void
63     SetResponseValidatorToJSON();
64
65     enum ServerPacketType
66     {
67         eServerPacketType_nack = 0,
68         eServerPacketType_ack,
69         eServerPacketType_invalid,
70         eServerPacketType_unimplemented,
71         eServerPacketType_interrupt, // CTRL+c packet or "\x03"
72         eServerPacketType_A, // Program arguments packet
73         eServerPacketType_qfProcessInfo,
74         eServerPacketType_qsProcessInfo,
75         eServerPacketType_qC,
76         eServerPacketType_qEcho,
77         eServerPacketType_qGroupName,
78         eServerPacketType_qHostInfo,
79         eServerPacketType_qLaunchGDBServer,
80         eServerPacketType_qQueryGDBServer,
81         eServerPacketType_qKillSpawnedProcess,
82         eServerPacketType_qLaunchSuccess,
83         eServerPacketType_qModuleInfo,
84         eServerPacketType_qProcessInfoPID,
85         eServerPacketType_qSpeedTest,
86         eServerPacketType_qUserName,
87         eServerPacketType_qGetWorkingDir,
88         eServerPacketType_qFileLoadAddress,
89         eServerPacketType_QEnvironment,
90         eServerPacketType_QLaunchArch,
91         eServerPacketType_QSetDisableASLR,
92         eServerPacketType_QSetDetachOnError,
93         eServerPacketType_QSetSTDIN,
94         eServerPacketType_QSetSTDOUT,
95         eServerPacketType_QSetSTDERR,
96         eServerPacketType_QSetWorkingDir,
97         eServerPacketType_QStartNoAckMode,
98         eServerPacketType_qPlatform_shell,
99         eServerPacketType_qPlatform_mkdir,
100         eServerPacketType_qPlatform_chmod,
101         eServerPacketType_vFile_open,
102         eServerPacketType_vFile_close,
103         eServerPacketType_vFile_pread,
104         eServerPacketType_vFile_pwrite,
105         eServerPacketType_vFile_size,
106         eServerPacketType_vFile_mode,
107         eServerPacketType_vFile_exists,
108         eServerPacketType_vFile_md5,
109         eServerPacketType_vFile_stat,
110         eServerPacketType_vFile_symlink,
111         eServerPacketType_vFile_unlink,
112       // debug server packages
113         eServerPacketType_QEnvironmentHexEncoded,
114         eServerPacketType_QListThreadsInStopReply,
115         eServerPacketType_QRestoreRegisterState,
116         eServerPacketType_QSaveRegisterState,
117         eServerPacketType_QSetLogging,
118         eServerPacketType_QSetMaxPacketSize,
119         eServerPacketType_QSetMaxPayloadSize,
120         eServerPacketType_QSetEnableAsyncProfiling,
121         eServerPacketType_QSyncThreadState,
122         eServerPacketType_QThreadSuffixSupported,
123
124         eServerPacketType_jThreadsInfo,
125         eServerPacketType_qsThreadInfo,
126         eServerPacketType_qfThreadInfo,
127         eServerPacketType_qGetPid,
128         eServerPacketType_qGetProfileData,
129         eServerPacketType_qGDBServerVersion,
130         eServerPacketType_qMemoryRegionInfo,
131         eServerPacketType_qMemoryRegionInfoSupported,
132         eServerPacketType_qProcessInfo,
133         eServerPacketType_qRcmd,
134         eServerPacketType_qRegisterInfo,
135         eServerPacketType_qShlibInfoAddr,
136         eServerPacketType_qStepPacketSupported,
137         eServerPacketType_qSupported,
138         eServerPacketType_qSyncThreadStateSupported,
139         eServerPacketType_qThreadExtraInfo,
140         eServerPacketType_qThreadStopInfo,
141         eServerPacketType_qVAttachOrWaitSupported,
142         eServerPacketType_qWatchpointSupportInfo,
143         eServerPacketType_qWatchpointSupportInfoSupported,
144         eServerPacketType_qXfer_auxv_read,
145
146         eServerPacketType_jSignalsInfo,
147
148         eServerPacketType_vAttach,
149         eServerPacketType_vAttachWait,
150         eServerPacketType_vAttachOrWait,
151         eServerPacketType_vAttachName,
152         eServerPacketType_vCont,
153         eServerPacketType_vCont_actions, // vCont?
154
155         eServerPacketType_stop_reason, // '?'
156
157         eServerPacketType_c,
158         eServerPacketType_C,
159         eServerPacketType_D,
160         eServerPacketType_g,
161         eServerPacketType_G,
162         eServerPacketType_H,
163         eServerPacketType_I, // stdin notification
164         eServerPacketType_k,
165         eServerPacketType_m,
166         eServerPacketType_M,
167         eServerPacketType_p,
168         eServerPacketType_P,
169         eServerPacketType_s,
170         eServerPacketType_S,
171         eServerPacketType_T,
172         eServerPacketType_x,
173         eServerPacketType_X,
174         eServerPacketType_Z,
175         eServerPacketType_z,
176
177         eServerPacketType__M,
178         eServerPacketType__m,
179         eServerPacketType_notify, // '%' notification
180     };
181     
182     ServerPacketType
183     GetServerPacketType () const;
184
185     enum ResponseType
186     {
187         eUnsupported = 0,
188         eAck,
189         eNack,
190         eError,
191         eOK,
192         eResponse
193     };
194
195     ResponseType
196     GetResponseType () const;
197
198     bool
199     IsOKResponse() const;
200
201     bool
202     IsUnsupportedResponse() const;
203
204     bool
205     IsNormalResponse () const;
206
207     bool
208     IsErrorResponse() const;
209
210     // Returns zero if the packet isn't a EXX packet where XX are two hex
211     // digits. Otherwise the error encoded in XX is returned.
212     uint8_t
213     GetError();
214     
215     size_t
216     GetEscapedBinaryData (std::string &str);
217
218 protected:
219     ResponseValidatorCallback m_validator;
220     void *m_validator_baton;
221 };
222
223 #endif  // utility_StringExtractorGDBRemote_h_