]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/lldb/include/lldb/Utility/StringExtractorGDBRemote.h
MFC r355940:
[FreeBSD/FreeBSD.git] / contrib / llvm-project / lldb / include / lldb / Utility / StringExtractorGDBRemote.h
1 //===-- StringExtractorGDBRemote.h ------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 #ifndef LLDB_UTILITY_STRINGEXTRACTORGDBREMOTE_H
10 #define LLDB_UTILITY_STRINGEXTRACTORGDBREMOTE_H
11
12 #include "lldb/Utility/Status.h"
13 #include "lldb/Utility/StringExtractor.h"
14 #include "llvm/ADT/StringRef.h"
15
16 #include <string>
17
18 #include <stddef.h>
19 #include <stdint.h>
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   ~StringExtractorGDBRemote() override {}
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_QEnableErrorStrings,
76     eServerPacketType_QLaunchArch,
77     eServerPacketType_QSetDisableASLR,
78     eServerPacketType_QSetDetachOnError,
79     eServerPacketType_QSetSTDIN,
80     eServerPacketType_QSetSTDOUT,
81     eServerPacketType_QSetSTDERR,
82     eServerPacketType_QSetWorkingDir,
83     eServerPacketType_QStartNoAckMode,
84     eServerPacketType_qPlatform_shell,
85     eServerPacketType_qPlatform_mkdir,
86     eServerPacketType_qPlatform_chmod,
87     eServerPacketType_vFile_open,
88     eServerPacketType_vFile_close,
89     eServerPacketType_vFile_pread,
90     eServerPacketType_vFile_pwrite,
91     eServerPacketType_vFile_size,
92     eServerPacketType_vFile_mode,
93     eServerPacketType_vFile_exists,
94     eServerPacketType_vFile_md5,
95     eServerPacketType_vFile_stat,
96     eServerPacketType_vFile_symlink,
97     eServerPacketType_vFile_unlink,
98     // debug server packages
99     eServerPacketType_QEnvironmentHexEncoded,
100     eServerPacketType_QListThreadsInStopReply,
101     eServerPacketType_QPassSignals,
102     eServerPacketType_QRestoreRegisterState,
103     eServerPacketType_QSaveRegisterState,
104     eServerPacketType_QSetLogging,
105     eServerPacketType_QSetMaxPacketSize,
106     eServerPacketType_QSetMaxPayloadSize,
107     eServerPacketType_QSetEnableAsyncProfiling,
108     eServerPacketType_QSyncThreadState,
109     eServerPacketType_QThreadSuffixSupported,
110
111     eServerPacketType_jThreadsInfo,
112     eServerPacketType_qsThreadInfo,
113     eServerPacketType_qfThreadInfo,
114     eServerPacketType_qGetPid,
115     eServerPacketType_qGetProfileData,
116     eServerPacketType_qGDBServerVersion,
117     eServerPacketType_qMemoryRegionInfo,
118     eServerPacketType_qMemoryRegionInfoSupported,
119     eServerPacketType_qProcessInfo,
120     eServerPacketType_qRcmd,
121     eServerPacketType_qRegisterInfo,
122     eServerPacketType_qShlibInfoAddr,
123     eServerPacketType_qStepPacketSupported,
124     eServerPacketType_qSupported,
125     eServerPacketType_qSyncThreadStateSupported,
126     eServerPacketType_qThreadExtraInfo,
127     eServerPacketType_qThreadStopInfo,
128     eServerPacketType_qVAttachOrWaitSupported,
129     eServerPacketType_qWatchpointSupportInfo,
130     eServerPacketType_qWatchpointSupportInfoSupported,
131     eServerPacketType_qXfer,
132
133     eServerPacketType_jSignalsInfo,
134     eServerPacketType_jModulesInfo,
135
136     eServerPacketType_vAttach,
137     eServerPacketType_vAttachWait,
138     eServerPacketType_vAttachOrWait,
139     eServerPacketType_vAttachName,
140     eServerPacketType_vCont,
141     eServerPacketType_vCont_actions, // vCont?
142
143     eServerPacketType_stop_reason, // '?'
144
145     eServerPacketType_c,
146     eServerPacketType_C,
147     eServerPacketType_D,
148     eServerPacketType_g,
149     eServerPacketType_G,
150     eServerPacketType_H,
151     eServerPacketType_I, // stdin notification
152     eServerPacketType_k,
153     eServerPacketType_m,
154     eServerPacketType_M,
155     eServerPacketType_p,
156     eServerPacketType_P,
157     eServerPacketType_s,
158     eServerPacketType_S,
159     eServerPacketType_T,
160     eServerPacketType_x,
161     eServerPacketType_X,
162     eServerPacketType_Z,
163     eServerPacketType_z,
164
165     eServerPacketType__M,
166     eServerPacketType__m,
167     eServerPacketType_notify, // '%' notification
168
169     eServerPacketType_jTraceStart,
170     eServerPacketType_jTraceBufferRead,
171     eServerPacketType_jTraceMetaRead,
172     eServerPacketType_jTraceStop,
173     eServerPacketType_jTraceConfigRead,
174   };
175
176   ServerPacketType GetServerPacketType() const;
177
178   enum ResponseType { eUnsupported = 0, eAck, eNack, eError, eOK, eResponse };
179
180   ResponseType GetResponseType() const;
181
182   bool IsOKResponse() const;
183
184   bool IsUnsupportedResponse() const;
185
186   bool IsNormalResponse() const;
187
188   bool IsErrorResponse() const;
189
190   // Returns zero if the packet isn't a EXX packet where XX are two hex digits.
191   // Otherwise the error encoded in XX is returned.
192   uint8_t GetError();
193
194   lldb_private::Status GetStatus();
195
196   size_t GetEscapedBinaryData(std::string &str);
197
198 protected:
199   ResponseValidatorCallback m_validator;
200   void *m_validator_baton;
201 };
202
203 #endif // LLDB_UTILITY_STRINGEXTRACTORGDBREMOTE_H