From 9a7219d3be5c595623c7b0e69b9c12312b9c4c1d Mon Sep 17 00:00:00 2001 From: Thays Date: Thu, 4 Feb 2021 17:19:14 -0300 Subject: [PATCH] Revert "[mono][debugger] First PR to implement iCorDebug on mono (#20757)" This reverts commit 8e82ce21b607f57f2f4889c81edd9c9813530a3f. --- .../Mono.Debugger.Soft/VirtualMachine.cs | 2 +- mono/mini/Makefile.am.in | 2 +- mono/mini/debugger-agent.c | 773 +++++++++++++++------ mono/mini/debugger-engine.c | 2 +- mono/mini/debugger-engine.h | 311 ++------- mono/mini/debugger-protocol.c | 273 -------- mono/mini/debugger-protocol.h | 367 ---------- msvc/libmini-common.targets | 2 - msvc/libmini-common.targets.filters | 6 - 9 files changed, 630 insertions(+), 1108 deletions(-) delete mode 100644 mono/mini/debugger-protocol.c delete mode 100644 mono/mini/debugger-protocol.h diff --git a/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/VirtualMachine.cs b/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/VirtualMachine.cs index 51e09a8adb3..b77f5f46b22 100644 --- a/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/VirtualMachine.cs +++ b/mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/VirtualMachine.cs @@ -382,7 +382,7 @@ namespace Mono.Debugger.Soft // Test the connection version = conn.Version; - if (version.MajorVersion < Connection.MAJOR_VERSION) + if (version.MajorVersion != Connection.MAJOR_VERSION) throw new NotSupportedException (String.Format ("The debuggee implements protocol version {0}.{1}, while {2}.{3} is required.", version.MajorVersion, version.MinorVersion, Connection.MAJOR_VERSION, Connection.MINOR_VERSION)); long root_domain_id = conn.RootDomain; diff --git a/mono/mini/Makefile.am.in b/mono/mini/Makefile.am.in index 90cbfa8877b..1c3503403d8 100755 --- a/mono/mini/Makefile.am.in +++ b/mono/mini/Makefile.am.in @@ -729,7 +729,7 @@ if !WASM extra_libmono_dbg_source = debugger-engine.c endif -libmono_dbg_la_SOURCES = debugger-agent.c debugger-protocol.c debugger-state-machine.c $(extra_libmono_dbg_source) +libmono_dbg_la_SOURCES = debugger-agent.c debugger-state-machine.c $(extra_libmono_dbg_source) libmono_dbg_la_CFLAGS = $(AM_CFLAGS) @CXX_ADD_CFLAGS@ if BITCODE if DISABLE_DEBUGGER_AGENT diff --git a/mono/mini/debugger-agent.c b/mono/mini/debugger-agent.c index c68454d8133..09cac6ac5e7 100644 --- a/mono/mini/debugger-agent.c +++ b/mono/mini/debugger-agent.c @@ -40,7 +40,6 @@ #endif #ifdef HOST_WIN32 -#define sleep(t) Sleep((t) * 1000) #ifdef _MSC_VER #include #include @@ -49,7 +48,6 @@ #include #endif - #ifdef HOST_ANDROID #include #include @@ -264,11 +262,231 @@ typedef struct { int (*recv) (void *buf, int len); } DebuggerTransport; -/* Buffered reply packets */ -static ReplyPacket reply_packets [128]; -static int nreply_packets; +/* + * Wire Protocol definitions + */ -static int packet_id = 0; +#define HEADER_LENGTH 11 + +#define MAJOR_VERSION 2 +#define MINOR_VERSION 58 + +typedef enum { + CMD_SET_VM = 1, + CMD_SET_OBJECT_REF = 9, + CMD_SET_STRING_REF = 10, + CMD_SET_THREAD = 11, + CMD_SET_ARRAY_REF = 13, + CMD_SET_EVENT_REQUEST = 15, + CMD_SET_STACK_FRAME = 16, + CMD_SET_APPDOMAIN = 20, + CMD_SET_ASSEMBLY = 21, + CMD_SET_METHOD = 22, + CMD_SET_TYPE = 23, + CMD_SET_MODULE = 24, + CMD_SET_FIELD = 25, + CMD_SET_EVENT = 64, + CMD_SET_POINTER = 65 +} CommandSet; + +typedef enum { + SUSPEND_POLICY_NONE = 0, + SUSPEND_POLICY_EVENT_THREAD = 1, + SUSPEND_POLICY_ALL = 2 +} SuspendPolicy; + +typedef enum { + ERR_NONE = 0, + ERR_INVALID_OBJECT = 20, + ERR_INVALID_FIELDID = 25, + ERR_INVALID_FRAMEID = 30, + ERR_NOT_IMPLEMENTED = 100, + ERR_NOT_SUSPENDED = 101, + ERR_INVALID_ARGUMENT = 102, + ERR_UNLOADED = 103, + ERR_NO_INVOCATION = 104, + ERR_ABSENT_INFORMATION = 105, + ERR_NO_SEQ_POINT_AT_IL_OFFSET = 106, + ERR_INVOKE_ABORTED = 107, + ERR_LOADER_ERROR = 200, /*XXX extend the protocol to pass this information down the pipe */ +} ErrorCode; + +typedef enum { + TOKEN_TYPE_STRING = 0, + TOKEN_TYPE_TYPE = 1, + TOKEN_TYPE_FIELD = 2, + TOKEN_TYPE_METHOD = 3, + TOKEN_TYPE_UNKNOWN = 4 +} DebuggerTokenType; + +typedef enum { + VALUE_TYPE_ID_NULL = 0xf0, + VALUE_TYPE_ID_TYPE = 0xf1, + VALUE_TYPE_ID_PARENT_VTYPE = 0xf2, + VALUE_TYPE_ID_FIXED_ARRAY = 0xf3 +} ValueTypeId; + +typedef enum { + FRAME_FLAG_DEBUGGER_INVOKE = 1, + FRAME_FLAG_NATIVE_TRANSITION = 2 +} StackFrameFlags; + +typedef enum { + INVOKE_FLAG_DISABLE_BREAKPOINTS = 1, + INVOKE_FLAG_SINGLE_THREADED = 2, + INVOKE_FLAG_RETURN_OUT_THIS = 4, + INVOKE_FLAG_RETURN_OUT_ARGS = 8, + INVOKE_FLAG_VIRTUAL = 16 +} InvokeFlags; + +typedef enum { + BINDING_FLAGS_IGNORE_CASE = 0x70000000, +} BindingFlagsExtensions; + +typedef enum { + CMD_VM_VERSION = 1, + CMD_VM_ALL_THREADS = 2, + CMD_VM_SUSPEND = 3, + CMD_VM_RESUME = 4, + CMD_VM_EXIT = 5, + CMD_VM_DISPOSE = 6, + CMD_VM_INVOKE_METHOD = 7, + CMD_VM_SET_PROTOCOL_VERSION = 8, + CMD_VM_ABORT_INVOKE = 9, + CMD_VM_SET_KEEPALIVE = 10, + CMD_VM_GET_TYPES_FOR_SOURCE_FILE = 11, + CMD_VM_GET_TYPES = 12, + CMD_VM_INVOKE_METHODS = 13, + CMD_VM_START_BUFFERING = 14, + CMD_VM_STOP_BUFFERING = 15 +} CmdVM; + +typedef enum { + CMD_THREAD_GET_FRAME_INFO = 1, + CMD_THREAD_GET_NAME = 2, + CMD_THREAD_GET_STATE = 3, + CMD_THREAD_GET_INFO = 4, + CMD_THREAD_GET_ID = 5, + CMD_THREAD_GET_TID = 6, + CMD_THREAD_SET_IP = 7, + CMD_THREAD_ELAPSED_TIME = 8 +} CmdThread; + +typedef enum { + CMD_EVENT_REQUEST_SET = 1, + CMD_EVENT_REQUEST_CLEAR = 2, + CMD_EVENT_REQUEST_CLEAR_ALL_BREAKPOINTS = 3 +} CmdEvent; + +typedef enum { + CMD_COMPOSITE = 100 +} CmdComposite; + +typedef enum { + CMD_APPDOMAIN_GET_ROOT_DOMAIN = 1, + CMD_APPDOMAIN_GET_FRIENDLY_NAME = 2, + CMD_APPDOMAIN_GET_ASSEMBLIES = 3, + CMD_APPDOMAIN_GET_ENTRY_ASSEMBLY = 4, + CMD_APPDOMAIN_CREATE_STRING = 5, + CMD_APPDOMAIN_GET_CORLIB = 6, + CMD_APPDOMAIN_CREATE_BOXED_VALUE = 7, + CMD_APPDOMAIN_CREATE_BYTE_ARRAY = 8, +} CmdAppDomain; + +typedef enum { + CMD_ASSEMBLY_GET_LOCATION = 1, + CMD_ASSEMBLY_GET_ENTRY_POINT = 2, + CMD_ASSEMBLY_GET_MANIFEST_MODULE = 3, + CMD_ASSEMBLY_GET_OBJECT = 4, + CMD_ASSEMBLY_GET_TYPE = 5, + CMD_ASSEMBLY_GET_NAME = 6, + CMD_ASSEMBLY_GET_DOMAIN = 7, + CMD_ASSEMBLY_GET_METADATA_BLOB = 8, + CMD_ASSEMBLY_GET_IS_DYNAMIC = 9, + CMD_ASSEMBLY_GET_PDB_BLOB = 10, + CMD_ASSEMBLY_GET_TYPE_FROM_TOKEN = 11, + CMD_ASSEMBLY_GET_METHOD_FROM_TOKEN = 12, + CMD_ASSEMBLY_HAS_DEBUG_INFO = 13, + CMD_ASSEMBLY_GET_CATTRS = 14, +} CmdAssembly; + +typedef enum { + CMD_MODULE_GET_INFO = 1, +} CmdModule; + +typedef enum { + CMD_FIELD_GET_INFO = 1, +} CmdField; + +typedef enum { + CMD_METHOD_GET_NAME = 1, + CMD_METHOD_GET_DECLARING_TYPE = 2, + CMD_METHOD_GET_DEBUG_INFO = 3, + CMD_METHOD_GET_PARAM_INFO = 4, + CMD_METHOD_GET_LOCALS_INFO = 5, + CMD_METHOD_GET_INFO = 6, + CMD_METHOD_GET_BODY = 7, + CMD_METHOD_RESOLVE_TOKEN = 8, + CMD_METHOD_GET_CATTRS = 9, + CMD_METHOD_MAKE_GENERIC_METHOD = 10 +} CmdMethod; + +typedef enum { + CMD_TYPE_GET_INFO = 1, + CMD_TYPE_GET_METHODS = 2, + CMD_TYPE_GET_FIELDS = 3, + CMD_TYPE_GET_VALUES = 4, + CMD_TYPE_GET_OBJECT = 5, + CMD_TYPE_GET_SOURCE_FILES = 6, + CMD_TYPE_SET_VALUES = 7, + CMD_TYPE_IS_ASSIGNABLE_FROM = 8, + CMD_TYPE_GET_PROPERTIES = 9, + CMD_TYPE_GET_CATTRS = 10, + CMD_TYPE_GET_FIELD_CATTRS = 11, + CMD_TYPE_GET_PROPERTY_CATTRS = 12, + CMD_TYPE_GET_SOURCE_FILES_2 = 13, + CMD_TYPE_GET_VALUES_2 = 14, + CMD_TYPE_GET_METHODS_BY_NAME_FLAGS = 15, + CMD_TYPE_GET_INTERFACES = 16, + CMD_TYPE_GET_INTERFACE_MAP = 17, + CMD_TYPE_IS_INITIALIZED = 18, + CMD_TYPE_CREATE_INSTANCE = 19, + CMD_TYPE_GET_VALUE_SIZE = 20 +} CmdType; + +typedef enum { + CMD_STACK_FRAME_GET_VALUES = 1, + CMD_STACK_FRAME_GET_THIS = 2, + CMD_STACK_FRAME_SET_VALUES = 3, + CMD_STACK_FRAME_GET_DOMAIN = 4, + CMD_STACK_FRAME_SET_THIS = 5, +} CmdStackFrame; + +typedef enum { + CMD_ARRAY_REF_GET_LENGTH = 1, + CMD_ARRAY_REF_GET_VALUES = 2, + CMD_ARRAY_REF_SET_VALUES = 3, +} CmdArray; + +typedef enum { + CMD_STRING_REF_GET_VALUE = 1, + CMD_STRING_REF_GET_LENGTH = 2, + CMD_STRING_REF_GET_CHARS = 3 +} CmdString; + +typedef enum { + CMD_POINTER_GET_VALUE = 1 +} CmdPointer; + +typedef enum { + CMD_OBJECT_REF_GET_TYPE = 1, + CMD_OBJECT_REF_GET_VALUES = 2, + CMD_OBJECT_REF_IS_COLLECTED = 3, + CMD_OBJECT_REF_GET_ADDRESS = 4, + CMD_OBJECT_REF_GET_DOMAIN = 5, + CMD_OBJECT_REF_SET_VALUES = 6, + CMD_OBJECT_REF_GET_INFO = 7, +} CmdObject; /* * Contains additional information for an event @@ -288,6 +506,16 @@ typedef struct { MonoStackHash *hashes; } EventInfo; +typedef struct { + guint8 *buf, *p, *end; +} Buffer; + +typedef struct ReplyPacket { + int id; + int error; + Buffer *data; +} ReplyPacket; + #ifdef HOST_WIN32 #define get_last_sock_error() WSAGetLastError() #define MONO_EWOULDBLOCK WSAEWOULDBLOCK @@ -321,6 +549,8 @@ static int conn_fd; static int listen_fd; #endif +static int packet_id = 0; + static int objref_id = 0; static int event_request_id = 0; @@ -384,6 +614,10 @@ static gint32 suspend_count; /* Whenever to buffer reply messages and send them together */ static gboolean buffer_replies; +/* Buffered reply packets */ +static ReplyPacket reply_packets [128]; +static int nreply_packets; + #define dbg_lock mono_de_lock #define dbg_unlock mono_de_unlock @@ -1000,7 +1234,7 @@ socket_transport_connect (const char *address) MONO_HINT_UNSPECIFIED }; - mono_networking_init (); + mono_network_init (); for (int i = 0; i < sizeof(hints) / sizeof(int); i++) { /* Obtain address(es) matching host/port */ @@ -1055,7 +1289,8 @@ socket_transport_connect (const char *address) mono_socket_address_init (&sockaddr, &sock_len, rp->family, &rp->address, port); - sfd = socket (rp->family, rp->socktype, rp->protocol); + sfd = socket (rp->family, rp->socktype, + rp->protocol); if (sfd == -1) continue; @@ -1108,41 +1343,32 @@ socket_transport_connect (const char *address) } else { /* Connect to the specified address */ /* FIXME: Respect the timeout */ - uint32_t startTime = time(NULL); - uint32_t elapsedTime; - do { - PRINT_DEBUG_MSG (1, "Trying to connect.\n"); - for (rp = result->entries; rp != NULL; rp = rp->next) { - MonoSocketAddress sockaddr; - socklen_t sock_len; + for (rp = result->entries; rp != NULL; rp = rp->next) { + MonoSocketAddress sockaddr; + socklen_t sock_len; - mono_socket_address_init (&sockaddr, &sock_len, rp->family, &rp->address, port); + mono_socket_address_init (&sockaddr, &sock_len, rp->family, &rp->address, port); - sfd = socket (rp->family, rp->socktype, - rp->protocol); - if (sfd == -1) - continue; + sfd = socket (rp->family, rp->socktype, + rp->protocol); + if (sfd == -1) + continue; - MONO_ENTER_GC_SAFE; - res = connect (sfd, &sockaddr.addr, sock_len); - MONO_EXIT_GC_SAFE; + MONO_ENTER_GC_SAFE; + res = connect (sfd, &sockaddr.addr, sock_len); + MONO_EXIT_GC_SAFE; - if (res != -1) - break; /* Success */ - - MONO_ENTER_GC_SAFE; - #ifdef HOST_WIN32 - closesocket (sfd); - #else - close (sfd); - #endif - MONO_EXIT_GC_SAFE; - } - elapsedTime = difftime (time (NULL), startTime) * 1000; - if (rp == 0) - sleep (1); - } while ((elapsedTime < agent_config.timeout) && (rp == 0)); - + if (res != -1) + break; /* Success */ + + MONO_ENTER_GC_SAFE; +#ifdef HOST_WIN32 + closesocket (sfd); +#else + close (sfd); +#endif + MONO_EXIT_GC_SAFE; + } if (rp == 0) { PRINT_ERROR_MSG ("debugger-agent: Unable to connect to %s:%d\n", host, port); @@ -1428,6 +1654,194 @@ start_debugger_thread (MonoError *error) } +/* + * Functions to decode protocol data + */ + +static int +decode_byte (guint8 *buf, guint8 **endbuf, guint8 *limit) +{ + *endbuf = buf + 1; + g_assert (*endbuf <= limit); + return buf [0]; +} + +static int +decode_int (guint8 *buf, guint8 **endbuf, guint8 *limit) +{ + *endbuf = buf + 4; + g_assert (*endbuf <= limit); + + return (((int)buf [0]) << 24) | (((int)buf [1]) << 16) | (((int)buf [2]) << 8) | (((int)buf [3]) << 0); +} + +static gint64 +decode_long (guint8 *buf, guint8 **endbuf, guint8 *limit) +{ + guint32 high = decode_int (buf, &buf, limit); + guint32 low = decode_int (buf, &buf, limit); + + *endbuf = buf; + + return ((((guint64)high) << 32) | ((guint64)low)); +} + +static int +decode_id (guint8 *buf, guint8 **endbuf, guint8 *limit) +{ + return decode_int (buf, endbuf, limit); +} + +static char* +decode_string (guint8 *buf, guint8 **endbuf, guint8 *limit) +{ + int len = decode_int (buf, &buf, limit); + char *s; + + if (len < 0) { + *endbuf = buf; + return NULL; + } + + s = (char *)g_malloc (len + 1); + g_assert (s); + + memcpy (s, buf, len); + s [len] = '\0'; + buf += len; + *endbuf = buf; + + return s; +} + +/* + * Functions to encode protocol data + */ + +static void +buffer_init (Buffer *buf, int size) +{ + buf->buf = (guint8 *)g_malloc (size); + buf->p = buf->buf; + buf->end = buf->buf + size; +} + +static int +buffer_len (Buffer *buf) +{ + return buf->p - buf->buf; +} + +static void +buffer_make_room (Buffer *buf, int size) +{ + if (buf->end - buf->p < size) { + int new_size = buf->end - buf->buf + size + 32; + guint8 *p = (guint8 *)g_realloc (buf->buf, new_size); + size = buf->p - buf->buf; + buf->buf = p; + buf->p = p + size; + buf->end = buf->buf + new_size; + } +} + +static void +buffer_add_byte (Buffer *buf, guint8 val) +{ + buffer_make_room (buf, 1); + buf->p [0] = val; + buf->p++; +} + +static void +buffer_add_short (Buffer *buf, guint32 val) +{ + buffer_make_room (buf, 2); + buf->p [0] = (val >> 8) & 0xff; + buf->p [1] = (val >> 0) & 0xff; + buf->p += 2; +} + +static void +buffer_add_int (Buffer *buf, guint32 val) +{ + buffer_make_room (buf, 4); + buf->p [0] = (val >> 24) & 0xff; + buf->p [1] = (val >> 16) & 0xff; + buf->p [2] = (val >> 8) & 0xff; + buf->p [3] = (val >> 0) & 0xff; + buf->p += 4; +} + +static void +buffer_add_long (Buffer *buf, guint64 l) +{ + buffer_add_int (buf, (l >> 32) & 0xffffffff); + buffer_add_int (buf, (l >> 0) & 0xffffffff); +} + +static void +buffer_add_id (Buffer *buf, int id) +{ + buffer_add_int (buf, (guint64)id); +} + +static void +buffer_add_data (Buffer *buf, guint8 *data, int len) +{ + buffer_make_room (buf, len); + memcpy (buf->p, data, len); + buf->p += len; +} + +static void +buffer_add_utf16 (Buffer *buf, guint8 *data, int len) +{ +#if G_BYTE_ORDER == G_LITTLE_ENDIAN + buffer_make_room (buf, len); + memcpy (buf->p, data, len); +#else + for (int i=0; ip[i] = data[i+1]; + buf->p[i+1] = data[i]; + } +#endif + buf->p += len; +} + +static void +buffer_add_string (Buffer *buf, const char *str) +{ + int len; + + if (str == NULL) { + buffer_add_int (buf, 0); + } else { + len = strlen (str); + buffer_add_int (buf, len); + buffer_add_data (buf, (guint8*)str, len); + } +} + +static void +buffer_add_byte_array (Buffer *buf, guint8 *bytes, guint32 arr_len) +{ + buffer_add_int (buf, arr_len); + buffer_add_data (buf, bytes, arr_len); +} + +static void +buffer_add_buffer (Buffer *buf, Buffer *data) +{ + buffer_add_data (buf, data->buf, buffer_len (data)); +} + +static void +buffer_free (Buffer *buf) +{ + g_free (buf->buf); +} + static gboolean send_packet (int command_set, int command, Buffer *data) { @@ -1699,6 +2113,21 @@ buffer_add_objid (Buffer *buf, MonoObject *o) } /* + * IDS + */ + +typedef enum { + ID_ASSEMBLY = 0, + ID_MODULE = 1, + ID_TYPE = 2, + ID_METHOD = 3, + ID_FIELD = 4, + ID_DOMAIN = 5, + ID_PROPERTY = 6, + ID_NUM +} IdType; + +/* * Represents a runtime structure accessible to the debugger client */ typedef struct { @@ -3376,6 +3805,34 @@ create_event_list (EventKind event, GPtrArray *reqs, MonoJitInfo *ji, EventInfo return events; } +static G_GNUC_UNUSED const char* +event_to_string (EventKind event) +{ + switch (event) { + case EVENT_KIND_VM_START: return "VM_START"; + case EVENT_KIND_VM_DEATH: return "VM_DEATH"; + case EVENT_KIND_THREAD_START: return "THREAD_START"; + case EVENT_KIND_THREAD_DEATH: return "THREAD_DEATH"; + case EVENT_KIND_APPDOMAIN_CREATE: return "APPDOMAIN_CREATE"; + case EVENT_KIND_APPDOMAIN_UNLOAD: return "APPDOMAIN_UNLOAD"; + case EVENT_KIND_METHOD_ENTRY: return "METHOD_ENTRY"; + case EVENT_KIND_METHOD_EXIT: return "METHOD_EXIT"; + case EVENT_KIND_ASSEMBLY_LOAD: return "ASSEMBLY_LOAD"; + case EVENT_KIND_ASSEMBLY_UNLOAD: return "ASSEMBLY_UNLOAD"; + case EVENT_KIND_BREAKPOINT: return "BREAKPOINT"; + case EVENT_KIND_STEP: return "STEP"; + case EVENT_KIND_TYPE_LOAD: return "TYPE_LOAD"; + case EVENT_KIND_EXCEPTION: return "EXCEPTION"; + case EVENT_KIND_KEEPALIVE: return "KEEPALIVE"; + case EVENT_KIND_USER_BREAK: return "USER_BREAK"; + case EVENT_KIND_USER_LOG: return "USER_LOG"; + case EVENT_KIND_CRASH: return "CRASH"; + default: + g_assert_not_reached (); + return ""; + } +} + /* * process_event: * @@ -3647,8 +4104,6 @@ static void runtime_initialized (MonoProfiler *prof) { process_profiler_event (EVENT_KIND_VM_START, mono_thread_current ()); - if (CHECK_PROTOCOL_VERSION (3, 0)) - process_profiler_event (EVENT_KIND_ASSEMBLY_LOAD, (mono_defaults.corlib->assembly)); if (agent_config.defer) { ERROR_DECL (error); start_debugger_thread (error); @@ -4905,24 +5360,6 @@ buffer_add_fixed_array (Buffer *buf, MonoType *t, void *addr, MonoDomain *domain } } } -static void -buffer_add_info_for_null_value (Buffer* buf, MonoType* t, MonoDomain* domain) -{ - buffer_add_byte (buf, t->type); - switch (t->type) { - case MONO_TYPE_CLASS: - case MONO_TYPE_STRING: - buffer_add_typeid (buf, domain, mono_class_from_mono_type_internal (t)); - break; - case MONO_TYPE_SZARRAY: - case MONO_TYPE_ARRAY: - buffer_add_byte (buf, m_class_get_byval_arg (m_class_get_element_class (mono_class_from_mono_type_internal (t)))->type); - buffer_add_int (buf, m_class_get_rank (mono_class_from_mono_type_internal (t))); - if (m_class_get_byval_arg (m_class_get_element_class (mono_class_from_mono_type_internal (t)))->type == MONO_TYPE_CLASS) - buffer_add_typeid (buf, domain, m_class_get_element_class (mono_class_from_mono_type_internal (t))); - break; - } -} /* * buffer_add_value_full: * @@ -5029,9 +5466,6 @@ buffer_add_value_full (Buffer *buf, MonoType *t, void *addr, MonoDomain *domain, if (!obj) { buffer_add_byte (buf, VALUE_TYPE_ID_NULL); - if (CHECK_PROTOCOL_VERSION (3, 0)) { - buffer_add_info_for_null_value(buf, t, domain); - } } else { if (m_class_is_valuetype (obj->vtable->klass)) { t = m_class_get_byval_arg (obj->vtable->klass); @@ -5924,12 +6358,10 @@ do_invoke_method (DebuggerTlsData *tls, Buffer *buf, InvokeData *invoke, guint8 return ERR_INVALID_ARGUMENT; } else if (m_class_is_valuetype (m->klass) && (m->flags & METHOD_ATTRIBUTE_STATIC)) { /* Should be null */ - if (!CHECK_PROTOCOL_VERSION (3, 0)) { //on icordbg I couldn't find type information when invoking a static method maybe I can change this later - int type = decode_byte (p, &p, end); - if (type != VALUE_TYPE_ID_NULL) { - PRINT_DEBUG_MSG (1, "[%p] Error: Static vtype method invoked with this argument.\n", (gpointer) (gsize) mono_native_thread_id_get ()); - return ERR_INVALID_ARGUMENT; - } + int type = decode_byte (p, &p, end); + if (type != VALUE_TYPE_ID_NULL) { + PRINT_DEBUG_MSG (1, "[%p] Error: Static vtype method invoked with this argument.\n", (gpointer) (gsize) mono_native_thread_id_get ()); + return ERR_INVALID_ARGUMENT; } memset (this_buf, 0, mono_class_instance_size (m->klass)); } else if (m_class_is_valuetype (m->klass) && !strcmp (m->name, ".ctor")) { @@ -5946,14 +6378,12 @@ do_invoke_method (DebuggerTlsData *tls, Buffer *buf, InvokeData *invoke, guint8 return err; } } else { - if (!(m->flags & METHOD_ATTRIBUTE_STATIC && CHECK_PROTOCOL_VERSION (3, 0))) { //on icordbg I couldn't find an object when invoking a static method maybe I can change this later - err = decode_value(m_class_get_byval_arg(m->klass), domain, this_buf, p, &p, end, FALSE); - if (err != ERR_NONE) - return err; - } + err = decode_value (m_class_get_byval_arg (m->klass), domain, this_buf, p, &p, end, FALSE); + if (err != ERR_NONE) + return err; } - if (!m_class_is_valuetype (m->klass) && !(m->flags & METHOD_ATTRIBUTE_STATIC && CHECK_PROTOCOL_VERSION (3, 0))) //on icordbg I couldn't find an object when invoking a static method maybe I can change this later + if (!m_class_is_valuetype (m->klass)) this_arg = *(MonoObject**)this_buf; else this_arg = NULL; @@ -6733,15 +7163,14 @@ vm_commands (int command, int id, guint8 *p, guint8 *end, Buffer *buf) tls->pending_invoke->endp = tls->pending_invoke->p + (end - p); tls->pending_invoke->suspend_count = suspend_count; tls->pending_invoke->nmethods = nmethods; - if (!CHECK_PROTOCOL_VERSION (3, 0)) { //on icordbg they send a resume after calling an invoke method - if (flags & INVOKE_FLAG_SINGLE_THREADED) { - resume_thread(THREAD_TO_INTERNAL(thread)); - } - else { - count = suspend_count; - for (i = 0; i < count; ++i) - resume_vm(); - } + + if (flags & INVOKE_FLAG_SINGLE_THREADED) { + resume_thread (THREAD_TO_INTERNAL (thread)); + } + else { + count = suspend_count; + for (i = 0; i < count; ++i) + resume_vm (); } break; } @@ -7540,11 +7969,6 @@ field_commands (int command, guint8 *p, guint8 *end, Buffer *buf) buffer_add_typeid (buf, domain, f->parent); buffer_add_typeid (buf, domain, mono_class_from_mono_type_internal (f->type)); buffer_add_int (buf, f->type->attrs); - if (CHECK_PROTOCOL_VERSION (3, 0)) { - buffer_add_int (buf, f->type->type); - buffer_add_int (buf, m_class_get_type_token (f->parent)); - buffer_add_int (buf, m_class_get_type_token (mono_class_from_mono_type_internal (f->type))); - } break; } default: @@ -7684,8 +8108,6 @@ type_commands_internal (int command, MonoClass *klass, MonoDomain *domain, guint while ((m = mono_class_get_methods (klass, &iter))) { buffer_add_methodid (buf, domain, m); - if (CHECK_PROTOCOL_VERSION (3, 0)) - buffer_add_int(buf, m->token); i ++; } g_assert (i == nmethods); @@ -8544,14 +8966,6 @@ method_commands_internal (int command, MonoMethod *method, MonoDomain *domain, g buffer_add_methodid (buf, domain, inflated); break; } - case CMD_METHOD_TOKEN: { - buffer_add_int(buf, method->token); - break; - } - case CMD_METHOD_ASSEMBLY: { - buffer_add_assemblyid(buf, mono_domain_get (), m_class_get_image(method->klass)->assembly); - break; - } default: return ERR_NOT_IMPLEMENTED; } @@ -8654,6 +9068,7 @@ thread_commands (int command, guint8 *p, guint8 *end, Buffer *buf) */ buffer_add_byte (buf, tls->frames [i]->flags); } + break; } case CMD_THREAD_GET_STATE: @@ -8732,62 +9147,6 @@ thread_commands (int command, guint8 *p, guint8 *end, Buffer *buf) } static ErrorCode -cmd_stack_frame_get_this (StackFrame *frame, MonoMethodSignature *sig, Buffer *buf, MonoDebugMethodJitInfo *jit) -{ - if (frame->de.method->wrapper_type == MONO_WRAPPER_MANAGED_TO_NATIVE) - return ERR_ABSENT_INFORMATION; - if (m_class_is_valuetype (frame->api_method->klass)) { - if (!sig->hasthis) { - MonoObject *p = NULL; - buffer_add_value (buf, mono_get_object_type (), &p, frame->de.domain); - } else { - if (frame->de.ji->is_interp) { - guint8 *addr; - - addr = (guint8*)mini_get_interp_callbacks ()->frame_get_this (frame->interp_frame); - - buffer_add_value_full (buf, m_class_get_this_arg (frame->actual_method->klass), addr, frame->de.domain, FALSE, NULL, 1); - } else { - add_var (buf, jit, m_class_get_this_arg (frame->actual_method->klass), jit->this_var, &frame->ctx, frame->de.domain, TRUE); - } - } - } else { - if (!sig->hasthis) { - MonoObject *p = NULL; - buffer_add_value (buf, m_class_get_byval_arg (frame->actual_method->klass), &p, frame->de.domain); - } else { - if (frame->de.ji->is_interp) { - guint8 *addr; - - addr = (guint8*)mini_get_interp_callbacks ()->frame_get_this (frame->interp_frame); - - buffer_add_value_full (buf, m_class_get_byval_arg (frame->api_method->klass), addr, frame->de.domain, FALSE, NULL, 1); - } else { - add_var (buf, jit, m_class_get_byval_arg (frame->api_method->klass), jit->this_var, &frame->ctx, frame->de.domain, TRUE); - } - } - } - return ERR_NONE; -} -static void -cmd_stack_frame_get_parameter (StackFrame *frame, MonoMethodSignature *sig, int pos, Buffer *buf, MonoDebugMethodJitInfo *jit) -{ - PRINT_DEBUG_MSG (4, "[dbg] send arg %d.\n", pos); - if (frame->de.ji->is_interp) { - guint8 *addr; - - addr = (guint8*)mini_get_interp_callbacks ()->frame_get_arg (frame->interp_frame, pos); - - buffer_add_value_full (buf, sig->params [pos], addr, frame->de.domain, FALSE, NULL, 1); - } else { - g_assert (pos >= 0 && pos < jit->num_params); - - add_var (buf, jit, sig->params [pos], &jit->params [pos], &frame->ctx, frame->de.domain, FALSE); - } -} - - -static ErrorCode frame_commands (int command, guint8 *p, guint8 *end, Buffer *buf) { int objid; @@ -8801,8 +9160,7 @@ frame_commands (int command, guint8 *p, guint8 *end, Buffer *buf) MonoMethodSignature *sig; gssize id; MonoMethodHeader *header; - ERROR_DECL (error); - + objid = decode_objid (p, &p, end); err = get_object (objid, (MonoObject**)&thread_obj); if (err != ERR_NONE) @@ -8854,20 +9212,8 @@ frame_commands (int command, guint8 *p, guint8 *end, Buffer *buf) return ERR_ABSENT_INFORMATION; switch (command) { - case CMD_STACK_FRAME_GET_ARGUMENT: { - pos = decode_int (p, &p, end); - if (sig->hasthis) { - if (pos == 0) - return cmd_stack_frame_get_this (frame, sig, buf, jit); - else - pos--; - } - len = 1; - header = mono_method_get_header_checked (frame->actual_method, error); - cmd_stack_frame_get_parameter (frame, sig, pos, buf, jit); - break; - } case CMD_STACK_FRAME_GET_VALUES: { + ERROR_DECL (error); len = decode_int (p, &p, end); header = mono_method_get_header_checked (frame->actual_method, error); mono_error_assert_ok (error); /* FIXME report error */ @@ -8877,7 +9223,20 @@ frame_commands (int command, guint8 *p, guint8 *end, Buffer *buf) if (pos < 0) { pos = - pos - 1; - cmd_stack_frame_get_parameter (frame, sig, pos, buf, jit); + + PRINT_DEBUG_MSG (4, "[dbg] send arg %d.\n", pos); + + if (frame->de.ji->is_interp) { + guint8 *addr; + + addr = (guint8*)mini_get_interp_callbacks ()->frame_get_arg (frame->interp_frame, pos); + + buffer_add_value_full (buf, sig->params [pos], addr, frame->de.domain, FALSE, NULL, 1); + } else { + g_assert (pos >= 0 && pos < jit->num_params); + + add_var (buf, jit, sig->params [pos], &jit->params [pos], &frame->ctx, frame->de.domain, FALSE); + } } else { MonoDebugLocalsInfo *locals; @@ -8907,7 +9266,39 @@ frame_commands (int command, guint8 *p, guint8 *end, Buffer *buf) break; } case CMD_STACK_FRAME_GET_THIS: { - return cmd_stack_frame_get_this (frame, sig, buf, jit); + if (frame->de.method->wrapper_type == MONO_WRAPPER_MANAGED_TO_NATIVE) + return ERR_ABSENT_INFORMATION; + if (m_class_is_valuetype (frame->api_method->klass)) { + if (!sig->hasthis) { + MonoObject *p = NULL; + buffer_add_value (buf, mono_get_object_type (), &p, frame->de.domain); + } else { + if (frame->de.ji->is_interp) { + guint8 *addr; + + addr = (guint8*)mini_get_interp_callbacks ()->frame_get_this (frame->interp_frame); + + buffer_add_value_full (buf, m_class_get_this_arg (frame->actual_method->klass), addr, frame->de.domain, FALSE, NULL, 1); + } else { + add_var (buf, jit, m_class_get_this_arg (frame->actual_method->klass), jit->this_var, &frame->ctx, frame->de.domain, TRUE); + } + } + } else { + if (!sig->hasthis) { + MonoObject *p = NULL; + buffer_add_value (buf, m_class_get_byval_arg (frame->actual_method->klass), &p, frame->de.domain); + } else { + if (frame->de.ji->is_interp) { + guint8 *addr; + + addr = (guint8*)mini_get_interp_callbacks ()->frame_get_this (frame->interp_frame); + + buffer_add_value_full (buf, m_class_get_byval_arg (frame->api_method->klass), addr, frame->de.domain, FALSE, NULL, 1); + } else { + add_var (buf, jit, m_class_get_byval_arg (frame->api_method->klass), jit->this_var, &frame->ctx, frame->de.domain, TRUE); + } + } + } break; } case CMD_STACK_FRAME_SET_VALUES: { @@ -9026,13 +9417,6 @@ array_commands (int command, guint8 *p, guint8 *end, Buffer *buf) return err; switch (command) { - case CMD_ARRAY_REF_GET_TYPE: { - buffer_add_byte(buf, m_class_get_byval_arg (m_class_get_element_class (arr->obj.vtable->klass))->type); - buffer_add_int (buf, m_class_get_rank (arr->obj.vtable->klass)); - if (m_class_get_byval_arg (m_class_get_element_class (arr->obj.vtable->klass))->type == MONO_TYPE_CLASS) - buffer_add_typeid (buf, arr->obj.vtable->domain, m_class_get_element_class (arr->obj.vtable->klass)); - } - break; case CMD_ARRAY_REF_GET_LENGTH: buffer_add_int (buf, m_class_get_rank (arr->obj.vtable->klass)); if (!arr->bounds) { @@ -9229,7 +9613,7 @@ object_commands (int command, guint8 *p, guint8 *end, Buffer *buf) ErrorCode err; MonoObject *obj; int len, i; - MonoClassField *f = NULL; + MonoClassField *f; MonoClass *k; gboolean found; gboolean remote_obj = FALSE; @@ -9266,26 +9650,14 @@ object_commands (int command, guint8 *p, guint8 *end, Buffer *buf) /* This handles transparent proxies too */ buffer_add_typeid (buf, obj->vtable->domain, mono_class_from_mono_type_internal (((MonoReflectionType*)obj->vtable->type)->type)); break; - case CMD_OBJECT_REF_GET_VALUES_ICORDBG: { - gpointer iter; - iter = NULL; - len = 1; - MonoClass *dummy_class; - int field_token = decode_int (p, &p, end); - i = 0; - f = mono_field_from_token_checked (m_class_get_image (obj_type), field_token, &dummy_class, NULL, error); - if (f) { - goto get_field_value; - } - goto invalid_fieldid; - } case CMD_OBJECT_REF_GET_VALUES: len = decode_int (p, &p, end); for (i = 0; i < len; ++i) { - f = decode_fieldid (p, &p, end, NULL, &err); + MonoClassField *f = decode_fieldid (p, &p, end, NULL, &err); if (err != ERR_NONE) goto exit; + /* Check that the field belongs to the object */ found = FALSE; for (k = obj_type; k; k = m_class_get_parent (k)) { @@ -9296,7 +9668,7 @@ object_commands (int command, guint8 *p, guint8 *end, Buffer *buf) } if (!found) goto invalid_fieldid; -get_field_value: + if (f->type->attrs & FIELD_ATTRIBUTE_STATIC) { guint8 *val; MonoVTable *vtable; @@ -9455,7 +9827,6 @@ command_set_to_string (CommandSet command_set) } static const char* vm_cmds_str [] = { - "", "VERSION", "ALL_THREADS", "SUSPEND", @@ -9468,9 +9839,7 @@ static const char* vm_cmds_str [] = { "SET_KEEPALIVE" "GET_TYPES_FOR_SOURCE_FILE", "GET_TYPES", - "INVOKE_METHODS", - "START_BUFFERING", - "STOP_BUFFERING" + "INVOKE_METHODS" }; static const char* thread_cmds_str[] = { @@ -9508,13 +9877,7 @@ static const char* assembly_cmds_str[] = { "GET_TYPE", "GET_NAME", "GET_DOMAIN", - "GET_METADATA_BLOB", - "GET_IS_DYNAMIC", - "GET_PDB_BLOB", - "GET_TYPE_FROM_TOKEN", - "GET_METHOD_FROM_TOKEN", - "HAS_DEBUG_INFO", - "GET_CUSTOM_ATTRIBUTES", + "HAS_DEBUG_INFO" }; static const char* module_cmds_str[] = { diff --git a/mono/mini/debugger-engine.c b/mono/mini/debugger-engine.c index 3b631d9f912..7cc46e79776 100644 --- a/mono/mini/debugger-engine.c +++ b/mono/mini/debugger-engine.c @@ -1167,7 +1167,7 @@ mono_de_process_breakpoint (void *void_tls, gboolean from_signal) g_ptr_array_free (bp_reqs, TRUE); g_ptr_array_free (ss_reqs, TRUE); - rt_callbacks.process_breakpoint_events (bp_events, method, ctx, sp.il_offset); + rt_callbacks.process_breakpoint_events (bp_events, method, ctx, 0); } /* diff --git a/mono/mini/debugger-engine.h b/mono/mini/debugger-engine.h index 21303b4c37d..fa8dd2792f0 100644 --- a/mono/mini/debugger-engine.h +++ b/mono/mini/debugger-engine.h @@ -10,258 +10,65 @@ #include #include #include -#include - -#define ModifierKind MdbgProtModifierKind -#define StepDepth MdbgProtStepDepth -#define StepSize MdbgProtStepSize -#define StepFilter MdbgProtStepFilter -#define EventKind MdbgProtEventKind -#define CommandSet MdbgProtCommandSet - -#define EVENT_KIND_BREAKPOINT MDBGPROT_EVENT_KIND_BREAKPOINT -#define EVENT_KIND_STEP MDBGPROT_EVENT_KIND_STEP -#define EVENT_KIND_KEEPALIVE MDBGPROT_EVENT_KIND_KEEPALIVE -#define EVENT_KIND_METHOD_ENTRY MDBGPROT_EVENT_KIND_METHOD_ENTRY -#define EVENT_KIND_METHOD_EXIT MDBGPROT_EVENT_KIND_METHOD_EXIT -#define EVENT_KIND_APPDOMAIN_CREATE MDBGPROT_EVENT_KIND_APPDOMAIN_CREATE -#define EVENT_KIND_APPDOMAIN_UNLOAD MDBGPROT_EVENT_KIND_APPDOMAIN_UNLOAD -#define EVENT_KIND_THREAD_START MDBGPROT_EVENT_KIND_THREAD_START -#define EVENT_KIND_THREAD_DEATH MDBGPROT_EVENT_KIND_THREAD_DEATH -#define EVENT_KIND_ASSEMBLY_LOAD MDBGPROT_EVENT_KIND_ASSEMBLY_LOAD -#define EVENT_KIND_ASSEMBLY_UNLOAD MDBGPROT_EVENT_KIND_ASSEMBLY_UNLOAD -#define EVENT_KIND_TYPE_LOAD MDBGPROT_EVENT_KIND_TYPE_LOAD -#define EVENT_KIND_VM_START MDBGPROT_EVENT_KIND_VM_START -#define EVENT_KIND_VM_DEATH MDBGPROT_EVENT_KIND_VM_DEATH -#define EVENT_KIND_CRASH MDBGPROT_EVENT_KIND_CRASH -#define EVENT_KIND_EXCEPTION MDBGPROT_EVENT_KIND_EXCEPTION -#define EVENT_KIND_USER_BREAK MDBGPROT_EVENT_KIND_USER_BREAK -#define EVENT_KIND_USER_LOG MDBGPROT_EVENT_KIND_USER_LOG -#define CMD_EVENT_REQUEST_SET MDBGPROT_CMD_EVENT_REQUEST_SET -#define CMD_EVENT_REQUEST_CLEAR MDBGPROT_CMD_EVENT_REQUEST_CLEAR -#define CMD_EVENT_REQUEST_CLEAR_ALL_BREAKPOINTS MDBGPROT_CMD_EVENT_REQUEST_CLEAR_ALL_BREAKPOINTS - -#define CMD_VM_VERSION MDBGPROT_CMD_VM_VERSION -#define CMD_VM_SET_PROTOCOL_VERSION MDBGPROT_CMD_VM_SET_PROTOCOL_VERSION -#define CMD_VM_ALL_THREADS MDBGPROT_CMD_VM_ALL_THREADS -#define CMD_VM_SUSPEND MDBGPROT_CMD_VM_SUSPEND -#define CMD_VM_RESUME MDBGPROT_CMD_VM_RESUME -#define CMD_VM_DISPOSE MDBGPROT_CMD_VM_DISPOSE -#define CMD_VM_EXIT MDBGPROT_CMD_VM_EXIT -#define CMD_VM_INVOKE_METHOD MDBGPROT_CMD_VM_INVOKE_METHOD -#define CMD_VM_INVOKE_METHODS MDBGPROT_CMD_VM_INVOKE_METHODS -#define CMD_VM_ABORT_INVOKE MDBGPROT_CMD_VM_ABORT_INVOKE -#define CMD_VM_SET_KEEPALIVE MDBGPROT_CMD_VM_SET_KEEPALIVE -#define CMD_VM_GET_TYPES_FOR_SOURCE_FILE MDBGPROT_CMD_VM_GET_TYPES_FOR_SOURCE_FILE -#define CMD_VM_GET_TYPES MDBGPROT_CMD_VM_GET_TYPES -#define CMD_VM_START_BUFFERING MDBGPROT_CMD_VM_START_BUFFERING -#define CMD_VM_STOP_BUFFERING MDBGPROT_CMD_VM_STOP_BUFFERING - -#define CMD_APPDOMAIN_GET_ROOT_DOMAIN MDBGPROT_CMD_APPDOMAIN_GET_ROOT_DOMAIN -#define CMD_APPDOMAIN_GET_FRIENDLY_NAME MDBGPROT_CMD_APPDOMAIN_GET_FRIENDLY_NAME -#define CMD_APPDOMAIN_GET_ASSEMBLIES MDBGPROT_CMD_APPDOMAIN_GET_ASSEMBLIES -#define CMD_APPDOMAIN_GET_ENTRY_ASSEMBLY MDBGPROT_CMD_APPDOMAIN_GET_ENTRY_ASSEMBLY -#define CMD_APPDOMAIN_GET_CORLIB MDBGPROT_CMD_APPDOMAIN_GET_CORLIB -#define CMD_APPDOMAIN_CREATE_STRING MDBGPROT_CMD_APPDOMAIN_CREATE_STRING -#define CMD_APPDOMAIN_CREATE_BYTE_ARRAY MDBGPROT_CMD_APPDOMAIN_CREATE_BYTE_ARRAY -#define CMD_APPDOMAIN_CREATE_BOXED_VALUE MDBGPROT_CMD_APPDOMAIN_CREATE_BOXED_VALUE - -#define CMD_ASSEMBLY_GET_LOCATION MDBGPROT_CMD_ASSEMBLY_GET_LOCATION -#define CMD_ASSEMBLY_GET_ENTRY_POINT MDBGPROT_CMD_ASSEMBLY_GET_ENTRY_POINT -#define CMD_ASSEMBLY_GET_MANIFEST_MODULE MDBGPROT_CMD_ASSEMBLY_GET_MANIFEST_MODULE -#define CMD_ASSEMBLY_GET_OBJECT MDBGPROT_CMD_ASSEMBLY_GET_OBJECT -#define CMD_ASSEMBLY_GET_DOMAIN MDBGPROT_CMD_ASSEMBLY_GET_DOMAIN -#define CMD_ASSEMBLY_GET_TYPE MDBGPROT_CMD_ASSEMBLY_GET_TYPE -#define CMD_ASSEMBLY_GET_NAME MDBGPROT_CMD_ASSEMBLY_GET_NAME -#define CMD_ASSEMBLY_GET_METADATA_BLOB MDBGPROT_CMD_ASSEMBLY_GET_METADATA_BLOB -#define CMD_ASSEMBLY_GET_IS_DYNAMIC MDBGPROT_CMD_ASSEMBLY_GET_IS_DYNAMIC -#define CMD_ASSEMBLY_GET_PDB_BLOB MDBGPROT_CMD_ASSEMBLY_GET_PDB_BLOB -#define CMD_ASSEMBLY_GET_TYPE_FROM_TOKEN MDBGPROT_CMD_ASSEMBLY_GET_TYPE_FROM_TOKEN -#define CMD_ASSEMBLY_GET_METHOD_FROM_TOKEN MDBGPROT_CMD_ASSEMBLY_GET_METHOD_FROM_TOKEN -#define CMD_ASSEMBLY_HAS_DEBUG_INFO MDBGPROT_CMD_ASSEMBLY_HAS_DEBUG_INFO -#define CMD_ASSEMBLY_GET_CATTRS MDBGPROT_CMD_ASSEMBLY_GET_CATTRS - -#define CMD_MODULE_GET_INFO MDBGPROT_CMD_MODULE_GET_INFO - -#define CMD_FIELD_GET_INFO MDBGPROT_CMD_FIELD_GET_INFO - -#define CMD_TYPE_GET_INFO MDBGPROT_CMD_TYPE_GET_INFO -#define CMD_TYPE_GET_METHODS MDBGPROT_CMD_TYPE_GET_METHODS -#define CMD_TYPE_GET_FIELDS MDBGPROT_CMD_TYPE_GET_FIELDS -#define CMD_TYPE_GET_PROPERTIES MDBGPROT_CMD_TYPE_GET_PROPERTIES -#define CMD_TYPE_GET_CATTRS MDBGPROT_CMD_TYPE_GET_CATTRS -#define CMD_TYPE_GET_FIELD_CATTRS MDBGPROT_CMD_TYPE_GET_FIELD_CATTRS -#define CMD_TYPE_GET_PROPERTY_CATTRS MDBGPROT_CMD_TYPE_GET_PROPERTY_CATTRS -#define CMD_TYPE_GET_VALUES MDBGPROT_CMD_TYPE_GET_VALUES -#define CMD_TYPE_GET_VALUES_2 MDBGPROT_CMD_TYPE_GET_VALUES_2 -#define CMD_TYPE_SET_VALUES MDBGPROT_CMD_TYPE_SET_VALUES -#define CMD_TYPE_GET_OBJECT MDBGPROT_CMD_TYPE_GET_OBJECT -#define CMD_TYPE_GET_SOURCE_FILES MDBGPROT_CMD_TYPE_GET_SOURCE_FILES -#define CMD_TYPE_GET_SOURCE_FILES_2 MDBGPROT_CMD_TYPE_GET_SOURCE_FILES_2 -#define CMD_TYPE_IS_ASSIGNABLE_FROM MDBGPROT_CMD_TYPE_IS_ASSIGNABLE_FROM -#define CMD_TYPE_GET_METHODS_BY_NAME_FLAGS MDBGPROT_CMD_TYPE_GET_METHODS_BY_NAME_FLAGS -#define CMD_TYPE_GET_INTERFACES MDBGPROT_CMD_TYPE_GET_INTERFACES -#define CMD_TYPE_GET_INTERFACE_MAP MDBGPROT_CMD_TYPE_GET_INTERFACE_MAP -#define CMD_TYPE_IS_INITIALIZED MDBGPROT_CMD_TYPE_IS_INITIALIZED -#define CMD_TYPE_CREATE_INSTANCE MDBGPROT_CMD_TYPE_CREATE_INSTANCE -#define CMD_TYPE_GET_VALUE_SIZE MDBGPROT_CMD_TYPE_GET_VALUE_SIZE - -#define CMD_METHOD_GET_NAME MDBGPROT_CMD_METHOD_GET_NAME -#define CMD_METHOD_GET_DECLARING_TYPE MDBGPROT_CMD_METHOD_GET_DECLARING_TYPE -#define CMD_METHOD_GET_DEBUG_INFO MDBGPROT_CMD_METHOD_GET_DEBUG_INFO -#define CMD_METHOD_GET_PARAM_INFO MDBGPROT_CMD_METHOD_GET_PARAM_INFO -#define CMD_METHOD_GET_LOCALS_INFO MDBGPROT_CMD_METHOD_GET_LOCALS_INFO -#define CMD_METHOD_GET_INFO MDBGPROT_CMD_METHOD_GET_INFO -#define CMD_METHOD_GET_BODY MDBGPROT_CMD_METHOD_GET_BODY -#define CMD_METHOD_RESOLVE_TOKEN MDBGPROT_CMD_METHOD_RESOLVE_TOKEN -#define CMD_METHOD_GET_CATTRS MDBGPROT_CMD_METHOD_GET_CATTRS -#define CMD_METHOD_MAKE_GENERIC_METHOD MDBGPROT_CMD_METHOD_MAKE_GENERIC_METHOD -#define CMD_METHOD_TOKEN MDBGPROT_CMD_METHOD_TOKEN -#define CMD_METHOD_ASSEMBLY MDBGPROT_CMD_METHOD_ASSEMBLY - -#define CMD_THREAD_GET_NAME MDBGPROT_CMD_THREAD_GET_NAME -#define CMD_THREAD_GET_FRAME_INFO MDBGPROT_CMD_THREAD_GET_FRAME_INFO -#define CMD_THREAD_GET_STATE MDBGPROT_CMD_THREAD_GET_STATE -#define CMD_THREAD_GET_INFO MDBGPROT_CMD_THREAD_GET_INFO -#define CMD_THREAD_GET_ID MDBGPROT_CMD_THREAD_GET_ID -#define CMD_THREAD_GET_TID MDBGPROT_CMD_THREAD_GET_TID -#define CMD_THREAD_SET_IP MDBGPROT_CMD_THREAD_SET_IP -#define CMD_THREAD_ELAPSED_TIME MDBGPROT_CMD_THREAD_ELAPSED_TIME - -#define CMD_STACK_FRAME_GET_DOMAIN MDBGPROT_CMD_STACK_FRAME_GET_DOMAIN -#define CMD_STACK_FRAME_GET_ARGUMENT MDBGPROT_CMD_STACK_FRAME_GET_ARGUMENT -#define CMD_STACK_FRAME_GET_VALUES MDBGPROT_CMD_STACK_FRAME_GET_VALUES -#define CMD_STACK_FRAME_GET_THIS MDBGPROT_CMD_STACK_FRAME_GET_THIS -#define CMD_STACK_FRAME_SET_VALUES MDBGPROT_CMD_STACK_FRAME_SET_VALUES -#define CMD_STACK_FRAME_GET_DOMAIN MDBGPROT_CMD_STACK_FRAME_GET_DOMAIN -#define CMD_STACK_FRAME_SET_THIS MDBGPROT_CMD_STACK_FRAME_SET_THIS - -#define CMD_ARRAY_REF_GET_TYPE MDBGPROT_CMD_ARRAY_REF_GET_TYPE -#define CMD_ARRAY_REF_GET_LENGTH MDBGPROT_CMD_ARRAY_REF_GET_LENGTH -#define CMD_ARRAY_REF_GET_VALUES MDBGPROT_CMD_ARRAY_REF_GET_VALUES -#define CMD_ARRAY_REF_SET_VALUES MDBGPROT_CMD_ARRAY_REF_SET_VALUES - -#define CMD_STRING_REF_GET_VALUE MDBGPROT_CMD_STRING_REF_GET_VALUE -#define CMD_STRING_REF_GET_LENGTH MDBGPROT_CMD_STRING_REF_GET_LENGTH -#define CMD_STRING_REF_GET_CHARS MDBGPROT_CMD_STRING_REF_GET_CHARS - -#define CMD_POINTER_GET_VALUE MDBGPROT_CMD_POINTER_GET_VALUE - -#define CMD_OBJECT_REF_IS_COLLECTED MDBGPROT_CMD_OBJECT_REF_IS_COLLECTED -#define CMD_OBJECT_REF_GET_TYPE MDBGPROT_CMD_OBJECT_REF_GET_TYPE -#define CMD_OBJECT_REF_GET_VALUES_ICORDBG MDBGPROT_CMD_OBJECT_REF_GET_VALUES_ICORDBG -#define CMD_OBJECT_REF_GET_VALUES MDBGPROT_CMD_OBJECT_REF_GET_VALUES -#define CMD_OBJECT_REF_SET_VALUES MDBGPROT_CMD_OBJECT_REF_SET_VALUES -#define CMD_OBJECT_REF_GET_ADDRESS MDBGPROT_CMD_OBJECT_REF_GET_ADDRESS -#define CMD_OBJECT_REF_GET_DOMAIN MDBGPROT_CMD_OBJECT_REF_GET_DOMAIN -#define CMD_OBJECT_REF_GET_INFO MDBGPROT_CMD_OBJECT_REF_GET_INFO - -#define TOKEN_TYPE_METHOD MDBGPROT_TOKEN_TYPE_METHOD -#define TOKEN_TYPE_UNKNOWN MDBGPROT_TOKEN_TYPE_UNKNOWN -#define TOKEN_TYPE_FIELD MDBGPROT_TOKEN_TYPE_FIELD -#define TOKEN_TYPE_METHOD MDBGPROT_TOKEN_TYPE_METHOD -#define TOKEN_TYPE_STRING MDBGPROT_TOKEN_TYPE_STRING -#define TOKEN_TYPE_TYPE MDBGPROT_TOKEN_TYPE_TYPE - -#define STEP_FILTER_STATIC_CTOR MDBGPROT_STEP_FILTER_STATIC_CTOR -#define STEP_DEPTH_OVER MDBGPROT_STEP_DEPTH_OVER -#define STEP_DEPTH_OUT MDBGPROT_STEP_DEPTH_OUT -#define STEP_DEPTH_INTO MDBGPROT_STEP_DEPTH_INTO -#define STEP_SIZE_MIN MDBGPROT_STEP_SIZE_MIN -#define STEP_SIZE_LINE MDBGPROT_STEP_SIZE_LINE - -#define SUSPEND_POLICY_NONE MDBGPROT_SUSPEND_POLICY_NONE -#define SUSPEND_POLICY_ALL MDBGPROT_SUSPEND_POLICY_ALL -#define SUSPEND_POLICY_EVENT_THREAD MDBGPROT_SUSPEND_POLICY_EVENT_THREAD - -#define CMD_COMPOSITE MDBGPROT_CMD_COMPOSITE - -#define INVOKE_FLAG_SINGLE_THREADED MDBGPROT_INVOKE_FLAG_SINGLE_THREADED -#define INVOKE_FLAG_VIRTUAL MDBGPROT_INVOKE_FLAG_VIRTUAL -#define INVOKE_FLAG_DISABLE_BREAKPOINTS MDBGPROT_INVOKE_FLAG_DISABLE_BREAKPOINTS -#define INVOKE_FLAG_RETURN_OUT_THIS MDBGPROT_INVOKE_FLAG_RETURN_OUT_THIS -#define INVOKE_FLAG_RETURN_OUT_ARGS MDBGPROT_INVOKE_FLAG_RETURN_OUT_ARGS - -#define MOD_KIND_ASSEMBLY_ONLY MDBGPROT_MOD_KIND_ASSEMBLY_ONLY -#define MOD_KIND_EXCEPTION_ONLY MDBGPROT_MOD_KIND_EXCEPTION_ONLY -#define MOD_KIND_NONE MDBGPROT_MOD_KIND_NONE -#define MOD_KIND_COUNT MDBGPROT_MOD_KIND_COUNT -#define MOD_KIND_THREAD_ONLY MDBGPROT_MOD_KIND_THREAD_ONLY -#define MOD_KIND_SOURCE_FILE_ONLY MDBGPROT_MOD_KIND_SOURCE_FILE_ONLY -#define MOD_KIND_TYPE_NAME_ONLY MDBGPROT_MOD_KIND_TYPE_NAME_ONLY -#define MOD_KIND_STEP MDBGPROT_MOD_KIND_STEP -#define MOD_KIND_LOCATION_ONLY MDBGPROT_MOD_KIND_LOCATION_ONLY - - -#define STEP_FILTER_DEBUGGER_HIDDEN MDBGPROT_STEP_FILTER_DEBUGGER_HIDDEN -#define STEP_FILTER_DEBUGGER_NON_USER_CODE MDBGPROT_STEP_FILTER_DEBUGGER_NON_USER_CODE -#define STEP_FILTER_DEBUGGER_STEP_THROUGH MDBGPROT_STEP_FILTER_DEBUGGER_STEP_THROUGH -#define STEP_FILTER_NONE MDBGPROT_STEP_FILTER_NONE - -#define ERR_NONE MDBGPROT_ERR_NONE -#define ERR_INVOKE_ABORTED MDBGPROT_ERR_INVOKE_ABORTED -#define ERR_NOT_SUSPENDED MDBGPROT_ERR_NOT_SUSPENDED -#define ERR_INVALID_ARGUMENT MDBGPROT_ERR_INVALID_ARGUMENT -#define ERR_INVALID_OBJECT MDBGPROT_ERR_INVALID_OBJECT -#define ERR_UNLOADED MDBGPROT_ERR_UNLOADED -#define ERR_NOT_IMPLEMENTED MDBGPROT_ERR_NOT_IMPLEMENTED -#define ERR_LOADER_ERROR MDBGPROT_ERR_LOADER_ERROR -#define ERR_NO_INVOCATION MDBGPROT_ERR_NO_INVOCATION -#define ERR_NO_SEQ_POINT_AT_IL_OFFSET MDBGPROT_ERR_NO_SEQ_POINT_AT_IL_OFFSET -#define ERR_INVALID_FIELDID MDBGPROT_ERR_INVALID_FIELDID -#define ERR_INVALID_FRAMEID MDBGPROT_ERR_INVALID_FRAMEID -#define ERR_ABSENT_INFORMATION MDBGPROT_ERR_ABSENT_INFORMATION - -#define VALUE_TYPE_ID_FIXED_ARRAY MDBGPROT_VALUE_TYPE_ID_FIXED_ARRAY -#define VALUE_TYPE_ID_NULL MDBGPROT_VALUE_TYPE_ID_NULL -#define VALUE_TYPE_ID_PARENT_VTYPE MDBGPROT_VALUE_TYPE_ID_PARENT_VTYPE -#define VALUE_TYPE_ID_TYPE MDBGPROT_VALUE_TYPE_ID_TYPE - -#define CMD_SET_VM MDBGPROT_CMD_SET_VM -#define CMD_SET_OBJECT_REF MDBGPROT_CMD_SET_OBJECT_REF -#define CMD_SET_STRING_REF MDBGPROT_CMD_SET_STRING_REF -#define CMD_SET_THREAD MDBGPROT_CMD_SET_THREAD -#define CMD_SET_ARRAY_REF MDBGPROT_CMD_SET_ARRAY_REF -#define CMD_SET_EVENT_REQUEST MDBGPROT_CMD_SET_EVENT_REQUEST -#define CMD_SET_STACK_FRAME MDBGPROT_CMD_SET_STACK_FRAME -#define CMD_SET_APPDOMAIN MDBGPROT_CMD_SET_APPDOMAIN -#define CMD_SET_ASSEMBLY MDBGPROT_CMD_SET_ASSEMBLY -#define CMD_SET_METHOD MDBGPROT_CMD_SET_METHOD -#define CMD_SET_TYPE MDBGPROT_CMD_SET_TYPE -#define CMD_SET_MODULE MDBGPROT_CMD_SET_MODULE -#define CMD_SET_FIELD MDBGPROT_CMD_SET_FIELD -#define CMD_SET_POINTER MDBGPROT_CMD_SET_POINTER -#define CMD_SET_EVENT MDBGPROT_CMD_SET_EVENT - -#define Buffer MdbgProtBuffer -#define ReplyPacket MdbgProtReplyPacket - -#define buffer_init m_dbgprot_buffer_init -#define buffer_free m_dbgprot_buffer_free -#define buffer_add_int m_dbgprot_buffer_add_int -#define buffer_add_long m_dbgprot_buffer_add_long -#define buffer_add_string m_dbgprot_buffer_add_string -#define buffer_add_id m_dbgprot_buffer_add_id -#define buffer_add_byte m_dbgprot_buffer_add_byte -#define buffer_len m_dbgprot_buffer_len -#define buffer_add_buffer m_dbgprot_buffer_add_buffer -#define buffer_add_data m_dbgprot_buffer_add_data -#define buffer_add_utf16 m_dbgprot_buffer_add_utf16 -#define buffer_add_byte_array m_dbgprot_buffer_add_byte_array -#define buffer_add_short m_dbgprot_buffer_add_short - -#define decode_id m_dbgprot_decode_id -#define decode_int m_dbgprot_decode_int -#define decode_byte m_dbgprot_decode_byte -#define decode_long m_dbgprot_decode_long -#define decode_string m_dbgprot_decode_string - -#define event_to_string m_dbgprot_event_to_string - -#define ErrorCode MdbgProtErrorCode - -#define FRAME_FLAG_DEBUGGER_INVOKE MDBGPROT_FRAME_FLAG_DEBUGGER_INVOKE -#define FRAME_FLAG_NATIVE_TRANSITION MDBGPROT_FRAME_FLAG_NATIVE_TRANSITION + +/* +FIXME: +- Move EventKind back to debugger-agent.c as it contains sdb wire protocol constants. +This is complicated because EventRequest has an event_kind field. + +*/ + +typedef enum { + EVENT_KIND_VM_START = 0, + EVENT_KIND_VM_DEATH = 1, + EVENT_KIND_THREAD_START = 2, + EVENT_KIND_THREAD_DEATH = 3, + EVENT_KIND_APPDOMAIN_CREATE = 4, + EVENT_KIND_APPDOMAIN_UNLOAD = 5, + EVENT_KIND_METHOD_ENTRY = 6, + EVENT_KIND_METHOD_EXIT = 7, + EVENT_KIND_ASSEMBLY_LOAD = 8, + EVENT_KIND_ASSEMBLY_UNLOAD = 9, + EVENT_KIND_BREAKPOINT = 10, + EVENT_KIND_STEP = 11, + EVENT_KIND_TYPE_LOAD = 12, + EVENT_KIND_EXCEPTION = 13, + EVENT_KIND_KEEPALIVE = 14, + EVENT_KIND_USER_BREAK = 15, + EVENT_KIND_USER_LOG = 16, + EVENT_KIND_CRASH = 17 +} EventKind; + +typedef enum { + MOD_KIND_COUNT = 1, + MOD_KIND_THREAD_ONLY = 3, + MOD_KIND_LOCATION_ONLY = 7, + MOD_KIND_EXCEPTION_ONLY = 8, + MOD_KIND_STEP = 10, + MOD_KIND_ASSEMBLY_ONLY = 11, + MOD_KIND_SOURCE_FILE_ONLY = 12, + MOD_KIND_TYPE_NAME_ONLY = 13, + MOD_KIND_NONE = 14 +} ModifierKind; + +typedef enum { + STEP_DEPTH_INTO = 0, + STEP_DEPTH_OVER = 1, + STEP_DEPTH_OUT = 2 +} StepDepth; + +typedef enum { + STEP_SIZE_MIN = 0, + STEP_SIZE_LINE = 1 +} StepSize; + +typedef enum { + STEP_FILTER_NONE = 0, + STEP_FILTER_STATIC_CTOR = 1, + STEP_FILTER_DEBUGGER_HIDDEN = 2, + STEP_FILTER_DEBUGGER_STEP_THROUGH = 4, + STEP_FILTER_DEBUGGER_NON_USER_CODE = 8 +} StepFilter; typedef struct { ModifierKind kind; diff --git a/mono/mini/debugger-protocol.c b/mono/mini/debugger-protocol.c deleted file mode 100644 index b2aa17d2a34..00000000000 --- a/mono/mini/debugger-protocol.c +++ /dev/null @@ -1,273 +0,0 @@ -#include "debugger-protocol.h" -#include -#include "glib.h" - -static int packet_id = 0; - -/* - * Functions to decode protocol data - */ -int -m_dbgprot_buffer_add_command_header (MdbgProtBuffer *data, int command_set, int command, MdbgProtBuffer *out) -{ - int id = mono_atomic_inc_i32 (&packet_id); - - int len = data->p - data->buf + HEADER_LENGTH; - m_dbgprot_buffer_init (out, len); - m_dbgprot_buffer_add_int (out, len); - m_dbgprot_buffer_add_int (out, id); - m_dbgprot_buffer_add_byte (out, 0); /* flags */ - m_dbgprot_buffer_add_byte (out, command_set); - m_dbgprot_buffer_add_byte (out, command); - m_dbgprot_buffer_add_data (out, data->buf, data->p - data->buf); - return id; -} - -void -m_dbgprot_decode_command_header (MdbgProtBuffer *recvbuf, MdbgProtHeader *header) -{ - header->len = m_dbgprot_decode_int (recvbuf->buf, &recvbuf->buf, recvbuf->end); - header->id = m_dbgprot_decode_int (recvbuf->buf, &recvbuf->buf, recvbuf->end); - header->flags = m_dbgprot_decode_byte (recvbuf->buf, &recvbuf->buf, recvbuf->end); - if (header->flags == REPLY_PACKET) { - header->error = m_dbgprot_decode_byte (recvbuf->buf, &recvbuf->buf, recvbuf->end); - header->error_2 = m_dbgprot_decode_byte (recvbuf->buf, &recvbuf->buf, recvbuf->end); - } - else { - header->command_set = m_dbgprot_decode_byte (recvbuf->buf, &recvbuf->buf, recvbuf->end); - header->command = m_dbgprot_decode_byte (recvbuf->buf, &recvbuf->buf, recvbuf->end); - } -} - -int -m_dbgprot_decode_byte (uint8_t *buf, uint8_t **endbuf, uint8_t *limit) -{ - *endbuf = buf + 1; - g_assert (*endbuf <= limit); - return buf [0]; -} - -int -m_dbgprot_decode_int (uint8_t *buf, uint8_t **endbuf, uint8_t *limit) -{ - *endbuf = buf + 4; - g_assert (*endbuf <= limit); - - return (((int)buf [0]) << 24) | (((int)buf [1]) << 16) | (((int)buf [2]) << 8) | (((int)buf [3]) << 0); -} - -int64_t -m_dbgprot_decode_long (uint8_t *buf, uint8_t **endbuf, uint8_t *limit) -{ - uint32_t high = m_dbgprot_decode_int (buf, &buf, limit); - uint32_t low = m_dbgprot_decode_int (buf, &buf, limit); - - *endbuf = buf; - - return ((((uint64_t)high) << 32) | ((uint64_t)low)); -} - -int -m_dbgprot_decode_id (uint8_t *buf, uint8_t **endbuf, uint8_t *limit) -{ - return m_dbgprot_decode_int (buf, endbuf, limit); -} - -char* -m_dbgprot_decode_string (uint8_t *buf, uint8_t **endbuf, uint8_t *limit) -{ - int len = m_dbgprot_decode_int (buf, &buf, limit); - char *s; - - if (len < 0) { - *endbuf = buf; - return NULL; - } - - s = (char *)g_malloc (len + 1); - g_assert (s); - - memcpy (s, buf, len); - s [len] = '\0'; - buf += len; - *endbuf = buf; - - return s; -} - -uint8_t* -m_dbgprot_decode_byte_array (uint8_t *buf, uint8_t **endbuf, uint8_t *limit, uint32_t *len) -{ - *len = m_dbgprot_decode_int (buf, &buf, limit); - uint8_t* s; - - if (len < 0) { - *endbuf = buf; - return NULL; - } - - s = (uint8_t*)g_malloc (*len); - g_assert (s); - - memcpy (s, buf, *len); - buf += *len; - *endbuf = buf; - - return s; -} - -/* - * Functions to encode protocol data - */ - -void -m_dbgprot_buffer_init (MdbgProtBuffer *buf, int size) -{ - buf->buf = (uint8_t *)g_malloc (size); - buf->p = buf->buf; - buf->end = buf->buf + size; -} - -int -m_dbgprot_buffer_len (MdbgProtBuffer *buf) -{ - return buf->p - buf->buf; -} - -void -m_dbgprot_buffer_make_room (MdbgProtBuffer *buf, int size) -{ - if (buf->end - buf->p < size) { - int new_size = buf->end - buf->buf + size + 32; - uint8_t *p = (uint8_t *)g_realloc (buf->buf, new_size); - size = buf->p - buf->buf; - buf->buf = p; - buf->p = p + size; - buf->end = buf->buf + new_size; - } -} - -void -m_dbgprot_buffer_add_byte (MdbgProtBuffer *buf, uint8_t val) -{ - m_dbgprot_buffer_make_room (buf, 1); - buf->p [0] = val; - buf->p++; -} - -void -m_dbgprot_buffer_add_short (MdbgProtBuffer *buf, uint32_t val) -{ - m_dbgprot_buffer_make_room (buf, 2); - buf->p [0] = (val >> 8) & 0xff; - buf->p [1] = (val >> 0) & 0xff; - buf->p += 2; -} - -void -m_dbgprot_buffer_add_int (MdbgProtBuffer *buf, uint32_t val) -{ - m_dbgprot_buffer_make_room (buf, 4); - buf->p [0] = (val >> 24) & 0xff; - buf->p [1] = (val >> 16) & 0xff; - buf->p [2] = (val >> 8) & 0xff; - buf->p [3] = (val >> 0) & 0xff; - buf->p += 4; -} - -void -m_dbgprot_buffer_add_long (MdbgProtBuffer *buf, uint64_t l) -{ - m_dbgprot_buffer_add_int (buf, (l >> 32) & 0xffffffff); - m_dbgprot_buffer_add_int (buf, (l >> 0) & 0xffffffff); -} - -void -m_dbgprot_buffer_add_id (MdbgProtBuffer *buf, int id) -{ - m_dbgprot_buffer_add_int (buf, (uint64_t)id); -} - -void -m_dbgprot_buffer_add_data (MdbgProtBuffer *buf, uint8_t *data, int len) -{ - m_dbgprot_buffer_make_room (buf, len); - memcpy (buf->p, data, len); - buf->p += len; -} - -void -m_dbgprot_buffer_add_utf16 (MdbgProtBuffer *buf, uint8_t *data, int len) -{ -#if G_BYTE_ORDER == G_LITTLE_ENDIAN - m_dbgprot_buffer_make_room (buf, len); - memcpy (buf->p, data, len); -#else - for (int i=0; ip[i] = data[i+1]; - buf->p[i+1] = data[i]; - } -#endif - buf->p += len; -} - -void -m_dbgprot_buffer_add_string (MdbgProtBuffer *buf, const char *str) -{ - int len; - - if (str == NULL) { - m_dbgprot_buffer_add_int (buf, 0); - } else { - len = strlen (str); - m_dbgprot_buffer_add_int (buf, len); - m_dbgprot_buffer_add_data (buf, (uint8_t*)str, len); - } -} - -void -m_dbgprot_buffer_add_byte_array (MdbgProtBuffer *buf, uint8_t *bytes, uint32_t arr_len) -{ - m_dbgprot_buffer_add_int (buf, arr_len); - m_dbgprot_buffer_add_data (buf, bytes, arr_len); -} - -void -m_dbgprot_buffer_add_buffer (MdbgProtBuffer *buf, MdbgProtBuffer *data) -{ - m_dbgprot_buffer_add_data (buf, data->buf, m_dbgprot_buffer_len (data)); -} - -void -m_dbgprot_buffer_free (MdbgProtBuffer *buf) -{ - g_free (buf->buf); -} - -const char* -m_dbgprot_event_to_string (MdbgProtEventKind event) -{ - switch (event) { - case MDBGPROT_EVENT_KIND_VM_START: return "VM_START"; - case MDBGPROT_EVENT_KIND_VM_DEATH: return "VM_DEATH"; - case MDBGPROT_EVENT_KIND_THREAD_START: return "THREAD_START"; - case MDBGPROT_EVENT_KIND_THREAD_DEATH: return "THREAD_DEATH"; - case MDBGPROT_EVENT_KIND_APPDOMAIN_CREATE: return "APPDOMAIN_CREATE"; - case MDBGPROT_EVENT_KIND_APPDOMAIN_UNLOAD: return "APPDOMAIN_UNLOAD"; - case MDBGPROT_EVENT_KIND_METHOD_ENTRY: return "METHOD_ENTRY"; - case MDBGPROT_EVENT_KIND_METHOD_EXIT: return "METHOD_EXIT"; - case MDBGPROT_EVENT_KIND_ASSEMBLY_LOAD: return "ASSEMBLY_LOAD"; - case MDBGPROT_EVENT_KIND_ASSEMBLY_UNLOAD: return "ASSEMBLY_UNLOAD"; - case MDBGPROT_EVENT_KIND_BREAKPOINT: return "BREAKPOINT"; - case MDBGPROT_EVENT_KIND_STEP: return "STEP"; - case MDBGPROT_EVENT_KIND_TYPE_LOAD: return "TYPE_LOAD"; - case MDBGPROT_EVENT_KIND_EXCEPTION: return "EXCEPTION"; - case MDBGPROT_EVENT_KIND_KEEPALIVE: return "KEEPALIVE"; - case MDBGPROT_EVENT_KIND_USER_BREAK: return "USER_BREAK"; - case MDBGPROT_EVENT_KIND_USER_LOG: return "USER_LOG"; - case MDBGPROT_EVENT_KIND_CRASH: return "CRASH"; - default: - g_assert_not_reached (); - return ""; - } -} diff --git a/mono/mini/debugger-protocol.h b/mono/mini/debugger-protocol.h deleted file mode 100644 index fbf42f54857..00000000000 --- a/mono/mini/debugger-protocol.h +++ /dev/null @@ -1,367 +0,0 @@ -#ifndef __MONO_DEBUGGER_PROTOCOL_H__ -#define __MONO_DEBUGGER_PROTOCOL_H__ - -#include - -#define HEADER_LENGTH 11 -#define REPLY_PACKET 0x80 - -/* - * Wire Protocol definitions - */ - -#define MAJOR_VERSION 3 -#define MINOR_VERSION 0 - -typedef enum { - MDBGPROT_CMD_COMPOSITE = 100 -} MdbgProtCmdComposite; - -typedef enum { - MDBGPROT_CMD_VM_VERSION = 1, - MDBGPROT_CMD_VM_ALL_THREADS = 2, - MDBGPROT_CMD_VM_SUSPEND = 3, - MDBGPROT_CMD_VM_RESUME = 4, - MDBGPROT_CMD_VM_EXIT = 5, - MDBGPROT_CMD_VM_DISPOSE = 6, - MDBGPROT_CMD_VM_INVOKE_METHOD = 7, - MDBGPROT_CMD_VM_SET_PROTOCOL_VERSION = 8, - MDBGPROT_CMD_VM_ABORT_INVOKE = 9, - MDBGPROT_CMD_VM_SET_KEEPALIVE = 10, - MDBGPROT_CMD_VM_GET_TYPES_FOR_SOURCE_FILE = 11, - MDBGPROT_CMD_VM_GET_TYPES = 12, - MDBGPROT_CMD_VM_INVOKE_METHODS = 13, - MDBGPROT_CMD_VM_START_BUFFERING = 14, - MDBGPROT_CMD_VM_STOP_BUFFERING = 15 -} MdbgProtCmdVM; - -typedef enum { - MDBGPROT_CMD_SET_VM = 1, - MDBGPROT_CMD_SET_OBJECT_REF = 9, - MDBGPROT_CMD_SET_STRING_REF = 10, - MDBGPROT_CMD_SET_THREAD = 11, - MDBGPROT_CMD_SET_ARRAY_REF = 13, - MDBGPROT_CMD_SET_EVENT_REQUEST = 15, - MDBGPROT_CMD_SET_STACK_FRAME = 16, - MDBGPROT_CMD_SET_APPDOMAIN = 20, - MDBGPROT_CMD_SET_ASSEMBLY = 21, - MDBGPROT_CMD_SET_METHOD = 22, - MDBGPROT_CMD_SET_TYPE = 23, - MDBGPROT_CMD_SET_MODULE = 24, - MDBGPROT_CMD_SET_FIELD = 25, - MDBGPROT_CMD_SET_EVENT = 64, - MDBGPROT_CMD_SET_POINTER = 65 -} MdbgProtCommandSet; - -typedef enum { - MDBGPROT_ERR_NONE = 0, - MDBGPROT_ERR_INVALID_OBJECT = 20, - MDBGPROT_ERR_INVALID_FIELDID = 25, - MDBGPROT_ERR_INVALID_FRAMEID = 30, - MDBGPROT_ERR_NOT_IMPLEMENTED = 100, - MDBGPROT_ERR_NOT_SUSPENDED = 101, - MDBGPROT_ERR_INVALID_ARGUMENT = 102, - MDBGPROT_ERR_UNLOADED = 103, - MDBGPROT_ERR_NO_INVOCATION = 104, - MDBGPROT_ERR_ABSENT_INFORMATION = 105, - MDBGPROT_ERR_NO_SEQ_POINT_AT_IL_OFFSET = 106, - MDBGPROT_ERR_INVOKE_ABORTED = 107, - MDBGPROT_ERR_LOADER_ERROR = 200, /*XXX extend the protocol to pass this information down the pipe */ -} MdbgProtErrorCode; - -typedef enum { - MDBGPROT_TOKEN_TYPE_STRING = 0, - MDBGPROT_TOKEN_TYPE_TYPE = 1, - MDBGPROT_TOKEN_TYPE_FIELD = 2, - MDBGPROT_TOKEN_TYPE_METHOD = 3, - MDBGPROT_TOKEN_TYPE_UNKNOWN = 4 -} MdbgProtDebuggerTokenType; - -typedef enum { - MDBGPROT_VALUE_TYPE_ID_NULL = 0xf0, - MDBGPROT_VALUE_TYPE_ID_TYPE = 0xf1, - MDBGPROT_VALUE_TYPE_ID_PARENT_VTYPE = 0xf2, - MDBGPROT_VALUE_TYPE_ID_FIXED_ARRAY = 0xf3 -} MdbgProtValueTypeId; - -typedef enum { - MDBGPROT_FRAME_FLAG_DEBUGGER_INVOKE = 1, - MDBGPROT_FRAME_FLAG_NATIVE_TRANSITION = 2 -} MdbgProtStackFrameFlags; - -typedef enum { - MDBGPROT_INVOKE_FLAG_DISABLE_BREAKPOINTS = 1, - MDBGPROT_INVOKE_FLAG_SINGLE_THREADED = 2, - MDBGPROT_INVOKE_FLAG_RETURN_OUT_THIS = 4, - MDBGPROT_INVOKE_FLAG_RETURN_OUT_ARGS = 8, - MDBGPROT_INVOKE_FLAG_VIRTUAL = 16 -} MdbgProtInvokeFlags; - -typedef enum { - BINDING_FLAGS_IGNORE_CASE = 0x70000000, -} MdbgProtBindingFlagsExtensions; - -typedef enum { - MDBGPROT_CMD_THREAD_GET_FRAME_INFO = 1, - MDBGPROT_CMD_THREAD_GET_NAME = 2, - MDBGPROT_CMD_THREAD_GET_STATE = 3, - MDBGPROT_CMD_THREAD_GET_INFO = 4, - MDBGPROT_CMD_THREAD_GET_ID = 5, - MDBGPROT_CMD_THREAD_GET_TID = 6, - MDBGPROT_CMD_THREAD_SET_IP = 7, - MDBGPROT_CMD_THREAD_ELAPSED_TIME = 8 -} MdbgProtCmdThread; - -typedef enum { - MDBGPROT_CMD_APPDOMAIN_GET_ROOT_DOMAIN = 1, - MDBGPROT_CMD_APPDOMAIN_GET_FRIENDLY_NAME = 2, - MDBGPROT_CMD_APPDOMAIN_GET_ASSEMBLIES = 3, - MDBGPROT_CMD_APPDOMAIN_GET_ENTRY_ASSEMBLY = 4, - MDBGPROT_CMD_APPDOMAIN_CREATE_STRING = 5, - MDBGPROT_CMD_APPDOMAIN_GET_CORLIB = 6, - MDBGPROT_CMD_APPDOMAIN_CREATE_BOXED_VALUE = 7, - MDBGPROT_CMD_APPDOMAIN_CREATE_BYTE_ARRAY = 8, -} MdbgProtCmdAppDomain; - -typedef enum { - MDBGPROT_CMD_ASSEMBLY_GET_LOCATION = 1, - MDBGPROT_CMD_ASSEMBLY_GET_ENTRY_POINT = 2, - MDBGPROT_CMD_ASSEMBLY_GET_MANIFEST_MODULE = 3, - MDBGPROT_CMD_ASSEMBLY_GET_OBJECT = 4, - MDBGPROT_CMD_ASSEMBLY_GET_TYPE = 5, - MDBGPROT_CMD_ASSEMBLY_GET_NAME = 6, - MDBGPROT_CMD_ASSEMBLY_GET_DOMAIN = 7, - MDBGPROT_CMD_ASSEMBLY_GET_METADATA_BLOB = 8, - MDBGPROT_CMD_ASSEMBLY_GET_IS_DYNAMIC = 9, - MDBGPROT_CMD_ASSEMBLY_GET_PDB_BLOB = 10, - MDBGPROT_CMD_ASSEMBLY_GET_TYPE_FROM_TOKEN = 11, - MDBGPROT_CMD_ASSEMBLY_GET_METHOD_FROM_TOKEN = 12, - MDBGPROT_CMD_ASSEMBLY_HAS_DEBUG_INFO = 13, - MDBGPROT_CMD_ASSEMBLY_GET_CATTRS = 14, - MDBGPROT_CMD_ASSEMBLY_GET_CUSTOM_ATTRIBUTES = 15 -} MdbgProtCmdAssembly; - -typedef enum { - MDBGPROT_CMD_MODULE_GET_INFO = 1, -} MdbgProtCmdModule; - -typedef enum { - MDBGPROT_CMD_FIELD_GET_INFO = 1, -} MdbgProtCmdField; - -typedef enum { - MDBGPROT_CMD_PROPERTY_GET_INFO = 1, -} MdbgProtCmdProperty; - -typedef enum { - MDBGPROT_CMD_METHOD_GET_NAME = 1, - MDBGPROT_CMD_METHOD_GET_DECLARING_TYPE = 2, - MDBGPROT_CMD_METHOD_GET_DEBUG_INFO = 3, - MDBGPROT_CMD_METHOD_GET_PARAM_INFO = 4, - MDBGPROT_CMD_METHOD_GET_LOCALS_INFO = 5, - MDBGPROT_CMD_METHOD_GET_INFO = 6, - MDBGPROT_CMD_METHOD_GET_BODY = 7, - MDBGPROT_CMD_METHOD_RESOLVE_TOKEN = 8, - MDBGPROT_CMD_METHOD_GET_CATTRS = 9, - MDBGPROT_CMD_METHOD_MAKE_GENERIC_METHOD = 10, - MDBGPROT_CMD_METHOD_TOKEN = 11, - MDBGPROT_CMD_METHOD_ASSEMBLY = 12 -} MdbgProtCmdMethod; - -typedef enum { - MDBGPROT_CMD_TYPE_GET_INFO = 1, - MDBGPROT_CMD_TYPE_GET_METHODS = 2, - MDBGPROT_CMD_TYPE_GET_FIELDS = 3, - MDBGPROT_CMD_TYPE_GET_VALUES = 4, - MDBGPROT_CMD_TYPE_GET_OBJECT = 5, - MDBGPROT_CMD_TYPE_GET_SOURCE_FILES = 6, - MDBGPROT_CMD_TYPE_SET_VALUES = 7, - MDBGPROT_CMD_TYPE_IS_ASSIGNABLE_FROM = 8, - MDBGPROT_CMD_TYPE_GET_PROPERTIES = 9, - MDBGPROT_CMD_TYPE_GET_CATTRS = 10, - MDBGPROT_CMD_TYPE_GET_FIELD_CATTRS = 11, - MDBGPROT_CMD_TYPE_GET_PROPERTY_CATTRS = 12, - MDBGPROT_CMD_TYPE_GET_SOURCE_FILES_2 = 13, - MDBGPROT_CMD_TYPE_GET_VALUES_2 = 14, - MDBGPROT_CMD_TYPE_GET_METHODS_BY_NAME_FLAGS = 15, - MDBGPROT_CMD_TYPE_GET_INTERFACES = 16, - MDBGPROT_CMD_TYPE_GET_INTERFACE_MAP = 17, - MDBGPROT_CMD_TYPE_IS_INITIALIZED = 18, - MDBGPROT_CMD_TYPE_CREATE_INSTANCE = 19, - MDBGPROT_CMD_TYPE_GET_VALUE_SIZE = 20 -} MdbgProtCmdType; - -typedef enum { - MDBGPROT_CMD_STACK_FRAME_GET_VALUES = 1, - MDBGPROT_CMD_STACK_FRAME_GET_THIS = 2, - MDBGPROT_CMD_STACK_FRAME_SET_VALUES = 3, - MDBGPROT_CMD_STACK_FRAME_GET_DOMAIN = 4, - MDBGPROT_CMD_STACK_FRAME_SET_THIS = 5, - MDBGPROT_CMD_STACK_FRAME_GET_ARGUMENT = 6, -} MdbgProtCmdStackFrame; - -typedef enum { - MDBGPROT_CMD_ARRAY_REF_GET_LENGTH = 1, - MDBGPROT_CMD_ARRAY_REF_GET_VALUES = 2, - MDBGPROT_CMD_ARRAY_REF_SET_VALUES = 3, - MDBGPROT_CMD_ARRAY_REF_GET_TYPE = 4 -} MdbgProtCmdArray; - -typedef enum { - MDBGPROT_CMD_STRING_REF_GET_VALUE = 1, - MDBGPROT_CMD_STRING_REF_GET_LENGTH = 2, - MDBGPROT_CMD_STRING_REF_GET_CHARS = 3 -} MdbgProtCmdString; - -typedef enum { - MDBGPROT_CMD_POINTER_GET_VALUE = 1 -} MdbgProtCmdPointer; - -typedef enum { - MDBGPROT_CMD_OBJECT_REF_GET_TYPE = 1, - MDBGPROT_CMD_OBJECT_REF_GET_VALUES = 2, - MDBGPROT_CMD_OBJECT_REF_IS_COLLECTED = 3, - MDBGPROT_CMD_OBJECT_REF_GET_ADDRESS = 4, - MDBGPROT_CMD_OBJECT_REF_GET_DOMAIN = 5, - MDBGPROT_CMD_OBJECT_REF_SET_VALUES = 6, - MDBGPROT_CMD_OBJECT_REF_GET_INFO = 7, - MDBGPROT_CMD_OBJECT_REF_GET_VALUES_ICORDBG = 8 -} MdbgProtCmdObject; - -typedef enum { - MDBGPROT_SUSPEND_POLICY_NONE = 0, - MDBGPROT_SUSPEND_POLICY_EVENT_THREAD = 1, - MDBGPROT_SUSPEND_POLICY_ALL = 2 -} MdbgProtSuspendPolicy; - -typedef enum { - MDBGPROT_CMD_EVENT_REQUEST_SET = 1, - MDBGPROT_CMD_EVENT_REQUEST_CLEAR = 2, - MDBGPROT_CMD_EVENT_REQUEST_CLEAR_ALL_BREAKPOINTS = 3 -} MdbgProtCmdEvent; - -typedef struct { - uint8_t *buf, *p, *end; -} MdbgProtBuffer; - -typedef struct { - int len; - int id; - int flags; - int command_set; - int command; - int error; - int error_2; -} MdbgProtHeader; - -typedef struct ReplyPacket { - int id; - int error; - MdbgProtBuffer *data; -} MdbgProtReplyPacket; - -typedef enum { - MDBGPROT_EVENT_KIND_VM_START = 0, - MDBGPROT_EVENT_KIND_VM_DEATH = 1, - MDBGPROT_EVENT_KIND_THREAD_START = 2, - MDBGPROT_EVENT_KIND_THREAD_DEATH = 3, - MDBGPROT_EVENT_KIND_APPDOMAIN_CREATE = 4, - MDBGPROT_EVENT_KIND_APPDOMAIN_UNLOAD = 5, - MDBGPROT_EVENT_KIND_METHOD_ENTRY = 6, - MDBGPROT_EVENT_KIND_METHOD_EXIT = 7, - MDBGPROT_EVENT_KIND_ASSEMBLY_LOAD = 8, - MDBGPROT_EVENT_KIND_ASSEMBLY_UNLOAD = 9, - MDBGPROT_EVENT_KIND_BREAKPOINT = 10, - MDBGPROT_EVENT_KIND_STEP = 11, - MDBGPROT_EVENT_KIND_TYPE_LOAD = 12, - MDBGPROT_EVENT_KIND_EXCEPTION = 13, - MDBGPROT_EVENT_KIND_KEEPALIVE = 14, - MDBGPROT_EVENT_KIND_USER_BREAK = 15, - MDBGPROT_EVENT_KIND_USER_LOG = 16, - MDBGPROT_EVENT_KIND_CRASH = 17 -} MdbgProtEventKind; - -typedef enum { - MDBGPROT_MOD_KIND_COUNT = 1, - MDBGPROT_MOD_KIND_THREAD_ONLY = 3, - MDBGPROT_MOD_KIND_LOCATION_ONLY = 7, - MDBGPROT_MOD_KIND_EXCEPTION_ONLY = 8, - MDBGPROT_MOD_KIND_STEP = 10, - MDBGPROT_MOD_KIND_ASSEMBLY_ONLY = 11, - MDBGPROT_MOD_KIND_SOURCE_FILE_ONLY = 12, - MDBGPROT_MOD_KIND_TYPE_NAME_ONLY = 13, - MDBGPROT_MOD_KIND_NONE = 14 -} MdbgProtModifierKind; - -typedef enum { - MDBGPROT_STEP_DEPTH_INTO = 0, - MDBGPROT_STEP_DEPTH_OVER = 1, - MDBGPROT_STEP_DEPTH_OUT = 2 -} MdbgProtStepDepth; - -typedef enum { - MDBGPROT_STEP_SIZE_MIN = 0, - MDBGPROT_STEP_SIZE_LINE = 1 -} MdbgProtStepSize; - -typedef enum { - MDBGPROT_STEP_FILTER_NONE = 0, - MDBGPROT_STEP_FILTER_STATIC_CTOR = 1, - MDBGPROT_STEP_FILTER_DEBUGGER_HIDDEN = 2, - MDBGPROT_STEP_FILTER_DEBUGGER_STEP_THROUGH = 4, - MDBGPROT_STEP_FILTER_DEBUGGER_NON_USER_CODE = 8 -} MdbgProtStepFilter; - -/* - * IDS - */ - -typedef enum { - ID_ASSEMBLY = 0, - ID_MODULE = 1, - ID_TYPE = 2, - ID_METHOD = 3, - ID_FIELD = 4, - ID_DOMAIN = 5, - ID_PROPERTY = 6, - ID_PARAMETER = 7, - ID_NUM -} IdType; - -int m_dbgprot_buffer_add_command_header (MdbgProtBuffer *recvbuf, int cmd_set, int cmd, MdbgProtBuffer *out); -void m_dbgprot_decode_command_header (MdbgProtBuffer *recvbuf, MdbgProtHeader *header); - -/* - * Functions to decode protocol data - */ - -int m_dbgprot_decode_byte (uint8_t *buf, uint8_t **endbuf, uint8_t *limit); -int m_dbgprot_decode_int (uint8_t *buf, uint8_t **endbuf, uint8_t *limit); -int64_t m_dbgprot_decode_long (uint8_t *buf, uint8_t **endbuf, uint8_t *limit); -int m_dbgprot_decode_id (uint8_t *buf, uint8_t **endbuf, uint8_t *limit); -char* m_dbgprot_decode_string (uint8_t *buf, uint8_t **endbuf, uint8_t *limit); -uint8_t* m_dbgprot_decode_byte_array(uint8_t* buf, uint8_t** endbuf, uint8_t* limit, uint32_t* len); - -/* - * Functions to encode protocol data - */ - -void m_dbgprot_buffer_init (MdbgProtBuffer *buf, int size); -int m_dbgprot_buffer_len (MdbgProtBuffer *buf); -void m_dbgprot_buffer_make_room (MdbgProtBuffer *buf, int size); -void m_dbgprot_buffer_add_byte (MdbgProtBuffer *buf, uint8_t val); -void m_dbgprot_buffer_add_short (MdbgProtBuffer *buf, uint32_t val); -void m_dbgprot_buffer_add_int (MdbgProtBuffer *buf, uint32_t val); -void m_dbgprot_buffer_add_long (MdbgProtBuffer *buf, uint64_t l); -void m_dbgprot_buffer_add_id (MdbgProtBuffer *buf, int id); -void m_dbgprot_buffer_add_data (MdbgProtBuffer *buf, uint8_t *data, int len); -void m_dbgprot_buffer_add_utf16 (MdbgProtBuffer *buf, uint8_t *data, int len); -void m_dbgprot_buffer_add_string (MdbgProtBuffer *buf, const char *str); -void m_dbgprot_buffer_add_byte_array (MdbgProtBuffer *buf, uint8_t *bytes, uint32_t arr_len); -void m_dbgprot_buffer_add_buffer (MdbgProtBuffer *buf, MdbgProtBuffer *data); -void m_dbgprot_buffer_free (MdbgProtBuffer *buf); - -const char* m_dbgprot_event_to_string (MdbgProtEventKind event); - -#endif - diff --git a/msvc/libmini-common.targets b/msvc/libmini-common.targets index cea4d8df29c..f151afb4b53 100644 --- a/msvc/libmini-common.targets +++ b/msvc/libmini-common.targets @@ -59,8 +59,6 @@ - - diff --git a/msvc/libmini-common.targets.filters b/msvc/libmini-common.targets.filters index 05e54de1fdf..0bb299e7dca 100644 --- a/msvc/libmini-common.targets.filters +++ b/msvc/libmini-common.targets.filters @@ -175,12 +175,6 @@ Source Files$(MonoMiniFilterSubFolder)\common - - Header Files$(MonoMiniFilterSubFolder)\common - - - Source Files$(MonoMiniFilterSubFolder)\common - Header Files$(MonoMiniFilterSubFolder)\common -- 2.11.4.GIT