summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiyoung Yun <jy910.yun@samsung.com>2017-06-13 09:47:36 (GMT)
committerJiyoung Yun <jy910.yun@samsung.com>2017-06-13 09:47:36 (GMT)
commit61d6a817e39d3bae0f47dbc09838d51db22a5d30 (patch)
treecb37caa1784bc738b976273335d6ed04a7cc80b0
parent5b975f8233e8c8d17b215372f89ca713b45d6a0b (diff)
downloadcoreclr-61d6a817e39d3bae0f47dbc09838d51db22a5d30.zip
coreclr-61d6a817e39d3bae0f47dbc09838d51db22a5d30.tar.gz
coreclr-61d6a817e39d3bae0f47dbc09838d51db22a5d30.tar.bz2
Imported Upstream version 2.0.0.11992upstream/2.0.0.11992
-rw-r--r--BuildToolsVersion.txt2
-rw-r--r--Documentation/botr/xplat-minidump-generation.md2
-rw-r--r--Documentation/building/debugging-instructions.md7
-rw-r--r--Documentation/building/linux-instructions.md5
-rw-r--r--Documentation/building/unix-test-instructions.md5
-rw-r--r--Documentation/design-docs/eh-writethru.md100
-rw-r--r--Documentation/design-docs/first-class-structs.md2
-rw-r--r--Documentation/dummy.txt1
-rw-r--r--Documentation/project-docs/ci-trigger-phrases.md17
-rw-r--r--Documentation/project-docs/clr-configuration-knobs.md3
-rw-r--r--Documentation/project-docs/contributing-workflow.md24
-rw-r--r--Documentation/project-docs/dotnet-standards.md2
-rw-r--r--Documentation/project-docs/garbage-collector-guidelines.md33
-rw-r--r--Documentation/project-docs/performance-guidelines.md9
-rw-r--r--DotnetCLIVersion.txt2
-rw-r--r--Linkedbin534016 -> 0 bytes
-rw-r--r--THIRD-PARTY-NOTICES.TXT (renamed from THIRD-PARTY-NOTICES)0
-rw-r--r--Tools-Override/codeOptimization.targets118
-rw-r--r--Tools-Override/depProj.targets131
-rw-r--r--Tools-Override/resources.targets76
-rwxr-xr-xbuild-packages.sh12
-rw-r--r--build-test.cmd35
-rw-r--r--build.cmd59
-rw-r--r--build.proj9
-rwxr-xr-xbuild.sh70
-rw-r--r--buildpipeline/DotNet-CoreClr-Trusted-Linux-Crossbuild.json9
-rw-r--r--buildpipeline/DotNet-CoreClr-Trusted-Linux.json9
-rw-r--r--buildpipeline/DotNet-CoreClr-Trusted-Mac.json7
-rw-r--r--buildpipeline/DotNet-CoreClr-Trusted-Windows-x86.json119
-rw-r--r--buildpipeline/DotNet-CoreClr-Trusted-Windows.json47
-rw-r--r--buildpipeline/DotNet-Trusted-Publish-Symbols.json274
-rw-r--r--buildpipeline/DotNet-Trusted-Publish.json25
-rw-r--r--buildpipeline/Dotnet-CoreClr-Trusted-BuildTests.json66
-rw-r--r--buildpipeline/pipelines.json222
-rw-r--r--clr.coreclr.props9
-rw-r--r--clr.defines.targets2
-rw-r--r--clrdefinitions.cmake21
-rw-r--r--clrfeatures.cmake8
-rw-r--r--config.json48
-rwxr-xr-xcross/armel/tizen-fetch.sh46
-rw-r--r--cross/armel/tizen/tizen.patch15
-rw-r--r--cross/armel/toolchain.cmake2
-rw-r--r--dependencies.props35
-rw-r--r--dir.props58
-rwxr-xr-xextract-from-json.py56
-rw-r--r--functions.cmake9
-rw-r--r--init-tools.cmd57
-rw-r--r--init-tools.msbuild16
-rwxr-xr-xinit-tools.sh101
-rwxr-xr-xnetci.groovy89
-rw-r--r--perf.groovy243
-rw-r--r--pgosupport.cmake4
-rw-r--r--run.cmd11
-rwxr-xr-xrun.sh3
-rw-r--r--src/.nuget/Microsoft.NETCore.Jit/runtime.Windows_NT.Microsoft.NETCore.Jit.props1
-rw-r--r--src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/runtime.Linux.Microsoft.NETCore.Runtime.CoreCLR.props11
-rw-r--r--src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/runtime.OSX.Microsoft.NETCore.Runtime.CoreCLR.props3
-rw-r--r--src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/runtime.Windows_NT.Microsoft.NETCore.Runtime.CoreCLR.props9
-rw-r--r--src/.nuget/ThirdPartyNotices.txt31
-rw-r--r--src/.nuget/dir.props41
-rw-r--r--src/.nuget/dir.targets18
-rw-r--r--src/.nuget/dotnet_library_license.txt127
-rw-r--r--src/.nuget/init/init.csproj (renamed from tests/src/Common/external/external.csproj)15
-rw-r--r--src/.nuget/init/project.json10
-rw-r--r--src/.nuget/init/readme.txt1
-rw-r--r--src/.nuget/optdata/nuget.config6
-rw-r--r--src/.nuget/optdata/optdata.csproj24
-rw-r--r--src/.nuget/packages.builds4
-rw-r--r--src/CMakeLists.txt5
-rw-r--r--src/ToolBox/SOS/NETCore/SOS.NETCore.csproj27
-rw-r--r--src/ToolBox/SOS/NETCore/project.json15
-rw-r--r--src/ToolBox/SOS/Strike/sosdocsunix.txt1
-rw-r--r--src/ToolBox/SOS/Strike/strike.cpp8
-rw-r--r--src/ToolBox/SOS/lldbplugin/CMakeLists.txt31
-rw-r--r--src/binder/assemblybinder.cpp36
-rw-r--r--src/build.proj8
-rw-r--r--src/classlibnative/bcltype/arraynative.cpp24
-rw-r--r--src/corefx/System.Globalization.Native/icushim.h2
-rw-r--r--src/createVersionFile.proj13
-rw-r--r--src/debug/createdump/CMakeLists.txt11
-rw-r--r--src/debug/createdump/crashinfo.cpp244
-rw-r--r--src/debug/createdump/crashinfo.h4
-rw-r--r--src/debug/createdump/createdump.cpp8
-rw-r--r--src/debug/createdump/datatarget.cpp1
-rw-r--r--src/debug/createdump/dumpwriter.cpp2
-rw-r--r--src/debug/createdump/main.cpp5
-rw-r--r--src/debug/createdump/memoryregion.h39
-rw-r--r--src/debug/createdump/threadinfo.cpp2
-rw-r--r--src/debug/daccess/daccess.cpp2
-rw-r--r--src/debug/daccess/dacimpl.h1
-rw-r--r--src/debug/daccess/enummem.cpp8
-rw-r--r--src/debug/di/cordb.cpp11
-rw-r--r--src/debug/shared/amd64/primitives.cpp2
-rw-r--r--src/dlls/mscordac/mscordac_unixexports.src1
-rw-r--r--src/dlls/mscoree/CMakeLists.txt5
-rw-r--r--src/dlls/mscoree/coreclr/CMakeLists.txt6
-rw-r--r--src/dlls/mscoree/gdbjit_unixexports.src3
-rw-r--r--src/dlls/mscorpe/iceefilegen.cpp4
-rw-r--r--src/gc/handletablecore.cpp26
-rw-r--r--src/gc/objecthandle.cpp3
-rw-r--r--src/ilasm/asmman.cpp11
-rw-r--r--src/ilasm/asmman.hpp2
-rw-r--r--src/ilasm/assembler.cpp16
-rw-r--r--src/ilasm/prebuilt/asmparse.cpp35
-rw-r--r--src/inc/CrstTypes.def2
-rw-r--r--src/inc/clrconfigvalues.h14
-rw-r--r--src/inc/corcompile.h9
-rw-r--r--src/inc/corprof.idl18
-rw-r--r--src/inc/crsttypes.h3
-rw-r--r--src/inc/daccess.h6
-rw-r--r--src/inc/eventtracebase.h21
-rw-r--r--src/inc/profilepriv.inl15
-rw-r--r--src/inc/switches.h3
-rw-r--r--src/inc/winrt/paraminstanceapi.h7
-rw-r--r--src/jit/assertionprop.cpp2
-rw-r--r--src/jit/bitset.h11
-rw-r--r--src/jit/bitsetasshortlong.h32
-rw-r--r--src/jit/bitsetasuint64.h5
-rw-r--r--src/jit/bitsetasuint64inclass.h17
-rw-r--r--src/jit/bitsetops.h1
-rw-r--r--src/jit/codegenarm.cpp1313
-rw-r--r--src/jit/codegenarm64.cpp1773
-rw-r--r--src/jit/codegenarmarch.cpp834
-rw-r--r--src/jit/codegencommon.cpp26
-rw-r--r--src/jit/codegenlinear.cpp8
-rw-r--r--src/jit/codegenlinear.h63
-rw-r--r--src/jit/codegenxarch.cpp7
-rw-r--r--src/jit/compiler.h7
-rw-r--r--src/jit/copyprop.cpp2
-rw-r--r--src/jit/decomposelongs.cpp8
-rw-r--r--src/jit/ee_il_dll.cpp2
-rw-r--r--src/jit/emit.cpp6
-rw-r--r--src/jit/emit.h43
-rw-r--r--src/jit/emitarm64.cpp303
-rw-r--r--src/jit/emitarm64.h9
-rw-r--r--src/jit/emitxarch.cpp6
-rw-r--r--src/jit/flowgraph.cpp55
-rw-r--r--src/jit/gentree.cpp11
-rw-r--r--src/jit/gentree.h15
-rw-r--r--src/jit/importer.cpp67
-rw-r--r--src/jit/instrsarm64.h18
-rw-r--r--src/jit/lclvars.cpp5
-rw-r--r--src/jit/liveness.cpp3
-rw-r--r--src/jit/lower.cpp10
-rw-r--r--src/jit/lower.h16
-rw-r--r--src/jit/lowerarmarch.cpp7
-rw-r--r--src/jit/lsra.cpp255
-rw-r--r--src/jit/lsra.h6
-rw-r--r--src/jit/lsraarm.cpp2
-rw-r--r--src/jit/lsraarmarch.cpp22
-rw-r--r--src/jit/morph.cpp77
-rw-r--r--src/jit/nodeinfo.h4
-rw-r--r--src/jit/optimizer.cpp82
-rw-r--r--src/jit/regalloc.cpp4
-rw-r--r--src/jit/target.h15
-rw-r--r--src/md/ceefilegen/cceegen.cpp30
-rw-r--r--src/md/enc/mdinternalrw.cpp2
-rw-r--r--src/mscorlib/Resources/Strings.resx9
-rw-r--r--src/mscorlib/System.Private.CoreLib.csproj50
-rw-r--r--src/mscorlib/Tools/Signing/mscorlib.snkbin160 -> 0 bytes
-rw-r--r--src/mscorlib/shared/Interop/Unix/System.Globalization.Native/Interop.Collation.cs (renamed from src/mscorlib/src/Interop/Unix/System.Globalization.Native/Interop.Collation.cs)3
-rw-r--r--src/mscorlib/shared/Interop/Windows/Interop.Libraries.cs1
-rw-r--r--src/mscorlib/shared/Interop/Windows/Kernel32/Interop.Globalization.cs (renamed from src/mscorlib/src/Interop/Windows/kernel32/Interop.Globalization.cs)16
-rw-r--r--src/mscorlib/shared/Interop/Windows/Kernel32/Interop.SetThreadErrorMode.cs (renamed from src/mscorlib/shared/Interop/Windows/Kernel32/Interop.SetErrorMode.cs)4
-rw-r--r--src/mscorlib/shared/Interop/Windows/NtDll/Interop.ZeroMemory.cs16
-rw-r--r--src/mscorlib/shared/Microsoft/Win32/SafeHandles/SafeFileHandle.Unix.cs60
-rw-r--r--src/mscorlib/shared/Microsoft/Win32/SafeHandles/SafeHandleMinusOneIsInvalid.cs19
-rw-r--r--src/mscorlib/shared/Microsoft/Win32/SafeHandles/SafeHandleZeroOrMinusOneIsInvalid.cs19
-rw-r--r--src/mscorlib/shared/System.Private.CoreLib.Shared.projitems41
-rw-r--r--src/mscorlib/shared/System/ApplicationException.cs6
-rw-r--r--src/mscorlib/shared/System/ArgumentException.cs4
-rw-r--r--src/mscorlib/shared/System/ArgumentNullException.cs6
-rw-r--r--src/mscorlib/shared/System/ArgumentOutOfRangeException.cs (renamed from src/mscorlib/src/System/ArgumentOutOfRangeException.cs)61
-rw-r--r--src/mscorlib/shared/System/ArithmeticException.cs6
-rw-r--r--src/mscorlib/shared/System/ArrayTypeMismatchException.cs6
-rw-r--r--src/mscorlib/shared/System/AsyncCallback.cs1
-rw-r--r--src/mscorlib/shared/System/AttributeTargets.cs1
-rw-r--r--src/mscorlib/shared/System/AttributeUsageAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/BadImageFormatException.cs (renamed from src/mscorlib/src/System/BadImageFormatException.cs)88
-rw-r--r--src/mscorlib/shared/System/CLSCompliantAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Char.cs2
-rw-r--r--src/mscorlib/shared/System/CharEnumerator.cs1
-rw-r--r--src/mscorlib/shared/System/Collections/Generic/KeyNotFoundException.cs6
-rw-r--r--src/mscorlib/shared/System/CurrentSystemTimeZone.cs1
-rw-r--r--src/mscorlib/shared/System/DBNull.cs10
-rw-r--r--src/mscorlib/shared/System/DataMisalignedException.cs3
-rw-r--r--src/mscorlib/shared/System/DateTimeKind.cs1
-rw-r--r--src/mscorlib/shared/System/DayOfWeek.cs1
-rw-r--r--src/mscorlib/shared/System/DefaultBinder.cs2
-rw-r--r--src/mscorlib/shared/System/Diagnostics/ConditionalAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Diagnostics/Debug.Unix.cs (renamed from src/mscorlib/src/System/Diagnostics/Debug.Unix.cs)0
-rw-r--r--src/mscorlib/shared/System/Diagnostics/Tracing/EventProvider.cs135
-rwxr-xr-x[-rw-r--r--]src/mscorlib/shared/System/Diagnostics/Tracing/EventSource.cs172
-rw-r--r--src/mscorlib/shared/System/Diagnostics/Tracing/EventSourceException.cs4
-rw-r--r--src/mscorlib/shared/System/Diagnostics/Tracing/IEventProvider.cs42
-rw-r--r--src/mscorlib/shared/System/DivideByZeroException.cs6
-rw-r--r--src/mscorlib/shared/System/DllNotFoundException.cs (renamed from src/mscorlib/src/System/DllNotFoundException.cs)5
-rw-r--r--src/mscorlib/shared/System/DuplicateWaitObjectException.cs9
-rw-r--r--src/mscorlib/shared/System/EntryPointNotFoundException.cs6
-rw-r--r--src/mscorlib/shared/System/EventArgs.cs1
-rw-r--r--src/mscorlib/shared/System/EventHandler.cs2
-rw-r--r--src/mscorlib/shared/System/ExecutionEngineException.cs3
-rw-r--r--src/mscorlib/shared/System/FieldAccessException.cs6
-rw-r--r--src/mscorlib/shared/System/FlagsAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/FormatException.cs6
-rw-r--r--src/mscorlib/shared/System/Globalization/CalendarData.Unix.cs (renamed from src/mscorlib/src/System/Globalization/CalendarData.Unix.cs)27
-rw-r--r--src/mscorlib/shared/System/Globalization/CalendarWeekRule.cs1
-rw-r--r--src/mscorlib/shared/System/Globalization/ChineseLunisolarCalendar.cs1
-rw-r--r--src/mscorlib/shared/System/Globalization/CultureData.Unix.cs (renamed from src/mscorlib/src/System/Globalization/CultureData.Unix.cs)0
-rw-r--r--src/mscorlib/shared/System/Globalization/CultureNotFoundException.cs6
-rw-r--r--src/mscorlib/shared/System/Globalization/DateTimeFormatInfo.cs1
-rw-r--r--src/mscorlib/shared/System/Globalization/DaylightTime.cs1
-rw-r--r--src/mscorlib/shared/System/Globalization/EastAsianLunisolarCalendar.cs1
-rw-r--r--src/mscorlib/shared/System/Globalization/GregorianCalendarTypes.cs1
-rw-r--r--src/mscorlib/shared/System/Globalization/HebrewCalendar.cs1
-rw-r--r--src/mscorlib/shared/System/Globalization/HijriCalendar.Unix.cs (renamed from src/mscorlib/src/System/Globalization/HijriCalendar.Unix.cs)0
-rw-r--r--src/mscorlib/shared/System/Globalization/HijriCalendar.Win32.cs (renamed from src/mscorlib/src/System/Globalization/HijriCalendar.Win32.cs)0
-rw-r--r--src/mscorlib/shared/System/Globalization/HijriCalendar.WinRT.cs (renamed from src/mscorlib/src/System/Globalization/HijriCalendar.WinRT.cs)0
-rw-r--r--src/mscorlib/shared/System/Globalization/HijriCalendar.cs1
-rw-r--r--src/mscorlib/shared/System/Globalization/IdnMapping.Unix.cs (renamed from src/mscorlib/src/System/Globalization/IdnMapping.Unix.cs)4
-rw-r--r--src/mscorlib/shared/System/Globalization/JapaneseCalendar.Unix.cs (renamed from src/mscorlib/src/System/Globalization/JapaneseCalendar.Unix.cs)0
-rw-r--r--src/mscorlib/shared/System/Globalization/JapaneseCalendar.Win32.cs (renamed from src/mscorlib/src/System/Globalization/JapaneseCalendar.Win32.cs)0
-rw-r--r--src/mscorlib/shared/System/Globalization/JapaneseCalendar.WinRT.cs (renamed from src/mscorlib/src/System/Globalization/JapaneseCalendar.WinRT.cs)0
-rw-r--r--src/mscorlib/shared/System/Globalization/JapaneseCalendar.cs1
-rw-r--r--src/mscorlib/shared/System/Globalization/JapaneseLunisolarCalendar.cs1
-rw-r--r--src/mscorlib/shared/System/Globalization/JulianCalendar.cs1
-rw-r--r--src/mscorlib/shared/System/Globalization/KoreanCalendar.cs1
-rw-r--r--src/mscorlib/shared/System/Globalization/KoreanLunisolarCalendar.cs1
-rw-r--r--src/mscorlib/shared/System/Globalization/NumberFormatInfo.cs (renamed from src/mscorlib/src/System/Globalization/NumberFormatInfo.cs)25
-rw-r--r--src/mscorlib/shared/System/Globalization/PersianCalendar.cs1
-rw-r--r--src/mscorlib/shared/System/Globalization/SortKey.cs (renamed from src/mscorlib/src/System/Globalization/SortKey.cs)35
-rw-r--r--src/mscorlib/shared/System/Globalization/SortVersion.cs20
-rw-r--r--src/mscorlib/shared/System/Globalization/StringInfo.cs (renamed from src/mscorlib/src/System/Globalization/StringInfo.cs)11
-rw-r--r--src/mscorlib/shared/System/Globalization/TaiwanCalendar.cs1
-rw-r--r--src/mscorlib/shared/System/Globalization/TaiwanLunisolarCalendar.cs1
-rw-r--r--src/mscorlib/shared/System/Globalization/ThaiBuddhistCalendar.cs1
-rw-r--r--src/mscorlib/shared/System/Globalization/UmAlQuraCalendar.cs1
-rw-r--r--src/mscorlib/shared/System/IO/DirectoryNotFoundException.cs2
-rw-r--r--src/mscorlib/shared/System/IO/EncodingCache.cs (renamed from src/mscorlib/src/System/IO/EncodingCache.cs)0
-rw-r--r--src/mscorlib/shared/System/IO/EndOfStreamException.cs2
-rw-r--r--src/mscorlib/shared/System/IO/FileAccess.cs1
-rw-r--r--src/mscorlib/shared/System/IO/FileLoadException.cs11
-rw-r--r--src/mscorlib/shared/System/IO/FileNotFoundException.cs11
-rw-r--r--src/mscorlib/shared/System/IO/FileStream.Win32.cs13
-rw-r--r--src/mscorlib/shared/System/IO/FileStream.WinRT.cs20
-rw-r--r--src/mscorlib/shared/System/IO/FileStream.Windows.cs8
-rw-r--r--src/mscorlib/shared/System/IO/Path.Unix.cs9
-rw-r--r--src/mscorlib/shared/System/IO/Path.Windows.cs6
-rw-r--r--src/mscorlib/shared/System/IO/Path.cs24
-rw-r--r--src/mscorlib/shared/System/IO/PathInternal.Unix.cs5
-rw-r--r--src/mscorlib/shared/System/IO/PathInternal.Windows.cs5
-rw-r--r--src/mscorlib/shared/System/IO/PathTooLongException.cs2
-rw-r--r--src/mscorlib/shared/System/IO/PinnedBufferMemoryStream.cs (renamed from src/mscorlib/src/System/IO/PinnedBufferMemoryStream.cs)18
-rw-r--r--src/mscorlib/shared/System/IO/UnmanagedMemoryStream.cs (renamed from src/mscorlib/src/System/IO/UnmanagedMemoryStream.cs)254
-rw-r--r--src/mscorlib/shared/System/IO/UnmanagedMemoryStreamWrapper.cs (renamed from src/mscorlib/src/System/IO/UnmanagedMemoryStreamWrapper.cs)16
-rw-r--r--src/mscorlib/shared/System/IndexOutOfRangeException.cs3
-rw-r--r--src/mscorlib/shared/System/InsufficientExecutionStackException.cs3
-rw-r--r--src/mscorlib/shared/System/InvalidCastException.cs6
-rw-r--r--src/mscorlib/shared/System/InvalidOperationException.cs6
-rw-r--r--src/mscorlib/shared/System/InvalidProgramException.cs3
-rw-r--r--src/mscorlib/shared/System/InvalidTimeZoneException.cs6
-rw-r--r--src/mscorlib/shared/System/Lazy.cs15
-rw-r--r--src/mscorlib/shared/System/MarshalByRefObject.cs1
-rw-r--r--src/mscorlib/shared/System/MemberAccessException.cs6
-rw-r--r--src/mscorlib/shared/System/MethodAccessException.cs6
-rw-r--r--src/mscorlib/shared/System/MissingMethodException.cs2
-rw-r--r--src/mscorlib/shared/System/MulticastNotSupportedException.cs3
-rw-r--r--src/mscorlib/shared/System/NotFiniteNumberException.cs4
-rw-r--r--src/mscorlib/shared/System/NotImplementedException.cs6
-rw-r--r--src/mscorlib/shared/System/NotSupportedException.cs6
-rw-r--r--src/mscorlib/shared/System/NullReferenceException.cs6
-rw-r--r--src/mscorlib/shared/System/ObjectDisposedException.cs4
-rw-r--r--src/mscorlib/shared/System/ObsoleteAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/OperationCanceledException.cs (renamed from src/mscorlib/src/System/OperationCanceledException.cs)2
-rw-r--r--src/mscorlib/shared/System/OverflowException.cs6
-rw-r--r--src/mscorlib/shared/System/PlatformNotSupportedException.cs6
-rw-r--r--src/mscorlib/shared/System/Random.cs1
-rw-r--r--src/mscorlib/shared/System/RankException.cs6
-rw-r--r--src/mscorlib/shared/System/Reflection/AmbiguousMatchException.cs6
-rw-r--r--src/mscorlib/shared/System/Reflection/Assembly.cs5
-rw-r--r--src/mscorlib/shared/System/Reflection/AssemblyNameFormatter.cs156
-rw-r--r--src/mscorlib/shared/System/Reflection/CustomAttributeFormatException.cs2
-rw-r--r--src/mscorlib/shared/System/Reflection/DefaultMemberAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Reflection/InvalidFilterCriteriaException.cs2
-rw-r--r--src/mscorlib/shared/System/Reflection/MemberInfoSerializationHolder.cs315
-rw-r--r--src/mscorlib/shared/System/Reflection/Missing.cs6
-rw-r--r--src/mscorlib/shared/System/Reflection/Module.cs5
-rw-r--r--src/mscorlib/shared/System/Reflection/ParameterInfo.cs41
-rw-r--r--src/mscorlib/shared/System/Reflection/ParameterModifier.cs1
-rw-r--r--src/mscorlib/shared/System/Reflection/Pointer.cs12
-rw-r--r--src/mscorlib/shared/System/Reflection/ReflectionTypeLoadException.cs10
-rw-r--r--src/mscorlib/shared/System/Reflection/StrongNameKeyPair.cs16
-rw-r--r--src/mscorlib/shared/System/Reflection/TargetException.cs2
-rw-r--r--src/mscorlib/shared/System/Reflection/TargetInvocationException.cs6
-rw-r--r--src/mscorlib/shared/System/Reflection/TargetParameterCountException.cs6
-rw-r--r--src/mscorlib/shared/System/Reflection/TypeDelegator.cs2
-rw-r--r--src/mscorlib/shared/System/Resources/MissingManifestResourceException.cs2
-rw-r--r--src/mscorlib/shared/System/Resources/MissingSatelliteAssemblyException.cs2
-rw-r--r--src/mscorlib/shared/System/Resources/ResourceFallbackManager.cs (renamed from src/mscorlib/src/System/Resources/ResourceFallbackManager.cs)9
-rw-r--r--src/mscorlib/shared/System/Resources/RuntimeResourceSet.cs (renamed from src/mscorlib/src/System/Resources/RuntimeResourceSet.cs)60
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/AsyncStateMachineAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/CompilationRelaxations.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/CompilationRelaxationsAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/CompilerGeneratedAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/CompilerGlobalScopeAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/DefaultDependencyAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/DependencyAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/FixedAddressValueTypeAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/IndexerNameAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/IsByRefLikeAttribute.cs21
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/IteratorStateMachineAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/LoadHint.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/MethodCodeType.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/ReferenceAssemblyAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/RuntimeCompatibilityAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/StateMachineAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/StringFreezingAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/CompilerServices/UnsafeValueTypeAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/ConstrainedExecution/Cer.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/ConstrainedExecution/Consistency.cs1
-rw-r--r--src/mscorlib/shared/System/Runtime/InteropServices/ExternalException.cs2
-rw-r--r--src/mscorlib/shared/System/Runtime/Serialization/SerializationException.cs2
-rw-r--r--src/mscorlib/shared/System/Runtime/Serialization/StreamingContext.cs1
-rw-r--r--src/mscorlib/shared/System/Security/CryptographicException.cs2
-rw-r--r--src/mscorlib/shared/System/Security/SafeBSTRHandle.cs5
-rw-r--r--src/mscorlib/shared/System/Security/SecureString.Unix.cs46
-rw-r--r--src/mscorlib/shared/System/Security/SecureString.Windows.cs13
-rw-r--r--src/mscorlib/shared/System/Security/SecurityException.cs2
-rw-r--r--src/mscorlib/shared/System/Security/VerificationException.cs2
-rw-r--r--src/mscorlib/shared/System/StackOverflowException.cs3
-rw-r--r--src/mscorlib/shared/System/StringComparison.cs1
-rw-r--r--src/mscorlib/shared/System/SystemException.cs6
-rw-r--r--src/mscorlib/shared/System/Text/ASCIIEncoding.cs2
-rw-r--r--src/mscorlib/shared/System/Text/Decoder.cs1
-rw-r--r--src/mscorlib/shared/System/Text/Encoder.cs1
-rw-r--r--src/mscorlib/shared/System/Text/EncodingInfo.cs1
-rw-r--r--src/mscorlib/shared/System/Text/EncodingNLS.cs1
-rw-r--r--src/mscorlib/shared/System/Text/UTF32Encoding.cs2
-rw-r--r--src/mscorlib/shared/System/Text/UTF8Encoding.cs79
-rw-r--r--src/mscorlib/shared/System/Text/UnicodeEncoding.cs41
-rw-r--r--src/mscorlib/shared/System/ThreadStaticAttribute.cs1
-rw-r--r--src/mscorlib/shared/System/Threading/AbandonedMutexException.cs2
-rw-r--r--src/mscorlib/shared/System/Threading/ExecutionContext.cs11
-rw-r--r--src/mscorlib/shared/System/Threading/LockRecursionException.cs6
-rw-r--r--src/mscorlib/shared/System/Threading/SemaphoreFullException.cs2
-rw-r--r--src/mscorlib/shared/System/Threading/SynchronizationLockException.cs2
-rw-r--r--src/mscorlib/shared/System/Threading/Tasks/TaskCanceledException.cs2
-rw-r--r--src/mscorlib/shared/System/Threading/Tasks/TaskSchedulerException.cs2
-rw-r--r--src/mscorlib/shared/System/Threading/ThreadAbortException.cs6
-rw-r--r--src/mscorlib/shared/System/Threading/ThreadStartException.cs6
-rw-r--r--src/mscorlib/shared/System/Threading/ThreadStateException.cs2
-rw-r--r--src/mscorlib/shared/System/Threading/WaitHandleCannotBeOpenedException.cs2
-rw-r--r--src/mscorlib/shared/System/TimeZone.cs1
-rw-r--r--src/mscorlib/shared/System/TimeZoneNotFoundException.cs6
-rw-r--r--src/mscorlib/shared/System/TimeoutException.cs6
-rw-r--r--src/mscorlib/shared/System/Type.cs1
-rw-r--r--src/mscorlib/shared/System/TypeAccessException.cs6
-rw-r--r--src/mscorlib/shared/System/TypeCode.cs1
-rw-r--r--src/mscorlib/shared/System/TypeInitializationException.cs8
-rw-r--r--src/mscorlib/shared/System/TypeUnloadedException.cs7
-rw-r--r--src/mscorlib/shared/System/UnauthorizedAccessException.cs6
-rw-r--r--src/mscorlib/shared/System/UnhandledExceptionEventArgs.cs1
-rw-r--r--src/mscorlib/shared/System/UnhandledExceptionEventHandler.cs1
-rw-r--r--src/mscorlib/shared/System/UnitySerializationHolder.cs329
-rw-r--r--src/mscorlib/shared/System/Void.cs1
-rw-r--r--src/mscorlib/src/Microsoft/Win32/SafeHandles/Win32SafeHandles.cs60
-rw-r--r--src/mscorlib/src/Microsoft/Win32/Win32Native.cs24
-rw-r--r--src/mscorlib/src/System/AccessViolationException.cs6
-rw-r--r--src/mscorlib/src/System/Activator.cs258
-rw-r--r--src/mscorlib/src/System/AppDomain.cs178
-rw-r--r--src/mscorlib/src/System/AppDomainAttributes.cs1
-rw-r--r--src/mscorlib/src/System/AppDomainSetup.cs14
-rw-r--r--src/mscorlib/src/System/AppDomainUnloadedException.cs2
-rw-r--r--src/mscorlib/src/System/Array.cs3
-rw-r--r--src/mscorlib/src/System/ArraySegment.cs1
-rw-r--r--src/mscorlib/src/System/BCLDebug.cs2
-rw-r--r--src/mscorlib/src/System/BadImageFormatException.CoreCLR.cs19
-rw-r--r--src/mscorlib/src/System/Boolean.cs6
-rw-r--r--src/mscorlib/src/System/Byte.cs2
-rw-r--r--src/mscorlib/src/System/Collections/ArrayList.cs626
-rw-r--r--src/mscorlib/src/System/Collections/Comparer.cs27
-rw-r--r--src/mscorlib/src/System/Collections/CompatibleComparer.cs1
-rw-r--r--src/mscorlib/src/System/Collections/Concurrent/ConcurrentQueue.cs1
-rw-r--r--src/mscorlib/src/System/Collections/EmptyReadOnlyDictionaryInternal.cs1
-rw-r--r--src/mscorlib/src/System/Collections/Generic/ArraySortHelper.cs1
-rw-r--r--src/mscorlib/src/System/Collections/Generic/Comparer.cs3
-rw-r--r--src/mscorlib/src/System/Collections/Generic/Dictionary.cs44
-rw-r--r--src/mscorlib/src/System/Collections/Generic/EqualityComparer.cs34
-rw-r--r--src/mscorlib/src/System/Collections/Generic/List.cs1
-rw-r--r--src/mscorlib/src/System/Collections/Hashtable.cs72
-rw-r--r--src/mscorlib/src/System/Collections/ObjectModel/ReadOnlyDictionary.cs4
-rw-r--r--src/mscorlib/src/System/Currency.cs1
-rw-r--r--src/mscorlib/src/System/Delegate.cs4
-rw-r--r--src/mscorlib/src/System/DelegateSerializationHolder.cs287
-rw-r--r--src/mscorlib/src/System/Diagnostics/AssertFilter.cs1
-rw-r--r--src/mscorlib/src/System/Diagnostics/AssertFilters.cs1
-rw-r--r--src/mscorlib/src/System/Diagnostics/Contracts/ContractsBCL.cs13
-rw-r--r--src/mscorlib/src/System/Diagnostics/Debugger.cs114
-rw-r--r--src/mscorlib/src/System/Diagnostics/DebuggerAttributes.cs3
-rw-r--r--src/mscorlib/src/System/Diagnostics/EditAndContinueHelper.cs1
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/EventPipe.cs175
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/EventPipeEventProvider.cs116
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/EventSource_CoreCLR.cs20
-rw-r--r--src/mscorlib/src/System/Diagnostics/LogSwitch.cs1
-rw-r--r--src/mscorlib/src/System/Diagnostics/LoggingLevels.cs1
-rw-r--r--src/mscorlib/src/System/Diagnostics/Stackframe.cs1
-rw-r--r--src/mscorlib/src/System/Diagnostics/Stacktrace.cs2
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/SymAddressKind.cs1
-rw-r--r--src/mscorlib/src/System/Diagnostics/log.cs2
-rw-r--r--src/mscorlib/src/System/Double.cs2
-rw-r--r--src/mscorlib/src/System/Empty.cs9
-rw-r--r--src/mscorlib/src/System/Environment.cs3
-rw-r--r--src/mscorlib/src/System/Exception.cs102
-rw-r--r--src/mscorlib/src/System/GC.cs3
-rw-r--r--src/mscorlib/src/System/Globalization/BidiCategory.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/Calendar.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/CalendarData.Windows.cs49
-rw-r--r--src/mscorlib/src/System/Globalization/CompareInfo.Windows.cs4
-rw-r--r--src/mscorlib/src/System/Globalization/CompareInfo.cs34
-rw-r--r--src/mscorlib/src/System/Globalization/CultureData.Windows.cs98
-rw-r--r--src/mscorlib/src/System/Globalization/CultureInfo.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/EncodingDataItem.Unix.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/EncodingDataItem.cs2
-rw-r--r--src/mscorlib/src/System/Globalization/GregorianCalendar.cs3
-rw-r--r--src/mscorlib/src/System/Globalization/GregorianCalendarHelper.cs2
-rw-r--r--src/mscorlib/src/System/Globalization/RegionInfo.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/TextElementEnumerator.cs1
-rw-r--r--src/mscorlib/src/System/Globalization/TextInfo.cs32
-rw-r--r--src/mscorlib/src/System/IO/BinaryWriter.cs1
-rw-r--r--src/mscorlib/src/System/IO/DriveNotFoundException.cs2
-rw-r--r--src/mscorlib/src/System/IO/File.cs27
-rw-r--r--src/mscorlib/src/System/IO/FileLoadException.CoreCLR.cs5
-rw-r--r--src/mscorlib/src/System/IO/FileSystemEnumerable.cs19
-rw-r--r--src/mscorlib/src/System/IO/IOException.cs2
-rw-r--r--src/mscorlib/src/System/IO/MemoryStream.cs1
-rw-r--r--src/mscorlib/src/System/IO/SearchOption.cs1
-rw-r--r--src/mscorlib/src/System/IO/Stream.cs3
-rw-r--r--src/mscorlib/src/System/IO/StreamReader.cs1
-rw-r--r--src/mscorlib/src/System/IO/TextReader.cs3
-rw-r--r--src/mscorlib/src/System/IO/__Error.cs6
-rw-r--r--src/mscorlib/src/System/InsufficientMemoryException.cs5
-rw-r--r--src/mscorlib/src/System/Int16.cs2
-rw-r--r--src/mscorlib/src/System/Int32.cs2
-rw-r--r--src/mscorlib/src/System/Int64.cs2
-rw-r--r--src/mscorlib/src/System/IntPtr.cs60
-rw-r--r--src/mscorlib/src/System/MissingFieldException.cs3
-rw-r--r--src/mscorlib/src/System/MissingMemberException.cs14
-rw-r--r--src/mscorlib/src/System/MulticastDelegate.cs45
-rw-r--r--src/mscorlib/src/System/Object.cs1
-rw-r--r--src/mscorlib/src/System/OleAutBinder.cs1
-rw-r--r--src/mscorlib/src/System/OperatingSystem.cs154
-rw-r--r--src/mscorlib/src/System/OutOfMemoryException.cs2
-rw-r--r--src/mscorlib/src/System/PlatformID.cs27
-rw-r--r--src/mscorlib/src/System/Reflection/Assembly.CoreCLR.cs80
-rw-r--r--src/mscorlib/src/System/Reflection/AssemblyName.cs67
-rw-r--r--src/mscorlib/src/System/Reflection/CustomAttribute.cs31
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/AssemblyBuilderAccess.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/EnumBuilder.cs2
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/EventToken.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/FieldToken.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/FlowControl.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs2
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ILGenerator.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/Label.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/MethodToken.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ModuleBuilderData.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/OpcodeType.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/OperandType.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/PEFileKinds.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ParameterToken.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/PropertyToken.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/StackBehaviour.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/StringToken.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/SymbolType.cs4
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/TypeBuilder.cs3
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/TypeBuilderInstantiation.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/TypeToken.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/MdFieldInfo.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/MdImport.cs7
-rw-r--r--src/mscorlib/src/System/Reflection/MemberSerializationStringGenerator.cs39
-rw-r--r--src/mscorlib/src/System/Reflection/RtFieldInfo.cs1
-rw-r--r--src/mscorlib/src/System/Reflection/RuntimeAssembly.cs31
-rw-r--r--src/mscorlib/src/System/Reflection/RuntimeConstructorInfo.cs6
-rw-r--r--src/mscorlib/src/System/Reflection/RuntimeEventInfo.cs7
-rw-r--r--src/mscorlib/src/System/Reflection/RuntimeFieldInfo.cs7
-rw-r--r--src/mscorlib/src/System/Reflection/RuntimeMethodInfo.cs10
-rw-r--r--src/mscorlib/src/System/Reflection/RuntimeModule.cs8
-rw-r--r--src/mscorlib/src/System/Reflection/RuntimeParameterInfo.cs31
-rw-r--r--src/mscorlib/src/System/Reflection/RuntimePropertyInfo.cs7
-rw-r--r--src/mscorlib/src/System/Resources/ResourceManager.cs1
-rw-r--r--src/mscorlib/src/System/Resources/ResourceSet.cs84
-rw-r--r--src/mscorlib/src/System/RtType.cs22
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/ConditionalWeakTable.cs38
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/CustomConstantAttribute.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/DateTimeConstantAttribute.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/DecimalConstantAttribute.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/MethodImplAttribute.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/RuntimeWrappedException.cs14
-rw-r--r--src/mscorlib/src/System/Runtime/GcSettings.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ArrayWithOffset.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/Attributes.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/BStrWrapper.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/COMException.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComEventsHelper.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComMemberType.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/ITypeComp.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/ITypeInfo.cs11
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/ITypeLib.cs3
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/CurrencyWrapper.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/DispatchWrapper.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ErrorWrapper.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/GcHandle.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ICustomQueryInterface.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/InvalidComObjectException.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/InvalidOleVariantTypeException.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/Marshal.cs128
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/MarshalDirectiveException.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/NonPortable.cs5
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/PInvokeMap.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/PInvokeMarshal.cs24
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/SEHException.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/SafeArrayRankMismatchException.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/SafeArrayTypeMismatchException.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UnknownWrapper.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/VariantWrapper.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/ConstantSplittableMap.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/DictionaryKeyCollection.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/DictionaryValueCollection.cs2
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IMapViewToIReadOnlyDictionaryAdapter.cs4
-rw-r--r--src/mscorlib/src/System/Runtime/Loader/AssemblyLoadContext.cs8
-rw-r--r--src/mscorlib/src/System/Runtime/Remoting/ObjectHandle.cs40
-rw-r--r--src/mscorlib/src/System/Runtime/RuntimeImports.cs9
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/FormatterServices.cs1
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/SerializationInfo.cs1
-rw-r--r--src/mscorlib/src/System/RuntimeHandles.cs98
-rw-r--r--src/mscorlib/src/System/SByte.cs2
-rw-r--r--src/mscorlib/src/System/SharedStatics.cs1
-rw-r--r--src/mscorlib/src/System/Single.cs2
-rw-r--r--src/mscorlib/src/System/StubHelpers.cs31
-rw-r--r--src/mscorlib/src/System/Text/DecoderBestFitFallback.cs1
-rw-r--r--src/mscorlib/src/System/Text/DecoderExceptionFallback.cs3
-rw-r--r--src/mscorlib/src/System/Text/DecoderFallback.cs1
-rw-r--r--src/mscorlib/src/System/Text/DecoderNLS.cs16
-rw-r--r--src/mscorlib/src/System/Text/DecoderReplacementFallback.cs1
-rw-r--r--src/mscorlib/src/System/Text/EncoderBestFitFallback.cs1
-rw-r--r--src/mscorlib/src/System/Text/EncoderExceptionFallback.cs6
-rw-r--r--src/mscorlib/src/System/Text/EncoderFallback.cs1
-rw-r--r--src/mscorlib/src/System/Text/EncoderNLS.cs17
-rw-r--r--src/mscorlib/src/System/Text/EncoderReplacementFallback.cs1
-rw-r--r--src/mscorlib/src/System/Text/Encoding.cs100
-rw-r--r--src/mscorlib/src/System/Text/Latin1Encoding.cs25
-rw-r--r--src/mscorlib/src/System/Text/UTF7Encoding.cs52
-rw-r--r--src/mscorlib/src/System/Threading/ClrThreadPoolBoundHandle.Unix.cs21
-rw-r--r--src/mscorlib/src/System/Threading/ClrThreadPoolBoundHandle.Windows.cs42
-rw-r--r--src/mscorlib/src/System/Threading/ClrThreadPoolBoundHandle.cs23
-rw-r--r--src/mscorlib/src/System/Threading/Monitor.cs1
-rw-r--r--src/mscorlib/src/System/Threading/PinnableBufferCache.cs (renamed from src/mscorlib/Common/PinnableBufferCache.cs)0
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/Task.cs3
-rw-r--r--src/mscorlib/src/System/Threading/Thread.cs1
-rw-r--r--src/mscorlib/src/System/Threading/ThreadInterruptedException.cs2
-rw-r--r--src/mscorlib/src/System/Threading/Timer.cs14
-rw-r--r--src/mscorlib/src/System/Threading/WaitHandle.cs1
-rw-r--r--src/mscorlib/src/System/TypeLoadException.cs21
-rw-r--r--src/mscorlib/src/System/UInt16.cs2
-rw-r--r--src/mscorlib/src/System/UInt32.cs2
-rw-r--r--src/mscorlib/src/System/UInt64.cs2
-rw-r--r--src/mscorlib/src/System/UIntPtr.cs46
-rw-r--r--src/mscorlib/src/System/Variant.cs1
-rw-r--r--src/mscorlib/src/System/__HResults.cs1
-rw-r--r--src/pal/inc/pal.h8
-rw-r--r--src/pal/prebuilt/idl/corprof_i.cpp9
-rw-r--r--src/pal/prebuilt/inc/corprof.h804
-rw-r--r--src/pal/src/CMakeLists.txt4
-rw-r--r--src/pal/src/config.h.in3
-rw-r--r--src/pal/src/configure.cmake20
-rw-r--r--src/pal/src/file/file.cpp6
-rw-r--r--src/pal/src/include/pal/context.h10
-rw-r--r--src/pal/src/include/pal/virtual.h20
-rw-r--r--src/pal/src/map/map.cpp21
-rw-r--r--src/pal/src/map/virtual.cpp229
-rw-r--r--src/pal/src/synchmgr/synchmanager.cpp12
-rw-r--r--src/pal/src/thread/process.cpp4
-rw-r--r--src/pal/src/thread/threadsusp.cpp12
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test1/MapViewOfFile.cpp26
-rw-r--r--src/pal/tests/palsuite/paltestlist.txt1
-rwxr-xr-xsrc/pal/tools/gen-buildsys-clang.sh2
-rw-r--r--src/scripts/genEventPipe.py495
-rw-r--r--src/scripts/genXplatEventing.py89
-rw-r--r--src/scripts/genXplatLttng.py11
-rw-r--r--src/sign.builds53
-rw-r--r--src/syncAzure.proj1
-rw-r--r--src/tools/crossgen/crossgen.cpp27
-rw-r--r--src/utilcode/util.cpp25
-rw-r--r--src/vm/CMakeLists.txt13
-rw-r--r--src/vm/arm/asmhelpers.S18
-rw-r--r--src/vm/arm/asmhelpers.asm21
-rw-r--r--src/vm/arm/cgencpu.h55
-rw-r--r--src/vm/arm/stubs.cpp7
-rw-r--r--src/vm/arm64/asmhelpers.S33
-rw-r--r--src/vm/arm64/crthelpers.S420
-rw-r--r--src/vm/arm64/stubs.cpp13
-rw-r--r--src/vm/assemblyname.cpp19
-rw-r--r--src/vm/assemblynative.cpp140
-rw-r--r--src/vm/assemblynative.hpp8
-rw-r--r--src/vm/assemblyspec.cpp14
-rw-r--r--src/vm/ceeload.cpp10
-rw-r--r--src/vm/ceemain.cpp18
-rw-r--r--src/vm/class.h11
-rw-r--r--src/vm/clrex.cpp13
-rw-r--r--src/vm/codeman.cpp79
-rw-r--r--src/vm/codeman.h6
-rw-r--r--src/vm/comdependenthandle.cpp30
-rw-r--r--src/vm/comdependenthandle.h12
-rw-r--r--src/vm/compile.cpp24
-rw-r--r--src/vm/coreassemblyspec.cpp28
-rw-r--r--src/vm/corhost.cpp2
-rw-r--r--src/vm/coverage.cpp55
-rw-r--r--src/vm/coverage.h19
-rw-r--r--src/vm/dllimport.cpp14
-rw-r--r--src/vm/dwreport.cpp42
-rw-r--r--src/vm/ecalllist.h26
-rw-r--r--src/vm/eeconfig.cpp31
-rw-r--r--src/vm/eeconfig.h15
-rw-r--r--src/vm/eepolicy.cpp98
-rw-r--r--src/vm/eetoprofinterfaceimpl.cpp93
-rw-r--r--src/vm/eetoprofinterfaceimpl.h9
-rw-r--r--src/vm/eventpipe.cpp448
-rw-r--r--src/vm/eventpipe.h200
-rw-r--r--src/vm/eventpipebuffer.cpp281
-rw-r--r--src/vm/eventpipebuffer.h109
-rw-r--r--src/vm/eventpipebuffermanager.cpp808
-rw-r--r--src/vm/eventpipebuffermanager.h161
-rw-r--r--src/vm/eventpipeconfiguration.cpp594
-rw-r--r--src/vm/eventpipeconfiguration.h164
-rw-r--r--src/vm/eventpipeevent.cpp120
-rw-r--r--src/vm/eventpipeevent.h87
-rw-r--r--src/vm/eventpipeeventinstance.cpp238
-rw-r--r--src/vm/eventpipeeventinstance.h90
-rw-r--r--src/vm/eventpipefile.cpp164
-rw-r--r--src/vm/eventpipefile.h85
-rw-r--r--src/vm/eventpipejsonfile.cpp22
-rw-r--r--src/vm/eventpipejsonfile.h12
-rw-r--r--src/vm/eventpipeprovider.cpp244
-rw-r--r--src/vm/eventpipeprovider.h117
-rw-r--r--src/vm/eventtrace.cpp22
-rw-r--r--src/vm/exceptionhandling.cpp6
-rw-r--r--src/vm/fastserializableobject.h32
-rw-r--r--src/vm/fastserializer.cpp337
-rw-r--r--src/vm/fastserializer.h74
-rw-r--r--src/vm/field.cpp9
-rw-r--r--src/vm/field.h6
-rw-r--r--src/vm/i386/cgenx86.cpp24
-rw-r--r--src/vm/i386/excepcpu.h4
-rw-r--r--src/vm/i386/excepx86.cpp54
-rw-r--r--src/vm/i386/gmsx86.cpp2
-rw-r--r--src/vm/i386/unixstubs.cpp6
-rw-r--r--src/vm/jitinterface.cpp14
-rw-r--r--src/vm/method.cpp221
-rw-r--r--src/vm/method.hpp17
-rw-r--r--src/vm/methodtable.h2
-rw-r--r--src/vm/mscorlib.cpp3
-rw-r--r--src/vm/mscorlib.h6
-rw-r--r--src/vm/pefile.cpp14
-rw-r--r--src/vm/pefile.h6
-rw-r--r--src/vm/peimage.cpp6
-rw-r--r--src/vm/peimagelayout.cpp13
-rw-r--r--src/vm/precode.cpp10
-rw-r--r--src/vm/precode.h5
-rw-r--r--src/vm/prestub.cpp22
-rw-r--r--src/vm/runtimehandles.cpp4
-rw-r--r--src/vm/sampleprofiler.cpp79
-rw-r--r--src/vm/sampleprofiler.h35
-rw-r--r--src/vm/threads.cpp29
-rw-r--r--src/vm/threads.h59
-rw-r--r--src/vm/threadsuspend.cpp5
-rw-r--r--src/vm/tieredcompilation.cpp4
-rw-r--r--src/vm/typedesc.cpp20
-rw-r--r--src/vm/win32threadpool.cpp25
-rw-r--r--src/zap/zapheaders.cpp2
-rw-r--r--src/zap/zapimage.cpp6
-rw-r--r--src/zap/zapinfo.cpp39
-rw-r--r--sync.cmd2
-rw-r--r--tests/arm64/Tests.lst230
-rw-r--r--tests/build.proj44
-rw-r--r--tests/dir.props53
-rw-r--r--tests/helixperftasks.targets6
-rw-r--r--tests/helixprep.proj9
-rw-r--r--tests/issues.targets41
-rw-r--r--tests/override.targets13
-rw-r--r--tests/protononjit_testenv.cmd (renamed from tests/x86/legacyjit_x86_testenv.cmd)4
-rw-r--r--tests/publishdependency.targets18
-rw-r--r--tests/runtest.cmd12
-rw-r--r--tests/runtest.proj18
-rwxr-xr-xtests/runtest.sh24
-rwxr-xr-xtests/scripts/arm32_ci_script.sh8
-rwxr-xr-xtests/scripts/arm32_ci_test.sh16
-rw-r--r--tests/scripts/arm64_post_build.py51
-rwxr-xr-xtests/scripts/optdata/bootstrap.py15
-rw-r--r--tests/scripts/optdata/optdata.csproj29
-rw-r--r--tests/scripts/optdata/project.json12
-rw-r--r--tests/scripts/project.json2
-rw-r--r--tests/scripts/run-gc-reliability-framework.cmd10
-rwxr-xr-xtests/scripts/run-gc-reliability-framework.sh6
-rw-r--r--tests/scripts/run-throughput-perf.py6
-rw-r--r--tests/scripts/run-xunit-perf.cmd207
-rwxr-xr-xtests/scripts/run-xunit-perf.sh316
-rw-r--r--tests/scripts/scripts.csproj36
-rwxr-xr-xtests/setup-runtime-dependencies.cmd145
-rwxr-xr-xtests/setup-runtime-dependencies.sh159
-rw-r--r--tests/skipCrossGenFiles.arm.txt1
-rw-r--r--tests/skipCrossGenFiles.arm64.txt1
-rw-r--r--tests/skipCrossGenFiles.x64.txt1
-rw-r--r--tests/skipCrossGenFiles.x86.txt1
-rw-r--r--tests/src/CLRTest.CrossGen.targets22
-rw-r--r--tests/src/CLRTest.Execute.Bash.targets53
-rw-r--r--tests/src/CLRTest.Execute.Batch.targets62
-rw-r--r--tests/src/CLRTest.Jit.targets94
-rw-r--r--tests/src/Common/PerfHarness/PerfHarness.cs2
-rw-r--r--tests/src/Common/PerfHarness/PerfHarness.csproj12
-rw-r--r--tests/src/Common/PerfHarness/project.json19
-rw-r--r--tests/src/Common/build_against_pkg_dependencies/build_against_pkg_dependencies.csproj25
-rw-r--r--tests/src/Common/build_against_pkg_dependencies/project.json35
-rw-r--r--tests/src/Common/empty/project.json19
-rw-r--r--tests/src/Common/external/external.depproj46
-rw-r--r--tests/src/Common/external/project.json26
-rw-r--r--tests/src/Common/netcoreapp/project.json9
-rw-r--r--tests/src/Common/targeting_pack_ref/project.json25
-rw-r--r--tests/src/Common/targeting_pack_ref/targeting_pack_ref.csproj14
-rw-r--r--tests/src/Common/test_dependencies/project.json34
-rw-r--r--tests/src/Common/test_dependencies/test_dependencies.csproj31
-rw-r--r--tests/src/Common/test_runtime/project.json33
-rw-r--r--tests/src/Common/test_runtime/test_runtime.csproj29
-rw-r--r--tests/src/GC/API/GCHandleCollector/Usage.cs13
-rw-r--r--tests/src/GC/Features/HeapExpansion/pluggaps.csproj2
-rw-r--r--tests/src/GC/Scenarios/DoublinkList/dlcollect.cs37
-rw-r--r--tests/src/GC/Scenarios/DoublinkList/dlstack.cs49
-rw-r--r--tests/src/GC/Scenarios/DoublinkList/doublinkgen.cs39
-rw-r--r--tests/src/GC/Stress/Framework/ReliabilityFramework.csproj4
-rw-r--r--tests/src/Interop/MarshalAPI/ReadWrite/ReadWriteObject.cs116
-rw-r--r--tests/src/Interop/MarshalAPI/ReadWrite/ReadWriteObject.csproj40
-rw-r--r--tests/src/Interop/MarshalAPI/String/StringMarshalingTest.cs34
-rw-r--r--tests/src/Interop/StringMarshalling/LPSTR/LPSTRTest.cs21
-rw-r--r--tests/src/Interop/StringMarshalling/LPSTR/LPSTRTestNative.cpp12
-rw-r--r--tests/src/JIT/CheckProjects/CheckProjects.cs6
-rw-r--r--tests/src/JIT/CheckProjects/CheckProjects.csproj10
-rw-r--r--tests/src/JIT/Directed/TypedReference/TypedReference.csproj7
-rw-r--r--tests/src/JIT/Directed/UnrollLoop/loop6_cs_d.csproj7
-rw-r--r--tests/src/JIT/Directed/UnrollLoop/loop6_cs_do.csproj7
-rw-r--r--tests/src/JIT/Directed/UnrollLoop/loop6_cs_r.csproj7
-rw-r--r--tests/src/JIT/Directed/UnrollLoop/loop6_cs_ro.csproj7
-rw-r--r--tests/src/JIT/Generics/Coverage/chaos65204782cs.csproj2
-rw-r--r--tests/src/JIT/Generics/Coverage/chaos65204782cs_o.csproj3
-rw-r--r--tests/src/JIT/Methodical/Boxing/morph/sin3double.ilproj8
-rw-r--r--tests/src/JIT/Methodical/VT/etc/_dbggc_nested.csproj7
-rw-r--r--tests/src/JIT/Methodical/VT/etc/_dbgnested.csproj7
-rw-r--r--tests/src/JIT/Methodical/VT/etc/_relgc_nested.csproj7
-rw-r--r--tests/src/JIT/Methodical/VT/etc/_relnested.csproj7
-rw-r--r--tests/src/JIT/Methodical/VT/etc/_speed_dbggc_nested.csproj7
-rw-r--r--tests/src/JIT/Methodical/VT/etc/_speed_dbgnested.csproj7
-rw-r--r--tests/src/JIT/Methodical/VT/etc/_speed_relgc_nested.csproj7
-rw-r--r--tests/src/JIT/Methodical/VT/etc/_speed_relnested.csproj7
-rw-r--r--tests/src/JIT/Methodical/VT/etc/gc_nested.csproj7
-rw-r--r--tests/src/JIT/Methodical/VT/etc/nested.csproj7
-rw-r--r--tests/src/JIT/Methodical/acceptance/Boxing/boxing001.ilproj8
-rw-r--r--tests/src/JIT/Methodical/refany/_dbggcreport.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_dbgnative.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_dbgstress1.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_dbgstress3.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_dbgvirtcall.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_relgcreport.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_relnative.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_relstress1.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_relstress3.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_relvirtcall.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_speed_dbggcreport.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_speed_dbgnative.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_speed_dbgstress1.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_speed_dbgstress3.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_speed_dbgvirtcall.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_speed_relgcreport.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_speed_relnative.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_speed_relstress1.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_speed_relstress3.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/_speed_relvirtcall.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/array1.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/array2.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/format.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/gcreport.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/lcs.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/native.csproj7
-rw-r--r--tests/src/JIT/Methodical/refany/virtcall.csproj7
-rw-r--r--tests/src/JIT/Methodical/tailcall_v4/smallFrame.il3
-rw-r--r--tests/src/JIT/Methodical/xxobj/operand/_dbgrefanyval.csproj7
-rw-r--r--tests/src/JIT/Methodical/xxobj/operand/_relrefanyval.csproj7
-rw-r--r--tests/src/JIT/Methodical/xxobj/operand/_speed_dbgrefanyval.csproj7
-rw-r--r--tests/src/JIT/Methodical/xxobj/operand/_speed_relrefanyval.csproj7
-rw-r--r--tests/src/JIT/Methodical/xxobj/operand/refanyval.csproj7
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Adams/Adams.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Adams/Adams.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/BenchMk2/BenchMk2.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/BenchMk2/BenchMk2.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/BenchMrk/BenchMrk.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/BenchMrk/BenchMrk.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Bisect/Bisect.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Bisect/Bisect.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/DMath/DMath.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/DMath/DMath.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/FFT/FFT.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/FFT/FFT.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/InProd/InProd.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/InProd/InProd.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/InvMt/InvMt.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/InvMt/InvMt.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/LLoops/LLoops.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/LLoops/LLoops.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Lorenz/Lorenz.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Lorenz/Lorenz.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/MatInv4/MatInv4.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/MatInv4/MatInv4.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/NewtE/NewtE.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/NewtE/NewtE.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/NewtR/NewtR.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/NewtR/NewtR.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Regula/Regula.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Regula/Regula.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Romber/Romber.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Romber/Romber.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Secant/Secant.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Secant/Secant.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Simpsn/Simpsn.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Simpsn/Simpsn.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/SqMtx/SqMtx.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/SqMtx/SqMtx.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Trap/Trap.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Trap/Trap.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Whetsto/Whetsto.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchF/Whetsto/Whetsto.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/8Queens/8Queens.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/8Queens/8Queens.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/Ackermann/Ackermann.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/Ackermann/Ackermann.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/AddArray/AddArray.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/AddArray/AddArray.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/AddArray2/AddArray2.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/AddArray2/AddArray2.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/Array1/Array1.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/Array1/Array1.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/Array2/Array2.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/Array2/Array2.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/BenchE/BenchE.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/BenchE/BenchE.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/BubbleSort/BubbleSort.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/BubbleSort/BubbleSort.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/BubbleSort2/BubbleSort2.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/BubbleSort2/BubbleSort2.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/CSieve/CSieve.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/CSieve/CSieve.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/Fib/Fib.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/Fib/Fib.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/HeapSort/HeapSort.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/HeapSort/HeapSort.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/IniArray/IniArray.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/IniArray/IniArray.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/LogicArray/LogicArray.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/LogicArray/LogicArray.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/Midpoint/Midpoint.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/Midpoint/Midpoint.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/MulMatrix/MulMatrix.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/MulMatrix/MulMatrix.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/NDhrystone/NDhrystone.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/NDhrystone/NDhrystone.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/Permutate/Permutate.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/Permutate/Permutate.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/Pi/Pi.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/Pi/Pi.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/Puzzle/Puzzle.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/Puzzle/Puzzle.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/QuickSort/QuickSort.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/QuickSort/QuickSort.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/TreeInsert/TreeInsert.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/TreeInsert/TreeInsert.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/TreeSort/TreeSort.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/TreeSort/TreeSort.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/XposMatrix/XposMatrix.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchI/XposMatrix/XposMatrix.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csharp.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csharp3.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csproj9
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees3.csproj9
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta.csharp-2.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fastaredux/fastaredux.csharp.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fastaredux/fastaredux.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide.cs13
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide.csproj9
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/nbody/nbody.csharp-3.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/nbody/nbody.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/pidigits/pi-digits.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/pidigits/pi-digits.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna.csharp-6.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna.csproj9
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp.csharp-1.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/revcomp/revcomp.csproj9
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Burgers/Burgers.cs5
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Burgers/Burgers.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Bytemark/ByteMark.cs31
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Bytemark/Bytemark.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/FractalPerf/FractalPerf.cs11
-rw-r--r--tests/src/JIT/Performance/CodeQuality/FractalPerf/FractalPerf.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Inlining/InlineGCStruct.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Inlining/InlineGCStruct.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Inlining/NoThrowInline.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Inlining/NoThrowInline.csproj9
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Linq/Linq.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Linq/Linq.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/AbsDouble.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/AcosDouble.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/AsinDouble.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/Atan2Double.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/AtanDouble.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/CeilingDouble.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/CosDouble.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/CoshDouble.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/ExpDouble.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/FloorDouble.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/Log10Double.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/LogDouble.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/PowDouble.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/RoundDouble.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/SinDouble.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/SinhDouble.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/SqrtDouble.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/TanDouble.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Double/TanhDouble.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Functions.cs21
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Functions.csproj33
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/AbsSingle.cs2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/AcosSingle.cs47
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/AsinSingle.cs47
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/Atan2Single.cs48
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/AtanSingle.cs47
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/CeilingSingle.cs47
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/CosSingle.cs47
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/CoshSingle.cs47
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/ExpSingle.cs47
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/FloorSingle.cs47
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/Log10Single.cs47
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/LogSingle.cs48
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/PowSingle.cs48
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/RoundSingle.cs47
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/SinSingle.cs47
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/SinhSingle.cs47
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/SqrtSingle.cs47
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/TanSingle.cs47
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Math/Functions/Single/TanhSingle.cs47
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Roslyn/CscBench.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Roslyn/CscBench.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/SIMD/ConsoleMandel/ConsoleMandel.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/SIMD/ConsoleMandel/ConsoleMandel.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/SIMD/RayTracer/RayTracer.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/SIMD/RayTracer/RayTracerBench.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/SIMD/SeekUnroll/SeekUnroll.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/SIMD/SeekUnroll/SeekUnroll.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/SciMark/SciMark.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/SciMark/kernel.cs7
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Serialization/Deserialize.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Serialization/Deserialize.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Serialization/Serialize.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Serialization/Serialize.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Span/Indexer.cs5
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Span/Indexer.csproj9
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Span/SpanBench.cs7
-rw-r--r--tests/src/JIT/Performance/CodeQuality/Span/SpanBench.csproj9
-rw-r--r--tests/src/JIT/Performance/CodeQuality/V8/Crypto/Crypto.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/V8/Crypto/Crypto.csproj8
-rw-r--r--tests/src/JIT/Performance/CodeQuality/V8/Richards/Richards.cs1
-rw-r--r--tests/src/JIT/Performance/CodeQuality/V8/Richards/Richards.csproj8
-rw-r--r--tests/src/JIT/Performance/RunBenchmarks/RunBenchmarks.csproj7
-rw-r--r--tests/src/JIT/Regression/CLR-x86-JIT/V1-M12-Beta2/b51817/b51817.csproj7
-rw-r--r--tests/src/JIT/Regression/CLR-x86-JIT/V1-M12-Beta2/b52593/b52593.csproj7
-rw-r--r--tests/src/JIT/Regression/CLR-x86-JIT/V1-M12-Beta2/b52733/b52733.csproj7
-rw-r--r--tests/src/JIT/Regression/CLR-x86-JIT/V1-M12-Beta2/b52840/b52840.csproj7
-rw-r--r--tests/src/JIT/Regression/CLR-x86-JIT/V1-M12-Beta2/b53226/b53226a.csproj7
-rw-r--r--tests/src/JIT/Regression/CLR-x86-JIT/V1-M12-Beta2/b53226/b53226b.csproj7
-rw-r--r--tests/src/JIT/Regression/CLR-x86-JIT/V1-M12-Beta2/b66533/b66533.csproj7
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_10780/GitHub_10780.cs52
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_10780/GitHub_10780.csproj56
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_11343/GitHub_11343.cs33
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_11343/GitHub_11343.csproj42
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_11408/GitHub_11408.cs45
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_11408/GitHub_11408.csproj53
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_11508/GitHub_11508.cs56
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_11508/GitHub_11508.csproj37
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_11574/GitHub_11574.cs44
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_11574/GitHub_11574.csproj37
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_11689/GitHub_11689.cs39
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_11689/GitHub_11689.csproj56
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_11733/GitHub_11733.cs26
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_11733/GitHub_11733.csproj42
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_11804/GitHub_11804.il85
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_11804/GitHub_11804.ilproj37
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_7906/GitHub_7906.csproj8
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_8220/GitHub_8220.csproj8
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_8231/GitHub_8231.csproj7
-rw-r--r--tests/src/JIT/Regression/VS-ia64-JIT/V1.2-Beta1/b302509/b302509.csproj7
-rw-r--r--tests/src/JIT/RyuJIT/DoWhileBndChk.csproj7
-rw-r--r--tests/src/JIT/config/benchmark+roslyn/benchmark+roslyn.csproj99
-rw-r--r--tests/src/JIT/config/benchmark+roslyn/project.json38
-rw-r--r--tests/src/JIT/config/benchmark+serialize/benchmark+serialize.csproj99
-rw-r--r--tests/src/JIT/config/benchmark+serialize/project.json38
-rw-r--r--tests/src/JIT/config/benchmark/benchmark.csproj114
-rw-r--r--tests/src/JIT/config/benchmark/project.json43
-rw-r--r--tests/src/JIT/opt/Devirtualization/GitHub_9945_2.ilproj8
-rw-r--r--tests/src/JIT/opt/Devirtualization/override.ilproj8
-rw-r--r--tests/src/JIT/opt/Tailcall/TailcallVerifyTransparentLibraryWithPrefix.il6
-rw-r--r--tests/src/JIT/opt/Tailcall/TailcallVerifyWithPrefix.il83
-rw-r--r--tests/src/JIT/opt/virtualstubdispatch/bigvtbl/bigvtbl_cs_d.csproj2
-rw-r--r--tests/src/JIT/opt/virtualstubdispatch/bigvtbl/bigvtbl_cs_r.csproj2
-rw-r--r--tests/src/JIT/superpmi/superpmicollect.csproj1
-rw-r--r--tests/src/Loader/classloader/PrivateInterfaceImpl/Test6_ImplementingClass.ilproj1
-rw-r--r--tests/src/Loader/classloader/regressions/440935/Test.ilproj1
-rw-r--r--tests/src/Regressions/coreclr/9414/readonlyPrefix.cs36
-rw-r--r--tests/src/Regressions/coreclr/9414/readonlyPrefix.csproj31
-rw-r--r--tests/src/TestWrappersConfig/TestWrappersConfig.csproj38
-rw-r--r--tests/src/TestWrappersConfig/project.json32
-rw-r--r--tests/src/baseservices/compilerservices/RuntimeWrappedException/RuntimeWrappedException.cs21
-rw-r--r--tests/src/dir.props12
-rw-r--r--tests/src/dir.targets14
-rw-r--r--tests/src/dirs.proj4
-rw-r--r--tests/src/performance/linkbench/assets/MusicStore/Get-Crossgen.ps177
-rw-r--r--tests/src/performance/linkbench/assets/Roslyn/illinkcsproj7
-rw-r--r--tests/src/performance/linkbench/linkbench.cs387
-rw-r--r--tests/src/performance/linkbench/linkbench.csproj4
-rw-r--r--tests/src/performance/linkbench/scripts/build.cmd138
-rw-r--r--tests/src/performance/linkbench/scripts/clone.cmd60
-rw-r--r--tests/src/performance/perflab/PerfLab.csproj4
-rw-r--r--tests/src/performance/performance.csproj111
-rw-r--r--tests/src/performance/project.json42
-rw-r--r--tests/testsFailingOutsideWindows.txt2
-rw-r--r--tests/x86/compatjit_x86_testenv.cmd8
-rw-r--r--tests/x86/ryujit_x86_testenv.cmd5
-rw-r--r--tests/x86_jit32_issues.targets516
-rw-r--r--tests/xunitwrapper.targets4
1045 files changed, 18763 insertions, 12699 deletions
diff --git a/BuildToolsVersion.txt b/BuildToolsVersion.txt
index 591e3c8..a72a222 100644
--- a/BuildToolsVersion.txt
+++ b/BuildToolsVersion.txt
@@ -1 +1 @@
-1.0.27-prerelease-01413-01 \ No newline at end of file
+2.0.0-prerelease-01702-02
diff --git a/Documentation/botr/xplat-minidump-generation.md b/Documentation/botr/xplat-minidump-generation.md
index 78660b6..03cd517 100644
--- a/Documentation/botr/xplat-minidump-generation.md
+++ b/Documentation/botr/xplat-minidump-generation.md
@@ -62,6 +62,7 @@ Environment variables supported:
-n, --normal - create minidump (default).
-h, --withheap - create minidump with heap.
-t, --triage - create triage minidump.
+ -u, --full - create full core dump.
-d, --diag - enable diagnostic messages.
# Testing #
@@ -73,7 +74,6 @@ The test plan is to modify the SOS tests in the (still) private debuggertests re
- Do we need a full memory dump option? It would not use the _DAC_ to get the memory regions but all the readable memory from the shared module list. Do we include the shared modules' code?
- May need more than just the pid for decorating dump names for docker containers because I think the _pid_ is always 1.
- Do we need all the memory mappings from `/proc/$pid/maps` in the PT\_LOAD sections even though the memory is not actually in the dump? They have a file offset/size of 0. Full dumps generated by the system or _gdb_ do have these un-backed regions.
-- Don't know how to get the proper size/range of the non-main thread stacks. Currently uses 4 pages around the stack pointer. The main thread has a memory region in `/proc/$pid/maps`.
- There is no way to get the signal number, etc. that causes the abort from the _createdump_ utility using _ptrace_ or a /proc file. It would have to be passed from CoreCLR on the command line.
- Do we need the "dynamic" sections of each shared module in the core dump? It is part of the "link_map" entry enumerated when gathering the _DSO_ information.
- There may be more versioning and/or build id information needed to be added to the dump.
diff --git a/Documentation/building/debugging-instructions.md b/Documentation/building/debugging-instructions.md
index 72f198b..1a3b023 100644
--- a/Documentation/building/debugging-instructions.md
+++ b/Documentation/building/debugging-instructions.md
@@ -136,10 +136,3 @@ Loading Linux core dumps with lldb 3.7 doesn't work. lldb 3.7 loads OS X and Fre
just fine. lldb 3.8 loads all the platform's core dumps without problem.
For more information on SOS commands see: https://msdn.microsoft.com/en-us/library/bb190764(v=vs.110).aspx
-
-Debugging Mscorlib and/or managed application
-=============================================
-
-To step into and debug managed code of Mscorlib.dll (or the managed application being executed by the runtime you built), using Visual Studio, is something that will be supported with Visual Studio 2015. We are actively working to enable this support.
-
-Until then, you can use [WinDbg](https://msdn.microsoft.com/en-us/library/windows/hardware/ff551063(v=vs.85).aspx) and [SOS](https://msdn.microsoft.com/en-us/library/bb190764(v=vs.110).aspx) (an extension to WinDbg to support managed debugging) to step in and debug the generated managed code. This is what we do on the .NET Runtime team as well :)
diff --git a/Documentation/building/linux-instructions.md b/Documentation/building/linux-instructions.md
index bacbe6d..fecf2c9 100644
--- a/Documentation/building/linux-instructions.md
+++ b/Documentation/building/linux-instructions.md
@@ -30,6 +30,7 @@ Install the following packages for the toolchain:
- libcurl4-openssl-dev
- libssl-dev
- uuid-dev
+- libnuma-dev (optional, enables numa support)
In order to get lldb-3.6 on Ubuntu 14.04, we need to add an additional package source:
@@ -50,14 +51,14 @@ For other version of Debian/Ubuntu, please visit http://apt.llvm.org/.
Then install the packages you need:
```
-ellismg@linux:~$ sudo apt-get install cmake llvm-3.5 clang-3.5 lldb-3.6 lldb-3.6-dev libunwind8 libunwind8-dev gettext libicu-dev liblttng-ust-dev libcurl4-openssl-dev libssl-dev uuid-dev
+ellismg@linux:~$ sudo apt-get install cmake llvm-3.5 clang-3.5 lldb-3.6 lldb-3.6-dev libunwind8 libunwind8-dev gettext libicu-dev liblttng-ust-dev libcurl4-openssl-dev libssl-dev uuid-dev libnuma-dev
```
You now have all the required components.
If you are using Fedora, then you will need to install the following packages:
-`$ sudo dnf install llvm cmake clang lldb-devel libunwind-devel lttng-ust-devel libuuid-devel libicu-devel`
+`$ sudo dnf install llvm cmake clang lldb-devel libunwind-devel lttng-ust-devel libuuid-devel libicu-devel numactl-devel`
Git Setup
---------
diff --git a/Documentation/building/unix-test-instructions.md b/Documentation/building/unix-test-instructions.md
index 563c3e8..96546a0 100644
--- a/Documentation/building/unix-test-instructions.md
+++ b/Documentation/building/unix-test-instructions.md
@@ -6,7 +6,7 @@ CoreCLR tests
**Building**
-Build CoreCLR and CoreFX. Refer to building instructions in the respective repository.
+Build CoreCLR on [Windows](https://github.com/dotnet/coreclr/blob/master/Documentation/building/windows-instructions.md) & [Unix](https://github.com/dotnet/coreclr/blob/master/Documentation/building/linux-instructions.md), and CoreFX on [Unix](https://github.com/dotnet/corefx/blob/master/Documentation/building/unix-instructions.md).
To build only the tests, on the Windows machine:
@@ -18,7 +18,6 @@ The following instructions assume that on the Unix machine:
- The CoreCLR repo is cloned at `~/coreclr`
- The CoreFX repo is cloned at `~/corefx`
- The Windows clone of the CoreCLR repo is mounted at `/media/coreclr`
-- The Windows clone of the CoreFX repo is mounted at `/media/corefx`
Tests currently need to be built on Windows and copied over to the Unix machine for testing. Copy the test build over to the Unix machine:
@@ -35,7 +34,7 @@ Run tests (`Debug` may be replaced with `Release` or `Checked`, depending on whi
> --testRootDir=~/test/Windows_NT.x64.Debug
> --testNativeBinDir=~/coreclr/bin/obj/Linux.x64.Debug/tests
> --coreClrBinDir=~/coreclr/bin/Product/Linux.x64.Debug
-> --mscorlibDir=/media/coreclr/bin/Product/Linux.x64.Debug
+> --mscorlibDir=~/coreclr/bin/Product/Linux.x64.Debug
> --coreFxBinDir=~/corefx/bin/runtime/netcoreapp-Linux-Debug-x64
> ```
diff --git a/Documentation/design-docs/eh-writethru.md b/Documentation/design-docs/eh-writethru.md
index 0afa5a7..311ca2c 100644
--- a/Documentation/design-docs/eh-writethru.md
+++ b/Documentation/design-docs/eh-writethru.md
@@ -1,36 +1,113 @@
# Exception Handling Write Through Optimization.
-Write through is an optimization done on local variables that live across exception handling flow like a handler, filter, or finally so that they can be enregistered - treated as a register candidate - throughout a method. For each variable live across one of these constructs, the minimum requirement is that a store to the variables location on the stack is placed between a reaching definition and any point of control flow leading to the handler, as well as a load between any return from a filter or finally and an upward exposed use. Conceptually this maintains the value of the variable on the stack across the exceptional flow which would kill any live registers. This transformation splits a local variable into multiple enregisterable compiler temporaries backed by the local variable on the stack. For local vars that additionally have appearances within a eh construct, a load from the stack local is inserted to a temp that will be enregistered within the handler.
+Write through is an optimization done on local variables that live across
+exception handling flow like a handler, filter, or finally so that they can be
+enregistered - treated as a register candidate - throughout a method. For each
+variable live across one of these constructs, the minimum requirement is that a
+store to the variables location on the stack is placed between a reaching
+definition and any point of control flow leading to the handler, as well as a
+load between any return from a filter or finally and an upward exposed use.
+Conceptually this maintains the value of the variable on the stack across the
+exceptional flow which would kill any live registers. This transformation splits
+a local variable into an enregisterable compiler temporary backed by
+the local variable on the stack. For local vars that additionally have
+appearances within an eh construct, a load from the stack local is inserted to
+a temp that will be enregistered within the handler.
## Motivation
-Historically the JIT has not done this transformation because exception handling was rare and thus the transformation was not worth the compile time. Additionally it was easy to make the recomendation to users to remove EH from performance critical methods since they had control of where the EH appeared. Neither of these points remain true as we increase our focus on cloud workloads. The use of non-blocking async calls are common in performance critical paths for these workloads and async injects exception handling constructs to implement the feature. This in combination with the long standing use of EH in 'foreach' and 'using' statements means that we are seeing EH constructs that are difficult for the user to manage or remove high in the profile (Techempower on Kestrel is a good example). Given these cloud workloads doing the transformation would be a clear benefit.
+Historically the JIT has not done this transformation because exception
+handling was rare and thus the transformation was not worth the compile time.
+Additionally it was easy to make the recomendation to users to remove EH from
+performance critical methods since they had control of where the EH appeared.
+Neither of these points remain true as we increase our focus on cloud
+workloads. The use of non-blocking async calls are common in performance
+critical paths for these workloads and async injects exception handling
+constructs to implement the feature. This in combination with the long
+standing use of EH in 'foreach' and 'using' statements means that we are seeing
+EH constructs that are difficult for the user to manage or remove high in the
+profile (Techempower on Kestrel is a good example). It's also good to consider
+that in MSIL, basic operations can raise semantically meaningful exceptions
+(unlike say C++, where an explicit throw is required to raise an exception) so
+injected handlers can end up pessimizing a number of local variables in the
+method. Given this combination of issues in cloud workloads doing the
+transformation should be a clear benefit.
## Design
-The goal of the design is to preserve the constraints listed above - i.e. preserve a correct value on the stack for any local var that crosses an EH edge in the flow graph. To ensure that the broad set of global optimizations can act on the IR shape produced by this transformation and that phase ordering issues do not block enregistration opportunities the write through phase will be staged just prior to SSA build after morph and it will do a full walk of the IR rewriting appearances to proxies as well as inserting reloads at the appropriate blocks in the flow graph as indicated by EH control flow semantics. To preserve the needed values on the stack a store will also be inserted after every definition to copy the new value in the proxy back to the stack location. This will leave non optimal number of stores (too many) but with the strategy that the more expensive analysis to eliminate/better place stores will be staged as a global optimization in a higher compilation tier.
+The goal of the design is to preserve the constraints listed above - i.e.
+preserve a correct value on the stack for any local var that crosses an EH edge
+in the flow graph. To ensure that the broad set of global optimizations can act
+on the IR shape produced by this transformation and that phase ordering issues
+do not block enregistration opportunities the write through phase will be
+staged just prior to SSA build after morph and it will do a full walk of the
+IR rewriting appearances to proxies as well as inserting reloads at the
+appropriate blocks in the flow graph as indicated by EH control flow semantics.
+To preserve the needed values on the stack a store will also be inserted after
+every definition to copy the new value in the proxy back to the stack location.
+This will leave non optimal number of stores (too many) but with the strategy
+that the more expensive analysis to eliminate/better place stores will be
+staged as a global optimization in a higher compilation tier.
+
+There are a number of wrinkles informing this design based on how the JIT models EH:
+- The jit does not explicitly model the exception flow, so a given block and
+ even a given statement within a block may have multiple exception-raising sites.
+- For statements within protected regions, and for all variables live into any
+ reachable handler, the jit assumes all definitions within the region can
+ potentially reach uses in the handlers, since the exact interleaving of
+ definition points and exception points is not known. Hence every definition
+ is a reaching definition, even both values back from to back stores with no
+ read of the variable in between.
+- The jit does not model which handlers are reachable from a given protected region,
+ so considers a variable live into a handler if it is live into any handler in the method.
+
+It is posible to do better than the "store every definition" approch outlined
+in the design, but the expectation is that this would require posibly
+modifying the model in the JIT and staging more throughput intensive analyses.
+With these considerations this design was selected and further improvements
+left to future optimization.
### Throughput
-To identify EH crossing local vars global liveness is necessary. This comes at the significant cost of the liveness analysis. To mitigate this the write through phase is staged immediately before SSA build for the global optimizer. Since the typical case is that there is no EH, the liveness analysis in write through can be reused directly by SSA build. For the case where EH local vars are present liveness today must be rebuilt for SSA since new local vars have been added, but incremental update to the RyuJIT liveness analysis can be implemented (worklist based live analysis) to improve the throughput. Additionally the write through transformation does a full IR walk - also expensive - to replace EH local var appearances with proxies and insert transfers to and from the stack for EH flow, given this initial implementations may need to be staged as part of AOT (crossgen) compiles until tiering can move the more expensive analysis out of the startup path.
+To identify EH crossing local vars global liveness is necessary. This comes at
+the significant cost of the liveness analysis. To mitigate this the write
+through phase is staged immediately before SSA build for the global optimizer.
+Since the typical case is that there is no EH, the liveness analysis in write
+through can be reused directly by SSA build. For the case where EH local vars
+are present liveness today must be rebuilt for SSA since new local vars have
+been added, but incremental update to the RyuJIT liveness analysis can be
+implemented (worklist based live analysis) to improve the throughput.
+Additionally the write through transformation does a full IR walk - also
+expensive - to replace EH local var appearances with proxies and insert
+transfers to and from the stack for EH flow, given this initial implementations
+may need to be staged as part of AOT (crossgen) compiles until tiering can move
+the more expensive analysis out of the startup path.
### Algorithm
+
On the IR directly before SSA build:
-- Run global liveness to identify local vars that cross EH boundaries (as a byproduct of this these local vars are marked "do not enregister")
+- Run global liveness to identify local vars that cross EH boundaries (as a
+ byproduct of this these local vars are marked "do not enregister")
- Foreach EH local var create a new local var "proxy" that can be enregisterd.
- Iterate each block in the flow graph doing the following:
* Foreach tree in block do a post order traversal and
- Replace all appearances of EH local vars with the defined proxy
- Insert a copy of proxy definition back to the EH local var (on the stack)
- * If EH handler entry block insert reloads from EH local var to proxy at block head
- * If finally or filter exit, insert reloads from EH local var to proxy at successor block heads
-- For method entry block, insert reloads from parameter EH local vars to proxies
+ * If EH handler entry block insert reloads from EH local var to proxy at
+ block head
+ * If finally or filter exit, insert reloads from EH local var to proxy at
+ successor block heads
+- For method entry block, insert reloads from parameter EH local vars to
+ proxies
-At end no proxy should be live across EH flow and all value updates will be written back to the stack location.
+At end no proxy should be live across EH flow and all value updates will be
+written back to the stack location.
## Next steps
-The initial prototype that produced the example bellow is currently being improved to make it production ready. At the same time a more extensive suite of example tests are being developed.
+The initial prototype that produced the example bellow is currently being
+improved to make it production ready. At the same time a more extensive suite
+of example tests are being developed.
- [X] Proof of concept prototype.
- [ ] Production implementation of WriteThru phase.
@@ -42,7 +119,8 @@ The initial prototype that produced the example bellow is currently being improv
## Example
-The following is a simple example that shows enregistration for a local var live, and modified, through a catch.
+The following is a simple example that shows enregistration for a local var
+live, and modified, through a catch.
#### Source code snippet
diff --git a/Documentation/design-docs/first-class-structs.md b/Documentation/design-docs/first-class-structs.md
index fd6a376..f7bd9b6 100644
--- a/Documentation/design-docs/first-class-structs.md
+++ b/Documentation/design-docs/first-class-structs.md
@@ -21,7 +21,7 @@ Struct-Related Issues in RyuJIT
The following issues illustrate some of the motivation for improving the handling of value types
(structs) in RyuJIT:
-* VSO Bug 98404: .NET JIT x86 - poor code generated for value type initialization
+* [\#11407 [RyuJIT] Fully enregister structs that fit into a single register when profitable](https://github.com/dotnet/coreclr/issues/11407), also VSO Bug 98404: .NET JIT x86 - poor code generated for value type initialization
* This is a simple test case that should generate simply `xor eax; ret` on x86 and x64, but
instead generates many unnecessary copies. It is addressed by full enregistration of
structs that fit into a register:
diff --git a/Documentation/dummy.txt b/Documentation/dummy.txt
new file mode 100644
index 0000000..ec583fd
--- /dev/null
+++ b/Documentation/dummy.txt
@@ -0,0 +1 @@
+Thursday, April 20, 2017 10:00:00 AM \ No newline at end of file
diff --git a/Documentation/project-docs/ci-trigger-phrases.md b/Documentation/project-docs/ci-trigger-phrases.md
index dd0e981..f57be03 100644
--- a/Documentation/project-docs/ci-trigger-phrases.md
+++ b/Documentation/project-docs/ci-trigger-phrases.md
@@ -11,7 +11,10 @@ To trigger a job, post a comment on your PR with "@dotnet-bot {trigger-phrase}".
- **Windows_NT x64 Release Priority 1 Build & Test:** "test Windows_NT pri1"
- **Windows_NT x64 Release IL RoundTrip Build & Test:** "test Windows_NT ilrt"
-- **Windows_NT x64 Release Long-Running GC Build & Test:**: "test Windows_NT x64 Release longgc"
+- **Windows_NT x64 Release Long-Running GC Build & Test:**: "test Windows_NT Release longgc"
+- **Windows_NT x64 Release GC Simulator:**: "test Windows_NT Release gcsimulator"
+- **Windows_NT x64 Release Standalone GC:**: "test Windows_NT Release standalone_gc"
+- **Windows_NT x64 Release GC Reliability Framework:**: "test Windows_NT Release gc_reliability_framework"
- **Windows_NT x64 Release Ready-To-Run Priority 0 Build & Test:** "test Windows_NT Release r2r"
- **Windows_NT x64 Checked Ready-To-Run Priority 0 Build & Test:** "test Windows_NT Checked r2r"
- **Windows_NT x64 Release Ready-To-Run Priority 1 Build & Test:** "test Windows_NT Release pri1r2r"
@@ -69,6 +72,8 @@ To trigger a job, post a comment on your PR with "@dotnet-bot {trigger-phrase}".
- **Windows_NT x64 Checked GCStress=0xc JitStress=2 Build & Test:** "test Windows_NT gcstress0xc_jitstress2"
- **Windows_NT x64 Checked GCStress=0xc MinOpts Heap Verify 1 Build & Test:** "test Windows_NT gcstress0xc_minopts_heapverify1"
- **Windows_NT x64 Checked Long-Running GC Build & Test:**: "test Windows_NT x64 Checked longgc"
+- **Windows_NT x64 Checked Standalone GC:**: "test Windows_NT Checked standalone_gc"
+- **Windows_NT x64 Checked GC Reliability Framework:**: "test Windows_NT Checked gc_reliability_framework"
- **Windows_NT x64 Formatting:**: "test Windows_NT formatting"
- **Windows_NT x64 Checked CoreFX Baseline Build & Test:** "test Windows_NT corefx_baseline"
- **Windows_NT x64 Checked CoreFX MinOpts Build & Test:** "test Windows_NT corefx_minopts"
@@ -166,6 +171,11 @@ To trigger a job, post a comment on your PR with "@dotnet-bot {trigger-phrase}".
- **Ubuntu x64 Release Priority 1 Build & Test:** "test Ubuntu pri1"
- **Ubuntu x64 Release IL RoundTrip Build & Test:** "test Ubuntu ilrt"
- **Ubuntu x64 Release Long-Running GC Build & Test:**: "test Ubuntu Release longgc"
+- **Ubuntu x64 Release GC Simulator:**: "test Ubuntu Release gcsimulator"
+- **Ubuntu x64 Release Standalone GC:**: "test Ubuntu Release standalone_gc"
+- **Ubuntu x64 Checked Standalone GC:**: "test Ubuntu Checked standalone_gc"
+- **Ubuntu x64 Release GC Reliability Framework:**: "test Ubuntu Release gc_reliability_framework"
+- **Ubuntu x64 Checked GC Reliability Framework:**: "test Ubuntu Checked gc_reliability_framework"
- **Ubuntu x64 Release Ready-To-Run Priority 0 Build & Test:** "test Ubuntu Release r2r"
- **Ubuntu x64 Checked Ready-To-Run Priority 0 Build & Test:** "test Ubuntu Checked r2r"
- **Ubuntu x64 Release Ready-To-Run Priority 1 Build & Test:** "test Ubuntu Release pri1r2r"
@@ -248,6 +258,11 @@ To trigger a job, post a comment on your PR with "@dotnet-bot {trigger-phrase}".
- **OSX x64 Release Priority 1 Build & Test:** "test OSX pri1"
- **OSX x64 Release IL RoundTrip Build & Test:** "test OSX ilrt"
- **OSX x64 Release Long-Running GC Build & Test:**: "test OSX Release longgc"
+- **OSX x64 Release GC Simulator:**: "test OSX10.12 Release gcsimulator"
+- **OSX x64 Release Standalone GC:**: "test OSX10.12 Release standalone_gc"
+- **OSX x64 Checked Standalone GC:**: "test OSX10.12 Checked standalone_gc"
+- **OSX x64 Release GC Reliability Framework:**: "test OSX10.12 Release gc_reliability_framework"
+- **OSX x64 Checked GC Reliability Framework:**: "test OSX10.12 Checked gc_reliability_framework"
- **OSX x64 Release Ready-To-Run Priority 0 Build & Test:** "test OSX Release r2r"
- **OSX x64 Checked Ready-To-Run Priority 0 Build & Test:** "test OSX Checked r2r"
- **OSX x64 Release Ready-To-Run Priority 1 Build & Test:** "test OSX Release pri1r2r"
diff --git a/Documentation/project-docs/clr-configuration-knobs.md b/Documentation/project-docs/clr-configuration-knobs.md
index 63f094b..3787666 100644
--- a/Documentation/project-docs/clr-configuration-knobs.md
+++ b/Documentation/project-docs/clr-configuration-knobs.md
@@ -303,9 +303,6 @@ Name | Description | Type | Class | Default Value | Flags
`StackSamplingNumMethods` | Number of evolving methods to track as hot and JIT them in the background at a given point of execution. | DWORD | UNSUPPORTED | 32 |
`AltJitNgen` | Enables AltJit for NGEN and selectively limits it to the specified methods. | STRING | INTERNAL | | REGUTIL_default
`JitNoCMOV` | | DWORD | INTERNAL | 0 | REGUTIL_default
-`UseRyuJIT` | Set to 1 by .NET 4.6 installer to indicate RyuJIT should be used, not JIT64. | DWORD | INTERNAL | 0 | IgnoreEnv / IgnoreHKCU / IgnoreConfigFiles
-`useLegacyJit` | Set to 1 to do all JITing with compatjit.dll. Only applicable to x64. | DWORD | EXTERNAL | 0 |
-`DisableNativeImageLoadList` | Refuse to load native images corresponding to one of the assemblies on this semicolon-delimited list of assembly names. | STRING | EXTERNAL | | REGUTIL_default
`JitValNumCSE` | Enables ValNum CSE for the specified methods | STRING | INTERNAL | | REGUTIL_default
`JitLexicalCSE` | Enables Lexical CSE for the specified methods | STRING | INTERNAL | | REGUTIL_default
`JitNoCSE` | | DWORD | INTERNAL | 0 | REGUTIL_default
diff --git a/Documentation/project-docs/contributing-workflow.md b/Documentation/project-docs/contributing-workflow.md
index ff21143..3634802 100644
--- a/Documentation/project-docs/contributing-workflow.md
+++ b/Documentation/project-docs/contributing-workflow.md
@@ -83,24 +83,24 @@ Suggested Workflow
We use and recommend the following workflow:
1. Create an issue for your work.
- - You can skip this step for trivial changes.
- - Reuse an existing issue on the topic, if there is one.
- - Use [CODE_OWNERS.TXT](https://github.com/dotnet/coreclr/blob/master/CODE_OWNERS.TXT) to find relevant maintainers and @ mention them to ask for feedback on your issue.
- - Get agreement from the team and the community that your proposed change is a good one.
- - If your change adds a new API, follow the [API Review Process](https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/api-review-process.md).
- - Clearly state that you are going to take on implementing it, if that's the case. You can request that the issue be assigned to you. Note: The issue filer and the implementer don't have to be the same person.
+ - You can skip this step for trivial changes.
+ - Reuse an existing issue on the topic, if there is one.
+ - Use [CODE_OWNERS.TXT](https://github.com/dotnet/coreclr/blob/master/CODE_OWNERS.TXT) to find relevant maintainers and @ mention them to ask for feedback on your issue.
+ - Get agreement from the team and the community that your proposed change is a good one.
+ - If your change adds a new API, follow the [API Review Process](https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/api-review-process.md).
+ - Clearly state that you are going to take on implementing it, if that's the case. You can request that the issue be assigned to you. Note: The issue filer and the implementer don't have to be the same person.
2. Create a personal fork of the repository on GitHub (if you don't already have one).
3. Create a branch off of master (`git checkout -b mybranch`).
- - Name the branch so that it clearly communicates your intentions, such as issue-123 or githubhandle-issue.
- - Branches are useful since they isolate your changes from incoming changes from upstream. They also enable you to create multiple PRs from the same fork.
+ - Name the branch so that it clearly communicates your intentions, such as issue-123 or githubhandle-issue.
+ - Branches are useful since they isolate your changes from incoming changes from upstream. They also enable you to create multiple PRs from the same fork.
4. Make and commit your changes.
- - Please follow our [Commit Messages](https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/contributing-workflow.md#commit-messages) guidance.
+ - Please follow our [Commit Messages](https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/contributing-workflow.md#commit-messages) guidance.
5. Add new tests corresponding to your change, if applicable.
6. Build the repository with your changes.
- - Make sure that the builds are clean.
- - Make sure that the tests are all passing, including your new tests.
+ - Make sure that the builds are clean.
+ - Make sure that the tests are all passing, including your new tests.
7. Create a pull request (PR) against the upstream repository's **master** branch.
- - Push your changes to your fork on GitHub (if you haven't already).
+ - Push your changes to your fork on GitHub (if you haven't already).
Note: It is OK for your PR to include a large number of commits. Once your change is accepted, you will be asked to squash your commits into one or some appropriately small number of commits before your PR is merged.
diff --git a/Documentation/project-docs/dotnet-standards.md b/Documentation/project-docs/dotnet-standards.md
index 452c703..d726836 100644
--- a/Documentation/project-docs/dotnet-standards.md
+++ b/Documentation/project-docs/dotnet-standards.md
@@ -49,7 +49,7 @@ ECMA 372 - C++/CLI
The C++/CLI language was standardized as [ECMA 372](http://www.ecma-international.org/publications/standards/Ecma-372.htm) in 2005.
-EMCA 372 is supported by the .NET Framework, but not .NET Core.
+ECMA 372 is supported by the .NET Framework, but not .NET Core.
**ECMA 372 Resources**
diff --git a/Documentation/project-docs/garbage-collector-guidelines.md b/Documentation/project-docs/garbage-collector-guidelines.md
index 66d4c69..1981c8a 100644
--- a/Documentation/project-docs/garbage-collector-guidelines.md
+++ b/Documentation/project-docs/garbage-collector-guidelines.md
@@ -26,12 +26,43 @@ Required Testing: Validation of the behavior of the affected APIs.
## Stress Testing ##
Stress testing must run for at least **48 hours** against a debug build.
-Instructions for running stress are located in the repo at tests\src\GC\Stress\stress_run_readme.txt.
+Stress testing for checked and release builds can be done on pull requests with The .NET CI infrastructure.
+A stress run can be requested using the trigger phrase:
+
+```
+@dotnet_bot test <platform> <flavor> gc_reliability_framework
+```
+
+This will run the stress framework for the default amount of time (15 hours) on the given platform and build flavor.
## Functional Testing ##
A functional test run executes the same code as a stress run, but only runs for 30 minutes.
Instructions for running stress are located in the repo at tests\src\GC\Stress\stress_run_readme.txt.
+It is recommended that you run at least some of the below PR-triggered CI jobs:
+
+```
+@dotnet_bot test Windows_NT Checked longgc
+@dotnet_bot test OSX10.12 Checked longgc
+@dotnet_bot test Ubuntu Checked longgc
+@dotnet_bot test Windows_NT Checked standalone_gc
+@dotnet_bot test OSX10.12 Checked standalone_gc
+@dotnet_bot test Ubuntu Checked standalone_gc
+```
+
+The "Long GC" tests are a series of GC tests whose running time is too long or memory usage is too high to run with
+the rest of the Priority 0 unit tests. The "Standalone GC" build mode builds and runs the GC in a semi-standalone manner
+(see https://github.com/dotnet/coreclr/projects/3).
+
+You may also wish to run the GC Simulator tests. They may take up to 24 hours to complete and are known to sometimes fail on Ubuntu
+due to poor interactions with the Linux OOM killer. However, they have proven to be quite useful in finding bugs in the past:
+
+```
+@dotnet_bot test Windows_NT Release gcsimulator
+@dotnet_bot test Ubuntu Release gcsimulator
+@dotnet_bot test OSX10.12 Release gcsimulator
+```
+
## Performance Testing ##
Coming soon.
diff --git a/Documentation/project-docs/performance-guidelines.md b/Documentation/project-docs/performance-guidelines.md
index f9c5e17..a2e15d5 100644
--- a/Documentation/project-docs/performance-guidelines.md
+++ b/Documentation/project-docs/performance-guidelines.md
@@ -50,5 +50,14 @@ Capturing a trace using PerfView will allow you to:
PerfView is available at the [Microsoft Download Center](http://www.microsoft.com/en-us/download/details.aspx?id=28567 "Microsoft Download Center"). The help documentation is quite substantial and can help you get started. Clicking the blue links throughout PerfView's UI will also take you to the appropriate help topic. It is also recommended that you watch the [PerfView Tutorial Videos](http://channel9.msdn.com/Series/PerfView-Tutorial).
+# Running the CoreCLR Performance Tests on Windows #
+1. The first step to running the performance tests locally is to do a release build of CoreCLR and all of the performance tests. You can do this with the command `build.cmd x64 Release`, this will of course build the x64 runtime, and you should use x86 if you want to test x86.
+
+2. After building the runtime you will need to generate a core root that contains all of the binaries we just built along with the required dependencies. This can be done with the command `tests\runtest.cmd Release x64 GenerateLayoutOnly`, with the same caveat that x86 should be used if that is the platform that you are testing.
+
+3. Now we need to actually run the performance tests. You can do that with the following command that should be run from the root of your repo `tests\scripts\run-xunit-perf.cmd -arch x64 -configuration Release -testBinLoc bin\tests\Windows_NT.x64.Release\Jit\Performance\CodeQuality`. This will run all of the tests in the JIT CodeQuality directory as the script will walk all sub-directories and look for tests to run. If you want to just run a single test, pass the path of the single test that you want to run.
+
+4. Navigate to the `sandbox` directory in the root of your repo. Inside that directory you will find a bunch of files that follow the name Perf-*.md. These will contain the results, formatted as Markdown files, for each test that was run.
+
# Additional Help #
If you have questions, run into any issues, or would like help with any performance related topics, please feel free to post a question. Someone from the .NET performance team will be happy to help.
diff --git a/DotnetCLIVersion.txt b/DotnetCLIVersion.txt
index e42fc5f..32aae90 100644
--- a/DotnetCLIVersion.txt
+++ b/DotnetCLIVersion.txt
@@ -1 +1 @@
-1.0.0-preview2-1-003182 \ No newline at end of file
+2.0.0-preview1-005724 \ No newline at end of file
diff --git a/Linked b/Linked
deleted file mode 100644
index 675a79b..0000000
--- a/Linked
+++ /dev/null
Binary files differ
diff --git a/THIRD-PARTY-NOTICES b/THIRD-PARTY-NOTICES.TXT
index 03d4d3c..03d4d3c 100644
--- a/THIRD-PARTY-NOTICES
+++ b/THIRD-PARTY-NOTICES.TXT
diff --git a/Tools-Override/codeOptimization.targets b/Tools-Override/codeOptimization.targets
deleted file mode 100644
index 4db340f..0000000
--- a/Tools-Override/codeOptimization.targets
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <UsingTask TaskName="ZipFileExtractToDirectory" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll"/>
-
- <PropertyGroup>
- <OptimizationDataVersion Condition="'$(OptimizationDataVersion)'==''">2.0.0-rc-61101-16</OptimizationDataVersion>
- <OptimizationDataPackageName Condition="'$(OptimizationDataPackageName)'==''">RoslynDependencies.OptimizationData</OptimizationDataPackageName>
- <OptimizationDataDir Condition="'$(OptimizationDataDir)'==''">$(ToolsDir)OptimizationData/</OptimizationDataDir>
- <RestoreDefaultOptimizationDataPackage Condition="'$(RestoreDefaultOptimizationDataPackage)'==''">true</RestoreDefaultOptimizationDataPackage>
- <UsePartialNGENOptimization Condition="'$(UsePartialNGENOptimization)'==''">true</UsePartialNGENOptimization>
- </PropertyGroup>
-
- <!-- If IBC data hasn't been merged with the IL yet, preprocess it first -->
- <Target Name="PreProcessIBCData"
- BeforeTargets="OptimizeWithTrainingData"
- DependsOnTargets="ResolveOptionalTools"
- Condition="'$(OS)'=='Windows_NT' and '$(EnableProfileGuidedOptimization)'=='true' and Exists('$(OptimizationDataDir)$(AssemblyName).dll')">
-
- <!-- Find IBCMerge as a resolved optional tool. -->
- <PropertyGroup>
- <IBCMergeToolPath Condition="'%(Filename)%(Extension)'=='ibcmerge.exe'">@(ResolvedOptionalToolReferences)</IBCMergeToolPath>
- </PropertyGroup>
-
- <!-- Enumerate the various files that need merging -->
- <PropertyGroup>
- <InputAssemblyFile>$(OptimizationDataDir)$(AssemblyName).dll</InputAssemblyFile>
- <TargetOptimizationDataFile>$(OptimizationDataDir)$(AssemblyName).pgo</TargetOptimizationDataFile>
- </PropertyGroup>
- <ItemGroup>
- <RawOptimizationDataFiles Include="$(OptimizationDataDir)$(AssemblyName)*.ibc" />
- </ItemGroup>
-
- <!-- Merge the optimization data into the source DLL -->
- <Exec Command="$(IBCMergeToolPath) -q -f -delete -mo $(InputAssemblyFile) @(RawOptimizationDataFiles, ' ')" />
-
- <!-- Verify that the optimization data has been merged -->
- <Exec Command="$(IBCMergeToolPath) -mi $(InputAssemblyFile)" />
-
- <!-- Save the module as *.pgo to match the convention expected in target OptimizeWithTrainingData -->
- <Copy SourceFiles="$(InputAssemblyFile)" DestinationFiles="$(TargetOptimizationDataFile)" />
- </Target>
-
- <!-- We should only run this target on Windows and only if EnableProfileGuidedOptimization is set and we have training data -->
- <Target Name="OptimizeWithTrainingData"
- AfterTargets="AfterBuild"
- BeforeTargets="CopyFilesToOutputDirectory"
- DependsOnTargets="ResolveOptionalTools"
- Condition="'$(OS)'=='Windows_NT' and '$(EnableProfileGuidedOptimization)'=='true' and Exists('$(OptimizationDataDir)$(AssemblyName).pgo')">
-
- <!-- Find IBCMerge as a resolved optional tool. -->
- <PropertyGroup>
- <IBCMergeToolPath Condition="'%(Filename)%(Extension)'=='ibcmerge.exe'">@(ResolvedOptionalToolReferences)</IBCMergeToolPath>
- </PropertyGroup>
-
- <PropertyGroup>
- <OptimizedAssemblyDir>$(IntermediateOutputPath)/OptimizedAssembly</OptimizedAssemblyDir>
- <OptimizedAssemblyFile>$(OptimizedAssemblyDir)/$(AssemblyName).dll</OptimizedAssemblyFile>
- </PropertyGroup>
-
- <!-- Customize IBCMerge's arguments depending on input props -->
- <PropertyGroup>
- <IBCMergeArguments>-q -f -mo $(OptimizedAssemblyFile) -incremental $(OptimizationDataDir)$(AssemblyName).pgo</IBCMergeArguments>
- <IBCMergeArguments Condition="$(UsePartialNGENOptimization)">$(IBCMergeArguments) -partialNGEN -minify</IBCMergeArguments>
- </PropertyGroup>
-
- <!-- Copy the compiled assembly into a folder for further processing -->
- <MakeDir Directories="$(OptimizedAssemblyDir)" />
- <Copy SourceFiles="@(IntermediateAssembly)" DestinationFolder="$(OptimizedAssemblyDir)" />
-
- <!-- Apply optimization data to the compiled assembly -->
- <Exec Command="$(IBCMergeToolPath) $(IBCMergeArguments)" />
-
- <!-- Verify that the optimization data has been applied -->
- <Exec Command="$(IBCMergeToolPath) -mi $(OptimizedAssemblyFile)" />
-
- <!-- We need to make sure that the assembly that gets packaged is the one with the optimization data -->
- <ItemGroup>
- <IntermediateAssembly Remove="@(IntermediateAssembly)"/>
- <IntermediateAssembly Include="$(OptimizedAssemblyDir)/$(AssemblyName).dll"/>
- </ItemGroup>
- </Target>
-
- <!-- We need the OptimizationData package in order to be able to optimize the assembly -->
- <Target Name="RestoreOptimizationDataPackage"
- BeforeTargets="Sync"
- Condition="'$(EnableProfileGuidedOptimization)'=='true' and '$(RestoreDefaultOptimizationDataPackage)'=='true' and !Exists('$(OptimizationDataDir)project.json')">
-
- <!-- Dynamically create a project.json file used to restore the optimization data-->
- <Message Text="Generating project.json for optimization data" Importance="low" />
- <ItemGroup>
- <_OptimizationDataJsonLine Include="{&quot;dependencies&quot;: {" />
- <_OptimizationDataJsonLine Include="&quot;$(OptimizationDataPackageName)&quot; : &quot;$(OptimizationDataVersion)&quot; " />
- <_OptimizationDataJsonLine Include="},&quot;frameworks&quot;: {&quot;netcoreapp1.0&quot;: {},&quot;net46&quot;: {}}}"/>
- </ItemGroup>
-
- <PropertyGroup>
- <OptimizationDataProjectJson>$(OptimizationDataDir)project.json</OptimizationDataProjectJson>
- <OptimizationDataNuGetFeed Condition="'$(OptimizationDataNuGetFeed)'==''">https:%2F%2Fdotnet.myget.org/F/roslyn/api/v3/index.json</OptimizationDataNuGetFeed>
- </PropertyGroup>
-
- <MakeDir Directories="$(OptimizationDataDir)" ContinueOnError="true" />
- <WriteLinesToFile File="$(OptimizationDataProjectJson)" Lines="@(_OptimizationDataJsonLine)" Overwrite="true" />
-
- <!-- Restore the OptimizationData package -->
- <Exec Command="$(DnuRestoreCommand) $(OptimizationDataProjectJson) --source $(OptimizationDataNuGetFeed)"
- StandardOutputImportance="Low"/>
-
- <!-- Copy the restored files into a more accessible location -->
- <ItemGroup>
- <_OptimizationDataFiles Include="$(PackagesDir)/$(OptimizationDataPackageName)/$(OptimizationDataVersion)/content/OptimizationData/*.pgo" />
- </ItemGroup>
-
- <Copy SourceFiles="@(_OptimizationDataFiles)"
- DestinationFiles="@(_OptimizationDataFiles->'$(OptimizationDataDir)%(Filename)%(Extension)')"
- SkipUnchangedFiles="true"
- ContinueOnError="true"/>
- </Target>
-</Project> \ No newline at end of file
diff --git a/Tools-Override/depProj.targets b/Tools-Override/depProj.targets
deleted file mode 100644
index ea32123..0000000
--- a/Tools-Override/depProj.targets
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-***********************************************************************************************
-depProj.targets
-
-WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
- created a backup copy. Incorrect changes to this file will make it
- impossible to load or build your projects from the command-line or the IDE.
-
-This file defines the steps in the standard build process specific for NuGet deployment
-projects. The remainder of the build process is defined in Microsoft.Common.targets,
-which is imported by this file.
-
-Licensed to the .NET Foundation under one or more agreements.
-The .NET Foundation licenses this file to you under the MIT license.
-See the LICENSE file in the project root for more information.
-***********************************************************************************************
--->
-<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-
- <!-- Deployment project
- Restores NuGet dependencies and copies them to the output directory.
-
- NuGetTargetMoniker - determined by the TargetFramework* and TargetPlatform*
- properties of the project, can be overidden.
- NuGetRuntimeIdentifier - defaults to <empty> (""), can be overidden.
- NuGetDeploySourceItem - defaults to ReferenceCopyLocalPaths, can be overidden to
- specify Reference (for compile assets) or Analyzer(for
- analyzer assets)
-
- For the appropriate behavior of P2P references the project should set the
- TargetName and TargetExt to match one of the files that will be copied
- from the packages.
- -->
-
- <PropertyGroup>
- <NuGetDeploySourceItem Condition="'$(NuGetDeploySourceItem)' == ''">ReferenceCopyLocalPaths</NuGetDeploySourceItem>
-
- <!-- suppress the attempt to copy build output. -->
- <CopyBuildOutputToOutputDirectory>false</CopyBuildOutputToOutputDirectory>
-
- <!-- Unless overridden, use no runtime identifier. This is transformed in packageresolve.targets.
- We specify "None" here to avoid being assigned the default runtime for projects which set CopyNuGetImplementations=true. -->
- <NuGetRuntimeIdentifier Condition="'$(NuGetRuntimeIdentifier)' == ''">None</NuGetRuntimeIdentifier>
-
- <!-- make sure we tell nuget targets to copy, even if output type would not by default -->
- <CopyNuGetImplementations>true</CopyNuGetImplementations>
-
- <!-- by default there shouldn't be any assets in depproj files that require signing -->
- <SkipSigning Condition="'$(SkipSigning)' == ''">true</SkipSigning>
- </PropertyGroup>
-
- <Target Name="CoreCompile">
-
- <Error Condition="'$(NuGetDeploySourceItem)' != 'ReferenceCopyLocalPaths' AND
- '$(NuGetDeploySourceItem)' != 'Reference' AND
- '$(NuGetDeploySourceItem)' != 'Analyzer'"
- Text="Unexpected value for NuGetDeploySourceItem:'$(NuGetDeploySourceItem)'. Expected ReferenceCopyLocalPaths, Reference, or Analyzer." />
-
- <ItemGroup>
- <!-- Don't set IntermediateAssembly since this is not produced -->
- <IntermediateAssembly Remove="@(IntermediateAssembly)" />
-
- <NuGetDeploy Include="@($(NuGetDeploySourceItem))"/>
-
- <!-- filter to only items that came from packages -->
- <!-- the following condition must be applied after the include because msbuild doesn't seem
- to support property-defined-item-names in a metadata statement -->
- <NuGetDeploy Remove="@(NuGetDeploy)" Condition="'%(NuGetDeploy.NuGetPackageId)' == ''" />
-
- <!-- remove all existing items from NuGet packages we'll be defining these in our own item -->
- <ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' != ''"/>
- <Reference Remove="@(Reference)" Condition="'%(Reference.NuGetPackageId)' != ''"/>
- <Analyzer Remove="@(Analyzer)" Condition="'%(Analyzer.NuGetPackageId)' != ''"/>
-
- <!-- add items defined by NuGetDeployItem property to Content so that we get clean behavior -->
- <ContentWithTargetPath Include="@(NuGetDeploy)">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- <TargetPath>%(FileName)%(Extension)</TargetPath>
- </ContentWithTargetPath>
- </ItemGroup>
-
- <Error Condition="'@(NuGetDeploy)' == ''" Text="Error no assets were resolved from NuGet packages." />
- <Message Importance="High" Text="%(FullPath) (%(NuGetPackageId).%(NuGetPackageVersion)) -&gt; @(NuGetDeploy->'$(TargetDir)%(FileName)%(Extension)')" />
-
- <!-- Include marker files if an extension has been provided -->
- <!-- internal builds use this to distinguish files which have already been signed -->
- <Touch Condition="'$(DeployMarkerExtension)' != ''" Files="@(NuGetDeploy->'$(TargetDir)%(FileName)$(DeployMarkerExtension)')" AlwaysCreate="true">
- <Output TaskParameter="TouchedFiles" ItemName="FileWrites"/>
- </Touch>
- </Target>
-
- <Import Project="$(MSBuildToolsPath)\Microsoft.Common.targets" />
-
- <!-- Required by Common.Targets but not used for depproj -->
- <Target Name="CreateManifestResourceNames" />
-
- <PropertyGroup>
- <!-- don't use TargetingPackReference, we do our own filtering -->
- <SkipFilterTargetingPackResolvedNugetPackages>true</SkipFilterTargetingPackResolvedNugetPackages>
- </PropertyGroup>
-
- <!-- Support filtering to a subset of packages or files -->
- <Target Name="FilterNugetPackages"
- AfterTargets="ResolveNuGetPackages"
- Condition="'@(PackageToInclude)' != '' OR '@(PackageToExclude)' != '' OR '@(FileToInclude)' != '' OR '@(FileToExclude)' != ''">
- <ItemGroup>
- <_nuGetDeploy Include="@($(NuGetDeploySourceItem))"/>
- <_nuGetDeployByFileName Include="@(_nuGetDeploy->'%(FileName)')">
- <OriginalItemSpec>%(Identity)</OriginalItemSpec>
- </_nuGetDeployByFileName>
-
- <_nuGetDeployByFileNameToRemove Include="@(_nuGetDeployByFileName)" Exclude="@(FileToInclude)" Condition="'@(FileToInclude)' != ''" />
- <_filteredNuGetDeployByFileName Include="@(_nuGetDeployByFileName)" Exclude="@(_nuGetDeployByFileNameToRemove);@(FileToExclude)" />
-
- <_nuGetDeployByPackageId Include="@(_filteredNuGetDeployByFileName->'%(NuGetPackageId)')" />
-
- <_nuGetDeployByPackageIdToRemove Include="@(_nuGetDeployByPackageId)" Exclude="@(PackageToInclude)" Condition="'@(PackageToInclude)' != ''" />
- <_filteredNuGetDeployByPackageId Include="@(_nuGetDeployByPackageId)" Exclude="@(_nuGetDeployByPackageIdToRemove);@(PackageToExclude)" />
-
- <ReferenceCopyLocalPaths Condition="'$(NuGetDeploySourceItem)' == 'ReferenceCopyLocalPaths'" Remove="@(ReferenceCopyLocalPaths)" />
- <Reference Condition="'$(NuGetDeploySourceItem)' == 'Reference'" Remove="@(Reference)" />
- <Analyzer Condition="'$(NuGetDeploySourceItem)' == 'Analyzer'" Remove="@(Analyzer)" />
- </ItemGroup>
-
- <CreateItem Include="@(_filteredNuGetDeployByPackageId->'%(OriginalItemSpec)')">
- <Output TaskParameter="Include" ItemName="$(NuGetDeploySourceItem)" />
- </CreateItem>
- </Target>
-
-</Project>
diff --git a/Tools-Override/resources.targets b/Tools-Override/resources.targets
deleted file mode 100644
index 82ce179..0000000
--- a/Tools-Override/resources.targets
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <UsingTask TaskName="GenerateResourcesCode" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll" />
-
- <PropertyGroup>
- <GenerateResourceMSBuildRuntime>CurrentRuntime</GenerateResourceMSBuildRuntime>
- <GenerateResourceMSBuildArchitecture>CurrentArchitecture</GenerateResourceMSBuildArchitecture>
- </PropertyGroup>
-
- <PropertyGroup>
- <ResourcesSourceOutputDirectory Condition="'$(ResourcesSourceOutputDirectory)' == ''">$(MSBuildProjectDirectory)/Resources/</ResourcesSourceOutputDirectory>
- <StringResourcesPath Condition="'$(StringResourcesPath)'=='' And Exists('$(ResourcesSourceOutputDirectory)Strings.resx')">$(ResourcesSourceOutputDirectory)/Strings.resx</StringResourcesPath>
- <IntermediateResOutputFileFullPath Condition="'$(MSBuildProjectExtension)' == '.csproj'">$(IntermediateOutputPath)SR.cs</IntermediateResOutputFileFullPath>
- <IntermediateResOutputFileFullPath Condition="'$(MSBuildProjectExtension)' == '.vbproj'">$(IntermediateOutputPath)SR.vb</IntermediateResOutputFileFullPath>
- <DefineConstants Condition="'$(ConfigurationGroup)' == 'Debug'">$(DefineConstants);DEBUGRESOURCES</DefineConstants>
- </PropertyGroup>
-
- <PropertyGroup Condition="'$(StringResourcesPath)'!=''">
- <CompileDependsOn>
- GenerateResourcesSource;
- $(CompileDependsOn);
- </CompileDependsOn>
- </PropertyGroup>
-
- <Target Name="GenerateResourcesSource"
- Condition="'$(StringResourcesPath)'!='' AND '$(OmitResources)'!='true'"
- Inputs="$(StringResourcesPath)"
- Outputs="$(IntermediateResOutputFileFullPath)">
-
-
-
- <GenerateResourcesCode
- ResxFilePath="$(StringResourcesPath)"
- OutputSourceFilePath="$(IntermediateResOutputFileFullPath)"
- AssemblyName="$(AssemblyName)" />
-
- <ItemGroup>
- <!-- The following Compile element has to be included dynamically inside the Target otherwise intellisense will not work -->
- <Compile Include="$(IntermediateResOutputFileFullPath)" />
- </ItemGroup>
-
- <ItemGroup>
- <FileWrites Include="$(IntermediateResOutputFileFullPath)" />
- </ItemGroup>
- </Target>
-
- <ItemGroup Condition="'$(StringResourcesPath)'!='' AND '$(OmitResources)'!='true'">
- <EmbeddedResource Include="$(StringResourcesPath)">
- <Visible>true</Visible>
- <LogicalName>FxResources.$(AssemblyName).SR.resources</LogicalName>
- </EmbeddedResource>
- </ItemGroup>
-
- <Choose>
- <When Condition="Exists('$(StringResourcesPath)') And '$(SkipCommonResourcesIncludes)'=='' AND '$(OmitResources)'!='true'">
- <Choose>
- <When Condition="'$(MSBuildProjectExtension)' == '.csproj'">
- <ItemGroup>
- <Compile Include="$(CommonPath)/System/SR.cs">
- <Visible>true</Visible>
- <Link>Resources/Common/SR.cs</Link>
- </Compile>
- </ItemGroup>
- </When>
- <When Condition="'$(MSBuildProjectExtension)' == '.vbproj'">
- <ItemGroup>
- <Compile Include="$(CommonPath)/System/SR.vb">
- <Visible>true</Visible>
- <Link>Resources/Common/SR.vb</Link>
- </Compile>
- </ItemGroup>
- </When>
- </Choose>
- </When>
- </Choose>
-</Project>
diff --git a/build-packages.sh b/build-packages.sh
index 382e24d..a418464 100755
--- a/build-packages.sh
+++ b/build-packages.sh
@@ -3,16 +3,15 @@
usage()
{
echo "Builds the NuGet packages from the binaries that were built in the Build product binaries step."
- echo "Usage: build-packages -BuildArch -BuildType [-portable]"
+ echo "Usage: build-packages -BuildArch -BuildType"
echo "BuildArch can be x64, x86, arm, arm64 (default is x64)"
echo "BuildType can be release, checked, debug (default is debug)"
- echo "-portable - build for Portable Distribution"
echo
exit 1
}
__ProjectRoot="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-__PortableBuild=0
+__IsPortableBuild=1
# Use uname to determine what the OS is.
OSName=$(uname -s)
@@ -71,8 +70,9 @@ while :; do
__Arch=$(echo $1| cut -d'=' -f 2)
;;
- -portableBuild)
- __PortableBuild=1
+ -PortableBuild=false)
+ unprocessedBuildArgs="$unprocessedBuildArgs $1"
+ __IsPortableBuild=0
;;
*)
unprocessedBuildArgs="$unprocessedBuildArgs $1"
@@ -81,7 +81,7 @@ while :; do
done
# Portable builds target the base RID
-if [ $__PortableBuild == 1 ]; then
+if [ $__IsPortableBuild == 1 ]; then
if [ "$__BuildOS" == "Linux" ]; then
export __DistroRid="linux-$__Arch"
elif [ "$__BuildOS" == "OSX" ]; then
diff --git a/build-test.cmd b/build-test.cmd
index 514bb23..6291f50 100644
--- a/build-test.cmd
+++ b/build-test.cmd
@@ -77,7 +77,6 @@ if /i "%1" == "release" (set __BuildType=Release&set processedArgs
if /i "%1" == "checked" (set __BuildType=Checked&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "skipmanaged" (set __SkipManaged=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
-if /i "%1" == "updateinvalidpackages" (set __UpdateInvalidPackagesArg=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "toolset_dir" (set __ToolsetDir=%2&set __PassThroughArgs=%__PassThroughArgs% %2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
if /i "%1" == "buildagainstpackages" (set __ZipTests=1&set __BuildAgainstPackagesArg=-BuildTestsAgainstPackages&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "ziptests" (set __ZipTests=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
@@ -148,17 +147,6 @@ call "%__ProjectDir%\init-tools.cmd"
REM =========================================================================================
REM ===
-REM === Resolve runtime dependences
-REM ===
-REM =========================================================================================
-call "%__TestDir%\setup-runtime-dependencies.cmd" /arch %__BuildArch% /outputdir %__BinDir%
-
-if defined __UpdateInvalidPackagesArg (
- goto skipnative
-)
-
-REM =========================================================================================
-REM ===
REM === Native test build section
REM ===
REM =========================================================================================
@@ -240,7 +228,7 @@ REM ============================================================================
if not defined XunitTestBinBase set XunitTestBinBase=%__TestWorkingDir%
set "CORE_ROOT=%XunitTestBinBase%\Tests\Core_Root"
-call "%__ProjectDir%\run.cmd" build -Project=%__ProjectDir%\tests\build.proj -UpdateDependencies -BatchRestorePackages -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__RunArgs% %__BuildAgainstPackagesArg% %__unprocessedBuildArgs%
+call "%__ProjectDir%\run.cmd" build -Project=%__ProjectDir%\tests\build.proj -BatchRestorePackages -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__RunArgs% %__BuildAgainstPackagesArg% %__unprocessedBuildArgs%
set __BuildLogRootName=Tests_GenerateRuntimeLayout
@@ -277,11 +265,7 @@ if not defined VSINSTALLDIR (
exit /b 1
)
-if defined __UpdateInvalidPackagesArg (
- set __up=-updateinvalidpackageversions
-)
-
-call "%__ProjectDir%\run.cmd" build -Project=%__ProjectDir%\tests\build.proj -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__up% %__RunArgs% %__BuildAgainstPackagesArg% %__unprocessedBuildArgs%
+call "%__ProjectDir%\run.cmd" build -Project=%__ProjectDir%\tests\build.proj -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__RunArgs% %__BuildAgainstPackagesArg% %__unprocessedBuildArgs%
if errorlevel 1 (
echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
echo %__BuildLog%
@@ -397,6 +381,13 @@ REM ===
REM =========================================================================================
call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\helixprep.proj -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__RunArgs% %__BuildAgainstPackagesArg% %RuntimeIdArg% %TargetsWindowsArg% %__CrossgenArg% %__unprocessedBuildArgs%
+if errorlevel 1 (
+ echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
+ echo %__BuildLog%
+ echo %__BuildWrn%
+ echo %__BuildErr%
+ exit /b 1
+)
echo %__MsgPrefix% Prepped test binaries for publishing
@@ -421,7 +412,6 @@ echo.
echo. -? -h -help: view this message.
echo Build architecture: -buildArch: only x64 is currently allowed ^(default: x64^).
echo Build type: -buildType: one of Debug, Checked, Release ^(default: Debug^).
-echo updateinvalidpackageversions: Runs the target to update package versions.
echo buildagainstpackages: builds tests against restored packages, instead of against a built product.
echo runtimeid ^<ID^>: Builds a test overlay for the specified OS (Only supported when building against packages). Supported IDs are:
echo alpine.3.4.3-x64: Builds overlay for Alpine 3.4.3
@@ -448,7 +438,6 @@ echo 1: Build all tests with priority 0 and 1
echo 666: Build all tests with priority 0, 1 ... 666
echo -sequential: force a non-parallel build ^(default is to build in parallel
echo using all processors^).
-echo -ilasmroundtrip: enables ilasm round trip build and run of the tests before executing them.
echo -verbose: enables detailed file logging for the msbuild tasks into the msbuild log file.
exit /b 1
@@ -506,7 +495,7 @@ if /I "%2" == "mscorlib.ni.dll" exit /b 0
REM don't precompile anything from CoreCLR
if /I exist %CORE_ROOT_STAGE%\%2 exit /b 0
-"%CORE_ROOT_STAGE%\crossgen.exe" /Platform_Assemblies_Paths "%CORE_ROOT%" "%1" >nul 2>nul
+"%CORE_ROOT_STAGE%\crossgen.exe" /Platform_Assemblies_Paths "%CORE_ROOT%" /in "%1" /out "%CORE_ROOT%/temp.ni.dll" >nul 2>nul
set /a __exitCode = %errorlevel%
if "%__exitCode%" == "-2146230517" (
echo %2 is not a managed assembly.
@@ -517,6 +506,10 @@ if %__exitCode% neq 0 (
echo Unable to precompile %2
exit /b 0
)
+
+:: Delete original .dll & replace it with the Crossgened .dll
+del %1
+ren "%CORE_ROOT%\temp.ni.dll" %2
echo Successfully precompiled %2
exit /b 0
diff --git a/build.cmd b/build.cmd
index 64945cc..61d5536 100644
--- a/build.cmd
+++ b/build.cmd
@@ -75,7 +75,6 @@ set __BuildArchArm64=0
set __BuildTypeDebug=0
set __BuildTypeChecked=0
set __BuildTypeRelease=0
-set __BuildJit32=0
set __BuildStandaloneGC="-DFEATURE_STANDALONE_GC=0"
set __PgoInstrument=0
@@ -98,9 +97,6 @@ set __BuildPackages=1
set __BuildNativeCoreLib=1
set __RestoreOptData=1
-REM Is this a portable build?
-set __IsPortableBuild=
-
:Arg_Loop
if "%1" == "" goto ArgsDone
@@ -118,8 +114,6 @@ if /i "%1" == "debug" (set __BuildTypeDebug=1&set processedArgs=!p
if /i "%1" == "checked" (set __BuildTypeChecked=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "release" (set __BuildTypeRelease=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
-if /i "%1" == "-portable" (set __IsPortableBuild=-portable&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
-
REM All arguments after this point will be passed through directly to build.cmd on nested invocations
REM using the "all" argument, and must be added to the __PassThroughArgs variable.
if [!__PassThroughArgs!]==[] (
@@ -142,11 +136,9 @@ if /i "%1" == "skiptests" (set __BuildTests=0&set processedArgs=!proce
if /i "%1" == "skipbuildpackages" (set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "skiprestoreoptdata" (set __RestoreOptData=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "usenmakemakefiles" (set __NMakeMakefiles=1&set __ConfigureOnly=1&set __BuildNative=1&set __BuildNativeCoreLib=0&set __BuildCoreLib=0&set __BuildTests=0&set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
-if /i "%1" == "buildjit32" (set __BuildJit32=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "pgoinstrument" (set __PgoInstrument=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "ibcinstrument" (set __IbcTuning=/Tuning&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "toolset_dir" (set __ToolsetDir=%2&set __PassThroughArgs=%__PassThroughArgs% %2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
-if /i "%1" == "compatjitcrossgen" (set __CompatJitCrossgen=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
if /i "%1" == "buildstandalonegc" (set __BuildStandaloneGC="-DFEATURE_STANDALONE_GC=1"&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
@REM The following can be deleted once the CI system that passes it is updated to not pass it.
@@ -244,21 +236,6 @@ REM === Restore optimization profile data
REM ===
REM =========================================================================================
-REM Parse the package version out of project.json so that we can pass it on to CMake
-where /q python || (
- echo %__MsgPrefix%Error: Python not found on PATH, please make sure that it is installed.
- exit /b 1
-)
-set OptDataProjectJsonPath=%__ProjectDir%\src\.nuget\optdata\project.json
-if EXIST "%OptDataProjectJsonPath%" (
- for /f "tokens=*" %%s in ('python "%__ProjectDir%\extract-from-json.py" -rf "%OptDataProjectJsonPath%" dependencies optimization.PGO.CoreCLR') do @(
- set __PgoOptDataVersion=%%s
- )
- for /f "tokens=*" %%s in ('python "%__ProjectDir%\extract-from-json.py" -rf "%OptDataProjectJsonPath%" dependencies optimization.IBC.CoreCLR') do @(
- set __IbcOptDataVersion=%%s
- )
-)
-
if %__RestoreOptData% EQU 1 (
echo %__MsgPrefix%Restoring the OptimizationData Package
@call %__ProjectDir%\run.cmd sync -optdata
@@ -268,6 +245,20 @@ if %__RestoreOptData% EQU 1 (
)
)
+REM Parse the optdata package versions out of msbuild so that we can pass them on to CMake
+set DotNetCli=%__ProjectDir%\Tools\dotnetcli\dotnet.exe
+if not exist "%DotNetCli%" (
+ echo Assertion failed: dotnet.exe not found at path "%DotNetCli%"
+ exit /b 1
+)
+set OptDataProjectFilePath=%__ProjectDir%\src\.nuget\optdata\optdata.csproj
+for /f "tokens=*" %%s in ('%DotNetCli% msbuild "%OptDataProjectFilePath%" /t:DumpPgoDataPackageVersion /nologo') do @(
+ set __PgoOptDataVersion=%%s
+)
+for /f "tokens=*" %%s in ('%DotNetCli% msbuild "%OptDataProjectFilePath%" /t:DumpIbcDataPackageVersion /nologo') do @(
+ set __IbcOptDataVersion=%%s
+)
+
REM =========================================================================================
REM ===
REM === Build the CLR VM
@@ -318,7 +309,7 @@ if %__BuildNative% EQU 1 (
pushd "%__IntermediatesDir%"
set __ExtraCmakeArgs=!___SDKVersion! "-DCLR_CMAKE_TARGET_OS=%__BuildOs%" "-DCLR_CMAKE_PACKAGES_DIR=%__PackagesDir%" "-DCLR_CMAKE_PGO_INSTRUMENT=%__PgoInstrument%" "-DCLR_CMAKE_OPTDATA_VERSION=%__PgoOptDataVersion%"
- call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" "%__ProjectDir%" %__VSVersion% %__BuildArch% "-DBUILD_JIT32=%__BuildJit32%" %__BuildStandaloneGC% !__ExtraCmakeArgs!
+ call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" "%__ProjectDir%" %__VSVersion% %__BuildArch% %__BuildStandaloneGC% !__ExtraCmakeArgs!
@if defined _echo @echo on
popd
:SkipConfigure
@@ -430,10 +421,6 @@ if %__BuildCoreLib% EQU 1 (
set __nugetBuildArgs=-buildNugetPackage=true
)
- set PackageCompatJit=
- if "%__BuildJit32%" == "1" (
- set PackageCompatJit=1
- )
@call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\build.proj -MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr! !__nugetBuildArgs! %__RunArgs% !__ExtraBuildArgs! %__UnprocessedBuildArgs%
if not !errorlevel! == 0 (
echo %__MsgPrefix%Error: System.Private.CoreLib build failed. Refer to the build log files for details:
@@ -450,29 +437,21 @@ set PATH=%PATH%;%WinDir%\Microsoft.Net\Framework64\V4.0.30319;%WinDir%\Microsoft
if %__BuildNativeCoreLib% EQU 1 (
echo %__MsgPrefix%Generating native image of System.Private.CoreLib for %__BuildOS%.%__BuildArch%.%__BuildType%
- if "%__CompatJitCrossgen%"=="1" (
- set COMPlus_UseWindowsX86CoreLegacyJit=1
- )
-
- echo "%__CrossgenExe%" %__IbcTuning% /Platform_Assemblies_Paths "%__BinDir%" /out "%__BinDir%\System.Private.CoreLib.ni.dll" "%__BinDir%\System.Private.CoreLib.dll"
- "%__CrossgenExe%" %__IbcTuning% /Platform_Assemblies_Paths "%__BinDir%" /out "%__BinDir%\System.Private.CoreLib.ni.dll" "%__BinDir%\System.Private.CoreLib.dll" > "%__CrossGenCoreLibLog%" 2>&1
+ echo "%__CrossgenExe%" %__IbcTuning% /Platform_Assemblies_Paths "%__BinDir%"\IL /out "%__BinDir%\System.Private.CoreLib.dll" "%__BinDir%\IL\System.Private.CoreLib.dll"
+ "%__CrossgenExe%" %__IbcTuning% /Platform_Assemblies_Paths "%__BinDir%"\IL /out "%__BinDir%\System.Private.CoreLib.dll" "%__BinDir%\IL\System.Private.CoreLib.dll" > "%__CrossGenCoreLibLog%" 2>&1
if NOT !errorlevel! == 0 (
echo %__MsgPrefix%Error: CrossGen System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
:: Put it in the same log, helpful for Jenkins
type %__CrossGenCoreLibLog%
goto CrossgenFailure
)
- "%__CrossgenExe%" /Platform_Assemblies_Paths "%__BinDir%" /CreatePdb "%__BinDir%\PDB" "%__BinDir%\System.Private.CoreLib.ni.dll" >> "%__CrossGenCoreLibLog%" 2>&1
+ "%__CrossgenExe%" /Platform_Assemblies_Paths "%__BinDir%" /CreatePdb "%__BinDir%\PDB" "%__BinDir%\System.Private.CoreLib.dll" >> "%__CrossGenCoreLibLog%" 2>&1
if NOT !errorlevel! == 0 (
echo %__MsgPrefix%Error: CrossGen /CreatePdb System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
:: Put it in the same log, helpful for Jenkins
type %__CrossGenCoreLibLog%
goto CrossgenFailure
)
-
- if "%__CompatJitCrossgen%"=="1" (
- set COMPlus_UseWindowsX86CoreLegacyJit=
- )
)
if %__BuildPackages% EQU 1 (
@@ -483,7 +462,7 @@ if %__BuildPackages% EQU 1 (
set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__LogsDir%\Nuget_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
REM The conditions as to what to build are captured in the builds file.
- @call %__ProjectDir%\run.cmd build -Project=%__SourceDir%\.nuget\packages.builds %__IsPortableBuild% -platform=%__BuildArch% -MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr! %__RunArgs% %__UnprocessedBuildArgs%
+ @call %__ProjectDir%\run.cmd build -Project=%__SourceDir%\.nuget\packages.builds -platform=%__BuildArch% -MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr! %__RunArgs% %__UnprocessedBuildArgs%
if not !errorlevel! == 0 (
echo %__MsgPrefix%Error: Nuget package generation failed build failed. Refer to the build log files for details:
diff --git a/build.proj b/build.proj
index 07bb11a..8d15cbc 100644
--- a/build.proj
+++ b/build.proj
@@ -24,12 +24,8 @@
<Delete Files="$(BinDir)System.Private.CoreLib.*" />
</Target>
- <PropertyGroup>
- <OptDataProjectJson>$(SourceDir).nuget/optdata/project.json</OptDataProjectJson>
- <OptDataPackageFeed>https://dotnet.myget.org/F/dotnet-core-optimization-data/api/v3/index.json</OptDataPackageFeed>
- </PropertyGroup>
<Target Name="RestoreOptData">
- <Exec Condition="Exists('$(OptDataProjectJson)')" Command="$(DnuRestoreCommand) &quot;$(OptDataProjectJson)&quot; --source &quot;$(OptDataPackageFeed)&quot;" />
+ <Exec Command="$(DotnetRestoreCommand) $(SourceDir).nuget/optdata/optdata.csproj" />
</Target>
<!--
@@ -40,7 +36,8 @@
<Target Name="Sync" BeforeTargets="Build" />
<Target Name="RestoreNETCorePlatforms" AfterTargets="Build" Condition="'$(RestoreDuringBuild)'=='true'">
- <Exec Command="$(DnuRestoreCommand) &quot;$(SourceDir).nuget/init/project.json&quot; --source https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" />
+ <Exec Command="$(DotnetRestoreCommand) $(SourceDir).nuget/init/init.csproj"
+ StandardOutputImportance="Low" />
</Target>
</Project>
diff --git a/build.sh b/build.sh
index 018cdf0..55b4ba3 100755
--- a/build.sh
+++ b/build.sh
@@ -38,7 +38,6 @@ usage()
echo "skiptests - skip the tests in the 'tests' subdirectory."
echo "skipnuget - skip building nuget packages."
echo "skiprestoreoptdata - skip restoring optimization data used by profile-based optimizations."
- echo "portable - build for portable RID."
echo "verbose - optional argument to enable verbose build output."
echo "-skiprestore: skip restoring packages ^(default: packages are restored during build^)."
echo "-disableoss: Disable Open Source Signing for System.Private.CoreLib."
@@ -142,6 +141,16 @@ restore_optdata()
echo "Failed to restore the optimization data package."
exit 1
fi
+
+ # Parse the optdata package versions out of msbuild so that we can pass them on to CMake
+ local DotNetCli="$__ProjectRoot/Tools/dotnetcli/dotnet"
+ if [ ! -f $DotNetCli ]; then
+ echo "Assertion failed: dotnet CLI not found at '$DotNetCli'"
+ exit 1
+ fi
+ local OptDataProjectFilePath="$__ProjectRoot/src/.nuget/optdata/optdata.csproj"
+ __PgoOptDataVersion=$($DotNetCli msbuild $OptDataProjectFilePath /t:DumpPgoDataPackageVersion /nologo | sed 's/^\s*//')
+ __IbcOptDataVersion=$($DotNetCli msbuild $OptDataProjectFilePath /t:DumpIbcDataPackageVersion /nologo | sed 's/^\s*//')
fi
}
@@ -154,15 +163,27 @@ generate_event_logging_sources()
# Event Logging Infrastructure
__GeneratedIntermediate="$__IntermediatesDir/Generated"
__GeneratedIntermediateEventProvider="$__GeneratedIntermediate/eventprovider_new"
+ __GeneratedIntermediateEventPipe="$__GeneratedIntermediate/eventpipe_new"
+
if [[ -d "$__GeneratedIntermediateEventProvider" ]]; then
rm -rf "$__GeneratedIntermediateEventProvider"
fi
+ if [[ -d "$__GeneratedIntermediateEventPipe" ]]; then
+ rm -rf "$__GeneratedIntermediateEventPipe"
+ fi
+
if [[ ! -d "$__GeneratedIntermediate/eventprovider" ]]; then
mkdir -p "$__GeneratedIntermediate/eventprovider"
fi
+ if [[ ! -d "$__GeneratedIntermediate/eventpipe" ]]; then
+ mkdir -p "$__GeneratedIntermediate/eventpipe"
+ fi
+
mkdir -p "$__GeneratedIntermediateEventProvider"
+ mkdir -p "$__GeneratedIntermediateEventPipe"
+
if [[ $__SkipCoreCLR == 0 || $__ConfigureOnly == 1 ]]; then
echo "Laying out dynamically generated files consumed by the build system "
echo "Laying out dynamically generated Event Logging Test files"
@@ -172,6 +193,18 @@ generate_event_logging_sources()
exit
fi
+ case $__BuildOS in
+ Linux)
+ echo "Laying out dynamically generated EventPipe Implementation"
+ $PYTHON -B -Wall -Werror "$__ProjectRoot/src/scripts/genEventPipe.py" --man "$__ProjectRoot/src/vm/ClrEtwAll.man" --intermediate "$__GeneratedIntermediateEventPipe" --exc "$__ProjectRoot/src/vm/ClrEtwAllMeta.lst"
+ if [[ $? != 0 ]]; then
+ exit
+ fi
+ ;;
+ *)
+ ;;
+ esac
+
#determine the logging system
case $__BuildOS in
Linux)
@@ -193,6 +226,14 @@ generate_event_logging_sources()
fi
rm -rf "$__GeneratedIntermediateEventProvider"
+
+ echo "Cleaning the temp folder of dynamically generated EventPipe files"
+ $PYTHON -B -Wall -Werror -c "import sys;sys.path.insert(0,\"$__ProjectRoot/src/scripts\"); from Utilities import *;UpdateDirectory(\"$__GeneratedIntermediate/eventpipe\",\"$__GeneratedIntermediateEventPipe\")"
+ if [[ $? != 0 ]]; then
+ exit
+ fi
+
+ rm -rf "$__GeneratedIntermediateEventPipe"
}
build_native()
@@ -379,7 +420,7 @@ build_CoreLib_ni()
{
if [ $__SkipCoreCLR == 0 -a -e $__BinDir/crossgen ]; then
echo "Generating native image for System.Private.CoreLib."
- $__BinDir/crossgen $__IbcTuning $__BinDir/System.Private.CoreLib.dll
+ $__BinDir/crossgen /Platform_Assemblies_Paths $__BinDir/IL $__IbcTuning /out $__BinDir/System.Private.CoreLib.dll $__BinDir/IL/System.Private.CoreLib.dll
if [ $? -ne 0 ]; then
echo "Failed to generate native image for System.Private.CoreLib."
exit 1
@@ -387,7 +428,7 @@ build_CoreLib_ni()
if [ "$__BuildOS" == "Linux" ]; then
echo "Generating symbol file for System.Private.CoreLib."
- $__BinDir/crossgen /CreatePerfMap $__BinDir $__BinDir/System.Private.CoreLib.ni.dll
+ $__BinDir/crossgen /CreatePerfMap $__BinDir $__BinDir/System.Private.CoreLib.dll
if [ $? -ne 0 ]; then
echo "Failed to generate symbol file for System.Private.CoreLib."
exit 1
@@ -585,7 +626,7 @@ __DistroRid=""
__cmakeargs=""
__SkipGenerateVersion=0
__DoCrossArchBuild=0
-__PortableBuild=0
+__PortableBuild=1
__msbuildonunsupportedplatform=0
__PgoOptDataVersion=""
__IbcOptDataVersion=""
@@ -642,8 +683,8 @@ while :; do
__CrossBuild=1
;;
- -portable)
- __PortableBuild=1
+ -portablebuild=false)
+ __PortableBuild=0
;;
verbose)
@@ -800,12 +841,22 @@ if [[ $__ClangMajorVersion == 0 && $__ClangMinorVersion == 0 ]]; then
__ClangMajorVersion=3
__ClangMinorVersion=6
fi
+
+ if [[ "$__BuildArch" == "armel" ]]; then
+ # Armel cross build is Tizen specific and does not support Portable RID build
+ __PortableBuild=0
+ fi
+
else
__ClangMajorVersion=3
__ClangMinorVersion=5
fi
fi
+if [ $__PortableBuild == 0 ]; then
+ __RunArgs="$__RunArgs -PortableBuild=false"
+fi
+
# Set dependent variables
__LogsDir="$__RootBinDir/Logs"
@@ -858,13 +909,6 @@ if [ $__CrossBuild == 1 ]; then
fi
fi
-# Parse the optdata package version from its project.json file
-optDataProjectJsonPath="$__ProjectRoot/src/.nuget/optdata/project.json"
-if [ -f $optDataProjectJsonPath ]; then
- __PgoOptDataVersion=$("$__ProjectRoot/extract-from-json.py" -rf $optDataProjectJsonPath dependencies optimization.PGO.CoreCLR)
- __IbcOptDataVersion=$("$__ProjectRoot/extract-from-json.py" -rf $optDataProjectJsonPath dependencies optimization.IBC.CoreCLR)
-fi
-
# init the target distro name
initTargetDistroRid
diff --git a/buildpipeline/DotNet-CoreClr-Trusted-Linux-Crossbuild.json b/buildpipeline/DotNet-CoreClr-Trusted-Linux-Crossbuild.json
index ab8fc1e..312d08c 100644
--- a/buildpipeline/DotNet-CoreClr-Trusted-Linux-Crossbuild.json
+++ b/buildpipeline/DotNet-CoreClr-Trusted-Linux-Crossbuild.json
@@ -139,7 +139,7 @@
},
"inputs": {
"filename": "docker",
- "arguments": "run --rm -e ROOTFS_DIR $(DockerCommonRunArgs) ./build.sh $(PB_BuildType) $(Architecture) $(portableBuild) skipnuget cross -skiprestore stripSymbols -OfficialBuildId=$(OfficialBuildId) -- /p:\"ConfigurationGroup=\"Release\" /flp:\"v=diag\"",
+ "arguments": "run --rm -e ROOTFS_DIR $(DockerCommonRunArgs) ./build.sh $(PB_BuildType) $(Architecture) skipnuget cross -skiprestore stripSymbols -OfficialBuildId=$(OfficialBuildId) -- /flp:\"v=diag\"",
"workingFolder": "",
"failOnStandardError": "false"
}
@@ -157,7 +157,7 @@
},
"inputs": {
"filename": "docker",
- "arguments": "run --rm $(DockerCommonRunArgs) ./build-packages.sh $(portableBuild) -BuildType=$(PB_BuildType) -BuildArch=$(Architecture)",
+ "arguments": "run --rm $(DockerCommonRunArgs) ./build-packages.sh -BuildType=$(PB_BuildType) -BuildArch=$(Architecture) -- /p:OfficialBuildId=$(OfficialBuildId)",
"workingFolder": "",
"failOnStandardError": "false"
}
@@ -415,9 +415,6 @@
"DockerCopyDest": {
"value": "$(Build.BinariesDirectory)/docker_repo"
},
- "portableBuild": {
- "value": ""
- },
"ROOTFS_DIR": {
"value": "/crossrootfs/$(Architecture)"
},
@@ -450,7 +447,7 @@
"deleteTestResults": true
}
],
- "buildNumberFormat": "$(date:yyyyMMdd)$(rev:-rr)-$(DockerTag)$(portableBuild)",
+ "buildNumberFormat": "$(date:yyyyMMdd)$(rev:-rr)-$(DockerTag)",
"jobAuthorizationScope": "projectCollection",
"jobTimeoutInMinutes": 90,
"repository": {
diff --git a/buildpipeline/DotNet-CoreClr-Trusted-Linux.json b/buildpipeline/DotNet-CoreClr-Trusted-Linux.json
index 0efb91a..882c112 100644
--- a/buildpipeline/DotNet-CoreClr-Trusted-Linux.json
+++ b/buildpipeline/DotNet-CoreClr-Trusted-Linux.json
@@ -121,7 +121,7 @@
},
"inputs": {
"filename": "docker",
- "arguments": "run --rm $(DockerCommonRunArgs) ./build.sh $(PB_BuildType) $(Architecture) $(portableBuild) skipnuget -skiprestore stripSymbols -OfficialBuildId=$(OfficialBuildId) -- /p:\"ConfigurationGroup=\"Release\" /flp:\"v=diag\"",
+ "arguments": "run --rm $(DockerCommonRunArgs) ./build.sh $(PB_BuildType) $(Architecture) skipnuget -skiprestore stripSymbols -OfficialBuildId=$(OfficialBuildId) -- /flp:\"v=diag\"",
"workingFolder": "",
"failOnStandardError": "false"
}
@@ -139,7 +139,7 @@
},
"inputs": {
"filename": "docker",
- "arguments": "run --rm $(DockerCommonRunArgs) ./build-packages.sh $(portableBuild) -BuildType=$(PB_BuildType) -BuildArch=$(Architecture)",
+ "arguments": "run --rm $(DockerCommonRunArgs) ./build-packages.sh -BuildType=$(PB_BuildType) -BuildArch=$(Architecture) -- /p:OfficialBuildId=$(OfficialBuildId)",
"workingFolder": "",
"failOnStandardError": "false"
}
@@ -376,9 +376,6 @@
"value": "HEAD",
"allowOverride": true
},
- "portableBuild": {
- "value": ""
- },
"DockerVolumeName": {
"value": "coreclr-$(Build.BuildId)"
},
@@ -411,7 +408,7 @@
"deleteTestResults": true
}
],
- "buildNumberFormat": "$(date:yyyyMMdd)$(rev:-rr)-$(DockerTag)$(portableBuild)",
+ "buildNumberFormat": "$(date:yyyyMMdd)$(rev:-rr)-$(DockerTag)",
"jobAuthorizationScope": "projectCollection",
"jobTimeoutInMinutes": 90,
"repository": {
diff --git a/buildpipeline/DotNet-CoreClr-Trusted-Mac.json b/buildpipeline/DotNet-CoreClr-Trusted-Mac.json
index 5a44145..b96ebb5 100644
--- a/buildpipeline/DotNet-CoreClr-Trusted-Mac.json
+++ b/buildpipeline/DotNet-CoreClr-Trusted-Mac.json
@@ -49,7 +49,7 @@
},
"inputs": {
"filename": "$(Agent.BuildDirectory)/s/build.sh",
- "arguments": "$(PB_BuildType) $(Architecture) $(portableBuild) skipnuget -skiprestore stripSymbols -OfficialBuildId=$(OfficialBuildId) -- /p:\"ConfigurationGroup=Release\"",
+ "arguments": "$(PB_BuildType) $(Architecture) skipnuget -skiprestore stripSymbols -OfficialBuildId=$(OfficialBuildId)",
"workingFolder": "",
"failOnStandardError": "false"
}
@@ -67,7 +67,7 @@
},
"inputs": {
"filename": "$(Agent.BuildDirectory)/s/build-packages.sh",
- "arguments": "-BuildType=$(PB_BuildType) -BuildArch=$(Architecture) $(portableBuild)",
+ "arguments": "-BuildType=$(PB_BuildType) -BuildArch=$(Architecture) -- /p:OfficialBuildId=$(OfficialBuildId)",
"workingFolder": "",
"failOnStandardError": "false"
}
@@ -176,9 +176,6 @@
},
"Label": {
"value": "$(Build.BuildNumber)"
- },
- "portableBuild": {
- "value": ""
}
},
"demands": [
diff --git a/buildpipeline/DotNet-CoreClr-Trusted-Windows-x86.json b/buildpipeline/DotNet-CoreClr-Trusted-Windows-x86.json
index 9b24cc2..8ec9054 100644
--- a/buildpipeline/DotNet-CoreClr-Trusted-Windows-x86.json
+++ b/buildpipeline/DotNet-CoreClr-Trusted-Windows-x86.json
@@ -39,78 +39,6 @@
},
{
"enabled": true,
- "continueOnError": true,
- "alwaysRun": false,
- "displayName": "Run rd",
- "timeoutInMinutes": 0,
- "task": {
- "id": "d9bafed4-0b18-4f58-968d-86655b4d2ce9",
- "versionSpec": "1.*",
- "definitionType": "task"
- },
- "inputs": {
- "filename": "rd",
- "arguments": "/S /Q jit32",
- "workingFolder": "src",
- "failOnStandardError": "false"
- }
- },
- {
- "enabled": true,
- "continueOnError": false,
- "alwaysRun": false,
- "displayName": "Run md",
- "timeoutInMinutes": 0,
- "task": {
- "id": "d9bafed4-0b18-4f58-968d-86655b4d2ce9",
- "versionSpec": "1.*",
- "definitionType": "task"
- },
- "inputs": {
- "filename": "md",
- "arguments": "jit32",
- "workingFolder": "src",
- "failOnStandardError": "false"
- }
- },
- {
- "enabled": true,
- "continueOnError": false,
- "alwaysRun": false,
- "displayName": "Run git",
- "timeoutInMinutes": 0,
- "task": {
- "id": "d9bafed4-0b18-4f58-968d-86655b4d2ce9",
- "versionSpec": "1.*",
- "definitionType": "task"
- },
- "inputs": {
- "filename": "git",
- "arguments": "clone -b $(Jit32Branch) $(Jit32Repo) jit32",
- "workingFolder": "src",
- "failOnStandardError": "false"
- }
- },
- {
- "enabled": true,
- "continueOnError": true,
- "alwaysRun": false,
- "displayName": "Run rd",
- "timeoutInMinutes": 0,
- "task": {
- "id": "d9bafed4-0b18-4f58-968d-86655b4d2ce9",
- "versionSpec": "1.*",
- "definitionType": "task"
- },
- "inputs": {
- "filename": "rd",
- "arguments": "/S /Q jit32\\.git",
- "workingFolder": "src",
- "failOnStandardError": "false"
- }
- },
- {
- "enabled": true,
"continueOnError": false,
"alwaysRun": false,
"displayName": "Run clean.cmd",
@@ -158,7 +86,7 @@
},
"inputs": {
"filename": "build.cmd",
- "arguments": "$(Architecture) $(PB_BuildType) skiptests skipbuildpackages buildjit32 -OfficialBuildId=$(OfficialBuildId) -skiprestore -Priority=$(Priority) $(portableBuild) -- /p:\"ConfigurationGroup=Release\"",
+ "arguments": "$(Architecture) $(PB_BuildType) skiptests skipbuildpackages -OfficialBuildId=$(OfficialBuildId) -skiprestore -Priority=$(Priority)",
"workingFolder": "",
"failOnStandardError": "false"
}
@@ -203,7 +131,7 @@
},
"inputs": {
"filename": "build-packages.cmd",
- "arguments": "-BuildArch=$(Architecture) -BuildType=$(PB_BuildType) $(portableBuild) -ExtraParameters=/p:PackageCompatJit=1",
+ "arguments": "-BuildArch=$(Architecture) -BuildType=$(PB_BuildType) -- /p:OfficialBuildId=$(OfficialBuildId)",
"workingFolder": "",
"failOnStandardError": "false"
}
@@ -227,46 +155,6 @@
}
},
{
- "enabled": false,
- "continueOnError": false,
- "alwaysRun": false,
- "displayName": "Publish symbols path: \\\\cpvsbuild\\drops\\DotNetCore\\$(Build.DefinitionName)\\$(Build.BuildNumber)\\symbols",
- "timeoutInMinutes": 0,
- "task": {
- "id": "0675668a-7bba-4ccb-901d-5ad6554ca653",
- "versionSpec": "1.*",
- "definitionType": "task"
- },
- "inputs": {
- "SymbolsPath": "\\\\cpvsbuild\\drops\\DotNetCore\\$(Build.DefinitionName)\\$(Build.BuildNumber)\\symbols",
- "SearchPattern": "bin\\Product\\*$(Architecture).$(PB_BuildType)\\**\\PDB\\*.pdb",
- "SymbolsFolder": "",
- "SkipIndexing": "false",
- "TreatNotIndexedAsWarning": "false",
- "SymbolsMaximumWaitTime": "",
- "SymbolsProduct": "",
- "SymbolsVersion": "",
- "SymbolsArtifactName": "Symbols_$(BuildConfiguration)"
- }
- },
- {
- "enabled": false,
- "continueOnError": false,
- "alwaysRun": false,
- "displayName": "Index Symbols on Symweb",
- "timeoutInMinutes": 0,
- "task": {
- "id": "af503aa3-9d06-44b6-a549-d063a544a5c5",
- "versionSpec": "1.*",
- "definitionType": "task"
- },
- "inputs": {
- "symbolStore": "\\\\cpvsbuild\\drops\\DotNetCore\\$(Build.DefinitionName)\\$(Build.BuildNumber)\\symbols",
- "contacts": "mawilkie",
- "project": "DDE"
- }
- },
- {
"enabled": true,
"continueOnError": false,
"alwaysRun": true,
@@ -406,9 +294,6 @@
"VsoPassword": {
"value": null,
"isSecret": true
- },
- "portableBuild": {
- "value": ""
}
},
"retentionRules": [
diff --git a/buildpipeline/DotNet-CoreClr-Trusted-Windows.json b/buildpipeline/DotNet-CoreClr-Trusted-Windows.json
index 457fe36..6cf49de 100644
--- a/buildpipeline/DotNet-CoreClr-Trusted-Windows.json
+++ b/buildpipeline/DotNet-CoreClr-Trusted-Windows.json
@@ -86,7 +86,7 @@
},
"inputs": {
"filename": "build.cmd",
- "arguments": "$(Architecture) $(PB_BuildType) skiptests skipbuildpackages toolset_dir C:\\tools\\clr -OfficialBuildId=$(OfficialBuildId) -Priority=$(Priority) -skiprestore -disableoss $(portableBuild) -- /p:\"ConfigurationGroup=Release\" /flp:\"v=diag\"",
+ "arguments": "$(Architecture) $(PB_BuildType) skiptests skipbuildpackages toolset_dir C:\\tools\\clr -OfficialBuildId=$(OfficialBuildId) -Priority=$(Priority) -skiprestore -disableoss -- /flp:\"v=diag\"",
"workingFolder": "",
"failOnStandardError": "false"
}
@@ -131,7 +131,7 @@
},
"inputs": {
"filename": "build-packages.cmd",
- "arguments": "-BuildArch=$(Architecture) -BuildType=$(PB_BuildType) $(portableBuild)",
+ "arguments": "-BuildArch=$(Architecture) -BuildType=$(PB_BuildType) -- /p:OfficialBuildId=$(OfficialBuildId)",
"workingFolder": "",
"failOnStandardError": "false"
}
@@ -155,46 +155,6 @@
}
},
{
- "enabled": false,
- "continueOnError": false,
- "alwaysRun": false,
- "displayName": "Publish symbols path: \\\\cpvsbuild\\drops\\DotNetCore\\$(Build.DefinitionName)\\$(Build.BuildNumber)\\symbols",
- "timeoutInMinutes": 0,
- "task": {
- "id": "0675668a-7bba-4ccb-901d-5ad6554ca653",
- "versionSpec": "1.*",
- "definitionType": "task"
- },
- "inputs": {
- "SymbolsPath": "\\\\cpvsbuild\\drops\\DotNetCore\\$(Build.DefinitionName)\\$(Build.BuildNumber)\\symbols",
- "SearchPattern": "bin\\Product\\*$(Architecture).$(PB_BuildType)\\**\\PDB\\*.pdb",
- "SymbolsFolder": "",
- "SkipIndexing": "false",
- "TreatNotIndexedAsWarning": "false",
- "SymbolsMaximumWaitTime": "",
- "SymbolsProduct": "",
- "SymbolsVersion": "",
- "SymbolsArtifactName": "Symbols_$(BuildConfiguration)"
- }
- },
- {
- "enabled": false,
- "continueOnError": false,
- "alwaysRun": false,
- "displayName": "Index Symbols on Symweb",
- "timeoutInMinutes": 0,
- "task": {
- "id": "af503aa3-9d06-44b6-a549-d063a544a5c5",
- "versionSpec": "1.*",
- "definitionType": "task"
- },
- "inputs": {
- "symbolStore": "\\\\cpvsbuild\\drops\\DotNetCore\\$(Build.DefinitionName)\\$(Build.BuildNumber)\\symbols",
- "contacts": "mawilkie",
- "project": "DDE"
- }
- },
- {
"enabled": true,
"continueOnError": false,
"alwaysRun": true,
@@ -324,9 +284,6 @@
},
"TeamName": {
"value": "DotNetCore"
- },
- "portableBuild": {
- "value": ""
}
},
"retentionRules": [
diff --git a/buildpipeline/DotNet-Trusted-Publish-Symbols.json b/buildpipeline/DotNet-Trusted-Publish-Symbols.json
new file mode 100644
index 0000000..edbb8c0
--- /dev/null
+++ b/buildpipeline/DotNet-Trusted-Publish-Symbols.json
@@ -0,0 +1,274 @@
+{
+ "build": [
+ {
+ "enabled": true,
+ "continueOnError": false,
+ "alwaysRun": false,
+ "displayName": "Set up pipeline-specific git repository",
+ "timeoutInMinutes": 0,
+ "task": {
+ "id": "e213ff0f-5d5c-4791-802d-52ea3e7be1f1",
+ "versionSpec": "1.*",
+ "definitionType": "task"
+ },
+ "inputs": {
+ "scriptType": "inlineScript",
+ "scriptName": "",
+ "arguments": "-gitUrl $(PB_VstsRepoGitUrl) -root $(Pipeline.SourcesDirectory)",
+ "workingFolder": "",
+ "inlineScript": "param($gitUrl, $root)\n\nif (Test-Path $root)\n{\n Remove-Item -Recurse -Force $root\n}\ngit clone --no-checkout $gitUrl $root 2>&1 | Write-Host\ncd $root\ngit checkout $env:SourceVersion 2>&1 | Write-Host\n\nWrite-Host (\"##vso[task.setvariable variable=Pipeline.SourcesDirectory;]$root\")",
+ "failOnStandardError": "true"
+ }
+ },
+ {
+ "enabled": true,
+ "continueOnError": false,
+ "alwaysRun": false,
+ "displayName": "sync -ab",
+ "timeoutInMinutes": 0,
+ "task": {
+ "id": "e213ff0f-5d5c-4791-802d-52ea3e7be1f1",
+ "versionSpec": "1.*",
+ "definitionType": "task"
+ },
+ "inputs": {
+ "scriptType": "inlineScript",
+ "scriptName": "",
+ "arguments": "$(PB_CloudDropAccountName) $(CloudDropAccessToken) $(Label)",
+ "workingFolder": "$(Pipeline.SourcesDirectory)",
+ "inlineScript": "param($account, $token, $container)\n.\\sync.cmd -ab -- /p:CloudDropAccountName=$account /p:CloudDropAccessToken=$token /p:ContainerName=$container",
+ "failOnStandardError": "false"
+ }
+ },
+ {
+ "enabled": true,
+ "continueOnError": false,
+ "alwaysRun": false,
+ "displayName": "Extract symbol packages; if release branch, archive",
+ "timeoutInMinutes": 0,
+ "task": {
+ "id": "e213ff0f-5d5c-4791-802d-52ea3e7be1f1",
+ "versionSpec": "1.*",
+ "definitionType": "task"
+ },
+ "inputs": {
+ "scriptType": "inlineScript",
+ "scriptName": "",
+ "arguments": "-BuildType $(PB_BuildType) -SymPkgGlob $(PB_AzureContainerSymbolPackageGlob) -Branch $(SourceBranch)",
+ "workingFolder": "$(Pipeline.SourcesDirectory)",
+ "inlineScript": "param($BuildType, $SymPkgGlob, $Branch)\nif ($BuildType -ne \"Release\") { exit }\n$archive = $Branch.StartsWith(\"release/\")\n\n$target = \"UnzipSymbolPackagesForPublish\"\nif ($archive) { $target = \"SubmitSymbolsRequest\" }\n\n.\\run.cmd build -- `\n/t:$target `\n/p:SymbolPackagesToPublishGlob=$SymPkgGlob `\n/p:ArchiveSymbols=$archive `\n/v:D",
+ "failOnStandardError": "true"
+ }
+ },
+ {
+ "enabled": true,
+ "continueOnError": false,
+ "alwaysRun": false,
+ "displayName": "Publish Symbols to Artifact Services",
+ "timeoutInMinutes": 0,
+ "task": {
+ "id": "29827cd1-5c33-4ff0-a817-abd46970ffc4",
+ "versionSpec": "0.*",
+ "definitionType": "task"
+ },
+ "inputs": {
+ "symbolServiceURI": "https://microsoft.artifacts.visualstudio.com/DefaultCollection",
+ "requestName": "$(system.teamProject)/$(Build.BuildNumber)/$(Build.BuildId)",
+ "sourcePath": "$(Pipeline.SourcesDirectory)\\bin\\obj\\SymbolsRequest\\ExtractedPackages",
+ "assemblyPath": "",
+ "toLowerCase": "true",
+ "detailedLog": "true",
+ "expirationInDays": "30",
+ "usePat": "false"
+ }
+ }
+ ],
+ "options": [
+ {
+ "enabled": false,
+ "definition": {
+ "id": "5bc3cfb7-6b54-4a4b-b5d2-a3905949f8a6"
+ },
+ "inputs": {
+ "additionalFields": "{}"
+ }
+ },
+ {
+ "enabled": false,
+ "definition": {
+ "id": "7c555368-ca64-4199-add6-9ebaf0b0137d"
+ },
+ "inputs": {
+ "multipliers": "[]",
+ "parallel": "false",
+ "continueOnError": "true",
+ "additionalFields": "{}"
+ }
+ },
+ {
+ "enabled": false,
+ "definition": {
+ "id": "a9db38f9-9fdc-478c-b0f9-464221e58316"
+ },
+ "inputs": {
+ "workItemType": "234347",
+ "assignToRequestor": "true",
+ "additionalFields": "{}"
+ }
+ },
+ {
+ "enabled": false,
+ "definition": {
+ "id": "57578776-4c22-4526-aeb0-86b6da17ee9c"
+ },
+ "inputs": {
+ "additionalFields": "{}"
+ }
+ }
+ ],
+ "variables": {
+ "system.debug": {
+ "value": "false",
+ "allowOverride": true
+ },
+ "PB_BuildType": {
+ "value": "Release",
+ "allowOverride": true
+ },
+ "PB_CloudDropAccountName": {
+ "value": "dotnetbuildoutput",
+ "allowOverride": true
+ },
+ "CloudDropAccessToken": {
+ "value": null,
+ "allowOverride": true,
+ "isSecret": true
+ },
+ "OfficialBuildId": {
+ "value": "$(Build.BuildNumber)",
+ "allowOverride": true
+ },
+ "Label": {
+ "value": "$(Build.BuildNumber)",
+ "allowOverride": true
+ },
+ "Pipeline.SourcesDirectory": {
+ "value": "$(Build.BinariesDirectory)\\pipelineRepository"
+ },
+ "PB_VstsAccountName": {
+ "value": "dn-bot"
+ },
+ "PB_VstsRepositoryName": {
+ "value": "DotNet-CoreCLR-Trusted",
+ "allowOverride": true
+ },
+ "PB_VstsRepoGitUrl": {
+ "value": "https://$(PB_VstsAccountName):$(VstsRepoPat)@devdiv.visualstudio.com/DevDiv/_git/$(PB_VstsRepositoryName)/"
+ },
+ "VstsRepoPat": {
+ "value": null,
+ "isSecret": true
+ },
+ "SourceVersion": {
+ "value": "master",
+ "allowOverride": true
+ },
+ "SourceBranch": {
+ "value": "master",
+ "allowOverride": true
+ },
+ "AzureContainerSymbolPackageGlob": {
+ "value": "symbolpkg\\*.nupkg",
+ "allowOverride": true
+ },
+ "PB_AzureContainerSymbolPackageGlob": {
+ "value": "$(Pipeline.SourcesDirectory)\\packages\\AzureTransfer\\$(PB_BuildType)\\$(AzureContainerSymbolPackageGlob)",
+ "allowOverride": true
+ },
+ "PB_DotNetCoreShareDir": {
+ "value": "passed-by-pipebuild",
+ "allowOverride": true
+ },
+ "SymbolsProject": {
+ "value": "CLR"
+ },
+ "SymbolsStatusMail": {
+ "value": "dagood;mawilkie"
+ },
+ "SymbolsUserName": {
+ "value": "dlab"
+ },
+ "SymbolsRelease": {
+ "value": "rtm"
+ },
+ "SymbolsProductGroup": {
+ "value": "Visual_Studio"
+ },
+ "SymbolsProductName": {
+ "value": "dotnetcore"
+ },
+ "SymbolPublishDestinationDir": {
+ "value": "$(PB_DotNetCoreShareDir)\\$(PB_VstsRepositoryName)\\$(Label)\\"
+ }
+ },
+ "retentionRules": [
+ {
+ "branches": [
+ "+refs/heads/*"
+ ],
+ "artifacts": [],
+ "artifactTypesToDelete": [
+ "FilePath",
+ "SymbolStore"
+ ],
+ "daysToKeep": 10,
+ "minimumToKeep": 1,
+ "deleteBuildRecord": true,
+ "deleteTestResults": true
+ }
+ ],
+ "buildNumberFormat": "$(date:yyyyMMdd)$(rev:-rr)",
+ "jobAuthorizationScope": "projectCollection",
+ "jobTimeoutInMinutes": 180,
+ "jobCancelTimeoutInMinutes": 5,
+ "repository": {
+ "properties": {
+ "labelSources": "0",
+ "reportBuildStatus": "false",
+ "fetchDepth": "0",
+ "gitLfsSupport": "false",
+ "skipSyncSource": "false",
+ "cleanOptions": "0",
+ "labelSourcesFormat": "$(build.buildNumber)"
+ },
+ "id": "0a2b2664-c1be-429c-9b40-8a24dee27a4a",
+ "type": "TfsGit",
+ "name": "DotNet-BuildPipeline",
+ "url": "https://devdiv.visualstudio.com/DevDiv/_git/DotNet-BuildPipeline",
+ "defaultBranch": "refs/heads/master",
+ "clean": "true",
+ "checkoutSubmodules": false
+ },
+ "processParameters": {},
+ "quality": "definition",
+ "queue": {
+ "id": 36,
+ "name": "DotNet-Build",
+ "pool": {
+ "id": 39,
+ "name": "DotNet-Build"
+ }
+ },
+ "id": -1,
+ "name": "DotNet-Trusted-Publish-Symbols",
+ "path": "\\",
+ "type": "build",
+ "project": {
+ "id": "0bdbc590-a062-4c3f-b0f6-9383f67865ee",
+ "name": "DevDiv",
+ "description": "Visual Studio and DevDiv team project for git source code repositories. Work items will be added for Adams, Dev14 work items are tracked in vstfdevdiv. ",
+ "url": "https://devdiv.visualstudio.com/DefaultCollection/_apis/projects/0bdbc590-a062-4c3f-b0f6-9383f67865ee",
+ "state": "wellFormed",
+ "revision": 418097642
+ }
+}
diff --git a/buildpipeline/DotNet-Trusted-Publish.json b/buildpipeline/DotNet-Trusted-Publish.json
index 80e9f65..fc4d9d0 100644
--- a/buildpipeline/DotNet-Trusted-Publish.json
+++ b/buildpipeline/DotNet-Trusted-Publish.json
@@ -172,7 +172,7 @@
"scriptType": "inlineScript",
"scriptName": "",
"arguments": "$(MyGetApiKey) $(ConfigurationGroup)",
- "inlineScript": "param($ApiKey, $ConfigurationGroup)\nif ($ConfigurationGroup -ne \"Release\") { exit }\n& $env:CustomNuGetPath push $env:Build_StagingDirectory\\IndexedSymbolPackages\\*.nupkg $ApiKey -Source $env:MyGetFeedUrl -Timeout 3600",
+ "inlineScript": "param($ApiKey, $ConfigurationGroup)\nif ($ConfigurationGroup -ne \"Release\") { exit }\nif ($env:SourceBranch.StartsWith(\"release/\")) { exit }\n& $env:CustomNuGetPath push $env:Build_StagingDirectory\\IndexedSymbolPackages\\*.nupkg $ApiKey -Source $env:MyGetFeedUrl -Timeout 3600",
"workingFolder": "",
"failOnStandardError": "true"
}
@@ -277,7 +277,7 @@
"detailedLog": "false",
"usePat": "false",
"retentionDays": "",
- "dropMetadataContainerName": "DropMetadata"
+ "dropMetadataContainerName": "Drop-OfficialBuildId"
}
},
{
@@ -300,26 +300,7 @@
"detailedLog": "false",
"usePat": "false",
"retentionDays": "",
- "dropMetadataContainerName": "DropMetadata"
- }
- },
- {
- "enabled": true,
- "continueOnError": false,
- "alwaysRun": true,
- "displayName": "Copy Publish Artifact: PublishLogs",
- "timeoutInMinutes": 0,
- "task": {
- "id": "1d341bb0-2106-458c-8422-d00bcea6512a",
- "versionSpec": "1.*",
- "definitionType": "task"
- },
- "inputs": {
- "CopyRoot": "",
- "Contents": "$(Pipeline.SourcesDirectory)\\*.log",
- "ArtifactName": "PublishLogs",
- "ArtifactType": "Container",
- "TargetPath": "\\\\my\\share\\$(Build.DefinitionName)\\$(Build.BuildNumber)"
+ "dropMetadataContainerName": "Drop-BuildNumber"
}
},
{
diff --git a/buildpipeline/Dotnet-CoreClr-Trusted-BuildTests.json b/buildpipeline/Dotnet-CoreClr-Trusted-BuildTests.json
index 3defd10..f7b795c 100644
--- a/buildpipeline/Dotnet-CoreClr-Trusted-BuildTests.json
+++ b/buildpipeline/Dotnet-CoreClr-Trusted-BuildTests.json
@@ -41,7 +41,7 @@
"enabled": true,
"continueOnError": true,
"alwaysRun": false,
- "displayName": "Run sync.cmd",
+ "displayName": "Sync test native binaries",
"timeoutInMinutes": 0,
"task": {
"id": "d9bafed4-0b18-4f58-968d-86655b4d2ce9",
@@ -59,6 +59,60 @@
"enabled": true,
"continueOnError": false,
"alwaysRun": false,
+ "displayName": "Sync packages",
+ "timeoutInMinutes": 0,
+ "task": {
+ "id": "d9bafed4-0b18-4f58-968d-86655b4d2ce9",
+ "versionSpec": "1.*",
+ "definitionType": "task"
+ },
+ "inputs": {
+ "filename": "sync.cmd",
+ "arguments": "-ab -AzureAccount=$(CloudDropAccountName) -AzureToken=$(CloudDropAccessToken) -Container=$(Label) -BlobNamePrefix=$(PB_BuildType)/pkg/Microsoft",
+ "workingFolder": "",
+ "failOnStandardError": "false"
+ }
+ },
+ {
+ "enabled": true,
+ "continueOnError": false,
+ "alwaysRun": false,
+ "displayName": "Sync runtime packages",
+ "timeoutInMinutes": 0,
+ "task": {
+ "id": "d9bafed4-0b18-4f58-968d-86655b4d2ce9",
+ "versionSpec": "1.*",
+ "definitionType": "task"
+ },
+ "inputs": {
+ "filename": "sync.cmd",
+ "arguments": "-ab -AzureAccount=$(CloudDropAccountName) -AzureToken=$(CloudDropAccessToken) -Container=$(Label) -BlobNamePrefix=$(PB_BuildType)/pkg/runtime",
+ "workingFolder": "",
+ "failOnStandardError": "false"
+ }
+ },
+ {
+ "enabled": true,
+ "continueOnError": false,
+ "alwaysRun": false,
+ "displayName": "Generate version props file",
+ "timeoutInMinutes": 0,
+ "task": {
+ "id": "d9bafed4-0b18-4f58-968d-86655b4d2ce9",
+ "versionSpec": "1.*",
+ "definitionType": "task"
+ },
+ "inputs": {
+ "filename": "msbuild",
+ "arguments": "createVersionFile.proj /p:OfficialBuildId=$(OfficialBuildId)",
+ "workingFolder": "src",
+ "failOnStandardError": "false"
+ }
+ },
+ {
+ "enabled": true,
+ "continueOnError": false,
+ "alwaysRun": false,
"displayName": "Run build-test.cmd",
"timeoutInMinutes": 0,
"task": {
@@ -68,7 +122,7 @@
},
"inputs": {
"filename": "build-test.cmd",
- "arguments": "$(PB_BuildType) $(Architecture) buildagainstpackages runtimeid $(Rid) $(TargetsNonWindowsArg)$(CrossgenArg)-OfficialBuildId=$(OfficialBuildId) -Priority=$(Priority)",
+ "arguments": "$(PB_BuildType) $(Architecture) buildagainstpackages runtimeid $(Rid) $(TargetsNonWindowsArg)$(CrossgenArg)-OfficialBuildId=$(OfficialBuildId) -OverwriteCoreClrPackageVersion -Priority=$(Priority)",
"workingFolder": "",
"failOnStandardError": "false"
}
@@ -86,7 +140,7 @@
},
"inputs": {
"filename": "msbuild",
- "arguments": "helixpublish.proj /p:CloudDropAccessToken=$(CloudDropAccessToken) /p:CloudDropAccountName=$(CloudDropAccountName) /p:ContainerName=$(PB_ContainerName) /p:Platform=$(Architecture) /p:BuildType=$(PB_BuildType) /p:CloudResultsAccountName=$(CloudResultsAccountName) /p:CloudResultsAccessToken=$(CloudResultsAccessToken) /p:TargetsWindows=$(TargetsWindows) /p:OverwriteOnUpload=true /p:Rid=$(Rid) /p:TargetQueues=\"$(TargetQueues)\" /p:TestProduct=$(TestProduct) /p:Branch=$(HelixBranch) /p:HelixApiAccessKey=$(HelixApiAccessKey) /p:HelixApiEndpoint=$(HelixApiEndpoint) /p:FilterToOSGroup=$(FilterToOSGroup) /p:FilterToTestTFM=$(FilterToTestTFM) /p:TimeoutInSeconds=1800 /p:HelixJobType=$(HelixJobType) /fileloggerparameters:Verbosity=diag;LogFile=helix.log",
+ "arguments": "helixpublish.proj /p:CloudDropAccessToken=$(CloudDropAccessToken) /p:CloudDropAccountName=$(CloudDropAccountName) /p:ContainerName=$(PB_ContainerName) /p:Platform=$(Architecture) /p:BuildType=$(PB_BuildType) /p:CloudResultsAccountName=$(CloudResultsAccountName) /p:CloudResultsAccessToken=$(CloudResultsAccessToken) /p:TargetsWindows=$(TargetsWindows) /p:OverwriteOnUpload=true /p:Rid=$(Rid) /p:TargetQueues=\"$(TargetQueues)\" /p:TestProduct=$(TestProduct) /p:Branch=$(SourceBranch) /p:HelixApiAccessKey=$(HelixApiAccessKey) /p:HelixApiEndpoint=$(HelixApiEndpoint) /p:FilterToOSGroup=$(FilterToOSGroup) /p:FilterToTestTFM=$(FilterToTestTFM) /p:TimeoutInSeconds=1800 /p:HelixJobType=$(HelixJobType) /fileloggerparameters:Verbosity=diag;LogFile=helix.log",
"workingFolder": "tests",
"failOnStandardError": "false"
}
@@ -204,8 +258,8 @@
"TestProduct": {
"value": "coreclr"
},
- "HelixBranch": {
- "value": "master"
+ "SourceBranch": {
+ "value": "release/2.0.0"
},
"HelixApiAccessKey": {
"value": null,
@@ -294,4 +348,4 @@
"state": "wellFormed",
"revision": 418097633
}
-} \ No newline at end of file
+}
diff --git a/buildpipeline/pipelines.json b/buildpipeline/pipelines.json
index 5714717..c5e98eb 100644
--- a/buildpipeline/pipelines.json
+++ b/buildpipeline/pipelines.json
@@ -3,7 +3,8 @@
"Definitions": {
"Path": ".",
"Type": "VSTS",
- "BaseUrl": "https://devdiv.visualstudio.com/DefaultCollection"
+ "BaseUrl": "https://devdiv.visualstudio.com/DefaultCollection",
+ "SkipBranchAndVersionOverrides": "false"
},
"DefinitionGroups": [
{
@@ -12,99 +13,7 @@
{
"Name": "DotNet-CoreClr-Trusted-Linux",
"Parameters": {
- "DockerTag": "debian82_prereqs_2",
- "Rid": "debian.8"
- },
- "ReportingParameters": {
- "OperatingSystem": "Debian 8.2",
- "Type": "build/product/",
- "Architecture": "x64",
- "PB_BuildType": null
- }
- },
- {
- "Name": "DotNet-CoreClr-Trusted-Linux",
- "Parameters": {
- "DockerTag": "rhel7_prereqs_2",
- "Rid": "rhel.7"
- },
- "ReportingParameters": {
- "OperatingSystem": "RedHat 7",
- "Type": "build/product/",
- "Architecture": "x64",
- "PB_BuildType": null
- }
- },
- {
- "Name": "DotNet-CoreClr-Trusted-Linux",
- "Parameters": {
- "DockerTag": "ubuntu1404_prereqs_v3",
- "Rid": "ubuntu.14.04"
- },
- "ReportingParameters": {
- "OperatingSystem": "Ubuntu 14.04",
- "Type": "build/product/",
- "Architecture": "x64",
- "PB_BuildType": null
- }
- },
- {
- "Name": "DotNet-CoreClr-Trusted-Linux",
- "Parameters": {
- "DockerTag": "ubuntu1604_prereqs",
- "Rid": "ubuntu.16.04"
- },
- "ReportingParameters": {
- "OperatingSystem": "Ubuntu 16.04",
- "Type": "build/product/",
- "Architecture": "x64",
- "PB_BuildType": null
- }
- },
- {
- "Name": "DotNet-CoreClr-Trusted-Linux",
- "Parameters": {
- "DockerTag": "ubuntu1610_prereqs_v2",
- "Rid": "ubuntu.16.10"
- },
- "ReportingParameters": {
- "OperatingSystem": "Ubuntu 16.10",
- "Type": "build/product/",
- "Architecture": "x64",
- "PB_BuildType": null
- }
- },
- {
- "Name": "DotNet-CoreClr-Trusted-Linux",
- "Parameters": {
- "DockerTag": "fedora24_prereqs_v4",
- "Rid": "fedora.24"
- },
- "ReportingParameters": {
- "OperatingSystem": "Fedora 24",
- "Type": "build/product/",
- "Architecture": "x64",
- "PB_BuildType": null
- }
- },
- {
- "Name": "DotNet-CoreClr-Trusted-Linux",
- "Parameters": {
- "DockerTag": "opensuse421_prereqs_v3",
- "Rid": "opensuse.42.1"
- },
- "ReportingParameters": {
- "OperatingSystem": "openSUSE 42.1",
- "Type": "build/product/",
- "Architecture": "x64",
- "PB_BuildType": null
- }
- },
- {
- "Name": "DotNet-CoreClr-Trusted-Linux",
- "Parameters": {
"DockerTag": "rhel7_prereqs_2",
- "portableBuild": "-portable",
"Rid": "linux"
},
"ReportingParameters": {
@@ -117,20 +26,7 @@
{
"Name": "DotNet-CoreClr-Trusted-Mac",
"Parameters": {
- "Rid": "osx.10.12"
- },
- "ReportingParameters": {
- "OperatingSystem": "OSX 10.12",
- "Type": "build/product/",
- "Architecture": "x64",
- "PB_BuildType": null
- }
- },
- {
- "Name": "DotNet-CoreClr-Trusted-Mac",
- "Parameters": {
- "Rid": "osx",
- "portableBuild": "-portable"
+ "Rid": "osx"
},
"ReportingParameters": {
"OperatingSystem": "OSX",
@@ -148,19 +44,6 @@
"ReportingParameters": {
"OperatingSystem": "Windows",
"Type": "build/product/",
- "Architecture": "x64",
- "PB_BuildType": null
- }
- },
- {
- "Name": "DotNet-CoreClr-Trusted-Windows",
- "Parameters": {
- "Architecture": "x64",
- "portableBuild": "-portable"
- },
- "ReportingParameters": {
- "OperatingSystem": "Windows",
- "Type": "build/product/",
"SubType" : "PortableBuild",
"Architecture": "x64",
"PB_BuildType": null
@@ -174,19 +57,6 @@
"ReportingParameters": {
"OperatingSystem": "Windows",
"Type": "build/product/",
- "Architecture": "arm64",
- "PB_BuildType": null
- }
- },
- {
- "Name": "DotNet-CoreClr-Trusted-Windows",
- "Parameters": {
- "Architecture": "arm64",
- "portableBuild": "-portable"
- },
- "ReportingParameters": {
- "OperatingSystem": "Windows",
- "Type": "build/product/",
"SubType" : "PortableBuild",
"Architecture": "arm64",
"PB_BuildType": null
@@ -200,19 +70,6 @@
"ReportingParameters": {
"OperatingSystem": "Windows",
"Type": "build/product/",
- "Architecture": "arm",
- "PB_BuildType": null
- }
- },
- {
- "Name": "DotNet-CoreClr-Trusted-Windows",
- "Parameters": {
- "Architecture": "arm",
- "portableBuild": "-portable"
- },
- "ReportingParameters": {
- "OperatingSystem": "Windows",
- "Type": "build/product/",
"SubType" : "PortableBuild",
"Architecture": "arm",
"PB_BuildType": null
@@ -220,17 +77,8 @@
},
{
"Name": "DotNet-CoreClr-Trusted-Windows-x86",
- "ReportingParameters": {
- "OperatingSystem": "Windows",
- "Type": "build/product/",
- "Architecture": "x86",
- "PB_BuildType": null
- }
- },
- {
- "Name": "DotNet-CoreClr-Trusted-Windows-x86",
"Parameters": {
- "portableBuild": "-portable"
+ "Architecture": "x86"
},
"ReportingParameters": {
"OperatingSystem": "Windows",
@@ -250,23 +98,7 @@
"Parameters": {
"DockerTag": "ubuntu-14.04-cross-0cd4667-20172211042239",
"Architecture": "arm",
- "Rid": "ubuntu.14.04"
- },
- "ReportingParameters": {
- "OperatingSystem": "Ubuntu 14.04",
- "SubType": "CrossBuild",
- "Type": "build/product/",
- "Architecture": "arm",
- "PB_BuildType": null
- }
- },
- {
- "Name": "DotNet-CoreClr-Trusted-Linux-Crossbuild",
- "Parameters": {
- "DockerTag": "ubuntu-14.04-cross-0cd4667-20172211042239",
- "Architecture": "arm",
- "portableBuild": "-portable",
- "Rid": "ubuntu.14.04"
+ "Rid": "linux"
},
"ReportingParameters": {
"OperatingSystem": "Linux",
@@ -275,21 +107,6 @@
"Architecture": "arm",
"PB_BuildType": null
}
- },
- {
- "Name": "DotNet-CoreClr-Trusted-Linux-Crossbuild",
- "Parameters": {
- "DockerTag": "ubuntu-16.04-cross-ef0ac75-20175511035548",
- "Architecture": "arm",
- "Rid": "ubuntu.16.04"
- },
- "ReportingParameters": {
- "OperatingSystem": "Ubuntu 16.04",
- "SubType": "CrossBuild",
- "Type": "build/product/",
- "Architecture": "arm",
- "PB_BuildType": null
- }
}
]
}
@@ -396,6 +213,7 @@
"Definitions": [
{
"Name": "DotNet-Trusted-Publish",
+ "SkipBranchAndVersionOverrides": "true",
"Parameters": {
"VstsRepositoryName": "DotNet-CoreCLR-Trusted",
"GitHubRepositoryName": "coreclr",
@@ -425,6 +243,7 @@
"Definitions": [
{
"Name": "DotNet-Trusted-Publish",
+ "SkipBranchAndVersionOverrides": "true",
"Parameters": {
"VstsRepositoryName": "DotNet-CoreCLR-Trusted",
"GitHubRepositoryName": "coreclr"
@@ -442,6 +261,32 @@
]
},
{
+ "Name": "Publish Symbols - Release",
+ "Parameters": {
+ "TreatWarningsAsErrors": "false"
+ },
+ "BuildParameters": {
+ "PB_BuildType": "Release"
+ },
+ "Definitions": [
+ {
+ "Name": "DotNet-Trusted-Publish-Symbols",
+ "SkipBranchAndVersionOverrides": "true",
+ "Parameters": {
+ },
+ "ReportingParameters": {
+ "TaskName": "Symbol Publish",
+ "Type": "build/publish/",
+ "ConfigurationGroup": "Release - Publish Symbols"
+ }
+ }
+ ],
+ "DependsOn": [
+ "Trusted-All-Release",
+ "Trusted-Crossbuild-Release"
+ ]
+ },
+ {
"Name": "Publish Packages to Drop - Checked",
"Parameters": {
"TreatWarningsAsErrors": "false"
@@ -452,6 +297,7 @@
"Definitions": [
{
"Name": "DotNet-Trusted-Publish",
+ "SkipBranchAndVersionOverrides": "true",
"Parameters": {
"VstsRepositoryName": "DotNet-CoreCLR-Trusted",
"GitHubRepositoryName": "coreclr"
diff --git a/clr.coreclr.props b/clr.coreclr.props
index 5251eab..059fb3a 100644
--- a/clr.coreclr.props
+++ b/clr.coreclr.props
@@ -47,7 +47,7 @@
<FeatureRandomizedStringHashing>true</FeatureRandomizedStringHashing>
<!-- The rejit feature is available only on supported architectures (x86 & x64) -->
<FeatureReJIT Condition="('$(TargetArch)' == 'i386') or ('$(TargetArch)' == 'amd64')">true</FeatureReJIT>
- <FeatureManagedEtw>true</FeatureManagedEtw>
+ <FeatureManagedEtw>false</FeatureManagedEtw>
<FeatureManagedEtwChannels>true</FeatureManagedEtwChannels>
<BinderDebugLog Condition="'$(_BuildType)'=='dbg'">true</BinderDebugLog>
<FeatureAppX>true</FeatureAppX>
@@ -76,15 +76,20 @@
<FeatureCominterop>false</FeatureCominterop>
<FeatureCominteropUnmanagedActivation>false</FeatureCominteropUnmanagedActivation>
<FeatureCominteropWinRTManagedActivation>false</FeatureCominteropWinRTManagedActivation>
- <FeatureManagedEtw>false</FeatureManagedEtw>
<FeatureCoreFxGlobalization>true</FeatureCoreFxGlobalization>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetsWindows)' == 'true'">
<FeatureArrayStubAsIL Condition="('$(TargetArch)' == 'arm') or ('$(TargetArch)' == 'amd64') or ('$(TargetArch)' == 'arm64')">true</FeatureArrayStubAsIL>
+ <FeatureManagedEtw>true</FeatureManagedEtw>
<FeatureStubsAsIL Condition="'$(TargetArch)' == 'arm64'">true</FeatureStubsAsIL>
<FeatureUseLcid>true</FeatureUseLcid>
<FeatureImplicitLongPath>true</FeatureImplicitLongPath>
</PropertyGroup>
+
+ <PropertyGroup Condition="'$(TargetsLinux)' == 'true'">
+ <FeatureManagedEtw>true</FeatureManagedEtw>
+ <FeaturePerfTracing>true</FeaturePerfTracing>
+ </PropertyGroup>
</Project>
diff --git a/clr.defines.targets b/clr.defines.targets
index 2f97c8d..df6a409 100644
--- a/clr.defines.targets
+++ b/clr.defines.targets
@@ -18,9 +18,9 @@
<DefineConstants Condition="'$(FeatureMacl)' == 'true'">$(DefineConstants);FEATURE_MACL</DefineConstants>
<DefineConstants Condition="'$(FeatureManagedEtw)' == 'true'">$(DefineConstants);FEATURE_MANAGED_ETW</DefineConstants>
<DefineConstants Condition="'$(FeatureManagedEtwChannels)' == 'true'">$(DefineConstants);FEATURE_MANAGED_ETW_CHANNELS</DefineConstants>
- <DefineConstants Condition="'$(FeatureNongenericCollections)' == 'true'">$(DefineConstants);FEATURE_NONGENERIC_COLLECTIONS</DefineConstants>
<DefineConstants Condition="'$(FeaturePal)' == 'true'">$(DefineConstants);FEATURE_PAL</DefineConstants>
<DefineConstants Condition="'$(FeaturePathCompat)' == 'true'">$(DefineConstants);FEATURE_PATHCOMPAT</DefineConstants>
+ <DefineConstants Condition="'$(FeaturePerfTracing)' == 'true'">$(DefineConstants);FEATURE_PERFTRACING</DefineConstants>
<DefineConstants Condition="'$(FeatureXplatEventSource)' == 'true'">$(DefineConstants);FEATURE_EVENTSOURCE_XPLAT</DefineConstants>
<DefineConstants Condition="'$(FeatureRandomizedStringHashing)' == 'true'">$(DefineConstants);FEATURE_RANDOMIZED_STRING_HASHING</DefineConstants>
<DefineConstants Condition="'$(FeatureSortTables)' == 'true'">$(DefineConstants);FEATURE_SORT_TABLES</DefineConstants>
diff --git a/clrdefinitions.cmake b/clrdefinitions.cmake
index 838be56..6db2b24 100644
--- a/clrdefinitions.cmake
+++ b/clrdefinitions.cmake
@@ -1,9 +1,3 @@
-if(WIN32 AND CLR_CMAKE_TARGET_ARCH_I386 AND BUILD_JIT32)
- set(CLR_BUILD_JIT32 1)
-else()
- set(CLR_BUILD_JIT32 0)
-endif()
-
include(clrfeatures.cmake)
if (CLR_CMAKE_TARGET_ARCH_AMD64)
@@ -117,7 +111,9 @@ endif(FEATURE_DBGIPC)
if(FEATURE_EVENT_TRACE)
add_definitions(-DFEATURE_EVENT_TRACE=1)
endif(FEATURE_EVENT_TRACE)
-add_definitions(-DFEATURE_PERFTRACING)
+if(CLR_CMAKE_PLATFORM_LINUX)
+ add_definitions(-DFEATURE_PERFTRACING)
+endif(CLR_CMAKE_PLATFORM_LINUX)
if(CLR_CMAKE_PLATFORM_UNIX)
add_definitions(-DFEATURE_EVENTSOURCE_XPLAT=1)
endif(CLR_CMAKE_PLATFORM_UNIX)
@@ -139,15 +135,18 @@ if(FEATURE_INTERPRETER)
endif(FEATURE_INTERPRETER)
add_definitions(-DFEATURE_ISYM_READER)
add_definitions(-DFEATURE_LOADER_OPTIMIZATION)
-if (NOT CLR_CMAKE_PLATFORM_UNIX)
+if (CLR_CMAKE_PLATFORM_LINUX OR WIN32)
add_definitions(-DFEATURE_MANAGED_ETW)
-endif(NOT CLR_CMAKE_PLATFORM_UNIX)
+endif(CLR_CMAKE_PLATFORM_LINUX OR WIN32)
add_definitions(-DFEATURE_MANAGED_ETW_CHANNELS)
if(FEATURE_MERGE_JIT_AND_ENGINE)
add_definitions(-DFEATURE_MERGE_JIT_AND_ENGINE)
endif(FEATURE_MERGE_JIT_AND_ENGINE)
add_definitions(-DFEATURE_MULTICOREJIT)
+if (FEATURE_NI_BIND_FALLBACK)
+ add_definitions(-DFEATURE_NI_BIND_FALLBACK)
+endif(FEATURE_NI_BIND_FALLBACK)
if(CLR_CMAKE_PLATFORM_UNIX)
add_definitions(-DFEATURE_PAL)
add_definitions(-DFEATURE_PAL_SXS)
@@ -183,10 +182,10 @@ if(CLR_CMAKE_PLATFORM_UNIX_AMD64)
add_definitions(-DFEATURE_UNIX_AMD64_STRUCT_PASSING)
endif (CLR_CMAKE_PLATFORM_UNIX_AMD64)
add_definitions(-DFEATURE_USE_ASM_GC_WRITE_BARRIERS)
-if(CLR_CMAKE_PLATFORM_ARCH_AMD64 AND NOT WIN32)
+if((CLR_CMAKE_PLATFORM_ARCH_AMD64 OR CLR_CMAKE_PLATFORM_ARCH_ARM64) AND NOT WIN32)
add_definitions(-DFEATURE_MANUALLY_MANAGED_CARD_BUNDLES)
add_definitions(-DFEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP)
-endif(CLR_CMAKE_PLATFORM_ARCH_AMD64 AND NOT WIN32)
+endif((CLR_CMAKE_PLATFORM_ARCH_AMD64 OR CLR_CMAKE_PLATFORM_ARCH_ARM64) AND NOT WIN32)
if(WIN32)
add_definitions(-DFEATURE_VERSIONING_LOG)
endif(WIN32)
diff --git a/clrfeatures.cmake b/clrfeatures.cmake
index 9991b60..f047c91 100644
--- a/clrfeatures.cmake
+++ b/clrfeatures.cmake
@@ -25,3 +25,11 @@ endif(NOT DEFINED FEATURE_DBGIPC)
if(NOT DEFINED FEATURE_INTERPRETER)
set(FEATURE_INTERPRETER 0)
endif(NOT DEFINED FEATURE_INTERPRETER)
+
+if(NOT WIN32)
+ if(NOT DEFINED FEATURE_NI_BIND_FALLBACK)
+ if(NOT CLR_CMAKE_TARGET_ARCH_AMD64 AND NOT CLR_CMAKE_TARGET_ARCH_ARM64)
+ set(FEATURE_NI_BIND_FALLBACK 1)
+ endif()
+ endif(NOT DEFINED FEATURE_NI_BIND_FALLBACK)
+endif(NOT WIN32)
diff --git a/config.json b/config.json
index c975171..5011de3 100644
--- a/config.json
+++ b/config.json
@@ -30,6 +30,12 @@
"values": [],
"defaultValue": ""
},
+ "__BlobNamePrefix": {
+ "description": "Blob Prefix for Azure download.",
+ "valueType": "property",
+ "values": [],
+ "defaultValue": ""
+ },
"MsBuildFileLogging": {
"description": "MsBuild logging options.",
"valueType": "passThrough",
@@ -174,6 +180,12 @@
"values": [],
"defaultValue": ""
},
+ "OverwriteCoreClrPackageVersion": {
+ "description": "Sets the property specifying to overwrite CoreClr Package version using OfficialBuildId",
+ "valueType": "property",
+ "values": [ true, false ],
+ "defaultValue": true
+ },
"OfficialBuildId": {
"description": "Official Build Id.",
"valueType": "property",
@@ -225,8 +237,8 @@
"PortableBuild": {
"description": "Indicates if this is a portable build.",
"valueType": "property",
- "values": [ "0", "1"],
- "defaultValue": "0"
+ "values": [ "false", "true"],
+ "defaultValue": "true"
},
"Rebuild": {
"description": "Specifies rebuild target.",
@@ -270,12 +282,6 @@
"values": [],
"defaultValue": ""
},
- "IlasmRoundTrip": {
- "description": "Sets ilasm round trip property.",
- "valueType": "property",
- "values": [ true, false ],
- "defaultValue": true
- },
"CreateTestOverlay": {
"description": "Runs CreateTestOverlay target.",
"valueType": "target",
@@ -354,12 +360,6 @@
"values": [ "debian.8-x64", "fedora.24-x64", "fedora.25-x64", "opensuse.42.1-x64", "osx.10.12-x64", "rhel.7-x64", "ubuntu.14.04-x64", "ubuntu.16.04-x64", "ubuntu.16.10-x64" ],
"defaultValue": "${__RuntimeId}"
},
- "UpdateDependencies": {
- "description": "MsBuild target that updates project.json dependencies.",
- "valueType": "target",
- "values": [],
- "defaultValue": ""
- },
"BatchRestorePackages": {
"description": "MsBuild target that restores the packages.",
"valueType": "target",
@@ -474,12 +474,6 @@
"RestoreDuringBuild": false
}
},
- "portable": {
- "description": "Triggers a portable build.",
- "settings": {
- "PortableBuild": "1"
- }
- },
"BuildTarget": {
"description": "Runs the build target.",
"settings": {
@@ -495,6 +489,7 @@
"MsBuildErr": "default",
"MsBuildEventLogging": "default",
"RestoreDefaultOptimizationDataPackage": "false",
+ "PortableBuild": "true",
"UsePartialNGENOptimization": "false"
}
}
@@ -548,6 +543,12 @@
"__Container": "default"
}
},
+ "blobNamePrefix": {
+ "description": "Blob Prefix to download from in Azure container.",
+ "settings": {
+ "__BlobNamePrefix": "default"
+ }
+ },
"runtimeId": {
"description": "Runtime ID of the binaries in the specified container.",
"settings": {
@@ -647,12 +648,6 @@
"__BuildArch": "default"
}
},
- "portable": {
- "description": "Triggers a portable build.",
- "settings": {
- "PortableBuild": "1"
- }
- },
"buildType": {
"description": "Specifies configuration to publish, can be Release, Debug or Checked.",
"settings": {
@@ -672,6 +667,7 @@
"__BuildOS": "default",
"MsBuildFileLogging": "/flp:v=detailed;Append;LogFile=build-packages.log",
"MsBuildEventLogging": "default",
+ "PortableBuild": "true",
"Project": "src/.nuget/packages.builds"
}
}
diff --git a/cross/armel/tizen-fetch.sh b/cross/armel/tizen-fetch.sh
index 1252199..a0fa72b 100755
--- a/cross/armel/tizen-fetch.sh
+++ b/cross/armel/tizen-fetch.sh
@@ -51,7 +51,7 @@ if [ ! -d $TMPDIR ]; then
mkdir -p $TMPDIR
fi
-TIZEN_URL=http://download.tizen.org/releases/weekly/tizen
+TIZEN_URL=http://download.tizen.org/releases/daily/tizen
BUILD_XML=build.xml
REPOMD_XML=repomd.xml
PRIMARY_XML=primary.xml
@@ -120,19 +120,21 @@ fetch_tizen_pkgs_init()
fetch_tizen_pkgs()
{
- PROFILE=$1
- PACKAGE_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]]/*[local-name()="location"]/@href)'
+ ARCH=$1
+ PACKAGE_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]][*[local-name()="arch"][text()="_ARCH_"]]/*[local-name()="location"]/@href)'
- PACKAGE_CHECKSUM_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]]/*[local-name()="checksum"]/text())'
+ PACKAGE_CHECKSUM_XPATH_TPL='string(//*[local-name()="metadata"]/*[local-name()="package"][*[local-name()="name"][text()="_PKG_"]][*[local-name()="arch"][text()="_ARCH_"]]/*[local-name()="checksum"]/text())'
for pkg in ${@:2}
do
Inform "Fetching... $pkg"
XPATH=${PACKAGE_XPATH_TPL/_PKG_/$pkg}
+ XPATH=${XPATH/_ARCH_/$ARCH}
Xpath_get $XPATH $TMP_PRIMARY
PKG_PATH=$XPATH_RESULT
XPATH=${PACKAGE_CHECKSUM_XPATH_TPL/_PKG_/$pkg}
+ XPATH=${XPATH/_ARCH_/$ARCH}
Xpath_get $XPATH $TMP_PRIMARY
CHECKSUM=$XPATH_RESULT
@@ -142,33 +144,33 @@ fetch_tizen_pkgs()
Debug "Download $PKG_URL to $PKG_PATH"
Fetch $PKG_URL $PKG_PATH true
-
+
echo "$CHECKSUM $PKG_PATH" | sha256sum -c - > /dev/null
if [ $? -ne 0 ]; then
Error "Fail to fetch $PKG_URL to $PKG_PATH"
Debug "Checksum = $CHECKSUM"
exit 1
fi
-
done
}
-Inform "Initialize arm base"
+Inform "Initialize base"
fetch_tizen_pkgs_init arm base
-Inform "fetch base common packages"
-fetch_tizen_pkgs base gcc glibc glibc-devel linux-glibc-devel
-Inform "fetch base coreclr packages"
-fetch_tizen_pkgs base lldb lldb-devel libuuid libuuid-devel libgcc libstdc++ libstdc++-devel
-Inform "fetch base corefx packages"
-fetch_tizen_pkgs base libcom_err libcom_err-devel zlib zlib-devel libopenssl libopenssl-devel
-
-Inform "initialize arm mobile"
-fetch_tizen_pkgs_init arm-wayland mobile
-Inform "fetch mobile common packages"
-fetch_tizen_pkgs mobile libicu-devel
-Inform "fetch mobile coreclr packages"
-fetch_tizen_pkgs mobile libunwind libunwind-devel tizen-release
-Inform "fetch mobile corefx packages"
-fetch_tizen_pkgs mobile gssdp gssdp-devel krb5 krb5-devel libcurl libcurl-devel
+Inform "fetch common packages"
+fetch_tizen_pkgs armv7l gcc glibc glibc-devel
+fetch_tizen_pkgs noarch linux-glibc-devel
+Inform "fetch coreclr packages"
+fetch_tizen_pkgs armv7l lldb lldb-devel libuuid libuuid-devel libgcc libstdc++ libstdc++-devel libunwind libunwind-devel
+Inform "fetch corefx packages"
+fetch_tizen_pkgs armv7l libcom_err libcom_err-devel zlib zlib-devel libopenssl libopenssl-devel
+
+Inform "Initialize unified"
+fetch_tizen_pkgs_init standard unified
+Inform "fetch common packages"
+fetch_tizen_pkgs armv7l libicu-devel
+Inform "fetch coreclr packages"
+fetch_tizen_pkgs armv7l tizen-release
+Inform "fetch corefx packages"
+fetch_tizen_pkgs armv7l gssdp gssdp-devel krb5 krb5-devel libcurl libcurl-devel
diff --git a/cross/armel/tizen/tizen.patch b/cross/armel/tizen/tizen.patch
index c92dc02..d223427 100644
--- a/cross/armel/tizen/tizen.patch
+++ b/cross/armel/tizen/tizen.patch
@@ -16,18 +16,3 @@ diff -u -r a/usr/lib/libpthread.so b/usr/lib/libpthread.so
OUTPUT_FORMAT(elf32-littlearm)
-GROUP ( /lib/libpthread.so.0 /usr/lib/libpthread_nonshared.a )
+GROUP ( libpthread.so.0 libpthread_nonshared.a )
-diff -u -r a/usr/lib/libpthread.so b/usr/lib/libpthread.so
---- a/etc/os-release 2016-10-17 23:39:36.000000000 +0900
-+++ b/etc/os-release 2017-01-05 14:34:39.099867682 +0900
-@@ -1,7 +1,7 @@
- NAME=Tizen
--VERSION="3.0.0 (Tizen3/Mobile)"
-+VERSION="4.0.0 (Tizen4/Mobile)"
- ID=tizen
--VERSION_ID=3.0.0
--PRETTY_NAME="Tizen 3.0.0 (Tizen3/Mobile)"
-+VERSION_ID=4.0.0
-+PRETTY_NAME="Tizen 4.0.0 (Tizen4/Mobile)"
- ANSI_COLOR="0;36"
--CPE_NAME="cpe:/o:tizen:tizen:3.0.0"
-+CPE_NAME="cpe:/o:tizen:tizen:4.0.0"
diff --git a/cross/armel/toolchain.cmake b/cross/armel/toolchain.cmake
index ae3bd7c..86e2306 100644
--- a/cross/armel/toolchain.cmake
+++ b/cross/armel/toolchain.cmake
@@ -16,7 +16,7 @@ set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} -target ${TOOLCHAIN}")
set(CROSS_LINK_FLAGS "${CROSS_LINK_FLAGS} --sysroot=${CROSS_ROOTFS}")
if("$ENV{__DistroRid}" MATCHES "tizen.*")
- set(TIZEN_TOOLCHAIN "armv7l-tizen-linux-gnueabi/4.9.2")
+ set(TIZEN_TOOLCHAIN "armv7l-tizen-linux-gnueabi/6.2.1")
include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/)
include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/armv7l-tizen-linux-gnueabi)
add_compile_options(-Wno-deprecated-declarations) # compile-time option
diff --git a/dependencies.props b/dependencies.props
index c06c465..8aada2c 100644
--- a/dependencies.props
+++ b/dependencies.props
@@ -1,25 +1,40 @@
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+ <PropertyGroup>
+ <!-- Central place to set the versions of all nuget packages produced in the repo -->
+ <PackageVersion Condition="'$(PackageVersion)' == ''">2.0.0</PackageVersion>
+
+ <!-- Set the boolean below to true to generate packages with stabilized versions -->
+ <StabilizePackageVersion Condition="'$(StabilizePackageVersion)' == ''">false</StabilizePackageVersion>
+ <StableVersion Condition="'$(StabilizePackageVersion)' == 'true' and '$(StableVersion)' == ''">$(PackageVersion)</StableVersion>
+
+ <PreReleaseLabel>preview2</PreReleaseLabel>
+ </PropertyGroup>
+
<!-- Source of truth for dependency tooling: the commit hash of the dotnet/versions master branch as of the last auto-upgrade. -->
<PropertyGroup>
- <CoreFxCurrentRef>947e90b41c30a1f0a906f8d996443233c2ceedf4</CoreFxCurrentRef>
- <CoreClrCurrentRef>947e90b41c30a1f0a906f8d996443233c2ceedf4</CoreClrCurrentRef>
+ <CoreFxCurrentRef>d4040dc6f74933eec9827d44e288c9cd15996a15</CoreFxCurrentRef>
+ <CoreClrCurrentRef>d4040dc6f74933eec9827d44e288c9cd15996a15</CoreClrCurrentRef>
</PropertyGroup>
<!-- Auto-upgraded properties for each build info dependency. -->
<PropertyGroup>
- <CoreFxExpectedPrerelease>preview1-25221-01</CoreFxExpectedPrerelease>
+ <CoreFxExpectedPrerelease>preview2-25331-01</CoreFxExpectedPrerelease>
</PropertyGroup>
<!-- Full package version strings that are used in other parts of the build. -->
<PropertyGroup>
- <CoreClrPackageVersion>2.0.0-preview1-25221-01</CoreClrPackageVersion>
+ <CoreClrPackageVersion>2.0.0-preview2-25330-02</CoreClrPackageVersion>
<XunitPackageVersion>2.2.0-beta2-build3300</XunitPackageVersion>
+ <XUnitConsoleNetCoreVersion>1.0.2-prerelease-00177</XUnitConsoleNetCoreVersion>
+ <XUnitPerformanceApiVersion>1.0.0-beta-build0007</XUnitPerformanceApiVersion>
+ <MicrosoftDiagnosticsTracingLibraryVersion>1.0.3-alpha-experimental</MicrosoftDiagnosticsTracingLibraryVersion>
</PropertyGroup>
<!-- Package dependency verification/auto-upgrade configuration. -->
<PropertyGroup>
<BaseDotNetBuildInfo>build-info/dotnet/</BaseDotNetBuildInfo>
- <DependencyBranch>master</DependencyBranch>
+ <DependencyBranch>release/2.0.0</DependencyBranch>
<CurrentRefXmlPath>$(MSBuildThisFileFullPath)</CurrentRefXmlPath>
</PropertyGroup>
@@ -72,8 +87,16 @@
<Version>1.0.0-alpha-build0040</Version>
</StaticDependency>
+ <XUnitPerformanceApiDependency Include="xunit.performance.api" />
+ <XUnitPerformanceApiDependency Include="xunit.performance.core" />
+ <XUnitPerformanceApiDependency Include="xunit.performance.execution" />
+ <XUnitPerformanceApiDependency Include="xunit.performance.metrics" />
+ <StaticDependency Include="@(XUnitPerformanceApiDependency)">
+ <Version>$(XUnitPerformanceApiVersion)</Version>
+ </StaticDependency>
+
<StaticDependency Include="xunit.console.netcore">
- <Version>1.0.2-prerelease-00177</Version>
+ <Version>$(XUnitConsoleNetCoreVersion)</Version>
</StaticDependency>
<DependencyBuildInfo Include="@(StaticDependency)">
diff --git a/dir.props b/dir.props
index 4968884..9668768 100644
--- a/dir.props
+++ b/dir.props
@@ -21,6 +21,12 @@
<RoslynPackageName>Microsoft.Net.ToolsetCompilers</RoslynPackageName>
</PropertyGroup>
+ <!-- Profile-based optimization data package versions -->
+ <PropertyGroup>
+ <PgoDataPackageVersion>2.0.0-release-20170531-3000</PgoDataPackageVersion>
+ <!--<IbcDataPackageVersion></IbcDataPackageVersion>-->
+ </PropertyGroup>
+
<!--
Switching to the .NET Core version of the BuildTools tasks seems to break numerous scenarios, such as VS intellisense and resource designer
as well as runnning the build on mono. Until we can get these sorted out we will continue using the .NET 4.5 version of the tasks.
@@ -78,6 +84,9 @@
<Platform Condition="'$(Platform)' == ''">$(BuildArch)</Platform>
<Platform Condition="'$(Platform)' == 'amd64'">x64</Platform>
+
+ <!-- Default to portable build if not explicitly set -->
+ <PortableBuild Condition="'$(PortableBuild)' == ''">true</PortableBuild>
</PropertyGroup>
<!-- Output paths -->
@@ -87,37 +96,9 @@
<OutputPath Condition="'$(OutputPath)' == ''">$(BinDir)</OutputPath>
</PropertyGroup>
- <Import Condition="Exists('$(ToolsDir)BuildVersion.targets')" Project="$(ToolsDir)BuildVersion.targets" />
-
<!-- Import Build tools common props file where repo-independent properties are found -->
<Import Condition="Exists('$(ToolsDir)Build.Common.props')" Project="$(ToolsDir)Build.Common.props" />
-
- <!-- Common nuget properties -->
- <PropertyGroup>
- <NuGetToolPath Condition="'$(NuGetToolPath)'==''">$(PackagesDir)NuGet.exe</NuGetToolPath>
- <NuGetConfigFile Condition="'$(NuGetConfigFile)'==''">$(SourceDir)NuGet.Config</NuGetConfigFile>
- <NuGetConfigCommandLine>-ConfigFile "$(NuGetConfigFile)"</NuGetConfigCommandLine>
-
- <NugetRestoreCommand>"$(NuGetToolPath)"</NugetRestoreCommand>
- <NugetRestoreCommand>$(NugetRestoreCommand) install</NugetRestoreCommand>
- <!-- Trim off the last slash so that nuget doesn't get confused and say there are illegal characters on
- the path. -->
- <NugetRestoreCommand>$(NugetRestoreCommand) -OutputDirectory "$(PackagesDir.TrimEnd('\\'))"</NugetRestoreCommand>
- <NugetRestoreCommand>$(NugetRestoreCommand) $(NuGetConfigCommandLine)</NugetRestoreCommand>
- <NugetRestoreCommand>$(NugetRestoreCommand) -Verbosity detailed</NugetRestoreCommand>
- <NugetRestoreCommand Condition="'$(OsEnvironment)'=='Unix'">mono $(NuGetRestoreCommand)</NugetRestoreCommand>
- </PropertyGroup>
-
- <PropertyGroup>
- <DotnetToolCommand Condition="'$(DotnetToolCommand)'=='' and '$(OsEnvironment)'!='Unix'">$(DotnetCliPath)dotnet.exe</DotnetToolCommand>
- <DotnetToolCommand Condition="'$(DotnetToolCommand)'=='' and '$(OsEnvironment)'=='Unix'">$(DotnetCliPath)dotnet</DotnetToolCommand>
-
- <DnuRestoreCommand>$(DnuRestoreCommand) "$(DotnetToolCommand)"</DnuRestoreCommand>
- <DnuRestoreCommand>$(DnuRestoreCommand) restore</DnuRestoreCommand>
- <DnuRestoreCommand>$(DnuRestoreCommand) --packages "$(PackagesDir.TrimEnd('\\'))"</DnuRestoreCommand>
- </PropertyGroup>
-
<!-- Setup common target properties that we use to conditionally include sources -->
<PropertyGroup>
<TargetsFreeBSD Condition="'$(BuildOS)' == 'FreeBSD'">true</TargetsFreeBSD>
@@ -138,25 +119,20 @@
<!-- Packaging properties -->
<PropertyGroup>
- <PreReleaseLabel>preview2</PreReleaseLabel>
+ <LicenseUrl>https://github.com/dotnet/coreclr/blob/master/LICENSE.TXT</LicenseUrl>
<PackageDescriptionFile>$(SourceDir).nuget/descriptions.json</PackageDescriptionFile>
- <PackageLicenseFile>$(SourceDir).nuget/dotnet_library_license.txt</PackageLicenseFile>
- <PackageThirdPartyNoticesFile>$(SourceDir).nuget/ThirdPartyNotices.txt</PackageThirdPartyNoticesFile>
+ <PackageLicenseFile>$(ProjectDir)LICENSE.TXT</PackageLicenseFile>
+ <PackageThirdPartyNoticesFile>$(ProjectDir)THIRD-PARTY-NOTICES.TXT</PackageThirdPartyNoticesFile>
+ <SyncInfoDirectory>$(BaseIntermediateOutputPath)</SyncInfoDirectory>
<!-- This should be kept in sync with package details in src/.nuget/init/project.json -->
- <RuntimeIdGraphDefinitionFile>$(PackagesDir)/Microsoft.NETCore.Platforms/1.0.2-beta-24224-02/runtime.json</RuntimeIdGraphDefinitionFile>
+ <RuntimeIdGraphDefinitionVersion>1.0.2-beta-24224-02</RuntimeIdGraphDefinitionVersion>
+ <RuntimeIdGraphDefinitionFile>$(PackagesDir)/microsoft.netcore.platforms/$(RuntimeIdGraphDefinitionVersion)/runtime.json</RuntimeIdGraphDefinitionFile>
<!-- This link should be updated for each release milestone, currently this points to 1.1.0-beta -->
<ReleaseNotes>https://go.microsoft.com/fwlink/?LinkID=799421</ReleaseNotes>
<ProjectUrl>https://dot.net</ProjectUrl>
-
- <!-- Central place to set the versions of all nuget packages produced in the repo -->
- <PackageVersion Condition="'$(PackageVersion)' == ''">2.0.0</PackageVersion>
-
- <!-- Set the boolean below to true to generate packages with stabilized versions -->
- <StabilizePackageVersion Condition="'$(StabilizePackageVersion)' == ''">false</StabilizePackageVersion>
- <StableVersion Condition="'$(StabilizePackageVersion)' == 'true' and '$(StableVersion)' == ''">$(PackageVersion)</StableVersion>
<!-- On Windows, MSbuild still runs against Desktop FX while it runs on .NET Core on non-Windows. this requires
pulling in different packaging dependencies.
@@ -198,6 +174,10 @@
<PackageIndex Include="$(PackageIndexFile)" />
</ItemGroup>
+ <PropertyGroup>
+ <BuildVersionFile>$(BaseIntermediateOutputPath)BuildVersion-$(OfficialBuildId).props</BuildVersionFile>
+ </PropertyGroup>
+
<!-- Use Roslyn Compilers to build -->
<Import Project="$(RoslynPropsFile)" Condition="'$(RunningOnUnix)'!='true' and Exists('$(RoslynPropsFile)') and '$(UseRoslynCompilers)'!='false'" />
<Import Project="$(RoslynPropsFile)" Condition="'$(RunningOnUnix)'=='true' and Exists('$(RoslynPropsFile)')" />
diff --git a/extract-from-json.py b/extract-from-json.py
deleted file mode 100755
index e432b2b..0000000
--- a/extract-from-json.py
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/python
-
-import argparse
-import json
-import sys
-
-def parse_args():
- parser = argparse.ArgumentParser(
- description="""Extracts information from a json file by navigating the JSON object using a
- sequence of property accessors and returning the JSON subtree, or the raw data, found
- at that location."""
- )
-
- parser.add_argument(
- '-f', '--file',
- metavar='<project.json>',
- help="Path to project.json file to parse",
- required=True,
- )
-
- parser.add_argument(
- 'property',
- metavar='property_name',
- help="""Name of property to extract using object notation.
- Pass multiple values to drill down into nested objects (in order).""",
- nargs='*',
- )
-
- parser.add_argument(
- '-r', '--raw',
- help="""Dumps the raw object found at the requested location.
- If omitted, returns a JSON formatted object instead.""",
- action='store_true',
- default=False
- )
-
- return parser.parse_args()
-
-def main():
- args = parse_args()
-
- with open(args.file) as json_file:
- selected_property = json.load(json_file)
-
- for prop in args.property:
- selected_property = selected_property[prop]
-
- if args.raw:
- print(selected_property)
- else:
- print(json.dumps(selected_property))
-
- return 0
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/functions.cmake b/functions.cmake
index cbcc70f..cf4d08f 100644
--- a/functions.cmake
+++ b/functions.cmake
@@ -86,7 +86,10 @@ function(preprocess_def_file inputFilename outputFilename)
PROPERTIES GENERATED TRUE)
endfunction()
-function(generate_exports_file inputFilename outputFilename)
+function(generate_exports_file)
+ set(INPUT_LIST ${ARGN})
+ list(GET INPUT_LIST -1 outputFilename)
+ list(REMOVE_AT INPUT_LIST -1)
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
set(AWK_SCRIPT generateexportedsymbols.awk)
@@ -96,8 +99,8 @@ function(generate_exports_file inputFilename outputFilename)
add_custom_command(
OUTPUT ${outputFilename}
- COMMAND ${AWK} -f ${CMAKE_SOURCE_DIR}/${AWK_SCRIPT} ${inputFilename} >${outputFilename}
- DEPENDS ${inputFilename} ${CMAKE_SOURCE_DIR}/${AWK_SCRIPT}
+ COMMAND ${AWK} -f ${CMAKE_SOURCE_DIR}/${AWK_SCRIPT} ${INPUT_LIST} >${outputFilename}
+ DEPENDS ${INPUT_LIST} ${CMAKE_SOURCE_DIR}/${AWK_SCRIPT}
COMMENT "Generating exports file ${outputFilename}"
)
set_source_files_properties(${outputFilename}
diff --git a/init-tools.cmd b/init-tools.cmd
index 8efc2f4..b69239b 100644
--- a/init-tools.cmd
+++ b/init-tools.cmd
@@ -2,20 +2,15 @@
setlocal
set INIT_TOOLS_LOG=%~dp0init-tools.log
-set PACKAGES_DIR=%~dp0packages\
-set TOOLRUNTIME_DIR=%~dp0Tools
-:: This is an isolated script that handles the download of dotnet binaries and shall be removed after bootstrap.ps1/sh refactor (dotnet/corefx#15427)
-set DOTNET_DOWNLOAD_PATH=%~dp0dotnet-download.ps1
+if [%PACKAGES_DIR%]==[] set PACKAGES_DIR=%~dp0packages\
+if [%TOOLRUNTIME_DIR%]==[] set TOOLRUNTIME_DIR=%~dp0Tools
set DOTNET_PATH=%TOOLRUNTIME_DIR%\dotnetcli\
-set DOTNET_CMD=%DOTNET_PATH%dotnet.exe
+if [%DOTNET_CMD%]==[] set DOTNET_CMD=%DOTNET_PATH%dotnet.exe
if [%BUILDTOOLS_SOURCE%]==[] set BUILDTOOLS_SOURCE=https://dotnet.myget.org/F/dotnet-buildtools/api/v3/index.json
set /P BUILDTOOLS_VERSION=< "%~dp0BuildToolsVersion.txt"
set BUILD_TOOLS_PATH=%PACKAGES_DIR%Microsoft.DotNet.BuildTools\%BUILDTOOLS_VERSION%\lib\
-set PROJECT_JSON_PATH=%TOOLRUNTIME_DIR%\%BUILDTOOLS_VERSION%
-set PROJECT_JSON_FILE=%PROJECT_JSON_PATH%\project.json
-set PROJECT_JSON_CONTENTS={ "dependencies": { "Microsoft.DotNet.BuildTools": "%BUILDTOOLS_VERSION%" , "Microsoft.DotNet.BuildTools.Coreclr": "1.0.4-prerelease"}, "frameworks": { "dnxcore50": { } } }
-set BUILD_TOOLS_SEMAPHORE=%PROJECT_JSON_PATH%\init-tools.completed0
-set TOOLS_INIT_RETURN_CODE=0
+set INIT_TOOLS_RESTORE_PROJECT=%~dp0init-tools.msbuild
+set BUILD_TOOLS_SEMAPHORE=%TOOLRUNTIME_DIR%\%BUILDTOOLS_VERSION%\init-tools.completed
:: if force option is specified then clean the tool runtime and build tools package directory to force it to get recreated
if [%1]==[force] (
@@ -26,7 +21,7 @@ if [%1]==[force] (
:: If sempahore exists do nothing
if exist "%BUILD_TOOLS_SEMAPHORE%" (
echo Tools are already initialized.
- goto :DONE
+ goto :EOF
)
if exist "%TOOLRUNTIME_DIR%" rmdir /S /Q "%TOOLRUNTIME_DIR%"
@@ -37,8 +32,6 @@ if NOT exist "%PACKAGES_DIR%NuGet.exe" (
powershell -NoProfile -ExecutionPolicy unrestricted -Command "(New-Object Net.WebClient).DownloadFile('https://www.nuget.org/nuget.exe', '%PACKAGES_DIR%NuGet.exe')
)
-if NOT exist "%PROJECT_JSON_PATH%" mkdir "%PROJECT_JSON_PATH%"
-echo %PROJECT_JSON_CONTENTS% > "%PROJECT_JSON_FILE%"
echo Running %0 > "%INIT_TOOLS_LOG%"
set /p DOTNET_VERSION=< "%~dp0DotnetCLIVersion.txt"
@@ -46,47 +39,39 @@ if exist "%DOTNET_CMD%" goto :afterdotnetrestore
echo Installing dotnet cli...
if NOT exist "%DOTNET_PATH%" mkdir "%DOTNET_PATH%"
-if [%PROCESSOR_ARCHITECTURE%]==[x86] (set DOTNET_ZIP_NAME=dotnet-dev-win-x86.%DOTNET_VERSION%.zip) else (set DOTNET_ZIP_NAME=dotnet-dev-win-x64.%DOTNET_VERSION%.zip)
-set DOTNET_REMOTE_PATH=https://dotnetcli.blob.core.windows.net/dotnet/preview/Binaries/%DOTNET_VERSION%/%DOTNET_ZIP_NAME%
+set DOTNET_ZIP_NAME=dotnet-dev-win-x64.%DOTNET_VERSION%.zip
+set DOTNET_REMOTE_PATH=https://dotnetcli.blob.core.windows.net/dotnet/Sdk/%DOTNET_VERSION%/%DOTNET_ZIP_NAME%
set DOTNET_LOCAL_PATH=%DOTNET_PATH%%DOTNET_ZIP_NAME%
echo Installing '%DOTNET_REMOTE_PATH%' to '%DOTNET_LOCAL_PATH%' >> "%INIT_TOOLS_LOG%"
-powershell -NoProfile -ExecutionPolicy unrestricted -File %DOTNET_DOWNLOAD_PATH% -DotnetRemotePath %DOTNET_REMOTE_PATH% -DotnetLocalPath %DOTNET_LOCAL_PATH% -DotnetPath %DOTNET_PATH% >> "%INIT_TOOLS_LOG%"
+powershell -NoProfile -ExecutionPolicy unrestricted -Command "$retryCount = 0; $success = $false; do { try { (New-Object Net.WebClient).DownloadFile('%DOTNET_REMOTE_PATH%', '%DOTNET_LOCAL_PATH%'); $success = $true; } catch { if ($retryCount -ge 6) { throw; } else { $retryCount++; Start-Sleep -Seconds (5 * $retryCount); } } } while ($success -eq $false); Add-Type -Assembly 'System.IO.Compression.FileSystem' -ErrorVariable AddTypeErrors; if ($AddTypeErrors.Count -eq 0) { [System.IO.Compression.ZipFile]::ExtractToDirectory('%DOTNET_LOCAL_PATH%', '%DOTNET_PATH%') } else { (New-Object -com shell.application).namespace('%DOTNET_PATH%').CopyHere((new-object -com shell.application).namespace('%DOTNET_LOCAL_PATH%').Items(),16) }" >> "%INIT_TOOLS_LOG%"
if NOT exist "%DOTNET_LOCAL_PATH%" (
- echo ERROR: Could not install dotnet cli correctly. See '%INIT_TOOLS_LOG%' for more details.
- set TOOLS_INIT_RETURN_CODE=1
- goto :DONE
+ echo ERROR: Could not install dotnet cli correctly. See '%INIT_TOOLS_LOG%' for more details. 1>&2
+ exit /b 1
)
:afterdotnetrestore
if exist "%BUILD_TOOLS_PATH%" goto :afterbuildtoolsrestore
echo Restoring BuildTools version %BUILDTOOLS_VERSION%...
-echo Running: "%DOTNET_CMD%" restore "%PROJECT_JSON_FILE%" --packages "%PACKAGES_DIR% " --source "%BUILDTOOLS_SOURCE%" >> "%INIT_TOOLS_LOG%"
-call "%DOTNET_CMD%" restore "%PROJECT_JSON_FILE%" --packages "%PACKAGES_DIR% " --source "%BUILDTOOLS_SOURCE%" >> "%INIT_TOOLS_LOG%"
+echo Running: "%DOTNET_CMD%" restore "%INIT_TOOLS_RESTORE_PROJECT%" --no-cache --packages %PACKAGES_DIR% --source "%BUILDTOOLS_SOURCE%" /p:BuildToolsPackageVersion=%BUILDTOOLS_VERSION% >> "%INIT_TOOLS_LOG%"
+call "%DOTNET_CMD%" restore "%INIT_TOOLS_RESTORE_PROJECT%" --no-cache --packages %PACKAGES_DIR% --source "%BUILDTOOLS_SOURCE%" /p:BuildToolsPackageVersion=%BUILDTOOLS_VERSION% >> "%INIT_TOOLS_LOG%"
if NOT exist "%BUILD_TOOLS_PATH%init-tools.cmd" (
- echo ERROR: Could not restore build tools correctly. See '%INIT_TOOLS_LOG%' for more details.
- set TOOLS_INIT_RETURN_CODE=1
- goto :DONE
+ echo ERROR: Could not restore build tools correctly. See '%INIT_TOOLS_LOG%' for more details. 1>&2
+ exit /b 1
)
:afterbuildtoolsrestore
-echo Initializing BuildTools ...
+echo Initializing BuildTools...
echo Running: "%BUILD_TOOLS_PATH%init-tools.cmd" "%~dp0" "%DOTNET_CMD%" "%TOOLRUNTIME_DIR%" >> "%INIT_TOOLS_LOG%"
call "%BUILD_TOOLS_PATH%init-tools.cmd" "%~dp0" "%DOTNET_CMD%" "%TOOLRUNTIME_DIR%" >> "%INIT_TOOLS_LOG%"
-
-echo Updating CLI NuGet Frameworks map...
-robocopy "%TOOLRUNTIME_DIR%" "%TOOLRUNTIME_DIR%\dotnetcli\sdk\%DOTNET_VERSION%" NuGet.Frameworks.dll /XO >> "%INIT_TOOLS_LOG%"
-set UPDATE_CLI_ERRORLEVEL=%ERRORLEVEL%
-if %UPDATE_CLI_ERRORLEVEL% GTR 1 (
- echo ERROR: Failed to update Nuget for CLI {Error level %UPDATE_CLI_ERRORLEVEL%}. Please check '%INIT_TOOLS_LOG%' for more details. 1>&2
- exit /b %UPDATE_CLI_ERRORLEVEL%
+set INIT_TOOLS_ERRORLEVEL=%ERRORLEVEL%
+if not [%INIT_TOOLS_ERRORLEVEL%]==[0] (
+ echo ERROR: An error occured when trying to initialize the tools. Please check '%INIT_TOOLS_LOG%' for more details. 1>&2
+ exit /b %INIT_TOOLS_ERRORLEVEL%
)
:: Create sempahore file
echo Done initializing tools.
echo Init-Tools.cmd completed for BuildTools Version: %BUILDTOOLS_VERSION% > "%BUILD_TOOLS_SEMAPHORE%"
-
-:DONE
-
-exit /b %TOOLS_INIT_RETURN_CODE%
+exit /b 0 \ No newline at end of file
diff --git a/init-tools.msbuild b/init-tools.msbuild
new file mode 100644
index 0000000..ff2a9c3
--- /dev/null
+++ b/init-tools.msbuild
@@ -0,0 +1,16 @@
+<Project Sdk="Microsoft.NET.Sdk">
+ <PropertyGroup>
+ <TargetFramework>netcoreapp1.0</TargetFramework>
+ <EnableDefaultItems>false</EnableDefaultItems>
+ <DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
+ <BaseIntermediateOutputPath>$(MSBuildThisFileDirectory)Tools/$(BuildToolsPackageVersion)</BaseIntermediateOutputPath>
+ </PropertyGroup>
+ <ItemGroup>
+ <PackageReference Include="Microsoft.DotNet.BuildTools">
+ <Version>$(BuildToolsPackageVersion)</Version>
+ </PackageReference>
+ <PackageReference Include="Microsoft.DotNet.BuildTools.Coreclr">
+ <Version>1.0.4-prerelease</Version>
+ </PackageReference>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/init-tools.sh b/init-tools.sh
index f965583..b676ba1 100755
--- a/init-tools.sh
+++ b/init-tools.sh
@@ -7,63 +7,17 @@ __TOOLRUNTIME_DIR=$__scriptpath/Tools
__DOTNET_PATH=$__TOOLRUNTIME_DIR/dotnetcli
__DOTNET_CMD=$__DOTNET_PATH/dotnet
if [ -z "$__BUILDTOOLS_SOURCE" ]; then __BUILDTOOLS_SOURCE=https://dotnet.myget.org/F/dotnet-buildtools/api/v3/index.json; fi
+export __BUILDTOOLS_USE_CSPROJ=true
__BUILD_TOOLS_PACKAGE_VERSION=$(cat $__scriptpath/BuildToolsVersion.txt)
__DOTNET_TOOLS_VERSION=$(cat $__scriptpath/DotnetCLIVersion.txt)
-__BUILD_TOOLS_PATH=$__PACKAGES_DIR/Microsoft.DotNet.BuildTools/$__BUILD_TOOLS_PACKAGE_VERSION/lib
-__PROJECT_JSON_PATH=$__TOOLRUNTIME_DIR/$__BUILD_TOOLS_PACKAGE_VERSION
-__PROJECT_JSON_FILE=$__PROJECT_JSON_PATH/project.json
-__PROJECT_JSON_CONTENTS="{ \"dependencies\": { \"Microsoft.DotNet.BuildTools\": \"$__BUILD_TOOLS_PACKAGE_VERSION\" }, \"frameworks\": { \"netcoreapp1.0\": { } } }"
-__INIT_TOOLS_DONE_MARKER=$__PROJECT_JSON_PATH/done
-
-# Extended version of platform detection logic from dotnet/cli/scripts/obtain/dotnet-install.sh 16692fc
-get_current_linux_name() {
- # Detect Distro
- if [ "$(cat /etc/os-release | grep -cim1 ubuntu)" -eq 1 ]; then
- if [ "$(cat /etc/os-release | grep -cim1 16.04)" -eq 1 ]; then
- echo "ubuntu.16.04"
- return 0
- fi
- if [ "$(cat /etc/os-release | grep -cim1 16.10)" -eq 1 ]; then
- echo "ubuntu.16.10"
- return 0
- fi
-
- echo "ubuntu"
- return 0
- elif [ "$(cat /etc/os-release | grep -cim1 centos)" -eq 1 ]; then
- echo "centos"
- return 0
- elif [ "$(cat /etc/os-release | grep -cim1 rhel)" -eq 1 ]; then
- echo "rhel"
- return 0
- elif [ "$(cat /etc/os-release | grep -cim1 debian)" -eq 1 ]; then
- echo "debian"
- return 0
- elif [ "$(cat /etc/os-release | grep -cim1 alpine)" -eq 1 ]; then
- echo "alpine"
- return 0
- elif [ "$(cat /etc/os-release | grep -cim1 fedora)" -eq 1 ]; then
- if [ "$(cat /etc/os-release | grep -cim1 24)" -eq 1 ]; then
- echo "fedora.24"
- return 0
- fi
- if [ "$(cat /etc/os-release | grep -cim1 25)" -eq 1 ]; then
- echo "fedora.25"
- return 0
- fi
- elif [ "$(cat /etc/os-release | grep -cim1 opensuse)" -eq 1 ]; then
- if [ "$(cat /etc/os-release | grep -cim1 42.1)" -eq 1 ]; then
- echo "opensuse.42.1"
- return 0
- fi
- fi
-
- # Cannot determine Linux distribution, assuming Ubuntu 14.04.
- echo "ubuntu"
- return 0
-}
+__BUILD_TOOLS_PATH=$__PACKAGES_DIR/microsoft.dotnet.buildtools/$__BUILD_TOOLS_PACKAGE_VERSION/lib
+__INIT_TOOLS_RESTORE_PROJECT=$__scriptpath/init-tools.msbuild
+__INIT_TOOLS_DONE_MARKER=$__TOOLRUNTIME_DIR/$__BUILD_TOOLS_PACKAGE_VERSION/done
if [ -z "$__DOTNET_PKG" ]; then
+ if [ "$(uname -m | grep "i[3456]86")" = "i686" ]; then
+ echo "Warning: build not supported on 32 bit Unix"
+ fi
OSName=$(uname -s)
case $OSName in
Darwin)
@@ -73,14 +27,14 @@ OSName=$(uname -s)
;;
Linux)
- __DOTNET_PKG="dotnet-dev-$(get_current_linux_name)-x64"
+ __DOTNET_PKG=dotnet-dev-linux-x64
OS=Linux
;;
*)
- echo "Unsupported OS '$OSName' detected. Downloading ubuntu-x64 tools."
+ echo "Unsupported OS '$OSName' detected. Downloading linux-x64 tools."
OS=Linux
- __DOTNET_PKG=dotnet-dev-ubuntu-x64
+ __DOTNET_PKG=dotnet-dev-linux-x64
;;
esac
fi
@@ -103,13 +57,14 @@ if [ ! -e $__INIT_TOOLS_DONE_MARKER ]; then
cp -r $DOTNET_TOOL_DIR/* $__DOTNET_PATH
else
echo "Installing dotnet cli..."
- __DOTNET_LOCATION="https://dotnetcli.blob.core.windows.net/dotnet/preview/Binaries/${__DOTNET_TOOLS_VERSION}/${__DOTNET_PKG}.${__DOTNET_TOOLS_VERSION}.tar.gz"
+ __DOTNET_LOCATION="https://dotnetcli.blob.core.windows.net/dotnet/Sdk/${__DOTNET_TOOLS_VERSION}/${__DOTNET_PKG}.${__DOTNET_TOOLS_VERSION}.tar.gz"
# curl has HTTPS CA trust-issues less often than wget, so lets try that first.
echo "Installing '${__DOTNET_LOCATION}' to '$__DOTNET_PATH/dotnet.tar'" >> $__init_tools_log
- if command -v curl > /dev/null; then
- curl --retry 10 -sSL --create-dirs -o $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION}
- else
+ which curl > /dev/null 2> /dev/null
+ if [ $? -ne 0 ]; then
wget -q -O $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION}
+ else
+ curl --retry 10 -sSL --create-dirs -o $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION}
fi
cd $__DOTNET_PATH
tar -xf $__DOTNET_PATH/dotnet.tar
@@ -128,18 +83,18 @@ if [ ! -e $__INIT_TOOLS_DONE_MARKER ]; then
echo "Copying $BUILD_TOOLS_TOOL_DIR to $__TOOLRUNTIME_DIR" >> $__init_tools_log
cp -r $BUILD_TOOLS_TOOL_DIR/* $__TOOLRUNTIME_DIR
else
- if [ ! -d "$__PROJECT_JSON_PATH" ]; then mkdir "$__PROJECT_JSON_PATH"; fi
- echo $__PROJECT_JSON_CONTENTS > "$__PROJECT_JSON_FILE"
-
if [ ! -e $__BUILD_TOOLS_PATH ]; then
echo "Restoring BuildTools version $__BUILD_TOOLS_PACKAGE_VERSION..."
- echo "Running: $__DOTNET_CMD restore \"$__PROJECT_JSON_FILE\" --no-cache --packages $__PACKAGES_DIR --source $__BUILDTOOLS_SOURCE" >> $__init_tools_log
- $__DOTNET_CMD restore "$__PROJECT_JSON_FILE" --no-cache --packages $__PACKAGES_DIR --source $__BUILDTOOLS_SOURCE >> $__init_tools_log
+ echo "Running: $__DOTNET_CMD restore \"$__INIT_TOOLS_RESTORE_PROJECT\" --no-cache --packages $__PACKAGES_DIR --source $__BUILDTOOLS_SOURCE /p:BuildToolsPackageVersion=$__BUILD_TOOLS_PACKAGE_VERSION" >> $__init_tools_log
+ $__DOTNET_CMD restore "$__INIT_TOOLS_RESTORE_PROJECT" --no-cache --packages $__PACKAGES_DIR --source $__BUILDTOOLS_SOURCE /p:BuildToolsPackageVersion=$__BUILD_TOOLS_PACKAGE_VERSION >> $__init_tools_log
if [ ! -e "$__BUILD_TOOLS_PATH/init-tools.sh" ]; then echo "ERROR: Could not restore build tools correctly. See '$__init_tools_log' for more details."1>&2; fi
fi
echo "Initializing BuildTools..."
echo "Running: $__BUILD_TOOLS_PATH/init-tools.sh $__scriptpath $__DOTNET_CMD $__TOOLRUNTIME_DIR" >> $__init_tools_log
+
+ # Executables restored with .NET Core 2.0 do not have executable permission flags. https://github.com/NuGet/Home/issues/4424
+ chmod +x $__BUILD_TOOLS_PATH/init-tools.sh
$__BUILD_TOOLS_PATH/init-tools.sh $__scriptpath $__DOTNET_CMD $__TOOLRUNTIME_DIR >> $__init_tools_log
if [ "$?" != "0" ]; then
echo "ERROR: An error occured when trying to initialize the tools. Please check '$__init_tools_log' for more details."1>&2
@@ -147,18 +102,16 @@ if [ ! -e $__INIT_TOOLS_DONE_MARKER ]; then
fi
fi
- if [ $__PATCH_CLI_NUGET_FRAMEWORKS -eq 1 ]; then
- echo "Updating CLI NuGet Frameworks map..."
- cp $__TOOLRUNTIME_DIR/NuGet.Frameworks.dll $__TOOLRUNTIME_DIR/dotnetcli/sdk/$__DOTNET_TOOLS_VERSION >> $__init_tools_log
- if [ "$?" != "0" ]; then
- echo "ERROR: An error occured when updating Nuget for CLI . Please check '$__init_tools_log' for more details."1>&2
- exit 1
- fi
- fi
+ echo "Making all .sh files executable under Tools."
+ # Executables restored with .NET Core 2.0 do not have executable permission flags. https://github.com/NuGet/Home/issues/4424
+ ls $__scriptpath/Tools/*.sh | xargs chmod +x
+ ls $__scriptpath/Tools/scripts/docker/*.sh | xargs chmod +x
+
+ Tools/crossgen.sh $__scriptpath/Tools
touch $__INIT_TOOLS_DONE_MARKER
echo "Done initializing tools."
else
echo "Tools are already initialized"
-fi
+fi \ No newline at end of file
diff --git a/netci.groovy b/netci.groovy
index 9e0339a..6a97cba 100755
--- a/netci.groovy
+++ b/netci.groovy
@@ -137,6 +137,7 @@ class Constants {
'gcsimulator',
'jitdiff',
'standalone_gc',
+ 'gc_reliability_framework',
'illink'] + r2rJitStressScenarios
def static configurationList = ['Debug', 'Checked', 'Release']
@@ -205,6 +206,14 @@ def static isJitDiff(def scenario) {
return (scenario == 'jitdiff')
}
+def static isGcReliabilityFramework(def scenario) {
+ return (scenario == 'gc_reliability_framework')
+}
+
+def static scenarioNeedsPri1Build(def scenario) {
+ return (scenario == 'pri1' || scenario == 'pri1r2r' || scenario == 'gcstress15_pri1r2r'|| scenario == 'coverage' || isGcReliabilityFramework(scenario))
+}
+
def static setTestJobTimeOut(newJob, scenario) {
if (isGCStressRelatedTesting(scenario)) {
Utilities.setJobTimeout(newJob, 4320)
@@ -227,6 +236,9 @@ def static setTestJobTimeOut(newJob, scenario) {
else if (isJitDiff(scenario)) {
Utilities.setJobTimeout(newJob, 240)
}
+ else if (isGcReliabilityFramework(scenario)) {
+ Utilities.setJobTimeout(newJob, 1440)
+ }
// Non-test jobs use the default timeout value.
}
@@ -497,6 +509,11 @@ def static addNonPRTriggers(def job, def branch, def isPR, def architecture, def
// addEmailPublisher(job, 'dotnetgctests@microsoft.com')
Utilities.addPeriodicTrigger(job, '@weekly')
break
+ case 'gc_reliability_framework':
+ assert (os == 'Ubuntu' || os == 'Windows_NT' || os == 'OSX10.12')
+ assert (configuration == 'Release' || configuration == 'Checked')
+ // Only triggered by phrase.
+ break
case 'ilrt':
assert !(os in bidailyCrossList)
// ILASM/ILDASM roundtrip one gets a daily build, and only for release
@@ -766,6 +783,16 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} GC Simulator", "(?i).*test\\W+${os}\\W+${configuration}\\W+${scenario}.*")
}
break
+ case 'standalone_gc':
+ if (configuration == 'Release' || configuration == 'Checked') {
+ Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Standalone GC", "(?i).*test\\W+${os}\\W+${configuration}\\W+${scenario}.*")
+ }
+ break
+ case 'gc_reliability_framework':
+ if (configuration == 'Release' || configuration == 'Checked') {
+ Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} GC Reliability Framework", "(?i).*test\\W+${os}\\W+${configuration}\\W+${scenario}.*")
+ }
+ break
case 'minopts':
case 'forcerelocs':
case 'jitstress1':
@@ -939,6 +966,11 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Standalone GC", "(?i).*test\\W+${os}\\W+${configuration}\\W+${scenario}.*")
}
break
+ case 'gc_reliability_framework':
+ if (configuration == 'Release' || configuration == 'Checked') {
+ Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} GC Reliability Framework", "(?i).*test\\W+${os}\\W+${configuration}\\W+${scenario}.*")
+ }
+ break
case 'minopts':
case 'forcerelocs':
case 'jitstress1':
@@ -1294,6 +1326,7 @@ def static calculateBuildCommands(def newJob, def scenario, def branch, def isPR
scenario == 'default' ||
scenario == 'r2r' ||
scenario == 'jitdiff' ||
+ scenario == 'ilrt' ||
scenario == 'illink' ||
Constants.r2rJitStressScenarios.indexOf(scenario) != -1) {
buildOpts += enableCorefxTesting ? ' skiptests' : ''
@@ -1306,14 +1339,9 @@ def static calculateBuildCommands(def newJob, def scenario, def branch, def isPR
// binaries are sent to a default directory whose name is about
// 35 characters long.
- else if (scenario == 'pri1' || scenario == 'pri1r2r' || scenario == 'gcstress15_pri1r2r'|| scenario == 'coverage') {
+ else if (scenarioNeedsPri1Build(scenario)) {
buildCommands += "set __TestIntermediateDir=int&&build.cmd ${lowerConfiguration} ${arch} ${buildOpts} -priority=1"
}
- else if (scenario == 'ilrt') {
- // First do the build with skiptests and then build the tests with ilasm roundtrip
- buildCommands += "build.cmd ${lowerConfiguration} ${arch} ${buildOpts} skiptests"
- buildCommands += "set __TestIntermediateDir=int&&build-test.cmd ${lowerConfiguration} ${arch} -ilasmroundtrip"
- }
else if (isLongGc(scenario)) {
buildCommands += "build.cmd ${lowerConfiguration} ${arch} ${buildOpts} skiptests"
buildCommands += "set __TestIntermediateDir=int&&build-test.cmd ${lowerConfiguration} ${arch}"
@@ -1343,6 +1371,7 @@ def static calculateBuildCommands(def newJob, def scenario, def branch, def isPR
def runjitmioptsStr = ''
def runjitforcerelocsStr = ''
def runjitdisasmStr = ''
+ def runilasmroundtripStr = ''
def gcstressStr = ''
def runtestArguments = ''
def gcTestArguments = ''
@@ -1402,6 +1431,11 @@ def static calculateBuildCommands(def newJob, def scenario, def branch, def isPR
runjitdisasmStr = 'jitdisasm crossgen'
}
+ if (scenario == 'ilrt')
+ {
+ runilasmroundtripStr = 'ilasmroundtrip'
+ }
+
if (isLongGc(scenario)) {
gcTestArguments = "${scenario} sequential"
}
@@ -1411,7 +1445,7 @@ def static calculateBuildCommands(def newJob, def scenario, def branch, def isPR
illinkArguments = "link %WORKSPACE%\\linker\\linker\\bin\\netcore_Release\\netcoreapp2.0\\win10-${arch}\\publish\\illink.exe"
}
- runtestArguments = "${lowerConfiguration} ${arch} ${gcstressStr} ${crossgenStr} ${runcrossgentestsStr} ${runjitstressStr} ${runjitstressregsStr} ${runjitmioptsStr} ${runjitforcerelocsStr} ${runjitdisasmStr} ${gcTestArguments} ${illinkArguments} collectdumps"
+ runtestArguments = "${lowerConfiguration} ${arch} ${gcstressStr} ${crossgenStr} ${runcrossgentestsStr} ${runjitstressStr} ${runjitstressregsStr} ${runjitmioptsStr} ${runjitforcerelocsStr} ${runjitdisasmStr} ${runilasmroundtripStr} ${gcTestArguments} ${illinkArguments} collectdumps"
if (Constants.jitStressModeScenarios.containsKey(scenario)) {
def stepScriptLocation = "%WORKSPACE%\\SetStressModes.bat"
@@ -1433,6 +1467,12 @@ def static calculateBuildCommands(def newJob, def scenario, def branch, def isPR
buildCommands += "%WORKSPACE%\\tests\\runtest.cmd ${runtestArguments} TestEnv ${stepScriptLocation}"
}
}
+ else if (isGcReliabilityFramework(scenario)) {
+ buildCommands += "tests\\runtest.cmd ${runtestArguments} GenerateLayoutOnly"
+ buildCommands += "tests\\scripts\\run-gc-reliability-framework.cmd ${arch} ${configuration}"
+ Utilities.addArchival(newJob, "stdout.txt")
+ Utilities.addArchival(newJob, "Logs/**")
+ }
else if (architecture == 'x64' || architecture == 'x86') {
buildCommands += "tests\\runtest.cmd ${runtestArguments}"
}
@@ -1505,7 +1545,7 @@ def static calculateBuildCommands(def newJob, def scenario, def branch, def isPR
Utilities.setJobTimeout(newJob, 240)
}
- buildCommands += "set __TestIntermediateDir=int&&build.cmd skiptests ${lowerConfiguration} ${architecture} toolset_dir C:\\ats2"
+ buildCommands += "set __TestIntermediateDir=int&&build.cmd ${lowerConfiguration} ${architecture} toolset_dir C:\\ats2 -priority=1"
// Test build and run are launched together.
buildCommands += "python tests\\scripts\\arm64_post_build.py -repo_root %WORKSPACE% -arch ${architecture} -build_type ${lowerConfiguration} -scenario ${scenario} -key_location C:\\tools\\key.txt"
//Utilities.addXUnitDotNETResults(newJob, 'bin/tests/testResults.xml')
@@ -1852,7 +1892,7 @@ combinedScenarios.each { scenario ->
if (os != 'Windows_NT') {
return
}
- if (architecture != 'x64') {
+ if (architecture != 'x64' && architecture != 'x86') {
return
}
break
@@ -1868,6 +1908,7 @@ combinedScenarios.each { scenario ->
return
}
break
+ case 'gc_reliability_framework':
case 'standalone_gc':
if (os != 'Windows_NT' && os != 'Ubuntu' && os != 'OSX10.12') {
return
@@ -2118,10 +2159,12 @@ combinedScenarios.each { scenario ->
return
}
break
+ case 'gc_reliability_framework':
case 'standalone_gc':
if (configuration != 'Release' && configuration != 'Checked') {
return
}
+ break
case 'coverage':
//We only want Ubuntu Release for coverage
if (os != 'Ubuntu') {
@@ -2162,7 +2205,7 @@ combinedScenarios.each { scenario ->
// so we didn't create a build only job for windows_nt specific to that stress mode. Just copy
// from the default scenario
def testBuildScenario = scenario
- if (testBuildScenario == 'coverage' || testBuildScenario == 'pri1r2r'|| testBuildScenario == 'gcstress15_pri1r2r') {
+ if (scenarioNeedsPri1Build(scenario)) {
testBuildScenario = 'pri1'
}
else if ( testBuildScenario == 'r2r' || Constants.r2rJitStressScenarios.indexOf(testBuildScenario) != -1 || isLongGc(testBuildScenario)) {
@@ -2205,8 +2248,10 @@ combinedScenarios.each { scenario ->
def runjitmioptsStr = ''
def runjitforcerelocsStr = ''
def runjitdisasmStr = ''
+ def runilasmroundtripStr = ''
def gcstressStr = ''
def illinkStr = ''
+ def layoutOnlyStr =''
if (scenario == 'r2r' ||
scenario == 'pri1r2r' ||
@@ -2283,6 +2328,10 @@ combinedScenarios.each { scenario ->
}
}
+ if (isGcReliabilityFramework(scenario)) {
+ layoutOnlyStr = '--build-overlay-only'
+ }
+
def folder = getJobFolder(scenario)
def newJob = job(Utilities.getFullJobName(project, jobName, isPR, folder)) {
// Add parameters for the inputs
@@ -2435,11 +2484,29 @@ combinedScenarios.each { scenario ->
--mscorlibDir=\"\${WORKSPACE}/bin/Product/${osGroup}.${architecture}.${configuration}\" \\
--coreFxBinDir=\"\${WORKSPACE}/bin/CoreFxBinDir\" \\
--limitedDumpGeneration \\
- ${testEnvOpt} ${serverGCString} ${gcstressStr} ${crossgenStr} ${runcrossgentestsStr} ${runjitstressStr} ${runjitstressregsStr} ${runjitmioptsStr} ${runjitforcerelocsStr} ${runjitdisasmStr} ${illinkStr} ${sequentialString} ${playlistString}""")
+ ${testEnvOpt} ${serverGCString} ${gcstressStr} ${crossgenStr} ${runcrossgentestsStr} ${runjitstressStr} \\
+ ${runjitstressregsStr} ${runjitmioptsStr} ${runjitforcerelocsStr} ${runjitdisasmStr} ${runilasmroundtripStr} \\
+ ${illinkStr} ${sequentialString} ${playlistString} ${layoutOnlyStr}""")
+
+ if (isGcReliabilityFramework(scenario)) {
+ // runtest.sh doesn't actually execute the reliability framework - do it here.
+ if (serverGCString != '') {
+ shell("export COMPlus_gcServer=1")
+ }
+
+ shell("./tests/scripts/run-gc-reliability-framework.sh ${architecture} ${configuration}")
+ }
}
}
}
+ if (isGcReliabilityFramework(scenario))
+ {
+ // Both of these are emitted by the RF
+ Utilities.addArchival(newJob, "stdout.txt")
+ Utilities.addArchival(newJob, "Logs/**")
+ }
+
if (scenario == 'coverage') {
// Publish coverage reports
Utilities.addHtmlPublisher(newJob, '${WORKSPACE}/coverage/Coverage/reports', 'Code Coverage Report', 'coreclr.html')
diff --git a/perf.groovy b/perf.groovy
index 5a88ff1..9be47c0 100644
--- a/perf.groovy
+++ b/perf.groovy
@@ -24,100 +24,140 @@ def static getOSGroup(def os) {
assert osGroup != null : "Could not find os group for ${os}"
return osGroupMap[os]
}
+
// Setup perflab tests runs
[true, false].each { isPR ->
['Windows_NT'].each { os ->
- ['x64', 'x86', 'x86jit32'].each { arch ->
- def architecture = arch
- def testEnv = ''
-
- if (arch == 'x86jit32')
- {
- architecture = 'x86'
- testEnv = '-testEnv %WORKSPACE%\\tests\\x86\\compatjit_x86_testenv.cmd'
- }
- else if (arch == 'x86')
- {
- testEnv = '-testEnv %WORKSPACE%\\tests\\x86\\ryujit_x86_testenv.cmd'
- }
+ ['x64', 'x86'].each { arch ->
+ [true, false].each { isSmoketest ->
+ def architecture = arch
+ def jobName = isSmoketest ? "perf_perflab_${os}_${arch}_smoketest" : "perf_perflab_${os}_${arch}"
- def newJob = job(Utilities.getFullJobName(project, "perf_perflab_${os}_${arch}", isPR)) {
- // Set the label.
- label('windows_clr_perf')
- wrappers {
- credentialsBinding {
- string('BV_UPLOAD_SAS_TOKEN', 'CoreCLR Perf BenchView Sas')
- }
+ if (arch == 'x86jit32')
+ {
+ architecture = 'x86'
+ testEnv = '-testEnv %WORKSPACE%\\tests\\x86\\compatjit_x86_testenv.cmd'
}
-
- if (isPR)
- {
- parameters
+ else if (arch == 'x86')
{
- stringParam('BenchviewCommitName', '\${ghprbPullTitle}', 'The name that you will be used to build the full title of a run in Benchview. The final name will be of the form <branch> private BenchviewCommitName')
+ testEnv = '-testEnv %WORKSPACE%\\tests\\x86\\ryujit_x86_testenv.cmd'
}
- }
- def configuration = 'Release'
- def runType = isPR ? 'private' : 'rolling'
- def benchViewName = isPR ? 'coreclr private %BenchviewCommitName%' : 'coreclr rolling %GIT_BRANCH_WITHOUT_ORIGIN% %GIT_COMMIT%'
-
- steps {
- // Batch
- batchFile("if exist \"%WORKSPACE%\\Microsoft.BenchView.JSONFormat\" rmdir /s /q \"%WORKSPACE%\\Microsoft.BenchView.JSONFormat\"")
- batchFile("C:\\Tools\\nuget.exe install Microsoft.BenchView.JSONFormat -Source http://benchviewtestfeed.azurewebsites.net/nuget -OutputDirectory \"%WORKSPACE%\" -Prerelease -ExcludeVersion")
- //Do this here to remove the origin but at the front of the branch name as this is a problem for BenchView
- //we have to do it all as one statement because cmd is called each time and we lose the set environment variable
- batchFile("if [%GIT_BRANCH:~0,7%] == [origin/] (set GIT_BRANCH_WITHOUT_ORIGIN=%GIT_BRANCH:origin/=%) else (set GIT_BRANCH_WITHOUT_ORIGIN=%GIT_BRANCH%)\n" +
- "set BENCHVIEWNAME=${benchViewName}\n" +
- "set BENCHVIEWNAME=%BENCHVIEWNAME:\"=%\n" +
- "py \"%WORKSPACE%\\Microsoft.BenchView.JSONFormat\\tools\\submission-metadata.py\" --name \"%BENCHVIEWNAME%\" --user \"dotnet-bot@microsoft.com\"\n" +
- "py \"%WORKSPACE%\\Microsoft.BenchView.JSONFormat\\tools\\build.py\" git --branch %GIT_BRANCH_WITHOUT_ORIGIN% --type ${runType}")
- batchFile("py \"%WORKSPACE%\\Microsoft.BenchView.JSONFormat\\tools\\machinedata.py\"")
- batchFile("set __TestIntermediateDir=int&&build.cmd ${configuration} ${architecture}")
+ def newJob = job(Utilities.getFullJobName(project, jobName, isPR)) {
+ // Set the label.
+ label('windows_clr_perf')
+ wrappers {
+ credentialsBinding {
+ string('BV_UPLOAD_SAS_TOKEN', 'CoreCLR Perf BenchView Sas')
+ }
+ }
- if (arch == 'x86jit32')
+ if (isPR)
{
- // Download package and copy compatjit into Core_Root
- batchFile("C:\\Tools\\nuget.exe install runtime.win7-${architecture}.Microsoft.NETCore.Jit -Source https://dotnet.myget.org/F/dotnet-core -OutputDirectory \"%WORKSPACE%\" -Prerelease -ExcludeVersion\n" +
- "xcopy \"%WORKSPACE%\\runtime.win7-x86.Microsoft.NETCore.Jit\\runtimes\\win7-x86\\native\\compatjit.dll\" \"%WORKSPACE%\\bin\\Product\\${os}.${architecture}.${configuration}\" /Y")
+ parameters
+ {
+ stringParam('BenchviewCommitName', '\${ghprbPullTitle}', 'The name that you will be used to build the full title of a run in Benchview. The final name will be of the form <branch> private BenchviewCommitName')
+ }
}
+ if (isSmoketest)
+ {
+ parameters
+ {
+ stringParam('XUNIT_PERFORMANCE_MAX_ITERATION', '2', 'Sets the number of iterations to two. We want to do this so that we can run as fast as possible as this is just for smoke testing')
+ stringParam('XUNIT_PERFORMANCE_MAX_ITERATION_INNER_SPECIFIED', '2', 'Sets the number of iterations to two. We want to do this so that we can run as fast as possible as this is just for smoke testing')
+ }
+ }
+ else
+ {
+ parameters
+ {
+ stringParam('XUNIT_PERFORMANCE_MAX_ITERATION', '21', 'Sets the number of iterations to twenty one. We are doing this to limit the amount of data that we upload as 20 iterations is enought to get a good sample')
+ stringParam('XUNIT_PERFORMANCE_MAX_ITERATION_INNER_SPECIFIED', '21', 'Sets the number of iterations to twenty one. We are doing this to limit the amount of data that we upload as 20 iterations is enought to get a good sample')
+ }
+ }
+ def configuration = 'Release'
+ def runType = isPR ? 'private' : 'rolling'
+ def benchViewName = isPR ? 'coreclr private %BenchviewCommitName%' : 'coreclr rolling %GIT_BRANCH_WITHOUT_ORIGIN% %GIT_COMMIT%'
+ def uploadString = isSmoketest ? '' : '-uploadToBenchview'
- batchFile("tests\\runtest.cmd ${configuration} ${architecture} GenerateLayoutOnly")
+ steps {
+ // Batch
+
+ batchFile("powershell wget https://dist.nuget.org/win-x86-commandline/latest/nuget.exe -OutFile \"%WORKSPACE%\\nuget.exe\"")
+ batchFile("if exist \"%WORKSPACE%\\Microsoft.BenchView.JSONFormat\" rmdir /s /q \"%WORKSPACE%\\Microsoft.BenchView.JSONFormat\"")
+ batchFile("\"%WORKSPACE%\\nuget.exe\" install Microsoft.BenchView.JSONFormat -Source http://benchviewtestfeed.azurewebsites.net/nuget -OutputDirectory \"%WORKSPACE%\" -Prerelease -ExcludeVersion")
+ //Do this here to remove the origin but at the front of the branch name as this is a problem for BenchView
+ //we have to do it all as one statement because cmd is called each time and we lose the set environment variable
+ batchFile("if [%GIT_BRANCH:~0,7%] == [origin/] (set GIT_BRANCH_WITHOUT_ORIGIN=%GIT_BRANCH:origin/=%) else (set GIT_BRANCH_WITHOUT_ORIGIN=%GIT_BRANCH%)\n" +
+ "set BENCHVIEWNAME=${benchViewName}\n" +
+ "set BENCHVIEWNAME=%BENCHVIEWNAME:\"=%\n" +
+ "py \"%WORKSPACE%\\Microsoft.BenchView.JSONFormat\\tools\\submission-metadata.py\" --name \"%BENCHVIEWNAME%\" --user \"dotnet-bot@microsoft.com\"\n" +
+ "py \"%WORKSPACE%\\Microsoft.BenchView.JSONFormat\\tools\\build.py\" git --branch %GIT_BRANCH_WITHOUT_ORIGIN% --type ${runType}")
+ batchFile("py \"%WORKSPACE%\\Microsoft.BenchView.JSONFormat\\tools\\machinedata.py\"")
+ batchFile("set __TestIntermediateDir=int&&build.cmd ${configuration} ${architecture}")
+
+ if (arch == 'x86jit32')
+ {
+ // Download package and copy compatjit into Core_Root
+ batchFile("C:\\Tools\\nuget.exe install runtime.win7-${architecture}.Microsoft.NETCore.Jit -Source https://dotnet.myget.org/F/dotnet-core -OutputDirectory \"%WORKSPACE%\" -Prerelease -ExcludeVersion\n" +
+ "xcopy \"%WORKSPACE%\\runtime.win7-x86.Microsoft.NETCore.Jit\\runtimes\\win7-x86\\native\\compatjit.dll\" \"%WORKSPACE%\\bin\\Product\\${os}.${architecture}.${configuration}\" /Y")
+ }
- batchFile("tests\\scripts\\run-xunit-perf.cmd -arch ${arch} -configuration ${configuration} ${testEnv} -testBinLoc bin\\tests\\${os}.${architecture}.${configuration}\\performance\\perflab\\Perflab -library -uploadToBenchview \"%WORKSPACE%\\Microsoft.Benchview.JSONFormat\\tools\" -runtype ${runType}")
- batchFile("tests\\scripts\\run-xunit-perf.cmd -arch ${arch} -configuration ${configuration} ${testEnv} -testBinLoc bin\\tests\\${os}.${architecture}.${configuration}\\Jit\\Performance\\CodeQuality -uploadToBenchview \"%WORKSPACE%\\Microsoft.Benchview.JSONFormat\\tools\" -runtype ${runType}")
+ batchFile("tests\\runtest.cmd ${configuration} ${architecture} GenerateLayoutOnly")
+
+ // Run with just stopwatch: Profile=Off
+ batchFile("tests\\scripts\\run-xunit-perf.cmd -arch ${arch} -configuration ${configuration} -testBinLoc bin\\tests\\${os}.${architecture}.${configuration}\\performance\\perflab\\Perflab -library -generateBenchviewData \"%WORKSPACE%\\Microsoft.Benchview.JSONFormat\\tools\" ${uploadString} -runtype ${runType} -stabilityPrefix \"START \"CORECLR_PERF_RUN\" /B /WAIT /HIGH /AFFINITY 0x2\"")
+ batchFile("tests\\scripts\\run-xunit-perf.cmd -arch ${arch} -configuration ${configuration} -testBinLoc bin\\tests\\${os}.${architecture}.${configuration}\\Jit\\Performance\\CodeQuality -generateBenchviewData \"%WORKSPACE%\\Microsoft.Benchview.JSONFormat\\tools\" ${uploadString} -runtype ${runType} -stabilityPrefix \"START \"CORECLR_PERF_RUN\" /B /WAIT /HIGH /AFFINITY 0x2\"")
+ batchFile("tests\\scripts\\run-xunit-perf.cmd -arch ${arch} -configuration ${configuration} -testBinLoc bin\\tests\\${os}.${architecture}.${configuration}\\performance\\linkbench\\linkbench -generateBenchviewData \"%WORKSPACE%\\Microsoft.Benchview.JSONFormat\\tools\" ${uploadString} -nowarmup -runtype ${runType} -scenarioTest -group ILLink")
+
+ // Run with the full set of counters enabled: Profile=On
+ batchFile("tests\\scripts\\run-xunit-perf.cmd -arch ${arch} -configuration ${configuration} -testBinLoc bin\\tests\\${os}.${architecture}.${configuration}\\performance\\perflab\\Perflab -library -generateBenchviewData \"%WORKSPACE%\\Microsoft.Benchview.JSONFormat\\tools\" ${uploadString} -runtype ${runType} -collectionFlags default+BranchMispredictions+CacheMisses+InstructionRetired+gcapi -stabilityPrefix \"START \"CORECLR_PERF_RUN\" /B /WAIT /HIGH /AFFINITY 0x2\"")
+ batchFile("tests\\scripts\\run-xunit-perf.cmd -arch ${arch} -configuration ${configuration} -testBinLoc bin\\tests\\${os}.${architecture}.${configuration}\\Jit\\Performance\\CodeQuality -generateBenchviewData \"%WORKSPACE%\\Microsoft.Benchview.JSONFormat\\tools\" ${uploadString} -runtype ${runType} -collectionFlags default+BranchMispredictions+CacheMisses+InstructionRetired+gcapi -stabilityPrefix \"START \"CORECLR_PERF_RUN\" /B /WAIT /HIGH /AFFINITY 0x2\"")
+ }
}
- }
- // Save machinedata.json to /artifact/bin/ Jenkins dir
- def archiveSettings = new ArchivalSettings()
- archiveSettings.addFiles('Perf-*.xml')
- archiveSettings.addFiles('Perf-*.etl')
- Utilities.addArchival(newJob, archiveSettings)
+ if (isSmoketest)
+ {
+ Utilities.setMachineAffinity(newJob, "Windows_NT", '20170427-elevated')
+ }
+ // Save machinedata.json to /artifact/bin/ Jenkins dir
+ def archiveSettings = new ArchivalSettings()
+ archiveSettings.addFiles('Perf-*.xml')
+ archiveSettings.addFiles('Perf-*.etl')
+ archiveSettings.addFiles('Perf-*.log')
+ archiveSettings.addFiles('machinedata.json')
+ Utilities.addArchival(newJob, archiveSettings)
- Utilities.standardJobSetup(newJob, project, isPR, "*/${branch}")
-
- newJob.with {
- wrappers {
- timeout {
- absolute(240)
+ Utilities.standardJobSetup(newJob, project, isPR, "*/${branch}")
+
+ newJob.with {
+ wrappers {
+ timeout {
+ absolute(240)
+ }
}
}
- }
-
- if (isPR) {
- TriggerBuilder builder = TriggerBuilder.triggerOnPullRequest()
- builder.setGithubContext("${os} ${arch} CoreCLR Perf Tests")
- builder.triggerOnlyOnComment()
- builder.setCustomTriggerPhrase("(?i).*test\\W+${os}\\W+${arch}\\W+perf.*")
- builder.triggerForBranch(branch)
- builder.emitTrigger(newJob)
- }
- else {
- // Set a push trigger
- TriggerBuilder builder = TriggerBuilder.triggerOnCommit()
- builder.emitTrigger(newJob)
+
+ if (isPR) {
+ TriggerBuilder builder = TriggerBuilder.triggerOnPullRequest()
+ if (isSmoketest)
+ {
+ builder.setGithubContext("${os} ${arch} CoreCLR Perf Tests Correctness")
+ }
+ else
+ {
+ builder.setGithubContext("${os} ${arch} CoreCLR Perf Tests")
+ builder.triggerOnlyOnComment()
+ builder.setCustomTriggerPhrase("(?i).*test\\W+${os}\\W+${arch}\\W+perf.*")
+ }
+ builder.triggerForBranch(branch)
+ builder.emitTrigger(newJob)
+ }
+ else {
+ // Set a push trigger
+ TriggerBuilder builder = TriggerBuilder.triggerOnCommit()
+ builder.emitTrigger(newJob)
+ }
}
}
}
@@ -126,14 +166,9 @@ def static getOSGroup(def os) {
// Setup throughput perflab tests runs
[true, false].each { isPR ->
['Windows_NT'].each { os ->
- ['x64', 'x86', 'x86jit32'].each { arch ->
+ ['x64', 'x86'].each { arch ->
def architecture = arch
- if (arch == 'x86jit32')
- {
- architecture = 'x86'
- }
-
def newJob = job(Utilities.getFullJobName(project, "perf_throughput_perflab_${os}_${arch}", isPR)) {
// Set the label.
label('windows_clr_perf')
@@ -153,7 +188,7 @@ def static getOSGroup(def os) {
def configuration = 'Release'
def runType = isPR ? 'private' : 'rolling'
def benchViewName = isPR ? 'coreclr-throughput private %BenchviewCommitName%' : 'coreclr-throughput rolling %GIT_BRANCH_WITHOUT_ORIGIN% %GIT_COMMIT%'
-
+
steps {
// Batch
@@ -171,12 +206,6 @@ def static getOSGroup(def os) {
batchFile("py \"%WORKSPACE%\\Microsoft.BenchView.JSONFormat\\tools\\machinedata.py\"")
batchFile("set __TestIntermediateDir=int&&build.cmd ${configuration} ${architecture} skiptests")
batchFile("tests\\runtest.cmd ${configuration} ${architecture} GenerateLayoutOnly")
- if (arch == 'x86jit32')
- {
- // Download package and copy compatjit into Core_Root
- batchFile("C:\\Tools\\nuget.exe install runtime.win7-${architecture}.Microsoft.NETCore.Jit -Source https://dotnet.myget.org/F/dotnet-core -OutputDirectory \"%WORKSPACE%\" -Prerelease -ExcludeVersion\n" +
- "xcopy \"%WORKSPACE%\\runtime.win7-x86.Microsoft.NETCore.Jit\\runtimes\\win7-x86\\native\\compatjit.dll\" \"%WORKSPACE%\\bin\\Product\\${os}.${architecture}.${configuration}\" /Y")
- }
batchFile("py -u tests\\scripts\\run-throughput-perf.py -arch ${arch} -os ${os} -configuration ${configuration} -clr_root \"%WORKSPACE%\" -assembly_root \"%WORKSPACE%\\Microsoft.BenchView.ThroughputBenchmarks.${architecture}.${os}\\lib\" -benchview_path \"%WORKSPACE%\\Microsoft.Benchview.JSONFormat\\tools\" -run_type ${runType}")
}
}
@@ -209,14 +238,14 @@ def static getOSGroup(def os) {
[true, false].each { isPR ->
['Ubuntu14.04'].each { os ->
def newJob = job(Utilities.getFullJobName(project, "perf_${os}", isPR)) {
-
+
label('linux_clr_perf')
- wrappers {
- credentialsBinding {
- string('BV_UPLOAD_SAS_TOKEN', 'CoreCLR Perf BenchView Sas')
- }
+ wrappers {
+ credentialsBinding {
+ string('BV_UPLOAD_SAS_TOKEN', 'CoreCLR Perf BenchView Sas')
}
-
+ }
+
if (isPR)
{
parameters
@@ -224,20 +253,27 @@ def static getOSGroup(def os) {
stringParam('BenchviewCommitName', '\${ghprbPullTitle}', 'The name that you will be used to build the full title of a run in Benchview. The final name will be of the form <branch> private BenchviewCommitName')
}
}
+
+ // Cap the maximum number of iterations to 21.
+ parameters {
+ stringParam('XUNIT_PERFORMANCE_MAX_ITERATION', '21', 'Sets the number of iterations to twenty one. We are doing this to limit the amount of data that we upload as 20 iterations is enought to get a good sample')
+ stringParam('XUNIT_PERFORMANCE_MAX_ITERATION_INNER_SPECIFIED', '21', 'Sets the number of iterations to twenty one. We are doing this to limit the amount of data that we upload as 20 iterations is enought to get a good sample')
+ }
+
def osGroup = getOSGroup(os)
def architecture = 'x64'
def configuration = 'Release'
def runType = isPR ? 'private' : 'rolling'
def benchViewName = isPR ? 'coreclr private \$BenchviewCommitName' : 'coreclr rolling \$GIT_BRANCH_WITHOUT_ORIGIN \$GIT_COMMIT'
-
+
steps {
- shell("bash ./tests/scripts/perf-prep.sh")
+ shell("./tests/scripts/perf-prep.sh")
shell("./init-tools.sh")
shell("./build.sh ${architecture} ${configuration}")
shell("GIT_BRANCH_WITHOUT_ORIGIN=\$(echo \$GIT_BRANCH | sed \"s/[^/]*\\/\\(.*\\)/\\1 /\")\n" +
"python3.5 \"\${WORKSPACE}/tests/scripts/Microsoft.BenchView.JSONFormat/tools/submission-metadata.py\" --name \" ${benchViewName} \" --user \"dotnet-bot@microsoft.com\"\n" +
"python3.5 \"\${WORKSPACE}/tests/scripts/Microsoft.BenchView.JSONFormat/tools/build.py\" git --branch \$GIT_BRANCH_WITHOUT_ORIGIN --type ${runType}")
- shell("""sudo -E bash ./tests/scripts/run-xunit-perf.sh \\
+ shell("""./tests/scripts/run-xunit-perf.sh \\
--testRootDir=\"\${WORKSPACE}/bin/tests/Windows_NT.${architecture}.${configuration}\" \\
--testNativeBinDir=\"\${WORKSPACE}/bin/obj/${osGroup}.${architecture}.${configuration}/tests\" \\
--coreClrBinDir=\"\${WORKSPACE}/bin/Product/${osGroup}.${architecture}.${configuration}\" \\
@@ -245,13 +281,16 @@ def static getOSGroup(def os) {
--coreFxBinDir=\"\${WORKSPACE}/corefx\" \\
--runType=\"${runType}\" \\
--benchViewOS=\"${os}\" \\
+ --generatebenchviewdata=\"\${WORKSPACE}/tests/scripts/Microsoft.BenchView.JSONFormat/tools\" \\
+ --stabilityPrefix=\"taskset 0x00000002 nice --adjustment=-10\" \\
--uploadToBenchview""")
}
}
// Save machinedata.json to /artifact/bin/ Jenkins dir
def archiveSettings = new ArchivalSettings()
- archiveSettings.addFiles('sandbox/perf-*.xml')
+ archiveSettings.addFiles('Perf-*.log')
+ archiveSettings.addFiles('Perf-*.xml')
archiveSettings.addFiles('machinedata.json')
Utilities.addArchival(newJob, archiveSettings)
@@ -287,14 +326,14 @@ def static getOSGroup(def os) {
[true, false].each { isPR ->
['Ubuntu14.04'].each { os ->
def newJob = job(Utilities.getFullJobName(project, "perf_throughput_${os}", isPR)) {
-
+
label('linux_clr_perf')
wrappers {
credentialsBinding {
string('BV_UPLOAD_SAS_TOKEN', 'CoreCLR Perf BenchView Sas')
}
}
-
+
if (isPR)
{
parameters
@@ -307,7 +346,7 @@ def static getOSGroup(def os) {
def configuration = 'Release'
def runType = isPR ? 'private' : 'rolling'
def benchViewName = isPR ? 'coreclr private \$BenchviewCommitName' : 'coreclr rolling \$GIT_BRANCH_WITHOUT_ORIGIN \$GIT_COMMIT'
-
+
steps {
shell("bash ./tests/scripts/perf-prep.sh --throughput")
shell("./init-tools.sh")
diff --git a/pgosupport.cmake b/pgosupport.cmake
index dbba415..90bcbc3 100644
--- a/pgosupport.cmake
+++ b/pgosupport.cmake
@@ -20,6 +20,8 @@ function(add_pgo TargetName)
"${CLR_CMAKE_PACKAGES_DIR}/${CLR_CMAKE_OPTDATA_PACKAGEWITHRID}/${CLR_CMAKE_OPTDATA_VERSION}/data/${ProfileFileName}"
ProfilePath
)
+ # NuGet packages are restored to lowercase paths
+ string(TOLOWER "${ProfilePath}" ProfilePath)
if(CLR_CMAKE_PGO_INSTRUMENT)
if(WIN32)
@@ -40,7 +42,7 @@ function(add_pgo TargetName)
else(WIN32)
if(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL RELEASE OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL RELWITHDEBINFO)
if(HAVE_LTO)
- target_compile_options(${TargetName} PRIVATE -flto -fprofile-instr-use=${ProfilePath})
+ target_compile_options(${TargetName} PRIVATE -flto -fprofile-instr-use=${ProfilePath} -Wno-profile-instr-out-of-date)
set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS " -flto -fuse-ld=gold -fprofile-instr-use=${ProfilePath}")
endif(HAVE_LTO)
endif(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL RELEASE OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL RELWITHDEBINFO)
diff --git a/run.cmd b/run.cmd
index 5327df4..cab06d5 100644
--- a/run.cmd
+++ b/run.cmd
@@ -48,14 +48,17 @@ if NOT [%ERRORLEVEL%]==[0] (
exit /b 1
)
-:: Always copy over the Tools-Override
-xcopy %~dp0Tools-Override\* %~dp0Tools /y >nul
-
set _toolRuntime=%~dp0Tools
set _dotnet=%_toolRuntime%\dotnetcli\dotnet.exe
+set _json=%~dp0config.json
+
+:: run.exe depends on running in the root directory, notably because the config.json specifies
+:: a relative path to the binclash logger
+pushd %~dp0
echo Running: %_dotnet% %_toolRuntime%\run.exe %~dp0config.json %*
-call %_dotnet% %_toolRuntime%\run.exe %~dp0config.json %*
+call %_dotnet% %_toolRuntime%\run.exe "%_json%" %*
+popd
if NOT [%ERRORLEVEL%]==[0] (
exit /b 1
)
diff --git a/run.sh b/run.sh
index 2612c86..bd6a68f 100755
--- a/run.sh
+++ b/run.sh
@@ -5,9 +5,6 @@ working_tree_root="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo "Running init-tools.sh"
$working_tree_root/init-tools.sh
-# Always copy over the Tools-Override
-cp $working_tree_root/Tools-Override/* $working_tree_root/Tools > /dev/null
-
toolRuntime=$working_tree_root/Tools
dotnet=$toolRuntime/dotnetcli/dotnet
diff --git a/src/.nuget/Microsoft.NETCore.Jit/runtime.Windows_NT.Microsoft.NETCore.Jit.props b/src/.nuget/Microsoft.NETCore.Jit/runtime.Windows_NT.Microsoft.NETCore.Jit.props
index c45358d..f31b152 100644
--- a/src/.nuget/Microsoft.NETCore.Jit/runtime.Windows_NT.Microsoft.NETCore.Jit.props
+++ b/src/.nuget/Microsoft.NETCore.Jit/runtime.Windows_NT.Microsoft.NETCore.Jit.props
@@ -2,7 +2,6 @@
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<NativeBinary Include="$(BinDir)clrjit.dll" />
- <NativeBinary Condition="'$(Platform)' == 'x86' and '$(PackageCompatJit)' != ''" Include="$(BinDir)compatjit.dll" />
<CrossArchitectureSpecificNativeFileAndSymbol Include="$(BinDir)$(CrossTargetComponentFolder)\clrjit.dll" />
<!-- prevent accidental inclusion in AOT projects. -->
diff --git a/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/runtime.Linux.Microsoft.NETCore.Runtime.CoreCLR.props b/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/runtime.Linux.Microsoft.NETCore.Runtime.CoreCLR.props
index 4ad2538..5f244a9 100644
--- a/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/runtime.Linux.Microsoft.NETCore.Runtime.CoreCLR.props
+++ b/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/runtime.Linux.Microsoft.NETCore.Runtime.CoreCLR.props
@@ -1,9 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
- <_PlatformDoesNotSupportNiFiles Condition="'$(Platform)' == 'arm'">true</_PlatformDoesNotSupportNiFiles>
- <_PlatformDoesNotSupportNiFiles Condition="'$(Platform)' == 'armel'">true</_PlatformDoesNotSupportNiFiles>
- <_PlatformDoesNotSupportNiFiles Condition="'$(Platform)' == 'x86'">true</_PlatformDoesNotSupportNiFiles>
+ <_PlatformDoesNotSupportCreatedump Condition="'$(Platform)' == 'arm'">true</_PlatformDoesNotSupportCreatedump>
+ <_PlatformDoesNotSupportCreatedump Condition="'$(Platform)' == 'armel'">true</_PlatformDoesNotSupportCreatedump>
+ <_PlatformDoesNotSupportCreatedump Condition="'$(Platform)' == 'x86'">true</_PlatformDoesNotSupportCreatedump>
+ <_PlatformDoesNotSupportCreatedump Condition="'$(_runtimeOSFamily)' == 'tizen'">true</_PlatformDoesNotSupportCreatedump>
<_PlatformDoesNotSupportEventTrace Condition="'$(_runtimeOSFamily)' == 'tizen'">true</_PlatformDoesNotSupportEventTrace>
<_PlatformDoesNotSupportEventTrace Condition="'$(Platform)' == 'x86'">true</_PlatformDoesNotSupportEventTrace>
</PropertyGroup>
@@ -17,8 +18,8 @@
<NativeBinary Include="$(BinDir)libsosplugin.so" />
<NativeBinary Include="$(BinDir)System.Globalization.Native.so" />
<NativeBinary Include="$(BinDir)sosdocsunix.txt" />
- <NativeBinary Condition="'$(_PlatformDoesNotSupportNiFiles)' != 'true'" Include="$(BinDir)System.Private.CoreLib.ni.dll" />
- <ArchitectureSpecificLibFile Include="$(BinDir)System.Private.CoreLib.dll" />
+ <NativeBinary Include="$(BinDir)System.Private.CoreLib.dll" />
+ <NativeBinary Condition="'$(_PlatformDoesNotSupportCreatedump)' != 'true'" Include="$(BinDir)createdump" />
<ArchitectureSpecificLibFile Include="$(BinDir)SOS.NETCore.dll" />
<ArchitectureSpecificToolFile Include="$(BinDir)crossgen" />
</ItemGroup>
diff --git a/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/runtime.OSX.Microsoft.NETCore.Runtime.CoreCLR.props b/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/runtime.OSX.Microsoft.NETCore.Runtime.CoreCLR.props
index b988a40..ffb1c2d 100644
--- a/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/runtime.OSX.Microsoft.NETCore.Runtime.CoreCLR.props
+++ b/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/runtime.OSX.Microsoft.NETCore.Runtime.CoreCLR.props
@@ -8,8 +8,7 @@
<NativeBinary Include="$(BinDir)libsos.dylib" />
<NativeBinary Include="$(BinDir)System.Globalization.Native.dylib" />
<NativeBinary Include="$(BinDir)sosdocsunix.txt" />
- <NativeBinary Include="$(BinDir)System.Private.CoreLib.ni.dll" />
- <ArchitectureSpecificLibFile Include="$(BinDir)System.Private.CoreLib.dll" />
+ <NativeBinary Include="$(BinDir)System.Private.CoreLib.dll" />
<ArchitectureSpecificLibFile Include="$(BinDir)SOS.NETCore.dll" />
<ArchitectureSpecificToolFile Include="$(BinDir)crossgen" />
</ItemGroup>
diff --git a/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/runtime.Windows_NT.Microsoft.NETCore.Runtime.CoreCLR.props b/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/runtime.Windows_NT.Microsoft.NETCore.Runtime.CoreCLR.props
index 436901e..57cc46f 100644
--- a/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/runtime.Windows_NT.Microsoft.NETCore.Runtime.CoreCLR.props
+++ b/src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/runtime.Windows_NT.Microsoft.NETCore.Runtime.CoreCLR.props
@@ -2,8 +2,8 @@
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PackageTargetRuntime>$(MinOSForArch)-$(PackagePlatform)</PackageTargetRuntime>
- <LongNamePlatform>$(PackagePlatform)</LongNamePlatform>
- <LongNamePlatform Condition="'$(LongNamePlatform)'=='x64'">amd64</LongNamePlatform>
+ <LongNamePlatform>$(Platform)</LongNamePlatform>
+ <LongNamePlatform Condition="'$(Platform)'=='x64'">amd64</LongNamePlatform>
<CrossTargetPlatform>$(CrossTargetComponentFolder)</CrossTargetPlatform>
<CrossTargetPlatform Condition="'$(CrossTargetPlatform)'=='x64'">amd64</CrossTargetPlatform>
<LongNameSuffix>_$(LongNamePlatform)_$(LongNamePlatform)_$(MajorVersion).$(MinorVersion).$(BuildNumberMajor).0$(BuildNumberMinor)</LongNameSuffix>
@@ -19,9 +19,8 @@
<NativeBinary Include="$(BinDir)mscorrc.debug.dll" />
<NativeBinary Include="$(BinDir)mscorrc.dll" />
<NativeBinary Include="$(BinDir)sos.dll" />
- <NativeBinary Include="$(BinDir)System.Private.CoreLib.ni.dll" />
<NativeBinary Include="$(UniversalCRTSDKDir)Redist\ucrt\DLLs\$(BuildArch)\*.dll" Condition="'$(BuildType)'=='Release' AND '$(BuildArch)' != 'arm64'" />
- <ArchitectureSpecificLibFile Include="$(BinDir)System.Private.CoreLib.dll" />
+ <NativeBinary Include="$(BinDir)System.Private.CoreLib.dll" />
<ArchitectureSpecificLibFile Include="$(BinDir)SOS.NETCore.dll" />
<ArchitectureSpecificToolFile Include="$(BinDir)crossgen.exe" />
<CrossArchitectureSpecificToolFile Include="$(BinDir)$(CrossTargetComponentFolder)\crossgen.exe" />
@@ -45,7 +44,7 @@
<LongNameFile Include="$(BinDir)$(CrossTargetComponentFolder)\mscordaccore.dll;
$(BinDir)$(CrossTargetComponentFolder)\sos.dll"
Condition="'$(HasCrossTargetComponents)'=='true'">
- <TargetPath>tools\$(CrossTargetComponentFolder)_$(PackagePlatform)\%(FileName)$(CrossTargetLongNameSuffix)%(Extension)</TargetPath>
+ <TargetPath>tools\$(CrossTargetComponentFolder)_$(Platform)\%(FileName)$(CrossTargetLongNameSuffix)%(Extension)</TargetPath>
</LongNameFile>
</ItemGroup>
</Project>
diff --git a/src/.nuget/ThirdPartyNotices.txt b/src/.nuget/ThirdPartyNotices.txt
deleted file mode 100644
index 55cfb20..0000000
--- a/src/.nuget/ThirdPartyNotices.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-This Microsoft .NET Library may incorporate components from the projects listed
-below. Microsoft licenses these components under the Microsoft .NET Library
-software license terms. The original copyright notices and the licenses under
-which Microsoft received such components are set forth below for informational
-purposes only. Microsoft reserves all rights not expressly granted herein,
-whether by implication, estoppel or otherwise.
-
-1. .NET Core (https://github.com/dotnet/core/)
-
-.NET Core
-Copyright (c) .NET Foundation and Contributors
-
-The MIT License (MIT)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE. \ No newline at end of file
diff --git a/src/.nuget/dir.props b/src/.nuget/dir.props
index 59b94f7..2ff88d9 100644
--- a/src/.nuget/dir.props
+++ b/src/.nuget/dir.props
@@ -26,8 +26,12 @@
<SupportedPackageOSGroups Condition="'$(SupportedPackageOSGroups)' == ''">Windows_NT;OSX;Linux</SupportedPackageOSGroups>
<SupportedPackageOSGroups>;$(SupportedPackageOSGroups);</SupportedPackageOSGroups>
+ <!-- Identify OS family based upon the RuntimeOS, which could be distro specific (e.g. osx.10.12) or
+ portable (e.g. osx).
+ -->
<_runtimeOSVersionIndex>$(RuntimeOS.IndexOfAny(".-0123456789"))</_runtimeOSVersionIndex>
<_runtimeOSFamily Condition="'$(_runtimeOSVersionIndex)' != '-1'">$(RuntimeOS.SubString(0, $(_runtimeOSVersionIndex)))</_runtimeOSFamily>
+ <_runtimeOSFamily Condition="'$(_runtimeOSVersionIndex)' == '-1'">$(RuntimeOS)</_runtimeOSFamily>
<_isSupportedOSGroup>true</_isSupportedOSGroup>
</PropertyGroup>
@@ -66,7 +70,7 @@
<RIDPlatform Condition="'$(ArchGroup)' == 'arm64'">win10</RIDPlatform>
<!-- Set the platform part of the RID if we are doing a portable build -->
- <RIDPlatform Condition="'$(PortableBuild)' == '1'">win</RIDPlatform>
+ <RIDPlatform Condition="'$(PortableBuild)' == 'true'">win</RIDPlatform>
<PackageRID>$(RIDPlatform)-$(ArchGroup)</PackageRID>
</PropertyGroup>
</When>
@@ -74,21 +78,21 @@
<PropertyGroup>
<PackageRID>osx.10.12-$(ArchGroup)</PackageRID>
<!-- Set the platform part of the RID if we are doing a portable build -->
- <PackageRID Condition="'$(PortableBuild)' == '1'">osx-$(ArchGroup)</PackageRID>
+ <PackageRID Condition="'$(PortableBuild)' == 'true'">osx-$(ArchGroup)</PackageRID>
</PropertyGroup>
</When>
<When Condition="'$(_runtimeOSFamily)' == 'rhel'">
<PropertyGroup>
<PackageRID>rhel.7-$(ArchGroup)</PackageRID>
<!-- Set the platform part of the RID if we are doing a portable build -->
- <PackageRID Condition="'$(PortableBuild)' == '1'">linux-$(ArchGroup)</PackageRID>
+ <PackageRID Condition="'$(PortableBuild)' == 'true'">linux-$(ArchGroup)</PackageRID>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup>
<PackageRID>$(RuntimeOS)-$(ArchGroup)</PackageRID>
<!-- Set the platform part of the RID if we are doing a portable build -->
- <PackageRID Condition="'$(PortableBuild)' == '1'">linux-$(ArchGroup)</PackageRID>
+ <PackageRID Condition="'$(PortableBuild)' == 'true'">linux-$(ArchGroup)</PackageRID>
</PropertyGroup>
</Otherwise>
</Choose>
@@ -111,51 +115,22 @@
</Choose>
<ItemGroup Condition="$(SupportedPackageOSGroups.Contains(';Linux;'))">
- <OfficialBuildRID Include="alpine.3.4.3-x64" />
- <OfficialBuildRID Include="debian.8-armel">
- <Platform>armel</Platform>
- </OfficialBuildRID>
- <OfficialBuildRID Include="debian.8-x64" />
- <OfficialBuildRID Include="fedora.23-x64" />
- <OfficialBuildRID Include="fedora.24-x64" />
<OfficialBuildRID Include="linux-x64" />
<OfficialBuildRID Include="linux-arm">
<Platform>arm</Platform>
</OfficialBuildRID>
- <OfficialBuildRID Include="opensuse.42.1-x64" />
- <OfficialBuildRID Include="rhel.7-x64" />
<OfficialBuildRID Include="tizen.4.0.0-armel">
<Platform>armel</Platform>
</OfficialBuildRID>
- <OfficialBuildRID Include="ubuntu.14.04-arm">
- <Platform>arm</Platform>
- </OfficialBuildRID>
- <OfficialBuildRID Include="ubuntu.14.04-x64" />
- <OfficialBuildRID Include="ubuntu.16.04-arm">
- <Platform>arm</Platform>
- </OfficialBuildRID>
- <OfficialBuildRID Include="ubuntu.16.04-x64" />
- <OfficialBuildRID Include="ubuntu.16.10-x64" />
</ItemGroup>
<ItemGroup Condition="$(SupportedPackageOSGroups.Contains(';OSX;'))">
- <OfficialBuildRID Include="osx.10.12-x64" />
<OfficialBuildRID Include="osx-x64" />
</ItemGroup>
<ItemGroup Condition="$(SupportedPackageOSGroups.Contains(';Windows_NT;'))">
- <OfficialBuildRID Include="win7-x86">
- <Platform>x86</Platform>
- </OfficialBuildRID>
<OfficialBuildRID Include="win-x86">
<Platform>x86</Platform>
</OfficialBuildRID>
- <OfficialBuildRID Include="win7-x64" />
<OfficialBuildRID Include="win-x64" />
- <OfficialBuildRID Include="win8-arm">
- <Platform>arm</Platform>
- </OfficialBuildRID>
- <OfficialBuildRID Include="win10-arm64">
- <Platform>arm64</Platform>
- </OfficialBuildRID>
<OfficialBuildRID Include="win-arm">
<Platform>arm</Platform>
</OfficialBuildRID>
diff --git a/src/.nuget/dir.targets b/src/.nuget/dir.targets
index 49e550a..447b071 100644
--- a/src/.nuget/dir.targets
+++ b/src/.nuget/dir.targets
@@ -32,10 +32,10 @@
<ItemGroup Condition="'$(HasCrossTargetComponents)'=='true'">
<NativeWithSymbolFile Include="@(CrossArchitectureSpecificNativeFileAndSymbol)">
- <TargetPath>runtimes/$(CrossTargetComponentFolder)_$(PackagePlatform)/native</TargetPath>
+ <TargetPath>runtimes/$(CrossTargetComponentFolder)_$(Platform)/native</TargetPath>
</NativeWithSymbolFile>
<NativeWithSymbolFile Include="@(CrossArchitectureSpecificToolFile)">
- <TargetPath>tools/$(CrossTargetComponentFolder)_$(PackagePlatform)</TargetPath>
+ <TargetPath>tools/$(CrossTargetComponentFolder)_$(Platform)</TargetPath>
</NativeWithSymbolFile>
</ItemGroup>
@@ -84,5 +84,19 @@
</ItemGroup>
</Target>
+ <!-- OverrideLicenseUrl is temporary till we update the buildtools to v2 -->
+ <Target Name="OverrideLicenseUrl" BeforeTargets="GenerateNuSpec">
+ <PropertyGroup>
+ <LicenseUrl>https://github.com/dotnet/coreclr/blob/master/LICENSE.TXT</LicenseUrl>
+ </PropertyGroup>
+ </Target>
+
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)\.., dir.targets))\dir.targets" />
+ <ItemGroup>
+ <!-- Add version file to packages -->
+ <File Condition="Exists('$(SyncInfoFile)')"
+ Include="$(SyncInfoFile)">
+ <SkipPackageFileCheck>true</SkipPackageFileCheck>
+ </File>
+ </ItemGroup>
</Project>
diff --git a/src/.nuget/dotnet_library_license.txt b/src/.nuget/dotnet_library_license.txt
deleted file mode 100644
index 9953cbb..0000000
--- a/src/.nuget/dotnet_library_license.txt
+++ /dev/null
@@ -1,127 +0,0 @@
-MICROSOFT SOFTWARE LICENSE TERMS
-
-
-MICROSOFT .NET LIBRARY
-
-These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft
-
-- updates,
-
-- supplements,
-
-- Internet-based services, and
-
-- support services
-
-for this software, unless other terms accompany those items. If so, those terms apply.
-
-BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.
-
-
-IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE PERPETUAL RIGHTS BELOW.
-
-1. INSTALLATION AND USE RIGHTS.
-
-a. Installation and Use. You may install and use any number of copies of the software to design, develop and test your programs.
-
-b. Third Party Programs. The software may include third party programs that Microsoft, not the third party, licenses to you under this agreement. Notices, if any, for the third party program are included for your information only.
-
-2. ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.
-
-a. DISTRIBUTABLE CODE. The software is comprised of Distributable Code. "Distributable Code" is code that you are permitted to distribute in programs you develop if you comply with the terms below.
-
-i. Right to Use and Distribute.
-
-- You may copy and distribute the object code form of the software.
-
-- Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs.
-
-ii. Distribution Requirements. For any Distributable Code you distribute, you must
-
-- add significant primary functionality to it in your programs;
-
-- require distributors and external end users to agree to terms that protect it at least as much as this agreement;
-
-- display your valid copyright notice on your programs; and
-
-- indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs.
-
-iii. Distribution Restrictions. You may not
-
-- alter any copyright, trademark or patent notice in the Distributable Code;
-
-- use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft;
-
-- include Distributable Code in malicious, deceptive or unlawful programs; or
-
-- modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that
-
-- the code be disclosed or distributed in source code form; or
-
-- others have the right to modify it.
-
-3. SCOPE OF LICENSE. The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not
-
-- work around any technical limitations in the software;
-
-- reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation;
-
-- publish the software for others to copy;
-
-- rent, lease or lend the software;
-
-- transfer the software or this agreement to any third party; or
-
-- use the software for commercial software hosting services.
-
-4. BACKUP COPY. You may make one backup copy of the software. You may use it only to reinstall the software.
-
-5. DOCUMENTATION. Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes.
-
-6. EXPORT RESTRICTIONS. The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see www.microsoft.com/exporting.
-
-7. SUPPORT SERVICES. Because this software is "as is," we may not provide support services for it.
-
-8. ENTIRE AGREEMENT. This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services.
-
-9. APPLICABLE LAW.
-
-a. United States. If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort.
-
-b. Outside the United States. If you acquired the software in any other country, the laws of that country apply.
-
-10. LEGAL EFFECT. This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so.
-
-11. DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS OR STATUTORY GUARANTEES UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-
-FOR AUSTRALIA - YOU HAVE STATUTORY GUARANTEES UNDER THE AUSTRALIAN CONSUMER LAW AND NOTHING IN THESE TERMS IS INTENDED TO AFFECT THOSE RIGHTS.
-
-12. LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES. YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.
-
-This limitation applies to
-
-- anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and
-
-- claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law.
-
-It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages.
-
-Please note: As this software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French.
-
-Remarque : Ce logiciel etant distribue au Quebec, Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en francais.
-
-EXONERATION DE GARANTIE. Le logiciel vise par une licence est offert << tel quel >>. Toute utilisation de ce logiciel est a votre seule risque et peril. Microsoft n'accorde aucune autre garantie expresse. Vous pouvez beneficier de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualite marchande, d'adequation a un usage particulier et d'absence de contrefacon sont exclues.
-
-LIMITATION DES DOMMAGES-INTERETS ET EXCLUSION DE RESPONSABILITE POUR LES DOMMAGES. Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement a hauteur de 5,00 $ US. Vous ne pouvez pretendre a aucune indemnisation pour les autres dommages, y compris les dommages speciaux, indirects ou accessoires et pertes de benefices.
-
-Cette limitation concerne :
-
-- tout ce qui est relie au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers ; et
-
-- les reclamations au titre de violation de contrat ou de garantie, ou au titre de responsabilite stricte, de negligence ou d'une autre faute dans la limite autorisee par la loi en vigueur.
-
-Elle s'applique egalement, meme si Microsoft connaissait ou devrait connaitre l'eventualite d'un tel dommage. Si votre pays n'autorise pas l'exclusion ou la limitation de responsabilite pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l'exclusion ci-dessus ne s'appliquera pas a votre egard.
-
-EFFET JURIDIQUE. Le present contrat decrit certains droits juridiques. Vous pourriez avoir d'autres droits prevus par les lois de votre pays. Le present contrat ne modifie pas les droits que vous conferent les lois de votre pays si celles-ci ne le permettent pas.
-
-
diff --git a/tests/src/Common/external/external.csproj b/src/.nuget/init/init.csproj
index f7fa75e..115090d 100644
--- a/tests/src/Common/external/external.csproj
+++ b/src/.nuget/init/init.csproj
@@ -5,9 +5,20 @@
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<CLRTestKind>BuildOnly</CLRTestKind>
- <NugetTargetMoniker>.NETCoreApp,Version=v1.1</NugetTargetMoniker>
+ </PropertyGroup>
+ <ItemGroup>
+ <PackageReference Include="Microsoft.NETCore.Platforms">
+ <Version>$(RuntimeIdGraphDefinitionVersion)</Version>
+ </PackageReference>
+ </ItemGroup>
+ <PropertyGroup>
+ <TargetFramework>netcoreapp1.0</TargetFramework>
+ <TargetFrameworkIdentifier>.NETCoreApp</TargetFrameworkIdentifier>
+ <PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8</PackageTargetFallback>
+ <ContainsPackageReferences>true</ContainsPackageReferences>
+ <PrereleaseResolveNuGetPackages>false</PrereleaseResolveNuGetPackages>
</PropertyGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<Target Name="Build"
DependsOnTargets="ResolveReferences" />
-</Project> \ No newline at end of file
+</Project>
diff --git a/src/.nuget/init/project.json b/src/.nuget/init/project.json
deleted file mode 100644
index 5908fcc..0000000
--- a/src/.nuget/init/project.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.0.2-beta-24224-02"
- },
- "frameworks": {
- "dnxcore50": {
- "imports": "portable-net45+win8"
- }
- },
-} \ No newline at end of file
diff --git a/src/.nuget/init/readme.txt b/src/.nuget/init/readme.txt
deleted file mode 100644
index 6792dd5..0000000
--- a/src/.nuget/init/readme.txt
+++ /dev/null
@@ -1 +0,0 @@
-Please keep the package details listed in project.json in sync with <repo_root>/dir.props. \ No newline at end of file
diff --git a/src/.nuget/optdata/nuget.config b/src/.nuget/optdata/nuget.config
new file mode 100644
index 0000000..e747f7e
--- /dev/null
+++ b/src/.nuget/optdata/nuget.config
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <packageSources>
+ <add key="myget.org dotnet-core-optimization-data" value="https://dotnet.myget.org/F/dotnet-core-optimization-data/api/v3/index.json" />
+ </packageSources>
+</configuration>
diff --git a/src/.nuget/optdata/optdata.csproj b/src/.nuget/optdata/optdata.csproj
new file mode 100644
index 0000000..20e2a40
--- /dev/null
+++ b/src/.nuget/optdata/optdata.csproj
@@ -0,0 +1,24 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+
+ <PropertyGroup>
+ <TargetFramework>netstandard</TargetFramework>
+ <DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
+ <RuntimeIdentifiers>win7-x64;win7-x86;linux-x64</RuntimeIdentifiers>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <PackageReference Include="optimization.PGO.CoreCLR" Version="$(PgoDataPackageVersion)" Condition="'$(PgoDataPackageVersion)'!=''" />
+ <PackageReference Include="optimization.IBC.CoreCLR" Version="$(IbcDataPackageVersion)" Condition="'$(IbcDataPackageVersion)'!=''" />
+ </ItemGroup>
+
+ <Target Name="DumpPgoDataPackageVersion">
+ <Message Importance="high" Text="$(PgoDataPackageVersion)" />
+ </Target>
+
+ <Target Name="DumpIbcDataPackageVersion">
+ <Message Importance="high" Text="$(IbcDataPackageVersion)" />
+ </Target>
+
+</Project>
diff --git a/src/.nuget/packages.builds b/src/.nuget/packages.builds
index f57b9a9..0c0f65d 100644
--- a/src/.nuget/packages.builds
+++ b/src/.nuget/packages.builds
@@ -25,5 +25,9 @@
<Project Include="Microsoft.NETCore.ILDAsm\Microsoft.NETCore.ILDAsm.builds" />
</ItemGroup>
+ <Import Project="$(ToolsDir)versioning.targets" />
+ <!-- Make sure we create version.txt file since it will be packaged -->
+ <Target Name="EnsureVersionInfoFileExists" BeforeTargets="Build" DependsOnTargets="CreateVersionInfoFile" />
+
<Import Project="$(MSBuildThisFileDirectory)..\..\dir.traversal.targets" />
</Project>
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 9598d0c..b761b6a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -149,11 +149,6 @@ add_subdirectory(utilcode)
add_subdirectory(gcinfo)
add_subdirectory(coreclr)
add_subdirectory(jit)
-
-if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/jit32")
- add_subdirectory(jit32)
-endif()
-
add_subdirectory(gc)
add_subdirectory(vm)
add_subdirectory(md)
diff --git a/src/ToolBox/SOS/NETCore/SOS.NETCore.csproj b/src/ToolBox/SOS/NETCore/SOS.NETCore.csproj
index 440cff5..c579b59 100644
--- a/src/ToolBox/SOS/NETCore/SOS.NETCore.csproj
+++ b/src/ToolBox/SOS/NETCore/SOS.NETCore.csproj
@@ -11,13 +11,15 @@
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<NoStdLib>true</NoStdLib>
<NoCompilerStandardLib>true</NoCompilerStandardLib>
- <UseOpenKey Condition="'$(UseOpenKey)'==''">true</UseOpenKey>
+ <IsDotNetFrameworkProductAssembly>true</IsDotNetFrameworkProductAssembly>
+ <AssemblyKey>Open</AssemblyKey>
+ <ExcludeMscorlibFacade>true</ExcludeMscorlibFacade>
+ <ContainsPackageReferences>true</ContainsPackageReferences>
<!-- We don't use any of MSBuild's resolution logic for resolving the framework, so just set these two properties to any folder that exists to skip
the GenerateReferenceAssemblyPaths task (not target) and to prevent it from outputting a warning (MSB3644). -->
<_TargetFrameworkDirectories>$(MSBuildThisFileDirectory)/Documentation</_TargetFrameworkDirectories>
<_FullFrameworkReferenceAssemblyPaths>$(MSBuildThisFileDirectory)/Documentation</_FullFrameworkReferenceAssemblyPaths>
-
</PropertyGroup>
<!-- Default configurations to help VS understand the options -->
@@ -39,8 +41,25 @@
<Compile Include="SymbolReader.cs" />
</ItemGroup>
+ <PropertyGroup>
+ <TargetFramework>netcoreapp1.0</TargetFramework>
+ <TargetFrameworkIdentifier>.NETCoreApp</TargetFrameworkIdentifier>
+ <PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8</PackageTargetFallback>
+ </PropertyGroup>
+
<ItemGroup>
- <None Include="project.json" />
+ <PackageReference Include="Microsoft.NETCore.Platforms">
+ <Version>$(RuntimeIdGraphDefinitionVersion)</Version>
+ </PackageReference>
+ <PackageReference Include="System.IO.FileSystem">
+ <Version>4.0.1</Version>
+ </PackageReference>
+ <PackageReference Include="System.Runtime.InteropServices">
+ <Version>4.1.0</Version>
+ </PackageReference>
+ <PackageReference Include="System.Reflection.Metadata">
+ <Version>1.4.1</Version>
+ </PackageReference>
</ItemGroup>
<Target Name="CopyItemsToDirectory" AfterTargets="Build">
@@ -52,7 +71,7 @@
UseHardlinksIfPossible="false">
</Copy>
- <Copy
+ <Copy
SourceFiles="$(OutputPath)$(AssemblyName).pdb"
DestinationFolder="$(BinDir)\PDB"
SkipUnchangedFiles="false"
diff --git a/src/ToolBox/SOS/NETCore/project.json b/src/ToolBox/SOS/NETCore/project.json
deleted file mode 100644
index a92b173..0000000
--- a/src/ToolBox/SOS/NETCore/project.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.0.1",
- "System.IO.FileSystem": "4.0.1",
- "System.Runtime.InteropServices": "4.1.0",
- "System.Reflection.Metadata": "1.4.1"
- },
- "frameworks": {
- "netcoreapp1.0": {
- "imports": [
- "portable-net45+win8"
- ]
- }
- }
-}
diff --git a/src/ToolBox/SOS/Strike/sosdocsunix.txt b/src/ToolBox/SOS/Strike/sosdocsunix.txt
index 517227c..e9fd59c 100644
--- a/src/ToolBox/SOS/Strike/sosdocsunix.txt
+++ b/src/ToolBox/SOS/Strike/sosdocsunix.txt
@@ -623,6 +623,7 @@ createdump [options] [dumpFileName]
-n - create minidump.
-h - create minidump with heap (default).
-t - create triage minidump.
+-f - create full core dump (everything).
-d - enable diagnostic messages.
Creates a platform (ELF core on Linux, etc.) minidump. The pid can be placed in the dump
diff --git a/src/ToolBox/SOS/Strike/strike.cpp b/src/ToolBox/SOS/Strike/strike.cpp
index 0d5d8c3..1fff17f 100644
--- a/src/ToolBox/SOS/Strike/strike.cpp
+++ b/src/ToolBox/SOS/Strike/strike.cpp
@@ -14385,6 +14385,7 @@ DECLARE_API(CreateDump)
BOOL normal = FALSE;
BOOL withHeap = FALSE;
BOOL triage = FALSE;
+ BOOL full = FALSE;
BOOL diag = FALSE;
size_t nArg = 0;
@@ -14393,6 +14394,7 @@ DECLARE_API(CreateDump)
{"-n", &normal, COBOOL, FALSE},
{"-h", &withHeap, COBOOL, FALSE},
{"-t", &triage, COBOOL, FALSE},
+ {"-f", &full, COBOOL, FALSE},
{"-d", &diag, COBOOL, FALSE},
};
CMDValue arg[] =
@@ -14407,7 +14409,11 @@ DECLARE_API(CreateDump)
ULONG pid = 0;
g_ExtSystem->GetCurrentProcessId(&pid);
- if (withHeap)
+ if (full)
+ {
+ minidumpType = MiniDumpWithFullMemory;
+ }
+ else if (withHeap)
{
minidumpType = MiniDumpWithPrivateReadWriteMemory;
}
diff --git a/src/ToolBox/SOS/lldbplugin/CMakeLists.txt b/src/ToolBox/SOS/lldbplugin/CMakeLists.txt
index f0c2176..fe816ab 100644
--- a/src/ToolBox/SOS/lldbplugin/CMakeLists.txt
+++ b/src/ToolBox/SOS/lldbplugin/CMakeLists.txt
@@ -45,7 +45,6 @@ elseif(CLR_CMAKE_PLATFORM_ARCH_ARM64)
SET(REQUIRE_LLDBPLUGIN false)
endif()
-
set(LLVM_HOST_DIR "$ENV{LLVM_HOME}")
set(WITH_LLDB_LIBS "${LLVM_HOST_DIR}/lib" CACHE PATH "Path to LLDB libraries")
set(WITH_LLDB_INCLUDES "${LLVM_HOST_DIR}/include" CACHE PATH "Path to LLDB headers")
@@ -54,20 +53,22 @@ if(NOT ENABLE_LLDBPLUGIN)
return()
endif()
-# Check for LLDB library
-find_library(LLDB NAMES LLDB lldb lldb-4.0 lldb-3.9 lldb-3.8 lldb-3.7 lldb-3.6 lldb-3.5 PATHS "${WITH_LLDB_LIBS}" PATH_SUFFIXES llvm NO_DEFAULT_PATH)
-find_library(LLDB NAMES LLDB lldb lldb-4.0 lldb-3.8 lldb-3.7 lldb-3.6 lldb-3.5 PATH_SUFFIXES llvm)
-if(LLDB STREQUAL LLDB-NOTFOUND)
- if(REQUIRE_LLDBPLUGIN)
- set(MESSAGE_MODE FATAL_ERROR)
- else()
- set(MESSAGE_MODE WARNING)
+if (CLR_CMAKE_PLATFORM_DARWIN)
+ # Check for LLDB library
+ find_library(LLDB NAMES LLDB lldb lldb-4.0 lldb-3.9 lldb-3.8 lldb-3.7 lldb-3.6 lldb-3.5 PATHS "${WITH_LLDB_LIBS}" PATH_SUFFIXES llvm NO_DEFAULT_PATH)
+ find_library(LLDB NAMES LLDB lldb lldb-4.0 lldb-3.9 lldb-3.8 lldb-3.7 lldb-3.6 lldb-3.5 PATH_SUFFIXES llvm)
+ if(LLDB STREQUAL LLDB-NOTFOUND)
+ if(REQUIRE_LLDBPLUGIN)
+ set(MESSAGE_MODE FATAL_ERROR)
+ else()
+ set(MESSAGE_MODE WARNING)
+ endif()
+ message(${MESSAGE_MODE} "Cannot find lldb-3.5, lldb-3.6, lldb-3.8, lldb-3.9 or lldb-4.0. Try installing lldb-3.6-dev (or the appropriate package for your platform)")
+ return()
endif()
- message(${MESSAGE_MODE} "Cannot find lldb-3.5, lldb-3.6, lldb-3.8, lldb-3.9 or lldb-4.0. Try installing lldb-3.6-dev (or the appropriate package for your platform)")
- return()
-endif()
-message(STATUS "LLDB: ${LLDB}")
+ message(STATUS "LLDB: ${LLDB}")
+endif()
# Check for LLDB headers
# Multiple versions of LLDB can install side-by-side, so we need to check for lldb in various locations.
@@ -120,8 +121,8 @@ endif(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG OR UPPERCASE_CMAKE_BUILD_TYPE ST
_add_library(sosplugin SHARED ${SOURCES})
add_dependencies(sosplugin sos)
-if (CLR_CMAKE_PLATFORM_UNIX)
- target_link_libraries(sosplugin ${LLDB})
+if (CLR_CMAKE_PLATFORM_DARWIN)
+ target_link_libraries(sosplugin ${LLDB})
endif()
# add the install targets
diff --git a/src/binder/assemblybinder.cpp b/src/binder/assemblybinder.cpp
index a73f79f..73ea025 100644
--- a/src/binder/assemblybinder.cpp
+++ b/src/binder/assemblybinder.cpp
@@ -685,26 +685,21 @@ namespace BINDER_SPACE
StackSString sCoreLib;
- // At run-time, System.Private.CoreLib.ni.dll is typically always available, and
- // System.Private.CoreLib.dll is typically not. So check for the NI first.
+ // At run-time, System.Private.CoreLib.dll is expected to be the NI image.
sCoreLib = sCoreLibDir;
- sCoreLib.Append(CoreLibName_NI_W);
- if (!fBindToNativeImage || FAILED(AssemblyBinder::GetAssembly(sCoreLib,
- FALSE /* fInspectionOnly */,
- TRUE /* fIsInGAC */,
- TRUE /* fExplicitBindToNativeImage */,
- &pSystemAssembly)))
- {
- // If System.Private.CoreLib.ni.dll is unavailable, look for System.Private.CoreLib.dll instead
- sCoreLib = sCoreLibDir;
- sCoreLib.Append(CoreLibName_IL_W);
- IF_FAIL_GO(AssemblyBinder::GetAssembly(sCoreLib,
+ sCoreLib.Append(CoreLibName_IL_W);
+ BOOL fExplicitBindToNativeImage = (fBindToNativeImage == true)? TRUE:FALSE;
+#ifdef FEATURE_NI_BIND_FALLBACK
+ // Some non-Windows platforms do not automatically generate the NI image as CoreLib.dll.
+ // If those platforms also do not support automatic fallback from NI to IL, bind as IL.
+ fExplicitBindToNativeImage = FALSE;
+#endif // FEATURE_NI_BIND_FALLBACK
+ IF_FAIL_GO(AssemblyBinder::GetAssembly(sCoreLib,
FALSE /* fInspectionOnly */,
TRUE /* fIsInGAC */,
- FALSE /* fExplicitBindToNativeImage */,
+ fExplicitBindToNativeImage,
&pSystemAssembly));
- }
-
+
*ppSystemAssembly = pSystemAssembly.Extract();
Exit:
@@ -1601,8 +1596,13 @@ namespace BINDER_SPACE
IF_FAIL_GO(BinderHasNativeHeader(pNativePEImage, &hasHeader));
if (!hasHeader)
{
- pPEImage = pNativePEImage;
- pNativePEImage = NULL;
+ BinderReleasePEImage(pPEImage);
+ BinderReleasePEImage(pNativePEImage);
+
+ BINDER_LOG_ENTER(W("BinderAcquirePEImageIL"));
+ hr = BinderAcquirePEImage(szAssemblyPath, &pPEImage, &pNativePEImage, false);
+ BINDER_LOG_LEAVE_HR(W("BinderAcquirePEImageIL"), hr);
+ IF_FAIL_GO(hr);
}
}
diff --git a/src/build.proj b/src/build.proj
index 5da94e4..7962d27 100644
--- a/src/build.proj
+++ b/src/build.proj
@@ -17,13 +17,21 @@
</Target>
<ItemGroup>
+ <ILToCopy Include="$(BinDir)System.Private.CoreLib.dll"/>
<PDBSToMove Include="$(BinDir)System.Private.CoreLib.pdb"/>
</ItemGroup>
<PropertyGroup>
+ <CoreLibPath>$(BinDir)System.Private.CoreLib.dll</CoreLibPath>
<CoreLibPDBPath>$(BinDir)System.Private.CoreLib.pdb</CoreLibPDBPath>
</PropertyGroup>
+ <Target Name="CopyCoreLib" AfterTargets="Build">
+ <Copy Condition="Exists($(CoreLibPath))"
+ SourceFiles="@(ILToCopy)"
+ DestinationFolder="$(BinDir)IL" />
+ </Target>
+
<Target Name="MovePDB" AfterTargets="Build">
<Move Condition="Exists($(CoreLibPDBPath))"
SourceFiles="@(PDBSToMove)"
diff --git a/src/classlibnative/bcltype/arraynative.cpp b/src/classlibnative/bcltype/arraynative.cpp
index c54d2f3..232f59d 100644
--- a/src/classlibnative/bcltype/arraynative.cpp
+++ b/src/classlibnative/bcltype/arraynative.cpp
@@ -319,14 +319,16 @@ ArrayNative::AssignArrayEnum ArrayNative::CanAssignArrayTypeNoGC(const BASEARRAY
return AssignDontKnow;
}
- const CorElementType srcElType = srcTH.GetSignatureCorElementType();
- const CorElementType destElType = destTH.GetSignatureCorElementType();
+ const CorElementType srcElType = srcTH.GetVerifierCorElementType();
+ const CorElementType destElType = destTH.GetVerifierCorElementType();
_ASSERTE(srcElType < ELEMENT_TYPE_MAX);
_ASSERTE(destElType < ELEMENT_TYPE_MAX);
// Copying primitives from one type to another
if (CorTypeInfo::IsPrimitiveType_NoThrow(srcElType) && CorTypeInfo::IsPrimitiveType_NoThrow(destElType))
{
+ if (srcElType == destElType)
+ return AssignWillWork;
if (InvokeUtil::CanPrimitiveWiden(destElType, srcElType))
return AssignPrimitiveWiden;
else
@@ -349,10 +351,6 @@ ArrayNative::AssignArrayEnum ArrayNative::CanAssignArrayTypeNoGC(const BASEARRAY
if (srcTH.IsInterface() && destElType != ELEMENT_TYPE_VALUETYPE)
return AssignMustCast;
- // Enum is stored as a primitive of type dest.
- if (srcTH.IsEnum() && srcTH.GetInternalCorElementType() == destElType)
- return AssignWillWork;
-
return AssignDontKnow;
}
@@ -405,14 +403,16 @@ ArrayNative::AssignArrayEnum ArrayNative::CanAssignArrayType(const BASEARRAYREF
return AssignWrongType;
}
- const CorElementType srcElType = srcTH.GetSignatureCorElementType();
- const CorElementType destElType = destTH.GetSignatureCorElementType();
+ const CorElementType srcElType = srcTH.GetVerifierCorElementType();
+ const CorElementType destElType = destTH.GetVerifierCorElementType();
_ASSERTE(srcElType < ELEMENT_TYPE_MAX);
_ASSERTE(destElType < ELEMENT_TYPE_MAX);
// Copying primitives from one type to another
if (CorTypeInfo::IsPrimitiveType_NoThrow(srcElType) && CorTypeInfo::IsPrimitiveType_NoThrow(destElType))
{
+ if (srcElType == destElType)
+ return AssignWillWork;
if (InvokeUtil::CanPrimitiveWiden(destElType, srcElType))
return AssignPrimitiveWiden;
else
@@ -435,10 +435,6 @@ ArrayNative::AssignArrayEnum ArrayNative::CanAssignArrayType(const BASEARRAYREF
if (srcTH.IsInterface() && destElType != ELEMENT_TYPE_VALUETYPE)
return AssignMustCast;
- // Enum is stored as a primitive of type dest.
- if (srcTH.IsEnum() && srcTH.GetInternalCorElementType() == destElType)
- return AssignWillWork;
-
return AssignWrongType;
}
@@ -631,8 +627,8 @@ void ArrayNative::PrimitiveWiden(BASEARRAYREF pSrc, unsigned int srcIndex, BASEA
TypeHandle srcTH = pSrc->GetArrayElementTypeHandle();
TypeHandle destTH = pDest->GetArrayElementTypeHandle();
- const CorElementType srcElType = srcTH.GetSignatureCorElementType();
- const CorElementType destElType = destTH.GetSignatureCorElementType();
+ const CorElementType srcElType = srcTH.GetVerifierCorElementType();
+ const CorElementType destElType = destTH.GetVerifierCorElementType();
const unsigned int srcSize = GetSizeForCorElementType(srcElType);
const unsigned int destSize = GetSizeForCorElementType(destElType);
diff --git a/src/corefx/System.Globalization.Native/icushim.h b/src/corefx/System.Globalization.Native/icushim.h
index 408ec15..313002e 100644
--- a/src/corefx/System.Globalization.Native/icushim.h
+++ b/src/corefx/System.Globalization.Native/icushim.h
@@ -32,6 +32,8 @@
#include <unicode/usearch.h>
#include <unicode/utf16.h>
#include <unicode/utypes.h>
+#include <unicode/urename.h>
+#include <unicode/ustring.h>
// List of all functions from the ICU libraries that are used in the System.Globalization.Native.so
#define FOR_ALL_UNCONDITIONAL_ICU_FUNCTIONS \
diff --git a/src/createVersionFile.proj b/src/createVersionFile.proj
new file mode 100644
index 0000000..4edddc7
--- /dev/null
+++ b/src/createVersionFile.proj
@@ -0,0 +1,13 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+ <Import Project="..\dir.props" />
+ <Import Project="$(ToolsDir)versioning.targets" Condition="Exists('$(ToolsDir)versioning.targets')"/>
+
+ <PropertyGroup>
+ <VersionPropsImported>false</VersionPropsImported>
+ </PropertyGroup>
+
+ <Target Name="Build"
+ DependsOnTargets="CreateOrUpdateCurrentVersionFile">
+ </Target>
+</Project> \ No newline at end of file
diff --git a/src/debug/createdump/CMakeLists.txt b/src/debug/createdump/CMakeLists.txt
index 5b5ec0a..4272cfc 100644
--- a/src/debug/createdump/CMakeLists.txt
+++ b/src/debug/createdump/CMakeLists.txt
@@ -2,6 +2,17 @@ project(createdump)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
+# Set the RPATH of createdump so that it can find dependencies without needing to set LD_LIBRARY_PATH
+# For more information: http://www.cmake.org/Wiki/CMake_RPATH_handling.
+if (CORECLR_SET_RPATH)
+ set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
+ if(CLR_CMAKE_PLATFORM_DARWIN)
+ set(CMAKE_INSTALL_RPATH "@loader_path")
+ else()
+ set(CMAKE_INSTALL_RPATH "\$ORIGIN")
+ endif(CLR_CMAKE_PLATFORM_DARWIN)
+endif (CORECLR_SET_RPATH)
+
remove_definitions(-DUNICODE)
remove_definitions(-D_UNICODE)
diff --git a/src/debug/createdump/crashinfo.cpp b/src/debug/createdump/crashinfo.cpp
index cae8857..b825f4d 100644
--- a/src/debug/createdump/crashinfo.cpp
+++ b/src/debug/createdump/crashinfo.cpp
@@ -155,33 +155,68 @@ CrashInfo::GatherCrashInfo(const char* programPath, MINIDUMP_TYPE minidumpType)
{
return false;
}
- // Get shared module debug info
- if (!GetDSOInfo())
- {
- return false;
- }
// Gather all the module memory mappings (from /dev/$pid/maps)
if (!EnumerateModuleMappings())
{
return false;
}
- // Gather all the useful memory regions from the DAC
- if (!EnumerateMemoryRegionsWithDAC(programPath, minidumpType))
+ // Get shared module debug info
+ if (!GetDSOInfo())
{
return false;
}
- // Add the thread's stack and some code memory to core
- for (ThreadInfo* thread : m_threads)
+ // If full memory dump, include everything regardless of permissions
+ if (minidumpType & MiniDumpWithFullMemory)
+ {
+ for (const MemoryRegion& region : m_moduleMappings)
+ {
+ if (ValidRegion(region))
+ {
+ InsertMemoryRegion(region);
+ }
+ }
+ for (const MemoryRegion& region : m_otherMappings)
+ {
+ if (ValidRegion(region))
+ {
+ InsertMemoryRegion(region);
+ }
+ }
+ }
+ else
{
- uint64_t start;
- size_t size;
+ // Add all the heap (read/write) memory regions but not the modules' r/w data segments
+ if (minidumpType & MiniDumpWithPrivateReadWriteMemory)
+ {
+ for (const MemoryRegion& region : m_otherMappings)
+ {
+ if (region.Permissions() == (PF_R | PF_W))
+ {
+ if (ValidRegion(region))
+ {
+ InsertMemoryRegion(region);
+ }
+ }
+ }
+ }
+ // Gather all the useful memory regions from the DAC
+ if (!EnumerateMemoryRegionsWithDAC(programPath, minidumpType))
+ {
+ return false;
+ }
+ // Add the thread's stack and some code memory to core
+ for (ThreadInfo* thread : m_threads)
+ {
+ uint64_t start;
+ size_t size;
- // Add the thread's stack and some of the code
- thread->GetThreadStack(*this, &start, &size);
- InsertMemoryRegion(start, size);
+ // Add the thread's stack and some of the code
+ thread->GetThreadStack(*this, &start, &size);
+ InsertMemoryRegion(start, size);
- thread->GetThreadCode(&start, &size);
- InsertMemoryRegion(start, size);
+ thread->GetThreadCode(&start, &size);
+ InsertMemoryRegion(start, size);
+ }
}
// Join all adjacent memory regions
CombineMemoryRegions();
@@ -240,7 +275,7 @@ CrashInfo::EnumerateModuleMappings()
// Here we read /proc/<pid>/maps file in order to parse it and figure out what it says
// about a library we are looking for. This file looks something like this:
//
- // [address] [perms] [offset] [dev] [inode] [pathname] - HEADER is not preset in an actual file
+ // [address] [perms] [offset] [dev] [inode] [pathname] - HEADER is not preset in an actual file
//
// 35b1800000-35b1820000 r-xp 00000000 08:02 135522 /usr/lib64/ld-2.15.so
// 35b1a1f000-35b1a20000 r--p 0001f000 08:02 135522 /usr/lib64/ld-2.15.so
@@ -282,8 +317,8 @@ CrashInfo::EnumerateModuleMappings()
char* permissions = nullptr;
char* moduleName = nullptr;
- int c = 0;
- if ((c = sscanf(line, "%lx-%lx %m[-rwxsp] %lx %*[:0-9a-f] %*d %ms\n", &start, &end, &permissions, &offset, &moduleName)) == 5)
+ int c = sscanf(line, "%lx-%lx %m[-rwxsp] %lx %*[:0-9a-f] %*d %ms\n", &start, &end, &permissions, &offset, &moduleName);
+ if (c == 4 || c == 5)
{
if (linuxGateAddress != nullptr && reinterpret_cast<void*>(start) == linuxGateAddress)
{
@@ -335,60 +370,6 @@ CrashInfo::EnumerateModuleMappings()
}
bool
-CrashInfo::EnumerateMemoryRegionsWithDAC(const char* programPath, MINIDUMP_TYPE minidumpType)
-{
- PFN_CLRDataCreateInstance pfnCLRDataCreateInstance = nullptr;
- ICLRDataEnumMemoryRegions *clrDataEnumRegions = nullptr;
- HMODULE hdac = nullptr;
- HRESULT hr = S_OK;
- bool result = false;
-
- // We assume that the DAC is in the same location as this createdump exe
- std::string dacPath;
- dacPath.append(programPath);
- dacPath.append("/");
- dacPath.append(MAKEDLLNAME_A("mscordaccore"));
-
- // Load and initialize the DAC
- hdac = LoadLibraryA(dacPath.c_str());
- if (hdac == nullptr)
- {
- fprintf(stderr, "LoadLibraryA(%s) FAILED %d\n", dacPath.c_str(), GetLastError());
- goto exit;
- }
- pfnCLRDataCreateInstance = (PFN_CLRDataCreateInstance)GetProcAddress(hdac, "CLRDataCreateInstance");
- if (pfnCLRDataCreateInstance == nullptr)
- {
- fprintf(stderr, "GetProcAddress(CLRDataCreateInstance) FAILED %d\n", GetLastError());
- goto exit;
- }
- hr = pfnCLRDataCreateInstance(__uuidof(ICLRDataEnumMemoryRegions), m_dataTarget, (void**)&clrDataEnumRegions);
- if (FAILED(hr))
- {
- fprintf(stderr, "CLRDataCreateInstance(ICLRDataEnumMemoryRegions) FAILED %08x\n", hr);
- goto exit;
- }
- // Calls CrashInfo::EnumMemoryRegion for each memory region found by the DAC
- hr = clrDataEnumRegions->EnumMemoryRegions(this, minidumpType, CLRDATA_ENUM_MEM_DEFAULT);
- if (FAILED(hr))
- {
- fprintf(stderr, "EnumMemoryRegions FAILED %08x\n", hr);
- goto exit;
- }
- result = true;
-exit:
- if (clrDataEnumRegions != nullptr)
- {
- clrDataEnumRegions->Release();
- }
- if (hdac != nullptr)
- {
- FreeLibrary(hdac);
- }
- return result;
-}
-
-bool
CrashInfo::GetDSOInfo()
{
Phdr* phdrAddr = reinterpret_cast<Phdr*>(m_auxvValues[AT_PHDR]);
@@ -453,24 +434,87 @@ CrashInfo::GetDSOInfo()
}
// Add the DSO link_map entries
+ ArrayHolder<char> moduleName = new char[PATH_MAX];
for (struct link_map* linkMapAddr = debugEntry.r_map; linkMapAddr != nullptr;) {
struct link_map map;
if (!ReadMemory(linkMapAddr, &map, sizeof(map))) {
return false;
}
- char moduleName[257] = { 0 };
+ int i = 0;
if (map.l_name != nullptr) {
- if (!ReadMemory(map.l_name, &moduleName, sizeof(moduleName) - 1)) {
- return false;
+ for (; i < PATH_MAX; i++)
+ {
+ if (!ReadMemory(map.l_name + i, &moduleName[i], 1)) {
+ TRACE("DSO: ReadMemory link_map name %p + %d FAILED\n", map.l_name, i);
+ break;
+ }
+ if (moduleName[i] == '\0') {
+ break;
+ }
}
}
- TRACE("DSO: link_map entry %p l_ld %p l_addr %lx %s\n", linkMapAddr, map.l_ld, map.l_addr, moduleName);
+ moduleName[i] = '\0';
+ TRACE("DSO: link_map entry %p l_ld %p l_addr %lx %s\n", linkMapAddr, map.l_ld, map.l_addr, (char*)moduleName);
linkMapAddr = map.l_next;
}
return true;
}
+bool
+CrashInfo::EnumerateMemoryRegionsWithDAC(const char* programPath, MINIDUMP_TYPE minidumpType)
+{
+ PFN_CLRDataCreateInstance pfnCLRDataCreateInstance = nullptr;
+ ICLRDataEnumMemoryRegions *clrDataEnumRegions = nullptr;
+ HMODULE hdac = nullptr;
+ HRESULT hr = S_OK;
+ bool result = false;
+
+ // We assume that the DAC is in the same location as this createdump exe
+ std::string dacPath;
+ dacPath.append(programPath);
+ dacPath.append("/");
+ dacPath.append(MAKEDLLNAME_A("mscordaccore"));
+
+ // Load and initialize the DAC
+ hdac = LoadLibraryA(dacPath.c_str());
+ if (hdac == nullptr)
+ {
+ fprintf(stderr, "LoadLibraryA(%s) FAILED %d\n", dacPath.c_str(), GetLastError());
+ goto exit;
+ }
+ pfnCLRDataCreateInstance = (PFN_CLRDataCreateInstance)GetProcAddress(hdac, "CLRDataCreateInstance");
+ if (pfnCLRDataCreateInstance == nullptr)
+ {
+ fprintf(stderr, "GetProcAddress(CLRDataCreateInstance) FAILED %d\n", GetLastError());
+ goto exit;
+ }
+ hr = pfnCLRDataCreateInstance(__uuidof(ICLRDataEnumMemoryRegions), m_dataTarget, (void**)&clrDataEnumRegions);
+ if (FAILED(hr))
+ {
+ fprintf(stderr, "CLRDataCreateInstance(ICLRDataEnumMemoryRegions) FAILED %08x\n", hr);
+ goto exit;
+ }
+ // Calls CrashInfo::EnumMemoryRegion for each memory region found by the DAC
+ hr = clrDataEnumRegions->EnumMemoryRegions(this, minidumpType, CLRDATA_ENUM_MEM_DEFAULT);
+ if (FAILED(hr))
+ {
+ fprintf(stderr, "EnumMemoryRegions FAILED %08x\n", hr);
+ goto exit;
+ }
+ result = true;
+exit:
+ if (clrDataEnumRegions != nullptr)
+ {
+ clrDataEnumRegions->Release();
+ }
+ if (hdac != nullptr)
+ {
+ FreeLibrary(hdac);
+ }
+ return result;
+}
+
//
// ReadMemory from target and add to memory regions list
//
@@ -480,6 +524,7 @@ CrashInfo::ReadMemory(void* address, void* buffer, size_t size)
uint32_t read = 0;
if (FAILED(m_dataTarget->ReadVirtual(reinterpret_cast<CLRDATA_ADDRESS>(address), reinterpret_cast<PBYTE>(buffer), size, &read)))
{
+ fprintf(stderr, "ReadMemory(%p, %lx) FAILED\n", address, size);
return false;
}
InsertMemoryRegion(reinterpret_cast<uint64_t>(address), size);
@@ -501,38 +546,67 @@ CrashInfo::InsertMemoryRegion(uint64_t address, size_t size)
uint64_t end = ((address + size) + (PAGE_SIZE - 1)) & PAGE_MASK;
assert(end > 0);
- MemoryRegion memoryRegionFull(start, end);
+ MemoryRegion region(start, end);
+ InsertMemoryRegion(region);
+}
+//
+// Add a memory region to the list
+//
+void
+CrashInfo::InsertMemoryRegion(const MemoryRegion& region)
+{
// First check if the full memory region can be added without conflicts
- const auto& found = m_memoryRegions.find(memoryRegionFull);
+ const auto& found = m_memoryRegions.find(region);
if (found == m_memoryRegions.end())
{
// Add full memory region
- m_memoryRegions.insert(memoryRegionFull);
+ m_memoryRegions.insert(region);
}
else
{
// The memory region is not wholely contained in region found
- if (!found->Contains(memoryRegionFull))
+ if (!found->Contains(region))
{
+ uint64_t start = region.StartAddress();
+
// The region overlaps/conflicts with one already in the set so
// add one page at a time to avoid the overlapping pages.
- uint64_t numberPages = (end - start) >> PAGE_SHIFT;
+ uint64_t numberPages = region.Size() >> PAGE_SHIFT;
for (int p = 0; p < numberPages; p++, start += PAGE_SIZE)
{
- MemoryRegion memoryRegion(start, start + PAGE_SIZE);
+ MemoryRegion memoryRegionPage(start, start + PAGE_SIZE);
- const auto& found = m_memoryRegions.find(memoryRegion);
+ const auto& found = m_memoryRegions.find(memoryRegionPage);
if (found == m_memoryRegions.end())
{
- m_memoryRegions.insert(memoryRegion);
+ m_memoryRegions.insert(memoryRegionPage);
}
}
}
}
}
+bool
+CrashInfo::ValidRegion(const MemoryRegion& region)
+{
+ uint64_t start = region.StartAddress();
+ uint64_t numberPages = region.Size() >> PAGE_SHIFT;
+
+ for (int p = 0; p < numberPages; p++, start += PAGE_SIZE)
+ {
+ BYTE buffer[1];
+ uint32_t read;
+
+ if (FAILED(m_dataTarget->ReadVirtual(start, buffer, 1, &read)))
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
//
// Combine any adjacent memory regions into one
//
diff --git a/src/debug/createdump/crashinfo.h b/src/debug/createdump/crashinfo.h
index 40d7f5d..914a88e 100644
--- a/src/debug/createdump/crashinfo.h
+++ b/src/debug/createdump/crashinfo.h
@@ -65,9 +65,11 @@ public:
private:
bool GetAuxvEntries();
bool EnumerateModuleMappings();
- bool EnumerateMemoryRegionsWithDAC(const char* programPath, MINIDUMP_TYPE minidumpType);
bool GetDSOInfo();
+ bool EnumerateMemoryRegionsWithDAC(const char* programPath, MINIDUMP_TYPE minidumpType);
bool ReadMemory(void* address, void* buffer, size_t size);
void InsertMemoryRegion(uint64_t address, size_t size);
+ void InsertMemoryRegion(const MemoryRegion& region);
+ bool ValidRegion(const MemoryRegion& region);
void CombineMemoryRegions();
};
diff --git a/src/debug/createdump/createdump.cpp b/src/debug/createdump/createdump.cpp
index 0a95e53..f6ea1db 100644
--- a/src/debug/createdump/createdump.cpp
+++ b/src/debug/createdump/createdump.cpp
@@ -15,8 +15,8 @@ CreateDumpCommon(const char* programPath, const char* dumpPathTemplate, MINIDUMP
ReleaseHolder<DumpWriter> dumpWriter = new DumpWriter(*crashInfo);
bool result = false;
- ArrayHolder<char> dumpPath = new char[MAX_LONGPATH];
- snprintf(dumpPath, MAX_LONGPATH, dumpPathTemplate, crashInfo->Pid());
+ ArrayHolder<char> dumpPath = new char[PATH_MAX];
+ snprintf(dumpPath, PATH_MAX, dumpPathTemplate, crashInfo->Pid());
const char* dumpType = "minidump";
switch (minidumpType)
@@ -29,6 +29,10 @@ CreateDumpCommon(const char* programPath, const char* dumpPathTemplate, MINIDUMP
dumpType = "triage minidump";
break;
+ case MiniDumpWithFullMemory:
+ dumpType = "full dump";
+ break;
+
default:
break;
}
diff --git a/src/debug/createdump/datatarget.cpp b/src/debug/createdump/datatarget.cpp
index 38505e2..9609fa3 100644
--- a/src/debug/createdump/datatarget.cpp
+++ b/src/debug/createdump/datatarget.cpp
@@ -159,7 +159,6 @@ DumpDataTarget::ReadVirtual(
size_t read = pread64(m_fd, buffer, size, (off64_t)address);
if (read == -1)
{
- fprintf(stderr, "ReadVirtual FAILED %016lx %08x\n", address, size);
*done = 0;
return E_FAIL;
}
diff --git a/src/debug/createdump/dumpwriter.cpp b/src/debug/createdump/dumpwriter.cpp
index 9057d18..69f0ece 100644
--- a/src/debug/createdump/dumpwriter.cpp
+++ b/src/debug/createdump/dumpwriter.cpp
@@ -209,7 +209,7 @@ DumpWriter::WriteDump()
// Write all the thread's state and registers
for (const ThreadInfo* thread : m_crashInfo.Threads())
{
- if (!WriteThread(*thread, 0)) {
+ if (!WriteThread(*thread, SIGABRT)) {
return false;
}
}
diff --git a/src/debug/createdump/main.cpp b/src/debug/createdump/main.cpp
index 0338277..cb4d3c6 100644
--- a/src/debug/createdump/main.cpp
+++ b/src/debug/createdump/main.cpp
@@ -9,6 +9,7 @@ const char* g_help = "createdump [options] pid\n"
"-n, --normal - create minidump.\n"
"-h, --withheap - create minidump with heap (default).\n"
"-t, --triage - create triage minidump.\n"
+"-u, --full - create full core dump.\n"
"-d, --diag - enable diagnostic messages.\n";
bool CreateDumpCommon(const char* programPath, const char* dumpPathTemplate, MINIDUMP_TYPE minidumpType, CrashInfo* crashInfo);
@@ -60,6 +61,10 @@ int __cdecl main(const int argc, const char* argv[])
{
minidumpType = MiniDumpFilterTriage;
}
+ else if ((strcmp(*argv, "-u") == 0) || (strcmp(*argv, "--full") == 0))
+ {
+ minidumpType = MiniDumpWithFullMemory;
+ }
else if ((strcmp(*argv, "-d") == 0) || (strcmp(*argv, "--diag") == 0))
{
g_diagnostics = true;
diff --git a/src/debug/createdump/memoryregion.h b/src/debug/createdump/memoryregion.h
index 16c4d1c..1332ab1 100644
--- a/src/debug/createdump/memoryregion.h
+++ b/src/debug/createdump/memoryregion.h
@@ -36,35 +36,12 @@ public:
assert((end & ~PAGE_MASK) == 0);
}
- const uint32_t Permissions() const
- {
- return m_permissions;
- }
-
- const uint64_t StartAddress() const
- {
- return m_startAddress;
- }
-
- const uint64_t EndAddress() const
- {
- return m_endAddress;
- }
-
- const uint64_t Size() const
- {
- return m_endAddress - m_startAddress;
- }
-
- const uint64_t Offset() const
- {
- return m_offset;
- }
-
- const char* FileName() const
- {
- return m_fileName;
- }
+ const uint32_t Permissions() const { return m_permissions; }
+ const uint64_t StartAddress() const { return m_startAddress; }
+ const uint64_t EndAddress() const { return m_endAddress; }
+ const uint64_t Size() const { return m_endAddress - m_startAddress; }
+ const uint64_t Offset() const { return m_offset; }
+ const char* FileName() const { return m_fileName; }
bool operator<(const MemoryRegion& rhs) const
{
@@ -88,10 +65,10 @@ public:
void Print() const
{
if (m_fileName != nullptr) {
- TRACE("%016lx - %016lx (%04ld) %016lx %x %s\n", m_startAddress, m_endAddress, (Size() >> PAGE_SHIFT), m_offset, m_permissions, m_fileName);
+ TRACE("%016lx - %016lx (%06ld) %016lx %x %s\n", m_startAddress, m_endAddress, (Size() >> PAGE_SHIFT), m_offset, m_permissions, m_fileName);
}
else {
- TRACE("%016lx - %016lx (%04ld) %02x\n", m_startAddress, m_endAddress, (Size() >> PAGE_SHIFT), m_permissions);
+ TRACE("%016lx - %016lx (%06ld) %x\n", m_startAddress, m_endAddress, (Size() >> PAGE_SHIFT), m_permissions);
}
}
};
diff --git a/src/debug/createdump/threadinfo.cpp b/src/debug/createdump/threadinfo.cpp
index 8e73fcf..e2c10fc 100644
--- a/src/debug/createdump/threadinfo.cpp
+++ b/src/debug/createdump/threadinfo.cpp
@@ -38,7 +38,7 @@ ThreadInfo::Initialize(ICLRDataTarget* dataTarget)
return false;
}
}
- TRACE("Thread %04x RIP %016llx RSP %016llx\n", m_tid, m_gpRegisters.rip, m_gpRegisters.rsp);
+ TRACE("Thread %04x RIP %016llx RSP %016llx\n", m_tid, (unsigned long long)m_gpRegisters.rip, (unsigned long long)m_gpRegisters.rsp);
return true;
}
diff --git a/src/debug/daccess/daccess.cpp b/src/debug/daccess/daccess.cpp
index dcf6314..14ce251 100644
--- a/src/debug/daccess/daccess.cpp
+++ b/src/debug/daccess/daccess.cpp
@@ -6305,8 +6305,6 @@ bool ClrDataAccess::ReportMem(TADDR addr, TSIZE_T size, bool fExpectSuccess /*=
status = m_enumMemCb->EnumMemoryRegion(TO_CDADDR(addr), enumSize);
if (status != S_OK)
{
- m_memStatus = status;
-
// If dump generation was cancelled, allow us to throw upstack so we'll actually quit.
if ((fExpectSuccess) && (status != COR_E_OPERATIONCANCELED))
return false;
diff --git a/src/debug/daccess/dacimpl.h b/src/debug/daccess/dacimpl.h
index 635be80..cd133eb 100644
--- a/src/debug/daccess/dacimpl.h
+++ b/src/debug/daccess/dacimpl.h
@@ -1432,7 +1432,6 @@ private:
ICLRMetadataLocator * m_legacyMetaDataLocator;
LONG m_refs;
- HRESULT m_memStatus;
MDImportsCache m_mdImports;
ICLRDataEnumMemoryRegionsCallback* m_enumMemCb;
ICLRDataEnumMemoryRegionsCallback2* m_updateMemCb;
diff --git a/src/debug/daccess/enummem.cpp b/src/debug/daccess/enummem.cpp
index 9305bba..ebe0fc8 100644
--- a/src/debug/daccess/enummem.cpp
+++ b/src/debug/daccess/enummem.cpp
@@ -374,7 +374,6 @@ HRESULT ClrDataAccess::EnumMemoryRegionsWorkerHeap(IN CLRDataEnumMemoryFlags fla
// now dump the memory get dragged in by using DAC API implicitly.
m_dumpStats.m_cbImplicity = m_instances.DumpAllInstances(m_enumMemCb);
- status = m_memStatus;
// Do not let any remaining implicitly enumerated memory leak out.
Flush();
@@ -394,7 +393,7 @@ HRESULT ClrDataAccess::DumpManagedObject(CLRDataEnumMemoryFlags flags, OBJECTREF
{
SUPPORTS_DAC;
- HRESULT status = S_OK;
+ HRESULT status = S_OK;
if (objRef == NULL)
{
@@ -1616,7 +1615,6 @@ HRESULT ClrDataAccess::EnumMemoryRegionsWorkerSkinny(IN CLRDataEnumMemoryFlags f
// now dump the memory get dragged in by using DAC API implicitly.
m_dumpStats.m_cbImplicity = m_instances.DumpAllInstances(m_enumMemCb);
- status = m_memStatus;
// Do not let any remaining implicitly enumerated memory leak out.
Flush();
@@ -1667,7 +1665,6 @@ HRESULT ClrDataAccess::EnumMemoryRegionsWorkerMicroTriage(IN CLRDataEnumMemoryFl
// now dump the memory get dragged in by using DAC API implicitly.
m_dumpStats.m_cbImplicity = m_instances.DumpAllInstances(m_enumMemCb);
- status = m_memStatus;
// Do not let any remaining implicitly enumerated memory leak out.
Flush();
@@ -1811,8 +1808,6 @@ HRESULT ClrDataAccess::EnumMemoryRegionsWorkerCustom()
status = E_INVALIDARG;
}
- status = m_memStatus;
-
return S_OK;
}
@@ -1935,7 +1930,6 @@ ClrDataAccess::EnumMemoryRegions(IN ICLRDataEnumMemoryRegionsCallback* callback,
// We should not be trying to enumerate while we have an enumeration outstanding
_ASSERTE(m_enumMemCb==NULL);
- m_memStatus = S_OK;
m_enumMemCb = callback;
// QI for ICLRDataEnumMemoryRegionsCallback2 will succeed only for Win8+.
diff --git a/src/debug/di/cordb.cpp b/src/debug/di/cordb.cpp
index e6ed44d..ae74c34 100644
--- a/src/debug/di/cordb.cpp
+++ b/src/debug/di/cordb.cpp
@@ -20,6 +20,13 @@
#include "dbgtransportmanager.h"
#endif // FEATURE_DBGIPC_TRANSPORT_DI
+#if defined(PLATFORM_UNIX) || defined(__ANDROID__)
+// Local (in-process) debugging is not supported for UNIX and Android.
+#define SUPPORT_LOCAL_DEBUGGING 0
+#else
+#define SUPPORT_LOCAL_DEBUGGING 1
+#endif
+
//********** Globals. *********************************************************
#ifndef FEATURE_PAL
HINSTANCE g_hInst; // Instance handle to this piece of code.
@@ -499,7 +506,7 @@ DbiGetThreadContext(HANDLE hThread,
DT_CONTEXT *lpContext)
{
// if we aren't local debugging this isn't going to work
-#if !defined(_ARM_) || defined(FEATURE_DBGIPC_TRANSPORT_DI) || defined(__ANDROID__)
+#if !defined(_ARM_) || defined(FEATURE_DBGIPC_TRANSPORT_DI) || !SUPPORT_LOCAL_DEBUGGING
_ASSERTE(!"Can't use local GetThreadContext remotely, this needed to go to datatarget");
return FALSE;
#else
@@ -538,7 +545,7 @@ BOOL
DbiSetThreadContext(HANDLE hThread,
const DT_CONTEXT *lpContext)
{
-#if !defined(_ARM_) || defined(FEATURE_DBGIPC_TRANSPORT_DI) || defined(__ANDROID__)
+#if !defined(_ARM_) || defined(FEATURE_DBGIPC_TRANSPORT_DI) || !SUPPORT_LOCAL_DEBUGGING
_ASSERTE(!"Can't use local GetThreadContext remotely, this needed to go to datatarget");
return FALSE;
#else
diff --git a/src/debug/shared/amd64/primitives.cpp b/src/debug/shared/amd64/primitives.cpp
index fb5d95b..6fead57 100644
--- a/src/debug/shared/amd64/primitives.cpp
+++ b/src/debug/shared/amd64/primitives.cpp
@@ -63,7 +63,7 @@ void CORDbgCopyThreadContext(DT_CONTEXT* pDst, const DT_CONTEXT* pSrc)
if ((dstFlags & srcFlags & CONTEXT_FLOATING_POINT) == CONTEXT_FLOATING_POINT)
{
// Xmm0-Xmm15
- CopyContextChunk(&(pDst->Xmm0), &(pSrc->Xmm0), &(pDst->Xmm15) + sizeof(M128A),
+ CopyContextChunk(&(pDst->Xmm0), &(pSrc->Xmm0), &(pDst->Xmm15) + 1,
CONTEXT_FLOATING_POINT);
// MxCsr
diff --git a/src/dlls/mscordac/mscordac_unixexports.src b/src/dlls/mscordac/mscordac_unixexports.src
index b0c3b04..9881def 100644
--- a/src/dlls/mscordac/mscordac_unixexports.src
+++ b/src/dlls/mscordac/mscordac_unixexports.src
@@ -39,6 +39,7 @@ PAL_fprintf
PAL__wcstoui64
PAL_wcstoul
PAL_iswprint
+PAL_VirtualReserveFromExecutableMemoryAllocatorWithinRange
PAL_wcslen
PAL_wcsncmp
PAL_wcsrchr
diff --git a/src/dlls/mscoree/CMakeLists.txt b/src/dlls/mscoree/CMakeLists.txt
index b9c129d..8fc3ebf 100644
--- a/src/dlls/mscoree/CMakeLists.txt
+++ b/src/dlls/mscoree/CMakeLists.txt
@@ -22,6 +22,11 @@ else()
set (DEF_SOURCES
mscorwks_unixexports.src
)
+if(FEATURE_GDBJIT)
+ list(APPEND DEF_SOURCES
+ gdbjit_unixexports.src
+ )
+endif(FEATURE_GDBJIT)
endif(WIN32)
convert_to_absolute_path(DEF_SOURCES ${DEF_SOURCES})
diff --git a/src/dlls/mscoree/coreclr/CMakeLists.txt b/src/dlls/mscoree/coreclr/CMakeLists.txt
index afa253f..7a4617f 100644
--- a/src/dlls/mscoree/coreclr/CMakeLists.txt
+++ b/src/dlls/mscoree/coreclr/CMakeLists.txt
@@ -141,6 +141,12 @@ if(CLR_CMAKE_PLATFORM_UNIX AND FEATURE_EVENT_TRACE)
)
endif(CLR_CMAKE_PLATFORM_UNIX AND FEATURE_EVENT_TRACE)
+if(CLR_CMAKE_PLATFORM_LINUX)
+ list(APPEND CORECLR_LIBRARIES
+ eventpipe
+ )
+endif(CLR_CMAKE_PLATFORM_LINUX)
+
target_link_libraries(coreclr ${CORECLR_LIBRARIES})
if(WIN32)
diff --git a/src/dlls/mscoree/gdbjit_unixexports.src b/src/dlls/mscoree/gdbjit_unixexports.src
new file mode 100644
index 0000000..b820aeb
--- /dev/null
+++ b/src/dlls/mscoree/gdbjit_unixexports.src
@@ -0,0 +1,3 @@
+; exported for GDBJIT
+__jit_debug_register_code
+__jit_debug_descriptor \ No newline at end of file
diff --git a/src/dlls/mscorpe/iceefilegen.cpp b/src/dlls/mscorpe/iceefilegen.cpp
index f4323b9..c48ae7e 100644
--- a/src/dlls/mscorpe/iceefilegen.cpp
+++ b/src/dlls/mscorpe/iceefilegen.cpp
@@ -151,7 +151,9 @@ HRESULT ICeeFileGen::CreateCeeFileFromICeeGen(ICeeGen *pICeeGen, HCEEFILE *ceeFi
return E_POINTER;
CCeeGen *genFrom = reinterpret_cast<CCeeGen*>(pICeeGen);
CeeFileGenWriter *gen = NULL;
- if (FAILED(CeeFileGenWriter::CreateNewInstance(genFrom, gen, createFlags))) return FALSE;
+ HRESULT hr = CeeFileGenWriter::CreateNewInstance(genFrom, gen, createFlags);
+ if (FAILED(hr))
+ return hr;
TESTANDRETURN(gen != NULL, E_OUTOFMEMORY);
*ceeFile = gen;
return S_OK;
diff --git a/src/gc/handletablecore.cpp b/src/gc/handletablecore.cpp
index 00ab6a2..228b8bf 100644
--- a/src/gc/handletablecore.cpp
+++ b/src/gc/handletablecore.cpp
@@ -1592,6 +1592,7 @@ void SegmentResortChains(TableSegment *pSegment)
// clear the sort flag for this segment
pSegment->fResortChains = FALSE;
+ BOOL fScavengingOccurred = FALSE;
// first, do we need to scavenge any blocks?
if (pSegment->fNeedsScavenging)
@@ -1599,6 +1600,8 @@ void SegmentResortChains(TableSegment *pSegment)
// clear the scavenge flag
pSegment->fNeedsScavenging = FALSE;
+ fScavengingOccurred = TRUE;
+
// we may need to explicitly scan the user data chain too
BOOL fCleanupUserData = FALSE;
@@ -1758,6 +1761,21 @@ void SegmentResortChains(TableSegment *pSegment)
if (pSegment->rgBlockType[pSegment->rgHint[uType]] != uType)
pSegment->rgHint[uType] = bBlock;
}
+ else
+ {
+ // No blocks of this type were found in the rgBlockType array, meaning either there were no
+ // such blocks on entry to this function (in which case the associated tail is guaranteed
+ // to already be marked invalid) OR that there were blocks but all of them were reclaimed
+ // by the scavenging logic above (in which case the associated tail is guaranteed to point
+ // to one of the scavenged blocks). In the latter case, the tail is currently "stale"
+ // and therefore needs to be manually updated.
+ if (pSegment->rgTail[uType] != BLOCK_INVALID)
+ {
+ _ASSERTE(fScavengingOccurred);
+ pSegment->rgTail[uType] = BLOCK_INVALID;
+ pSegment->rgHint[uType] = BLOCK_INVALID;
+ }
+ }
}
// store the new free list head
@@ -2549,6 +2567,14 @@ uint32_t BlockFreeHandles(TableSegment *pSegment, uint32_t uBlock, OBJECTHANDLE
if (fAllMasksWeTouchedAreFree)
{
// is the block unlocked?
+ // NOTE: This check is incorrect and defeats the intended purpose of scavenging. If the
+ // current block is locked and has just been emptied, then it cannot be removed right now
+ // and therefore will nominally need to be scavenged. The only code that triggers
+ // scavenging is in SegmentRemoveFreeBlocks, and setting the flag is the only way to
+ // trigger a call into SegmentRemoveFreeBlocks call. As a result, by NOT setting the flag
+ // this code is generally PREVENTING scavenging in exactly the cases where scavenging is
+ // needed. The code is not being changed because it has always been this way and scavenging
+ // itself generally has extremely low value.
if (!BlockIsLocked(pSegment, uBlock))
{
// tell the caller it might be a good idea to scan for free blocks
diff --git a/src/gc/objecthandle.cpp b/src/gc/objecthandle.cpp
index dd43ec2..7df915f 100644
--- a/src/gc/objecthandle.cpp
+++ b/src/gc/objecthandle.cpp
@@ -608,7 +608,8 @@ HandleTableBucketHolder::~HandleTableBucketHolder()
}
delete [] m_bucket->pTable;
}
- delete m_bucket;
+
+ // we do not own m_bucket, so we shouldn't delete it here.
}
bool Ref_Initialize()
diff --git a/src/ilasm/asmman.cpp b/src/ilasm/asmman.cpp
index 22e780f..47dc6eb 100644
--- a/src/ilasm/asmman.cpp
+++ b/src/ilasm/asmman.cpp
@@ -131,6 +131,17 @@ mdToken AsmMan::GetAsmRefTokByName(__in __nullterminated const char*
AsmManAssembly* tmp = GetAsmRefByName(szAsmRefName);
return(tmp ? tmp->tkTok : mdAssemblyRefNil);
}
+AsmManAssembly* AsmMan::GetAsmRefByAsmName(__in __nullterminated const char* szAsmName)
+{
+ AsmManAssembly* ret = NULL;
+ if(szAsmName)
+ {
+ for(int i=0; (ret = m_AsmRefLst.PEEK(i))&&
+ (strcmp(ret->szName,szAsmName)); i++);
+ }
+ return ret;
+}
+
//==============================================================================================================
void AsmMan::SetModuleName(__inout_opt __nullterminated char* szName)
{
diff --git a/src/ilasm/asmman.hpp b/src/ilasm/asmman.hpp
index 0ee875b..00f4d52 100644
--- a/src/ilasm/asmman.hpp
+++ b/src/ilasm/asmman.hpp
@@ -272,6 +272,8 @@ public:
void SetManifestResFile(__in __nullterminated char* szFileName, ULONG ulOffset);
void SetManifestResAsmRef(__in __nullterminated char* szAsmRefName);
+ AsmManAssembly* GetAsmRefByAsmName(__in __nullterminated const char* szAsmName);
+
mdToken GetFileTokByName(__in __nullterminated char* szFileName);
mdToken GetAsmRefTokByName(__in __nullterminated const char* szAsmRefName);
mdToken GetAsmTokByName(__in __nullterminated const char* szAsmName)
diff --git a/src/ilasm/assembler.cpp b/src/ilasm/assembler.cpp
index 957b0bd..be535ab 100644
--- a/src/ilasm/assembler.cpp
+++ b/src/ilasm/assembler.cpp
@@ -276,14 +276,22 @@ mdToken Assembler::GetAsmRef(__in __nullterminated const char* szName)
mdToken Assembler::GetBaseAsmRef()
{
- if (RidFromToken(m_pManifest->GetAsmRefTokByName("System.Runtime")) != 0)
+ AsmManAssembly* sysRuntime = m_pManifest->GetAsmRefByAsmName("System.Runtime");
+ if(sysRuntime != NULL)
{
- return GetAsmRef("System.Runtime");
+ return GetAsmRef(sysRuntime->szAlias ? sysRuntime->szAlias : sysRuntime->szName);
}
- if (RidFromToken(m_pManifest->GetAsmRefTokByName("netstandard")) != 0)
+ AsmManAssembly* mscorlibAsm = m_pManifest->GetAsmRefByAsmName("mscorlib");
+ if(mscorlibAsm != NULL)
{
- return GetAsmRef("netstandard");
+ return GetAsmRef(mscorlibAsm->szAlias ? mscorlibAsm->szAlias : mscorlibAsm->szName);
+ }
+
+ AsmManAssembly* netstandardAsm = m_pManifest->GetAsmRefByAsmName("netstandard");
+ if (netstandardAsm != NULL)
+ {
+ return GetAsmRef(netstandardAsm->szAlias ? netstandardAsm->szAlias : netstandardAsm->szName);
}
return GetAsmRef("mscorlib");
diff --git a/src/ilasm/prebuilt/asmparse.cpp b/src/ilasm/prebuilt/asmparse.cpp
index 50c6203..389546e 100644
--- a/src/ilasm/prebuilt/asmparse.cpp
+++ b/src/ilasm/prebuilt/asmparse.cpp
@@ -4,12 +4,13 @@
#line 2 "asmparse.y"
- // Licensed to the .NET Foundation under one or more agreements.
- // The .NET Foundation licenses this file to you under the MIT license.
- // See the LICENSE file in the project root for more information.
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
//
// File asmparse.y
//
+
#include "ilasmpch.h"
#include "grammar_before.cpp"
@@ -1729,7 +1730,7 @@ YYSTATIC YYCONST short yyrecover[] = {
#endif
/* SCCSWHAT( "@(#)yypars.c 3.1 88/11/16 22:00:49 " ) */
-#line 3 "D:\\ProjectK3\\src\\tools\\devdiv\\x86\\yypars.c"
+#line 3 "O:\\tfs\\cgm\\src\\Tools\\devdiv\\amd64\\yypars.c"
#if ! defined(YYAPI_PACKAGE)
/*
** YYAPI_TOKENNAME : name used for return value of yylex
@@ -1833,9 +1834,16 @@ YYSTATIC char *yyscpy(register char*t, register char*f)
YYSTATIC short yyn;
YYSTATIC short yystate = 0;
- YYSTATIC short *yyps= &yys[-1];
+#ifdef _PREFAST_
+#pragma warning(push)
+#pragma warning(disable: 6200) // Index '-1' is out of valid index range...for non-stack buffer...
+#endif
+ YYSTATIC short *yyps= &yys[-1];
YYSTATIC YYSTYPE *yypv= &yyv[-1];
- YYSTATIC short yyj;
+#ifdef _PREFAST_
+#pragma warning(pop)
+#endif
+ YYSTATIC short yyj;
YYSTATIC short yym;
#endif
@@ -1852,8 +1860,17 @@ YYLOCAL YYNEAR YYPASCAL YYPARSER()
YYAPI_TOKENNAME = YYAPI_TOKENNONE;
yystate = 0;
- yyps= &yys[-1];
- yypv= &yyv[-1];
+
+#ifdef _PREFAST_
+#pragma warning(push)
+#pragma warning(disable:6200) // Index '-1' is out of valid index range...for non-stack buffer...
+#endif
+ yyps= &yys[-1];
+ yypv= &yyv[-1];
+#ifdef _PREFAST_
+#pragma warning(pop)
+#endif
+
#endif
#ifdef YYDUMP
@@ -4872,7 +4889,7 @@ case 834:
case 835:
#line 2045 "asmparse.y"
{ PASMM->SetManifestResAsmRef(yypvt[-0].string); } break;/* End of actions */
-#line 329 "D:\\ProjectK3\\src\\tools\\devdiv\\x86\\yypars.c"
+#line 329 "O:\\tfs\\cgm\\src\\Tools\\devdiv\\amd64\\yypars.c"
}
}
goto yystack; /* stack new state and value */
diff --git a/src/inc/CrstTypes.def b/src/inc/CrstTypes.def
index 227f986..5bf4ec6 100644
--- a/src/inc/CrstTypes.def
+++ b/src/inc/CrstTypes.def
@@ -781,5 +781,5 @@ Crst InlineTrackingMap
End
Crst EventPipe
- AcquiredBefore ThreadIdDispenser ThreadStore
+ AcquiredBefore ThreadIdDispenser ThreadStore DomainLocalBlock InstMethodHashTable
End
diff --git a/src/inc/clrconfigvalues.h b/src/inc/clrconfigvalues.h
index a0c2456..c4722bc 100644
--- a/src/inc/clrconfigvalues.h
+++ b/src/inc/clrconfigvalues.h
@@ -460,20 +460,6 @@ RETAIL_CONFIG_STRING_INFO_EX(INTERNAL_AltJitNgen, W("AltJitNgen"), "Enables AltJ
#endif // defined(ALLOW_SXS_JIT_NGEN)
CONFIG_DWORD_INFO_EX(INTERNAL_JitNoCMOV, W("JitNoCMOV"), 0, "", CLRConfig::REGUTIL_default)
-#if defined(_TARGET_AMD64_)
-// UseRyuJIT is only looked up in HKLM in the registry, not in config files or environment variables. It should only be set by the .NET 4.6 (and later version) installers,
-// not by users. See the "RyuJIT Compatibility Fallback Design Specification.docx" document for details.
-RETAIL_CONFIG_DWORD_INFO_EX(INTERNAL_UseRyuJit, W("UseRyuJIT"), 0, "Set to 1 by .NET 4.6 installer to indicate RyuJIT should be used, not JIT64.", CLRConfig::IgnoreEnv | CLRConfig::IgnoreHKCU | CLRConfig::IgnoreConfigFiles)
-RETAIL_CONFIG_DWORD_INFO(EXTERNAL_UseLegacyJit, W("useLegacyJit"), 0, "Set to 1 to do all JITing with compatjit.dll. Only applicable to x64.")
-RETAIL_CONFIG_STRING_INFO_EX(EXTERNAL_DisableNativeImageLoadList, W("DisableNativeImageLoadList"), "Refuse to load native images corresponding to one of the assemblies on this semicolon-delimited list of assembly names.", CLRConfig::REGUTIL_default)
-#endif
-
-#if defined(_TARGET_X86_)
-RETAIL_CONFIG_DWORD_INFO(EXTERNAL_UseWindowsX86CoreLegacyJit, W("UseWindowsX86CoreLegacyJit"), 0, "Set to 1 to do all JITing with compatjit.dll. Only applicable to Windows x86 .NET Core.")
-#endif
-
-RETAIL_CONFIG_DWORD_INFO(EXTERNAL_RequireLegacyJit, W("RequireLegacyJit"), 0, "Set to 1 to require the use of legacy JIT (via COMPlus_useLegacyJit=1 or COMPlus_UseWindowsX86CoreLegacyJit=1).")
-
CONFIG_STRING_INFO_EX(INTERNAL_JitValNumCSE, W("JitValNumCSE"), "Enables ValNum CSE for the specified methods", CLRConfig::REGUTIL_default)
CONFIG_STRING_INFO_EX(INTERNAL_JitLexicalCSE, W("JitLexicalCSE"), "Enables Lexical CSE for the specified methods", CLRConfig::REGUTIL_default)
CONFIG_DWORD_INFO_EX(INTERNAL_JitNoCSE, W("JitNoCSE"), 0, "", CLRConfig::REGUTIL_default)
diff --git a/src/inc/corcompile.h b/src/inc/corcompile.h
index f99e27e..68eefc1 100644
--- a/src/inc/corcompile.h
+++ b/src/inc/corcompile.h
@@ -468,15 +468,6 @@ struct CORCOMPILE_EE_INFO_TABLE
DWORD threadTlsIndex;
DWORD rvaStaticTlsIndex;
-
-// These are used by the 64-bit JITs to detect calls to thunks in the .nep section
-// and conditionally eliminate double-thunking (managed-to-native-to-managed).
-// During prejit these are set to the RVAs of the .nep section. When the prejitted
-// image is actually loaded, these are fixed up to point to the actual .nep section
-// of the ijw image (not the native image).
-
- BYTE * nativeEntryPointStart;
- BYTE * nativeEntryPointEnd;
};
/*********************************************************************************/
diff --git a/src/inc/corprof.idl b/src/inc/corprof.idl
index 3378431..db67b3c 100644
--- a/src/inc/corprof.idl
+++ b/src/inc/corprof.idl
@@ -621,9 +621,11 @@ typedef enum
COR_PRF_HIGH_IN_MEMORY_SYMBOLS_UPDATED = 0x00000002,
+ COR_PRF_HIGH_MONITOR_DYNAMIC_FUNCTION_UNLOADS = 0x00000004,
+
COR_PRF_HIGH_REQUIRE_PROFILE_IMAGE = 0,
- COR_PRF_HIGH_ALLOWABLE_AFTER_ATTACH = COR_PRF_HIGH_IN_MEMORY_SYMBOLS_UPDATED,
+ COR_PRF_HIGH_ALLOWABLE_AFTER_ATTACH = COR_PRF_HIGH_IN_MEMORY_SYMBOLS_UPDATED | COR_PRF_HIGH_MONITOR_DYNAMIC_FUNCTION_UNLOADS,
// MONITOR_IMMUTABLE represents all flags that may only be set during initialization.
// Trying to change any of these flags elsewhere will result in a
@@ -2408,6 +2410,20 @@ interface ICorProfilerCallback8 : ICorProfilerCallback7
[in] BOOL fIsSafeToBlock);
}
+[
+ object,
+ uuid(27583EC3-C8F5-482F-8052-194B8CE4705A),
+ pointer_default(unique),
+ local
+]
+interface ICorProfilerCallback9 : ICorProfilerCallback8
+{
+ // This event is triggered whenever a dynamic method is garbage collected
+ // and subsequently unloaded.
+
+ HRESULT DynamicMethodUnloaded([in] FunctionID functionId);
+}
+
/*
* COR_PRF_CODEGEN_FLAGS controls various flags and hooks for a specific
diff --git a/src/inc/crsttypes.h b/src/inc/crsttypes.h
index b4f6f49..55dc5bd 100644
--- a/src/inc/crsttypes.h
+++ b/src/inc/crsttypes.h
@@ -237,7 +237,7 @@ int g_rgCrstLevelMap[] =
3, // CrstDynamicMT
3, // CrstDynLinkZapItems
7, // CrstEtwTypeLogHash
- 11, // CrstEventPipe
+ 17, // CrstEventPipe
0, // CrstEventStore
0, // CrstException
7, // CrstExecuteManLock
@@ -560,4 +560,3 @@ inline static LPCSTR GetCrstName(CrstType crstType)
}
#endif // defined(__IN_CRST_CPP) && defined(_DEBUG)
-
diff --git a/src/inc/daccess.h b/src/inc/daccess.h
index 7d82e86..40aba86 100644
--- a/src/inc/daccess.h
+++ b/src/inc/daccess.h
@@ -617,6 +617,11 @@ typedef struct _DacGlobals
ULONG fn__ThreadpoolMgr__AsyncTimerCallbackCompletion;
ULONG fn__DACNotifyCompilationFinished;
ULONG fn__ThePreStub;
+
+#ifdef _TARGET_ARM_
+ ULONG fn__ThePreStubCompactARM;
+#endif // _TARGET_ARM_
+
ULONG fn__ThePreStubPatchLabel;
ULONG fn__PrecodeFixupThunk;
ULONG fn__StubDispatchFixupStub;
@@ -2345,6 +2350,7 @@ typedef ArrayDPTR(signed char) PTR_SBYTE;
typedef ArrayDPTR(const BYTE) PTR_CBYTE;
typedef DPTR(INT8) PTR_INT8;
typedef DPTR(INT16) PTR_INT16;
+typedef DPTR(UINT16) PTR_UINT16;
typedef DPTR(WORD) PTR_WORD;
typedef DPTR(USHORT) PTR_USHORT;
typedef DPTR(DWORD) PTR_DWORD;
diff --git a/src/inc/eventtracebase.h b/src/inc/eventtracebase.h
index bd5ad1a..2ed5317 100644
--- a/src/inc/eventtracebase.h
+++ b/src/inc/eventtracebase.h
@@ -103,7 +103,18 @@ enum EtwThreadFlags
#else //defined(FEATURE_PAL)
+#if defined(FEATURE_PERFTRACING)
+#define ETW_INLINE
+#define ETWOnStartup(StartEventName, EndEventName)
+#define ETWFireEvent(EventName)
+#define ETW_TRACING_INITIALIZED(RegHandle) (TRUE)
+#define ETW_EVENT_ENABLED(Context, EventDescriptor) (EventPipeHelper::Enabled() || XplatEventLogger::IsEventLoggingEnabled())
+#define ETW_CATEGORY_ENABLED(Context, Level, Keyword) (EventPipeHelper::Enabled() || XplatEventLogger::IsEventLoggingEnabled())
+#define ETW_TRACING_ENABLED(Context, EventDescriptor) (EventEnabled##EventDescriptor())
+#define ETW_TRACING_CATEGORY_ENABLED(Context, Level, Keyword) (EventPipeHelper::Enabled() || XplatEventLogger::IsEventLoggingEnabled())
+#define ETW_PROVIDER_ENABLED(ProviderSymbol) (TRUE)
+#else //defined(FEATURE_PERFTRACING)
#define ETW_INLINE
#define ETWOnStartup(StartEventName, EndEventName)
#define ETWFireEvent(EventName)
@@ -114,7 +125,7 @@ enum EtwThreadFlags
#define ETW_TRACING_ENABLED(Context, EventDescriptor) (EventEnabled##EventDescriptor())
#define ETW_TRACING_CATEGORY_ENABLED(Context, Level, Keyword) (XplatEventLogger::IsEventLoggingEnabled())
#define ETW_PROVIDER_ENABLED(ProviderSymbol) (TRUE)
-
+#endif // defined(FEATURE_PERFTRACING)
#endif // !defined(FEATURE_PAL)
#else // FEATURE_EVENT_TRACE
@@ -217,6 +228,14 @@ extern BOOL g_fEEIJWStartup;
#define GetClrInstanceId() (static_cast<UINT16>(g_nClrInstanceId))
+#if defined(FEATURE_PERFTRACING)
+class EventPipeHelper
+{
+public:
+ static bool Enabled();
+};
+#endif // defined(FEATURE_PERFTRACING)
+
#if defined(FEATURE_EVENT_TRACE) || defined(FEATURE_EVENTSOURCE_XPLAT)
#include "clrconfig.h"
diff --git a/src/inc/profilepriv.inl b/src/inc/profilepriv.inl
index e7c8207..d334e10 100644
--- a/src/inc/profilepriv.inl
+++ b/src/inc/profilepriv.inl
@@ -736,6 +736,21 @@ inline BOOL CORProfilerInMemorySymbolsUpdatesEnabled()
((&g_profControlBlock)->dwEventMaskHigh & COR_PRF_HIGH_IN_MEMORY_SYMBOLS_UPDATED));
}
+inline BOOL CORProfilerIsMonitoringDynamicFunctionUnloads()
+{
+ CONTRACTL
+ {
+ NOTHROW;
+ GC_NOTRIGGER;
+ CANNOT_TAKE_LOCK;
+ SO_NOT_MAINLINE;
+ }
+ CONTRACTL_END;
+
+ return (CORProfilerPresent() &&
+ ((&g_profControlBlock)->dwEventMaskHigh & COR_PRF_HIGH_MONITOR_DYNAMIC_FUNCTION_UNLOADS));
+}
+
#if defined(PROFILING_SUPPORTED) && !defined(CROSSGEN_COMPILE)
#if defined(FEATURE_PROFAPI_ATTACH_DETACH)
diff --git a/src/inc/switches.h b/src/inc/switches.h
index bb30387..7996453 100644
--- a/src/inc/switches.h
+++ b/src/inc/switches.h
@@ -235,3 +235,6 @@
#endif // !defined(CROSSGEN_COMPILE)
+#if defined(FEATURE_INTERPRETER) && defined(CROSSGEN_COMPILE)
+#undef FEATURE_INTERPRETER
+#endif
diff --git a/src/inc/winrt/paraminstanceapi.h b/src/inc/winrt/paraminstanceapi.h
index 062c7f3..81ee4c5 100644
--- a/src/inc/winrt/paraminstanceapi.h
+++ b/src/inc/winrt/paraminstanceapi.h
@@ -1642,7 +1642,14 @@ namespace Ro { namespace detail {
DWORD dwcb;
DWORD dwcbResult;
+#ifdef _PREFAST_
+#pragma warning(push)
+#pragma warning(disable: 33098) // "Banned hash algorithm is used" - SHA-1 is required for compatibility
+#endif // _PREFAST_
CHKNT(BCryptOpenAlgorithmProvider(&_hAlg, BCRYPT_SHA1_ALGORITHM, MS_PRIMITIVE_PROVIDER, 0));
+#ifdef _PREFAST_
+#pragma warning(pop)
+#endif // _PREFAST_
CHKNT(BCryptGetProperty(_hAlg, BCRYPT_OBJECT_LENGTH, reinterpret_cast<PBYTE>(&dwcb), sizeof(dwcb), &dwcbResult, 0));
diff --git a/src/jit/assertionprop.cpp b/src/jit/assertionprop.cpp
index 767d63a..04f2fbe 100644
--- a/src/jit/assertionprop.cpp
+++ b/src/jit/assertionprop.cpp
@@ -4556,7 +4556,7 @@ ASSERT_TP* Compiler::optInitAssertionDataflowFlags()
}
// Compute the data flow values for all tracked expressions
// IN and OUT never change for the initial basic block B1
- BitVecOps::ClearD(apTraits, fgFirstBB->bbAssertionIn);
+ BitVecOps::OldStyleClearD(apTraits, fgFirstBB->bbAssertionIn);
return jumpDestOut;
}
diff --git a/src/jit/bitset.h b/src/jit/bitset.h
index 4ecb2fc..a4b0091 100644
--- a/src/jit/bitset.h
+++ b/src/jit/bitset.h
@@ -205,9 +205,13 @@ class BitSetOps
// Destructively set "bs" to be the empty set. This method is unique, in that it does *not*
// require "bs" to be a bitset of the current epoch. It ensures that it is after, however.
// (If the representation is indirect, this requires allocating a new, empty representation.
- // If this is a performance issue, we could provide a new version of ClearD that assumes/asserts
+ // If this is a performance issue, we could provide a new version of OldStyleClearD that assumes/asserts
// that the rep is for the current epoch -- this would be useful if a given bitset were repeatedly
// cleared within an epoch.)
+ // TODO #11263: delete it.
+ static void OldStyleClearD(Env env, BitSetType& bs);
+
+ // Destructively set "bs" to be the empty set.
static void ClearD(Env env, BitSetType& bs);
// Returns a copy of "bs". If the representation of "bs" involves a level of indirection, the data
@@ -326,6 +330,11 @@ public:
BitSetTraits::GetOpCounter(env)->RecordOp(BitSetSupport::BSOP_AssignNocopy);
BSO::AssignNoCopy(env, lhs, rhs);
}
+ static void OldStyleClearD(Env env, BitSetType& bs)
+ {
+ BitSetTraits::GetOpCounter(env)->RecordOp(BitSetSupport::BSOP_OldStyleClearD);
+ BSO::OldStyleClearD(env, bs);
+ }
static void ClearD(Env env, BitSetType& bs)
{
BitSetTraits::GetOpCounter(env)->RecordOp(BitSetSupport::BSOP_ClearD);
diff --git a/src/jit/bitsetasshortlong.h b/src/jit/bitsetasshortlong.h
index 163cb36..962a8bb 100644
--- a/src/jit/bitsetasshortlong.h
+++ b/src/jit/bitsetasshortlong.h
@@ -43,6 +43,7 @@ private:
static void DiffDLong(Env env, BitSetShortLongRep& bs1, BitSetShortLongRep bs2);
static void AddElemDLong(Env env, BitSetShortLongRep& bs, unsigned i);
static void RemoveElemDLong(Env env, BitSetShortLongRep& bs, unsigned i);
+ static void OldStyleClearDLong(Env env, BitSetShortLongRep& bs);
static void ClearDLong(Env env, BitSetShortLongRep& bs);
static BitSetShortLongRep MakeUninitArrayBits(Env env);
static BitSetShortLongRep MakeEmptyArrayBits(Env env);
@@ -122,6 +123,19 @@ public:
lhs = rhs;
}
+ static void OldStyleClearD(Env env, BitSetShortLongRep& bs)
+ {
+ if (IsShort(env))
+ {
+ bs = (BitSetShortLongRep) nullptr;
+ }
+ else
+ {
+ assert(bs != UninitVal());
+ OldStyleClearDLong(env, bs);
+ }
+ }
+
static void ClearD(Env env, BitSetShortLongRep& bs)
{
if (IsShort(env))
@@ -661,15 +675,29 @@ template <typename Env, typename BitSetTraits>
void BitSetOps</*BitSetType*/ BitSetShortLongRep,
/*Brand*/ BSShortLong,
/*Env*/ Env,
- /*BitSetTraits*/ BitSetTraits>::ClearDLong(Env env, BitSetShortLongRep& bs)
+ /*BitSetTraits*/ BitSetTraits>::OldStyleClearDLong(Env env, BitSetShortLongRep& bs)
{
assert(!IsShort(env));
- // Recall that ClearD does *not* require "bs" to be of the current epoch.
+ // Recall that OldStyleClearD does *not* require "bs" to be of the current epoch.
// Therefore, we must allocate a new representation.
bs = MakeEmptyArrayBits(env);
}
template <typename Env, typename BitSetTraits>
+void BitSetOps</*BitSetType*/ BitSetShortLongRep,
+ /*Brand*/ BSShortLong,
+ /*Env*/ Env,
+ /*BitSetTraits*/ BitSetTraits>::ClearDLong(Env env, BitSetShortLongRep& bs)
+{
+ assert(!IsShort(env));
+ unsigned len = BitSetTraits::GetArrSize(env, sizeof(size_t));
+ for (unsigned i = 0; i < len; i++)
+ {
+ bs[i] = 0;
+ }
+}
+
+template <typename Env, typename BitSetTraits>
BitSetShortLongRep BitSetOps</*BitSetType*/ BitSetShortLongRep,
/*Brand*/ BSShortLong,
/*Env*/ Env,
diff --git a/src/jit/bitsetasuint64.h b/src/jit/bitsetasuint64.h
index 243e9e3..aec4d05 100644
--- a/src/jit/bitsetasuint64.h
+++ b/src/jit/bitsetasuint64.h
@@ -44,6 +44,11 @@ public:
lhs = rhs;
}
+ static void OldStyleClearD(Env env, UINT64& bs)
+ {
+ bs = 0;
+ }
+
static void ClearD(Env env, UINT64& bs)
{
bs = 0;
diff --git a/src/jit/bitsetasuint64inclass.h b/src/jit/bitsetasuint64inclass.h
index be92624..ffa99d3 100644
--- a/src/jit/bitsetasuint64inclass.h
+++ b/src/jit/bitsetasuint64inclass.h
@@ -178,16 +178,22 @@ private:
return res;
}
- inline void ClearD(Env env)
+ inline void OldStyleClearD(Env env)
{
- // Recall that ClearD does *not* require "*this" to be of the current epoch.
- Uint64BitSetOps::ClearD(env, m_bits);
+ // Recall that OldStyleClearD does *not* require "*this" to be of the current epoch.
+ Uint64BitSetOps::OldStyleClearD(env, m_bits);
#ifdef DEBUG
// But it updates it to of the current epoch.
m_epoch = BitSetTraits::GetEpoch(env);
#endif
}
+ inline void ClearD(Env env)
+ {
+ assert(m_epoch == BitSetTraits::GetEpoch(env));
+ Uint64BitSetOps::ClearD(env, m_bits);
+ }
+
inline bool IsEmpty(Env env) const
{
CheckEpoch(env);
@@ -369,6 +375,11 @@ public:
lhs = rhs;
}
+ static void OldStyleClearD(Env env, BST& bs)
+ {
+ bs.OldStyleClearD(env);
+ }
+
static void ClearD(Env env, BST& bs)
{
bs.ClearD(env);
diff --git a/src/jit/bitsetops.h b/src/jit/bitsetops.h
index edf39ea..bb4db9d 100644
--- a/src/jit/bitsetops.h
+++ b/src/jit/bitsetops.h
@@ -5,6 +5,7 @@
BSOPNAME(BSOP_Assign)
BSOPNAME(BSOP_AssignAllowUninitRhs)
BSOPNAME(BSOP_AssignNocopy)
+BSOPNAME(BSOP_OldStyleClearD)
BSOPNAME(BSOP_ClearD)
BSOPNAME(BSOP_MakeSingleton)
BSOPNAME(BSOP_MakeEmpty)
diff --git a/src/jit/codegenarm.cpp b/src/jit/codegenarm.cpp
index c28b27b..40371e3 100644
--- a/src/jit/codegenarm.cpp
+++ b/src/jit/codegenarm.cpp
@@ -259,6 +259,11 @@ void CodeGen::genReturn(GenTreePtr treeNode)
GenTreePtr op1 = treeNode->gtGetOp1();
var_types targetType = treeNode->TypeGet();
+ // A void GT_RETFILT is the end of a finally. For non-void filter returns we need to load the result in the return
+ // register, if it's not already there. The processing is the same as GT_RETURN. For filters, the IL spec says the
+ // result is type int32. Further, the only legal values are 0 or 1; the use of other values is "undefined".
+ assert(!treeNode->OperIs(GT_RETFILT) || (targetType == TYP_VOID) || (targetType == TYP_INT));
+
#ifdef DEBUG
if (targetType == TYP_VOID)
{
@@ -315,741 +320,6 @@ void CodeGen::genReturn(GenTreePtr treeNode)
}
//------------------------------------------------------------------------
-// genCodeForTreeNode Generate code for a single node in the tree.
-//
-// Preconditions:
-// All operands have been evaluated.
-//
-void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
-{
- regNumber targetReg = treeNode->gtRegNum;
- var_types targetType = treeNode->TypeGet();
- emitter* emit = getEmitter();
-
-#ifdef DEBUG
- lastConsumedNode = nullptr;
- if (compiler->verbose)
- {
- unsigned seqNum = treeNode->gtSeqNum; // Useful for setting a conditional break in Visual Studio
- compiler->gtDispLIRNode(treeNode, "Generating: ");
- }
-#endif
-
- // contained nodes are part of their parents for codegen purposes
- // ex : immediates, most LEAs
- if (treeNode->isContained())
- {
- return;
- }
-
- switch (treeNode->gtOper)
- {
- case GT_LCLHEAP:
- genLclHeap(treeNode);
- break;
-
- case GT_CNS_INT:
- case GT_CNS_DBL:
- genSetRegToConst(targetReg, targetType, treeNode);
- genProduceReg(treeNode);
- break;
-
- case GT_NOT:
- assert(!varTypeIsFloating(targetType));
-
- __fallthrough;
-
- case GT_NEG:
- {
- instruction ins = genGetInsForOper(treeNode->OperGet(), targetType);
-
- // The arithmetic node must be sitting in a register (since it's not contained)
- assert(!treeNode->isContained());
- // The dst can only be a register.
- assert(targetReg != REG_NA);
-
- GenTreePtr operand = treeNode->gtGetOp1();
- assert(!operand->isContained());
- // The src must be a register.
- regNumber operandReg = genConsumeReg(operand);
-
- if (ins == INS_vneg)
- {
- getEmitter()->emitIns_R_R(ins, emitTypeSize(treeNode), targetReg, operandReg);
- }
- else
- {
- getEmitter()->emitIns_R_R_I(ins, emitTypeSize(treeNode), targetReg, operandReg, 0);
- }
- }
- genProduceReg(treeNode);
- break;
-
- case GT_OR:
- case GT_XOR:
- case GT_AND:
- assert(varTypeIsIntegralOrI(treeNode));
- __fallthrough;
-
- case GT_ADD_LO:
- case GT_ADD_HI:
- case GT_SUB_LO:
- case GT_SUB_HI:
- case GT_ADD:
- case GT_SUB:
- case GT_MUL:
- genConsumeOperands(treeNode->AsOp());
- genCodeForBinary(treeNode);
- break;
-
- case GT_LSH:
- case GT_RSH:
- case GT_RSZ:
- case GT_ROR:
- genCodeForShift(treeNode);
- break;
-
- case GT_LSH_HI:
- case GT_RSH_LO:
- genCodeForShiftLong(treeNode);
- break;
-
- case GT_CAST:
- // Cast is never contained (?)
- noway_assert(targetReg != REG_NA);
-
- if (varTypeIsFloating(targetType) && varTypeIsFloating(treeNode->gtOp.gtOp1))
- {
- // Casts float/double <--> double/float
- genFloatToFloatCast(treeNode);
- }
- else if (varTypeIsFloating(treeNode->gtOp.gtOp1))
- {
- // Casts float/double --> int32/int64
- genFloatToIntCast(treeNode);
- }
- else if (varTypeIsFloating(targetType))
- {
- // Casts int32/uint32/int64/uint64 --> float/double
- genIntToFloatCast(treeNode);
- }
- else
- {
- // Casts int <--> int
- genIntToIntCast(treeNode);
- }
- // The per-case functions call genProduceReg()
- break;
-
- case GT_LCL_VAR:
- {
- GenTreeLclVarCommon* lcl = treeNode->AsLclVarCommon();
- // lcl_vars are not defs
- assert((treeNode->gtFlags & GTF_VAR_DEF) == 0);
-
- bool isRegCandidate = compiler->lvaTable[lcl->gtLclNum].lvIsRegCandidate();
-
- if (isRegCandidate && !(treeNode->gtFlags & GTF_VAR_DEATH))
- {
- assert((treeNode->InReg()) || (treeNode->gtFlags & GTF_SPILLED));
- }
-
- // If this is a register candidate that has been spilled, genConsumeReg() will
- // reload it at the point of use. Otherwise, if it's not in a register, we load it here.
-
- if (!treeNode->InReg() && !(treeNode->gtFlags & GTF_SPILLED))
- {
- assert(!isRegCandidate);
- emit->emitIns_R_S(ins_Load(treeNode->TypeGet()), emitTypeSize(treeNode), treeNode->gtRegNum,
- lcl->gtLclNum, 0);
- genProduceReg(treeNode);
- }
- }
- break;
-
- case GT_LCL_FLD_ADDR:
- case GT_LCL_VAR_ADDR:
- {
- // Address of a local var. This by itself should never be allocated a register.
- // If it is worth storing the address in a register then it should be cse'ed into
- // a temp and that would be allocated a register.
- noway_assert(targetType == TYP_BYREF);
- noway_assert(!treeNode->InReg());
-
- inst_RV_TT(INS_lea, targetReg, treeNode, 0, EA_BYREF);
- }
- genProduceReg(treeNode);
- break;
-
- case GT_LCL_FLD:
- {
- NYI_IF(targetType == TYP_STRUCT, "GT_LCL_FLD: struct load local field not supported");
- NYI_IF(treeNode->gtRegNum == REG_NA, "GT_LCL_FLD: load local field not into a register is not supported");
-
- emitAttr size = emitTypeSize(targetType);
- unsigned offs = treeNode->gtLclFld.gtLclOffs;
- unsigned varNum = treeNode->gtLclVarCommon.gtLclNum;
- assert(varNum < compiler->lvaCount);
-
- if (varTypeIsFloating(targetType))
- {
- if (treeNode->InReg())
- {
- NYI("GT_LCL_FLD with reg-to-reg floating point move");
- }
- else
- {
- emit->emitIns_R_S(ins_Load(targetType), size, targetReg, varNum, offs);
- }
- }
- else
- {
- emit->emitIns_R_S(ins_Move_Extend(targetType, treeNode->InReg()), size, targetReg, varNum, offs);
- }
- }
- genProduceReg(treeNode);
- break;
-
- case GT_STORE_LCL_FLD:
- {
- noway_assert(targetType != TYP_STRUCT);
-
- // record the offset
- unsigned offset = treeNode->gtLclFld.gtLclOffs;
-
- // We must have a stack store with GT_STORE_LCL_FLD
- noway_assert(!treeNode->InReg());
- noway_assert(targetReg == REG_NA);
-
- GenTreeLclVarCommon* varNode = treeNode->AsLclVarCommon();
- unsigned varNum = varNode->gtLclNum;
- assert(varNum < compiler->lvaCount);
- LclVarDsc* varDsc = &(compiler->lvaTable[varNum]);
-
- // Ensure that lclVar nodes are typed correctly.
- assert(!varDsc->lvNormalizeOnStore() || targetType == genActualType(varDsc->TypeGet()));
-
- GenTreePtr data = treeNode->gtOp.gtOp1->gtEffectiveVal();
- instruction ins = ins_Store(targetType);
- emitAttr attr = emitTypeSize(targetType);
- if (data->isContainedIntOrIImmed())
- {
- assert(data->IsIntegralConst(0));
- NYI_ARM("st.lclFld contained operand");
- }
- else
- {
- assert(!data->isContained());
- genConsumeReg(data);
- emit->emitIns_S_R(ins, attr, data->gtRegNum, varNum, offset);
- }
-
- genUpdateLife(varNode);
- varDsc->lvRegNum = REG_STK;
- }
- break;
-
- case GT_STORE_LCL_VAR:
- {
- GenTreeLclVarCommon* varNode = treeNode->AsLclVarCommon();
-
- unsigned varNum = varNode->gtLclNum;
- assert(varNum < compiler->lvaCount);
- LclVarDsc* varDsc = &(compiler->lvaTable[varNum]);
- unsigned offset = 0;
-
- // Ensure that lclVar nodes are typed correctly.
- assert(!varDsc->lvNormalizeOnStore() || targetType == genActualType(varDsc->TypeGet()));
-
- GenTreePtr data = treeNode->gtOp.gtOp1->gtEffectiveVal();
-
- // var = call, where call returns a multi-reg return value
- // case is handled separately.
- if (data->gtSkipReloadOrCopy()->IsMultiRegCall())
- {
- genMultiRegCallStoreToLocal(treeNode);
- break;
- }
- else
- {
- if (treeNode->TypeGet() == TYP_LONG)
- {
- genStoreLongLclVar(treeNode);
- break;
- }
-
- genConsumeRegs(data);
-
- regNumber dataReg = REG_NA;
- if (data->isContainedIntOrIImmed())
- {
- assert(data->IsIntegralConst(0));
- NYI_ARM("st.lclVar contained operand");
- }
- else
- {
- assert(!data->isContained());
- dataReg = data->gtRegNum;
- }
- assert(dataReg != REG_NA);
-
- if (targetReg == REG_NA) // store into stack based LclVar
- {
- inst_set_SV_var(varNode);
-
- instruction ins = ins_Store(targetType);
- emitAttr attr = emitTypeSize(targetType);
-
- emit->emitIns_S_R(ins, attr, dataReg, varNum, offset);
-
- genUpdateLife(varNode);
-
- varDsc->lvRegNum = REG_STK;
- }
- else // store into register (i.e move into register)
- {
- if (dataReg != targetReg)
- {
- // Assign into targetReg when dataReg (from op1) is not the same register
- inst_RV_RV(ins_Copy(targetType), targetReg, dataReg, targetType);
- }
- genProduceReg(treeNode);
- }
- }
- }
- break;
-
- case GT_RETFILT:
- // A void GT_RETFILT is the end of a finally. For non-void filter returns we need to load the result in
- // the return register, if it's not already there. The processing is the same as GT_RETURN.
- if (targetType != TYP_VOID)
- {
- // For filters, the IL spec says the result is type int32. Further, the only specified legal values
- // are 0 or 1, with the use of other values "undefined".
- assert(targetType == TYP_INT);
- }
-
- __fallthrough;
-
- case GT_RETURN:
- genReturn(treeNode);
- break;
-
- case GT_LEA:
- {
- // if we are here, it is the case where there is an LEA that cannot
- // be folded into a parent instruction
- GenTreeAddrMode* lea = treeNode->AsAddrMode();
- genLeaInstruction(lea);
- }
- // genLeaInstruction calls genProduceReg()
- break;
-
- case GT_IND:
- genConsumeAddress(treeNode->AsIndir()->Addr());
- emit->emitInsLoadStoreOp(ins_Load(targetType), emitTypeSize(treeNode), targetReg, treeNode->AsIndir());
- genProduceReg(treeNode);
- break;
-
- case GT_MOD:
- case GT_UDIV:
- case GT_UMOD:
- // We shouldn't be seeing GT_MOD on float/double args as it should get morphed into a
- // helper call by front-end. Similarly we shouldn't be seeing GT_UDIV and GT_UMOD
- // on float/double args.
- noway_assert(!varTypeIsFloating(treeNode));
- __fallthrough;
-
- case GT_DIV:
- {
- genConsumeOperands(treeNode->AsOp());
-
- noway_assert(targetReg != REG_NA);
-
- GenTreePtr dst = treeNode;
- GenTreePtr src1 = treeNode->gtGetOp1();
- GenTreePtr src2 = treeNode->gtGetOp2();
- instruction ins = genGetInsForOper(treeNode->OperGet(), targetType);
- emitAttr attr = emitTypeSize(treeNode);
- regNumber result = REG_NA;
-
- // dst can only be a reg
- assert(!dst->isContained());
-
- // src can be only reg
- assert(!src1->isContained() || !src2->isContained());
-
- if (varTypeIsFloating(targetType))
- {
- // Floating point divide never raises an exception
-
- emit->emitIns_R_R_R(ins, attr, dst->gtRegNum, src1->gtRegNum, src2->gtRegNum);
- }
- else // an signed integer divide operation
- {
- // TODO-ARM-Bug: handle zero division exception.
-
- emit->emitIns_R_R_R(ins, attr, dst->gtRegNum, src1->gtRegNum, src2->gtRegNum);
- }
-
- genProduceReg(treeNode);
- }
- break;
-
- case GT_INTRINSIC:
- {
- genIntrinsic(treeNode);
- }
- break;
-
- case GT_EQ:
- case GT_NE:
- case GT_LT:
- case GT_LE:
- case GT_GE:
- case GT_GT:
- {
- // TODO-ARM-CQ: Check if we can use the currently set flags.
- // TODO-ARM-CQ: Check for the case where we can simply transfer the carry bit to a register
- // (signed < or >= where targetReg != REG_NA)
-
- GenTreeOp* tree = treeNode->AsOp();
- GenTreePtr op1 = tree->gtOp1->gtEffectiveVal();
- GenTreePtr op2 = tree->gtOp2->gtEffectiveVal();
-
- genConsumeIfReg(op1);
- genConsumeIfReg(op2);
-
- instruction ins = INS_cmp;
- emitAttr cmpAttr;
- if (varTypeIsFloating(op1))
- {
- assert(op1->TypeGet() == op2->TypeGet());
- ins = INS_vcmp;
- cmpAttr = emitTypeSize(op1->TypeGet());
- emit->emitInsBinary(ins, cmpAttr, op1, op2);
- // vmrs with register 0xf has special meaning of transferring flags
- emit->emitIns_R(INS_vmrs, EA_4BYTE, REG_R15);
- }
- else if (varTypeIsLong(op1))
- {
-#ifdef DEBUG
- // The result of an unlowered long compare on a 32-bit target must either be
- // a) materialized into a register, or
- // b) unused.
- //
- // A long compare that has a result that is used but not materialized into a register should
- // have been handled by Lowering::LowerCompare.
-
- LIR::Use use;
- assert((treeNode->gtRegNum != REG_NA) || !LIR::AsRange(compiler->compCurBB).TryGetUse(treeNode, &use));
-#endif
- genCompareLong(treeNode);
- break;
- }
- else
- {
- var_types op1Type = op1->TypeGet();
- var_types op2Type = op2->TypeGet();
- assert(!varTypeIsFloating(op2Type));
- ins = INS_cmp;
- if (op1Type == op2Type)
- {
- cmpAttr = emitTypeSize(op1Type);
- }
- else
- {
- var_types cmpType = TYP_INT;
- bool op1Is64Bit = (varTypeIsLong(op1Type) || op1Type == TYP_REF);
- bool op2Is64Bit = (varTypeIsLong(op2Type) || op2Type == TYP_REF);
- NYI_IF(op1Is64Bit || op2Is64Bit, "Long compare");
- assert(!op1->isUsedFromMemory() || op1Type == op2Type);
- assert(!op2->isUsedFromMemory() || op1Type == op2Type);
- cmpAttr = emitTypeSize(cmpType);
- }
- emit->emitInsBinary(ins, cmpAttr, op1, op2);
- }
-
- // Are we evaluating this into a register?
- if (targetReg != REG_NA)
- {
- genSetRegToCond(targetReg, tree);
- genProduceReg(tree);
- }
- }
- break;
-
- case GT_JTRUE:
- genCodeForJumpTrue(treeNode);
- break;
-
- case GT_JCC:
- {
- GenTreeJumpCC* jcc = treeNode->AsJumpCC();
-
- assert(compiler->compCurBB->bbJumpKind == BBJ_COND);
-
- CompareKind compareKind = ((jcc->gtFlags & GTF_UNSIGNED) != 0) ? CK_UNSIGNED : CK_SIGNED;
- emitJumpKind jumpKind = genJumpKindForOper(jcc->gtCondition, compareKind);
-
- inst_JMP(jumpKind, compiler->compCurBB->bbJumpDest);
- }
- break;
-
- case GT_RETURNTRAP:
- {
- // this is nothing but a conditional call to CORINFO_HELP_STOP_FOR_GC
- // based on the contents of 'data'
-
- GenTree* data = treeNode->gtOp.gtOp1->gtEffectiveVal();
- genConsumeIfReg(data);
- GenTreeIntCon cns = intForm(TYP_INT, 0);
- emit->emitInsBinary(INS_cmp, emitTypeSize(TYP_INT), data, &cns);
-
- BasicBlock* skipLabel = genCreateTempLabel();
-
- emitJumpKind jmpEqual = genJumpKindForOper(GT_EQ, CK_SIGNED);
- inst_JMP(jmpEqual, skipLabel);
- // emit the call to the EE-helper that stops for GC (or other reasons)
-
- genEmitHelperCall(CORINFO_HELP_STOP_FOR_GC, 0, EA_UNKNOWN);
- genDefineTempLabel(skipLabel);
- }
- break;
-
- case GT_STOREIND:
- {
- GenTreeStoreInd* storeInd = treeNode->AsStoreInd();
- GenTree* data = storeInd->Data();
- GenTree* addr = storeInd->Addr();
- var_types targetType = storeInd->TypeGet();
-
- assert(!varTypeIsFloating(targetType) || (targetType == data->TypeGet()));
-
- GCInfo::WriteBarrierForm writeBarrierForm = gcInfo.gcIsWriteBarrierCandidate(treeNode, data);
- if (writeBarrierForm != GCInfo::WBF_NoBarrier)
- {
- // data and addr must be in registers.
- // Consume both registers so that any copies of interfering
- // registers are taken care of.
- genConsumeOperands(storeInd->AsOp());
-
-#if NOGC_WRITE_BARRIERS
- NYI_ARM("NOGC_WRITE_BARRIERS");
-#else
- // At this point, we should not have any interference.
- // That is, 'data' must not be in REG_ARG_0,
- // as that is where 'addr' must go.
- noway_assert(data->gtRegNum != REG_ARG_0);
-
- // addr goes in REG_ARG_0
- if (addr->gtRegNum != REG_ARG_0)
- {
- inst_RV_RV(INS_mov, REG_ARG_0, addr->gtRegNum, addr->TypeGet());
- }
-
- // data goes in REG_ARG_1
- if (data->gtRegNum != REG_ARG_1)
- {
- inst_RV_RV(INS_mov, REG_ARG_1, data->gtRegNum, data->TypeGet());
- }
-#endif // NOGC_WRITE_BARRIERS
-
- genGCWriteBarrier(storeInd, writeBarrierForm);
- }
- else // A normal store, not a WriteBarrier store
- {
- bool reverseOps = ((storeInd->gtFlags & GTF_REVERSE_OPS) != 0);
- bool dataIsUnary = false;
-
- // We must consume the operands in the proper execution order,
- // so that liveness is updated appropriately.
- if (!reverseOps)
- {
- genConsumeAddress(addr);
- }
-
- if (!data->isContained())
- {
- genConsumeRegs(data);
- }
-
- if (reverseOps)
- {
- genConsumeAddress(addr);
- }
-
- emit->emitInsLoadStoreOp(ins_Store(targetType), emitTypeSize(storeInd), data->gtRegNum,
- treeNode->AsIndir());
- }
- }
- break;
-
- case GT_COPY:
- // This is handled at the time we call genConsumeReg() on the GT_COPY
- break;
-
- case GT_LIST:
- case GT_FIELD_LIST:
- case GT_ARGPLACE:
- // Nothing to do
- break;
-
- case GT_PUTARG_STK:
- genPutArgStk(treeNode->AsPutArgStk());
- break;
-
- case GT_PUTARG_REG:
- {
- NYI_IF(targetType == TYP_STRUCT, "GT_PUTARG_REG: struct support not implemented");
-
- // commas show up here commonly, as part of a nullchk operation
- GenTree* op1 = treeNode->gtOp.gtOp1->gtEffectiveVal();
- // If child node is not already in the register we need, move it
- genConsumeReg(op1);
- if (treeNode->gtRegNum != op1->gtRegNum)
- {
- inst_RV_RV(ins_Move_Extend(targetType, true), treeNode->gtRegNum, op1->gtRegNum, targetType);
- }
- }
- genProduceReg(treeNode);
- break;
-
- case GT_CALL:
- genCallInstruction(treeNode->AsCall());
- break;
-
- case GT_LOCKADD:
- case GT_XCHG:
- case GT_XADD:
- genLockedInstructions(treeNode->AsOp());
- break;
-
- case GT_MEMORYBARRIER:
- instGen_MemoryBarrier();
- break;
-
- case GT_CMPXCHG:
- {
- NYI("GT_CMPXCHG");
- }
- genProduceReg(treeNode);
- break;
-
- case GT_RELOAD:
- // do nothing - reload is just a marker.
- // The parent node will call genConsumeReg on this which will trigger the unspill of this node's child
- // into the register specified in this node.
- break;
-
- case GT_NOP:
- break;
-
- case GT_NO_OP:
- if (treeNode->gtFlags & GTF_NO_OP_NO)
- {
- noway_assert(!"GTF_NO_OP_NO should not be set");
- }
- else
- {
- instGen(INS_nop);
- }
- break;
-
- case GT_ARR_BOUNDS_CHECK:
- genRangeCheck(treeNode);
- break;
-
- case GT_PHYSREG:
- if (treeNode->gtRegNum != treeNode->AsPhysReg()->gtSrcReg)
- {
- inst_RV_RV(INS_mov, treeNode->gtRegNum, treeNode->AsPhysReg()->gtSrcReg, targetType);
-
- genTransferRegGCState(treeNode->gtRegNum, treeNode->AsPhysReg()->gtSrcReg);
- }
- break;
-
- case GT_PHYSREGDST:
- break;
-
- case GT_NULLCHECK:
- {
- assert(!treeNode->gtOp.gtOp1->isContained());
- regNumber addrReg = genConsumeReg(treeNode->gtOp.gtOp1);
- emit->emitIns_R_R_I(INS_ldr, EA_4BYTE, targetReg, addrReg, 0);
- }
- break;
-
- case GT_CATCH_ARG:
-
- noway_assert(handlerGetsXcptnObj(compiler->compCurBB->bbCatchTyp));
-
- /* Catch arguments get passed in a register. genCodeForBBlist()
- would have marked it as holding a GC object, but not used. */
-
- noway_assert(gcInfo.gcRegGCrefSetCur & RBM_EXCEPTION_OBJECT);
- genConsumeReg(treeNode);
- break;
-
- case GT_PINVOKE_PROLOG:
- noway_assert(((gcInfo.gcRegGCrefSetCur | gcInfo.gcRegByrefSetCur) & ~fullIntArgRegMask()) == 0);
-
- // the runtime side requires the codegen here to be consistent
- emit->emitDisableRandomNops();
- break;
-
- case GT_LABEL:
- genPendingCallLabel = genCreateTempLabel();
- treeNode->gtLabel.gtLabBB = genPendingCallLabel;
- emit->emitIns_J_R(INS_adr, EA_PTRSIZE, genPendingCallLabel, treeNode->gtRegNum);
- break;
-
- case GT_CLS_VAR_ADDR:
- emit->emitIns_R_C(INS_lea, EA_PTRSIZE, targetReg, treeNode->gtClsVar.gtClsVarHnd, 0);
- genProduceReg(treeNode);
- break;
-
- case GT_STORE_DYN_BLK:
- case GT_STORE_BLK:
- genCodeForStoreBlk(treeNode->AsBlk());
- break;
-
- case GT_JMPTABLE:
- genJumpTable(treeNode);
- break;
-
- case GT_SWITCH_TABLE:
- genTableBasedSwitch(treeNode);
- break;
-
- case GT_ARR_INDEX:
- genCodeForArrIndex(treeNode->AsArrIndex());
- break;
-
- case GT_ARR_OFFSET:
- genCodeForArrOffset(treeNode->AsArrOffs());
- break;
-
- case GT_IL_OFFSET:
- // Do nothing; these nodes are simply markers for debug info.
- break;
-
- default:
- {
-#ifdef DEBUG
- char message[256];
- _snprintf_s(message, _countof(message), _TRUNCATE, "NYI: Unimplemented node type %s",
- GenTree::NodeName(treeNode->OperGet()));
- NYIRAW(message);
-#else
- NYI("unimplemented node");
-#endif
- }
- break;
- }
-}
-
-//------------------------------------------------------------------------
// genLockedInstructions: Generate code for the locked operations.
//
// Notes:
@@ -1511,43 +781,161 @@ void CodeGen::genCodeForInitBlkUnroll(GenTreeBlk* initBlkNode)
NYI_ARM("genCodeForInitBlkUnroll");
}
-void CodeGen::genCodeForStoreBlk(GenTreeBlk* blkOp)
+//------------------------------------------------------------------------
+// genCodeForNegNot: Produce code for a GT_NEG/GT_NOT node.
+//
+// Arguments:
+// tree - the node
+//
+void CodeGen::genCodeForNegNot(GenTree* tree)
{
- if (blkOp->gtBlkOpGcUnsafe)
+ assert(tree->OperIs(GT_NEG, GT_NOT));
+
+ var_types targetType = tree->TypeGet();
+
+ assert(!tree->OperIs(GT_NOT) || !varTypeIsFloating(targetType));
+
+ regNumber targetReg = tree->gtRegNum;
+ instruction ins = genGetInsForOper(tree->OperGet(), targetType);
+
+ // The arithmetic node must be sitting in a register (since it's not contained)
+ assert(!tree->isContained());
+ // The dst can only be a register.
+ assert(targetReg != REG_NA);
+
+ GenTreePtr operand = tree->gtGetOp1();
+ assert(!operand->isContained());
+ // The src must be a register.
+ regNumber operandReg = genConsumeReg(operand);
+
+ if (ins == INS_vneg)
{
- getEmitter()->emitDisableGC();
+ getEmitter()->emitIns_R_R(ins, emitTypeSize(tree), targetReg, operandReg);
}
- bool isCopyBlk = blkOp->OperIsCopyBlkOp();
+ else
+ {
+ getEmitter()->emitIns_R_R_I(ins, emitTypeSize(tree), targetReg, operandReg, 0);
+ }
+
+ genProduceReg(tree);
+}
- switch (blkOp->gtBlkOpKind)
+// Generate code for CpObj nodes wich copy structs that have interleaved
+// GC pointers.
+// For this case we'll generate a sequence of loads/stores in the case of struct
+// slots that don't contain GC pointers. The generated code will look like:
+// ldr tempReg, [R13, #8]
+// str tempReg, [R14, #8]
+//
+// In the case of a GC-Pointer we'll call the ByRef write barrier helper
+// who happens to use the same registers as the previous call to maintain
+// the same register requirements and register killsets:
+// bl CORINFO_HELP_ASSIGN_BYREF
+//
+// So finally an example would look like this:
+// ldr tempReg, [R13, #8]
+// str tempReg, [R14, #8]
+// bl CORINFO_HELP_ASSIGN_BYREF
+// ldr tempReg, [R13, #8]
+// str tempReg, [R14, #8]
+// bl CORINFO_HELP_ASSIGN_BYREF
+// ldr tempReg, [R13, #8]
+// str tempReg, [R14, #8]
+void CodeGen::genCodeForCpObj(GenTreeObj* cpObjNode)
+{
+ GenTreePtr dstAddr = cpObjNode->Addr();
+ GenTreePtr source = cpObjNode->Data();
+ var_types srcAddrType = TYP_BYREF;
+ bool sourceIsLocal = false;
+ regNumber dstReg = REG_NA;
+ regNumber srcReg = REG_NA;
+
+ assert(source->isContained());
+ if (source->gtOper == GT_IND)
{
- case GenTreeBlk::BlkOpKindHelper:
- if (isCopyBlk)
- {
- genCodeForCpBlk(blkOp);
- }
- else
- {
- genCodeForInitBlk(blkOp);
- }
- break;
- case GenTreeBlk::BlkOpKindUnroll:
- if (isCopyBlk)
- {
- genCodeForCpBlkUnroll(blkOp);
- }
- else
- {
- genCodeForInitBlkUnroll(blkOp);
- }
- break;
- default:
- unreached();
+ GenTree* srcAddr = source->gtGetOp1();
+ assert(!srcAddr->isContained());
+ srcAddrType = srcAddr->TypeGet();
+ }
+ else
+ {
+ noway_assert(source->IsLocal());
+ sourceIsLocal = true;
+ }
+
+ bool dstOnStack = dstAddr->OperIsLocalAddr();
+
+#ifdef DEBUG
+ assert(!dstAddr->isContained());
+
+ // This GenTree node has data about GC pointers, this means we're dealing
+ // with CpObj.
+ assert(cpObjNode->gtGcPtrCount > 0);
+#endif // DEBUG
+
+ // Consume the operands and get them into the right registers.
+ // They may now contain gc pointers (depending on their type; gcMarkRegPtrVal will "do