projects
/
mono.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[aot] Don't error out if a method fails to JIT in full-aot mode. This was a regressio...
[mono.git]
/
mono
/
mini
/
aot-compiler.c
diff --git
a/mono/mini/aot-compiler.c
b/mono/mini/aot-compiler.c
index e4b2378a3e822f033baf8474b29064bef69e441f..5bfa4d0920387d4bcbaf388a254e24f328622407 100644
(file)
--- a/
mono/mini/aot-compiler.c
+++ b/
mono/mini/aot-compiler.c
@@
-421,7
+421,7
@@
aot_printerrf (MonoAotCompile *acfg, const gchar *format, ...)
}
static void
}
static void
-report_loader_error (MonoAotCompile *acfg, MonoError *error, const char *format, ...)
+report_loader_error (MonoAotCompile *acfg, MonoError *error,
gboolean fatal,
const char *format, ...)
{
FILE *output;
va_list args;
{
FILE *output;
va_list args;
@@
-439,7
+439,7
@@
report_loader_error (MonoAotCompile *acfg, MonoError *error, const char *format,
va_end (args);
mono_error_cleanup (error);
va_end (args);
mono_error_cleanup (error);
- if (acfg->is_full_aot) {
+ if (acfg->is_full_aot
&& fatal
) {
fprintf (output, "FullAOT cannot continue if there are loader errors.\n");
exit (1);
}
fprintf (output, "FullAOT cannot continue if there are loader errors.\n");
exit (1);
}
@@
-2897,7
+2897,7
@@
encode_klass_ref_inner (MonoAotCompile *acfg, MonoClass *klass, guint8 *buf, gui
if (par->gshared_constraint) {
MonoGSharedGenericParam *gpar = (MonoGSharedGenericParam*)par;
encode_type (acfg, par->gshared_constraint, p, &p);
if (par->gshared_constraint) {
MonoGSharedGenericParam *gpar = (MonoGSharedGenericParam*)par;
encode_type (acfg, par->gshared_constraint, p, &p);
- encode_klass_ref (acfg, mono_class_from_generic_parameter
(gpar->parent, NULL, klass->byval_arg.type == MONO_TYPE_MVAR
), p, &p);
+ encode_klass_ref (acfg, mono_class_from_generic_parameter
_internal (gpar->parent
), p, &p);
} else {
encode_value (klass->byval_arg.type, p, &p);
encode_value (mono_type_get_generic_param_num (&klass->byval_arg), p, &p);
} else {
encode_value (klass->byval_arg.type, p, &p);
encode_value (mono_type_get_generic_param_num (&klass->byval_arg), p, &p);
@@
-3832,7
+3832,7
@@
add_wrappers (MonoAotCompile *acfg)
gboolean skip = FALSE;
method = mono_get_method_checked (acfg->image, token, NULL, NULL, &error);
gboolean skip = FALSE;
method = mono_get_method_checked (acfg->image, token, NULL, NULL, &error);
- report_loader_error (acfg, &error, "Failed to load method token 0x%x due to %s\n", i, mono_error_get_message (&error));
+ report_loader_error (acfg, &error,
TRUE,
"Failed to load method token 0x%x due to %s\n", i, mono_error_get_message (&error));
if ((method->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL) ||
(method->iflags & METHOD_IMPL_ATTRIBUTE_RUNTIME) ||
if ((method->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL) ||
(method->iflags & METHOD_IMPL_ATTRIBUTE_RUNTIME) ||
@@
-3978,6
+3978,8
@@
add_wrappers (MonoAotCompile *acfg)
add_method (acfg, m);
if ((m = mono_gc_get_managed_allocator_by_type (i, MANAGED_ALLOCATOR_SLOW_PATH)))
add_method (acfg, m);
add_method (acfg, m);
if ((m = mono_gc_get_managed_allocator_by_type (i, MANAGED_ALLOCATOR_SLOW_PATH)))
add_method (acfg, m);
+ if ((m = mono_gc_get_managed_allocator_by_type (i, MANAGED_ALLOCATOR_PROFILER)))
+ add_method (acfg, m);
}
/* write barriers */
}
/* write barriers */
@@
-4181,7
+4183,7
@@
add_wrappers (MonoAotCompile *acfg)
MonoError error;
token = MONO_TOKEN_METHOD_DEF | (i + 1);
method = mono_get_method_checked (acfg->image, token, NULL, NULL, &error);
MonoError error;
token = MONO_TOKEN_METHOD_DEF | (i + 1);
method = mono_get_method_checked (acfg->image, token, NULL, NULL, &error);
- report_loader_error (acfg, &error, "Failed to load method token 0x%x due to %s\n", i, mono_error_get_message (&error));
+ report_loader_error (acfg, &error,
TRUE,
"Failed to load method token 0x%x due to %s\n", i, mono_error_get_message (&error));
if (method->iflags & METHOD_IMPL_ATTRIBUTE_SYNCHRONIZED) {
if (method->is_generic) {
if (method->iflags & METHOD_IMPL_ATTRIBUTE_SYNCHRONIZED) {
if (method->is_generic) {
@@
-4214,7
+4216,7
@@
add_wrappers (MonoAotCompile *acfg)
guint32 token = MONO_TOKEN_METHOD_DEF | (i + 1);
method = mono_get_method_checked (acfg->image, token, NULL, NULL, &error);
guint32 token = MONO_TOKEN_METHOD_DEF | (i + 1);
method = mono_get_method_checked (acfg->image, token, NULL, NULL, &error);
- report_loader_error (acfg, &error, "Failed to load method token 0x%x due to %s\n", i, mono_error_get_message (&error));
+ report_loader_error (acfg, &error,
TRUE,
"Failed to load method token 0x%x due to %s\n", i, mono_error_get_message (&error));
if ((method->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL) ||
(method->iflags & METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL)) {
if ((method->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL) ||
(method->iflags & METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL)) {
@@
-4238,7
+4240,7
@@
add_wrappers (MonoAotCompile *acfg)
int j;
method = mono_get_method_checked (acfg->image, token, NULL, NULL, &error);
int j;
method = mono_get_method_checked (acfg->image, token, NULL, NULL, &error);
- report_loader_error (acfg, &error, "Failed to load method token 0x%x due to %s\n", i, mono_error_get_message (&error));
+ report_loader_error (acfg, &error,
TRUE,
"Failed to load method token 0x%x due to %s\n", i, mono_error_get_message (&error));
/*
* Only generate native-to-managed wrappers for methods which have an
/*
* Only generate native-to-managed wrappers for methods which have an
@@
-4248,7
+4250,7
@@
add_wrappers (MonoAotCompile *acfg)
cattr = mono_custom_attrs_from_method_checked (method, &error);
if (!is_ok (&error)) {
char *name = mono_method_get_full_name (method);
cattr = mono_custom_attrs_from_method_checked (method, &error);
if (!is_ok (&error)) {
char *name = mono_method_get_full_name (method);
- report_loader_error (acfg, &error, "Failed to load custom attributes from method %s due to %s\n", name, mono_error_get_message (&error));
+ report_loader_error (acfg, &error,
TRUE,
"Failed to load custom attributes from method %s due to %s\n", name, mono_error_get_message (&error));
g_free (name);
}
g_free (name);
}
@@
-5818,6
+5820,8
@@
encode_patch (MonoAotCompile *acfg, MonoJumpInfo *patch_info, guint8 *buf, guint
break;
case MONO_PATCH_INFO_INTERRUPTION_REQUEST_FLAG:
break;
break;
case MONO_PATCH_INFO_INTERRUPTION_REQUEST_FLAG:
break;
+ case MONO_PATCH_INFO_PROFILER_ALLOCATION_COUNT:
+ break;
case MONO_PATCH_INFO_RGCTX_FETCH:
case MONO_PATCH_INFO_RGCTX_SLOT_INDEX: {
MonoJumpInfoRgctxEntry *entry = patch_info->data.rgctx_entry;
case MONO_PATCH_INFO_RGCTX_FETCH:
case MONO_PATCH_INFO_RGCTX_SLOT_INDEX: {
MonoJumpInfoRgctxEntry *entry = patch_info->data.rgctx_entry;
@@
-6737,10
+6741,6
@@
emit_trampolines (MonoAotCompile *acfg)
#ifdef DISABLE_REMOTING
if (tramp_type == MONO_TRAMPOLINE_GENERIC_VIRTUAL_REMOTING)
continue;
#ifdef DISABLE_REMOTING
if (tramp_type == MONO_TRAMPOLINE_GENERIC_VIRTUAL_REMOTING)
continue;
-#endif
-#ifndef MONO_ARCH_HAVE_HANDLER_BLOCK_GUARD
- if (tramp_type == MONO_TRAMPOLINE_HANDLER_BLOCK_GUARD)
- continue;
#endif
mono_arch_create_generic_trampoline ((MonoTrampolineType)tramp_type, &info, acfg->aot_opts.use_trampolines_page? 2: TRUE);
emit_trampoline (acfg, acfg->got_offset, info);
#endif
mono_arch_create_generic_trampoline ((MonoTrampolineType)tramp_type, &info, acfg->aot_opts.use_trampolines_page? 2: TRUE);
emit_trampoline (acfg, acfg->got_offset, info);
@@
-6821,11
+6821,6
@@
emit_trampolines (MonoAotCompile *acfg)
}
}
}
}
-#ifdef MONO_ARCH_HAVE_HANDLER_BLOCK_GUARD_AOT
- mono_arch_create_handler_block_trampoline (&info, TRUE);
- emit_trampoline (acfg, acfg->got_offset, info);
-#endif
-
if (mono_aot_mode_is_interp (&acfg->aot_opts)) {
mono_arch_get_enter_icall_trampoline (&info);
emit_trampoline (acfg, acfg->got_offset, info);
if (mono_aot_mode_is_interp (&acfg->aot_opts)) {
mono_arch_get_enter_icall_trampoline (&info);
emit_trampoline (acfg, acfg->got_offset, info);
@@
-7643,7
+7638,7
@@
compile_method (MonoAotCompile *acfg, MonoMethod *method)
if (cfg->exception_type != MONO_EXCEPTION_NONE) {
/* Some instances cannot be JITted due to constraints etc. */
if (!method->is_inflated)
if (cfg->exception_type != MONO_EXCEPTION_NONE) {
/* Some instances cannot be JITted due to constraints etc. */
if (!method->is_inflated)
- report_loader_error (acfg, &cfg->error, "Unable to compile method '%s' due to: '%s'.\n", mono_method_get_full_name (method), mono_error_get_message (&cfg->error));
+ report_loader_error (acfg, &cfg->error,
FALSE,
"Unable to compile method '%s' due to: '%s'.\n", mono_method_get_full_name (method), mono_error_get_message (&cfg->error));
/* Let the exception happen at runtime */
return;
}
/* Let the exception happen at runtime */
return;
}
@@
-7922,6
+7917,7
@@
compile_method (MonoAotCompile *acfg, MonoMethod *method)
g_hash_table_insert (acfg->method_to_cfg, cfg->orig_method, cfg);
g_hash_table_insert (acfg->method_to_cfg, cfg->orig_method, cfg);
+ /* Update global stats while holding a lock. */
mono_update_jit_stats (cfg);
/*
mono_update_jit_stats (cfg);
/*
@@
-10272,7
+10268,7
@@
collect_methods (MonoAotCompile *acfg)
continue;
method = mono_get_method_checked (acfg->image, token, NULL, NULL, &error);
continue;
method = mono_get_method_checked (acfg->image, token, NULL, NULL, &error);
- report_loader_error (acfg, &error, "Failed to load method token 0x%x due to %s\n", i, mono_error_get_message (&error));
+ report_loader_error (acfg, &error,
TRUE,
"Failed to load method token 0x%x due to %s\n", i, mono_error_get_message (&error));
if (method->is_generic || mono_class_is_gtd (method->klass)) {
MonoMethod *gshared;
if (method->is_generic || mono_class_is_gtd (method->klass)) {
MonoMethod *gshared;
@@
-11627,7
+11623,7
@@
mono_compile_assembly (MonoAssembly *ass, guint32 opts, const char *aot_options)
#ifdef ENABLE_LLVM
if (acfg->llvm) {
llvm_acfg = acfg;
#ifdef ENABLE_LLVM
if (acfg->llvm) {
llvm_acfg = acfg;
- mono_llvm_create_aot_module (acfg->image->assembly, acfg->global_prefix, TRUE, acfg->aot_opts.static_link, acfg->aot_opts.llvm_only);
+ mono_llvm_create_aot_module (acfg->image->assembly, acfg->global_prefix,
acfg->nshared_got_entries,
TRUE, acfg->aot_opts.static_link, acfg->aot_opts.llvm_only);
}
#endif
}
#endif