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/Status.h"
14 #include "lldb/Utility/StringExtractor.h"
15 #include "llvm/ADT/StringRef.h" // for StringRef
19 #include <stddef.h> // for size_t
20 #include <stdint.h> // for uint8_t
22 class StringExtractorGDBRemote : public StringExtractor {
24 typedef bool (*ResponseValidatorCallback)(
25 void *baton, const StringExtractorGDBRemote &response);
27 StringExtractorGDBRemote() : StringExtractor(), m_validator(nullptr) {}
29 StringExtractorGDBRemote(llvm::StringRef str)
30 : StringExtractor(str), m_validator(nullptr) {}
32 StringExtractorGDBRemote(const char *cstr)
33 : StringExtractor(cstr), m_validator(nullptr) {}
35 StringExtractorGDBRemote(const StringExtractorGDBRemote &rhs)
36 : StringExtractor(rhs), m_validator(rhs.m_validator) {}
38 virtual ~StringExtractorGDBRemote() {}
40 bool ValidateResponse() const;
42 void CopyResponseValidator(const StringExtractorGDBRemote &rhs);
44 void SetResponseValidator(ResponseValidatorCallback callback, void *baton);
46 void SetResponseValidatorToOKErrorNotSupported();
48 void SetResponseValidatorToASCIIHexBytes();
50 void SetResponseValidatorToJSON();
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,
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,
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,
134 eServerPacketType_jSignalsInfo,
135 eServerPacketType_jModulesInfo,
137 eServerPacketType_vAttach,
138 eServerPacketType_vAttachWait,
139 eServerPacketType_vAttachOrWait,
140 eServerPacketType_vAttachName,
141 eServerPacketType_vCont,
142 eServerPacketType_vCont_actions, // vCont?
144 eServerPacketType_stop_reason, // '?'
152 eServerPacketType_I, // stdin notification
166 eServerPacketType__M,
167 eServerPacketType__m,
168 eServerPacketType_notify, // '%' notification
170 eServerPacketType_jTraceStart,
171 eServerPacketType_jTraceBufferRead,
172 eServerPacketType_jTraceMetaRead,
173 eServerPacketType_jTraceStop,
174 eServerPacketType_jTraceConfigRead,
177 ServerPacketType GetServerPacketType() const;
179 enum ResponseType { eUnsupported = 0, eAck, eNack, eError, eOK, eResponse };
181 ResponseType GetResponseType() const;
183 bool IsOKResponse() const;
185 bool IsUnsupportedResponse() const;
187 bool IsNormalResponse() const;
189 bool IsErrorResponse() const;
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.
195 lldb_private::Status GetStatus();
197 size_t GetEscapedBinaryData(std::string &str);
200 ResponseValidatorCallback m_validator;
201 void *m_validator_baton;
204 #endif // utility_StringExtractorGDBRemote_h_