From: Rodrigo Kumpera Date: Fri, 1 Sep 2017 20:50:40 +0000 (-0400) Subject: Merge pull request #5486 from kumpera/fix_array_dispatch_perf X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=9df8e7db13c1c682fcaecfb5dd6dbd7eabe126ce;hp=e64e3dbaca04061854aa9b3764fd415d6e7119a9;p=mono.git Merge pull request #5486 from kumpera/fix_array_dispatch_perf [mini] Handle magic interfaces in common_trampoline as if they were variant. --- diff --git a/mcs/build/tests.make b/mcs/build/tests.make index 8ffa784a23a..5a8bc7d0e48 100644 --- a/mcs/build/tests.make +++ b/mcs/build/tests.make @@ -212,9 +212,9 @@ run-xunit-test: run-xunit-test-local xunit-test-local: $(xunit_test_lib) run-xunit-test-local: run-xunit-test-lib -# ln -s is a HACK for xunit runner to require xunit.execution.desktop.dll file in local folder on .net only +# cp -rf is a HACK for xunit runner to require xunit.execution.desktop.dll file in local folder on .net only run-xunit-test-lib: xunit-test-local - @ln -fs $(XTEST_HARNESS_PATH)/xunit.execution.desktop.dll xunit.execution.desktop.dll + @cp -rf $(XTEST_HARNESS_PATH)/xunit.execution.desktop.dll xunit.execution.desktop.dll ok=:; \ PATH="$(TEST_RUNTIME_WRAPPERS_PATH):$(PATH)" $(TEST_RUNTIME) $(RUNTIME_FLAGS) $(AOT_RUN_FLAGS) $(XTEST_HARNESS) $(xunit_test_lib) $(XTEST_HARNESS_FLAGS) $(XTEST_TRAIT) || ok=false; \ $$ok diff --git a/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/Tds70.cs b/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/Tds70.cs index 725248a8fc0..57545f65e10 100644 --- a/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/Tds70.cs +++ b/mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/Tds70.cs @@ -151,7 +151,7 @@ namespace Mono.Data.Tds.Protocol p.Precision = (p.Precision !=0 ? p.Precision : (byte) Precision); parms.Append (p.Prepare ()); - if (p.Direction == TdsParameterDirection.Output) + if (p.Direction == TdsParameterDirection.Output || p.Direction == TdsParameterDirection.InputOutput) parms.Append (" output"); } return parms.ToString (); diff --git a/mcs/tools/mkbundle/mkbundle.cs b/mcs/tools/mkbundle/mkbundle.cs index 9a80f57f7fe..8680e0bbf81 100755 --- a/mcs/tools/mkbundle/mkbundle.cs +++ b/mcs/tools/mkbundle/mkbundle.cs @@ -624,6 +624,8 @@ class MakeBundle { return false; } maker.Add (code, file); + // add a space after code (="systemconfig:" or "machineconfig:") + Console.WriteLine (code + " " + file); return true; } @@ -659,15 +661,17 @@ class MakeBundle { Console.WriteLine (" Assembly: " + fname); if (File.Exists (fname + ".config")){ maker.Add ("config:" + aname, fname + ".config"); - Console.WriteLine (" Config: " + runtime); + Console.WriteLine (" Config: " + fname + ".config"); } } if (!MaybeAddFile (maker, "systemconfig:", config_file) || !MaybeAddFile (maker, "machineconfig:", machine_config_file)) return false; - if (config_dir != null) + if (config_dir != null){ maker.Add ("config_dir:", config_dir); + Console.WriteLine (" Config_dir: " + config_dir ); + } if (embedded_options != null) maker.AddString ("options:", embedded_options); if (environment.Count > 0){ diff --git a/mono/metadata/class.c b/mono/metadata/class.c index 6492fd6ca21..8df8cb531d4 100644 --- a/mono/metadata/class.c +++ b/mono/metadata/class.c @@ -56,9 +56,9 @@ gboolean mono_print_vtable = FALSE; gboolean mono_align_small_structs = FALSE; /* Statistics */ -guint32 inflated_classes_size, inflated_methods_size; -guint32 classes_size, class_ext_size, class_ext_count; -guint32 class_def_count, class_gtd_count, class_ginst_count, class_gparam_count, class_array_count, class_pointer_count; +gint32 inflated_classes_size, inflated_methods_size; +gint32 classes_size; +gint32 class_def_count, class_gtd_count, class_ginst_count, class_gparam_count, class_array_count, class_pointer_count; /* Low level lock which protects data structures in this module */ static mono_mutex_t classes_mutex; @@ -1092,7 +1092,7 @@ mono_class_inflate_generic_method_full_checked (MonoMethod *method, MonoClass *k UnlockedIncrement (&mono_stats.inflated_method_count); - inflated_methods_size += sizeof (MonoMethodInflated); + UnlockedAdd (&inflated_methods_size, sizeof (MonoMethodInflated)); sig = mono_method_signature (method); if (!sig) { @@ -5511,7 +5511,7 @@ mono_class_set_failure_and_error (MonoClass *klass, MonoError *error, const char * Create the MonoClass* representing the specified type token. * \p type_token must be a TypeDef token. * - * FIXME: don't return NULL on failure, just the the caller figure it out. + * FIXME: don't return NULL on failure, just let the caller figure it out. */ static MonoClass * mono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError *error) @@ -5550,12 +5550,12 @@ mono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError if (mono_metadata_has_generic_params (image, type_token)) { klass = mono_image_alloc0 (image, sizeof (MonoClassGtd)); klass->class_kind = MONO_CLASS_GTD; - classes_size += sizeof (MonoClassGtd); + UnlockedAdd (&classes_size, sizeof (MonoClassGtd)); ++class_gtd_count; } else { klass = mono_image_alloc0 (image, sizeof (MonoClassDef)); klass->class_kind = MONO_CLASS_DEF; - classes_size += sizeof (MonoClassDef); + UnlockedAdd (&classes_size, sizeof (MonoClassDef)); ++class_def_count; } @@ -5994,8 +5994,8 @@ make_generic_param_class (MonoGenericParam *param, MonoGenericParamInfo *pinfo) klass = (MonoClass *)mono_image_alloc0 (image, sizeof (MonoClassGenericParam)); klass->class_kind = MONO_CLASS_GPARAM; - classes_size += sizeof (MonoClassGenericParam); - ++class_gparam_count; + UnlockedAdd (&classes_size, sizeof (MonoClassGenericParam)); + UnlockedIncrement (&class_gparam_count); if (pinfo) { CHECKED_METADATA_WRITE_PTR_EXEMPT ( klass->name , pinfo->name ); @@ -6274,7 +6274,7 @@ mono_ptr_class_get (MonoType *type) result = (MonoClass *)mono_image_alloc0 (image, sizeof (MonoClassPointer)); - classes_size += sizeof (MonoClassPointer); + UnlockedAdd (&classes_size, sizeof (MonoClassPointer)); ++class_pointer_count; result->parent = NULL; /* no parent for PTR types */ @@ -6364,7 +6364,7 @@ mono_fnptr_class_get (MonoMethodSignature *sig) MONO_PROFILER_RAISE (class_loading, (result)); - classes_size += sizeof (MonoClassPointer); + UnlockedAdd (&classes_size, sizeof (MonoClassPointer)); ++class_pointer_count; g_hash_table_insert (ptr_hash, sig, result); @@ -6692,7 +6692,7 @@ mono_bounded_array_class_get (MonoClass *eclass, guint32 rank, gboolean bounded) MONO_PROFILER_RAISE (class_loading, (klass)); - classes_size += sizeof (MonoClassArray); + UnlockedAdd (&classes_size, sizeof (MonoClassArray)); ++class_array_count; if (rank == 1 && !bounded) { @@ -9893,7 +9893,9 @@ mono_class_set_type_load_failure (MonoClass *klass, const char * fmt, ...) * mono_classes_init: * * Initialize the resources used by this module. + * Known racy counters: `class_gparam_count`, `classes_size` and `inflated_methods_size` */ +MONO_NO_SANITIZE_THREAD void mono_classes_init (void) { diff --git a/mono/mini/mini-exceptions.c b/mono/mini/mini-exceptions.c index 9f5c87b6a13..f15af494bb1 100644 --- a/mono/mini/mini-exceptions.c +++ b/mono/mini/mini-exceptions.c @@ -89,10 +89,6 @@ #define MONO_ARCH_CONTEXT_DEF #endif -#ifndef MONO_ARCH_STACK_GROWS_UP -#define MONO_ARCH_STACK_GROWS_UP 0 -#endif - /* * Raw frame information is stored in MonoException.trace_ips as an IntPtr[]. * This structure represents one entry. @@ -149,18 +145,6 @@ mono_thread_get_managed_sp (void) return addr; } -static inline int -mini_abort_threshold_offset (gpointer threshold, gpointer sp) -{ - intptr_t stack_threshold = (intptr_t) threshold; - intptr_t stack_pointer = (intptr_t) sp; - - const int direction = MONO_ARCH_STACK_GROWS_UP ? -1 : 1; - intptr_t magnitude = stack_pointer - stack_threshold; - - return direction * magnitude; -} - static inline void mini_clear_abort_threshold (void) { @@ -176,7 +160,7 @@ mini_set_abort_threshold (MonoContext *ctx) // Only move it up, to avoid thrown/caught // exceptions lower in the stack from triggering // a rethrow - gboolean above_threshold = mini_abort_threshold_offset (jit_tls->abort_exc_stack_threshold, sp) >= 0; + gboolean above_threshold = (gsize) sp >= (gsize) jit_tls->abort_exc_stack_threshold; if (!jit_tls->abort_exc_stack_threshold || above_threshold) { jit_tls->abort_exc_stack_threshold = sp; } @@ -194,7 +178,7 @@ mini_above_abort_threshold (void) if (!sp) return TRUE; - gboolean above_threshold = mini_abort_threshold_offset (jit_tls->abort_exc_stack_threshold, sp) >= 0; + gboolean above_threshold = (gsize) sp >= (gsize) jit_tls->abort_exc_stack_threshold; if (above_threshold) jit_tls->abort_exc_stack_threshold = sp; @@ -1685,10 +1669,7 @@ mono_handle_exception_internal_first_pass (MonoContext *ctx, MonoObject *obj, gi dynamic_methods = g_slist_prepend (dynamic_methods, method); if (stack_overflow) { - if (MONO_ARCH_STACK_GROWS_UP) - free_stack = (guint8*)(MONO_CONTEXT_GET_SP (&initial_ctx)) - (guint8*)(MONO_CONTEXT_GET_SP (ctx)); - else - free_stack = (guint8*)(MONO_CONTEXT_GET_SP (ctx)) - (guint8*)(MONO_CONTEXT_GET_SP (&initial_ctx)); + free_stack = (guint8*)(MONO_CONTEXT_GET_SP (ctx)) - (guint8*)(MONO_CONTEXT_GET_SP (&initial_ctx)); } else { free_stack = 0xffffff; } @@ -2044,10 +2025,7 @@ mono_handle_exception_internal (MonoContext *ctx, MonoObject *obj, gboolean resu //printf ("M: %s %d.\n", mono_method_full_name (method, TRUE), frame_count); if (stack_overflow) { - if (MONO_ARCH_STACK_GROWS_UP) - free_stack = (guint8*)(MONO_CONTEXT_GET_SP (&initial_ctx)) - (guint8*)(MONO_CONTEXT_GET_SP (ctx)); - else - free_stack = (guint8*)(MONO_CONTEXT_GET_SP (ctx)) - (guint8*)(MONO_CONTEXT_GET_SP (&initial_ctx)); + free_stack = (guint8*)(MONO_CONTEXT_GET_SP (ctx)) - (guint8*)(MONO_CONTEXT_GET_SP (&initial_ctx)); } else { free_stack = 0xffffff; } diff --git a/packaging/MacSDK/packaging/mdk_blacklist.sh b/packaging/MacSDK/packaging/mdk_blacklist.sh index ab426a7c952..686347a87f9 100755 --- a/packaging/MacSDK/packaging/mdk_blacklist.sh +++ b/packaging/MacSDK/packaging/mdk_blacklist.sh @@ -38,7 +38,9 @@ rm -rf share/emacs rm -rf share/strings rm -rf share/pixmaps rm -rf share/intltool +rm -rf share/llvm rm -rf var/cache/fontconfig +rm -rf include/llvm # delete most of the *.a files rm -rf lib/cairo/libcairo-trace.a @@ -46,38 +48,8 @@ rm -rf lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.a rm -rf lib/gtk-2.0/2.10.0/engines/libsvg.a rm -rf lib/libCompilerDriver.a rm -rf lib/libEnhancedDisassembly.a -rm -rf lib/libLLVMAnalysis.a -rm -rf lib/libLLVMArchive.a -rm -rf lib/libLLVMAsmParser.a -rm -rf lib/libLLVMAsmPrinter.a -rm -rf lib/libLLVMBitReader.a -rm -rf lib/libLLVMBitWriter.a -rm -rf lib/libLLVMCodeGen.a -rm -rf lib/libLLVMCore.a -rm -rf lib/libLLVMExecutionEngine.a -rm -rf lib/libLLVMInstCombine.a -rm -rf lib/libLLVMInstrumentation.a -rm -rf lib/libLLVMInterpreter.a -rm -rf lib/libLLVMJIT.a -rm -rf lib/libLLVMLinker.a -rm -rf lib/libLLVMMC.a -rm -rf lib/libLLVMMCDisassembler.a -rm -rf lib/libLLVMMCJIT.a -rm -rf lib/libLLVMMCParser.a -rm -rf lib/libLLVMObject.a -rm -rf lib/libLLVMScalarOpts.a -rm -rf lib/libLLVMSelectionDAG.a -rm -rf lib/libLLVMSupport.a -rm -rf lib/libLLVMTarget.a -rm -rf lib/libLLVMTransformUtils.a -rm -rf lib/libLLVMX86AsmParser.a -rm -rf lib/libLLVMX86AsmPrinter.a -rm -rf lib/libLLVMX86CodeGen.a -rm -rf lib/libLLVMX86Disassembler.a -rm -rf lib/libLLVMX86Info.a -rm -rf lib/libLLVMipa.a -rm -rf lib/libLLVMipo.a -rm -rf lib/libLTO.a +rm -rf lib/libLLVM*.a +rm -rf lib/libLTO.* # rm -rf lib/libMonoPosixHelper.a # rm -rf lib/libMonoSupportW.a rm -rf lib/libUnitTestMain.a @@ -121,10 +93,12 @@ rm -rf lib/libxml2.a # we don't need any of the llvm executables except llc and opt rm -rf bin/bugpoint -rm -rf bin/lli +rm -rf bin/lli* rm -rf bin/llvm-* rm -rf bin/macho-dump rm -rf bin/ccache +rm -rf bin/llc32 +rm -rf bin/opt32 # # 14:39 the install script needs to be modified not to diff --git a/scripts/ci/run-test-default.sh b/scripts/ci/run-test-default.sh index daad48d3cc5..3511574fb97 100755 --- a/scripts/ci/run-test-default.sh +++ b/scripts/ci/run-test-default.sh @@ -10,7 +10,7 @@ ${TESTCMD} --label=compile-runtime-tests --timeout=40m make -w -C mono/tests -j4 ${TESTCMD} --label=runtime --timeout=160m make -w -C mono/tests -k test-wrench V=1 CI=1 CI_PR=${ghprbPullId} ${TESTCMD} --label=runtime-unit-tests --timeout=5m make -w -C mono/unit-tests -k check ${TESTCMD} --label=corlib --timeout=30m make -w -C mcs/class/corlib run-test -if [[ ${label} == w* ]]; then ${TESTCMD} --label=corlib-xunit --skip; else ${TESTCMD} --label=corlib-xunit --timeout=5m make -w -C mcs/class/corlib run-xunit-test; fi +${TESTCMD} --label=corlib-xunit --timeout=5m make -w -C mcs/class/corlib run-xunit-test ${TESTCMD} --label=verify --timeout=15m make -w -C runtime mcs-compileall ${TESTCMD} --label=profiler --timeout=30m make -w -C mono/profiler -k check ${TESTCMD} --label=compiler --timeout=30m make -w -C mcs/tests run-test @@ -75,7 +75,7 @@ ${TESTCMD} --label=System.Web.DynamicData --timeout=5m make -w -C mcs/class/Syst ${TESTCMD} --label=Mono.CSharp --timeout=5m make -w -C mcs/class/Mono.CSharp run-test ${TESTCMD} --label=WindowsBase --timeout=5m make -w -C mcs/class/WindowsBase run-test ${TESTCMD} --label=System.Numerics --timeout=5m make -w -C mcs/class/System.Numerics run-test -if [[ ${label} == w* ]]; then ${TESTCMD} --label=System.Numerics-xunit --skip; else ${TESTCMD} --label=System.Numerics-xunit --timeout=5m make -w -C mcs/class/System.Numerics run-xunit-test; fi +${TESTCMD} --label=System.Numerics-xunit --timeout=5m make -w -C mcs/class/System.Numerics run-xunit-test ${TESTCMD} --label=System.Runtime.DurableInstancing --timeout=5m make -w -C mcs/class/System.Runtime.DurableInstancing run-test ${TESTCMD} --label=System.ServiceModel.Discovery --timeout=5m make -w -C mcs/class/System.ServiceModel.Discovery run-test ${TESTCMD} --label=System.Xaml --timeout=5m make -w -C mcs/class/System.Xaml run-test