platform/upstream/dotnet/runtime.git
4 years ago[llvm] Disable X86 call frame size optimization. (#11118)
monojenkins [Mon, 17 Feb 2020 14:41:54 +0000 (09:41 -0500)]
[llvm] Disable X86 call frame size optimization. (#11118)

Fixes https://github.com/mono/mono/issues/17285.

For calls that require parameters passed in stack memory,
X86CallFrameOptimization can sometimes replace a sequence of movs to
prologue-reserved stack memory with a sequence of pushes and a compensating sub
rsp after the call. LLVM accumulates an OpAdjustCfaOffset MCCFIInstruction for
each push and and records the ephemeral parameter space consumed by the call
using an OpGnuArgsSize MCCFIInstruction (i.e. DW_CFA_GNU_args_size).

MonoException doesn't support encoding OpGnuArgsSize MCCFIInstructions, and
attempting to encode this instruction can cause unpredictable behavior, due to
our use of llvm_unreachable with assertions disabled [1]. Moreover, even if
MonoException happens to emit valid call frame instructions despite the UB
induced by llvm_unreachable, Mono's exception handler will restore the stack
pointer to the value it contained at the time right before the protected call
instruction was made, without compensating for any ephemeral parameter space.

The stack pointer could be fixed before the jump to the EH handler by
supporting DW_CFA_GNU_args_size or by executing call frame instructions for the
EH handler's frame all the way to the end of the protected instruction address
range--which will include a sub rsp with an appropriate immediate--to determine
an appropriate delta. But it's easier to just disable this optimization. We
already disable it for AOT [2]. It's sometimes disabled by LLVM on Darwin [3].

Also, this commit adds a test (which is a nearly verbatim copy of laszk's
reproduction sample in mono/mono#17285) for EH failures caused by the interaction of our
EH code and X86CallFrameOptimization.

See also [4], [5], and [6].

[1] https://github.com/dotnet/llvm-project/blob/adeaa08e7bbc9aba5d67cb16c2b348be12deb000/llvm/lib/CodeGen/AsmPrinter/MonoException.cpp#L209-L210
[2] https://github.com/mono/mono/blob/1317cf06da06682419f8f4b0c9810ad5d5d3ac3a/mono/mini/aot-compiler.c#L9872-L9875
[3] https://github.com/dotnet/llvm-project/blob/adeaa08e7bbc9aba5d67cb16c2b348be12deb000/llvm/lib/Target/X86/X86CallFrameOptimization.cpp#L146-L152
[4] https://bugs.llvm.org/show_bug.cgi?id=24792
[5] https://reviews.llvm.org/D13132
[6] http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20151005/304074.html

Co-authored-by: imhameed <imhameed@microsoft.com>
4 years ago[jit] Run static cctors for inlined methods, the cctor might not have ran in AOT...
monojenkins [Mon, 17 Feb 2020 14:15:23 +0000 (09:15 -0500)]
[jit] Run static cctors for inlined methods, the cctor might not have ran in AOT mode. (#31752)

Co-authored-by: Zoltan Varga <vargaz@gmail.com>
4 years agoAdd missing MONO_LLVM_INTERNAL to mono_marshal_get_native_wrapper (#32431)
Alexander Köplinger [Mon, 17 Feb 2020 13:39:44 +0000 (14:39 +0100)]
Add missing MONO_LLVM_INTERNAL to mono_marshal_get_native_wrapper (#32431)

It was missed due to a glitch in the GitHub API that caused the mirror to not get the latest version of the diff.

4 years ago[cross] check against correct alignment value (#31801)
monojenkins [Mon, 17 Feb 2020 13:22:12 +0000 (08:22 -0500)]
[cross] check against correct alignment value (#31801)

It's essentially dead code in any of our configurations.

`MONO_ALIGN_gint8` is define here:
https://github.com/mono/mono/blob/ab2321c1dc1bf0293dadd7e52436b2bd87f2b7c3/mono/metadata/abi-details.h#L26-L35

And the correct value is set here:
https://github.com/mono/mono/blob/ab2321c1dc1bf0293dadd7e52436b2bd87f2b7c3/mono/metadata/abi.c#L71-L75

Co-authored-by: Bernhard Urban-Forster <bernhard.urban@xamarin.com>
4 years ago[abi-details] add explaining comment for macro magic (#31802)
monojenkins [Mon, 17 Feb 2020 13:21:36 +0000 (08:21 -0500)]
[abi-details] add explaining comment for macro magic (#31802)

I think the fallback was added because "let's get it back to work quickly", back in the dark times without CI: https://github.com/mono/mono/commit/b655fb35c61fd3422003de01eed8e634d46b4186

Co-authored-by: Bernhard Urban-Forster <bernhard.urban@xamarin.com>
4 years agoRemove unnecessary ifdef before undef. (#32417)
monojenkins [Mon, 17 Feb 2020 13:01:37 +0000 (08:01 -0500)]
Remove unnecessary ifdef before undef. (#32417)

#undef never needs an ifdef guard, it works unconditionally without warning.

Co-authored-by: Jay Krell <jay.krell@cornell.edu>
4 years agoAdd back System.Json to mono-profiler-coverage.suppression (#32430)
Alexander Köplinger [Mon, 17 Feb 2020 12:51:08 +0000 (13:51 +0100)]
Add back System.Json to mono-profiler-coverage.suppression (#32430)

It was removed in https://github.com/dotnet/runtime/pull/32329 but this file contains assemblies that apply to mono/mono.

4 years agoRemove duplicated Windows header content. (#32252)
monojenkins [Mon, 17 Feb 2020 12:50:44 +0000 (07:50 -0500)]
Remove duplicated Windows header content. (#32252)

Co-authored-by: Jay Krell <jay.krell@cornell.edu>
4 years agoReduce execution time of Socket handle inheritance tests (#31813)
Anton Firszov [Mon, 17 Feb 2020 12:33:24 +0000 (13:33 +0100)]
Reduce execution time of Socket handle inheritance tests (#31813)

Reduce the execution time for CtorAndAccept_SocketNotKeptAliveViaInheritance and DuplicateSocket_IsNotInheritable on Windows, using a new utility method, SocketTestExtensions.TryConnect().

4 years agoFix/quash some warnings. (#32395)
monojenkins [Mon, 17 Feb 2020 11:50:21 +0000 (06:50 -0500)]
Fix/quash some warnings. (#32395)

mini\mini.c(1253,59): warning C4390:  ';': empty controlled statement found; is this the intent?
mini\mini.c(3100,43): warning C4390:  ';': empty controlled statement found; is this the intent?
mini\mini.c(3273,49): warning C4390:  ';': empty controlled statement found; is this the intent?
mini\mini.c(3281,49): warning C4390:  ';': empty controlled statement found; is this the intent?
mini\mini.c(3480,51): warning C4390:  ';': empty controlled statement found; is this the intent?
mini\mini.c(3490,49): warning C4390:  ';': empty controlled statement found; is this the intent?
mini\mini.c(3626,48): warning C4390:  ';': empty controlled statement found; is this the intent?
mini\mini.c(3664,48): warning C4390:  ';': empty controlled statement found; is this the intent?
mini\mini.c(3722,48): warning C4390:  ';': empty controlled statement found; is this the intent?
mini\mini.c(3944,47): warning C4390:  ';': empty controlled statement found; is this the intent?
mini\mini-runtime.c(549,64): warning C4390:  ';': empty controlled statement found; is this the intent?
mini\method-to-ir.c(11838,2): warning C4065:  switch statement contains 'default' but no 'case ' labels
metadata\sre.c(2286,11): warning C4309:  '=': truncation of constant value
metadata\sre.c(2179,11): warning C4309:  '=': truncation of constant value
metadata\sre.c(2204,11): warning C4309:  '=': truncation of constant value
metadata\sre.c(2232,11): warning C4309:  '=': truncation of constant value
mini\method-to-ir.c(11838,2): warning C4065:  switch statement contains 'default' but no 'case
mini\type-checking.c(167,3): warning C4334:  '<<': result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?)

Co-authored-by: Jay Krell <jay.krell@cornell.edu>
4 years agoRemove unnecesssary include. (#32394)
monojenkins [Mon, 17 Feb 2020 11:47:57 +0000 (06:47 -0500)]
Remove unnecesssary include. (#32394)

Less to build if you edit the file.

Co-authored-by: Jay Krell <jay.krell@cornell.edu>
4 years ago[interp] Use method_entry at interp entry instead of duplicating the code. (#32382)
monojenkins [Mon, 17 Feb 2020 11:47:00 +0000 (06:47 -0500)]
[interp] Use method_entry at interp entry instead of duplicating the code. (#32382)

`tracing` was a mix of:
 - sometimes ifdef out, sometimes not; make it always ifdefed
 - sometimes `int`, sometimes `gint`, sometimes `gboolean`; make it always `int`

Much of this PR will end up deleted when the multiple nonrecursive calls are
consolidated, but two will remain -- entry and call: label.

https://github.com/mono/mono/pull/18825 is where this is going but it was deemed
too large and requested to be split up. This is part of it.

Co-authored-by: Jay Krell <jay.krell@cornell.edu>
4 years ago[interp] Step toward consolidating nonrecursive call sites (retval). (#32308)
monojenkins [Mon, 17 Feb 2020 11:43:58 +0000 (06:43 -0500)]
[interp] Step toward consolidating nonrecursive call sites (retval). (#32308)

https://github.com/mono/mono/pull/18825 was deemed too large and requested to be split up.
This is one of the required pieces.
To consolidate the multiple nonrecursive call sites requires they share the same retval variable. Go ahead and share them all.

Co-authored-by: Jay Krell <jay.krell@cornell.edu>
4 years ago[interp] Fix incorrect comment -- stackval has no size. (#32410)
monojenkins [Mon, 17 Feb 2020 11:42:46 +0000 (06:42 -0500)]
[interp] Fix incorrect comment -- stackval has no size. (#32410)

Co-authored-by: Jay Krell <jay.krell@cornell.edu>
4 years ago[mono] Fix msvc mono build and add `CopyMonoRuntimeFilesFromArtifactsToDestination...
Egor Bogatov [Mon, 17 Feb 2020 09:03:13 +0000 (12:03 +0300)]
[mono] Fix msvc mono build and add `CopyMonoRuntimeFilesFromArtifactsToDestination` target (#32130)

* Fix msvc mono build

* Add CopyMonoRuntimeFilesFromArtifactsToDestination target

* Address feedback

* Change condtion to Exists(..\mono.proj)

* Minor improvements

4 years ago[interp] Step toward consolidation of non-recursive call sites. (#32306)
monojenkins [Mon, 17 Feb 2020 08:13:02 +0000 (03:13 -0500)]
[interp] Step toward consolidation of non-recursive call sites. (#32306)

https://github.com/mono/mono/pull/18825 was too large.
This starts by replacing imethod with cmethod which is a necessary
part of the consolidation of multiple non-recursive call sites to just one.

Co-authored-by: Jay Krell <jay.krell@cornell.edu>
4 years agoUpdate Build Script Help Content (#2046)
Viktor Hofer [Mon, 17 Feb 2020 07:41:46 +0000 (08:41 +0100)]
Update Build Script Help Content (#2046)

* Update Build Script Help Content

Add the new runtime/library configuration arguments.

* PR feedback

4 years agoPublish (bin)logs as pipeline artifacts (#2345)
Viktor Hofer [Mon, 17 Feb 2020 07:40:50 +0000 (08:40 +0100)]
Publish (bin)logs as pipeline artifacts (#2345)

* Publish (bin)logs as pipeline artifacts

Currently we publish logs and binlogs as build artifacts. Pipeline
artifacts are the replacement for build artifacts and enable multi-stage
uploads. This doesn't change upload our build artifacts via the
PublishBuildArtifacts task.

* Parameterize artiact name

4 years agoSimplify and remove char[] allocation from AsnFormatter.EncodeHexString
Stephen Toub [Mon, 17 Feb 2020 06:54:32 +0000 (01:54 -0500)]
Simplify and remove char[] allocation from AsnFormatter.EncodeHexString

4 years agoUse double.Parse on span instead of string in Unix ping (#32423)
Stephen Toub [Mon, 17 Feb 2020 05:01:56 +0000 (00:01 -0500)]
Use double.Parse on span instead of string in Unix ping (#32423)

Avoids a string allocation.

4 years agoFix an assert error in crossgen2 on ARM (#32421)
Dong-Heon Jung [Mon, 17 Feb 2020 05:01:39 +0000 (14:01 +0900)]
Fix an assert error in crossgen2 on ARM (#32421)

- Initialize wrapperDelegateInvoke of CORINFO_CALL_INFO in ARM.

4 years agoGC polling in unboxing JIT helpers (#32353)
Vladimir Sadov [Sun, 16 Feb 2020 23:42:01 +0000 (15:42 -0800)]
GC polling in unboxing JIT helpers (#32353)

* GC polling in unboxing JIT helpers

* further tuning the type check for enums

4 years agoSimplify to use NOT operator instead of comparing to false. (#32398)
pi1024e [Sun, 16 Feb 2020 19:57:51 +0000 (14:57 -0500)]
Simplify to use NOT operator instead of comparing to false. (#32398)

4 years agoDefine FEATURE_PROFAPI_ATTACH_DETACH always (#32293)
Ilia [Sun, 16 Feb 2020 19:41:16 +0000 (22:41 +0300)]
Define FEATURE_PROFAPI_ATTACH_DETACH always (#32293)

Allow to use profiler attach/detach feature because it seems to work on
other platforms (macOS in particular).

Also, remove unused DATA_PROFAPI_ATTACH_DETACH definition.

Fixes #32093

4 years agoDisable EventLog test on all targets (#32403)
Viktor Hofer [Sun, 16 Feb 2020 19:22:18 +0000 (20:22 +0100)]
Disable EventLog test on all targets (#32403)

Disabling to get CI green: https://github.com/dotnet/runtime/issues/32241

4 years ago[master] Update dependencies from dotnet/arcade (#32292)
dotnet-maestro[bot] [Sun, 16 Feb 2020 15:06:04 +0000 (15:06 +0000)]
[master] Update dependencies from dotnet/arcade (#32292)

* Update dependencies from https://github.com/dotnet/arcade build 20200213.6

- Microsoft.DotNet.XUnitExtensions - 5.0.0-beta.20113.6
- Microsoft.DotNet.VersionTools.Tasks - 5.0.0-beta.20113.6
- Microsoft.DotNet.ApiCompat - 5.0.0-beta.20113.6
- Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.20113.6
- Microsoft.DotNet.Build.Tasks.Feed - 5.0.0-beta.20113.6
- Microsoft.DotNet.Build.Tasks.Packaging - 5.0.0-beta.20113.6
- Microsoft.DotNet.Build.Tasks.SharedFramework.Sdk - 5.0.0-beta.20113.6
- Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk - 5.0.0-beta.20113.6
- Microsoft.DotNet.CodeAnalysis - 5.0.0-beta.20113.6
- Microsoft.DotNet.GenAPI - 5.0.0-beta.20113.6
- Microsoft.DotNet.GenFacades - 5.0.0-beta.20113.6
- Microsoft.DotNet.Helix.Sdk - 5.0.0-beta.20113.6
- Microsoft.DotNet.RemoteExecutor - 5.0.0-beta.20113.6
- Microsoft.DotNet.XUnitConsoleRunner - 2.5.1-beta.20113.6

* Update dependencies from https://github.com/dotnet/arcade build 20200214.5

- Microsoft.DotNet.XUnitExtensions - 5.0.0-beta.20114.5
- Microsoft.DotNet.VersionTools.Tasks - 5.0.0-beta.20114.5
- Microsoft.DotNet.ApiCompat - 5.0.0-beta.20114.5
- Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.20114.5
- Microsoft.DotNet.Build.Tasks.Feed - 5.0.0-beta.20114.5
- Microsoft.DotNet.Build.Tasks.Packaging - 5.0.0-beta.20114.5
- Microsoft.DotNet.Build.Tasks.SharedFramework.Sdk - 5.0.0-beta.20114.5
- Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk - 5.0.0-beta.20114.5
- Microsoft.DotNet.CodeAnalysis - 5.0.0-beta.20114.5
- Microsoft.DotNet.GenAPI - 5.0.0-beta.20114.5
- Microsoft.DotNet.GenFacades - 5.0.0-beta.20114.5
- Microsoft.DotNet.Helix.Sdk - 5.0.0-beta.20114.5
- Microsoft.DotNet.RemoteExecutor - 5.0.0-beta.20114.5
- Microsoft.DotNet.XUnitConsoleRunner - 2.5.1-beta.20114.5

* Update dependencies from https://github.com/dotnet/arcade build 20200215.1

- Microsoft.DotNet.XUnitExtensions - 5.0.0-beta.20115.1
- Microsoft.DotNet.VersionTools.Tasks - 5.0.0-beta.20115.1
- Microsoft.DotNet.ApiCompat - 5.0.0-beta.20115.1
- Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.20115.1
- Microsoft.DotNet.Build.Tasks.Feed - 5.0.0-beta.20115.1
- Microsoft.DotNet.Build.Tasks.Packaging - 5.0.0-beta.20115.1
- Microsoft.DotNet.Build.Tasks.SharedFramework.Sdk - 5.0.0-beta.20115.1
- Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk - 5.0.0-beta.20115.1
- Microsoft.DotNet.CodeAnalysis - 5.0.0-beta.20115.1
- Microsoft.DotNet.GenAPI - 5.0.0-beta.20115.1
- Microsoft.DotNet.GenFacades - 5.0.0-beta.20115.1
- Microsoft.DotNet.Helix.Sdk - 5.0.0-beta.20115.1
- Microsoft.DotNet.RemoteExecutor - 5.0.0-beta.20115.1
- Microsoft.DotNet.XUnitConsoleRunner - 2.5.1-beta.20115.1

4 years agoRemove CreateDefensiveCopy and inline it in ImmutableArray.Create (#32386)
Marius Ungureanu [Sun, 16 Feb 2020 11:36:02 +0000 (13:36 +0200)]
Remove CreateDefensiveCopy and inline it in ImmutableArray.Create (#32386)

4 years agoTemporarily disable Windows ARM test executions (#32390)
Tomáš Rylek [Sun, 16 Feb 2020 11:12:49 +0000 (12:12 +0100)]
Temporarily disable Windows ARM test executions (#32390)

The new Windows.10.Arm64v8.Open queue exhibits flaky behavior
that is currently failing in most of our PR runs. Disabling test
execution on ARM before this is fixed.

Thanks

Tomas

4 years agoremove duplicate definition of Interop.Advapi32.CryptReleaseContext from src/librarie...
Anatoly Belyaev [Sun, 16 Feb 2020 04:46:18 +0000 (07:46 +0300)]
remove duplicate definition of Interop.Advapi32.CryptReleaseContext from src/libraries/Common/src/Interop/Windows/Crypt32/ (#32289)

4 years agoFix build on systems with space in path (#32169)
Marius Gundersen [Sun, 16 Feb 2020 04:43:40 +0000 (05:43 +0100)]
Fix build on systems with space in path (#32169)

This fixes building the project on systems where there is a space in the path of the user. For example on Windows where the user might (hypothetically) be called 'Marius Gundersen' and the path to their user folder is `C:\Users\Marius Gundersen\` the build would fail

This fixes #32165

4 years agoUpdate documentation for Vector256.Create methods (#382)
Michał Bryłka [Sun, 16 Feb 2020 04:27:02 +0000 (05:27 +0100)]
Update documentation for Vector256.Create methods (#382)

* Update documentation for Vector256.Create methods

* Add docs for _setr_ and _set1_ methods. Apply pool request suggestions

* Add XML docs to Vector.Create methods for non CLS compliant types

4 years agoAdd a comment explaining why not to switch to Array.Empty (#32365)
Marius Ungureanu [Sun, 16 Feb 2020 04:26:28 +0000 (06:26 +0200)]
Add a comment explaining why not to switch to Array.Empty (#32365)

4 years ago!entry cannot be null ever, so why even bother have a case for it? (#32384)
pi1024e [Sun, 16 Feb 2020 04:09:51 +0000 (23:09 -0500)]
!entry cannot be null ever, so why even bother have a case for it? (#32384)

4 years agoRemove DAC dependence on compile time DAC_TABLE_RVA definition on Linux (#32331)
Mike McLaughlin [Sun, 16 Feb 2020 01:20:07 +0000 (17:20 -0800)]
Remove DAC dependence on compile time DAC_TABLE_RVA definition on Linux (#32331)

Remove DAC dependence on compile time DAC_TABLE_RVA definition on Linux

Issue #https://github.com/dotnet/runtime/issues/1976

Added a fairly generic elf reader class.

Change createdump to use the elfreader for all the ELF enumeration
and find the g_dacTable to ensure all the symbol and string tables
are in the coredump.

4 years agoRemove unused COM shutdown logic. (#32381)
Aaron Robinson [Sat, 15 Feb 2020 23:26:47 +0000 (15:26 -0800)]
Remove unused COM shutdown logic. (#32381)

4 years agoAdd additional info to the mono building and testing docs (#32339)
Steve Pfister [Sat, 15 Feb 2020 22:48:57 +0000 (17:48 -0500)]
Add additional info to the mono building and testing docs (#32339)

4 years agoAvoid throwing NRE when system module is not passed to crossgen2 (#32323)
Anton Lapounov [Sat, 15 Feb 2020 21:13:58 +0000 (13:13 -0800)]
Avoid throwing NRE when system module is not passed to crossgen2 (#32323)

Crossgen2 would throw a NullReferenceException if the system module was not provided. That was caused by dereferencing CompilerTypeSystemContext.CanonTypesModule before it was set. See dotnet/corert#7972 for the context.

The fix consists of removing the CanonTypesModule property, which was needed for .NET Native only, and inverting the 'if' conditions to simplify the code a little.

4 years agoImprove Span.SequenceEqual for small buffers. (#32364)
Ahson Khan [Sat, 15 Feb 2020 18:27:56 +0000 (10:27 -0800)]
Improve Span.SequenceEqual for small buffers. (#32364)

4 years agoAvoid using stackalloc in a loop (#32375)
Miha Zupan [Sat, 15 Feb 2020 17:54:51 +0000 (18:54 +0100)]
Avoid using stackalloc in a loop (#32375)

4 years agoJIT: note when simd store coalescing produces a full local field. (#32324)
Andy Ayers [Sat, 15 Feb 2020 16:46:49 +0000 (08:46 -0800)]
JIT: note when simd store coalescing produces a full local field. (#32324)

And if so, remove `GTF_VAR_USEASG`.

Fixes #31615.

4 years agoremoving system.json project (#32329)
Anirudh Agnihotry [Sat, 15 Feb 2020 12:34:02 +0000 (04:34 -0800)]
removing system.json project (#32329)

4 years agoAdd Socket.OSSupportsUnixDomainSocket (#32160)
Stephen Toub [Sat, 15 Feb 2020 11:11:14 +0000 (03:11 -0800)]
Add Socket.OSSupportsUnixDomainSocket (#32160)

4 years agoRemove char[] allocation from XmlConverter.StripWhitespace (#32297)
Stephen Toub [Sat, 15 Feb 2020 11:10:26 +0000 (03:10 -0800)]
Remove char[] allocation from XmlConverter.StripWhitespace (#32297)

4 years agoUse span-based IndexOfAny in ModuleBuilder (#32299)
Stephen Toub [Sat, 15 Feb 2020 11:09:51 +0000 (03:09 -0800)]
Use span-based IndexOfAny in ModuleBuilder (#32299)

Removes an unnecessary char[] allocation per iteration.

Also simplified one IndexOfAny usage in Environment.cs.

4 years agoUse SYSTEM_PRIVATE_CORELIB ifdef for consistency (#32366)
Jan Kotas [Sat, 15 Feb 2020 11:08:41 +0000 (03:08 -0800)]
Use SYSTEM_PRIVATE_CORELIB ifdef for consistency (#32366)

4 years agoRemove startup byte[] allocation in EventSource (#32276)
Stephen Toub [Sat, 15 Feb 2020 09:39:57 +0000 (01:39 -0800)]
Remove startup byte[] allocation in EventSource (#32276)

Only occurs once and is then cached, but it's hit on startup, and may as well remove it.

4 years agoAdd issues to the TODOs in S.T.Json source for better tracking and minor clean up...
Ahson Khan [Sat, 15 Feb 2020 09:13:11 +0000 (01:13 -0800)]
Add issues to the TODOs in S.T.Json source for better tracking and minor clean up (#32360)

* Remove redundant check in condition (&& true) since it doesn't change
the behavior.

* Add issues to the TODOs for better tracking and fix some that were easy.

* Update ActiveIssue and enable tests that are now fixed.

4 years agoAdd public ReferenceEqualityComparer API (#31753)
Levi Broderick [Sat, 15 Feb 2020 07:23:14 +0000 (23:23 -0800)]
Add public ReferenceEqualityComparer API (#31753)

4 years ago[llvmonly] Allow more direct calls. (#32214)
monojenkins [Sat, 15 Feb 2020 06:52:45 +0000 (01:52 -0500)]
[llvmonly] Allow more direct calls. (#32214)

Co-authored-by: Zoltan Varga <vargaz@gmail.com>
4 years agoCrossgen2: set 'X' bit in unwind info for ARM (#32346)
Anton Lapounov [Sat, 15 Feb 2020 06:41:29 +0000 (22:41 -0800)]
Crossgen2: set 'X' bit in unwind info for ARM (#32346)

4 years agoCleanup old links (#32319)
Bill Wert [Sat, 15 Feb 2020 06:17:38 +0000 (22:17 -0800)]
Cleanup old links (#32319)

* Remove old debug instructions about using dumpling

* remove dumpling reference

* stop invoking dumpling

* remove unused perf scripts

* more dumpling references

* Remove unused perf scripts and change instructions to point to perf repo

* add updated SOS link

4 years ago[llvm] Remove unused llvm.mono.load/store intrinsics. (#32280)
monojenkins [Sat, 15 Feb 2020 05:57:18 +0000 (00:57 -0500)]
[llvm] Remove unused llvm.mono.load/store intrinsics. (#32280)

Co-authored-by: Zoltan Varga <vargaz@gmail.com>
4 years agoDisable coreroot_determinism test (#32334)
Simon Nattress [Sat, 15 Feb 2020 02:42:37 +0000 (18:42 -0800)]
Disable coreroot_determinism test (#32334)

It's causing CI issues.

See https://github.com/dotnet/runtime/issues/32333

4 years agoKeep correct `fieldSeq` for 0-offset fields. (#32085)
Sergey Andreenko [Sat, 15 Feb 2020 02:25:12 +0000 (18:25 -0800)]
Keep correct `fieldSeq` for 0-offset fields. (#32085)

* a few renamings in fgMorphCopyBlock.

Clean up the existing code.

* Add zero field offsets where it was missed.

And don't add it as `ADD(,0)` in another.

* Add an optimization to lower to delete `LEA(addr, 0)`.

* Fix for x86 tests.

* Add a function header for `LowerNode`.

4 years agoSupport 32 byte alignment of code on xarch (#2249)
Andy Ayers [Sat, 15 Feb 2020 02:18:12 +0000 (18:18 -0800)]
Support 32 byte alignment of code on xarch (#2249)

* Support 32 byte alignment of code on xarch

Update jit and runtime to allow jit to ask for code to be 32 byte aligned.
Request 32 byte alignment for Tier1 methods on x86/x64.

Add minimal crossgen support; one can imagine requesting or choosing 32 byte
alignment for crossgenned code, but that is left as future work.

This should provide some measure of performance stability, in particular for
microbenchmarks or other code where performance depends crucially on a few
branches.

It may or may not improve performance. If/when there are regressions we can
contemplate updating the jit to add intra-method padding to address alignment
sensitive code layout (e.g. dotnet/coreclr#11607).

This will require a jit GUID update in addition to the changes here.

* restrict to larger methods with loops; don't update zapper

* new jit GUID

* fix target ifdef name

4 years ago[llvm] Fix LLVM JIT when used with multiple AppDomains. (#32219)
monojenkins [Sat, 15 Feb 2020 01:34:11 +0000 (20:34 -0500)]
[llvm] Fix LLVM JIT when used with multiple AppDomains. (#32219)

We currently reuse LLVM's command line parsing system to configure and
enable passes. When using the default code generator pass configuration,
the `ImplicitNullChecks` and `X86CallFrameOptimization` passes can only
be enabled or disabled via the command line argument parser: the
`cl::opt`s controlling these (and many other) passes are private to
their translation units, and `TargetPassConfig`/`X86PassConfig` read
from these `cl::opt`s with no other means to override these values.

Unfortunately, some LLVM command line options have restrictions on the
number of times they may be set, and running the LLVM command line
argument parser more than once can fail, because the 'number of
occurrences' counter is stored in each global `cl::opt`. This causes
several tests to fail--one such test is unhandled-exception-7.cs.

This change:
- removes the lazy LLVM JIT initialization logic and instead
  runs this initialization once during `mini_init`,

- moves some stray JIT-only code from mini-llvm.c to llvm-jit.cpp,

- wraps the declarations in domain-internals.h with a
  `G_BEGIN_DECLS`/`G_END_DECLS` pair, so that they avoid name
  mangling when included in C++ source, and

- removes `exception_cb` and `emitted_cb`: neither were actually used
  by live code.

4 years ago[llvmonly] Avoid adding the aot init wrappers to the method table, its not needed...
monojenkins [Sat, 15 Feb 2020 01:33:17 +0000 (20:33 -0500)]
[llvmonly] Avoid adding the aot init wrappers to the method table, its not needed. (#32262)

Co-authored-by: Zoltan Varga <vargaz@gmail.com>
4 years agoFix and optimize EscapeUnescapeIri (#32025)
Miha Zupan [Sat, 15 Feb 2020 00:47:34 +0000 (01:47 +0100)]
Fix and optimize EscapeUnescapeIri (#32025)

* Remove byte[] allocation per encoded character

* Remove dead code from EscapeUnescapeIri

* Use int instead of IntPtr for stack buffer

* Use sizeof(int) instead of 4 as const

* Fix EscapeUnescapeIri for escaped surrogate pairs

4 years agoFix typo in S.T.J namespace in the writable dom spec (#32345)
Ahson Khan [Sat, 15 Feb 2020 00:33:55 +0000 (16:33 -0800)]
Fix typo in S.T.J namespace in the writable dom spec (#32345)

4 years agoShow all files in file explorer and some extent of refactoring (#32312)
Anirudh Agnihotry [Sat, 15 Feb 2020 00:13:58 +0000 (16:13 -0800)]
Show all files in file explorer and some extent of refactoring (#32312)

* Show all files in file explorer and some extent of refactoring

* adding comment

* improving the comment

Co-Authored-By: Santiago Fernandez Madero <safern@microsoft.com>
* Update src/libraries/Directory.Build.targets

Co-Authored-By: Santiago Fernandez Madero <safern@microsoft.com>
Co-authored-by: Santiago Fernandez Madero <safern@microsoft.com>
4 years agoSingleFile bundles: Ensure extraction mappings are closed on Windows. (#2272)
Swaroop Sridhar [Fri, 14 Feb 2020 23:38:20 +0000 (15:38 -0800)]
SingleFile bundles: Ensure extraction mappings are closed on Windows. (#2272)

When running a single-file app, the AppHost mmap()s itself in order
to read its contents and extract the embedded contents.

The Apphost must always map its contents in order to read the headers,
but doesn't always extract the contents, because previously extracted
files are re-used when available.

In the case where apphost doesn't extract, the file mapping wasn't
immediately closed on Windows. This prevents the app from being renamed
while running -- an idiom used while updating the app in-place.

4 years agoUpdate Pull Request docs for more detailed info (#32336)
Santiago Fernandez Madero [Fri, 14 Feb 2020 23:32:14 +0000 (15:32 -0800)]
Update Pull Request docs for more detailed info (#32336)

4 years agofix buffer handling in Tls handshake (#32267)
Tomas Weinfurt [Fri, 14 Feb 2020 23:09:47 +0000 (15:09 -0800)]
fix buffer handling in Tls handshake (#32267)

* fix buffer handling in Tls handshake

* feedback from review

4 years agoMerge pull request #32207 from saurabh500/soln2fixAV
Saurabh Singh [Fri, 14 Feb 2020 22:52:54 +0000 (14:52 -0800)]
Merge pull request #32207 from saurabh500/soln2fixAV

AV Fix for OleDb x86

4 years agoDo not deserialize using internal or private default ctors for all supported TFMs...
Ahson Khan [Fri, 14 Feb 2020 22:44:24 +0000 (14:44 -0800)]
Do not deserialize using internal or private default ctors for all supported TFMs. (#32213)

* Do not deserialize using internal or private default ctors for all
supported TFMs.

* Add a test with generic class with protected internal ctor and clean up.

* Make test classes private and add Debug.Fail instead of throwing.

4 years ago[interp] Fix filter clauses (#32192)
monojenkins [Fri, 14 Feb 2020 22:40:09 +0000 (17:40 -0500)]
[interp] Fix filter clauses (#32192)

When executing a filter we create a new interp frame, that is a duplicate of the original frame that contains the filter. Once the execution of the filter is finished, we were copying the stack contents back to the base frame. The problem with this is that when the filter is run, the stack is not completely unwinded, meaning that later we can still run a finally block in a frame called by the base frame. This finally block can access the stack arguments, which would reside on the stack of base frame. This means that we must not override the stack of the base frame, only the locals.

Fixes some tests from System.Linq.Expressions suite.

Co-authored-by: Vlad Brezae <brezaevlad@gmail.com>
4 years agoMerge pull request #32314 from DrewScoggins/AddPRPerf
Drew Scoggins [Fri, 14 Feb 2020 21:57:02 +0000 (13:57 -0800)]
Merge pull request #32314 from DrewScoggins/AddPRPerf

Add PR trigger for runtime performance

4 years agoAnnotate System.Security.Cryptography.Csp for nullable (#32140)
buyaa-n [Fri, 14 Feb 2020 21:52:33 +0000 (13:52 -0800)]
Annotate System.Security.Cryptography.Csp for nullable (#32140)

* Annotate System.Security.Cryptography for nullable

4 years agoChange http:// to https:// across System.Text.Encodings.Web (#32321)
Levi Broderick [Fri, 14 Feb 2020 21:35:34 +0000 (13:35 -0800)]
Change  to https:// across System.Text.Encodings.Web (#32321)

4 years ago[Arm64] Add ASIMD pairwise reduce instructions (#32277)
Egor Chesakov [Fri, 14 Feb 2020 21:22:34 +0000 (13:22 -0800)]
[Arm64] Add ASIMD pairwise reduce instructions (#32277)

* fmaxp

* fmaxnm

* fmaxnmp

* fmaxnmv

* fmaxv

* fminp

* fminnm

* fminnmp

* fminnmv

* fminv

* smaxp

* sminp

* umaxp

* uminp

4 years agofix infinite recursion in crossgen2 on ARM (#32227)
Yaroslav Yamshchikov [Fri, 14 Feb 2020 21:11:01 +0000 (00:11 +0300)]
fix infinite recursion in crossgen2 on ARM (#32227)

4 years agoMerge pull request #32221 from vitek-karas/FixProbeOrderDoc
Vitek Karas [Fri, 14 Feb 2020 20:37:05 +0000 (12:37 -0800)]
Merge pull request #32221 from vitek-karas/FixProbeOrderDoc

Rewrite the assembly conflict resolution doc to describe current behavior

4 years agoFix step numbers
vitek-karas [Fri, 14 Feb 2020 20:30:05 +0000 (12:30 -0800)]
Fix step numbers

4 years agoApply suggestions from code review
Vitek Karas [Fri, 14 Feb 2020 20:29:18 +0000 (12:29 -0800)]
Apply suggestions from code review

Co-Authored-By: Elinor Fung <47805090+elinor-fung@users.noreply.github.com>
4 years agoAnnotate Microsoft.VisualBasic.Core ref assembly for nullable reference types (#32200)
Stephen Toub [Fri, 14 Feb 2020 20:23:51 +0000 (12:23 -0800)]
Annotate Microsoft.VisualBasic.Core ref assembly for nullable reference types (#32200)

* Annotate Microsoft.VisualBasic.Core ref assembly for nullable reference types

* Apply suggestions from code review

Co-Authored-By: Charles Stoner <chucks@microsoft.com>
Co-authored-by: Charles Stoner <chucks@microsoft.com>
4 years agoJIT: Optimize "constant_string".Length (#1378)
Egor Bogatov [Fri, 14 Feb 2020 19:16:53 +0000 (22:16 +0300)]
JIT: Optimize "constant_string".Length (#1378)

* Add GetStringLength() to jit interface

* Use `gen.bat` to update crossgen2

* Implement the actual optimization

* Code formatting

* return -1 for crossgen2 (TODO: implement)

* Disable for R2R

* remove `pString != nullptr` check (it's ok for empty strings)

* does order matter? (in ThunkInput.txt)

* Rename to GetStringLiteral

* Fix build errors

* Address feedback

* handle null return value

* fix build

* Address feedback

* add comments in corinfo.h

* Address feedback

* Update ThunkGenerator.csproj

* remove HackishString thing

* Update importer.cpp

* Map wchar_t to C# char in ThunkInput.txt

4 years agoUsed the wrong include/exclude block
Drew Scoggins [Fri, 14 Feb 2020 19:16:36 +0000 (11:16 -0800)]
Used the wrong include/exclude block

4 years agoFix OOM in R2RDump (#32274)
Anton Lapounov [Fri, 14 Feb 2020 19:13:56 +0000 (11:13 -0800)]
Fix OOM in R2RDump (#32274)

R2RDump allocated a new copy of the System.Private.CoreLib assembly for each method of every generic type defined in the same image. As a result, it died due to OOM when dumping big images, e.g., System.Private.CoreLib itself. Also, in case of a non-composite R2R image, a wrong metadata reader was used for methods of generic types defined in the same image. Both issues were introduced in #32027.

4 years ago[llvmonly] Emit stubs for methods which failed compilation. (#32162)
monojenkins [Fri, 14 Feb 2020 18:59:30 +0000 (13:59 -0500)]
[llvmonly] Emit stubs for methods which failed compilation. (#32162)

Emit a stub for methods which failed llvm compilation. Currently the stub will
throw a MissingMethodException, later it can fall back to the interpreter etc.
This is required for cross-assembly direct calls, since the caller doesn't
know that the callee has failed llvm compilation leading to missing
symbols during linking.

Co-authored-by: Zoltan Varga <vargaz@gmail.com>
4 years agoAdd PR trigger for runtime performance
Drew Scoggins [Fri, 14 Feb 2020 18:55:23 +0000 (10:55 -0800)]
Add PR trigger for runtime performance

4 years agoFix CG2 framework compilation on Linux / OSX
Tomáš Rylek [Fri, 14 Feb 2020 18:45:43 +0000 (19:45 +0100)]
Fix CG2 framework compilation on Linux / OSX

4 years agoGet tests running for HTTP/3 (#31898)
Cory Nelson [Fri, 14 Feb 2020 18:34:02 +0000 (10:34 -0800)]
Get tests running for HTTP/3 (#31898)

Update generic tests to use a Version rather than boolean IsHttp11/IsHttp20, and update some HTTP/2 to work for HTTP/3.
Enable tests for HTTP/3, behind a conditional feature test.
Fix QPackDecoder lzcnt assuming an 8-bit test.
Rename test QPACK classes from QPackEncoder/QPackDecoder -> QPackTestEncoder/QPackTestDecoder to avoid naming confusion with product code classes.
Fix QPackTestDecoder bit flag checks.
Fix a double call to QuicConnection.CloseAsync(). Update to shutdown QuicConnection in a background task.
Fix test cert usage.

4 years ago[loader] Move AssemblyDependencyResolver to shared (#32253)
Ryan Lucia [Fri, 14 Feb 2020 18:26:16 +0000 (13:26 -0500)]
[loader] Move AssemblyDependencyResolver to shared (#32253)

4 years agoRemove some char[] allocations from Split usage (#32301)
Stephen Toub [Fri, 14 Feb 2020 18:21:50 +0000 (10:21 -0800)]
Remove some char[] allocations from Split usage (#32301)

4 years agoRemove a char[] allocation from HttpUtility (#32298)
Stephen Toub [Fri, 14 Feb 2020 18:20:46 +0000 (10:20 -0800)]
Remove a char[] allocation from HttpUtility (#32298)

4 years agofixing the order of targetFrameworks to show appropriate files in the VS (#32206)
Anirudh Agnihotry [Fri, 14 Feb 2020 18:16:55 +0000 (10:16 -0800)]
fixing the order of targetFrameworks to show appropriate files in the VS (#32206)

* fixing the vs

* Update System.Runtime.Serialization.Formatters.Tests.csproj

Co-authored-by: Viktor Hofer <viktor.hofer@microsoft.com>
4 years agoEnable cryptography tests hitting libssl issue (#32255)
Santiago Fernandez Madero [Fri, 14 Feb 2020 17:52:31 +0000 (09:52 -0800)]
Enable cryptography tests hitting libssl issue (#32255)

4 years agoMerge pull request #32174 from eiriktsarpalis/annotate-system-security-cryptography...
Eirik Tsarpalis [Fri, 14 Feb 2020 17:49:41 +0000 (17:49 +0000)]
Merge pull request #32174 from eiriktsarpalis/annotate-system-security-cryptography-openssl

Nullable annotate System.Security.Cryptography.OpenSSL

4 years agoNullable annotate System.Security.Cryptography.Cng (#32039)
Eirik Tsarpalis [Fri, 14 Feb 2020 17:45:14 +0000 (17:45 +0000)]
Nullable annotate System.Security.Cryptography.Cng (#32039)

* nullable annotate System.Security.Cryptography.Cng

* add nullable directives to common source files

* update ref signatures

* remove erroneous assertion

* address feedback

* address feedback

* address feedback

4 years agoXml use strongly typed struct enumerators (#32296)
Ben Adams [Fri, 14 Feb 2020 17:41:30 +0000 (17:41 +0000)]
Xml use strongly typed struct enumerators (#32296)

4 years agoAdd Interlocked unsigned and bitwise operations (#32216)
Stephen Toub [Fri, 14 Feb 2020 17:12:31 +0000 (09:12 -0800)]
Add Interlocked unsigned and bitwise operations (#32216)

* Add Interlocked unsigned and bitwise operations

* Address PR feedback

* Delete dead code for internal CompareExchange(..., ref bool)

* Remove Xor

4 years agofix solution build (#32259)
Anirudh Agnihotry [Fri, 14 Feb 2020 17:05:50 +0000 (09:05 -0800)]
fix solution build (#32259)

4 years agoForcibly disable use of libstdc++ C++11 ABI on Mono LLVM (#32234)
Jo Shields [Fri, 14 Feb 2020 16:54:45 +0000 (11:54 -0500)]
Forcibly disable use of libstdc++ C++11 ABI on Mono LLVM (#32234)

* Forcibly disable use of libstdc++ C++11 ABI on Mono LLVM

This feature is documented at https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html

Basically, the C++ ABI of the LLVM libraries needs to match the ABI of Mono.
The CentOS7 images we build with on CI use the old (GCC 4 style) ABI by
default, which ends up embedded in our LLVM nupkgs. This results in linker
errors when building runtime.git on distributions which use the C++11 ABI
instead, like Ubuntu 16.04+:

```
./.libs/libmini.a(llvm-jit.o): In function `mono_llvm_create_ee':
/home/directhex/Projects/runtime/src/mono/mono/mini/llvm-jit.cpp:447: undefined reference to `MonoEHFrameSymbol[abi:cxx11]'
./.libs/libmini.a(llvm-jit.o): In function `llvm::RTDyldMemoryManager::getSymbolAddress(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/home/directhex/Projects/runtime/artifacts/obj/mono/Linux.x64.Debug/llvm/include/llvm/ExecutionEngine/RTDyldMemoryManager.h:84: undefined reference to `llvm::RTDyldMemoryManager::getSymbolAddressInProcess(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
./.libs/libmini.a(llvm-jit.o):(.data.rel.ro+0x90): undefined reference to `llvm::RTDyldMemoryManager::getPointerToNamedFunction(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
```

Adding a define to CXXFLAGS, -D _GLIBCXX_USE_CXX11_ABI=0 forces the build
to use the same ABI as the LLVM nupkgs we produce.

The alternative would be to modify our LLVM build to enable the
non-default C++11 ABI.

* Also add flag in Release configuration

4 years agoSystem.Drawing.Common: Assert libgdiplus 6.0.1 on macOS unit tests (#335)
Frederik Carlier [Fri, 14 Feb 2020 16:44:46 +0000 (17:44 +0100)]
System.Drawing.Common: Assert libgdiplus 6.0.1 on macOS unit tests (#335)

* Require at least libgdiplus 6.0.1

* Fix typo

* StyleCop fix

* Fix recursion

* PR feedback

* Don't catch DllNotFoundException

* PR feedback

* Enforce libgdiplus version on macOS

* Add a unit test which check the libgdiplus version on macOS

* Revert initial change

* Re-enable ~14 tests on libgdiplus 6

* Re-enable ~10 font tests

* Re-enable 2 DrawBezier tests

* Re-enable ~15 Drawing2D tests

* Re-enable ~8 LinearGradientBrush tests

* Re-enable 6 matrix tests

* Re-enable 7 PathGradientBrush tests

* Re-enable 2 tests

* PR feedback

* Rename IsAtLeastLibgdiplus6 to IsWindowsOrAtLeastLibgdiplus6

* PR feedback

* Fix build errors

4 years agoRemove dead code in Uri (#31883)
Miha Zupan [Fri, 14 Feb 2020 16:40:37 +0000 (17:40 +0100)]
Remove dead code in Uri (#31883)

* Remove dead code in Uri

* Remove non-descript '// perf' comments

4 years agoFixed few issues within Native/Unix/configure.cmake (#32037)
Kirill Frolov [Fri, 14 Feb 2020 16:40:03 +0000 (19:40 +0300)]
Fixed few issues within Native/Unix/configure.cmake (#32037)

Issues list are following:

1) clang-5.0 compiler has warning -Wunused-variable (in addition to
-Wunused-value), which should be ignored (because tests, which is passed
to "check_c_source_compiles" written in that way, what they generate
some warnings);

2) fixed include "fnctl.h" -> include "fcntl.h"

3) fixed few warnings related to uninitialized variables (due to
-Werror).

Fix #32035

4 years agoFix broken MSDN blogs links (#32273)
Levi Broderick [Fri, 14 Feb 2020 16:34:15 +0000 (08:34 -0800)]
Fix broken MSDN blogs links (#32273)

4 years agoUpdate issues.targets issue numbers for merged repo (#32236)
Bruce Forstall [Fri, 14 Feb 2020 16:32:19 +0000 (08:32 -0800)]
Update issues.targets issue numbers for merged repo (#32236)

* Update issues.targets issue numbers for merged repo

Convert from dotnet/coreclr issue number to dotnet/runtime
issue numbers based on docs\issue-mappings\coreclr.mapping.txt
file.

* Convert issue numbers to full URLs

4 years agoHelp compiler enforce nullability annotations (#32090)
Julien Couvreur [Fri, 14 Feb 2020 16:14:42 +0000 (08:14 -0800)]
Help compiler enforce nullability annotations (#32090)

* Help compiler enforce nullability annotations

* Revert repro changes

* Simplifications

* Address feedback

* Tweak

* Another cleanup

* Fixup on ImportTypes

* Revert from T? to [AllowNull]T

* Enable nullability on one file

* Addressing PR feedback from Stephen

* Use Debug.Assert instead of pragma

* Revert "Use Debug.Assert instead of pragma"

This reverts commit f7175ba5427729ce60c898d5e7f00d9a4550e12d.

4 years agoRemove lock allocation from SafeSocketHandle on Windows (#32275)
Stephen Toub [Fri, 14 Feb 2020 16:12:15 +0000 (08:12 -0800)]
Remove lock allocation from SafeSocketHandle on Windows (#32275)

The first time a Socket is used, we bind its handle to the ThreadPool for overlapped I/O.  In order to avoid this happening on multiple threads concurrently if multiple threads concurrently race to perform this initialization, we take a lock.  We currently allocate an object and store it for the lifetime of the Socket, purely to do this one-time synchronization, after which the object is useless.  While in general we prefer not to lock on `this` (in order to avoid any issues that might occur from an external consumer also locking on the same object), the chances of someone locking on this object are slim to none, and even if they did, it wouldn't make any difference once the socket was already initialized, and even if the socket wasn't yet initialized, it would only be a one-time contention, without lock ordering concerns.