1 //===-- StringExtractorGDBRemote.h ------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef utility_StringExtractorGDBRemote_h_
11 #define utility_StringExtractorGDBRemote_h_
13 #include "lldb/Utility/StringExtractor.h"
14 #include "llvm/ADT/StringRef.h" // for StringRef
18 #include <stddef.h> // for size_t
19 #include <stdint.h> // for uint8_t
21 class StringExtractorGDBRemote : public StringExtractor {
23 typedef bool (*ResponseValidatorCallback)(
24 void *baton, const StringExtractorGDBRemote &response);
26 StringExtractorGDBRemote() : StringExtractor(), m_validator(nullptr) {}
28 StringExtractorGDBRemote(llvm::StringRef str)
29 : StringExtractor(str), m_validator(nullptr) {}
31 StringExtractorGDBRemote(const char *cstr)
32 : StringExtractor(cstr), m_validator(nullptr) {}
34 StringExtractorGDBRemote(const StringExtractorGDBRemote &rhs)
35 : StringExtractor(rhs), m_validator(rhs.m_validator) {}
37 virtual ~StringExtractorGDBRemote() {}
39 bool ValidateResponse() const;
41 void CopyResponseValidator(const StringExtractorGDBRemote &rhs);
43 void SetResponseValidator(ResponseValidatorCallback callback, void *baton);
45 void SetResponseValidatorToOKErrorNotSupported();
47 void SetResponseValidatorToASCIIHexBytes();
49 void SetResponseValidatorToJSON();
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,
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,
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,
132 eServerPacketType_jSignalsInfo,
133 eServerPacketType_jModulesInfo,
135 eServerPacketType_vAttach,
136 eServerPacketType_vAttachWait,
137 eServerPacketType_vAttachOrWait,
138 eServerPacketType_vAttachName,
139 eServerPacketType_vCont,
140 eServerPacketType_vCont_actions, // vCont?
142 eServerPacketType_stop_reason, // '?'
150 eServerPacketType_I, // stdin notification
164 eServerPacketType__M,
165 eServerPacketType__m,
166 eServerPacketType_notify, // '%' notification
169 ServerPacketType GetServerPacketType() const;
171 enum ResponseType { eUnsupported = 0, eAck, eNack, eError, eOK, eResponse };
173 ResponseType GetResponseType() const;
175 bool IsOKResponse() const;
177 bool IsUnsupportedResponse() const;
179 bool IsNormalResponse() const;
181 bool IsErrorResponse() const;
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.
187 size_t GetEscapedBinaryData(std::string &str);
190 ResponseValidatorCallback m_validator;
191 void *m_validator_baton;
194 #endif // utility_StringExtractorGDBRemote_h_