diff --git a/eng/pipelines/mono/templates/workloads-build.yml b/eng/pipelines/mono/templates/workloads-build.yml index 3071edef691739..f213f3c3bd1f6e 100644 --- a/eng/pipelines/mono/templates/workloads-build.yml +++ b/eng/pipelines/mono/templates/workloads-build.yml @@ -65,6 +65,10 @@ jobs: IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NET.Runtime.MonoTargets.Sdk*.nupkg IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NET.Runtime.MonoAOTCompiler.Task*.nupkg IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NET.Runtime.WebAssembly.Sdk*.nupkg + IntermediateArtifacts/windows_arm/Shipping/Microsoft.NETCore.App.Runtime.win-arm*.nupkg + IntermediateArtifacts/windows_arm64/Shipping/Microsoft.NETCore.App.Runtime.win-arm64*.nupkg + IntermediateArtifacts/windows_x64/Shipping/Microsoft.NETCore.App.Runtime.win-x64*.nupkg + IntermediateArtifacts/windows_x86/Shipping/Microsoft.NETCore.App.Runtime.win-x86*.nupkg - task: CopyFiles@2 displayName: Flatten packages diff --git a/eng/pipelines/runtime-official.yml b/eng/pipelines/runtime-official.yml index 8dd4071476ea3a..c353dfa095666d 100644 --- a/eng/pipelines/runtime-official.yml +++ b/eng/pipelines/runtime-official.yml @@ -426,6 +426,10 @@ stages: - Build_tvOSSimulator_arm64_release_AllSubsets_Mono - Build_tvOSSimulator_x64_release_AllSubsets_Mono - Build_Windows_x64_release_CrossAOT_Mono + - installer__coreclr__windows_x64_Release_ + - installer__coreclr__windows_x86_Release_ + - installer__coreclr__windows_arm_Release_ + - installer__coreclr__windows_arm64_Release_ - ${{ if eq(variables.isOfficialBuild, true) }}: - template: /eng/pipelines/official/stages/publish.yml diff --git a/src/coreclr/unwinder/arm64/unwinder_arm64.cpp b/src/coreclr/unwinder/arm64/unwinder_arm64.cpp index 5740c3cfcab80c..e2e1c512ee6cc3 100644 --- a/src/coreclr/unwinder/arm64/unwinder_arm64.cpp +++ b/src/coreclr/unwinder/arm64/unwinder_arm64.cpp @@ -1038,7 +1038,7 @@ Return Value: ContextRecord, 8 * (NextCode & 0x3f), 8 + ((CurCode & 1) << 2) + (NextCode >> 6), - 2 + AccumulatedSaveNexts, + 2 + 2 * AccumulatedSaveNexts, UnwindParams); AccumulatedSaveNexts = 0; } @@ -1054,7 +1054,7 @@ Return Value: ContextRecord, -8 * ((NextCode & 0x3f) + 1), 8 + ((CurCode & 1) << 2) + (NextCode >> 6), - 2 + AccumulatedSaveNexts, + 2 + 2 * AccumulatedSaveNexts, UnwindParams); AccumulatedSaveNexts = 0; } diff --git a/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Manifest/WorkloadManifest.json.in b/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Manifest/WorkloadManifest.json.in index e34ff6d173b85a..ecf64bd288dee5 100644 --- a/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Manifest/WorkloadManifest.json.in +++ b/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Manifest/WorkloadManifest.json.in @@ -118,6 +118,15 @@ "extends": [ "microsoft-net-runtime-mono-tooling" ], "platforms": [ "win-x64", "osx-arm64", "osx-x64" ] }, + "runtimes-windows": { + "description": "Windows Runtime Packs", + "packs": [ + "Microsoft.NETCore.App.Runtime.win-x64", + "Microsoft.NETCore.App.Runtime.win-x86", + "Microsoft.NETCore.App.Runtime.win-arm", + "Microsoft.NETCore.App.Runtime.win-arm64" + ] + }, "microsoft-net-runtime-mono-tooling": { "abstract": true, "description": "Shared native build tooling for Mono runtime", @@ -346,5 +355,21 @@ "kind": "framework", "version": "${PackageVersion}" }, + "Microsoft.NETCore.App.Runtime.win-x64" : { + "kind": "framework", + "version": "${PackageVersion}" + }, + "Microsoft.NETCore.App.Runtime.win-x86" : { + "kind": "framework", + "version": "${PackageVersion}" + }, + "Microsoft.NETCore.App.Runtime.win-arm" : { + "kind": "framework", + "version": "${PackageVersion}" + }, + "Microsoft.NETCore.App.Runtime.win-arm64" : { + "kind": "framework", + "version": "${PackageVersion}" + } } } diff --git a/src/tests/Exceptions/UnwindFpBleedTest/UnwindFpBleedTest.cs b/src/tests/Exceptions/UnwindFpBleedTest/UnwindFpBleedTest.cs new file mode 100644 index 00000000000000..2240d3f5c7914a --- /dev/null +++ b/src/tests/Exceptions/UnwindFpBleedTest/UnwindFpBleedTest.cs @@ -0,0 +1,82 @@ +using System; +using System.Runtime.CompilerServices; + +class Program +{ + static int Main() + { + double a0 = 1.0; + double a1 = 2.0; + double a2 = 3.0; + double a3 = 4.0; + double a4 = 5.0; + double a5 = 6.0; + double a6 = 7.0; + double a7 = 8.0; + double a8 = 9.0; + double a9 = 10.0; + + for (int i = 1; i < 10; i++) + { + a0 *= 1.0; + a1 *= 2.0; + a2 *= 3.0; + a3 *= 4.0; + a4 *= 5.0; + a5 *= 6.0; + a6 *= 7.0; + a7 *= 8.0; + a8 *= 9.0; + a9 *= 10.0; + } + + EHMethod(); + + bool isExpectedValue = + a0 == 1.0 + && a1 == Math.Pow(2, 10) + && a2 == Math.Pow(3, 10) + && a3 == Math.Pow(4, 10) + && a4 == Math.Pow(5, 10) + && a5 == Math.Pow(6, 10) + && a6 == Math.Pow(7, 10) + && a7 == Math.Pow(8, 10) + && a8 == Math.Pow(9, 10) + && a9 == Math.Pow(10, 10); + + return isExpectedValue ? 100 : 1; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static void EHMethod() + { + try + { + FloatManipulationMethod(); + } + catch (Exception) { } + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static void FloatManipulationMethod() + { + // Enough locals to try to get the JIT to touch at least some of the non-volatile + // registers (some spilling might happen, but hopefully the lack of EH prioritizes + // registers). + double a0 = 1, a1 = 2, a2 = 3, a3 = 4, a4 = 5, a5 = 6, a6 = 7, a7 = 8; + double a8 = 1, a9 = 2, a10 = 3, a11 = 4, a12 = 5, a13 = 6, a14 = 7, a15 = 8; + double a16 = 1, a17 = 2, a18 = 3, a19 = 4, a20 = 5, a21 = 6, a22 = 7, a23 = 8; + double a24 = 1, a25 = 2, a26 = 3, a27 = 4, a28 = 5, a29 = 6, a30 = 7, a31 = 8; + + // Some busy math to prevent easy optimizations and folding. + for (int i = 0; i < 5; i++) + { + a0 -= 1; a1 -= 2; a2 -= 3; a3 -= 4; a4 -= 5; a5 -= 6; a6 -= 7; a7 -= 8; + a8 -= 9; a9 -= 10; a10 -= 11; a11 -= 12; a12 -= 13; a13 -= 14; a14 -= 15; a15 -= 16; + a16 -= 17; a17 -= 18; a18 -= 19; a19 -= 20; a20 -= 21; a21 -= 22; a22 -= 23; a23 -= 24; + a24 -= 25; a25 -= 26; a26 -= 27; a27 -= 28; a28 -= 29; a29 -= 30; a30 -= 31; a31 -= 32; + } + + throw new Exception(); + } +} diff --git a/src/tests/Exceptions/UnwindFpBleedTest/UnwindFpBleedTest.csproj b/src/tests/Exceptions/UnwindFpBleedTest/UnwindFpBleedTest.csproj new file mode 100644 index 00000000000000..f4e80e7eb58b8d --- /dev/null +++ b/src/tests/Exceptions/UnwindFpBleedTest/UnwindFpBleedTest.csproj @@ -0,0 +1,8 @@ + + + Exe + + + + + diff --git a/src/tests/issues.targets b/src/tests/issues.targets index 949a5d26976f12..73c5d7e38db5a9 100644 --- a/src/tests/issues.targets +++ b/src/tests/issues.targets @@ -597,6 +597,9 @@ Needs Triage + + Windows's unwinder in ARM64v8 queue doesn't contain FP unwind fix + @@ -1138,9 +1141,9 @@ https://github.com/dotnet/runtime/issues/34371 - - Not supported on Mono - + + Not supported on Mono + needs triage diff --git a/src/workloads/workloads.csproj b/src/workloads/workloads.csproj index f64d641604674d..8ecc2de9c3daeb 100644 --- a/src/workloads/workloads.csproj +++ b/src/workloads/workloads.csproj @@ -72,6 +72,8 @@ Description=".NET runtime components for tvOS execution."/> + @@ -85,6 +87,7 @@ +