2009-05-20 Miguel de Icaza <miguel@novell.com>
[mono.git] / mono / mini / mini.h
index 3665e0072546b040013b67d73420ffdbd7daae1d..147ff23065225af0ff865f5059b568742603d6e5 100644 (file)
@@ -68,10 +68,6 @@ typedef gint64 mgreg_t;
 
 #define NOT_IMPLEMENTED do { g_assert_not_reached (); } while (0)
 
-#ifndef DISABLE_AOT
-#define MONO_USE_AOT_COMPILER
-#endif
-
 /* for 32 bit systems */
 #if G_BYTE_ORDER == G_LITTLE_ENDIAN
 #define MINI_LS_WORD_IDX 0
@@ -88,8 +84,12 @@ typedef gint64 mgreg_t;
 #define MONO_FAKE_IMT_METHOD ((MonoMethod*)GINT_TO_POINTER(-1))
 #define MONO_FAKE_VTABLE_METHOD ((MonoMethod*)GINT_TO_POINTER(-2))
 
+#ifndef DISABLE_AOT
+#define MONO_USE_AOT_COMPILER
+#endif
+
 /* Version number of the AOT file format */
-#define MONO_AOT_FILE_VERSION "52"
+#define MONO_AOT_FILE_VERSION "54"
 
 /* Constants used to encode different types of methods in AOT */
 enum {
@@ -106,6 +106,26 @@ enum {
        /* Methods resolve using a METHODSPEC token */
        MONO_AOT_METHODREF_METHODSPEC = 255,
 };
+
+/* Trampolines which we have a lot of */
+typedef enum {
+       MONO_AOT_TRAMP_SPECIFIC = 0,
+       MONO_AOT_TRAMP_STATIC_RGCTX = 1,
+       MONO_AOT_TRAMP_IMT_THUNK = 2,
+       MONO_AOT_TRAMP_NUM = 3
+} MonoAotTrampoline;
+
+/* This structure is stored in the AOT file */
+typedef struct MonoAotFileInfo
+{
+       guint32 plt_got_offset_base;
+       guint32 got_size;
+       guint32 plt_size;
+
+       guint32 num_trampolines [MONO_AOT_TRAMP_NUM];
+       guint32 trampoline_got_offset_base [MONO_AOT_TRAMP_NUM];
+       guint32 trampoline_size [MONO_AOT_TRAMP_NUM];
+} MonoAotFileInfo;
  
 /* Per-domain information maintained by the JIT */
 typedef struct
@@ -376,6 +396,7 @@ struct MonoBasicBlock {
        /* The address of the generated code, used for fixups */
        int native_offset;
        int max_offset;
+       int max_length;
 
        /* Visited and reachable flags */
        guint32 flags;
@@ -586,7 +607,6 @@ enum {
        MONO_INST_IS_DEAD    = 2,
        MONO_INST_TAILCALL   = 4,
        MONO_INST_VOLATILE   = 4,
-       MONO_INST_BRLABEL    = 4,
        MONO_INST_NOTYPECHECK    = 4,
        MONO_INST_UNALIGNED  = 8,
     MONO_INST_CFOLD_TAKEN = 8, /* On branches */
@@ -1377,12 +1397,13 @@ gpointer mono_aot_get_named_code            (const char *name) MONO_INTERNAL;
 gpointer mono_aot_get_unbox_trampoline      (MonoMethod *method) MONO_INTERNAL;
 gpointer mono_aot_get_lazy_fetch_trampoline (guint32 slot) MONO_INTERNAL;
 gpointer mono_aot_get_static_rgctx_trampoline (gpointer ctx, gpointer addr) MONO_INTERNAL;
+gpointer mono_aot_get_imt_thunk             (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckItem **imt_entries, int count, gpointer fail_tramp) MONO_INTERNAL;
 guint8*  mono_aot_get_unwind_info           (MonoJitInfo *ji, guint32 *unwind_info_len) MONO_INTERNAL;
 guint32  mono_aot_method_hash               (MonoMethod *method) MONO_INTERNAL;
 char*    mono_aot_wrapper_name              (MonoMethod *method) MONO_INTERNAL;
-MonoAotTrampInfo* mono_aot_tramp_info_create (char *name, guint8 *code, guint32 code_len) MONO_INTERNAL;
+MonoAotTrampInfo* mono_aot_tramp_info_create (const char *name, guint8 *code, guint32 code_len) MONO_INTERNAL;
 gboolean mono_aot_is_shared_got_patch       (MonoJumpInfo *patch_info) MONO_INTERNAL;
-
+guint    mono_aot_str_hash                  (gconstpointer v1) MONO_INTERNAL;
 
 /* This is an exported function */
 void     mono_aot_register_globals          (gpointer *globals);
@@ -1497,6 +1518,7 @@ guint32   mono_arch_cpu_optimizazions           (guint32 *exclude_mask) MONO_INT
 void      mono_arch_instrument_mem_needs        (MonoMethod *method, int *stack, int *code) MONO_INTERNAL;
 void     *mono_arch_instrument_prolog           (MonoCompile *cfg, void *func, void *p, gboolean enable_arguments) MONO_INTERNAL;
 void     *mono_arch_instrument_epilog           (MonoCompile *cfg, void *func, void *p, gboolean enable_arguments) MONO_INTERNAL;
+void     *mono_arch_instrument_epilog_full     (MonoCompile *cfg, void *func, void *p, gboolean enable_arguments, gboolean preserve_argument_registers) MONO_INTERNAL;
 void      mono_codegen                          (MonoCompile *cfg) MONO_INTERNAL;
 void      mono_call_inst_add_outarg_reg         (MonoCompile *cfg, MonoCallInst *call, int vreg, int hreg, gboolean fp) MONO_INTERNAL;
 const char *mono_arch_regname                   (int reg) MONO_INTERNAL;
@@ -1601,7 +1623,6 @@ MonoMethod* mono_arch_find_imt_method           (gpointer *regs, guint8 *code) M
 MonoVTable* mono_arch_find_static_call_vtable   (gpointer *regs, guint8 *code) MONO_INTERNAL;
 gpointer    mono_arch_build_imt_thunk           (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckItem **imt_entries, int count, gpointer fail_tramp) MONO_INTERNAL;
 void    mono_arch_notify_pending_exc            (void) MONO_INTERNAL;
-void    mono_arch_fixup_jinfo                   (MonoCompile *cfg) MONO_INTERNAL;
 
 /* Exception handling */
 void     mono_exceptions_init                   (void) MONO_INTERNAL;