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