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