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_
16 // Other libraries and framework includes
18 #include "lldb/Utility/StringExtractor.h"
20 class StringExtractorGDBRemote : public StringExtractor {
22 typedef bool (*ResponseValidatorCallback)(
23 void *baton, const StringExtractorGDBRemote &response);
25 StringExtractorGDBRemote() : StringExtractor(), m_validator(nullptr) {}
27 StringExtractorGDBRemote(llvm::StringRef str)
28 : StringExtractor(str), m_validator(nullptr) {}
30 StringExtractorGDBRemote(const char *cstr)
31 : StringExtractor(cstr), m_validator(nullptr) {}
33 StringExtractorGDBRemote(const StringExtractorGDBRemote &rhs)
34 : StringExtractor(rhs), m_validator(rhs.m_validator) {}
36 virtual ~StringExtractorGDBRemote() {}
38 bool ValidateResponse() const;
40 void CopyResponseValidator(const StringExtractorGDBRemote &rhs);
42 void SetResponseValidator(ResponseValidatorCallback callback, void *baton);
44 void SetResponseValidatorToOKErrorNotSupported();
46 void SetResponseValidatorToASCIIHexBytes();
48 void SetResponseValidatorToJSON();
50 enum ServerPacketType {
51 eServerPacketType_nack = 0,
52 eServerPacketType_ack,
53 eServerPacketType_invalid,
54 eServerPacketType_unimplemented,
55 eServerPacketType_interrupt, // CTRL+c packet or "\x03"
56 eServerPacketType_A, // Program arguments packet
57 eServerPacketType_qfProcessInfo,
58 eServerPacketType_qsProcessInfo,
60 eServerPacketType_qEcho,
61 eServerPacketType_qGroupName,
62 eServerPacketType_qHostInfo,
63 eServerPacketType_qLaunchGDBServer,
64 eServerPacketType_qQueryGDBServer,
65 eServerPacketType_qKillSpawnedProcess,
66 eServerPacketType_qLaunchSuccess,
67 eServerPacketType_qModuleInfo,
68 eServerPacketType_qProcessInfoPID,
69 eServerPacketType_qSpeedTest,
70 eServerPacketType_qUserName,
71 eServerPacketType_qGetWorkingDir,
72 eServerPacketType_qFileLoadAddress,
73 eServerPacketType_QEnvironment,
74 eServerPacketType_QLaunchArch,
75 eServerPacketType_QSetDisableASLR,
76 eServerPacketType_QSetDetachOnError,
77 eServerPacketType_QSetSTDIN,
78 eServerPacketType_QSetSTDOUT,
79 eServerPacketType_QSetSTDERR,
80 eServerPacketType_QSetWorkingDir,
81 eServerPacketType_QStartNoAckMode,
82 eServerPacketType_qPlatform_shell,
83 eServerPacketType_qPlatform_mkdir,
84 eServerPacketType_qPlatform_chmod,
85 eServerPacketType_vFile_open,
86 eServerPacketType_vFile_close,
87 eServerPacketType_vFile_pread,
88 eServerPacketType_vFile_pwrite,
89 eServerPacketType_vFile_size,
90 eServerPacketType_vFile_mode,
91 eServerPacketType_vFile_exists,
92 eServerPacketType_vFile_md5,
93 eServerPacketType_vFile_stat,
94 eServerPacketType_vFile_symlink,
95 eServerPacketType_vFile_unlink,
96 // debug server packages
97 eServerPacketType_QEnvironmentHexEncoded,
98 eServerPacketType_QListThreadsInStopReply,
99 eServerPacketType_QRestoreRegisterState,
100 eServerPacketType_QSaveRegisterState,
101 eServerPacketType_QSetLogging,
102 eServerPacketType_QSetMaxPacketSize,
103 eServerPacketType_QSetMaxPayloadSize,
104 eServerPacketType_QSetEnableAsyncProfiling,
105 eServerPacketType_QSyncThreadState,
106 eServerPacketType_QThreadSuffixSupported,
108 eServerPacketType_jThreadsInfo,
109 eServerPacketType_qsThreadInfo,
110 eServerPacketType_qfThreadInfo,
111 eServerPacketType_qGetPid,
112 eServerPacketType_qGetProfileData,
113 eServerPacketType_qGDBServerVersion,
114 eServerPacketType_qMemoryRegionInfo,
115 eServerPacketType_qMemoryRegionInfoSupported,
116 eServerPacketType_qProcessInfo,
117 eServerPacketType_qRcmd,
118 eServerPacketType_qRegisterInfo,
119 eServerPacketType_qShlibInfoAddr,
120 eServerPacketType_qStepPacketSupported,
121 eServerPacketType_qSupported,
122 eServerPacketType_qSyncThreadStateSupported,
123 eServerPacketType_qThreadExtraInfo,
124 eServerPacketType_qThreadStopInfo,
125 eServerPacketType_qVAttachOrWaitSupported,
126 eServerPacketType_qWatchpointSupportInfo,
127 eServerPacketType_qWatchpointSupportInfoSupported,
128 eServerPacketType_qXfer_auxv_read,
130 eServerPacketType_jSignalsInfo,
131 eServerPacketType_jModulesInfo,
133 eServerPacketType_vAttach,
134 eServerPacketType_vAttachWait,
135 eServerPacketType_vAttachOrWait,
136 eServerPacketType_vAttachName,
137 eServerPacketType_vCont,
138 eServerPacketType_vCont_actions, // vCont?
140 eServerPacketType_stop_reason, // '?'
148 eServerPacketType_I, // stdin notification
162 eServerPacketType__M,
163 eServerPacketType__m,
164 eServerPacketType_notify, // '%' notification
167 ServerPacketType GetServerPacketType() const;
169 enum ResponseType { eUnsupported = 0, eAck, eNack, eError, eOK, eResponse };
171 ResponseType GetResponseType() const;
173 bool IsOKResponse() const;
175 bool IsUnsupportedResponse() const;
177 bool IsNormalResponse() const;
179 bool IsErrorResponse() const;
181 // Returns zero if the packet isn't a EXX packet where XX are two hex
182 // digits. Otherwise the error encoded in XX is returned.
185 size_t GetEscapedBinaryData(std::string &str);
188 ResponseValidatorCallback m_validator;
189 void *m_validator_baton;
192 #endif // utility_StringExtractorGDBRemote_h_