1 //===-- StringExtractorGDBRemote.h ------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef utility_StringExtractorGDBRemote_h_ 11 #define utility_StringExtractorGDBRemote_h_ 12 13 // C Includes 14 // C++ Includes 15 #include <string> 16 // Other libraries and framework includes 17 // Project includes 18 #include "lldb/Utility/StringExtractor.h" 19 20 class StringExtractorGDBRemote : public StringExtractor 21 { 22 public: 23 StringExtractorGDBRemote()24 StringExtractorGDBRemote() : 25 StringExtractor () 26 { 27 } 28 StringExtractorGDBRemote(const char * cstr)29 StringExtractorGDBRemote(const char *cstr) : 30 StringExtractor (cstr) 31 { 32 } StringExtractorGDBRemote(const StringExtractorGDBRemote & rhs)33 StringExtractorGDBRemote(const StringExtractorGDBRemote& rhs) : 34 StringExtractor (rhs) 35 { 36 } 37 ~StringExtractorGDBRemote()38 virtual ~StringExtractorGDBRemote() 39 { 40 } 41 42 enum ServerPacketType 43 { 44 eServerPacketType_nack = 0, 45 eServerPacketType_ack, 46 eServerPacketType_invalid, 47 eServerPacketType_unimplemented, 48 eServerPacketType_interrupt, // CTRL+c packet or "\x03" 49 eServerPacketType_A, // Program arguments packet 50 eServerPacketType_qfProcessInfo, 51 eServerPacketType_qsProcessInfo, 52 eServerPacketType_qC, 53 eServerPacketType_qEcho, 54 eServerPacketType_qGroupName, 55 eServerPacketType_qHostInfo, 56 eServerPacketType_qLaunchGDBServer, 57 eServerPacketType_qKillSpawnedProcess, 58 eServerPacketType_qLaunchSuccess, 59 eServerPacketType_qModuleInfo, 60 eServerPacketType_qProcessInfoPID, 61 eServerPacketType_qSpeedTest, 62 eServerPacketType_qUserName, 63 eServerPacketType_qGetWorkingDir, 64 eServerPacketType_qFileLoadAddress, 65 eServerPacketType_QEnvironment, 66 eServerPacketType_QLaunchArch, 67 eServerPacketType_QSetDisableASLR, 68 eServerPacketType_QSetDetachOnError, 69 eServerPacketType_QSetSTDIN, 70 eServerPacketType_QSetSTDOUT, 71 eServerPacketType_QSetSTDERR, 72 eServerPacketType_QSetWorkingDir, 73 eServerPacketType_QStartNoAckMode, 74 eServerPacketType_qPlatform_shell, 75 eServerPacketType_qPlatform_mkdir, 76 eServerPacketType_qPlatform_chmod, 77 eServerPacketType_vFile_open, 78 eServerPacketType_vFile_close, 79 eServerPacketType_vFile_pread, 80 eServerPacketType_vFile_pwrite, 81 eServerPacketType_vFile_size, 82 eServerPacketType_vFile_mode, 83 eServerPacketType_vFile_exists, 84 eServerPacketType_vFile_md5, 85 eServerPacketType_vFile_stat, 86 eServerPacketType_vFile_symlink, 87 eServerPacketType_vFile_unlink, 88 // debug server packages 89 eServerPacketType_QEnvironmentHexEncoded, 90 eServerPacketType_QListThreadsInStopReply, 91 eServerPacketType_QRestoreRegisterState, 92 eServerPacketType_QSaveRegisterState, 93 eServerPacketType_QSetLogging, 94 eServerPacketType_QSetMaxPacketSize, 95 eServerPacketType_QSetMaxPayloadSize, 96 eServerPacketType_QSetEnableAsyncProfiling, 97 eServerPacketType_QSyncThreadState, 98 eServerPacketType_QThreadSuffixSupported, 99 100 eServerPacketType_qsThreadInfo, 101 eServerPacketType_qfThreadInfo, 102 eServerPacketType_qGetPid, 103 eServerPacketType_qGetProfileData, 104 eServerPacketType_qGDBServerVersion, 105 eServerPacketType_qMemoryRegionInfo, 106 eServerPacketType_qMemoryRegionInfoSupported, 107 eServerPacketType_qProcessInfo, 108 eServerPacketType_qRcmd, 109 eServerPacketType_qRegisterInfo, 110 eServerPacketType_qShlibInfoAddr, 111 eServerPacketType_qStepPacketSupported, 112 eServerPacketType_qSupported, 113 eServerPacketType_qSyncThreadStateSupported, 114 eServerPacketType_qThreadExtraInfo, 115 eServerPacketType_qThreadStopInfo, 116 eServerPacketType_qVAttachOrWaitSupported, 117 eServerPacketType_qWatchpointSupportInfo, 118 eServerPacketType_qWatchpointSupportInfoSupported, 119 eServerPacketType_qXfer_auxv_read, 120 121 eServerPacketType_jSignalsInfo, 122 123 eServerPacketType_vAttach, 124 eServerPacketType_vAttachWait, 125 eServerPacketType_vAttachOrWait, 126 eServerPacketType_vAttachName, 127 eServerPacketType_vCont, 128 eServerPacketType_vCont_actions, // vCont? 129 130 eServerPacketType_stop_reason, // '?' 131 132 eServerPacketType_c, 133 eServerPacketType_C, 134 eServerPacketType_D, 135 eServerPacketType_g, 136 eServerPacketType_G, 137 eServerPacketType_H, 138 eServerPacketType_I, // stdin notification 139 eServerPacketType_k, 140 eServerPacketType_m, 141 eServerPacketType_M, 142 eServerPacketType_p, 143 eServerPacketType_P, 144 eServerPacketType_s, 145 eServerPacketType_S, 146 eServerPacketType_T, 147 eServerPacketType_Z, 148 eServerPacketType_z, 149 150 eServerPacketType__M, 151 eServerPacketType__m, 152 eServerPacketType_notify, // '%' notification 153 }; 154 155 ServerPacketType 156 GetServerPacketType () const; 157 158 enum ResponseType 159 { 160 eUnsupported = 0, 161 eAck, 162 eNack, 163 eError, 164 eOK, 165 eResponse 166 }; 167 168 ResponseType 169 GetResponseType () const; 170 171 bool 172 IsOKResponse() const; 173 174 bool 175 IsUnsupportedResponse() const; 176 177 bool 178 IsNormalResponse () const; 179 180 bool 181 IsErrorResponse() const; 182 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. 185 uint8_t 186 GetError(); 187 188 size_t 189 GetEscapedBinaryData (std::string &str); 190 191 }; 192 193 #endif // utility_StringExtractorGDBRemote_h_ 194