Mono 6.0.0 Release Notes

Release date: 17 Jul 2019

Release History

Highlights

This is the first release of new 6.x series with many improvements and bug fixes across the whole Mono Runtime. In addition to that here are additional highlights.

  • C# compiler defaults to version C# 8.0 RC
  • Various stability improvement in debugger support
  • Mono Interpreter is feature complete and stable

In Depth

Runtime

CLI Improvements

New runtime setting called llcopts add an option to control arguments to llc tool. Use this option to add more flags to the built-in set of flags passed to the LLVM system compiler. If not provided, it will fallback to -mcpu=generic on x86 systems.

Additional new commands called llvmopts-add and llvmllc-add have been added to allow simply append additional arguments to LLVM’s opt and llc tools.

`mono --aot=llvm,llvmopts-add="-foo",llvmllc-add="-foo"`

We have also improved response file handling to work better on Windows.

Interpreter

A lot of attention in this release went to stabilizing and testing interpreter support. We have resolved many outstanding issues in handling different IL constructs as well as reported issues on ARM architecture.

This release also includes the first set of performance optimizations targeting interpreter mode only.

AOT Size Optimizations

The methods table format for AOT has changed to support large assemblies (larger than 24bits offsets) on ARM producing now larger binary output but with no limitations on input IL size.

Encoding ad decoding of various context data structures have been optimized to minimize duplication of their data entries.

System.Runtime.CompilerServices.Unsafe

Support for more methods available in the newer versions of this special NuGet assembly has been added as special runtime intrinsics for increased performance.

Debugger

Various set of issues and problems with debugger has been resolved or mitigated in this release. They should increase the stability of the debugger when debugging complex issues or multi-threaded applications.

Additional features like time recording between debugger steps have been added to the underlying debugger protocol.

System.Math methods optimizations

The constant folding for some Math operations on doubles has been implemented. In particular support for constant folding of additions and multiplications of doubles as well as constant folding of Math.Sin, Math.Cos, Math.Abs and Math.Sqrt.

Initial RISC-V support

We have landed experimental support in the interpreter for RISC-V. It’s able to run Hello World like C# program with all necessary runtime support.

monograph

This obsolete utility has been removed.

Class Libraries

Class Libraries have been extended with implementation support for C# 8.0 language features like async-streams. The CoreFX based parts have been updated to track .NET Core 2.2 release.

mscorlib

Implementation of TimeZone related classes and most of System.Reflection and System.IO classes have been replaced with CoreFX implementation for better compatibility with .NET and with performance improvements.

The Japanese calendar now includes support for the new eras.

Mono.Cairo

Several code paths have been hardened to throw ObjectDisposedExceptions instead of native crashes.

System.Winforms.Forms

More fixes and layout improvements for different controls made by external contributors have landed in this release .

Tools

Removed bundled version of NUnit 2.4

Mono used to ship with a forked copy of NUnit 2.4 that we used for testing Mono itself. For historical reasons, it was never updated and it is ancient at this point (it was released nearly 12 years ago!).

We deprecated it in Mono 5.0 and are removing it now.

We recommend that you migrate to a recent version of NUnit from NuGet or the project’s website instead.

C# Compiler

Roslyn C# compiler has been upgraded to version 3.1.

F# Compiler

Bundled F# compiler is now tracking version 4.5.

NuGet

Bundled NuGet version has been upgraded to 5.1 RTM.

msbuild

msbuild tool and its supporting libraries have been upgraded to version 15.0

signcode

The signcode tool got support for a new hash algorithm. In particular SHA256, SHA384 and SHA512 hash algorithms to be used for Authenticode signatures.

Packaging

The compression format used for make dist has been changed from BZip2 to XZ.

We have also included embedded Source Link information to all managed debug symbols files (PDBs) for the better debugging experience.

Build improvements

The support for LLVM integrated build as part of the Visual Studio solution has been added.

Resolved Issues

  • #10024 - Invocation of Array ctor with negative length throws wrong exception
  • #10030 - Bug: AutoWebProxyScriptEngine.InitializeRegistryGlobalProxy
  • #10038 - Expose SourceLink values in sdb
  • #10157 - [runtime] Send telemetry blob to debugger when mono runtime crashes
  • #10415 - Assertion when the process runs out of memory
  • #10448 - [iOS] CalendarTest.Hijri and CalendarTest.UmAlQura fail
  • #10508 - thread-suspend-suspended.exe and thread-suspend-selfsuspended.exe fail a lot on Windows i386
  • #10735 - mono64[80780:1186894] error: * Assertion: should not be reached at debugger-agent.c:6619
  • #10737 - Crash in QueryInterface in unmanaged code if object doesn’t implement requested interface
  • #10743 - xbuild and msbuild preserves readonly file permission when copying referenced assembly.
  • #10802 - mono_jit_init on macOS 10.14 has graphics corruption due to mprotect invocation
  • #10834 - Error loading generic override of in parameter
  • #10837 - Incorrect interface dispatch on generics
  • #10838 - MethodInfo::ToString output incompatiblities
  • #10842 - [wasm] HttpClientHandler does not return the response status text.
  • #10863 - Possible GC hang while building msbuild with mono/2018-08 and mono/master
  • #10945 - Serialization error in nightly build
  • #11020 - Fix for Mono build on FreeBSD PowerPC
  • #11021 - Mono fails to build on FreeBSD/PowerPC64
  • #11049 - Possible Stack Owerflow in ListView
  • #11091 - CI accepts failure as success
  • #11095 - [ARM] AOT compiled code with LLVM causes random crashes since Mono 5.16 (was: “Timespan error with last version”)
  • #11099 - [wasm] loading runtime and bcl - Module.locateFile override
  • #11123 - Type.IsSubclassOf throws TypeLoadException
  • #11138 - Hybrid suspend: mono_add_internal_call is broken
  • #11146 - Unhandled exception at the end of MonoDevelop.UnitTesting.Tests test run
  • #11187 - [wasm] [packager] Duplicate assemblies in config.js file_list: [ … ]
  • #11202 - Mac installer does not always clear out old files
  • #11214 - SDK ‘Microsoft.NET.Sdk.Razor’ not found
  • #11239 - [wasm] Sample program in wasm sdks does not run.
  • #11317 - Unexpected behaviour of DateTime.ToString with Korean language on iOS/Android
  • #11326 - [wasm] [packager] Regression in packager from build .zip
  • #11346 - [wasm] sample docs update
  • #11378 - [WASM AOT] Method returning a ValueType is not returning its value as a value
  • #11385 - MonoTests.DebuggerTests.Crash test is flaky
  • #11478 - [XA] [2018-10] Failure in PropertyInfoTests.GetValue_Invalid
  • #11479 - Loading assembly generated using tlbimp.exe give error in mono runtime
  • #11488 - MulticastDelegate.CombineImpl throws “double free or corruption” or “pointer being freed was not allocated” errors
  • #11489 - IronPython 2.7.9 strange issue on mono 5.16
  • #11501 - mono-5.16 release contains object files in release tar
  • #11529 - System.Runtime.Serialization.SerializationException: Type ‘System.Text.InternalEncoderBestFitFallback’ using FastCGI
  • #11596 - [wasm] Abort in browser causes print dialog to show
  • #11603 - [interp] [wasm] assert on null dereference of struct array
  • #11613 - AOT crash: error: * Assertion: should not be reached at ../../../../../mono/mini/mini-arm64-gsharedvt.c:119
  • #11623 - System.Web.Services does not have useful errors
  • #11681 - [wasm] Add support for blob: URLs
  • #11684 - Type.GetType doesn’t return null for “System.Int32[,*,]”
  • #11693 - typeof(anything).MakeByRefType().IsByRefLike should return False
  • #11697 - [ios] unify definition of HOST_APPLETVOS et al.
  • #11765 - watchOS extensions crash at launch with ‘Failed to load AOT module ‘mscorlib’ while running in aot-only mode: not compiled with safepoints.’
  • #11809 - AM_EXTRA_RECURSIVE_TARGETS requires AM 1.13; breaks CentOS6
  • #11858 - mkbundle –fetch-target fails if target already exists
  • #11895 - CoreFX System.Random changes break test suite running on AIX because it tries to DllImport a libtool name
  • #11898 - Windows i386 CI very high failure rate lately.
  • #11908 - V8 update broke mini/System.Core tests on WebAssembly
  • #11936 - fixme about icall-decl.h and dlopen and boehm
  • #11956 - os-event-unix.c:82 assert(event) failure
  • #11965 - [iOS/32bit/device] mscorlib test failures: DoubleFormatterTest.TestFormatStringsN# and DoubleTest.LongLongValueRoundtrip
  • #12030 - LLVM JIT on Linux x64 not working
  • #12193 - problems creating multi dimensional arrays
  • #12218 - System.Web.Caching.Cache data race on LRU list
  • #12235 - Crash while profiling roslyn compiler server
  • #12263 - The ENABLE_GSS define should be enabled in System/Makefile
  • #12307 - [android][armv7][aot][llvm] Llvm generates invalid code because datalayout isn’t set
  • #12331 - Chakra installation broken on WebAssembly on Linux
  • #12362 - Problem with DefaultValueAttribute and Color values
  • #12374 - Unable to inspect ReadOnlySpan in debugger
  • #12402 - System.Windows.Forms: LinkArea of LinkLabels is shifted relative to the text
  • #12421 - Task calls SynchronizationContext.Post on cancelling
  • #12461 - ReflectionModelServices.IsExportFactoryImportDefinition should not throw
  • #12479 - File.GetLastWriteTime behaves differently for symlinks, as compared to netcore on macOS
  • #12552 - SslStream does not implement some connection-info properties (CipherStrength).
  • #12724 - xtro-sharpie.exe crashes with “Cannot transition thread 0x10c3ef5c0 from STATE_BLOCKING with DO_BLOCKING”
  • #12747 - System.Reflection.Emit.ParameterBuilder.SetCustomAttribute() throws undocumented ArgumentOutOfRangeException
  • #12831 - [iOS] Generic sharing with long float arguments list
  • #12843 - Mono Android debugger crashes using HttpClient wrapped in Async Method
  • #12881 - MonoDevelop SDB regressions
  • #13030 - Directory.GetLogicalDrives () missing SystemNative_GetAllMountPoints pal function
  • #13150 - [WinForms] Related Forms closing
  • #13231 - CGPattern causes “Attempting to JIT compile method” exception since VS 7.5
  • #13284 - Checked ulong relational operation throws wrong OverflowException on armeabi-v7a
  • #13297 - [WASM] decompose.c:1471, condition `cfg->cbb == first_bb’ not met
  • #13454 - watchOS apps crash on launch if built with LLVM
  • #13455 - AOT crashes with “MVAR 0 (Ts) cannot be expanded with type 0x1e” when compiling monotouch_System.Core_xunit-test.dll
  • #13460 - AOT crashes with “Instruction does not dominate all uses” when compiling monotouch_System.Core_xunit-test.dll
  • #13478 - Undefined symbol ___sync_lock_test_and_set_4 on armv7 in xamarin-macios 2019-02
  • #13479 - System.Runtime.CompilerServices.UnsafeTests attempting to JIT compile on iOS devices
  • #13522 - AOT issue on WatchOS: “* Assertion at mini-llvm.c:9381, condition `fields [2 + i]’ not met “
  • #13526 - The repl (monotouch_tv_runtime) assemblies don’t work for tvOS
  • #13607 - Assertion in xamarin-macios link sdk test: “mini-generic-sharing.c:568, condition `is_ok (error)’ not met, function:inflate_info, Could not inflate generic type, due to MVAR 0 (T_ULONG) cannot be expanded with type 0x1e”
  • #13610 - Returning tuple broken when enabling fullAOT+LLVM
  • #13639 - mono-cil-strip crashes when called against the monotouch_Microsoft.CSharp_xunit-test.dll
  • #13654 - Interpreter Crash When Doing Fancy Reflection
  • #13672 - [2019-02] Xamarin.Android runtime tests crash on free
  • #13834 - Mac crash reports do not give the right SizeOfImage
  • #13878 - System.Reflection.Emit.DynamicMethod:CreateDelegate (?) crashes XM apps when under hardened runtime
  • #13941 - Crash During AOT of ASP.NET Core Assemblies
  • #14079 - Interpreter Crash on Reference Source System.Web.Extensions
  • #14170 - “Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR)” after debugger pauses and then continues on nested exception
  • #14214 - HttpClient.SendAsync() with > 2 GB response body.
  • #14223 - [2019-02] [watchOS] mini/debug fails on armv7k
  • #14246 - Interpreter crashes when encountering build-in types
  • #14247 - Assertion on 32-bit iOS device with thumb code
  • #14290 - [ios] Non-public API usage when submitting app
  • #14496 - [tests] System test dlls leak symbols on tvOS.
  • #14543 - Decoded custom attribute values leak the encoded value receiver
  • #14792 - [sdks][ios] Perform the appropriate cast of objc_msgSend and friends
  • #14793 - Mono-Native not working on MacOS Catalina
  • #14809 - Cannot box IsByRefLike type 'System.ReadOnlySpan'1' in Forms designer tests with 6.0
  • #14871 - [wasm] System.Text.Json struct serialization fails (but works on CoreCLR)
  • #14972 - Xamarin.iOS: System.ExecutionEngineException: Attempting to JIT compile method ‘(wrapper delegate-begin-invoke) System.IAsyncResult System.Func`2<ExecutionEngineExceptionTest.AppDelegate, bool>:begin_invoke_IAsyncResult__this___T_AsyncCallback_object (ExecutionEngineExceptionTest.AppDelegate,System.AsyncCallback,object)’
  • #14975 - Mono profiler crashes when running IDE leak tests for VSMac
  • #6352 - Bug in TextRenderer.DrawText on Linux
  • #6861 - Make the interpreter pass all runtime tests
  • #6997 - Random failure in MonoTests.DebuggerTests.StepOutAsync
  • #7326 - Incorrect step over in debugger, test ShouldCorrectlyStepOverOnExitFromArgsAfterStepInMethodParameter
  • #7517 - Authenticode formatter not updated for SHA256, 384, and 512
  • #7750 - System.MissingMethodException in System.Security.Policy.Evidence
  • #7845 - Don’t install monograph
  • #8360 - [System.Net.Sockets] flakey failures of SocketTest.TestSelect1 on Darwin systems
  • #8430 - Fails to compile without AOT (enable-minimal=profiler,debug,aot)
  • #8460 - [Debugger] Record time it took between steps
  • #8766 - Starting process with empty ProcessStartInfo.Environment incorrectly inherits all variables
  • #9267 - Release tarballs should be compressed with xz
  • #9418 - SslStream.AuthenticateAsClient throws wrong exception types
  • #9507 - isinst for unused array type fails
  • #9951 - cross build regressed wrt System.Native and “shm_open that works well enough with mmap”

Contributors

Alan Grgic, Aleksey Kliger, Aleksey Kliger (λgeek), Alex Earl, Alexander Kyte, Alexander Köplinger, Alexis Christoforides, Ankit Jain, Atsushi Eno, Bernhard Urban, Bijan Tabatabai, Calvin Buckley, Cody Russell, Comical Derskeal, Damien Diederen, DasSkelett, Dmitry Kalyanov, Dominik Przywara, Eberhard Beilharz, Egor Bogatov, Filip Navara, HebaruSan, Henric Müller, Imran Hameed, Jason Imison, Jay Krell, Jb Evain, Jo Shields, Johan Lorensson, Jonathan Chambers, Jonathon Rossi, Jérôme Laban, Katelyn Gadd, Kenneth Pouncey, Kirill Osenkov, Larry Ewing, Lee Culver, Leonardo Galli, Ludovic Henry, Mads Kruse Johnsen, Manuel de la Pena, Marek Habersack, Marek Safar, Marius Ungureanu, Martin Baulig, Maxim Lipnin, Michael Voorhees, Miguel de Icaza, Mikayla Hutchinson, Mike Krüger, Mikhail Filippov, Mikhail Pilin, Neale Ferguson, Nikita Voronchev, Nikolay Sivov, Paul Hebble, PaulBol, Radek Doulik, Robin Sue, Rodrigo Kumpera, Rolf Bjarne Kvinge, Romain Marcadier-Muller, Sebastien Pouliot, Shaan Nobee, ShonkyCH, Steve Pfister, Thays Grazia, Tomasz Jaworski, Vincent Dondain, Vlad Brezae, Yvan Janssens, Zoltan Varga, bwadswor, guthubuser, majellin24, markusbeth, myfreeweb, roozbehid, sancheolz