Skip to content

Commit

Permalink
Add a --aot-lazy-assembly-load command line option to load assemblies… (
Browse files Browse the repository at this point in the history
#67024)

* Add a --aot-lazy-assembly-load command line option to load assemblies referenced by AOT images lazily.

Note that this requires the assemblies used at AOT time to exactly match
the assemblies loaded at runtime, otherwise the runtime will abort
when it loads the mismatching reference.

* Handle the options added by options.h in mono_jit_parse_options ().
  • Loading branch information
vargaz authored Mar 24, 2022
1 parent a5665da commit 0e1c91b
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 3 deletions.
4 changes: 2 additions & 2 deletions src/mono/mono/mini/aot-runtime.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
#include <mono/utils/mono-threads-coop.h>
#include <mono/utils/bsearch.h>
#include <mono/utils/mono-tls-inline.h>
#include <mono/utils/options.h>

#include "mini.h"
#include "seq-points.h"
Expand Down Expand Up @@ -1905,7 +1906,6 @@ load_aot_module (MonoAssemblyLoadContext *alc, MonoAssembly *assembly, gpointer
gpointer *globals = NULL;
MonoAotFileInfo *info = NULL;
int i, version;
gboolean do_load_image = TRUE;
int align_double, align_int64;
guint8 *aot_data = NULL;

Expand Down Expand Up @@ -2299,7 +2299,7 @@ load_aot_module (MonoAssemblyLoadContext *alc, MonoAssembly *assembly, gpointer
* non-lazily, since we can't handle out-of-date errors later.
* The cached class info also depends on the exact assemblies.
*/
if (do_load_image) {
if (!mono_opt_aot_lazy_assembly_load) {
for (i = 0; i < amodule->image_table_len; ++i) {
ERROR_DECL (error);
load_image (amodule, i, error);
Expand Down
15 changes: 15 additions & 0 deletions src/mono/mono/mini/driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -1771,11 +1771,23 @@ parse_qualified_method_name (char *method_name)
void
mono_jit_parse_options (int argc, char * argv[])
{
ERROR_DECL (error);
int i;
char *trace_options = NULL;
int mini_verbose_level = 0;
guint32 opt;

/* Make a copy since mono_options_parse_options () modifies argv */
char **copy_argv = g_new0 (char*, argc);
memcpy (copy_argv, argv, sizeof (char*) * argc);
argv = copy_argv;

mono_options_parse_options ((const char**)argv, argc, &argc, error);
if (!is_ok (error)) {
g_printerr ("%s", mono_error_get_message (error));
mono_error_cleanup (error);
}

/*
* Some options have no effect here, since they influence the behavior of
* mono_main ().
Expand Down Expand Up @@ -1864,6 +1876,9 @@ mono_jit_parse_options (int argc, char * argv[])

if (mini_verbose_level)
mono_set_verbose_level (mini_verbose_level);

/* Free the copy */
g_free (argv);
}

static void
Expand Down
1 change: 1 addition & 0 deletions src/mono/mono/utils/options-def.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ DEFINE_BOOL_READONLY(readonly_flag, "readonly-flag", FALSE, "Example")
*/

DEFINE_BOOL(wasm_exceptions, "wasm-exceptions", FALSE, "Enable codegen for wasm exceptions")
DEFINE_BOOL(aot_lazy_assembly_load, "aot-lazy-assembly-load", FALSE, "Load assemblies referenced by AOT images lazily")

/* Cleanup */
#undef DEFINE_OPTION_FULL
Expand Down
2 changes: 1 addition & 1 deletion src/mono/mono/utils/options.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ mono_options_print_usage (void)
}

/*
* mono_optiond_parse_options:
* mono_options_parse_options:
*
* Set options based on the command line arguments in ARGV/ARGC.
* Remove processed arguments from ARGV and set *OUT_ARGC to the
Expand Down

0 comments on commit 0e1c91b

Please sign in to comment.