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