X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fmono-debug-debugger.h;h=ed6efa072945478e099bcf7ad2a70db1f80a9f8d;hb=7e359c0a6fedd55141d94239e0aa35af6450b1c7;hp=04042a0343de2f43b0df88b389ff68cb9d7e2042;hpb=ff228e1c801bda9666b6edab3ee962e05edcf480;p=mono.git diff --git a/mono/metadata/mono-debug-debugger.h b/mono/metadata/mono-debug-debugger.h index 04042a0343d..ed6efa07294 100644 --- a/mono/metadata/mono-debug-debugger.h +++ b/mono/metadata/mono-debug-debugger.h @@ -1,6 +1,7 @@ /* - * This header is only installed for use by the debugger: - * the structures and the API declared here are not supported. + * This is a private header file. + * The API in here is undocumented and may only be used by the JIT to + * communicate with the debugger. */ #ifndef __MONO_DEBUG_DEBUGGER_H__ @@ -9,123 +10,85 @@ #include #include #include +#include #include -typedef struct _MonoDebuggerBreakpointInfo MonoDebuggerBreakpointInfo; -typedef struct _MonoDebuggerIOLayer MonoDebuggerIOLayer; - typedef enum { - MONO_DEBUGGER_EVENT_BREAKPOINT, - MONO_DEBUGGER_EVENT_ADD_MODULE, - MONO_DEBUGGER_EVENT_RELOAD_SYMTABS, + MONO_DEBUGGER_EVENT_INITIALIZE_MANAGED_CODE = 1, + MONO_DEBUGGER_EVENT_INITIALIZE_CORLIB, + MONO_DEBUGGER_EVENT_JIT_BREAKPOINT, + MONO_DEBUGGER_EVENT_INITIALIZE_THREAD_MANAGER, + MONO_DEBUGGER_EVENT_ACQUIRE_GLOBAL_THREAD_LOCK, + MONO_DEBUGGER_EVENT_RELEASE_GLOBAL_THREAD_LOCK, + MONO_DEBUGGER_EVENT_WRAPPER_MAIN, + MONO_DEBUGGER_EVENT_MAIN_EXITED, MONO_DEBUGGER_EVENT_UNHANDLED_EXCEPTION, - MONO_DEBUGGER_EVENT_EXCEPTION, - MONO_DEBUGGER_EVENT_THROW_EXCEPTION + MONO_DEBUGGER_EVENT_THROW_EXCEPTION, + MONO_DEBUGGER_EVENT_HANDLE_EXCEPTION, + MONO_DEBUGGER_EVENT_THREAD_CREATED, + MONO_DEBUGGER_EVENT_THREAD_CLEANUP, + MONO_DEBUGGER_EVENT_GC_THREAD_CREATED, + MONO_DEBUGGER_EVENT_GC_THREAD_EXITED, + MONO_DEBUGGER_EVENT_REACHED_MAIN, + MONO_DEBUGGER_EVENT_FINALIZE_MANAGED_CODE, + MONO_DEBUGGER_EVENT_LOAD_MODULE, + MONO_DEBUGGER_EVENT_UNLOAD_MODULE, + MONO_DEBUGGER_EVENT_DOMAIN_CREATE, + MONO_DEBUGGER_EVENT_DOMAIN_UNLOAD, + MONO_DEBUGGER_EVENT_CLASS_INITIALIZED, + MONO_DEBUGGER_EVENT_INTERRUPTION_REQUEST, + MONO_DEBUGGER_EVENT_CREATE_APPDOMAIN, + MONO_DEBUGGER_EVENT_UNLOAD_APPDOMAIN, + + /* Obsolete, only for backwards compatibility with older debugger versions */ + MONO_DEBUGGER_EVENT_OLD_TRAMPOLINE = 256, + + MONO_DEBUGGER_EVENT_TRAMPOLINE = 512 } MonoDebuggerEvent; -struct _MonoDebuggerBreakpointInfo { - guint32 index; - MonoMethodDesc *desc; -}; - -/* - * Address of the x86 trampoline code. This is used by the debugger to check - * whether a method is a trampoline. - */ -extern guint8 *mono_generic_trampoline_code; - -#ifndef PLATFORM_WIN32 - -/* - * Functions we export to the debugger. - */ -struct _MonoDebuggerIOLayer -{ - void (*InitializeCriticalSection) (WapiCriticalSection *section); - void (*DeleteCriticalSection) (WapiCriticalSection *section); - gboolean (*TryEnterCriticalSection) (WapiCriticalSection *section); - void (*EnterCriticalSection) (WapiCriticalSection *section); - void (*LeaveCriticalSection) (WapiCriticalSection *section); - - guint32 (*WaitForSingleObject) (gpointer handle, guint32 timeout, - gboolean alertable); - guint32 (*SignalObjectAndWait) (gpointer signal_handle, gpointer wait, - guint32 timeout, gboolean alertable); - guint32 (*WaitForMultipleObjects) (guint32 numobjects, gpointer *handles, - gboolean waitall, guint32 timeout, gboolean alertable); - - gpointer (*CreateSemaphore) (WapiSecurityAttributes *security, - gint32 initial, gint32 max, - const gunichar2 *name); - gboolean (*ReleaseSemaphore) (gpointer handle, gint32 count, gint32 *prevcount); - - gpointer (*CreateThread) (WapiSecurityAttributes *security, - guint32 stacksize, WapiThreadStart start, - gpointer param, guint32 create, guint32 *tid); - guint32 (*GetCurrentThreadId) (void); -}; - -extern MonoDebuggerIOLayer mono_debugger_io_layer; - -#endif +extern volatile gint32 _mono_debugger_interruption_request; extern void (*mono_debugger_event_handler) (MonoDebuggerEvent event, guint64 data, guint64 arg); -void mono_debugger_initialize (void); -void mono_debugger_cleanup (void); - -void mono_debugger_lock (void); -void mono_debugger_unlock (void); -void mono_debugger_event (MonoDebuggerEvent event, guint64 data, guint64 arg); - -void mono_debugger_add_symbol_file (MonoDebugHandle *handle); -void mono_debugger_start_add_type (MonoDebugHandle *symfile, MonoClass *klass); -void mono_debugger_add_type (MonoDebugHandle *symfile, MonoClass *klass); -void mono_debugger_add_builtin_types (MonoDebugHandle *symfile); - -void mono_debugger_add_method (MonoDebugMethodJitInfo *jit); +void mono_debugger_initialize (gboolean use_debugger); +void mono_debugger_cleanup (void); -void mono_debugger_add_wrapper (MonoMethod *wrapper, - MonoDebugMethodJitInfo *jit, - gpointer addr); +void mono_debugger_lock (void); +void mono_debugger_unlock (void); +void mono_debugger_event (MonoDebuggerEvent event, guint64 data, guint64 arg); +void * +mono_vtable_get_static_field_data (MonoVTable *vt); -int mono_debugger_insert_breakpoint_full (MonoMethodDesc *desc); -int mono_debugger_remove_breakpoint (int breakpoint_id); -int mono_debugger_insert_breakpoint (const gchar *method_name, gboolean include_namespace); -int mono_debugger_method_has_breakpoint (MonoMethod *method); -void mono_debugger_breakpoint_callback (MonoMethod *method, guint32 idx); - -gpointer mono_debugger_create_notification_function (gpointer *notification_address); - -MonoObject *mono_debugger_runtime_invoke (MonoMethod *method, void *obj, - void **params, MonoObject **exc); - -gboolean mono_debugger_lookup_type (const gchar *type_name); -gint32 mono_debugger_lookup_assembly (const gchar *name); -gboolean mono_debugger_unhandled_exception (gpointer addr, gpointer stack, MonoObject *exc); -void mono_debugger_handle_exception (gpointer addr, gpointer stack, MonoObject *exc); -gboolean mono_debugger_throw_exception (gpointer addr, gpointer stack, MonoObject *exc); +gchar * +mono_debugger_check_runtime_version (const char *filename); +void +mono_debugger_class_initialized (MonoClass *klass); +void +mono_debugger_check_interruption (void); -void * -mono_vtable_get_static_field_data (MonoVTable *vt); +void +mono_debugger_event_create_appdomain (MonoDomain *domain, gchar *shadow_path); +void +mono_debugger_event_unload_appdomain (MonoDomain *domain); -MonoReflectionMethod * -ves_icall_MonoDebugger_GetMethod (MonoReflectionAssembly *assembly, guint32 token); +MonoDebugMethodAddressList * +mono_debugger_insert_method_breakpoint (MonoMethod *method, guint64 idx); int -ves_icall_MonoDebugger_GetMethodToken (MonoReflectionAssembly *assembly, MonoReflectionMethod *method); +mono_debugger_remove_method_breakpoint (guint64 index); -MonoReflectionType * -ves_icall_MonoDebugger_GetLocalTypeFromSignature (MonoReflectionAssembly *assembly, MonoArray *signature); +void +mono_debugger_check_breakpoints (MonoMethod *method, MonoDebugMethodAddress *debug_info); -MonoReflectionType * -ves_icall_MonoDebugger_GetType (MonoReflectionAssembly *assembly, guint32 token); +MonoClass * +mono_debugger_register_class_init_callback (MonoImage *image, const gchar *full_name, + guint32 token, guint32 index); -gchar * -mono_debugger_check_runtime_version (const char *filename); +void +mono_debugger_remove_class_init_callback (int index); #endif /* __MONO_DEBUG_DEBUGGER_H__ */