Replace MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR with MONO_PATCH_INFO_JIT_ICALL_ADDR...
authorJay Krell <jay.krell@cornell.edu>
Mon, 17 Jun 2019 05:25:53 +0000 (22:25 -0700)
committerZoltan Varga <vargaz@gmail.com>
Mon, 17 Jun 2019 05:25:53 +0000 (01:25 -0400)
* Replace MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR with MONO_PATCH_INFO_JIT_ICALL_ADDR.

* PR: Abstract the TrampolineType / jit_icall_id translation.

Commit migrated from https://github.com/mono/mono/commit/8966528c211b549cb682ae5157fc40d013080d0c

15 files changed:
src/mono/mono/mini/aot-compiler.c
src/mono/mono/mini/aot-runtime.c
src/mono/mono/mini/aot-runtime.h
src/mono/mono/mini/method-to-ir.c
src/mono/mono/mini/mini-ppc.c
src/mono/mono/mini/mini-runtime.c
src/mono/mono/mini/mini-s390x.c
src/mono/mono/mini/mini-x86.c
src/mono/mono/mini/mini.h
src/mono/mono/mini/patch-info.h
src/mono/mono/mini/tramp-amd64.c
src/mono/mono/mini/tramp-arm.c
src/mono/mono/mini/tramp-arm64.c
src/mono/mono/mini/tramp-ppc.c
src/mono/mono/mini/tramp-x86.c

index 950dbe5..6bf521d 100644 (file)
@@ -3876,7 +3876,6 @@ is_plt_patch (MonoJumpInfo *patch_info)
        case MONO_PATCH_INFO_JIT_ICALL_ADDR:
        case MONO_PATCH_INFO_ICALL_ADDR_CALL:
        case MONO_PATCH_INFO_RGCTX_FETCH:
-       case MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR:
        case MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR:
                return TRUE;
        case MONO_PATCH_INFO_JIT_ICALL_ADDR_NOCALL:
@@ -6480,7 +6479,6 @@ encode_patch (MonoAotCompile *acfg, MonoJumpInfo *patch_info, guint8 *buf, guint
        case MONO_PATCH_INFO_AOT_JIT_INFO:
        case MONO_PATCH_INFO_GET_TLS_TRAMP:
        case MONO_PATCH_INFO_SET_TLS_TRAMP:
-       case MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR:
        case MONO_PATCH_INFO_CASTCLASS_CACHE:
                encode_value (patch_info->data.index, p, &p);
                break;
@@ -7195,9 +7193,6 @@ get_plt_entry_debug_sym (MonoAotCompile *acfg, MonoJumpInfo *ji, GHashTable *cac
                g_free (s);
                break;
        }
-       case MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR:
-               debug_sym = g_strdup_printf ("%s_jit_icall_native_trampoline_func_%li", prefix, ji->data.index);
-               break;
        case MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR:
                debug_sym = g_strdup_printf ("%s_jit_icall_native_specific_trampoline_lazy_fetch_%lu", prefix, ji->data.uindex);
                break;
index b654f6e..c31cfbf 100644 (file)
@@ -3888,7 +3888,6 @@ decode_patch (MonoAotModule *aot_module, MonoMemPool *mp, MonoJumpInfo *ji, guin
        case MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR:
                ji->data.uindex = decode_value (p, &p);
                break;
-       case MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR:
        case MONO_PATCH_INFO_CASTCLASS_CACHE:
                ji->data.index = decode_value (p, &p);
                break;
@@ -5116,16 +5115,19 @@ mono_aot_plt_resolve (gpointer aot_module, guint32 plt_info_offset, guint8 *code
         * patches, so have to translate between the two.
         * FIXME: Clean this up, but how ?
         */
-       if (ji.type == MONO_PATCH_INFO_ABS || ji.type == MONO_PATCH_INFO_JIT_ICALL_ID
+       if (ji.type == MONO_PATCH_INFO_ABS
+               || ji.type == MONO_PATCH_INFO_JIT_ICALL_ID
                || ji.type == MONO_PATCH_INFO_ICALL_ADDR
-               || ji.type == MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR || ji.type == MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR
-               || ji.type == MONO_PATCH_INFO_JIT_ICALL_ADDR || ji.type == MONO_PATCH_INFO_RGCTX_FETCH) {
+               || ji.type == MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR
+               || ji.type == MONO_PATCH_INFO_JIT_ICALL_ADDR
+               || ji.type == MONO_PATCH_INFO_RGCTX_FETCH) {
                /* These should already have a function descriptor */
 #ifdef PPC_USES_FUNCTION_DESCRIPTOR
                /* Our function descriptors have a 0 environment, gcc created ones don't */
                if (ji.type != MONO_PATCH_INFO_JIT_ICALL_ID
-                               && ji.type != MONO_PATCH_INFO_JIT_ICALL_ADDR && ji.type != MONO_PATCH_INFO_ICALL_ADDR
-                               && ji.type != MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR && ji.type != MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR)
+                               && ji.type != MONO_PATCH_INFO_JIT_ICALL_ADDR
+                               && ji.type != MONO_PATCH_INFO_ICALL_ADDR
+                               && ji.type != MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR)
                        g_assert (((gpointer*)target) [2] == 0);
 #endif
                /* Empty */
@@ -5348,9 +5350,7 @@ load_function_full (MonoAotModule *amodule, const char *name, MonoTrampInfo **ou
                         * When this code is executed, the runtime may not be initalized yet, so
                         * resolve the patch info by hand.
                         */
-                       if (ji->type == MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR) {
-                               target = (gpointer)mono_get_trampoline_func ((MonoTrampolineType)ji->data.index);
-                       } else if (ji->type == MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR) {
+                       if (ji->type == MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR) {
                                target = mono_create_specific_trampoline (GUINT_TO_POINTER (ji->data.uindex), MONO_TRAMPOLINE_RGCTX_LAZY_FETCH, mono_get_root_domain (), NULL);
                                target = mono_create_ftnptr_malloc ((guint8 *)target);
                        } else if (ji->type == MONO_PATCH_INFO_JIT_ICALL_ADDR) {
@@ -5386,9 +5386,7 @@ load_function_full (MonoAotModule *amodule, const char *name, MonoTrampInfo **ou
                                case MONO_JIT_ICALL_generic_trampoline_delegate:
                                case MONO_JIT_ICALL_generic_trampoline_generic_virtual_remoting:
                                case MONO_JIT_ICALL_generic_trampoline_vcall:
-                                       g_assert (0); // FIXME replace MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR with MONO_PATCH_INFO_JIT_ICALL_ADDR.
-                                       g_static_assert (MONO_TRAMPOLINE_JIT == 0);
-                                       target = (gpointer)mono_get_trampoline_func ((MonoTrampolineType)(jit_icall_id - MONO_JIT_ICALL_generic_trampoline_jit));
+                                       target = (gpointer)mono_get_trampoline_func (mono_jit_icall_id_to_trampoline_type (jit_icall_id));
                                        break;
                                default:
                                        target = mono_arch_load_function (jit_icall_id);
index 85c4a0c..3d14d1c 100644 (file)
@@ -11,7 +11,7 @@
 #include "mini.h"
 
 /* Version number of the AOT file format */
-#define MONO_AOT_FILE_VERSION 162
+#define MONO_AOT_FILE_VERSION 163
 
 #define MONO_AOT_TRAMP_PAGE_SIZE 16384
 
index 80c9d2b..5fc5ecf 100644 (file)
@@ -6913,9 +6913,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        NULLIFY_INS (addr);
                                        goto calli_end;
                                } else if (info_type == MONO_PATCH_INFO_JIT_ICALL_ADDR
-                                               || info_type == MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR
-                                               || info_type == MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR) {
-                                       // FIXME change MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR to MONO_PATCH_INFO_JIT_ICALL_ADDR
+                                               || info_type == MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR) {
                                        tailcall = FALSE;
                                        ins = (MonoInst*)mini_emit_abs_call (cfg, info_type, info_data, fsig, sp);
                                        NULLIFY_INS (addr);
index fc44ebf..34e0bef 100644 (file)
@@ -4678,7 +4678,6 @@ mono_arch_patch_code_new (MonoCompile *cfg, MonoDomain *domain, guint8 *code, Mo
        case MONO_PATCH_INFO_ABS:
        case MONO_PATCH_INFO_RGCTX_FETCH:
        case MONO_PATCH_INFO_JIT_ICALL_ADDR:
-       case MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR:
        case MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR:
                is_fd = TRUE;
                /* fall through */
index 77ddc78..7c1e043 100644 (file)
@@ -1248,7 +1248,6 @@ mono_patch_info_hash (gconstpointer data)
        case MONO_PATCH_INFO_JIT_ICALL_ID:
        case MONO_PATCH_INFO_JIT_ICALL_ADDR:
        case MONO_PATCH_INFO_JIT_ICALL_ADDR_NOCALL:
-       case MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR:
        case MONO_PATCH_INFO_CASTCLASS_CACHE:
                return hash | ji->data.index;
        case MONO_PATCH_INFO_SWITCH:
@@ -1324,7 +1323,6 @@ mono_patch_info_equal (gconstpointer ka, gconstpointer kb)
                return ji1->data.del_tramp->klass == ji2->data.del_tramp->klass && ji1->data.del_tramp->method == ji2->data.del_tramp->method && ji1->data.del_tramp->is_virtual == ji2->data.del_tramp->is_virtual;
        case MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR:
                return ji1->data.uindex == ji2->data.uindex;
-       case MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR:
        case MONO_PATCH_INFO_CASTCLASS_CACHE:
                return ji1->data.index == ji2->data.index;
        case MONO_PATCH_INFO_JIT_ICALL_ID:
index a25ed93..c1dea0d 100644 (file)
@@ -5330,7 +5330,6 @@ mono_arch_patch_code (MonoCompile *cfg, MonoMethod *method, MonoDomain *domain,
                        case MONO_PATCH_INFO_EXC:
                                s390_patch_addr (ip, (guint64) target);
                                continue;
-                       case MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR:
                        case MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR:
                        case MONO_PATCH_INFO_METHOD:
                        case MONO_PATCH_INFO_JIT_ICALL_ID:
index 53447aa..0e01cc8 100644 (file)
@@ -1727,7 +1727,6 @@ x86_align_and_patch (MonoCompile *cfg, guint8 *code, guint32 patch_type, gconstp
        if (cfg->abs_patches) {
                jinfo = (MonoJumpInfo*)g_hash_table_lookup (cfg->abs_patches, data);
                if (jinfo && (jinfo->type == MONO_PATCH_INFO_JIT_ICALL_ADDR
-                               || jinfo->type == MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR
                                || jinfo->type == MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR))
                        needs_paddings = FALSE;
        }
@@ -4898,7 +4897,6 @@ mono_arch_patch_code_new (MonoCompile *cfg, MonoDomain *domain, guint8 *code, Mo
        case MONO_PATCH_INFO_LABEL:
        case MONO_PATCH_INFO_RGCTX_FETCH:
        case MONO_PATCH_INFO_JIT_ICALL_ADDR:
-       case MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR:
        case MONO_PATCH_INFO_SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR:
                x86_patch (ip, (unsigned char*)target);
                break;
index 7a62729..27b0bc2 100644 (file)
@@ -1147,6 +1147,13 @@ typedef enum {
        MONO_TRAMPOLINE_NUM      = 8,
 } MonoTrampolineType;
 
+// Assuming MONO_TRAMPOLINE_JIT / MONO_JIT_ICALL_generic_trampoline_jit are first.
+#if __cplusplus
+g_static_assert (MONO_TRAMPOLINE_JIT == 0);
+#endif
+#define mono_trampoline_type_to_jit_icall_id(a) ((a) + MONO_JIT_ICALL_generic_trampoline_jit)
+#define mono_jit_icall_id_to_trampoline_type(a) ((MonoTrampolineType)((a) - MONO_JIT_ICALL_generic_trampoline_jit))
+
 /* These trampolines return normally to their caller */
 #define MONO_TRAMPOLINE_TYPE_MUST_RETURN(t)            \
        ((t) == MONO_TRAMPOLINE_RGCTX_LAZY_FETCH)
index 5b39c20..140730f 100644 (file)
@@ -70,5 +70,4 @@ PATCH_INFO(PROFILER_CLAUSE_COUNT, "profiler_clause_count")
  */
 PATCH_INFO(METHOD_FTNDESC, "method_ftndesc")
 
-PATCH_INFO(TRAMPOLINE_FUNC_ADDR, "trampoline_func_addr")
 PATCH_INFO(SPECIFIC_TRAMPOLINE_LAZY_FETCH_ADDR, "specific_trampoline_lazy_fetch_addr")
index b942b0a..f757c55 100644 (file)
@@ -464,7 +464,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf
        amd64_mov_reg_membase (code, AMD64_ARG_REG4, AMD64_RBP, tramp_offset, sizeof (target_mgreg_t));
 
        if (aot) {
-               code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR, GINT_TO_POINTER (tramp_type));
+               code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, GINT_TO_POINTER (mono_trampoline_type_to_jit_icall_id (tramp_type)));
        } else {
                tramp = (guint8*)mono_get_trampoline_func (tramp_type);
                amd64_mov_reg_imm (code, AMD64_R11, tramp);
index 0076a6f..a00dff6 100644 (file)
@@ -291,7 +291,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf
        ARM_MOV_REG_REG (code, ARMREG_R2, ARMREG_V2);
 
        if (aot) {
-               ji = mono_patch_info_list_prepend (ji, code - buf, MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR, GINT_TO_POINTER (tramp_type));
+               ji = mono_patch_info_list_prepend (ji, code - buf, MONO_PATCH_INFO_JIT_ICALL_ADDR, GINT_TO_POINTER (mono_trampoline_type_to_jit_icall_id (tramp_type)));
                ARM_LDR_IMM (code, ARMREG_IP, ARMREG_PC, 0);
                ARM_B (code, 0);
                *(gpointer*)code = NULL;
index 51ddd7e..e8fda2a 100644 (file)
@@ -229,7 +229,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf
        arm_movx (code, ARMREG_R3, ARMREG_RZR);
 
        if (aot) {
-               code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR, GINT_TO_POINTER (tramp_type));
+               code = mono_arm_emit_aotconst (&ji, code, buf, ARMREG_IP0, MONO_PATCH_INFO_JIT_ICALL_ADDR, GINT_TO_POINTER (mono_trampoline_type_to_jit_icall_id (tramp_type)));
        } else {
                tramp = (guint8*)mono_get_trampoline_func (tramp_type);
                code = mono_arm_emit_imm64 (code, ARMREG_IP0, (guint64)tramp);
index 5c56f38..bd8a745 100644 (file)
@@ -358,7 +358,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf
        ppc_ldr (code, ppc_r5, GREGS_OFFSET, ppc_r1);
 
        if (aot) {
-               code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR, GINT_TO_POINTER (tramp_type));
+               code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, GINT_TO_POINTER (mono_trampoline_type_to_jit_icall_id (tramp_type)));
 #ifdef PPC_USES_FUNCTION_DESCRIPTOR
                ppc_ldptr (code, ppc_r2, sizeof (target_mgreg_t), ppc_r12);
                ppc_ldptr (code, ppc_r12, 0, ppc_r12);
index b815733..76808b8 100644 (file)
@@ -284,7 +284,7 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf
 #endif
 
        if (aot) {
-               code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR, GINT_TO_POINTER (tramp_type));
+               code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, GINT_TO_POINTER (mono_trampoline_type_to_jit_icall_id (tramp_type)));
                x86_call_reg (code, X86_EAX);
        } else {
                tramp = (guint8*)mono_get_trampoline_func (tramp_type);