[aot] Don't force gsharedvt to be enabled in llvmonly+interp mode. (#45687)
authormonojenkins <jo.shields+jenkins@xamarin.com>
Tue, 8 Dec 2020 22:03:02 +0000 (17:03 -0500)
committerGitHub <noreply@github.com>
Tue, 8 Dec 2020 22:03:02 +0000 (17:03 -0500)
Co-authored-by: vargaz <vargaz@users.noreply.github.com>
src/mono/mono/mini/aot-compiler.c
src/mono/mono/mini/aot-runtime.c
src/mono/mono/mini/llvmonly-runtime.c

index 2242f05..e1ba92a 100644 (file)
@@ -13831,7 +13831,10 @@ mono_compile_assembly (MonoAssembly *ass, guint32 opts, const char *aot_options,
                return 1;
        }
 #else
-       if (acfg->aot_opts.llvm_only || mono_aot_mode_is_full (&acfg->aot_opts) || mono_aot_mode_is_hybrid (&acfg->aot_opts))
+       if (acfg->aot_opts.llvm_only) {
+               if (!mono_aot_mode_is_interp (&acfg->aot_opts))
+                       acfg->jit_opts |= MONO_OPT_GSHAREDVT;
+       } else if (mono_aot_mode_is_full (&acfg->aot_opts) || mono_aot_mode_is_hybrid (&acfg->aot_opts))
                acfg->jit_opts |= MONO_OPT_GSHAREDVT;
 #endif
 
index 54fa42d..4c45a24 100644 (file)
@@ -5077,10 +5077,12 @@ mono_aot_get_method (MonoDomain *domain, MonoMethod *method, MonoError *error)
                /* Common case */
                method_index = mono_metadata_token_index (method->token) - 1;
 
-               guint32 num_methods = amodule->info.nmethods - amodule->info.nextra_methods;
-               if (method_index >= num_methods)
-                       /* method not available in AOT image */
-                       return NULL;
+               if (!mono_llvm_only) {
+                       guint32 num_methods = amodule->info.nmethods - amodule->info.nextra_methods;
+                       if (method_index >= num_methods)
+                               /* method not available in AOT image */
+                               return NULL;
+               }
        }
 
        code = (guint8 *)load_method (domain, amodule, m_class_get_image (klass), method, method->token, method_index, error);
index 100cffb..0068a28 100644 (file)
@@ -18,7 +18,11 @@ gpointer
 mini_llvmonly_load_method (MonoMethod *method, gboolean caller_gsharedvt, gboolean need_unbox, gpointer *out_arg, MonoError *error)
 {
        gpointer addr = mono_compile_method_checked (method, error);
-       return_val_if_nok (error, NULL);
+
+       if (!is_ok (error)) {
+               mono_error_cleanup (error);
+               error_init_reuse (error);
+       }
 
        if (addr) {
                return mini_llvmonly_add_method_wrappers (method, (gpointer)addr, caller_gsharedvt, need_unbox, out_arg);