From 8ce0775a031af68f1c4db8b738a420ae95986123 Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Wed, 21 Feb 2018 21:11:47 -0500 Subject: [PATCH] [jit] Disable partial sharing during JITting, its only been tested in full aot mode, and doesn't seem to work with JITted methods. (#7161) * [aot] Add hybrid aot tests. * [jit] Disable partial sharing during JITting, its only been tested in full aot mode, and doesn't seem to work with JITted methods. Fixes https://github.com/mono/mono/issues/7085. --- mono/mini/Makefile.am.in | 12 +++++++++--- mono/mini/mini.c | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/mono/mini/Makefile.am.in b/mono/mini/Makefile.am.in index 75373564e85..7cc8624829d 100755 --- a/mono/mini/Makefile.am.in +++ b/mono/mini/Makefile.am.in @@ -777,6 +777,9 @@ llvmaotcheck: gsharedvtcheck: $(MAKE) fullaotcheck GSHAREDVT=1 +hybridcheck: + $(MAKE) fullaotcheck HYBRID=1 + fullaot_regtests = $(regtests) fullaot_testing_deps = generics-variant-types.dll TestDriver.dll MemoryIntrinsics.dll @@ -809,15 +812,18 @@ FULLAOT_LIBS = $(filter-out $(FULLAOT_LIBS_DISABLED),$(FULLAOT_LIBS_UNIVERSAL)) FULLAOT_TMP_DIR=$(top_builddir)/mono/mini/fullaot-tmp +FULLAOT_AOT_ARGS=$(if $(HYBRID),hybrid,full) +FULLAOT_ARGS=$(if $(HYBRID),--hybrid-aot,--full-aot) + # This currently only works on amd64/arm fullaotcheck: $(mono) $(fullaot_regtests) $(fullaot_testing_deps) rm -rf $(FULLAOT_TMP_DIR) mkdir $(FULLAOT_TMP_DIR) - $(MAKE) fullaot-libs AOT_FLAGS="full,$(MONO_FULLAOT_ADDITIONAL_ARGS)$(INVARIANT_AOT_OPTIONS)" GSHAREDVT=$(GSHAREDVT) + $(MAKE) fullaot-libs AOT_FLAGS="$(FULLAOT_AOT_ARGS),$(MONO_FULLAOT_ADDITIONAL_ARGS)$(INVARIANT_AOT_OPTIONS)" GSHAREDVT=$(GSHAREDVT) cp $(regtests) $(fullaot_regtests) $(fullaot_testing_deps) $(FULLAOT_TMP_DIR)/ - MONO_PATH=$(FULLAOT_TMP_DIR) $(top_builddir)/runtime/mono-wrapper $(MOBILE_RUNTIME_ARG) $(LLVM_AOT_RUNTIME_OPTS) $(GSHAREDVT_RUNTIME_OPTS) --aot="full,$(MONO_FULLAOT_ADDITIONAL_ARGS)$(INVARIANT_AOT_OPTIONS)" $(FULLAOT_TMP_DIR)/{*.dll,*.exe} || exit 1 + MONO_PATH=$(FULLAOT_TMP_DIR) $(top_builddir)/runtime/mono-wrapper $(MOBILE_RUNTIME_ARG) $(LLVM_AOT_RUNTIME_OPTS) $(GSHAREDVT_RUNTIME_OPTS) --aot="$(FULLAOT_AOT_ARGS),$(MONO_FULLAOT_ADDITIONAL_ARGS)$(INVARIANT_AOT_OPTIONS)" $(FULLAOT_TMP_DIR)/{*.dll,*.exe} || exit 1 ln -s $(if $(MONO_EXECUTABLE),$(MONO_EXECUTABLE),$$PWD/mono) $(FULLAOT_TMP_DIR)/ - for i in $(fullaot_regtests); do echo $$i; MONO_PATH=$(FULLAOT_TMP_DIR) $(top_builddir)/runtime/mono-wrapper $(MOBILE_RUNTIME_ARG) --full-aot $(FULLAOT_TMP_DIR)/$$i --exclude '!FULLAOT' $(ARCH_FULLAOT_EXCLUDE) || exit 1; done + for i in $(fullaot_regtests); do echo $$i; MONO_PATH=$(FULLAOT_TMP_DIR) $(top_builddir)/runtime/mono-wrapper $(MOBILE_RUNTIME_ARG) $(FULLAOT_ARGS) $(FULLAOT_TMP_DIR)/$$i --exclude '!FULLAOT' $(ARCH_FULLAOT_EXCLUDE) || exit 1; done # This can run in parallel fullaot-libs: $(patsubst %,fullaot-tmp/%.dylib,$(FULLAOT_LIBS)) diff --git a/mono/mini/mini.c b/mono/mini/mini.c index 0a8d3e3d2e2..7c009b37df5 100644 --- a/mono/mini/mini.c +++ b/mono/mini/mini.c @@ -3108,7 +3108,7 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, JitFl g_assert (opts & MONO_OPT_GSHARED); } else { try_generic_shared = mono_class_generic_sharing_enabled (method->klass) && - (opts & MONO_OPT_GSHARED) && mono_method_is_generic_sharable (method, FALSE); + (opts & MONO_OPT_GSHARED) && mono_method_is_generic_sharable_full (method, FALSE, FALSE, FALSE); if (mini_is_gsharedvt_sharable_method (method)) { /* if (!mono_debug_count ()) -- 2.11.4.GIT