Revert "Fix compilation error (#20801)"
[mono-project.git] / mono / mini / debugger-protocol.h
blobfbf42f54857626c70ff615b9344e1e94fcd814b8
1 #ifndef __MONO_DEBUGGER_PROTOCOL_H__
2 #define __MONO_DEBUGGER_PROTOCOL_H__
4 #include <stdint.h>
6 #define HEADER_LENGTH 11
7 #define REPLY_PACKET 0x80
9 /*
10 * Wire Protocol definitions
13 #define MAJOR_VERSION 3
14 #define MINOR_VERSION 0
16 typedef enum {
17 MDBGPROT_CMD_COMPOSITE = 100
18 } MdbgProtCmdComposite;
20 typedef enum {
21 MDBGPROT_CMD_VM_VERSION = 1,
22 MDBGPROT_CMD_VM_ALL_THREADS = 2,
23 MDBGPROT_CMD_VM_SUSPEND = 3,
24 MDBGPROT_CMD_VM_RESUME = 4,
25 MDBGPROT_CMD_VM_EXIT = 5,
26 MDBGPROT_CMD_VM_DISPOSE = 6,
27 MDBGPROT_CMD_VM_INVOKE_METHOD = 7,
28 MDBGPROT_CMD_VM_SET_PROTOCOL_VERSION = 8,
29 MDBGPROT_CMD_VM_ABORT_INVOKE = 9,
30 MDBGPROT_CMD_VM_SET_KEEPALIVE = 10,
31 MDBGPROT_CMD_VM_GET_TYPES_FOR_SOURCE_FILE = 11,
32 MDBGPROT_CMD_VM_GET_TYPES = 12,
33 MDBGPROT_CMD_VM_INVOKE_METHODS = 13,
34 MDBGPROT_CMD_VM_START_BUFFERING = 14,
35 MDBGPROT_CMD_VM_STOP_BUFFERING = 15
36 } MdbgProtCmdVM;
38 typedef enum {
39 MDBGPROT_CMD_SET_VM = 1,
40 MDBGPROT_CMD_SET_OBJECT_REF = 9,
41 MDBGPROT_CMD_SET_STRING_REF = 10,
42 MDBGPROT_CMD_SET_THREAD = 11,
43 MDBGPROT_CMD_SET_ARRAY_REF = 13,
44 MDBGPROT_CMD_SET_EVENT_REQUEST = 15,
45 MDBGPROT_CMD_SET_STACK_FRAME = 16,
46 MDBGPROT_CMD_SET_APPDOMAIN = 20,
47 MDBGPROT_CMD_SET_ASSEMBLY = 21,
48 MDBGPROT_CMD_SET_METHOD = 22,
49 MDBGPROT_CMD_SET_TYPE = 23,
50 MDBGPROT_CMD_SET_MODULE = 24,
51 MDBGPROT_CMD_SET_FIELD = 25,
52 MDBGPROT_CMD_SET_EVENT = 64,
53 MDBGPROT_CMD_SET_POINTER = 65
54 } MdbgProtCommandSet;
56 typedef enum {
57 MDBGPROT_ERR_NONE = 0,
58 MDBGPROT_ERR_INVALID_OBJECT = 20,
59 MDBGPROT_ERR_INVALID_FIELDID = 25,
60 MDBGPROT_ERR_INVALID_FRAMEID = 30,
61 MDBGPROT_ERR_NOT_IMPLEMENTED = 100,
62 MDBGPROT_ERR_NOT_SUSPENDED = 101,
63 MDBGPROT_ERR_INVALID_ARGUMENT = 102,
64 MDBGPROT_ERR_UNLOADED = 103,
65 MDBGPROT_ERR_NO_INVOCATION = 104,
66 MDBGPROT_ERR_ABSENT_INFORMATION = 105,
67 MDBGPROT_ERR_NO_SEQ_POINT_AT_IL_OFFSET = 106,
68 MDBGPROT_ERR_INVOKE_ABORTED = 107,
69 MDBGPROT_ERR_LOADER_ERROR = 200, /*XXX extend the protocol to pass this information down the pipe */
70 } MdbgProtErrorCode;
72 typedef enum {
73 MDBGPROT_TOKEN_TYPE_STRING = 0,
74 MDBGPROT_TOKEN_TYPE_TYPE = 1,
75 MDBGPROT_TOKEN_TYPE_FIELD = 2,
76 MDBGPROT_TOKEN_TYPE_METHOD = 3,
77 MDBGPROT_TOKEN_TYPE_UNKNOWN = 4
78 } MdbgProtDebuggerTokenType;
80 typedef enum {
81 MDBGPROT_VALUE_TYPE_ID_NULL = 0xf0,
82 MDBGPROT_VALUE_TYPE_ID_TYPE = 0xf1,
83 MDBGPROT_VALUE_TYPE_ID_PARENT_VTYPE = 0xf2,
84 MDBGPROT_VALUE_TYPE_ID_FIXED_ARRAY = 0xf3
85 } MdbgProtValueTypeId;
87 typedef enum {
88 MDBGPROT_FRAME_FLAG_DEBUGGER_INVOKE = 1,
89 MDBGPROT_FRAME_FLAG_NATIVE_TRANSITION = 2
90 } MdbgProtStackFrameFlags;
92 typedef enum {
93 MDBGPROT_INVOKE_FLAG_DISABLE_BREAKPOINTS = 1,
94 MDBGPROT_INVOKE_FLAG_SINGLE_THREADED = 2,
95 MDBGPROT_INVOKE_FLAG_RETURN_OUT_THIS = 4,
96 MDBGPROT_INVOKE_FLAG_RETURN_OUT_ARGS = 8,
97 MDBGPROT_INVOKE_FLAG_VIRTUAL = 16
98 } MdbgProtInvokeFlags;
100 typedef enum {
101 BINDING_FLAGS_IGNORE_CASE = 0x70000000,
102 } MdbgProtBindingFlagsExtensions;
104 typedef enum {
105 MDBGPROT_CMD_THREAD_GET_FRAME_INFO = 1,
106 MDBGPROT_CMD_THREAD_GET_NAME = 2,
107 MDBGPROT_CMD_THREAD_GET_STATE = 3,
108 MDBGPROT_CMD_THREAD_GET_INFO = 4,
109 MDBGPROT_CMD_THREAD_GET_ID = 5,
110 MDBGPROT_CMD_THREAD_GET_TID = 6,
111 MDBGPROT_CMD_THREAD_SET_IP = 7,
112 MDBGPROT_CMD_THREAD_ELAPSED_TIME = 8
113 } MdbgProtCmdThread;
115 typedef enum {
116 MDBGPROT_CMD_APPDOMAIN_GET_ROOT_DOMAIN = 1,
117 MDBGPROT_CMD_APPDOMAIN_GET_FRIENDLY_NAME = 2,
118 MDBGPROT_CMD_APPDOMAIN_GET_ASSEMBLIES = 3,
119 MDBGPROT_CMD_APPDOMAIN_GET_ENTRY_ASSEMBLY = 4,
120 MDBGPROT_CMD_APPDOMAIN_CREATE_STRING = 5,
121 MDBGPROT_CMD_APPDOMAIN_GET_CORLIB = 6,
122 MDBGPROT_CMD_APPDOMAIN_CREATE_BOXED_VALUE = 7,
123 MDBGPROT_CMD_APPDOMAIN_CREATE_BYTE_ARRAY = 8,
124 } MdbgProtCmdAppDomain;
126 typedef enum {
127 MDBGPROT_CMD_ASSEMBLY_GET_LOCATION = 1,
128 MDBGPROT_CMD_ASSEMBLY_GET_ENTRY_POINT = 2,
129 MDBGPROT_CMD_ASSEMBLY_GET_MANIFEST_MODULE = 3,
130 MDBGPROT_CMD_ASSEMBLY_GET_OBJECT = 4,
131 MDBGPROT_CMD_ASSEMBLY_GET_TYPE = 5,
132 MDBGPROT_CMD_ASSEMBLY_GET_NAME = 6,
133 MDBGPROT_CMD_ASSEMBLY_GET_DOMAIN = 7,
134 MDBGPROT_CMD_ASSEMBLY_GET_METADATA_BLOB = 8,
135 MDBGPROT_CMD_ASSEMBLY_GET_IS_DYNAMIC = 9,
136 MDBGPROT_CMD_ASSEMBLY_GET_PDB_BLOB = 10,
137 MDBGPROT_CMD_ASSEMBLY_GET_TYPE_FROM_TOKEN = 11,
138 MDBGPROT_CMD_ASSEMBLY_GET_METHOD_FROM_TOKEN = 12,
139 MDBGPROT_CMD_ASSEMBLY_HAS_DEBUG_INFO = 13,
140 MDBGPROT_CMD_ASSEMBLY_GET_CATTRS = 14,
141 MDBGPROT_CMD_ASSEMBLY_GET_CUSTOM_ATTRIBUTES = 15
142 } MdbgProtCmdAssembly;
144 typedef enum {
145 MDBGPROT_CMD_MODULE_GET_INFO = 1,
146 } MdbgProtCmdModule;
148 typedef enum {
149 MDBGPROT_CMD_FIELD_GET_INFO = 1,
150 } MdbgProtCmdField;
152 typedef enum {
153 MDBGPROT_CMD_PROPERTY_GET_INFO = 1,
154 } MdbgProtCmdProperty;
156 typedef enum {
157 MDBGPROT_CMD_METHOD_GET_NAME = 1,
158 MDBGPROT_CMD_METHOD_GET_DECLARING_TYPE = 2,
159 MDBGPROT_CMD_METHOD_GET_DEBUG_INFO = 3,
160 MDBGPROT_CMD_METHOD_GET_PARAM_INFO = 4,
161 MDBGPROT_CMD_METHOD_GET_LOCALS_INFO = 5,
162 MDBGPROT_CMD_METHOD_GET_INFO = 6,
163 MDBGPROT_CMD_METHOD_GET_BODY = 7,
164 MDBGPROT_CMD_METHOD_RESOLVE_TOKEN = 8,
165 MDBGPROT_CMD_METHOD_GET_CATTRS = 9,
166 MDBGPROT_CMD_METHOD_MAKE_GENERIC_METHOD = 10,
167 MDBGPROT_CMD_METHOD_TOKEN = 11,
168 MDBGPROT_CMD_METHOD_ASSEMBLY = 12
169 } MdbgProtCmdMethod;
171 typedef enum {
172 MDBGPROT_CMD_TYPE_GET_INFO = 1,
173 MDBGPROT_CMD_TYPE_GET_METHODS = 2,
174 MDBGPROT_CMD_TYPE_GET_FIELDS = 3,
175 MDBGPROT_CMD_TYPE_GET_VALUES = 4,
176 MDBGPROT_CMD_TYPE_GET_OBJECT = 5,
177 MDBGPROT_CMD_TYPE_GET_SOURCE_FILES = 6,
178 MDBGPROT_CMD_TYPE_SET_VALUES = 7,
179 MDBGPROT_CMD_TYPE_IS_ASSIGNABLE_FROM = 8,
180 MDBGPROT_CMD_TYPE_GET_PROPERTIES = 9,
181 MDBGPROT_CMD_TYPE_GET_CATTRS = 10,
182 MDBGPROT_CMD_TYPE_GET_FIELD_CATTRS = 11,
183 MDBGPROT_CMD_TYPE_GET_PROPERTY_CATTRS = 12,
184 MDBGPROT_CMD_TYPE_GET_SOURCE_FILES_2 = 13,
185 MDBGPROT_CMD_TYPE_GET_VALUES_2 = 14,
186 MDBGPROT_CMD_TYPE_GET_METHODS_BY_NAME_FLAGS = 15,
187 MDBGPROT_CMD_TYPE_GET_INTERFACES = 16,
188 MDBGPROT_CMD_TYPE_GET_INTERFACE_MAP = 17,
189 MDBGPROT_CMD_TYPE_IS_INITIALIZED = 18,
190 MDBGPROT_CMD_TYPE_CREATE_INSTANCE = 19,
191 MDBGPROT_CMD_TYPE_GET_VALUE_SIZE = 20
192 } MdbgProtCmdType;
194 typedef enum {
195 MDBGPROT_CMD_STACK_FRAME_GET_VALUES = 1,
196 MDBGPROT_CMD_STACK_FRAME_GET_THIS = 2,
197 MDBGPROT_CMD_STACK_FRAME_SET_VALUES = 3,
198 MDBGPROT_CMD_STACK_FRAME_GET_DOMAIN = 4,
199 MDBGPROT_CMD_STACK_FRAME_SET_THIS = 5,
200 MDBGPROT_CMD_STACK_FRAME_GET_ARGUMENT = 6,
201 } MdbgProtCmdStackFrame;
203 typedef enum {
204 MDBGPROT_CMD_ARRAY_REF_GET_LENGTH = 1,
205 MDBGPROT_CMD_ARRAY_REF_GET_VALUES = 2,
206 MDBGPROT_CMD_ARRAY_REF_SET_VALUES = 3,
207 MDBGPROT_CMD_ARRAY_REF_GET_TYPE = 4
208 } MdbgProtCmdArray;
210 typedef enum {
211 MDBGPROT_CMD_STRING_REF_GET_VALUE = 1,
212 MDBGPROT_CMD_STRING_REF_GET_LENGTH = 2,
213 MDBGPROT_CMD_STRING_REF_GET_CHARS = 3
214 } MdbgProtCmdString;
216 typedef enum {
217 MDBGPROT_CMD_POINTER_GET_VALUE = 1
218 } MdbgProtCmdPointer;
220 typedef enum {
221 MDBGPROT_CMD_OBJECT_REF_GET_TYPE = 1,
222 MDBGPROT_CMD_OBJECT_REF_GET_VALUES = 2,
223 MDBGPROT_CMD_OBJECT_REF_IS_COLLECTED = 3,
224 MDBGPROT_CMD_OBJECT_REF_GET_ADDRESS = 4,
225 MDBGPROT_CMD_OBJECT_REF_GET_DOMAIN = 5,
226 MDBGPROT_CMD_OBJECT_REF_SET_VALUES = 6,
227 MDBGPROT_CMD_OBJECT_REF_GET_INFO = 7,
228 MDBGPROT_CMD_OBJECT_REF_GET_VALUES_ICORDBG = 8
229 } MdbgProtCmdObject;
231 typedef enum {
232 MDBGPROT_SUSPEND_POLICY_NONE = 0,
233 MDBGPROT_SUSPEND_POLICY_EVENT_THREAD = 1,
234 MDBGPROT_SUSPEND_POLICY_ALL = 2
235 } MdbgProtSuspendPolicy;
237 typedef enum {
238 MDBGPROT_CMD_EVENT_REQUEST_SET = 1,
239 MDBGPROT_CMD_EVENT_REQUEST_CLEAR = 2,
240 MDBGPROT_CMD_EVENT_REQUEST_CLEAR_ALL_BREAKPOINTS = 3
241 } MdbgProtCmdEvent;
243 typedef struct {
244 uint8_t *buf, *p, *end;
245 } MdbgProtBuffer;
247 typedef struct {
248 int len;
249 int id;
250 int flags;
251 int command_set;
252 int command;
253 int error;
254 int error_2;
255 } MdbgProtHeader;
257 typedef struct ReplyPacket {
258 int id;
259 int error;
260 MdbgProtBuffer *data;
261 } MdbgProtReplyPacket;
263 typedef enum {
264 MDBGPROT_EVENT_KIND_VM_START = 0,
265 MDBGPROT_EVENT_KIND_VM_DEATH = 1,
266 MDBGPROT_EVENT_KIND_THREAD_START = 2,
267 MDBGPROT_EVENT_KIND_THREAD_DEATH = 3,
268 MDBGPROT_EVENT_KIND_APPDOMAIN_CREATE = 4,
269 MDBGPROT_EVENT_KIND_APPDOMAIN_UNLOAD = 5,
270 MDBGPROT_EVENT_KIND_METHOD_ENTRY = 6,
271 MDBGPROT_EVENT_KIND_METHOD_EXIT = 7,
272 MDBGPROT_EVENT_KIND_ASSEMBLY_LOAD = 8,
273 MDBGPROT_EVENT_KIND_ASSEMBLY_UNLOAD = 9,
274 MDBGPROT_EVENT_KIND_BREAKPOINT = 10,
275 MDBGPROT_EVENT_KIND_STEP = 11,
276 MDBGPROT_EVENT_KIND_TYPE_LOAD = 12,
277 MDBGPROT_EVENT_KIND_EXCEPTION = 13,
278 MDBGPROT_EVENT_KIND_KEEPALIVE = 14,
279 MDBGPROT_EVENT_KIND_USER_BREAK = 15,
280 MDBGPROT_EVENT_KIND_USER_LOG = 16,
281 MDBGPROT_EVENT_KIND_CRASH = 17
282 } MdbgProtEventKind;
284 typedef enum {
285 MDBGPROT_MOD_KIND_COUNT = 1,
286 MDBGPROT_MOD_KIND_THREAD_ONLY = 3,
287 MDBGPROT_MOD_KIND_LOCATION_ONLY = 7,
288 MDBGPROT_MOD_KIND_EXCEPTION_ONLY = 8,
289 MDBGPROT_MOD_KIND_STEP = 10,
290 MDBGPROT_MOD_KIND_ASSEMBLY_ONLY = 11,
291 MDBGPROT_MOD_KIND_SOURCE_FILE_ONLY = 12,
292 MDBGPROT_MOD_KIND_TYPE_NAME_ONLY = 13,
293 MDBGPROT_MOD_KIND_NONE = 14
294 } MdbgProtModifierKind;
296 typedef enum {
297 MDBGPROT_STEP_DEPTH_INTO = 0,
298 MDBGPROT_STEP_DEPTH_OVER = 1,
299 MDBGPROT_STEP_DEPTH_OUT = 2
300 } MdbgProtStepDepth;
302 typedef enum {
303 MDBGPROT_STEP_SIZE_MIN = 0,
304 MDBGPROT_STEP_SIZE_LINE = 1
305 } MdbgProtStepSize;
307 typedef enum {
308 MDBGPROT_STEP_FILTER_NONE = 0,
309 MDBGPROT_STEP_FILTER_STATIC_CTOR = 1,
310 MDBGPROT_STEP_FILTER_DEBUGGER_HIDDEN = 2,
311 MDBGPROT_STEP_FILTER_DEBUGGER_STEP_THROUGH = 4,
312 MDBGPROT_STEP_FILTER_DEBUGGER_NON_USER_CODE = 8
313 } MdbgProtStepFilter;
316 * IDS
319 typedef enum {
320 ID_ASSEMBLY = 0,
321 ID_MODULE = 1,
322 ID_TYPE = 2,
323 ID_METHOD = 3,
324 ID_FIELD = 4,
325 ID_DOMAIN = 5,
326 ID_PROPERTY = 6,
327 ID_PARAMETER = 7,
328 ID_NUM
329 } IdType;
331 int m_dbgprot_buffer_add_command_header (MdbgProtBuffer *recvbuf, int cmd_set, int cmd, MdbgProtBuffer *out);
332 void m_dbgprot_decode_command_header (MdbgProtBuffer *recvbuf, MdbgProtHeader *header);
335 * Functions to decode protocol data
338 int m_dbgprot_decode_byte (uint8_t *buf, uint8_t **endbuf, uint8_t *limit);
339 int m_dbgprot_decode_int (uint8_t *buf, uint8_t **endbuf, uint8_t *limit);
340 int64_t m_dbgprot_decode_long (uint8_t *buf, uint8_t **endbuf, uint8_t *limit);
341 int m_dbgprot_decode_id (uint8_t *buf, uint8_t **endbuf, uint8_t *limit);
342 char* m_dbgprot_decode_string (uint8_t *buf, uint8_t **endbuf, uint8_t *limit);
343 uint8_t* m_dbgprot_decode_byte_array(uint8_t* buf, uint8_t** endbuf, uint8_t* limit, uint32_t* len);
346 * Functions to encode protocol data
349 void m_dbgprot_buffer_init (MdbgProtBuffer *buf, int size);
350 int m_dbgprot_buffer_len (MdbgProtBuffer *buf);
351 void m_dbgprot_buffer_make_room (MdbgProtBuffer *buf, int size);
352 void m_dbgprot_buffer_add_byte (MdbgProtBuffer *buf, uint8_t val);
353 void m_dbgprot_buffer_add_short (MdbgProtBuffer *buf, uint32_t val);
354 void m_dbgprot_buffer_add_int (MdbgProtBuffer *buf, uint32_t val);
355 void m_dbgprot_buffer_add_long (MdbgProtBuffer *buf, uint64_t l);
356 void m_dbgprot_buffer_add_id (MdbgProtBuffer *buf, int id);
357 void m_dbgprot_buffer_add_data (MdbgProtBuffer *buf, uint8_t *data, int len);
358 void m_dbgprot_buffer_add_utf16 (MdbgProtBuffer *buf, uint8_t *data, int len);
359 void m_dbgprot_buffer_add_string (MdbgProtBuffer *buf, const char *str);
360 void m_dbgprot_buffer_add_byte_array (MdbgProtBuffer *buf, uint8_t *bytes, uint32_t arr_len);
361 void m_dbgprot_buffer_add_buffer (MdbgProtBuffer *buf, MdbgProtBuffer *data);
362 void m_dbgprot_buffer_free (MdbgProtBuffer *buf);
364 const char* m_dbgprot_event_to_string (MdbgProtEventKind event);
366 #endif