diff options
Diffstat (limited to 'include/lldb/Utility/StringExtractorGDBRemote.h')
| -rw-r--r-- | include/lldb/Utility/StringExtractorGDBRemote.h | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/include/lldb/Utility/StringExtractorGDBRemote.h b/include/lldb/Utility/StringExtractorGDBRemote.h new file mode 100644 index 000000000000..93e760b88112 --- /dev/null +++ b/include/lldb/Utility/StringExtractorGDBRemote.h @@ -0,0 +1,204 @@ +//===-- StringExtractorGDBRemote.h ------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLDB_UTILITY_STRINGEXTRACTORGDBREMOTE_H +#define LLDB_UTILITY_STRINGEXTRACTORGDBREMOTE_H + +#include "lldb/Utility/Status.h" +#include "lldb/Utility/StringExtractor.h" +#include "llvm/ADT/StringRef.h" // for StringRef + +#include <string> + +#include <stddef.h> // for size_t +#include <stdint.h> // for uint8_t + +class StringExtractorGDBRemote : public StringExtractor { +public: + typedef bool (*ResponseValidatorCallback)( + void *baton, const StringExtractorGDBRemote &response); + + StringExtractorGDBRemote() : StringExtractor(), m_validator(nullptr) {} + + StringExtractorGDBRemote(llvm::StringRef str) + : StringExtractor(str), m_validator(nullptr) {} + + StringExtractorGDBRemote(const char *cstr) + : StringExtractor(cstr), m_validator(nullptr) {} + + StringExtractorGDBRemote(const StringExtractorGDBRemote &rhs) + : StringExtractor(rhs), m_validator(rhs.m_validator) {} + + virtual ~StringExtractorGDBRemote() {} + + bool ValidateResponse() const; + + void CopyResponseValidator(const StringExtractorGDBRemote &rhs); + + void SetResponseValidator(ResponseValidatorCallback callback, void *baton); + + void SetResponseValidatorToOKErrorNotSupported(); + + void SetResponseValidatorToASCIIHexBytes(); + + void SetResponseValidatorToJSON(); + + enum ServerPacketType { + eServerPacketType_nack = 0, + eServerPacketType_ack, + eServerPacketType_invalid, + eServerPacketType_unimplemented, + eServerPacketType_interrupt, // CTRL+c packet or "\x03" + eServerPacketType_A, // Program arguments packet + eServerPacketType_qfProcessInfo, + eServerPacketType_qsProcessInfo, + eServerPacketType_qC, + eServerPacketType_qEcho, + eServerPacketType_qGroupName, + eServerPacketType_qHostInfo, + eServerPacketType_qLaunchGDBServer, + eServerPacketType_qQueryGDBServer, + eServerPacketType_qKillSpawnedProcess, + eServerPacketType_qLaunchSuccess, + eServerPacketType_qModuleInfo, + eServerPacketType_qProcessInfoPID, + eServerPacketType_qSpeedTest, + eServerPacketType_qUserName, + eServerPacketType_qGetWorkingDir, + eServerPacketType_qFileLoadAddress, + eServerPacketType_QEnvironment, + eServerPacketType_QEnableErrorStrings, + eServerPacketType_QLaunchArch, + eServerPacketType_QSetDisableASLR, + eServerPacketType_QSetDetachOnError, + eServerPacketType_QSetSTDIN, + eServerPacketType_QSetSTDOUT, + eServerPacketType_QSetSTDERR, + eServerPacketType_QSetWorkingDir, + eServerPacketType_QStartNoAckMode, + eServerPacketType_qPlatform_shell, + eServerPacketType_qPlatform_mkdir, + eServerPacketType_qPlatform_chmod, + eServerPacketType_vFile_open, + eServerPacketType_vFile_close, + eServerPacketType_vFile_pread, + eServerPacketType_vFile_pwrite, + eServerPacketType_vFile_size, + eServerPacketType_vFile_mode, + eServerPacketType_vFile_exists, + eServerPacketType_vFile_md5, + eServerPacketType_vFile_stat, + eServerPacketType_vFile_symlink, + eServerPacketType_vFile_unlink, + // debug server packages + eServerPacketType_QEnvironmentHexEncoded, + eServerPacketType_QListThreadsInStopReply, + eServerPacketType_QPassSignals, + eServerPacketType_QRestoreRegisterState, + eServerPacketType_QSaveRegisterState, + eServerPacketType_QSetLogging, + eServerPacketType_QSetMaxPacketSize, + eServerPacketType_QSetMaxPayloadSize, + eServerPacketType_QSetEnableAsyncProfiling, + eServerPacketType_QSyncThreadState, + eServerPacketType_QThreadSuffixSupported, + + eServerPacketType_jThreadsInfo, + eServerPacketType_qsThreadInfo, + eServerPacketType_qfThreadInfo, + eServerPacketType_qGetPid, + eServerPacketType_qGetProfileData, + eServerPacketType_qGDBServerVersion, + eServerPacketType_qMemoryRegionInfo, + eServerPacketType_qMemoryRegionInfoSupported, + eServerPacketType_qProcessInfo, + eServerPacketType_qRcmd, + eServerPacketType_qRegisterInfo, + eServerPacketType_qShlibInfoAddr, + eServerPacketType_qStepPacketSupported, + eServerPacketType_qSupported, + eServerPacketType_qSyncThreadStateSupported, + eServerPacketType_qThreadExtraInfo, + eServerPacketType_qThreadStopInfo, + eServerPacketType_qVAttachOrWaitSupported, + eServerPacketType_qWatchpointSupportInfo, + eServerPacketType_qWatchpointSupportInfoSupported, + eServerPacketType_qXfer_auxv_read, + + eServerPacketType_jSignalsInfo, + eServerPacketType_jModulesInfo, + + eServerPacketType_vAttach, + eServerPacketType_vAttachWait, + eServerPacketType_vAttachOrWait, + eServerPacketType_vAttachName, + eServerPacketType_vCont, + eServerPacketType_vCont_actions, // vCont? + + eServerPacketType_stop_reason, // '?' + + eServerPacketType_c, + eServerPacketType_C, + eServerPacketType_D, + eServerPacketType_g, + eServerPacketType_G, + eServerPacketType_H, + eServerPacketType_I, // stdin notification + eServerPacketType_k, + eServerPacketType_m, + eServerPacketType_M, + eServerPacketType_p, + eServerPacketType_P, + eServerPacketType_s, + eServerPacketType_S, + eServerPacketType_T, + eServerPacketType_x, + eServerPacketType_X, + eServerPacketType_Z, + eServerPacketType_z, + + eServerPacketType__M, + eServerPacketType__m, + eServerPacketType_notify, // '%' notification + + eServerPacketType_jTraceStart, + eServerPacketType_jTraceBufferRead, + eServerPacketType_jTraceMetaRead, + eServerPacketType_jTraceStop, + eServerPacketType_jTraceConfigRead, + }; + + ServerPacketType GetServerPacketType() const; + + enum ResponseType { eUnsupported = 0, eAck, eNack, eError, eOK, eResponse }; + + ResponseType GetResponseType() const; + + bool IsOKResponse() const; + + bool IsUnsupportedResponse() const; + + bool IsNormalResponse() const; + + bool IsErrorResponse() const; + + // Returns zero if the packet isn't a EXX packet where XX are two hex digits. + // Otherwise the error encoded in XX is returned. + uint8_t GetError(); + + lldb_private::Status GetStatus(); + + size_t GetEscapedBinaryData(std::string &str); + +protected: + ResponseValidatorCallback m_validator; + void *m_validator_baton; +}; + +#endif // LLDB_UTILITY_STRINGEXTRACTORGDBREMOTE_H |
