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