StringExtractorGDBRemote.h revision 269024
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 "Utility/StringExtractor.h" 19 20class StringExtractorGDBRemote : public StringExtractor 21{ 22public: 23 24 StringExtractorGDBRemote() : 25 StringExtractor () 26 { 27 } 28 29 StringExtractorGDBRemote(const char *cstr) : 30 StringExtractor (cstr) 31 { 32 } 33 StringExtractorGDBRemote(const StringExtractorGDBRemote& rhs) : 34 StringExtractor (rhs) 35 { 36 } 37 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_qGroupName, 54 eServerPacketType_qHostInfo, 55 eServerPacketType_qLaunchGDBServer, 56 eServerPacketType_qKillSpawnedProcess, 57 eServerPacketType_qLaunchSuccess, 58 eServerPacketType_qProcessInfoPID, 59 eServerPacketType_qSpeedTest, 60 eServerPacketType_qUserName, 61 eServerPacketType_qGetWorkingDir, 62 eServerPacketType_QEnvironment, 63 eServerPacketType_QLaunchArch, 64 eServerPacketType_QSetDisableASLR, 65 eServerPacketType_QSetSTDIN, 66 eServerPacketType_QSetSTDOUT, 67 eServerPacketType_QSetSTDERR, 68 eServerPacketType_QSetWorkingDir, 69 eServerPacketType_QStartNoAckMode, 70 eServerPacketType_qPlatform_shell, 71 eServerPacketType_qPlatform_mkdir, 72 eServerPacketType_qPlatform_chmod, 73 eServerPacketType_vFile_open, 74 eServerPacketType_vFile_close, 75 eServerPacketType_vFile_pread, 76 eServerPacketType_vFile_pwrite, 77 eServerPacketType_vFile_size, 78 eServerPacketType_vFile_mode, 79 eServerPacketType_vFile_exists, 80 eServerPacketType_vFile_md5, 81 eServerPacketType_vFile_stat, 82 eServerPacketType_vFile_symlink, 83 eServerPacketType_vFile_unlink, 84 // debug server packages 85 eServerPacketType_QEnvironmentHexEncoded, 86 eServerPacketType_QListThreadsInStopReply, 87 eServerPacketType_QRestoreRegisterState, 88 eServerPacketType_QSaveRegisterState, 89 eServerPacketType_QSetLogging, 90 eServerPacketType_QSetMaxPacketSize, 91 eServerPacketType_QSetMaxPayloadSize, 92 eServerPacketType_QSetEnableAsyncProfiling, 93 eServerPacketType_QSyncThreadState, 94 eServerPacketType_QThreadSuffixSupported, 95 96 eServerPacketType_qsThreadInfo, 97 eServerPacketType_qfThreadInfo, 98 eServerPacketType_qGetPid, 99 eServerPacketType_qGetProfileData, 100 eServerPacketType_qGDBServerVersion, 101 eServerPacketType_qMemoryRegionInfo, 102 eServerPacketType_qMemoryRegionInfoSupported, 103 eServerPacketType_qProcessInfo, 104 eServerPacketType_qRcmd, 105 eServerPacketType_qRegisterInfo, 106 eServerPacketType_qShlibInfoAddr, 107 eServerPacketType_qStepPacketSupported, 108 eServerPacketType_qSyncThreadStateSupported, 109 eServerPacketType_qThreadExtraInfo, 110 eServerPacketType_qThreadStopInfo, 111 eServerPacketType_qVAttachOrWaitSupported, 112 eServerPacketType_qWatchpointSupportInfo, 113 eServerPacketType_qWatchpointSupportInfoSupported, 114 115 eServerPacketType_vAttach, 116 eServerPacketType_vAttachWait, 117 eServerPacketType_vAttachOrWait, 118 eServerPacketType_vAttachName, 119 eServerPacketType_vCont, 120 eServerPacketType_vCont_actions, // vCont? 121 122 eServerPacketType_stop_reason, // '?' 123 124 eServerPacketType_c, 125 eServerPacketType_C, 126 eServerPacketType_D, 127 eServerPacketType_g, 128 eServerPacketType_G, 129 eServerPacketType_H, 130 eServerPacketType_k, 131 eServerPacketType_m, 132 eServerPacketType_M, 133 eServerPacketType_p, 134 eServerPacketType_P, 135 eServerPacketType_s, 136 eServerPacketType_S, 137 eServerPacketType_T, 138 eServerPacketType_Z, 139 eServerPacketType_z, 140 141 eServerPacketType__M, 142 eServerPacketType__m, 143 }; 144 145 ServerPacketType 146 GetServerPacketType () const; 147 148 enum ResponseType 149 { 150 eUnsupported = 0, 151 eAck, 152 eNack, 153 eError, 154 eOK, 155 eResponse 156 }; 157 158 ResponseType 159 GetResponseType () const; 160 161 bool 162 IsOKResponse() const; 163 164 bool 165 IsUnsupportedResponse() const; 166 167 bool 168 IsNormalResponse () const; 169 170 bool 171 IsErrorResponse() const; 172 173 // Returns zero if the packet isn't a EXX packet where XX are two hex 174 // digits. Otherwise the error encoded in XX is returned. 175 uint8_t 176 GetError(); 177 178 size_t 179 GetEscapedBinaryData (std::string &str); 180 181}; 182 183#endif // utility_StringExtractorGDBRemote_h_ 184