- int i;
-
- switch (ji->type) {
- case MONO_PATCH_INFO_METHOD:
- case MONO_PATCH_INFO_METHODCONST:
- case MONO_PATCH_INFO_METHOD_JUMP:
- case MONO_PATCH_INFO_ICALL_ADDR: {
- guint32 token;
-
- image = decode_method_ref (aot_module, &token, p, &p);
- if (!image)
- goto cleanup;
-
-#ifdef MONO_ARCH_HAVE_CREATE_TRAMPOLINE_FROM_TOKEN
- if (!mono_aot_only && (ji->type == MONO_PATCH_INFO_METHOD) && (mono_metadata_token_table (token) == MONO_TABLE_METHOD)) {
- ji->data.target = mono_create_jit_trampoline_from_token (image, token);
- ji->type = MONO_PATCH_INFO_ABS;
- }
- else {
- ji->data.method = mono_get_method (image, token, NULL);
- g_assert (ji->data.method);
- mono_class_init (ji->data.method->klass);
- }
-#else
- ji->data.method = mono_get_method (image, token, NULL);
- g_assert (ji->data.method);
- mono_class_init (ji->data.method->klass);
-#endif
-
- break;
- }
- case MONO_PATCH_INFO_WRAPPER: {
- guint32 wrapper_type;
-
- wrapper_type = decode_value (p, &p);
-
- ji->type = MONO_PATCH_INFO_METHOD;
-
- switch (wrapper_type) {
- case MONO_WRAPPER_REMOTING_INVOKE_WITH_CHECK: {
- guint32 image_index, token, value;
-
- value = decode_value (p, &p);
- image_index = value >> 24;
- token = MONO_TOKEN_METHOD_DEF | (value & 0xffffff);
-
- image = load_image (aot_module, image_index);
- if (!image)
- goto cleanup;
- ji->data.method = mono_get_method (image, token, NULL);
- g_assert (ji->data.method);
- mono_class_init (ji->data.method->klass);
-
- ji->data.method = mono_marshal_get_remoting_invoke_with_check (ji->data.method);
- break;
- }
- case MONO_WRAPPER_PROXY_ISINST: {
- MonoClass *klass = decode_klass_ref (aot_module, p, &p);
- if (!klass)
- goto cleanup;
- ji->data.method = mono_marshal_get_proxy_cancast (klass);
- break;
- }
- case MONO_WRAPPER_LDFLD:
- case MONO_WRAPPER_LDFLDA:
- case MONO_WRAPPER_STFLD:
- case MONO_WRAPPER_ISINST: {
- MonoClass *klass = decode_klass_ref (aot_module, p, &p);
- if (!klass)
- goto cleanup;
- if (wrapper_type == MONO_WRAPPER_LDFLD)
- ji->data.method = mono_marshal_get_ldfld_wrapper (&klass->byval_arg);
- else if (wrapper_type == MONO_WRAPPER_LDFLDA)
- ji->data.method = mono_marshal_get_ldflda_wrapper (&klass->byval_arg);
- else if (wrapper_type == MONO_WRAPPER_STFLD)
- ji->data.method = mono_marshal_get_stfld_wrapper (&klass->byval_arg);
- else if (wrapper_type == MONO_WRAPPER_ISINST)
- ji->data.method = mono_marshal_get_isinst (klass);
- else
- g_assert_not_reached ();
- break;
- }
- case MONO_WRAPPER_LDFLD_REMOTE:
- ji->data.method = mono_marshal_get_ldfld_remote_wrapper (NULL);
- break;
- case MONO_WRAPPER_STFLD_REMOTE:
- ji->data.method = mono_marshal_get_stfld_remote_wrapper (NULL);
- break;
- case MONO_WRAPPER_ALLOC: {
- int atype = decode_value (p, &p);