xref: /NextBSD/contrib/llvm/tools/lldb/source/Utility/StringExtractorGDBRemote.h (revision 84d351007654069f9643c8e4b4802a7f5f08ee42)
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