File indexing completed on 2026-05-10 08:42:58
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef LLDB_UTILITY_STRINGEXTRACTORGDBREMOTE_H
0010 #define LLDB_UTILITY_STRINGEXTRACTORGDBREMOTE_H
0011
0012 #include "lldb/Utility/Status.h"
0013 #include "lldb/Utility/StringExtractor.h"
0014 #include "llvm/ADT/StringRef.h"
0015
0016 #include <optional>
0017 #include <string>
0018
0019 #include <cstddef>
0020 #include <cstdint>
0021
0022 class StringExtractorGDBRemote : public StringExtractor {
0023 public:
0024 typedef bool (*ResponseValidatorCallback)(
0025 void *baton, const StringExtractorGDBRemote &response);
0026
0027 StringExtractorGDBRemote() = default;
0028
0029 StringExtractorGDBRemote(llvm::StringRef str)
0030 : StringExtractor(str), m_validator(nullptr) {}
0031
0032 StringExtractorGDBRemote(const char *cstr)
0033 : StringExtractor(cstr), m_validator(nullptr) {}
0034
0035 bool ValidateResponse() const;
0036
0037 void CopyResponseValidator(const StringExtractorGDBRemote &rhs);
0038
0039 void SetResponseValidator(ResponseValidatorCallback callback, void *baton);
0040
0041 void SetResponseValidatorToOKErrorNotSupported();
0042
0043 void SetResponseValidatorToASCIIHexBytes();
0044
0045 void SetResponseValidatorToJSON();
0046
0047 enum ServerPacketType {
0048 eServerPacketType_nack = 0,
0049 eServerPacketType_ack,
0050 eServerPacketType_invalid,
0051 eServerPacketType_unimplemented,
0052 eServerPacketType_interrupt,
0053 eServerPacketType_A,
0054 eServerPacketType_qfProcessInfo,
0055 eServerPacketType_qsProcessInfo,
0056 eServerPacketType_qC,
0057 eServerPacketType_qEcho,
0058 eServerPacketType_qGroupName,
0059 eServerPacketType_qHostInfo,
0060 eServerPacketType_qLaunchGDBServer,
0061 eServerPacketType_qQueryGDBServer,
0062 eServerPacketType_qKillSpawnedProcess,
0063 eServerPacketType_qLaunchSuccess,
0064 eServerPacketType_qModuleInfo,
0065 eServerPacketType_qProcessInfoPID,
0066 eServerPacketType_qSpeedTest,
0067 eServerPacketType_qUserName,
0068 eServerPacketType_qGetWorkingDir,
0069 eServerPacketType_qFileLoadAddress,
0070 eServerPacketType_QEnvironment,
0071 eServerPacketType_QEnableErrorStrings,
0072 eServerPacketType_QLaunchArch,
0073 eServerPacketType_QSetDisableASLR,
0074 eServerPacketType_QSetDetachOnError,
0075 eServerPacketType_QSetSTDIN,
0076 eServerPacketType_QSetSTDOUT,
0077 eServerPacketType_QSetSTDERR,
0078 eServerPacketType_QSetWorkingDir,
0079 eServerPacketType_QStartNoAckMode,
0080 eServerPacketType_qPathComplete,
0081 eServerPacketType_qPlatform_shell,
0082 eServerPacketType_qPlatform_mkdir,
0083 eServerPacketType_qPlatform_chmod,
0084 eServerPacketType_vFile_open,
0085 eServerPacketType_vFile_close,
0086 eServerPacketType_vFile_pread,
0087 eServerPacketType_vFile_pwrite,
0088 eServerPacketType_vFile_size,
0089 eServerPacketType_vFile_mode,
0090 eServerPacketType_vFile_exists,
0091 eServerPacketType_vFile_md5,
0092 eServerPacketType_vFile_fstat,
0093 eServerPacketType_vFile_stat,
0094 eServerPacketType_vFile_symlink,
0095 eServerPacketType_vFile_unlink,
0096
0097 eServerPacketType_QEnvironmentHexEncoded,
0098 eServerPacketType_QListThreadsInStopReply,
0099 eServerPacketType_QPassSignals,
0100 eServerPacketType_QRestoreRegisterState,
0101 eServerPacketType_QSaveRegisterState,
0102 eServerPacketType_QSetLogging,
0103 eServerPacketType_QSetMaxPacketSize,
0104 eServerPacketType_QSetMaxPayloadSize,
0105 eServerPacketType_QSetEnableAsyncProfiling,
0106 eServerPacketType_QSyncThreadState,
0107 eServerPacketType_QThreadSuffixSupported,
0108
0109 eServerPacketType_jThreadsInfo,
0110 eServerPacketType_qsThreadInfo,
0111 eServerPacketType_qfThreadInfo,
0112 eServerPacketType_qGetPid,
0113 eServerPacketType_qGetProfileData,
0114 eServerPacketType_qGDBServerVersion,
0115 eServerPacketType_qMemoryRegionInfo,
0116 eServerPacketType_qMemoryRegionInfoSupported,
0117 eServerPacketType_qProcessInfo,
0118 eServerPacketType_qRcmd,
0119 eServerPacketType_qRegisterInfo,
0120 eServerPacketType_qShlibInfoAddr,
0121 eServerPacketType_qStepPacketSupported,
0122 eServerPacketType_qSupported,
0123 eServerPacketType_qSyncThreadStateSupported,
0124 eServerPacketType_qThreadExtraInfo,
0125 eServerPacketType_qThreadStopInfo,
0126 eServerPacketType_qVAttachOrWaitSupported,
0127 eServerPacketType_qWatchpointSupportInfo,
0128 eServerPacketType_qWatchpointSupportInfoSupported,
0129 eServerPacketType_qXfer,
0130
0131 eServerPacketType_jSignalsInfo,
0132 eServerPacketType_jModulesInfo,
0133
0134 eServerPacketType_vAttach,
0135 eServerPacketType_vAttachWait,
0136 eServerPacketType_vAttachOrWait,
0137 eServerPacketType_vAttachName,
0138 eServerPacketType_vCont,
0139 eServerPacketType_vCont_actions,
0140 eServerPacketType_vKill,
0141 eServerPacketType_vRun,
0142
0143 eServerPacketType_stop_reason,
0144
0145 eServerPacketType_c,
0146 eServerPacketType_C,
0147 eServerPacketType_D,
0148 eServerPacketType_g,
0149 eServerPacketType_G,
0150 eServerPacketType_H,
0151 eServerPacketType_I,
0152 eServerPacketType_k,
0153 eServerPacketType_m,
0154 eServerPacketType_M,
0155 eServerPacketType_p,
0156 eServerPacketType_P,
0157 eServerPacketType_s,
0158 eServerPacketType_S,
0159 eServerPacketType_T,
0160 eServerPacketType_x,
0161 eServerPacketType_X,
0162 eServerPacketType_Z,
0163 eServerPacketType_z,
0164
0165 eServerPacketType__M,
0166 eServerPacketType__m,
0167 eServerPacketType_notify,
0168
0169 eServerPacketType_jLLDBTraceSupported,
0170 eServerPacketType_jLLDBTraceStart,
0171 eServerPacketType_jLLDBTraceStop,
0172 eServerPacketType_jLLDBTraceGetState,
0173 eServerPacketType_jLLDBTraceGetBinaryData,
0174
0175 eServerPacketType_qMemTags,
0176 eServerPacketType_QMemTags,
0177
0178 eServerPacketType_qLLDBSaveCore,
0179 eServerPacketType_QSetIgnoredExceptions,
0180 eServerPacketType_QNonStop,
0181 eServerPacketType_vStopped,
0182 eServerPacketType_vCtrlC,
0183 eServerPacketType_vStdio,
0184 };
0185
0186 ServerPacketType GetServerPacketType() const;
0187
0188 enum ResponseType { eUnsupported = 0, eAck, eNack, eError, eOK, eResponse };
0189
0190 ResponseType GetResponseType() const;
0191
0192 bool IsOKResponse() const;
0193
0194 bool IsUnsupportedResponse() const;
0195
0196 bool IsNormalResponse() const;
0197
0198 bool IsErrorResponse() const;
0199
0200
0201
0202 uint8_t GetError();
0203
0204 lldb_private::Status GetStatus();
0205
0206 size_t GetEscapedBinaryData(std::string &str);
0207
0208 static constexpr lldb::pid_t AllProcesses = UINT64_MAX;
0209 static constexpr lldb::tid_t AllThreads = UINT64_MAX;
0210
0211
0212
0213
0214 std::optional<std::pair<lldb::pid_t, lldb::tid_t>>
0215 GetPidTid(lldb::pid_t default_pid);
0216
0217 protected:
0218 ResponseValidatorCallback m_validator = nullptr;
0219 void *m_validator_baton = nullptr;
0220 };
0221
0222 #endif