X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fdriver.c;h=590607889fdd5451339d89c61b2e420cc90de2d8;hb=863ddf25bfb4e88db7225dd4968a4403840c42af;hp=e31628dc795b53151c8028fd03e04d7386e705c8;hpb=38f607b059ac2622828dfad1d607e09c213cc613;p=mono.git diff --git a/mono/mini/driver.c b/mono/mini/driver.c index e31628dc795..590607889fd 100644 --- a/mono/mini/driver.c +++ b/mono/mini/driver.c @@ -49,14 +49,16 @@ #include #include #include +#include #include "mono/utils/mono-counters.h" #include "mono/utils/mono-hwcap.h" #include "mono/utils/mono-logger-internals.h" -#include "mono/utils/w32handle.h" +#include "mono/metadata/w32handle.h" #include "mini.h" #include "jit.h" #include "aot-compiler.h" +#include "interpreter/interp.h" #include #include @@ -934,7 +936,7 @@ compile_all_methods_thread_main_inner (CompileAllThreadArgs *args) (method->flags & METHOD_ATTRIBUTE_ABSTRACT)) continue; - if (method->klass->generic_container) + if (mono_class_is_gtd (method->klass)) continue; sig = mono_method_signature (method); if (!sig) { @@ -1274,6 +1276,8 @@ mini_usage (void) #ifdef HOST_WIN32 " --mixed-mode Enable mixed-mode image support.\n" #endif + " --handlers Install custom handlers, use --help-handlers for details.\n" + " --aot-path=PATH List of additional directories to search for AOT images.\n" ); } @@ -1556,6 +1560,10 @@ switch_arch (char* argv[], const char* target_arch) } #endif + +#define MONO_HANDLERS_ARGUMENT "--handlers=" +#define MONO_HANDLERS_ARGUMENT_LEN G_N_ELEMENTS(MONO_HANDLERS_ARGUMENT)-1 + /** * mono_main: * @argc: number of arguments in the argv array @@ -1753,11 +1761,11 @@ mono_main (int argc, char* argv[]) } else if (strcmp (argv [i], "--verify-all") == 0) { mono_verifier_enable_verify_all (); } else if (strcmp (argv [i], "--full-aot") == 0) { - mono_aot_only = TRUE; + mono_jit_set_aot_mode (MONO_AOT_MODE_FULL); } else if (strcmp (argv [i], "--llvmonly") == 0) { - mono_aot_only = TRUE; - mono_llvm_only = TRUE; + mono_jit_set_aot_mode (MONO_AOT_MODE_LLVMONLY); } else if (strcmp (argv [i], "--hybrid-aot") == 0) { + mono_jit_set_aot_mode (MONO_AOT_MODE_HYBRID); } else if (strcmp (argv [i], "--print-vtable") == 0) { mono_print_vtable = TRUE; } else if (strcmp (argv [i], "--stats") == 0) { @@ -1773,6 +1781,16 @@ mono_main (int argc, char* argv[]) mono_compile_aot = TRUE; aot_options = &argv [i][6]; #endif + } else if (strncmp (argv [i], "--aot-path=", 11) == 0) { + char **splitted; + + splitted = g_strsplit (argv [i] + 11, G_SEARCHPATH_SEPARATOR_S, 1000); + while (*splitted) { + char *tmp = *splitted; + mono_aot_paths = g_list_append (mono_aot_paths, g_strdup (tmp)); + g_free (tmp); + splitted++; + } } else if (strncmp (argv [i], "--compile-all=", 14) == 0) { action = DO_COMPILE; recompilation_times = atoi (argv [i] + 14); @@ -1902,12 +1920,26 @@ mono_main (int argc, char* argv[]) #endif } else if (strcmp (argv [i], "--nollvm") == 0){ mono_use_llvm = FALSE; +#ifdef ENABLE_INTERPRETER + } else if (strcmp (argv [i], "--interpreter") == 0) { + mono_use_interpreter = TRUE; +#endif + #ifdef __native_client__ } else if (strcmp (argv [i], "--nacl-mono-path") == 0){ nacl_mono_path = g_strdup(argv[++i]); } else if (strcmp (argv [i], "--nacl-null-checks-off") == 0){ nacl_null_checks_off = TRUE; #endif + } else if (strncmp (argv [i], MONO_HANDLERS_ARGUMENT, MONO_HANDLERS_ARGUMENT_LEN) == 0) { + //Install specific custom handlers. + if (!mono_runtime_install_custom_handlers (argv[i] + MONO_HANDLERS_ARGUMENT_LEN)) { + fprintf (stderr, "error: " MONO_HANDLERS_ARGUMENT ", one or more unknown handlers: '%s'\n", argv [i]); + return 1; + } + } else if (strcmp (argv [i], "--help-handlers") == 0) { + mono_runtime_install_custom_handlers_usage (); + return 0; } else if (argv [i][0] == '-' && argv [i][1] == '-' && mini_parse_debug_option (argv [i] + 2)) { } else { fprintf (stderr, "Unknown command line option: '%s'\n", argv [i]); @@ -1942,9 +1974,9 @@ mono_main (int argc, char* argv[]) { char *runtime_path; - runtime_path = wapi_process_get_path (getpid ()); + runtime_path = mono_w32process_get_path (getpid ()); if (runtime_path) { - wapi_process_set_cli_launcher (runtime_path); + mono_w32process_set_cli_launcher (runtime_path); g_free (runtime_path); } } @@ -1980,15 +2012,8 @@ mono_main (int argc, char* argv[]) /* Set rootdir before loading config */ mono_set_rootdir (); - /* - * We only set the native name of the thread since MS.NET leaves the - * managed thread name for the main thread as null. - */ - mono_native_thread_set_name (mono_native_thread_id_get (), "Main"); - if (enable_profile) { - mono_profiler_load (profile_options); - mono_profiler_thread_name (MONO_NATIVE_THREAD_ID_TO_UINT (mono_native_thread_id_get ()), "Main"); + mini_profiler_enable_with_options (profile_options); } mono_attach_parse_options (attach_options); @@ -2028,6 +2053,11 @@ mono_main (int argc, char* argv[]) } mono_set_defaults (mini_verbose, opt); +#if ENABLE_INTERPRETER + if (mono_use_interpreter) + domain = mono_interp_init (argv [i]); + else +#endif domain = mini_init (argv [i], forced_version); mono_gc_set_stack_end (&domain); @@ -2051,6 +2081,17 @@ mono_main (int argc, char* argv[]) case DO_SINGLE_METHOD_REGRESSION: mono_do_single_method_regression = TRUE; case DO_REGRESSION: +#ifdef ENABLE_INTERPRETER + if (mono_use_interpreter) { + if (interp_regression_list (2, argc -i, argv + i)) { + g_print ("Regression ERRORS!\n"); + // mini_cleanup (domain); + return 1; + } + // mini_cleanup (domain); + return 0; + } +#endif if (mini_regression_list (mini_verbose, argc -i, argv + i)) { g_print ("Regression ERRORS!\n"); mini_cleanup (domain); @@ -2083,6 +2124,10 @@ mono_main (int argc, char* argv[]) aname = argv [i]; break; default: +#ifdef ENABLE_INTERPRETER + if (mono_use_interpreter) + g_error ("not yet"); +#endif if (argc - i < 1) { mini_usage (); mini_cleanup (domain); @@ -2312,11 +2357,21 @@ mono_jit_set_aot_only (gboolean val) void mono_jit_set_aot_mode (MonoAotMode mode) { + /* we don't want to set mono_aot_mode twice */ + g_assert (mono_aot_mode == MONO_AOT_MODE_NONE); mono_aot_mode = mode; + if (mono_aot_mode == MONO_AOT_MODE_LLVMONLY) { mono_aot_only = TRUE; mono_llvm_only = TRUE; } + if (mono_aot_mode == MONO_AOT_MODE_FULL) { + mono_aot_only = TRUE; + } + if (mono_aot_mode == MONO_AOT_MODE_HYBRID) { + mono_set_generic_sharing_vt_supported (TRUE); + mono_set_partial_sharing_supported (TRUE); + } } /**