[mono] Fix crash in common_call_trampoline due to inconsistent rgctx mode (#57677)
authorgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Thu, 19 Aug 2021 18:51:37 +0000 (11:51 -0700)
committerGitHub <noreply@github.com>
Thu, 19 Aug 2021 18:51:37 +0000 (11:51 -0700)
* Assume MRGCTX mode if mini_method_is_default_method is true

* Fixes https://github.com/dotnet/runtime/issues/57664

Co-authored-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>
src/mono/mono/mini/mini-trampolines.c

index c6901fb..36fb6ca 100644 (file)
@@ -554,7 +554,7 @@ common_call_trampoline (host_mgreg_t *regs, guint8 *code, MonoMethod *m, MonoVTa
                /*
                 * The caller is gshared code, compute the actual method to call from M and this/rgctx.
                 */
-               if (m->is_inflated && mono_method_get_context (m)->method_inst) {
+               if (m->is_inflated && (mono_method_get_context (m)->method_inst || mini_method_is_default_method (m))) {
                        MonoMethodRuntimeGenericContext *mrgctx = (MonoMethodRuntimeGenericContext*)mono_arch_find_static_call_vtable (regs, code);
 
                        klass = mrgctx->class_vtable->klass;