From: Jay Krell Date: Mon, 17 Jun 2019 05:25:53 +0000 (-0700) Subject: Replace MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR with MONO_PATCH_INFO_JIT_ICALL_ADDR... X-Git-Tag: submit/tizen/20210909.063632~10331^2~5^2~1158 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=11bfec8f09abd595792f0a920fed362366e0d158;p=platform%2Fupstream%2Fdotnet%2Fruntime.git Replace MONO_PATCH_INFO_TRAMPOLINE_FUNC_ADDR with MONO_PATCH_INFO_JIT_ICALL_ADDR. (mono/mono#15053) * 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 --- diff --git a/src/mono/mono/mini/aot-compiler.c b/src/mono/mono/mini/aot-compiler.c index 950dbe5..6bf521d 100644 --- a/src/mono/mono/mini/aot-compiler.c +++ b/src/mono/mono/mini/aot-compiler.c @@ -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; diff --git a/src/mono/mono/mini/aot-runtime.c b/src/mono/mono/mini/aot-runtime.c index b654f6e..c31cfbf 100644 --- a/src/mono/mono/mini/aot-runtime.c +++ b/src/mono/mono/mini/aot-runtime.c @@ -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); diff --git a/src/mono/mono/mini/aot-runtime.h b/src/mono/mono/mini/aot-runtime.h index 85c4a0c..3d14d1c 100644 --- a/src/mono/mono/mini/aot-runtime.h +++ b/src/mono/mono/mini/aot-runtime.h @@ -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 diff --git a/src/mono/mono/mini/method-to-ir.c b/src/mono/mono/mini/method-to-ir.c index 80c9d2b..5fc5ecf 100644 --- a/src/mono/mono/mini/method-to-ir.c +++ b/src/mono/mono/mini/method-to-ir.c @@ -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); diff --git a/src/mono/mono/mini/mini-ppc.c b/src/mono/mono/mini/mini-ppc.c index fc44ebf..34e0bef 100644 --- a/src/mono/mono/mini/mini-ppc.c +++ b/src/mono/mono/mini/mini-ppc.c @@ -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 */ diff --git a/src/mono/mono/mini/mini-runtime.c b/src/mono/mono/mini/mini-runtime.c index 77ddc78..7c1e043 100644 --- a/src/mono/mono/mini/mini-runtime.c +++ b/src/mono/mono/mini/mini-runtime.c @@ -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: diff --git a/src/mono/mono/mini/mini-s390x.c b/src/mono/mono/mini/mini-s390x.c index a25ed93..c1dea0d 100644 --- a/src/mono/mono/mini/mini-s390x.c +++ b/src/mono/mono/mini/mini-s390x.c @@ -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: diff --git a/src/mono/mono/mini/mini-x86.c b/src/mono/mono/mini/mini-x86.c index 53447aa..0e01cc8 100644 --- a/src/mono/mono/mini/mini-x86.c +++ b/src/mono/mono/mini/mini-x86.c @@ -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; diff --git a/src/mono/mono/mini/mini.h b/src/mono/mono/mini/mini.h index 7a62729..27b0bc2e 100644 --- a/src/mono/mono/mini/mini.h +++ b/src/mono/mono/mini/mini.h @@ -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) diff --git a/src/mono/mono/mini/patch-info.h b/src/mono/mono/mini/patch-info.h index 5b39c20..140730f 100644 --- a/src/mono/mono/mini/patch-info.h +++ b/src/mono/mono/mini/patch-info.h @@ -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") diff --git a/src/mono/mono/mini/tramp-amd64.c b/src/mono/mono/mini/tramp-amd64.c index b942b0a..f757c55 100644 --- a/src/mono/mono/mini/tramp-amd64.c +++ b/src/mono/mono/mini/tramp-amd64.c @@ -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); diff --git a/src/mono/mono/mini/tramp-arm.c b/src/mono/mono/mini/tramp-arm.c index 0076a6f..a00dff6 100644 --- a/src/mono/mono/mini/tramp-arm.c +++ b/src/mono/mono/mini/tramp-arm.c @@ -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; diff --git a/src/mono/mono/mini/tramp-arm64.c b/src/mono/mono/mini/tramp-arm64.c index 51ddd7e..e8fda2a 100644 --- a/src/mono/mono/mini/tramp-arm64.c +++ b/src/mono/mono/mini/tramp-arm64.c @@ -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); diff --git a/src/mono/mono/mini/tramp-ppc.c b/src/mono/mono/mini/tramp-ppc.c index 5c56f38..bd8a745 100644 --- a/src/mono/mono/mini/tramp-ppc.c +++ b/src/mono/mono/mini/tramp-ppc.c @@ -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); diff --git a/src/mono/mono/mini/tramp-x86.c b/src/mono/mono/mini/tramp-x86.c index b815733..76808b8 100644 --- a/src/mono/mono/mini/tramp-x86.c +++ b/src/mono/mono/mini/tramp-x86.c @@ -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);