Merge pull request #3290 from BrzVlad/fix-finalizer-tests
authorRodrigo Kumpera <kumpera@gmail.com>
Thu, 21 Jul 2016 22:32:18 +0000 (15:32 -0700)
committerGitHub <noreply@github.com>
Thu, 21 Jul 2016 22:32:18 +0000 (15:32 -0700)
[tests] Fix finalizer tests

1  2 
mono/mini/Makefile.am.in
mono/tests/Makefile.am

diff --combined mono/mini/Makefile.am.in
index 15a89aade3676522290c0affa9c36f4bceb677bd,2fbe1b272b20f42ae451645098af22a2493ed4b6..0145a955d42e90c429645a6e9f675fe73a4edc33
@@@ -486,24 -486,12 +486,24 @@@ test_sources =                  
        gc-test.cs \
        gshared.cs
  
 -regtests=basic.exe basic-float.exe basic-long.exe basic-calls.exe objects.exe arrays.exe basic-math.exe exceptions.exe iltests.exe devirtualization.exe generics.exe basic-simd.exe
 +
 +regtests_UNIVERSAL=basic.exe basic-float.exe basic-long.exe basic-calls.exe objects.exe arrays.exe basic-math.exe exceptions.exe iltests.exe devirtualization.exe generics.exe basic-simd.exe
 +
 +if INSTALL_MOBILE_STATIC
 +regtests= \
 +      $(regtests_UNIVERSAL)
 +
  if NACL_CODEGEN
  test_sources += nacl.cs
  regtests += nacl.exe
  endif
  
 +else
 +regtests= \
 +      $(regtests_UNIVERSAL) \
 +      $(regtests_MOBILE_STATIC_BLACKLIST)
 +endif
 +
  if X86
  arch_sources = $(x86_sources)
  arch_built=cpu-x86.h
@@@ -595,12 -583,12 +595,12 @@@ libmini_la_CFLAGS = $(mono_CFLAGS
  libmonoboehm_2_0_la_SOURCES =
  libmonoboehm_2_0_la_CFLAGS = $(mono_boehm_CFLAGS)
  libmonoboehm_2_0_la_LIBADD = libmini.la $(boehm_libs) $(LIBMONO_DTRACE_OBJECT) $(LLVMMONOF)
 -libmonoboehm_2_0_la_LDFLAGS = $(libmonoldflags)
 +libmonoboehm_2_0_la_LDFLAGS = $(libmonoldflags) $(monobin_platform_ldflags)
  
  libmonosgen_2_0_la_SOURCES =
  libmonosgen_2_0_la_CFLAGS = $(mono_sgen_CFLAGS)
  libmonosgen_2_0_la_LIBADD = libmini.la $(sgen_libs) $(LIBMONO_DTRACE_OBJECT) $(LLVMMONOF)
 -libmonosgen_2_0_la_LDFLAGS = $(libmonoldflags)
 +libmonosgen_2_0_la_LDFLAGS = $(libmonoldflags) $(monobin_platform_ldflags)
  
  #
  # This library is shared between mono and mono-sgen, since the code in mini/ doesn't contain
@@@ -632,8 -620,8 +632,8 @@@ generics.exe: generics.cs TestDriver.dl
  %.exe: %.il
        $(ILASM) -output=$@ $<
  
- TestDriver.dll: $(srcdir)/TestDriver.cs
-       $(MCS) -out:$@ -target:library $<
+ TestDriver.dll: $(srcdir)/TestDriver.cs $(srcdir)/TestHelpers.cs
+       $(MCS) -out:$@ -target:library $^
  
  generics-variant-types.dll: generics-variant-types.il
        $(ILASM) -dll -output=$@ $<
@@@ -695,7 -683,7 +695,7 @@@ testi: mono test.ex
  checktests: $(regtests)
        for i in $(regtests); do $(MINI_RUNTIME) $$i; done
  
 -rcheck: mono $(regtests)
 +rcheck-ci: mono $(regtests)
  if NACL_CODEGEN
        for i in $(regtests); do echo "running test $$i"; $(MINI_RUNTIME) $$i --exclude 'NaClDisable' || exit 1; done
  else
        exit $$(cat regressionexitcode.out)
  endif
  
 -rcheck2: mono $(regtests)
 +rcheck-normal: mono $(regtests)
        $(MINI_RUNTIME) --regression $(regtests)
  
  if ARM
@@@ -736,43 -724,26 +736,43 @@@ gsharedvtcheck
  
  fullaot_regtests = $(regtests) aot-tests.exe $(if $(GSHAREDVT),gshared.exe)
  
 -FULLAOT_LIBS = \
 +# Skip aoting the tests that aren't compiled 
 +# on the mobile_static profile because they're skipped
 +# on mobile profiles
 +FULLAOT_LIBS_MOBILE_STATIC_BLACKLIST = \
 +      Mono.Posix.dll \
 +      System.Configuration.dll \
 +      Mono.Simd.dll
 +
 +FULLAOT_LIBS_UNIVERSAL = \
        mscorlib.dll \
        System.Core.dll \
        System.dll \
 -      Mono.Posix.dll \
 -      System.Configuration.dll \
 -      System.Security.dll \
        System.Xml.dll \
 -      Mono.Security.dll \
 -      Mono.Simd.dll
 +      System.Security.dll \
 +      Mono.Security.dll
 +
 +if INSTALL_MOBILE_STATIC
 +FULLAOT_LIBS= \
 +      Mono.Dynamic.Interpreter.dll \
 +      $(FULLAOT_LIBS_UNIVERSAL)
 +else
 +FULLAOT_LIBS= \
 +      $(FULLAOT_LIBS_UNIVERSAL) \
 +      $(FULLAOT_LIBS_MOBILE_STATIC_BLACKLIST)
 +endif
 +
 +FULLAOT_TMP_DIR=$(top_builddir)/mono/mini/fullaot-tmp
  
  # This currently only works on amd64/arm
  fullaotcheck: $(mono) $(fullaot_regtests)
 -      rm -rf fullaot-tmp
 -      mkdir fullaot-tmp
 +      rm -rf $(FULLAOT_TMP_DIR)
 +      mkdir $(FULLAOT_TMP_DIR)
        $(MAKE) fullaot-libs AOT_FLAGS="full,$(MONO_FULLAOT_ADDITIONAL_ARGS)" GSHAREDVT=$(GSHAREDVT)
 -      cp $(regtests) $(fullaot_regtests) generics-variant-types.dll TestDriver.dll fullaot-tmp/
 -      MONO_PATH=fullaot-tmp $(top_builddir)/runtime/mono-wrapper $(LLVM_AOT_RUNTIME_OPTS) $(GSHAREDVT_RUNTIME_OPTS) --aot="full,$(MONO_FULLAOT_ADDITIONAL_ARGS)" fullaot-tmp/{generics-variant-types.dll,TestDriver.dll,*.exe} || exit 1
 -      ln -s $(if $(MONO_EXECUTABLE),$(MONO_EXECUTABLE),$$PWD/mono) fullaot-tmp/
 -      for i in $(fullaot_regtests); do echo $$i; MONO_PATH=fullaot-tmp $(top_builddir)/runtime/mono-wrapper --full-aot fullaot-tmp/$$i --exclude '!FULLAOT' $(ARCH_FULLAOT_EXCLUDE) || exit 1; done
 +      cp $(regtests) $(fullaot_regtests) generics-variant-types.dll TestDriver.dll $(FULLAOT_TMP_DIR)/
 +      MONO_PATH=$(FULLAOT_TMP_DIR) $(top_builddir)/runtime/mono-wrapper $(LLVM_AOT_RUNTIME_OPTS) $(GSHAREDVT_RUNTIME_OPTS) --aot="full,$(MONO_FULLAOT_ADDITIONAL_ARGS)" $(FULLAOT_TMP_DIR)/{generics-variant-types.dll,TestDriver.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 --full-aot $(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))
@@@ -821,14 -792,7 +821,14 @@@ stat3: mono bench.ex
  docu: mini.sgm
        docbook2txt mini.sgm
  
 -check-local: rcheck check-seq-points
 +# CI - Wrench
 +# BUILD_URL = Jenkins
 +RUNNING_ON_CI = $(CI)$(BUILD_URL)
 +
 +# We need these because automake can't process normal make conditionals
 +check_local_targets = $(if $(RUNNING_ON_CI), rcheck-ci check-seq-points, rcheck-normal)
 +
 +check-local: $(check_local_targets)
  
  clean-local:
        rm -f mono a.out gmon.out *.o buildver-boehm.h buildver-sgen.h test.exe regressionexitcode.out TestResult-op_il_seq_point.xml*
@@@ -839,6 -803,7 +839,7 @@@ BUILT_SOURCES = version.h $(arch_built
  
  CLEANFILES= $(BUILT_SOURCES) *.exe *.dll
  EXTRA_DIST = TestDriver.cs \
+       TestHelpers.cs \
        genmdesc.pl                             \
        emitnunit.pl                    \
        $(test_sources)                         \
diff --combined mono/tests/Makefile.am
index c8aaaa3d0f55fc1c6c8221201f8fff3c6a4ee239,c5ed8c42fbc47efe85697ed56547ce7ba8ed8f25..3f225f93cde330f8ed3b73251abc83a08e55b3be
@@@ -1,13 -1,7 +1,13 @@@
  SUBDIRS = assemblyresolve gc-descriptors
  
 +if INSTALL_MOBILE_STATIC
 +FEATUREFUL_RUNTIME_TEST =  
 +else
 +FEATUREFUL_RUNTIME_TEST = test-appdomain-unload
 +endif
 +
  check-local: assemblyresolve/test/asm.dll testjit test-generic-sharing test-type-load test-cattr-type-load test-reflection-load-with-context test_platform    \
 -               test-console-output test-messages test-env-options test-unhandled-exception-2 test-appdomain-unload test-process-stress rm-empty-logs
 +               test-console-output test-messages test-env-options test-unhandled-exception-2 $(FEATUREFUL_RUNTIME_TEST) test-process-stress rm-empty-logs
  check-full: test-sgen check-local
  check-parallel: compile-tests check-full
  
@@@ -19,13 -13,6 +19,13 @@@ test-wrench: check-paralle
  
  aotcheck: testaot gshared-aot
  
 +# Whenever running under CI
 +# Can't use make conditionals since
 +# automake doesn't support them
 +# CI - Wrench
 +# BUILD_URL = Jenkins
 +RUNNING_ON_CI = $(CI)$(BUILD_URL)
 +
  TEST_PROG = ../interpreter/mint
  
  JITTEST_PROG = $(if $(VALGRIND), valgrind $(VALGRIND_ARGS),) $(if $(SGEN),$(top_builddir)/mono/mini/mono-sgen,$(top_builddir)/mono/mini/mono)
@@@ -41,9 -28,6 +41,9 @@@ els
  TEST_RUNNER_ARGS=--config tests-config --runtime $(if $(MONO_EXECUTABLE),$(MONO_EXECUTABLE),mono)
  endif
  
 +TEST_RUNNER_ARGS += $(if $(RUNNING_ON_CI), --verbose,)
 +TEST_RUNNER_ARGS += $(if $(V), --verbose,)
 +
  CLASS=$(mcs_topdir)/class/lib/$(DEFAULT_PROFILE)
  
  with_mono_path = MONO_PATH=$(CLASS)
@@@ -54,27 -38,16 +54,27 @@@ MKBUNDLE = 
        PKG_CONFIG_PATH=$(top_builddir):$(PKG_CONFIG_PATH) \
        $(RUNTIME) $(CLASS)/mkbundle.exe
  
 +if INSTALL_MOBILE_STATIC
 +PROFILE_MCS_FLAGS = -d:MOBILE,MOBILE_STATIC,MOBILE_LEGACY 
 +endif
 +
  MCS_NO_LIB = $(RUNTIME) $(mcs_topdir)/class/lib/build/mcs.exe -unsafe -debug \
        -noconfig -nologo \
        -nowarn:0162 -nowarn:0168 -nowarn:0219 -nowarn:0414 -nowarn:0618 \
        -nowarn:0169 -nowarn:1690 -nowarn:0649 -nowarn:0612 -nowarn:3021 \
 -      -nowarn:0197
 +      -nowarn:0197 $(PROFILE_MCS_FLAGS)
  
  MCS = $(MCS_NO_LIB) -lib:$(CLASS)
  
  ILASM = $(RUNTIME) $(CLASS)/ilasm.exe
  
 +if INSTALL_MOBILE_STATIC
 +TEST_RUNNER = ./test-runner.exe --runtime $(top_builddir)/runtime/mono-wrapper --mono-path "$(CLASS)" --aot-run-flags "$(AOT_RUN_FLAGS)" --aot-build-flags "$(AOT_BUILD_FLAGS)"
 +else
 +TEST_RUNNER = ./test-runner.exe --runtime $(top_builddir)/runtime/mono-wrapper --mono-path "$(CLASS)"
 +endif
 +
 +
  BENCHSRC=fib.cs random.cs nested-loops.cs ackermann.cs tight-loop.cs sieve.cs
  
  STRESS_TESTS_SRC=     \
        process-stress.cs       \
        assembly-load-stress.cs
  
 +BASE_TEST_MOBILE_STATIC_NOT_SUPPORTED= \
 +      remoting4.cs            # Needs remoting support \
 +      remoting1.cs            # Needs remoting support \
 +      remoting2.cs            # Needs remoting support \
 +      remoting3.cs            # Needs remoting support \
 +      remoting5.cs            # Needs remoting support \
 +      appdomain.cs        # Needs appdomain support \
 +      appdomain-client.cs     # Needs appdomain support \
 +      appdomain-unload.cs # Needs appdomain support \
 +      appdomain-async-invoke.cs       # Needs appdomain support \
 +      appdomain-thread-abort.cs       # Needs appdomain support \
 +      appdomain1.cs           # Needs appdomain support \
 +      appdomain2.cs           # Needs appdomain support \
 +      appdomain-exit.cs       # Needs appdomain support \
 +      assemblyresolve_event2.2.cs     # Needs appdomain support \
 +      appdomain-unload-callback.cs    # Needs appdomain support \
 +      appdomain-unload-doesnot-raise-pending-events.cs        # Needs appdomain support \
 +      unload-appdomain-on-shutdown.cs # Needs appdomain support \
 +      bug-47295.cs # Needs SRE \
 +      loader.cs # Needs SRE \
 +      pinvoke2.cs # Needs SRE \
 +      generic-type-builder.2.cs       # Needs SRE \
 +      dynamic-generic-size.cs # Needs SRE \
 +      cominterop.cs   # Needs COM \
 +      dynamic-method-access.2.cs      # Need SRE \
 +      dynamic-method-finalize.2.cs    # Need SRE \
 +      dynamic-method-stack-traces.cs # Need SRE\
 +      generic_type_definition.2.cs    # Need SRE \
 +      bug-333798-tb.2.cs      # Need SRE \
 +      bug-335131.2.cs # Need SRE \
 +      bug-322722_patch_bx.2.cs        # Need SRE\
 +      bug-322722_dyn_method_throw.2.cs        # Need SRE \
 +      bug-389886-2.cs # Need SRE \
 +      bug-349190.2.cs # Need SRE \
 +      bug-389886-sre-generic-interface-instances.cs   # Need SRE \
 +      bug-462592.cs   # Need SRE \
 +      bug-575941.cs   # Need SRE \
 +      bug-389886-3.cs # Need SRE \
 +      dynamic-method-resurrection.cs  # Need SRE \
 +      bug-80307.cs    # Need System.Web \
 +      assembly_append_ordering.cs # Need SRE \
 +      bug-544446.cs   # Needs AppDomains / TranparentProxy \
 +      bug-36848.cs   # Needs AppDomains / TranparentProxy \
 +      generic-marshalbyref.2.cs # Needs AppDomains \
 +      stackframes-async.2.cs # Needs AppDomains \
 +      transparentproxy.cs # Needs AppDomains / TranparentProxy \
 +      bug-48015.cs # Needs AppDomains / TranparentProxy \
 +      delegate9.cs # Needs AppDomains \
 +      marshal-valuetypes.cs   # Needs AppDomains \
 +      xdomain-threads.cs      # Needs AppDomains \
 +      monitor.cs # Needs AppDomains \
 +      generic-xdomain.2.cs # Needs AppDomains \
 +      threadpool-exceptions7.cs # Needs AppDomains \
 +      cross-domain.cs # Needs AppDomains \
 +      generic-unloading.2.cs # Needs AppDomains \
 +      thread6.cs # On MOBILE, ThreadAbortException doesn't have necessary field for this test
 +
  # Disabled until ?mcs is fixed
  #     bug-331958.cs
 -BASE_TEST_CS_SRC=             \
 +BASE_TEST_CS_SRC_UNIVERSAL=           \
 +      generic-unloading-sub.2.cs      \
 +      create-instance.cs      \
        bug-2907.cs             \
        array-init.cs           \
        arraylist.cs            \
        assemblyresolve_event4.cs       \
        checked.cs              \
        char-isnumber.cs        \
 -      create-instance.cs      \
        field-layout.cs         \
        pack-layout.cs          \
        pack-bug.cs             \
        typeof-ptr.cs           \
        static-constructor.cs   \
        pinvoke.cs              \
 -      pinvoke2.cs             \
        pinvoke3.cs             \
        pinvoke11.cs            \
        pinvoke13.cs            \
        jit-float.cs            \
        pop.cs                  \
        time.cs                 \
 -      appdomain.cs        \
 -      appdomain1.cs           \
 -      appdomain2.cs           \
 -      appdomain-client.cs     \
 -      appdomain-unload.cs \
 -      appdomain-async-invoke.cs       \
 -      loader.cs       \
        pointer.cs              \
        hashcode.cs             \
        delegate1.cs            \
        delegate6.cs            \
        delegate7.cs            \
        delegate8.cs            \
 -      delegate9.cs            \
        delegate10.cs           \
        delegate11.cs           \
        delegate12.cs           \
        delegate13.cs           \
 -      remoting1.cs            \
 -      remoting2.cs            \
 -      remoting3.cs            \
 -      remoting4.cs            \
 -      remoting5.cs            \
        largeexp.cs             \
        largeexp2.cs            \
        marshalbyref1.cs        \
        marshal8.cs             \
        marshal9.cs             \
        marshalbool.cs          \
 -      marshal-valuetypes.cs   \
        test-byval-in-struct.cs \
        thread.cs               \
        thread5.cs              \
 -      thread6.cs              \
        thread-static.cs        \
        thread-static-init.cs   \
        context-static.cs       \
        threadpool-exceptions4.cs \
        threadpool-exceptions5.cs \
        threadpool-exceptions6.cs \
 -      threadpool-exceptions7.cs \
        base-definition.cs      \
        bug-27420.cs            \
 -      bug-47295.cs            \
        bug-46781.cs            \
 -      bug-48015.cs            \
        bug-42136.cs            \
        bug-59286.cs            \
        bug-70561.cs            \
        bug-323114.cs           \
        bug-Xamarin-5278.cs     \
        interlocked.cs          \
 -      cross-domain.cs         \
 -      appdomain-exit.cs       \
        delegate-async-exit.cs  \
        delegate-delegate-exit.cs       \
        delegate-exit.cs        \
        main-returns.cs         \
        subthread-exit.cs       \
        desweak.cs              \
 -      cominterop.cs           \
        exists.cs               \
        handleref.cs    \
 -      transparentproxy.cs \
        dbnull-missing.cs       \
        test-type-ctor.cs       \
        soft-float-tests.cs     \
        thread-exit.cs          \
        finalize-parent.cs      \
 -      assemblyresolve_event2.2.cs     \
        interlocked-2.2.cs      \
        pinvoke-2.2.cs          \
        bug-78431.2.cs          \
        catch-generics.2.cs     \
        event-get.2.cs          \
        safehandle.2.cs         \
 -      stackframes-async.2.cs          \
        module-cctor-loader.2.cs        \
        generics-invoke-byref.2.cs      \
        generic-signature-compare.2.cs  \
        generic-virtual2.2.cs   \
        generic-valuetype-interface.2.cs        \
        generic-getgenericarguments.2.cs        \
 -      generic-type-builder.2.cs       \
        generic-synchronized.2.cs       \
        generic-delegate-ctor.2.cs      \
        generic-array-iface-set.2.cs    \
        generic-typedef.2.cs    \
 -      generic-marshalbyref.2.cs       \
 -      generic-xdomain.2.cs    \
 -      dynamic-generic-size.cs \
        bug-431413.2.cs \
        bug-459285.2.cs \
        generic-virtual-invoke.2.cs     \
        bug-479763.2.cs \
        bug-616463.cs   \
        bug-80392.2.cs          \
 -      dynamic-method-access.2.cs      \
 -      dynamic-method-finalize.2.cs    \
 -      dynamic-method-stack-traces.cs  \
        bug-82194.2.cs  \
        anonarray.2.cs  \
        ienumerator-interfaces.2.cs     \
        array-enumerator-ifaces.2.cs    \
        generic_type_definition_encoding.2.cs \
 -      generic_type_definition.2.cs    \
        bug-333798.2.cs         \
 -      bug-333798-tb.2.cs              \
 -      bug-335131.2.cs         \
 -      bug-322722_patch_bx.2.cs                \
        bug-348522.2.cs         \
        bug-340662_bug.cs       \
 -      bug-322722_dyn_method_throw.2.cs        \
 -      bug-389886-2.cs \
        bug-325283.2.cs \
        thunks.cs \
        winx64structs.cs \
 -      bug-349190.2.cs \
        nullable_boxing.2.cs    \
        valuetype-equals.cs     \
        custom-modifiers.2.cs   \
        bug-324535.cs   \
        modules.cs      \
        bug-81673.cs    \
 -      bug-36848.cs    \
        bug-81691.cs    \
 -      bug-80307.cs    \
        bug-415577.cs   \
        filter-stack.cs \
        vararg2.cs      \
 -      bug-389886-sre-generic-interface-instances.cs   \
        bug-461867.cs   \
        bug-461941.cs   \
        bug-461261.cs   \
        bug-400716.cs   \
 -      bug-462592.cs   \
        bug-459094.cs   \
 -      generic-unloading.2.cs  \
 -      generic-unloading-sub.2.cs      \
        bug-467456.cs   \
 -      appdomain-unload-callback.cs    \
        bug-508538.cs   \
        bug-472692.2.cs         \
        gchandles.cs    \
        interlocked-3.cs        \
        interlocked-4.2.cs      \
 -      appdomain-thread-abort.cs \
 -      xdomain-threads.cs      \
        w32message.cs   \
 -      bug-544446.cs   \
        gc-altstack.cs  \
        large-gc-bitmap.cs      \
        bug-561239.cs   \
        bug-562150.cs   \
 -      bug-575941.cs   \
        bug-599469.cs   \
 -      bug-389886-3.cs \
 -      monitor.cs      \
        monitor-resurrection.cs \
        monitor-wait-abort.cs   \
        monitor-abort.cs        \
 -      dynamic-method-resurrection.cs  \
        bug-666008.cs   \
        bug-685908.cs   \
        sgen-long-vtype.cs      \
        bug-bxc-795.cs  \
        bug-3903.cs     \
        async-with-cb-throws.cs \
 -      appdomain-unload-doesnot-raise-pending-events.cs        \
        bug-6148.cs     \
 -      assembly_append_ordering.cs     \
        bug-10127.cs    \
        bug-18026.cs    \
        allow-synchronous-major.cs      \
 -      unload-appdomain-on-shutdown.cs \
        block_guard_restore_aligment_on_exit.cs \
        thread_static_gc_layout.cs \
        sleep.cs \
        bug-29585.cs    \
        priority.cs
  
 +if INSTALL_MOBILE_STATIC
 +BASE_TEST_CS_SRC= \
 +      $(BASE_TEST_CS_SRC_UNIVERSAL)
 +else
 +BASE_TEST_CS_SRC= \
 +      $(BASE_TEST_MOBILE_STATIC_NOT_SUPPORTED) \
 +      $(BASE_TEST_CS_SRC_UNIVERSAL)
 +endif
 +
  TEST_CS_SRC_DIST=     \
        $(BASE_TEST_CS_SRC)     \
        async-exc-compilation.cs \
@@@ -636,52 -598,6 +636,52 @@@ els
  COOP_DISABLED_TESTS= 
  endif
  
 +if INSTALL_MOBILE_STATIC
 +# Tests which rely on TypeLoadExceptions
 +# In full-aot mode, these cause the relevant methods to be not AOTed.
 +PROFILE_DISABLED_TESTS = \
 +      typeload-unaligned.exe \
 +      field-access.exe \
 +      invalid_generic_instantiation.exe \
 +      bug-481403.exe \
 +      array_ldelema.exe \
 +      array_load_exception.exe \
 +      bug445361.exe \
 +      generic-type-load-exception.2.exe \
 +      invalid-token.exe \
 +      call_missing_method.exe \
 +      call_missing_class.exe \
 +      ldfld_missing_field.exe \
 +      ldfld_missing_class.exe \
 +      vt-sync-method.exe
 +
 +# Tests which rely on remoting
 +PROFILE_DISABLED_TESTS += \
 +      context-static.exe \
 +      bug-415577.exe \
 +      generic-marshalbyref.2.exe \
 +      unhandled-exception-7.exe
 +
 +# Tests which use unsupported pinvoke+full aot
 +# functionality
 +PROFILE_DISABLED_TESTS += \
 +      marshal.exe \
 +      marshal2.exe \
 +      marshal6.exe \
 +      marshal7.exe \
 +      marshal8.exe \
 +      pinvoke-2.2.exe \
 +      pinvoke3.exe \
 +      thunks.exe
 +
 +# Tests which load assemblies which are not
 +# in the mobile_static profile
 +PROFILE_DISABLED_TESTS += \
 +      assembly-load-remap.exe
 +else
 +PROFILE_DISABLED_TESTS=
 +endif
 +
  # The two finalizer tests only work under sgen
  # gc-altstack.exe fails under boehm because it has no support for altstack
  # bug-459094.exe creates an extremely deep directory tree
@@@ -696,8 -612,7 +696,8 @@@ DISABLED_TESTS=                    
        bug-Xamarin-5278.exe \
        $(PLATFORM_DISABLED_TESTS) \
        $(EXTRA_DISABLED_TESTS) \
 -      $(COOP_DISABLED_TESTS)
 +      $(COOP_DISABLED_TESTS) \
 +      $(PROFILE_DISABLED_TESTS)
  
  DISABLED_TESTS_WRENCH=        \
        $(DISABLED_TESTS)       \
@@@ -717,14 -632,7 +717,14 @@@ AOT_DISABLED_TESTS=constraints-load.ex
  TEST_CSC_SRC=                 \
        vararg.cs
  
 -TEST_IL_SRC=                  \
 +# constraints-load.il: 
 +# Failed to load method 0x6000007 from '..../mono/tests/constraints-load.exe' due to 
 +# Could not resolve type with token 01000002 assembly:mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 type:System.BrokenIComparable`1 member:<none>.
 +IL_SRC_MOBILE_STATIC_NOT_SUPPORTED=   \
 +      constraints-load.il \
 +      bug-515884.il
 +
 +TEST_IL_SRC_UNIVERSAL=                        \
        field-access.il         \
        method-access.il        \
        ldftn-access.il         \
        bug-463303.il   \
        bug469742.2.il  \
        bug-528055.il   \
 -      constraints-load.il     \
        array_load_exception.il \
        bug-481403.il   \
        interface-with-static-method.il \
 -      bug-515884.il   \
        bug-633291.il   \
        delegate-with-null-target.il    \
        bug-318677.il   \
        gsharing-valuetype-layout.il    \
        invalid_generic_instantiation.il
  
 +if INSTALL_MOBILE_STATIC
 +TEST_IL_SRC= \
 +      $(TEST_IL_SRC_UNIVERSAL)
 +else
 +TEST_IL_SRC= \
 +      $(TEST_IL_SRC_MOBILE_STATIC_NOT_SUPPORTED) \
 +      $(TEST_IL_SRC_UNIVERSAL)
 +endif
  
  # pre-requisite test sources: files that are not test themselves
  # but that need to be compiled
@@@ -815,33 -717,14 +815,33 @@@ TESTSI_IL=$(TEST_IL_SRC:.il=.exe
  TESTBS=$(BENCHSRC:.cs=.exe)
  STRESS_TESTS=$(STRESS_TESTS_SRC:.cs=.exe)
  
 +PREREQSI_IL_AOT=$(PREREQ_IL_SRC:.il=.exe$(PLATFORM_AOT_SUFFIX))
 +PREREQSI_CS_AOT=$(PREREQ_CS_SRC:.cs=.exe$(PLATFORM_AOT_SUFFIX))
 +
  EXTRA_DIST=test-driver test-runner.cs $(TEST_CS_SRC_DIST) $(TEST_IL_SRC) \
        $(BENCHSRC) $(STRESS_TESTS_SRC) stress-runner.pl $(PREREQ_IL_SRC) $(PREREQ_CS_SRC)
  
  %.exe: %.il
        $(ILASM) -out:$@ $<
  
 -%.exe: %.cs TestDriver.dll
 -      $(MCS) -r:System.dll -r:System.Xml.dll -r:System.Core.dll -r:TestDriver.dll -r:Mono.Posix.dll -out:$@ $<
 +if !INSTALL_MOBILE_STATIC
 +TEST_DRIVER_HARD_KILL_FEATURE=-r:Mono.Posix.dll
 +endif
 +
 +if INSTALL_MOBILE_STATIC
 +TEST_DRIVER_DEPEND=TestDriver.dll$(PLATFORM_AOT_SUFFIX)
 +else
 +TEST_DRIVER_DEPEND=TestDriver.dll
 +endif
 +
 +%.exe: %.cs $(TEST_DRIVER_DEPEND)
 +      $(MCS) -r:System.dll -r:System.Xml.dll -r:System.Core.dll -r:TestDriver.dll $(TEST_DRIVER_HARD_KILL_FEATURE) -out:$@ $<
 +
 +%.exe$(PLATFORM_AOT_SUFFIX): %.exe 
 +      $(RUNTIME) $(AOT_BUILD_FLAGS) $<
 +
 +%.dll$(PLATFORM_AOT_SUFFIX): %.dll 
 +      $(RUNTIME) $(AOT_BUILD_FLAGS) $<
  
  # mkbundle works on ppc, but the pkg-config POC doesn't when run with make test
  if POWERPC
@@@ -865,22 -748,8 +865,22 @@@ test_platform: test-eglib-rema
  endif
  endif
  
 +AOT_EXTRA_LIBS =      \
 +bug-382986-lib.dll$(PLATFORM_AOT_SUFFIX)      \
 +bug-324535-il.dll$(PLATFORM_AOT_SUFFIX)       \
 +bug-36848-a.dll$(PLATFORM_AOT_SUFFIX) \
 +bug-81691-b.dll$(PLATFORM_AOT_SUFFIX) \
 +bug-327438.2.exe$(PLATFORM_AOT_SUFFIX)        \
 +bug-81466-lib.dll$(PLATFORM_AOT_SUFFIX)
 +
 +if INSTALL_MOBILE_STATIC
 +prereqs: $(PREREQSI_IL_AOT) $(PREREQSI_CS_AOT) $(AOT_EXTRA_LIBS)
 +else
 +prereqs: $(PREREQSI_IL) $(PREREQSI_CS)
 +endif
 +
  # Target to precompile the test executables
 -tests: $(TESTSI_CS) $(TESTSI_IL) $(TESTBS) libtest.la $(PREREQSI_IL) $(PREREQSI_CS) $(GSHARED_TESTS)
 +tests: $(TESTSI_CS) $(TESTSI_IL) $(TESTBS) libtest.la prereqs $(GSHARED_TESTS)
  
  #
  # Test that no symbols are missed in eglib-remap.h
@@@ -918,9 -787,6 +918,9 @@@ test-sgen : sgen-test
  # Precompile the test assemblies in parallel
  compile-tests:
        $(MAKE) -j4 $(TESTSI_CS) $(TESTSI_IL) $(TESTBS) libtest.la $(PREREQSI_IL) $(PREREQSI_CS)
 +if INSTALL_MOBILE_STATIC
 +      $(MAKE) $(PREREQSI_IL_AOT) $(PREREQSI_CS_AOT) $(AOT_EXTRA_LIBS)
 +endif
  
  # Remove empty .stdout and .stderr files for wrench
  rm-empty-logs:
@@@ -931,7 -797,7 +931,7 @@@ assemblyresolve/test/asm.dll
        $(MAKE) -C assemblyresolve prereq
  
  TestDriver.dll:
-       $(MCS) -target:library -out:$@ $(srcdir)/../mini/TestDriver.cs
+       $(MCS) -target:library -out:$@ $(srcdir)/../mini/TestDriver.cs $(srcdir)/../mini/TestHelpers.cs
  
  test_cs: $(TEST_PROG) $(TESTSI_CS) libtest.la
        @failed=0; \
@@@ -1008,11 -874,11 +1008,11 @@@ runtest: $(TESTSI_CS) $(TESTSI_IL) $(TE
  
  runtest-managed: test-runner.exe $(TESTSI_CS) $(TESTSI_IL) $(TESTBS) libtest.la $(PREREQSI_IL) $(PREREQSI_CS)
        @if [ "x$$CI" = "x1" ]; then disabled_tests="$(DISABLED_TESTS_WRENCH)"; else disabled_tests="$(DISABLED_TESTS)"; fi; \
 -      $(RUNTIME) --debug ./test-runner.exe $(TEST_RUNNER_ARGS) -j a --testsuite-name "runtime" --timeout 300 --disabled "$${disabled_tests}" $(TESTSI_CS) $(TESTBS) $(TESTSI_IL)
 +      $(RUNTIME) --debug $(TEST_RUNNER) $(TEST_RUNNER_ARGS) -j a --testsuite-name "runtime" --timeout 300 --disabled "$${disabled_tests}" $(TESTSI_CS) $(TESTBS) $(TESTSI_IL)
  
  runtest-managed-serial: test-runner.exe $(TESTSI_CS) $(TESTSI_IL) $(TESTBS) libtest.la $(PREREQSI_IL) $(PREREQSI_CS)
        @if [ "x$$CI" = "x1" ]; then disabled_tests="$(DISABLED_TESTS_WRENCH)"; else disabled_tests="$(DISABLED_TESTS)"; fi; \
 -      $(RUNTIME) --debug ./test-runner.exe $(TEST_RUNNER_ARGS) -j 1 --testsuite-name "runtime" --disabled "$${disabled_tests}" $(TESTSI_CS) $(TESTBS) $(TESTSI_IL)
 +      $(RUNTIME) --debug $(TEST_RUNNER) $(TEST_RUNNER_ARGS) -j 1 --testsuite-name "runtime" --disabled "$${disabled_tests}" $(TESTSI_CS) $(TESTBS) $(TESTSI_IL)
  
  testjit:
        @if test x$(M) != x0; then $(MAKE) runtest-managed; else $(MAKE) runtest; fi
@@@ -1062,7 -928,7 +1062,7 @@@ testbundle: console.ex
        @- rm -rf a.out
  
  EXTRA_DIST += load-missing.il t-missing.cs load-exceptions.cs
 -test-type-load: TestDriver.dll
 +test-type-load: $(TEST_DRIVER_DEPEND)
        @$(ILASM) /dll /output:load-missing.dll $(srcdir)/load-missing.il > /dev/null
        @$(MCS) -t:library -out:t.dll -d:FOUND $(srcdir)/t-missing.cs
        @$(MCS) -r:TestDriver.dll -r:load-missing.dll -r:t.dll -out:load-exceptions.exe $(srcdir)/load-exceptions.cs
        @$(RUNTIME) load-exceptions.exe > load-exceptions.exe.stdout 2> load-exceptions.exe.stderr
  
  EXTRA_DIST += custom-attr-errors.cs custom-attr-errors-lib.cs
 -test-cattr-type-load: TestDriver.dll custom-attr-errors.cs custom-attr-errors-lib.cs
 +test-cattr-type-load: $(TEST_DRIVER_DEPEND) custom-attr-errors.cs custom-attr-errors-lib.cs
        $(MCS) -D:WITH_MEMBERS /t:library $(srcdir)/custom-attr-errors-lib.cs
        $(MCS) -r:TestDriver.dll -r:custom-attr-errors-lib.dll  $(srcdir)/custom-attr-errors.cs
        $(MCS) /t:library $(srcdir)/custom-attr-errors-lib.cs
@@@ -1105,15 -971,13 +1105,15 @@@ if !S390
        $(MAKE) sgen-bridge2-tests
  endif
  
 -SGEN_REGULAR_TESTS =  \
 +SGEN_REGULAR_TESTS_MOBILE_STATIC_NOT_SUPPORTED =      \
 +      sgen-domain-unload.exe  \
 +      sgen-domain-unload-2.exe
 +
 +SGEN_REGULAR_TESTS_UNIVERSAL =        \
        finalizer-wait.exe      \
        critical-finalizers.exe \
        sgen-descriptors.exe    \
        sgen-gshared-vtype.exe  \
 -      sgen-domain-unload.exe  \
 -      sgen-domain-unload-2.exe        \
        sgen-weakref-stress.exe \
        sgen-cementing-stress.exe       \
        sgen-case-23400.exe     \
        gc-graystack-stress.exe \
        bug-17590.exe
  
 +if INSTALL_MOBILE_STATIC
 +SGEN_REGULAR_TESTS= \
 +      $(SGEN_REGULAR_TESTS_UNIVERSAL)
 +else
 +SGEN_REGULAR_TESTS= \
 +      $(SGEN_REGULAR_TESTS_MOBILE_STATIC_NOT_SUPPORTED) \
 +      $(SGEN_REGULAR_TESTS_UNIVERSAL)
 +endif
 +
  sgen-regular-tests: $(SGEN_REGULAR_TESTS)
        $(MAKE) sgen-regular-tests-plain
        $(MAKE) sgen-regular-tests-ms-conc
        $(MAKE) sgen-regular-tests-ms-split-clear-at-gc
  
  sgen-regular-tests-plain: $(SGEN_REGULAR_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_REGULAR_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_REGULAR_TESTS)
  sgen-regular-tests-ms-conc: $(SGEN_REGULAR_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="major=marksweep-conc" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_REGULAR_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="major=marksweep-conc" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_REGULAR_TESTS)
  sgen-regular-tests-ms-conc-split: $(SGEN_REGULAR_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="major=marksweep-conc,minor=split" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_REGULAR_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="major=marksweep-conc,minor=split" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_REGULAR_TESTS)
  sgen-regular-tests-ms-split: $(SGEN_REGULAR_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="minor=split" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_REGULAR_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="minor=split" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_REGULAR_TESTS)
  sgen-regular-tests-ms-split-95: $(SGEN_REGULAR_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="minor=split,alloc-ratio=95" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_REGULAR_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="minor=split,alloc-ratio=95" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_REGULAR_TESTS)
  sgen-regular-tests-plain-clear-at-gc: $(SGEN_REGULAR_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="clear-at-gc" MONO_GC_PARAMS="" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_REGULAR_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="clear-at-gc" MONO_GC_PARAMS="" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_REGULAR_TESTS)
  sgen-regular-tests-ms-conc-clear-at-gc: $(SGEN_REGULAR_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="clear-at-gc" MONO_GC_PARAMS="major=marksweep-conc" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_REGULAR_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="clear-at-gc" MONO_GC_PARAMS="major=marksweep-conc" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_REGULAR_TESTS)
  sgen-regular-tests-ms-split-clear-at-gc: $(SGEN_REGULAR_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="clear-at-gc" MONO_GC_PARAMS="minor=split" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_REGULAR_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="clear-at-gc" MONO_GC_PARAMS="minor=split" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_REGULAR_TESTS)
  
  SGEN_TOGGLEREF_TESTS= \
        sgen-toggleref.exe
@@@ -1172,21 -1027,21 +1172,21 @@@ sgen-toggleref-tests: $(SGEN_TOGGLEREF_
        $(MAKE) sgen-toggleref-tests-ms-split-clear-at-gc
  
  sgen-toggleref-tests-plain: $(SGEN_TOGGLEREF_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="toggleref-test" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_TOGGLEREF_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="toggleref-test" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_TOGGLEREF_TESTS)
  sgen-toggleref-tests-ms-conc: $(SGEN_TOGGLEREF_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="toggleref-test,major=marksweep-conc" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_TOGGLEREF_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="toggleref-test,major=marksweep-conc" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_TOGGLEREF_TESTS)
  sgen-toggleref-tests-ms-conc-split: $(SGEN_TOGGLEREF_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="toggleref-test,major=marksweep-conc,minor=split" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_TOGGLEREF_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="toggleref-test,major=marksweep-conc,minor=split" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_TOGGLEREF_TESTS)
  sgen-toggleref-tests-ms-split: $(SGEN_TOGGLEREF_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="toggleref-test,minor=split" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_TOGGLEREF_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="toggleref-test,minor=split" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_TOGGLEREF_TESTS)
  sgen-toggleref-tests-ms-split-95: $(SGEN_TOGGLEREF_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="toggleref-test,minor=split,alloc-ratio=95" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_TOGGLEREF_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="" MONO_GC_PARAMS="toggleref-test,minor=split,alloc-ratio=95" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_TOGGLEREF_TESTS)
  sgen-toggleref-tests-plain-clear-at-gc: $(SGEN_TOGGLEREF_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="clear-at-gc" MONO_GC_PARAMS="toggleref-test" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_TOGGLEREF_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="clear-at-gc" MONO_GC_PARAMS="toggleref-test" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_TOGGLEREF_TESTS)
  sgen-toggleref-tests-ms-conc-clear-at-gc: $(SGEN_TOGGLEREF_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="clear-at-gc" MONO_GC_PARAMS="toggleref-test,major=marksweep-conc" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_TOGGLEREF_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="clear-at-gc" MONO_GC_PARAMS="toggleref-test,major=marksweep-conc" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_TOGGLEREF_TESTS)
  sgen-toggleref-tests-ms-split-clear-at-gc: $(SGEN_TOGGLEREF_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="clear-at-gc" MONO_GC_PARAMS="toggleref-test,minor=split" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_TOGGLEREF_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="clear-at-gc" MONO_GC_PARAMS="toggleref-test,minor=split" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_TOGGLEREF_TESTS)
  
  SGEN_BRIDGE_TESTS=    \
        sgen-bridge.exe \
@@@ -1203,21 -1058,21 +1203,21 @@@ sgen-bridge-tests: $(SGEN_BRIDGE_TESTS
        $(MAKE) sgen-bridge-tests-ms-split-tarjan-bridge
  
  sgen-bridge-tests-plain: $(SGEN_BRIDGE_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=Bridge" MONO_GC_PARAMS="" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=Bridge" MONO_GC_PARAMS="" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE_TESTS)
  sgen-bridge-tests-ms-conc: $(SGEN_BRIDGE_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=Bridge" MONO_GC_PARAMS="major=marksweep-conc" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=Bridge" MONO_GC_PARAMS="major=marksweep-conc" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE_TESTS)
  sgen-bridge-tests-ms-split: $(SGEN_BRIDGE_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=Bridge" MONO_GC_PARAMS="minor=split" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=Bridge" MONO_GC_PARAMS="minor=split" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE_TESTS)
  sgen-bridge-tests-plain-new-bridge: $(SGEN_BRIDGE_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=Bridge" MONO_GC_PARAMS="bridge-implementation=new" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=Bridge" MONO_GC_PARAMS="bridge-implementation=new" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE_TESTS)
  sgen-bridge-tests-ms-conc-new-bridge: $(SGEN_BRIDGE_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=Bridge" MONO_GC_PARAMS="bridge-implementation=new,major=marksweep-conc" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=Bridge" MONO_GC_PARAMS="bridge-implementation=new,major=marksweep-conc" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE_TESTS)
  sgen-bridge-tests-ms-split-new-bridge: $(SGEN_BRIDGE_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=Bridge" MONO_GC_PARAMS="bridge-implementation=new,minor=split" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=Bridge" MONO_GC_PARAMS="bridge-implementation=new,minor=split" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE_TESTS)
  sgen-bridge-tests-plain-tarjan-bridge: $(SGEN_BRIDGE_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=Bridge" MONO_GC_PARAMS="bridge-implementation=tarjan" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=Bridge" MONO_GC_PARAMS="bridge-implementation=tarjan" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE_TESTS)
  sgen-bridge-tests-ms-split-tarjan-bridge: $(SGEN_BRIDGE_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=Bridge" MONO_GC_PARAMS="bridge-implementation=tarjan,minor=split" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=Bridge" MONO_GC_PARAMS="bridge-implementation=tarjan,minor=split" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE_TESTS)
  
  SGEN_BRIDGE2_TESTS=   \
        sgen-bridge-xref.exe
@@@ -1233,21 -1088,22 +1233,21 @@@ sgen-bridge2-tests: $(SGEN_BRIDGE2_TEST
        $(MAKE) sgen-bridge2-tests-ms-split-tarjan-bridge
  
  sgen-bridge2-tests-plain: $(SGEN_BRIDGE2_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=2Bridge" MONO_GC_PARAMS="" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE2_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=2Bridge" MONO_GC_PARAMS="" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE2_TESTS)
  sgen-bridge2-tests-ms-conc: $(SGEN_BRIDGE2_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=2Bridge" MONO_GC_PARAMS="major=marksweep-conc" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE2_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=2Bridge" MONO_GC_PARAMS="major=marksweep-conc" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE2_TESTS)
  sgen-bridge2-tests-ms-split: $(SGEN_BRIDGE2_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=2Bridge" MONO_GC_PARAMS="minor=split" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE2_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=2Bridge" MONO_GC_PARAMS="minor=split" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE2_TESTS)
  sgen-bridge2-tests-plain-new-bridge: $(SGEN_BRIDGE2_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=2Bridge" MONO_GC_PARAMS="bridge-implementation=new" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE2_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=2Bridge" MONO_GC_PARAMS="bridge-implementation=new" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE2_TESTS)
  sgen-bridge2-tests-ms-conc-new-bridge: $(SGEN_BRIDGE2_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=2Bridge" MONO_GC_PARAMS="bridge-implementation=new,major=marksweep-conc" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE2_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=2Bridge" MONO_GC_PARAMS="bridge-implementation=new,major=marksweep-conc" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE2_TESTS)
  sgen-bridge2-tests-ms-split-new-bridge: $(SGEN_BRIDGE2_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=2Bridge" MONO_GC_PARAMS="bridge-implementation=new,minor=split" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE2_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=2Bridge" MONO_GC_PARAMS="bridge-implementation=new,minor=split" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE2_TESTS)
  sgen-bridge2-tests-plain-tarjan-bridge: $(SGEN_BRIDGE2_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=2Bridge" MONO_GC_PARAMS="bridge-implementation=tarjan" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE2_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=2Bridge" MONO_GC_PARAMS="bridge-implementation=tarjan" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE2_TESTS)
  sgen-bridge2-tests-ms-split-tarjan-bridge: $(SGEN_BRIDGE2_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=2Bridge" MONO_GC_PARAMS="bridge-implementation=tarjan,minor=split" $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE2_TESTS)
 -
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=2Bridge" MONO_GC_PARAMS="bridge-implementation=tarjan,minor=split" $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE2_TESTS)
  
  SGEN_BRIDGE3_TESTS=   \
        sgen-bridge-gchandle.exe
@@@ -1263,21 -1119,21 +1263,21 @@@ sgen-bridge3-tests: $(SGEN_BRIDGE3_TEST
        $(MAKE) sgen-bridge3-tests-ms-split-tarjan-bridge
  
  sgen-bridge3-tests-plain: $(SGEN_bridge3_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=3Bridge" MONO_GC_PARAMS="" $(RUNTIME) ./test-runner.exe --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE3_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=3Bridge" MONO_GC_PARAMS="" $(RUNTIME) $(TEST_RUNNER) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE3_TESTS)
  sgen-bridge3-tests-ms-conc: $(SGEN_BRIDGE3_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=3Bridge" MONO_GC_PARAMS="major=marksweep-conc" $(RUNTIME) ./test-runner.exe --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE3_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=3Bridge" MONO_GC_PARAMS="major=marksweep-conc" $(RUNTIME) $(TEST_RUNNER) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE3_TESTS)
  sgen-bridge3-tests-ms-split: $(SGEN_BRIDGE3_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=3Bridge" MONO_GC_PARAMS="minor=split" $(RUNTIME) ./test-runner.exe --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE3_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=3Bridge" MONO_GC_PARAMS="minor=split" $(RUNTIME) $(TEST_RUNNER) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE3_TESTS)
  sgen-bridge3-tests-plain-new-bridge: $(SGEN_BRIDGE3_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=3Bridge" MONO_GC_PARAMS="bridge-implementation=new" $(RUNTIME) ./test-runner.exe --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE3_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=3Bridge" MONO_GC_PARAMS="bridge-implementation=new" $(RUNTIME) $(TEST_RUNNER) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE3_TESTS)
  sgen-bridge3-tests-ms-conc-new-bridge: $(SGEN_BRIDGE3_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=3Bridge" MONO_GC_PARAMS="bridge-implementation=new,major=marksweep-conc" $(RUNTIME) ./test-runner.exe --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE3_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=3Bridge" MONO_GC_PARAMS="bridge-implementation=new,major=marksweep-conc" $(RUNTIME) $(TEST_RUNNER) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE3_TESTS)
  sgen-bridge3-tests-ms-split-new-bridge: $(SGEN_BRIDGE3_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=3Bridge" MONO_GC_PARAMS="bridge-implementation=new,minor=split" $(RUNTIME) ./test-runner.exe --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE3_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=3Bridge" MONO_GC_PARAMS="bridge-implementation=new,minor=split" $(RUNTIME) $(TEST_RUNNER) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE3_TESTS)
  sgen-bridge3-tests-plain-tarjan-bridge: $(SGEN_BRIDGE3_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=3Bridge" MONO_GC_PARAMS="bridge-implementation=tarjan" $(RUNTIME) ./test-runner.exe --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE3_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=3Bridge" MONO_GC_PARAMS="bridge-implementation=tarjan" $(RUNTIME) $(TEST_RUNNER) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE3_TESTS)
  sgen-bridge3-tests-ms-split-tarjan-bridge: $(SGEN_BRIDGE3_TESTS) test-runner.exe
 -      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=3Bridge" MONO_GC_PARAMS="bridge-implementation=tarjan,minor=split" $(RUNTIME) ./test-runner.exe --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE3_TESTS)
 +      MONO_ENV_OPTIONS="--gc=sgen" MONO_GC_DEBUG="bridge=3Bridge" MONO_GC_PARAMS="bridge-implementation=tarjan,minor=split" $(RUNTIME) $(TEST_RUNNER) --testsuite-name $@ --timeout 900 $(SGEN_BRIDGE3_TESTS)
  
  
  AOT_CONFIGURATIONS=   \
@@@ -1321,23 -1177,19 +1321,23 @@@ test-aot
  
  # Generated tests for runtime invoke
  EXTRA_DIST += gen-runtime-invoke.cs
 -runtime-invoke.gen.exe: TestDriver.dll gen-runtime-invoke.exe
 +runtime-invoke.gen.exe: $(TEST_DRIVER_DEPEND) gen-runtime-invoke.exe
        $(RUNTIME) gen-runtime-invoke.exe > runtime-invoke.gen.cs
        $(MCS) -out:runtime-invoke.gen.exe -r:TestDriver.dll runtime-invoke.gen.cs
  
  EXTRA_DIST += make-imt-test.cs
 -imt_big_iface_test.exe: TestDriver.dll make-imt-test.exe
 +imt_big_iface_test.exe: $(TEST_DRIVER_DEPEND) make-imt-test.exe
        $(RUNTIME) make-imt-test.exe > imt_big_iface_test.cs
        $(MCS) -out:imt_big_iface_test.exe -r:TestDriver.dll imt_big_iface_test.cs
  
  EXTRA_DIST += test-inline-call-stack-library.cs test-inline-call-stack.cs
 -test-inline-call-stack-library.dll: TestDriver.dll $(srcdir)/test-inline-call-stack-library.cs
 +test-inline-call-stack-library.dll: $(TEST_DRIVER_DEPEND) $(srcdir)/test-inline-call-stack-library.cs
        $(MCS) -t:library -out:test-inline-call-stack-library.dll $(srcdir)/test-inline-call-stack-library.cs
 -test-inline-call-stack.exe: TestDriver.dll test-inline-call-stack-library.dll $(srcdir)/test-inline-call-stack.cs
 +if INSTALL_MOBILE_STATIC
 +      $(RUNTIME) $(AOT_BUILD_FLAGS) $@
 +endif
 +
 +test-inline-call-stack.exe: $(TEST_DRIVER_DEPEND) test-inline-call-stack-library.dll $(srcdir)/test-inline-call-stack.cs
        $(MCS) -r:TestDriver.dll -r:test-inline-call-stack-library.dll -out:test-inline-call-stack.exe $(srcdir)/test-inline-call-stack.cs
  
  EXTRA_DIST += unhandled-exception-base-configuration.config
@@@ -1380,18 -1232,12 +1380,18 @@@ bug-81673.exe bug-81673-interface.dll: 
        $(MCS) -target:library -out:bug-81673-interface.dll $(srcdir)/bug-81673-interface.cs
        $(MCS) -out:bug-81673.exe -r:bug-81673-interface.dll $(srcdir)/bug-81673.cs
        $(MCS) -define:WITH_STOP -target:library -out:bug-81673-interface.dll $(srcdir)/bug-81673-interface.cs
 +if INSTALL_MOBILE_STATIC
 +      $(RUNTIME) $(AOT_BUILD_FLAGS) $@
 +endif
  
  EXTRA_DIST += bug-36848-a.cs
  bug-36848.exe bug-36848-a.dll: $(srcdir)/bug-36848.cs $(srcdir)/bug-36848-a.cs
        $(MCS) -target:library -out:bug-36848-a.dll $(srcdir)/bug-36848-a.cs
        $(MCS) -r:bug-36848-a.dll -out:bug-36848.exe $(srcdir)/bug-36848.cs
        $(MCS) -target:library -out:bug-36848-a.dll $(srcdir)/bug-36848-a.cs /define:WITH_STOP
 +if INSTALL_MOBILE_STATIC
 +      $(RUNTIME) $(AOT_BUILD_FLAGS) $@
 +endif
  
  EXTRA_DIST += bug-81691-a.cs bug-81691-b.cs
  bug-81691.exe bug-81691-b.dll: $(srcdir)/bug-81691.cs $(srcdir)/bug-81691-a.cs $(srcdir)/bug-81691-b.cs
@@@ -1404,37 -1250,24 +1404,37 @@@ bug-81691.exe: bug-81691-b.dl
  EXTRA_DIST += bug-81466-lib.il
  bug-81466-lib.dll: bug-81466-lib.il
        $(ILASM) /dll /output:bug-81466-lib.dll $(srcdir)/bug-81466-lib.il
 +if INSTALL_MOBILE_STATIC
 +      $(RUNTIME) $(AOT_BUILD_FLAGS) $@
 +endif
  bug-81466.exe: bug-81466.il bug-81466-lib.dll
        $(ILASM) /exe /output:bug-81466.exe $(srcdir)/bug-81466.il
  
  EXTRA_DIST += bug-324535-il.il
  bug-324535-il.dll : bug-324535-il.il
        $(ILASM) /dll /output:bug-324535-il.dll $(srcdir)/bug-324535-il.il
 +if INSTALL_MOBILE_STATIC
 +      $(RUNTIME) $(AOT_BUILD_FLAGS) $@
 +endif
  bug-324535.exe : bug-324535.cs bug-324535-il.dll
        $(MCS) -r:bug-324535-il.dll -out:bug-324535.exe $(srcdir)/bug-324535.cs
  
  EXTRA_DIST += custom-modifiers.2.cs custom-modifiers-lib.il
  custom-modifiers-lib.dll: custom-modifiers-lib.il
        $(ILASM) /dll /output:custom-modifiers-lib.dll $(srcdir)/custom-modifiers-lib.il
 +if INSTALL_MOBILE_STATIC
 +      $(RUNTIME) $(AOT_BUILD_FLAGS) $@
 +endif
  custom-modifiers.2.exe: custom-modifiers.2.cs custom-modifiers-lib.dll
        $(MCS) -r:custom-modifiers-lib.dll -out:custom-modifiers.2.exe $(srcdir)/custom-modifiers.2.cs
  
  EXTRA_DIST += bug-382986-lib.cs
  bug-382986-lib.dll: bug-382986-lib.cs
        $(MCS) -target:library -out:$@ $(srcdir)/bug-382986-lib.cs
 +if INSTALL_MOBILE_STATIC
 +      $(RUNTIME) $(AOT_BUILD_FLAGS) $@
 +endif
 +
  bug-382986.exe: bug-382986.cs bug-382986-lib.dll
        $(MCS) -out:$@ -r:bug-382986-lib.dll $(srcdir)/bug-382986.cs
  
@@@ -1458,16 -1291,10 +1458,16 @@@ test-coreclr-security : coreclr-securit
  EXTRA_DIST += generic-unboxing.2.il
  generic-unboxing.2.dll : generic-unboxing.2.il
        $(ILASM) /dll /output:generic-unboxing.2.dll $(srcdir)/generic-unboxing.2.il
 +if INSTALL_MOBILE_STATIC
 +      $(RUNTIME) $(AOT_BUILD_FLAGS) $@
 +endif
  
  EXTRA_DIST += generic-boxing.2.il
  generic-boxing.2.dll : generic-boxing.2.il generic-unboxing.2.dll
        $(ILASM) /dll /output:generic-boxing.2.dll $(srcdir)/generic-boxing.2.il
 +if INSTALL_MOBILE_STATIC
 +      $(RUNTIME) $(AOT_BUILD_FLAGS) $@
 +endif
  
  EXTRA_DIST += generic-unbox.2.cs
  generic-unbox.2.exe : generic-unbox.2.cs generic-unboxing.2.dll
@@@ -1480,9 -1307,6 +1480,9 @@@ generic-box.2.exe : generic-box.2.cs ge
  EXTRA_DIST += generic-delegate2.2.cs generic-delegate2-lib.2.il
  generic-delegate2-lib.2.dll : generic-delegate2-lib.2.il
        $(ILASM) /dll /output:$@ $(srcdir)/generic-delegate2-lib.2.il
 +if INSTALL_MOBILE_STATIC
 +      $(RUNTIME) $(AOT_BUILD_FLAGS) $@
 +endif
  generic-delegate2.2.exe : generic-delegate2.2.cs generic-delegate2-lib.2.dll
        $(MCS) -r:generic-delegate2-lib.2.dll -out:$@ $(srcdir)/generic-delegate2.2.cs
  
@@@ -1494,10 -1318,7 +1494,10 @@@ gshared: test-generic-sharin
  gshared-aot:
        @$(MAKE) AOT=1 gshared
  
 -GSHARED_TESTS = \
 +GSHARED_TESTS_MOBILE_STATIC_NOT_SUPPORTED = \
 +              generic-type-builder.2.exe
 +
 +GSHARED_TESTS_UNIVERSAL = \
                generics-sharing.2.exe shared-generic-methods.2.exe     \
                shared-generic-synchronized.2.exe generic-initobj.2.exe         \
                generics-sharing-other-exc.2.exe generic-box.2.exe              \
                generic-exceptions.2.exe generic-delegate2.2.exe                \
                generic-virtual2.2.exe generic-valuetype-interface.2.exe        \
                generic-valuetype-newobj.2.exe generic-valuetype-newobj2.2.exe  \
 -              generic-getgenericarguments.2.exe generic-type-builder.2.exe    \
 +              generic-getgenericarguments.2.exe       \
                generic-synchronized.2.exe generic-delegate-ctor.2.exe          \
                generic-constrained.2.exe bug-431413.2.exe                      \
                generic-virtual-invoke.2.exe generic-typedef.2.exe              \
                generic-type-load-exception.2.exe bug-616463.exe        \
                bug-1147.exe
  
 +if INSTALL_MOBILE_STATIC
 +GSHARED_TESTS= \
 +      $(GSHARED_TESTS_UNIVERSAL)
 +else
 +GSHARED_TESTS= \
 +      $(GSHARED_TESTS_MOBILE_STATIC_NOT_SUPPORTED) \
 +      $(GSHARED_TESTS_UNIVERSAL)
 +endif
 +
  test-generic-sharing-normal: $(GSHARED_TESTS)
        @for fn in $+ ; do      \
                echo "Testing $$fn ...";        \
        done
  
  test-generic-sharing-managed: test-runner.exe $(GSHARED_TESTS)
 -      @$(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) -j a --testsuite-name "gshared" --opt-sets "gshared gshared,shared gshared,-inline gshared,-inline,shared" $(GSHARED_TESTS)
 +      @$(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) -j a --testsuite-name "gshared" --disabled "$(DISABLED_TESTS)" --opt-sets "gshared gshared,shared gshared,-inline gshared,-inline,shared" $(GSHARED_TESTS)
  
  if NACL_CODEGEN
  test-generic-sharing:
@@@ -1564,7 -1376,7 +1564,7 @@@ test-async-exceptions : async-exception
  EXTRA_DIST += modules.cs modules-m1.cs
  modules-m1.netmodule: modules-m1.cs
        $(MCS) -out:$@ /target:module $(srcdir)/modules-m1.cs
 -modules.exe: modules.cs modules-m1.netmodule TestDriver.dll
 +modules.exe: modules.cs modules-m1.netmodule $(TEST_DRIVER_DEPEND) 
        $(MCS) -out:$@ /addmodule:modules-m1.netmodule -r:TestDriver.dll $(srcdir)/modules.cs
  
  # Useful if mono is compiled with --enable-shared=no
@@@ -1622,13 -1434,13 +1622,13 @@@ test-unhandled-exception-2: $(UNHANDLED
        $(MAKE) test-unhandled-exception-2-255-without-managed-handler
  
  test-unhandled-exception-2-1-with-managed-handler: $(UNHANDLED_EXCEPTION_1_TESTS) test-runner.exe
 -      $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) -j a --testsuite-name $@ --expected-exit-code 1 $(UNHANDLED_EXCEPTION_1_TESTS)
 +      $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) -j a --testsuite-name $@ --disabled "$(DISABLED_TESTS)" --expected-exit-code 1 $(UNHANDLED_EXCEPTION_1_TESTS)
  test-unhandled-exception-2-1-without-managed-handler: $(UNHANDLED_EXCEPTION_1_TESTS) test-runner.exe
 -      TEST_UNHANDLED_EXCEPTION_HANDLER=1 $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) -j a --testsuite-name $@ --expected-exit-code 1 $(UNHANDLED_EXCEPTION_1_TESTS)
 +      TEST_UNHANDLED_EXCEPTION_HANDLER=1 $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) -j a --testsuite-name $@ --disabled "$(DISABLED_TESTS)" --expected-exit-code 1 $(UNHANDLED_EXCEPTION_1_TESTS)
  test-unhandled-exception-2-255-with-managed-handler: $(UNHANDLED_EXCEPTION_255_TESTS) test-runner.exe
 -      $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) -j a --testsuite-name $@ --expected-exit-code 255 $(UNHANDLED_EXCEPTION_255_TESTS)
 +      $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) -j a --testsuite-name $@ --disabled "$(DISABLED_TESTS)" --expected-exit-code 255 $(UNHANDLED_EXCEPTION_255_TESTS)
  test-unhandled-exception-2-255-without-managed-handler: $(UNHANDLED_EXCEPTION_255_TESTS) test-runner.exe
 -      TEST_UNHANDLED_EXCEPTION_HANDLER=1 $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) -j a --testsuite-name $@ --expected-exit-code 255 $(UNHANDLED_EXCEPTION_255_TESTS)
 +      TEST_UNHANDLED_EXCEPTION_HANDLER=1 $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) -j a --testsuite-name $@ --disabled "$(DISABLED_TESTS)" --expected-exit-code 255 $(UNHANDLED_EXCEPTION_255_TESTS)
  
  endif
  
@@@ -1653,7 -1465,7 +1653,7 @@@ PROCESS_STRESS_TESTS=   
                process-leak.exe
  
  test-process-stress: $(PROCESS_STRESS_TESTS) test-runner.exe
 -      $(RUNTIME) ./test-runner.exe $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 600 $(PROCESS_STRESS_TESTS)
 +      $(RUNTIME) $(TEST_RUNNER) $(TEST_RUNNER_ARGS) --testsuite-name $@ --timeout 600 $(PROCESS_STRESS_TESTS)
  
  coreclr-gcstress:
        $(MAKE) -C $(mono_build_root)/acceptance-tests coreclr-gcstress