]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/Utility/StringExtractorGDBRemote.h
Merge bmake-20150505 improve detection of malformed conditionals.
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / source / Utility / StringExtractorGDBRemote.h
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
20 class StringExtractorGDBRemote : public StringExtractor
21 {
22 public:
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_QSetDetachOnError,
66         eServerPacketType_QSetSTDIN,
67         eServerPacketType_QSetSTDOUT,
68         eServerPacketType_QSetSTDERR,
69         eServerPacketType_QSetWorkingDir,
70         eServerPacketType_QStartNoAckMode,
71         eServerPacketType_qPlatform_shell,
72         eServerPacketType_qPlatform_mkdir,
73         eServerPacketType_qPlatform_chmod,
74         eServerPacketType_vFile_open,
75         eServerPacketType_vFile_close,
76         eServerPacketType_vFile_pread,
77         eServerPacketType_vFile_pwrite,
78         eServerPacketType_vFile_size,
79         eServerPacketType_vFile_mode,
80         eServerPacketType_vFile_exists,
81         eServerPacketType_vFile_md5,
82         eServerPacketType_vFile_stat,
83         eServerPacketType_vFile_symlink,
84         eServerPacketType_vFile_unlink,
85       // debug server packages
86         eServerPacketType_QEnvironmentHexEncoded,
87         eServerPacketType_QListThreadsInStopReply,
88         eServerPacketType_QRestoreRegisterState,
89         eServerPacketType_QSaveRegisterState,
90         eServerPacketType_QSetLogging,
91         eServerPacketType_QSetMaxPacketSize,
92         eServerPacketType_QSetMaxPayloadSize,
93         eServerPacketType_QSetEnableAsyncProfiling,
94         eServerPacketType_QSyncThreadState,
95         eServerPacketType_QThreadSuffixSupported,
96
97         eServerPacketType_qsThreadInfo,
98         eServerPacketType_qfThreadInfo,
99         eServerPacketType_qGetPid,
100         eServerPacketType_qGetProfileData,
101         eServerPacketType_qGDBServerVersion,
102         eServerPacketType_qMemoryRegionInfo,
103         eServerPacketType_qMemoryRegionInfoSupported,
104         eServerPacketType_qProcessInfo,
105         eServerPacketType_qRcmd,
106         eServerPacketType_qRegisterInfo,
107         eServerPacketType_qShlibInfoAddr,
108         eServerPacketType_qStepPacketSupported,
109         eServerPacketType_qSupported,
110         eServerPacketType_qSyncThreadStateSupported,
111         eServerPacketType_qThreadExtraInfo,
112         eServerPacketType_qThreadStopInfo,
113         eServerPacketType_qVAttachOrWaitSupported,
114         eServerPacketType_qWatchpointSupportInfo,
115         eServerPacketType_qWatchpointSupportInfoSupported,
116         eServerPacketType_qXfer_auxv_read,
117
118         eServerPacketType_vAttach,
119         eServerPacketType_vAttachWait,
120         eServerPacketType_vAttachOrWait,
121         eServerPacketType_vAttachName,
122         eServerPacketType_vCont,
123         eServerPacketType_vCont_actions, // vCont?
124
125         eServerPacketType_stop_reason, // '?'
126
127         eServerPacketType_c,
128         eServerPacketType_C,
129         eServerPacketType_D,
130         eServerPacketType_g,
131         eServerPacketType_G,
132         eServerPacketType_H,
133         eServerPacketType_k,
134         eServerPacketType_m,
135         eServerPacketType_M,
136         eServerPacketType_p,
137         eServerPacketType_P,
138         eServerPacketType_s,
139         eServerPacketType_S,
140         eServerPacketType_T,
141         eServerPacketType_Z,
142         eServerPacketType_z,
143
144         eServerPacketType__M,
145         eServerPacketType__m,
146     };
147     
148     ServerPacketType
149     GetServerPacketType () const;
150
151     enum ResponseType
152     {
153         eUnsupported = 0,
154         eAck,
155         eNack,
156         eError,
157         eOK,
158         eResponse
159     };
160
161     ResponseType
162     GetResponseType () const;
163
164     bool
165     IsOKResponse() const;
166
167     bool
168     IsUnsupportedResponse() const;
169
170     bool
171     IsNormalResponse () const;
172
173     bool
174     IsErrorResponse() const;
175
176     // Returns zero if the packet isn't a EXX packet where XX are two hex
177     // digits. Otherwise the error encoded in XX is returned.
178     uint8_t
179     GetError();
180     
181     size_t
182     GetEscapedBinaryData (std::string &str);
183
184 };
185
186 #endif  // utility_StringExtractorGDBRemote_h_