[mono][wasm] Allow linking out some runtime code on wasm. (#86079)
authorZoltan Varga <vargaz@gmail.com>
Thu, 11 May 2023 06:14:03 +0000 (23:14 -0700)
committerGitHub <noreply@github.com>
Thu, 11 May 2023 06:14:03 +0000 (01:14 -0500)
src/mono/mono/mini/jit-icalls.c
src/mono/mono/mini/mini-runtime.c
src/mono/mono/mini/mini-trampolines.c

index c26e104..fee5d37 100644 (file)
@@ -1597,6 +1597,11 @@ mono_fill_class_rgctx (MonoVTable *vtable, int index)
        ERROR_DECL (error);
        gpointer res;
 
+       if (mono_opt_experimental_gshared_mrgctx) {
+               g_assert_not_reached ();
+               return NULL;
+       }
+
        res = mono_class_fill_runtime_generic_context (vtable, index, error);
        if (!is_ok (error)) {
                mono_error_set_pending_exception (error);
@@ -1611,6 +1616,11 @@ mono_fill_method_rgctx (MonoMethodRuntimeGenericContext *mrgctx, int index)
        ERROR_DECL (error);
        gpointer res;
 
+       if (mono_opt_experimental_gshared_mrgctx) {
+               g_assert_not_reached ();
+               return NULL;
+       }
+
        res = mono_method_fill_runtime_generic_context (mrgctx, index, error);
        if (!is_ok (error)) {
                mono_error_set_pending_exception (error);
index cc20695..0ac4887 100644 (file)
@@ -1661,9 +1661,13 @@ mono_resolve_patch_target_ext (MonoMemoryManager *mem_manager, MonoMethod *metho
                target = mini_method_get_rgctx (patch_info->data.method);
                break;
        case MONO_PATCH_INFO_RGCTX_SLOT_INDEX: {
-               int slot = mini_get_rgctx_entry_slot (patch_info->data.rgctx_entry);
+               if (mono_opt_experimental_gshared_mrgctx) {
+                       g_assert_not_reached ();
+               } else {
+                       int slot = mini_get_rgctx_entry_slot (patch_info->data.rgctx_entry);
 
-               target = GINT_TO_POINTER (MONO_RGCTX_SLOT_INDEX (slot));
+                       target = GINT_TO_POINTER (MONO_RGCTX_SLOT_INDEX (slot));
+               }
                break;
        }
        case MONO_PATCH_INFO_BB_OVF:
@@ -1672,9 +1676,13 @@ mono_resolve_patch_target_ext (MonoMemoryManager *mem_manager, MonoMethod *metho
        case MONO_PATCH_INFO_NONE:
                break;
        case MONO_PATCH_INFO_RGCTX_FETCH: {
-               int slot = mini_get_rgctx_entry_slot (patch_info->data.rgctx_entry);
+               if (mono_opt_experimental_gshared_mrgctx) {
+                       g_assert_not_reached ();
+               } else {
+                       int slot = mini_get_rgctx_entry_slot (patch_info->data.rgctx_entry);
 
-               target = mono_create_rgctx_lazy_fetch_trampoline (slot);
+                       target = mono_create_rgctx_lazy_fetch_trampoline (slot);
+               }
                break;
        }
 #ifdef MONO_ARCH_SOFT_DEBUG_SUPPORTED
index 0d7bfe9..663120f 100644 (file)
@@ -1150,6 +1150,7 @@ mono_delegate_trampoline (host_mgreg_t *regs, guint8 *code, gpointer *arg, guint
 gconstpointer
 mono_get_trampoline_func (MonoTrampolineType tramp_type)
 {
+#ifndef HOST_WASM
        switch (tramp_type) {
        case MONO_TRAMPOLINE_JIT:
        case MONO_TRAMPOLINE_JUMP:
@@ -1170,6 +1171,9 @@ mono_get_trampoline_func (MonoTrampolineType tramp_type)
                g_assert_not_reached ();
                return NULL;
        }
+#else
+       return NULL;
+#endif
 }
 
 static guchar*