X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini.h;h=d32942c045ec5d90baa2d738a9330729424e149c;hb=37f78e42a872b7799d19ba7fab7609a21594496d;hp=307d057529a8e9e89d36aab881eb237b1098d051;hpb=0198a3afaacd9c1f3c18f6706887d8a47b20cec0;p=mono.git diff --git a/mono/mini/mini.h b/mono/mini/mini.h index 307d057529a..d32942c045e 100644 --- a/mono/mini/mini.h +++ b/mono/mini/mini.h @@ -122,7 +122,7 @@ #endif /* Version number of the AOT file format */ -#define MONO_AOT_FILE_VERSION 97 +#define MONO_AOT_FILE_VERSION 100 //TODO: This is x86/amd64 specific. #define mono_simd_shuffle_mask(a,b,c,d) ((a) | ((b) << 2) | ((c) << 4) | ((d) << 6)) @@ -279,6 +279,12 @@ typedef struct MonoAotFileInfo guint32 tramp_page_code_offsets [MONO_AOT_TRAMP_NUM]; } MonoAotFileInfo; +typedef struct +{ + MonoClass *klass; + MonoMethod *method; +} MonoClassMethodPair; + /* Per-domain information maintained by the JIT */ typedef struct { @@ -289,6 +295,7 @@ typedef struct GHashTable *class_init_trampoline_hash; GHashTable *jump_trampoline_hash; GHashTable *jit_trampoline_hash; + /* Maps ClassMethodPair -> DelegateTrampInfo */ GHashTable *delegate_trampoline_hash; GHashTable *static_rgctx_trampoline_hash; GHashTable *llvm_vcall_trampoline_hash; @@ -308,6 +315,7 @@ typedef struct /* memcpy/bzero methods specialized for small constant sizes */ gpointer *memcpy_addr [17]; gpointer *bzero_addr [17]; + gpointer llvm_module; } MonoJitDomainInfo; typedef struct { @@ -518,6 +526,7 @@ extern gboolean mono_dont_free_global_codeman; extern gboolean mono_do_x86_stack_align; extern const char *mono_build_date; extern gboolean mono_do_signal_chaining; +extern gboolean mono_do_crash_chaining; extern gboolean mono_use_llvm; extern gboolean mono_do_single_method_regression; extern guint32 mono_single_method_regression_opt; @@ -1215,6 +1224,7 @@ struct MonoJumpInfo { MonoJumpInfoGSharedVtCall *gsharedvt; MonoGSharedVtMethodInfo *gsharedvt_method; MonoMethodSignature *sig; + MonoClassMethodPair *del_tramp; } data; }; @@ -1403,6 +1413,8 @@ typedef struct { MonoInst *lmf_var; MonoInst *lmf_addr_var; + MonoInst *stack_inbalance_var; + unsigned char *cil_start; #ifdef __native_client_codegen__ /* this alloc is not aligned, native_code */ @@ -1477,6 +1489,8 @@ typedef struct { guint has_indirection : 1; guint has_atomic_add_new_i4 : 1; guint has_atomic_exchange_i4 : 1; + guint has_atomic_cas_i4 : 1; + guint check_pinvoke_callconv : 1; gpointer debug_info; guint32 lmf_offset; guint16 *intvars; @@ -1679,6 +1693,7 @@ enum { #if SIZEOF_VOID_P == 8 #define OP_PCONST OP_I8CONST +#define OP_DUMMY_PCONST OP_DUMMY_I8CONST #define OP_PADD OP_LADD #define OP_PADD_IMM OP_LADD_IMM #define OP_PAND_IMM OP_LAND_IMM @@ -1702,6 +1717,7 @@ enum { #define OP_STOREP_MEMBASE_IMM OP_STOREI8_MEMBASE_IMM #else #define OP_PCONST OP_ICONST +#define OP_DUMMY_PCONST OP_DUMMY_ICONST #define OP_PADD OP_IADD #define OP_PADD_IMM OP_IADD_IMM #define OP_PAND_IMM OP_IAND_IMM @@ -1805,6 +1821,7 @@ typedef struct { gboolean mdb_optimizations; gboolean no_gdb_backtrace; gboolean suspend_on_sigsegv; + gboolean suspend_on_exception; gboolean suspend_on_unhandled; gboolean dyn_runtime_invoke; gboolean gdb; @@ -1831,6 +1848,10 @@ typedef struct { * Load AOT JIT info eagerly. */ gboolean load_aot_jit_info_eagerly; + /* + * Check for pinvoke calling convention mismatches. + */ + gboolean check_pinvoke_callconv; } MonoDebugOptions; enum { @@ -1947,6 +1968,7 @@ MonoInst* mono_compile_create_var_load (MonoCompile *cfg, gssize var_index) MonoInst* mono_compile_create_var_store (MonoCompile *cfg, gssize var_index, MonoInst *value) MONO_INTERNAL; MonoType* mono_type_from_stack_type (MonoInst *ins) MONO_INTERNAL; guint32 mono_alloc_ireg (MonoCompile *cfg) MONO_LLVM_INTERNAL; +guint32 mono_alloc_lreg (MonoCompile *cfg) MONO_LLVM_INTERNAL; guint32 mono_alloc_freg (MonoCompile *cfg) MONO_LLVM_INTERNAL; guint32 mono_alloc_preg (MonoCompile *cfg) MONO_LLVM_INTERNAL; guint32 mono_alloc_dreg (MonoCompile *cfg, MonoStackType stack_type) MONO_INTERNAL; @@ -2147,6 +2169,7 @@ void mono_llvm_emit_call (MonoCompile *cfg, MonoCallInst *cal void mono_llvm_create_aot_module (const char *got_symbol) MONO_LLVM_INTERNAL; void mono_llvm_emit_aot_module (const char *filename, int got_size) MONO_LLVM_INTERNAL; void mono_llvm_check_method_supported (MonoCompile *cfg) MONO_LLVM_INTERNAL; +void mono_llvm_free_domain_info (MonoDomain *domain) MONO_LLVM_INTERNAL; gboolean mono_method_blittable (MonoMethod *method) MONO_INTERNAL; gboolean mono_method_same_domain (MonoJitInfo *caller, MonoJitInfo *callee) MONO_INTERNAL; @@ -2175,6 +2198,7 @@ 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 (MonoDomain *domain, MonoClass *klass) MONO_INTERNAL; +gpointer mono_create_delegate_trampoline_with_method (MonoDomain *domain, MonoClass *klass, MonoMethod *method) 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; @@ -2315,6 +2339,7 @@ gpointer mono_arch_get_gsharedvt_call_info (gpointer addr, MonoMethodSignat gboolean mono_arch_opcode_needs_emulation (MonoCompile *cfg, int opcode) MONO_INTERNAL; gboolean mono_arch_tail_call_supported (MonoCompile *cfg, MonoMethodSignature *caller_sig, MonoMethodSignature *callee_sig) MONO_INTERNAL; int mono_arch_translate_tls_offset (int offset) MONO_INTERNAL; +gboolean mono_arch_opcode_supported (int opcode) MONO_INTERNAL; #ifdef MONO_ARCH_SOFT_FLOAT_FALLBACK gboolean mono_arch_is_soft_float (void) MONO_INTERNAL; @@ -2643,7 +2668,7 @@ MonoMethod* mini_get_shared_method_full (MonoMethod *method, gboolean all_vt, gb int mini_type_stack_size (MonoGenericSharingContext *gsctx, MonoType *t, int *align) MONO_INTERNAL; int mini_type_stack_size_full (MonoGenericSharingContext *gsctx, MonoType *t, guint32 *align, gboolean pinvoke) MONO_INTERNAL; void type_to_eval_stack_type (MonoCompile *cfg, MonoType *type, MonoInst *inst) MONO_INTERNAL; -guint mono_type_to_regmove (MonoCompile *cfg, MonoType *type) MONO_INTERNAL; +guint mono_type_to_regmove (MonoCompile *cfg, MonoType *type) MONO_LLVM_INTERNAL; void mono_cfg_add_try_hole (MonoCompile *cfg, MonoExceptionClause *clause, guint8 *start, MonoBasicBlock *bb) MONO_INTERNAL; @@ -2849,4 +2874,16 @@ gboolean SIG_HANDLER_SIGNATURE (mono_chain_signal) MONO_INTERNAL; #define ARCH_VARARG_ICALLS 0 #endif +#ifdef MONO_ARCH_HAVE_DUMMY_INIT +#define ARCH_HAVE_DUMMY_INIT 1 +#else +#define ARCH_HAVE_DUMMY_INIT 0 +#endif + +#ifdef MONO_CROSS_COMPILE +#define MONO_IS_CROSS_COMPILE 1 +#else +#define MONO_IS_CROSS_COMPILE 0 +#endif + #endif /* __MONO_MINI_H__ */