X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini.h;h=e9ab524ff1314e03928cda75cd04e7acbae1911e;hb=ce992c6c6fd36ae236298c819e324bab81129642;hp=184e9fc0f57a0d741487a73d064bd576f364e404;hpb=5a35198e2fdb794d48af81d80e783644a29d7291;p=mono.git diff --git a/mono/mini/mini.h b/mono/mini/mini.h index 184e9fc0f57..e9ab524ff13 100644 --- a/mono/mini/mini.h +++ b/mono/mini/mini.h @@ -1,3 +1,8 @@ +/* + * Copyright 2002-2003 Ximian Inc + * Copyright 2003-2011 Novell Inc + * Copyright 2011 Xamarin Inc + */ #ifndef __MONO_MINI_H__ #define __MONO_MINI_H__ @@ -113,7 +118,7 @@ #endif /* Version number of the AOT file format */ -#define MONO_AOT_FILE_VERSION 75 +#define MONO_AOT_FILE_VERSION 82 //TODO: This is x86/amd64 specific. #define mono_simd_shuffle_mask(a,b,c,d) ((a) | ((b) << 2) | ((c) << 4) | ((d) << 6)) @@ -121,17 +126,35 @@ /* Constants used to encode different types of methods in AOT */ enum { MONO_AOT_METHODREF_MIN = 240, - /* Method encoded using its name */ - MONO_AOT_METHODREF_WRAPPER_NAME = 250, /* Runtime provided methods on arrays */ - MONO_AOT_METHODREF_ARRAY = 251, - MONO_AOT_METHODREF_NO_AOT_TRAMPOLINE = 252, + MONO_AOT_METHODREF_ARRAY = 250, + MONO_AOT_METHODREF_NO_AOT_TRAMPOLINE = 251, /* Wrappers */ - MONO_AOT_METHODREF_WRAPPER = 253, + MONO_AOT_METHODREF_WRAPPER = 252, /* Methods on generic instances */ - MONO_AOT_METHODREF_GINST = 254, + MONO_AOT_METHODREF_GINST = 253, /* Methods resolve using a METHODSPEC token */ - MONO_AOT_METHODREF_METHODSPEC = 255, + MONO_AOT_METHODREF_METHODSPEC = 254, +}; + +/* Constants used to encode different types of types in AOT */ +enum { + /* typedef index */ + MONO_AOT_TYPEREF_TYPEDEF_INDEX = 1, + /* typedef index + image index */ + MONO_AOT_TYPEREF_TYPEDEF_INDEX_IMAGE = 2, + /* typespec token */ + MONO_AOT_TYPEREF_TYPESPEC_TOKEN = 3, + /* generic inst */ + MONO_AOT_TYPEREF_GINST = 4, + /* type/method variable */ + MONO_AOT_TYPEREF_VAR = 5, + /* array */ + MONO_AOT_TYPEREF_ARRAY = 6, + /* blob index of the type encoding */ + MONO_AOT_TYPEREF_BLOB_INDEX = 7, + /* ptr */ + MONO_AOT_TYPEREF_PTR = 8 }; /* Trampolines which we have a lot of */ @@ -201,6 +224,10 @@ typedef struct MonoAotFileInfo gpointer globals; /* Points to a string containing the assembly name*/ gpointer assembly_name; + /* Points to a table mapping methods to their unbox trampolines */ + gpointer unbox_trampolines; + /* Points to the end of the previous table */ + gpointer unbox_trampolines_end; /* The index of the first GOT slot used by the PLT */ guint32 plt_got_offset_base; @@ -984,6 +1011,48 @@ typedef struct { MonoContext ctx; /* if debugger_invoke is TRUE */ } MonoLMFExt; +/* Generic sharing */ +typedef enum { + MONO_RGCTX_INFO_STATIC_DATA, + MONO_RGCTX_INFO_KLASS, + MONO_RGCTX_INFO_VTABLE, + MONO_RGCTX_INFO_TYPE, + MONO_RGCTX_INFO_REFLECTION_TYPE, + MONO_RGCTX_INFO_METHOD, + MONO_RGCTX_INFO_GENERIC_METHOD_CODE, + MONO_RGCTX_INFO_CLASS_FIELD, + MONO_RGCTX_INFO_METHOD_RGCTX, + MONO_RGCTX_INFO_METHOD_CONTEXT, + MONO_RGCTX_INFO_REMOTING_INVOKE_WITH_CHECK, + MONO_RGCTX_INFO_METHOD_DELEGATE_CODE, + MONO_RGCTX_INFO_CAST_CACHE +} MonoRgctxInfoType; + +typedef struct _MonoRuntimeGenericContextOtherInfoTemplate { + MonoRgctxInfoType info_type; + gpointer data; + struct _MonoRuntimeGenericContextOtherInfoTemplate *next; +} MonoRuntimeGenericContextOtherInfoTemplate; + +typedef struct { + MonoClass *next_subclass; + MonoRuntimeGenericContextOtherInfoTemplate *other_infos; + GSList *method_templates; +} MonoRuntimeGenericContextTemplate; + +typedef struct { + MonoVTable *class_vtable; /* must be the first element */ + MonoGenericInst *method_inst; + gpointer infos [MONO_ZERO_LEN_ARRAY]; +} MonoMethodRuntimeGenericContext; + +#define MONO_SIZEOF_METHOD_RUNTIME_GENERIC_CONTEXT (sizeof (MonoMethodRuntimeGenericContext) - MONO_ZERO_LEN_ARRAY * SIZEOF_VOID_P) + +#define MONO_RGCTX_SLOT_MAKE_RGCTX(i) (i) +#define MONO_RGCTX_SLOT_MAKE_MRGCTX(i) ((i) | 0x80000000) +#define MONO_RGCTX_SLOT_INDEX(s) ((s) & 0x7fffffff) +#define MONO_RGCTX_SLOT_IS_MRGCTX(s) (((s) & 0x80000000) ? TRUE : FALSE) + typedef enum { #define PATCH_INFO(a,b) MONO_PATCH_INFO_ ## a, #include "patch-info.h" @@ -1053,7 +1122,7 @@ struct MonoJumpInfoRgctxEntry { MonoMethod *method; gboolean in_mrgctx; MonoJumpInfo *data; /* describes the data to be loaded */ - int info_type; + MonoRgctxInfoType info_type; }; typedef enum { @@ -1246,6 +1315,7 @@ typedef struct { guint explicit_null_checks : 1; guint compute_gc_maps : 1; guint soft_breakpoints : 1; + guint arch_eh_jit_info : 1; gpointer debug_info; guint32 lmf_offset; guint16 *intvars; @@ -1343,6 +1413,12 @@ typedef struct { GSList *try_block_holes; + /* DWARF location list for 'this' */ + GSList *this_loclist; + + /* DWARF location list for 'rgctx_var' */ + GSList *rgctx_loclist; + /* GC Maps */ /* The offsets of the locals area relative to the frame pointer */ @@ -1582,6 +1658,10 @@ typedef struct { * is hit. */ gboolean soft_breakpoints; + /* + * Whenever to break in the debugger using G_BREAKPOINT on unhandled exceptions. + */ + gboolean break_on_exc; } MonoDebugOptions; enum { @@ -1665,6 +1745,8 @@ char* mono_get_runtime_build_info (void) MONO_INTERNAL; /* helper methods */ void mono_disable_optimizations (guint32 opts) MONO_INTERNAL; +void mono_set_optimizations (guint32 opts) MONO_INTERNAL; +void mono_set_verbose_level (guint32 level) MONO_INTERNAL; MonoJumpInfoToken* mono_jump_info_token_new (MonoMemPool *mp, MonoImage *image, guint32 token) MONO_INTERNAL; MonoJumpInfoToken* mono_jump_info_token_new2 (MonoMemPool *mp, MonoImage *image, guint32 token, MonoGenericContext *context) MONO_INTERNAL; MonoInst* mono_find_spvar_for_region (MonoCompile *cfg, int region) MONO_INTERNAL; @@ -1762,6 +1844,7 @@ gboolean mini_assembly_can_skip_verification (MonoDomain *domain, MonoMethod *m gboolean mono_compile_is_broken (MonoCompile *cfg, MonoMethod *method, gboolean fail_compile) MONO_INTERNAL; MonoInst *mono_get_got_var (MonoCompile *cfg) MONO_INTERNAL; void mono_add_seq_point (MonoCompile *cfg, MonoBasicBlock *bb, MonoInst *ins, int native_offset) MONO_INTERNAL; +void mono_add_var_location (MonoCompile *cfg, MonoInst *var, gboolean is_reg, int reg, int offset, int from, int to) MONO_INTERNAL; MonoInst* mono_emit_jit_icall (MonoCompile *cfg, gconstpointer func, MonoInst **args) MONO_INTERNAL; MonoInst* mono_emit_method_call (MonoCompile *cfg, MonoMethod *method, MonoInst **args, MonoInst *this) MONO_INTERNAL; void mono_create_helper_signatures (void) MONO_INTERNAL; @@ -1886,7 +1969,7 @@ gpointer mono_create_generic_class_init_trampoline (void) MONO_INTERNAL gpointer mono_create_jit_trampoline (MonoMethod *method) MONO_INTERNAL; gpointer mono_create_jit_trampoline_from_token (MonoImage *image, guint32 token) MONO_INTERNAL; gpointer mono_create_jit_trampoline_in_domain (MonoDomain *domain, MonoMethod *method) MONO_LLVM_INTERNAL; -gpointer mono_create_delegate_trampoline (MonoClass *klass) MONO_INTERNAL; +gpointer mono_create_delegate_trampoline (MonoDomain *domain, MonoClass *klass) MONO_INTERNAL; gpointer mono_create_rgctx_lazy_fetch_trampoline (guint32 offset) MONO_INTERNAL; gpointer mono_create_monitor_enter_trampoline (void) MONO_INTERNAL; gpointer mono_create_monitor_exit_trampoline (void) MONO_INTERNAL; @@ -1952,6 +2035,7 @@ void mono_if_conversion (MonoCompile *cfg) MONO_INTERNAL; /* methods that must be provided by the arch-specific port */ void mono_arch_init (void) MONO_INTERNAL; +void mono_arch_finish_init (void) MONO_INTERNAL; void mono_arch_cleanup (void) MONO_INTERNAL; void mono_arch_cpu_init (void) MONO_INTERNAL; guint32 mono_arch_cpu_optimizazions (guint32 *exclude_mask) MONO_INTERNAL; @@ -1987,7 +2071,6 @@ void mono_arch_lowering_pass (MonoCompile *cfg, MonoBasicBloc void mono_arch_peephole_pass_1 (MonoCompile *cfg, MonoBasicBlock *bb) MONO_INTERNAL; void mono_arch_peephole_pass_2 (MonoCompile *cfg, MonoBasicBlock *bb) MONO_INTERNAL; void mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) MONO_INTERNAL; -void mono_arch_setup_jit_tls_data (MonoJitTlsData *tls) MONO_INTERNAL; void mono_arch_free_jit_tls_data (MonoJitTlsData *tls) MONO_INTERNAL; void mono_arch_fill_argument_info (MonoCompile *cfg) MONO_INTERNAL; void mono_arch_allocate_vars (MonoCompile *m) MONO_INTERNAL; @@ -2018,9 +2101,7 @@ void mono_arch_start_single_stepping (void) MONO_INTERNAL; void mono_arch_stop_single_stepping (void) MONO_INTERNAL; gboolean mono_arch_is_single_step_event (void *info, void *sigctx) MONO_INTERNAL; gboolean mono_arch_is_breakpoint_event (void *info, void *sigctx) MONO_INTERNAL; -guint8* mono_arch_get_ip_for_single_step (MonoJitInfo *ji, MonoContext *ctx) MONO_INTERNAL; -guint8* mono_arch_get_ip_for_breakpoint (MonoJitInfo *ji, MonoContext *ctx) MONO_INTERNAL; -void mono_arch_skip_breakpoint (MonoContext *ctx) MONO_INTERNAL; +void mono_arch_skip_breakpoint (MonoContext *ctx, MonoJitInfo *ji) MONO_INTERNAL; void mono_arch_skip_single_step (MonoContext *ctx) MONO_INTERNAL; gpointer mono_arch_get_seq_point_info (MonoDomain *domain, guint8 *code) MONO_INTERNAL; void mono_arch_setup_resume_sighandler_ctx (MonoContext *ctx, gpointer func) MONO_INTERNAL; @@ -2039,7 +2120,7 @@ gpointer mono_arch_get_throw_exception (MonoTrampInfo **info, gboolean gpointer mono_arch_get_rethrow_exception (MonoTrampInfo **info, gboolean aot) MONO_INTERNAL; gpointer mono_arch_get_throw_corlib_exception (MonoTrampInfo **info, gboolean aot) MONO_INTERNAL; gpointer mono_arch_get_throw_pending_exception (MonoTrampInfo **info, gboolean aot) MONO_INTERNAL; -gboolean mono_arch_handle_exception (void *sigctx, gpointer obj, gboolean test_only) MONO_INTERNAL; +gboolean mono_arch_handle_exception (void *sigctx, gpointer obj) MONO_INTERNAL; void mono_arch_handle_altstack_exception (void *sigctx, gpointer fault_addr, gboolean stack_ovf) MONO_INTERNAL; gboolean mono_handle_soft_stack_ovf (MonoJitTlsData *jit_tls, MonoJitInfo *ji, void *ctx, guint8* fault_addr) MONO_INTERNAL; void mono_handle_hard_stack_ovf (MonoJitTlsData *jit_tls, MonoJitInfo *ji, void *ctx, guint8* fault_addr) MONO_INTERNAL; @@ -2099,8 +2180,7 @@ mono_thread_state_init_from_handle (MonoThreadUnwindState *tctx, MonoNativeThrea typedef gboolean (*MonoJitStackWalk) (StackFrameInfo *frame, MonoContext *ctx, gpointer data); void mono_exceptions_init (void) MONO_INTERNAL; -gboolean mono_handle_exception (MonoContext *ctx, gpointer obj, - gpointer original_ip, gboolean test_only) MONO_INTERNAL; +gboolean mono_handle_exception (MonoContext *ctx, gpointer obj) MONO_INTERNAL; void mono_handle_native_sigsegv (int signal, void *sigctx) MONO_INTERNAL; void mono_print_thread_dump (void *sigctx); void mono_print_thread_dump_from_ctx (MonoContext *ctx); @@ -2235,7 +2315,7 @@ mono_class_rgctx_get_array_size (int n, gboolean mrgctx) MONO_INTERNAL; guint32 mono_method_lookup_or_register_other_info (MonoMethod *method, gboolean in_mrgctx, gpointer data, - int info_type, MonoGenericContext *generic_context) MONO_INTERNAL; + MonoRgctxInfoType info_type, MonoGenericContext *generic_context) MONO_INTERNAL; MonoGenericContext mono_method_construct_object_context (MonoMethod *method) MONO_INTERNAL; @@ -2381,7 +2461,7 @@ void mono_runtime_setup_stat_profiler (void) MONO_INTERNAL; void mono_runtime_shutdown_stat_profiler (void) MONO_INTERNAL; void mono_runtime_posix_install_handlers (void) MONO_INTERNAL; pid_t mono_runtime_syscall_fork (void) MONO_INTERNAL; -gboolean mono_gdb_render_native_backtraces (void) MONO_INTERNAL; +void mono_gdb_render_native_backtraces (pid_t crashed_pid) MONO_INTERNAL; /* * Signal handling @@ -2429,17 +2509,4 @@ void SIG_HANDLER_SIGNATURE (mono_sigsegv_signal_handler) MONO_INTERNAL; void SIG_HANDLER_SIGNATURE (mono_sigint_signal_handler) MONO_INTERNAL; gboolean SIG_HANDLER_SIGNATURE (mono_chain_signal) MONO_INTERNAL; -/* for MONO_WRAPPER_UNKNOWN/MANAGED_TO_MANAGED subtypes */ -enum { - MONO_AOT_WRAPPER_MONITOR_ENTER, - MONO_AOT_WRAPPER_MONITOR_EXIT, - MONO_AOT_WRAPPER_ELEMENT_ADDR, - MONO_AOT_WRAPPER_PTR_TO_STRUCTURE, - MONO_AOT_WRAPPER_STRUCTURE_TO_PTR, - MONO_AOT_WRAPPER_CASTCLASS_WITH_CACHE, - MONO_AOT_WRAPPER_ISINST_WITH_CACHE, - MONO_AOT_WRAPPER_MONITOR_ENTER_V4, - MONO_AOT_WRAPPER_LAST -}; - #endif /* __MONO_MINI_H__ */