diff --git a/src/runtime/Directory.Build.props b/src/runtime/Directory.Build.props index 84877200392..7c3b8f4429e 100644 --- a/src/runtime/Directory.Build.props +++ b/src/runtime/Directory.Build.props @@ -57,7 +57,7 @@ - 10.0 + 11.0 .NETCoreApp $(NetCoreAppCurrentIdentifier),Version=v$(NetCoreAppCurrentVersion) Microsoft.NETCore.App @@ -65,11 +65,11 @@ net$(NetCoreAppCurrentVersion) - net9.0 - $(NetCoreAppCurrent) + + - net8.0 + net10.0 $(NetCoreAppCurrent) diff --git a/src/runtime/Directory.Build.targets b/src/runtime/Directory.Build.targets index d1c90653897..d5a2643dfcb 100644 --- a/src/runtime/Directory.Build.targets +++ b/src/runtime/Directory.Build.targets @@ -209,4 +209,6 @@ + + diff --git a/src/runtime/docs/coding-guidelines/adding-api-guidelines.md b/src/runtime/docs/coding-guidelines/adding-api-guidelines.md index 9d934a54b5c..3854dca911f 100644 --- a/src/runtime/docs/coding-guidelines/adding-api-guidelines.md +++ b/src/runtime/docs/coding-guidelines/adding-api-guidelines.md @@ -24,8 +24,8 @@ the implementation without compat concerns in future releases. ### Determine target framework -`net10.0` is the target framework version currently under development and the new apis -should be added to `net10.0`. [More Information on TargetFrameworks](https://learn.microsoft.com/dotnet/standard/frameworks) +`net11.0` is the target framework version currently under development and the new apis +should be added to `net11.0`. [More Information on TargetFrameworks](https://learn.microsoft.com/dotnet/standard/frameworks) ## Making the changes in repo diff --git a/src/runtime/docs/coding-guidelines/project-guidelines.md b/src/runtime/docs/coding-guidelines/project-guidelines.md index c9be6e15109..ca72ec4e2c1 100644 --- a/src/runtime/docs/coding-guidelines/project-guidelines.md +++ b/src/runtime/docs/coding-guidelines/project-guidelines.md @@ -25,7 +25,7 @@ Below is a list of all the various options we pivot the project builds on: ## Individual build properties The following are the properties associated with each build pivot -- `$(BuildTargetFramework) -> Any .NETCoreApp or .NETFramework TFM, e.g. net10.0` +- `$(BuildTargetFramework) -> Any .NETCoreApp or .NETFramework TFM, e.g. net11.0` - `$(TargetOS) -> windows | linux | osx | freebsd | ... | [defaults to running OS when empty]` - `$(Configuration) -> Debug | Release | [defaults to Debug when empty]` - `$(TargetArchitecture) - x86 | x64 | arm | arm64 | [defaults to x64 when empty]` @@ -59,7 +59,7 @@ A cross-targeting project which targets specific platform with `$(NetCoreAppCurr A full or individual project build is centered around BuildTargetFramework, TargetOS, Configuration and TargetArchitecture. 1. `$(BuildTargetFramework), $(TargetOS), $(Configuration), $(TargetArchitecture)` can individually be passed in to change the default values. -2. If nothing is passed to the build then we will default value of these properties from the environment. Example: `net10.0-[TargetOS Running On]-Debug-x64`. +2. If nothing is passed to the build then we will default value of these properties from the environment. Example: `net11.0-[TargetOS Running On]-Debug-x64`. 3. When building an individual project (either from the CLI or an IDE), all target frameworks are built. Any of the mentioned properties can be set via `/p:=` at the command line. When building using any of the wrapper scripts around it (i.e. build.cmd) a number of these properties have aliases which make them easier to pass (run build.cmd/sh -? for the aliases). diff --git a/src/runtime/docs/design/coreclr/botr/readytorun-format.md b/src/runtime/docs/design/coreclr/botr/readytorun-format.md index c19150ea667..08d58deb0ab 100644 --- a/src/runtime/docs/design/coreclr/botr/readytorun-format.md +++ b/src/runtime/docs/design/coreclr/botr/readytorun-format.md @@ -872,7 +872,7 @@ enum ReadyToRunHelper READYTORUN_HELPER_MemCpy = 0x41, // Get string handle lazily - READYTORUN_HELPER_GetString = 0x50, + READYTORUN_HELPER_GetString = 0x50, // Unused since READYTORUN_MAJOR_VERSION 17.0 // Used by /Tuning for Profile optimizations READYTORUN_HELPER_LogMethodEnter = 0x51, // Unused since READYTORUN_MAJOR_VERSION 10.0 diff --git a/src/runtime/docs/project/dogfooding.md b/src/runtime/docs/project/dogfooding.md index 2edc51b98ff..6d07a136530 100644 --- a/src/runtime/docs/project/dogfooding.md +++ b/src/runtime/docs/project/dogfooding.md @@ -124,8 +124,8 @@ This is the default case for applications - running against an installed .NET ru ```XML Exe - - net10.0 + + net11.0 9.0.0-preview.5.22224.3 @@ -147,8 +147,8 @@ make it self-contained by adding a RuntimeIdentifier (RID). ```XML Exe - - net10.0 + + net11.0 9.0.0-preview.5.22224.3 @@ -159,7 +159,7 @@ make it self-contained by adding a RuntimeIdentifier (RID). ``` $ dotnet restore $ dotnet publish -$ bin\Debug\net10.0\win-x64\publish\App.exe +$ bin\Debug\net11.0\win-x64\publish\App.exe ``` ### Daily builds table diff --git a/src/runtime/docs/workflow/building/coreclr/nativeaot.md b/src/runtime/docs/workflow/building/coreclr/nativeaot.md index 11d06b89920..e966dd61dd8 100644 --- a/src/runtime/docs/workflow/building/coreclr/nativeaot.md +++ b/src/runtime/docs/workflow/building/coreclr/nativeaot.md @@ -33,7 +33,7 @@ The paths to major components can be overridden using `IlcToolsPath`, `IlcSdkPat Run `build[.cmd|.sh] -c Release` from the repo root to build the NativeAOT toolchain packages. The build will place the toolchain packages at `artifacts\packages\Release\Shipping`. To publish your project using these packages: * Add the package directory to your `nuget.config` file. For example, add `` -* Run `dotnet add package Microsoft.DotNet.ILCompiler -v 10.0.0-dev` to add the local package reference to your project. +* Run `dotnet add package Microsoft.DotNet.ILCompiler -v 11.0.0-dev` to add the local package reference to your project. * Run `dotnet publish --packages pkg -r [win-x64|linux-x64|osx-64] -c [Debug|Release]` to publish your project. `--packages pkg` option restores the package into a local directory that is easy to cleanup once you are done. It avoids polluting the global nuget cache with your locally built dev package. ## High Level Overview diff --git a/src/runtime/docs/workflow/building/coreclr/wasm.md b/src/runtime/docs/workflow/building/coreclr/wasm.md index cb9c43c3ea3..50fcebe0018 100644 --- a/src/runtime/docs/workflow/building/coreclr/wasm.md +++ b/src/runtime/docs/workflow/building/coreclr/wasm.md @@ -64,7 +64,7 @@ You can also run the runtime directly in Node.js: In script below please replace `/path/to/runtime/` by a **absolute unix path** to the actual runtime repo (even on Windows). ```bash -cp ./artifacts/bin/microsoft.netcore.app.runtime.browser-wasm/Debug/runtimes/browser-wasm/lib/net10.0/*.dll ./artifacts/bin/coreclr/browser.wasm.Debug/IL +cp ./artifacts/bin/microsoft.netcore.app.runtime.browser-wasm/Debug/runtimes/browser-wasm/lib/net11.0/*.dll ./artifacts/bin/coreclr/browser.wasm.Debug/IL cp helloworld.dll ./artifacts/bin/coreclr/browser.wasm.Debug/IL cd ./artifacts/bin/coreclr/browser.wasm.Debug/ node ./corerun.js -c /path/to/runtime/artifacts/bin/coreclr/browser.wasm.Debug/IL /path/to/runtime/artifacts/bin/coreclr/browser.wasm.Debug/IL/helloworld.dll @@ -75,7 +75,7 @@ node ./corerun.js -c /path/to/runtime/artifacts/bin/coreclr/browser.wasm.Debug/I You can also run the corehost directly in Node.js: ```bash -cp ./artifacts/bin/microsoft.netcore.app.runtime.browser-wasm/Debug/runtimes/browser-wasm/lib/net10.0/*.dll ./artifacts/bin/coreclr/browser.wasm.Debug/corehost +cp ./artifacts/bin/microsoft.netcore.app.runtime.browser-wasm/Debug/runtimes/browser-wasm/lib/net11.0/*.dll ./artifacts/bin/coreclr/browser.wasm.Debug/corehost cp helloworld.dll ./artifacts/bin/coreclr/browser.wasm.Debug/corehost cd ./artifacts/bin/coreclr/browser.wasm.Debug/corehost node ./main.mjs diff --git a/src/runtime/docs/workflow/building/libraries/README.md b/src/runtime/docs/workflow/building/libraries/README.md index f342fe8e848..618db8bc971 100644 --- a/src/runtime/docs/workflow/building/libraries/README.md +++ b/src/runtime/docs/workflow/building/libraries/README.md @@ -76,7 +76,7 @@ The libraries build has two logical components, the native build which produces The build settings (BuildTargetFramework, TargetOS, Configuration, Architecture) are generally defaulted based on where you are building (i.e. which OS or which architecture) but we have a few shortcuts for the individual properties that can be passed to the build scripts: -- `-framework|-f` identifies the target framework for the build. Possible values include `net10.0` (currently the latest .NET version) or `net481` (the latest .NET Framework version). (msbuild property `BuildTargetFramework`) +- `-framework|-f` identifies the target framework for the build. Possible values include `net11.0` (currently the latest .NET version) or `net481` (the latest .NET Framework version). (msbuild property `BuildTargetFramework`) - `-os` identifies the OS for the build. It defaults to the OS you are running on but possible values include `windows`, `unix`, `linux`, or `osx`. (msbuild property `TargetOS`) - `-configuration|-c Debug|Release` controls the optimization level the compilers use for the build. It defaults to `Debug`. (msbuild property `Configuration`) - `-arch` identifies the architecture for the build. It defaults to `x64` but possible values include `x64`, `x86`, `arm`, or `arm64`. (msbuild property `TargetArchitecture`) diff --git a/src/runtime/docs/workflow/building/libraries/cross-building.md b/src/runtime/docs/workflow/building/libraries/cross-building.md index 422eea3c694..e64f299994f 100644 --- a/src/runtime/docs/workflow/building/libraries/cross-building.md +++ b/src/runtime/docs/workflow/building/libraries/cross-building.md @@ -46,30 +46,30 @@ To build native runtime libraries for arm: $ ROOTFS_DIR=`pwd`/.tools/rootfs/arm ./build.sh libs.native --cross --arch arm --librariesConfiguration Release -Build artifacts can be found in `artifacts/bin/native/net10.0---/`: - - $ ls artifacts/bin/native/net10.0-Linux-Release-arm/* - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.Globalization.Native.a - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.Globalization.Native.so - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.Globalization.Native.so.dbg - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.IO.Compression.Native.a - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.IO.Compression.Native.so - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.IO.Compression.Native.so.dbg - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.IO.Ports.Native.a - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.IO.Ports.Native.so - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.IO.Ports.Native.so.dbg - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.Native.a - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.Native.so - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.Native.so.dbg - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.Net.Security.Native.a - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.Net.Security.Native.so - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.Net.Security.Native.so.dbg - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.Security.Cryptography.Native.OpenSsl.a - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.Security.Cryptography.Native.OpenSsl.so - artifacts/bin/native/net10.0-Linux-Release-arm/libSystem.Security.Cryptography.Native.OpenSsl.so.dbg - - $ file artifacts/bin/native/net10.0-linux-release-arm/libSystem.Native.so - artifacts/bin/native/net10.0-linux-release-arm/libSystem.Native.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=5f6f6f9c4012dffed133624867adf32ac2af130d, stripped +Build artifacts can be found in `artifacts/bin/native/net11.0---/`: + + $ ls artifacts/bin/native/net11.0-Linux-Release-arm/* + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.Globalization.Native.a + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.Globalization.Native.so + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.Globalization.Native.so.dbg + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.IO.Compression.Native.a + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.IO.Compression.Native.so + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.IO.Compression.Native.so.dbg + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.IO.Ports.Native.a + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.IO.Ports.Native.so + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.IO.Ports.Native.so.dbg + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.Native.a + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.Native.so + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.Native.so.dbg + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.Net.Security.Native.a + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.Net.Security.Native.so + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.Net.Security.Native.so.dbg + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.Security.Cryptography.Native.OpenSsl.a + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.Security.Cryptography.Native.OpenSsl.so + artifacts/bin/native/net11.0-Linux-Release-arm/libSystem.Security.Cryptography.Native.OpenSsl.so.dbg + + $ file artifacts/bin/native/net11.0-linux-release-arm/libSystem.Native.so + artifacts/bin/native/net11.0-linux-release-arm/libSystem.Native.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=5f6f6f9c4012dffed133624867adf32ac2af130d, stripped Compile managed runtime libraries on Linux @@ -88,7 +88,7 @@ Note that by default ILLinker trimming is enabled and libraries built above for $ ./build.sh libs.sfx --arch arm --librariesConfiguration Release /p:ILLinkTrimAssembly=false -Build artifacts can be found in `artifacts/bin/microsoft.netcore.app.runtime.-//runtimes/-/lib/net10.0/`. For more details on the build configurations see [project-guidelines](/docs/coding-guidelines/project-guidelines.md). +Build artifacts can be found in `artifacts/bin/microsoft.netcore.app.runtime.-//runtimes/-/lib/net11.0/`. For more details on the build configurations see [project-guidelines](/docs/coding-guidelines/project-guidelines.md). Both native and managed runtime libraries can be built at the same time with: diff --git a/src/runtime/docs/workflow/ci/triaging-failures.md b/src/runtime/docs/workflow/ci/triaging-failures.md index 34b85b2224b..faf02b09b82 100644 --- a/src/runtime/docs/workflow/ci/triaging-failures.md +++ b/src/runtime/docs/workflow/ci/triaging-failures.md @@ -23,7 +23,7 @@ and for libraries runs is defined [here](../../../eng/pipelines/libraries/helix- Many test runs use a non-default product configuration, to allow re-using existing test assets to stress various aspects of the system. Determine the precise test configuration under which the test has failed. This might be evident from the test job name. For example, -`net10.0-windows-Release-x86-CoreCLR_checked-jitstress1-Windows.10.Amd64.Open` is a libraries test run on Windows with a Release x86 libraries +`net11.0-windows-Release-x86-CoreCLR_checked-jitstress1-Windows.10.Amd64.Open` is a libraries test run on Windows with a Release x86 libraries build, Checked coreclr build, and setting the `DOTNET_JitStress=1` configuration setting, in the `Windows.10.Amd64.Open` Helix queue. You need to be careful when reproducing failures to set all the correct environment variables. In the above example, if you look at the diff --git a/src/runtime/docs/workflow/debugging/coreclr/debugging-runtime.md b/src/runtime/docs/workflow/debugging/coreclr/debugging-runtime.md index 3519e649aac..7ef9f6d2274 100644 --- a/src/runtime/docs/workflow/debugging/coreclr/debugging-runtime.md +++ b/src/runtime/docs/workflow/debugging/coreclr/debugging-runtime.md @@ -55,7 +55,7 @@ Visual Studio's capabilities as a full IDE provide a lot of help making the runt 5. Set `Command=$(SolutionDir)\..\..\..\..\bin\coreclr\windows.$(Platform).$(Configuration)\corerun.exe`. This points to the folder where the built runtime binaries are present. 6. Set `Command Arguments=` (e.g. HelloWorld.dll). 7. Set `Working Directory=$(SolutionDir)\..\..\..\..\bin\coreclr\windows.$(Platform).$(Configuration)`. This points to the folder containing CoreCLR binaries. -8. Set `Environment=CORE_LIBRARIES=$(SolutionDir)\..\..\..\..\bin\runtime\-windows-$(Configuration)-$(Platform)`, where '\' is the target framework of current branch: `net10.0`. A few notes on this step: +8. Set `Environment=CORE_LIBRARIES=$(SolutionDir)\..\..\..\..\bin\runtime\-windows-$(Configuration)-$(Platform)`, where '\' is the target framework of current branch: `net11.0`. A few notes on this step: * This points to the folder containing core libraries except `System.Private.CoreLib`. * This step can be skipped if you are debugging CLR tests that reference only `System.Private.CoreLib`. Otherwise, it's required to debug a real-world application that references anything else, including `System.Runtime`. @@ -85,7 +85,7 @@ Steps 1-9 only need to be done once as long as there's been no changes to the CM }, { "name": "CORE_LIBRARIES", - // for example net10.0-windows-debug-x64 + // for example net11.0-windows-debug-x64 "value": "${cmake.installRoot}\\..\\..\\runtime\\-windows--\\" } ], diff --git a/src/runtime/docs/workflow/testing/host/testing.md b/src/runtime/docs/workflow/testing/host/testing.md index 82496f754b1..9be32952dbd 100644 --- a/src/runtime/docs/workflow/testing/host/testing.md +++ b/src/runtime/docs/workflow/testing/host/testing.md @@ -66,12 +66,12 @@ If all tests have not been previously run, make sure the [test context](#test-co Tests from a specific test project can be run using [`dotnet test`](https://learn.microsoft.com/dotnet/core/tools/dotnet-test) targeting the built test binary. For example: ``` -dotnet test artifacts/bin/HostActivation.Tests/Debug/net10.0/HostActivation.Tests.dll --filter category!=failing +dotnet test artifacts/bin/HostActivation.Tests/Debug/net11.0/HostActivation.Tests.dll --filter category!=failing ``` To filter to specific tests within the test library, use the [filter options](https://learn.microsoft.com/dotnet/core/tools/dotnet-test#filter-option-details) available for `dotnet test`. For example: ``` -dotnet test artifacts/bin/HostActivation.Tests/Debug/net10.0/HostActivation.Tests.dll --filter "DependencyResolution&category!=failing" +dotnet test artifacts/bin/HostActivation.Tests/Debug/net11.0/HostActivation.Tests.dll --filter "DependencyResolution&category!=failing" ``` The `category!=failing` is to respect the [filtering traits](../libraries/filtering-tests.md) used by the runtime repo. diff --git a/src/runtime/docs/workflow/testing/libraries/testing.md b/src/runtime/docs/workflow/testing/libraries/testing.md index b4a4ad43ee2..ca7eb206c03 100644 --- a/src/runtime/docs/workflow/testing/libraries/testing.md +++ b/src/runtime/docs/workflow/testing/libraries/testing.md @@ -177,4 +177,4 @@ If you change code, you'd need to remove `/p:testnobuild=true` from the command ### Viewing XUnit logs -It's usually sufficient to see the test failure output in the console. There is also a test log file, which you can find in a location like `...\runtime\artifacts\bin\System.Text.RegularExpressions.Tests\Debug\net10.0\testResults.xml`. It can be helpful, for example, to grep through a series of failures, or to see how long a slow test actually took. +It's usually sufficient to see the test failure output in the console. There is also a test log file, which you can find in a location like `...\runtime\artifacts\bin\System.Text.RegularExpressions.Tests\Debug\net11.0\testResults.xml`. It can be helpful, for example, to grep through a series of failures, or to see how long a slow test actually took. diff --git a/src/runtime/docs/workflow/testing/using-dev-shipping-packages.md b/src/runtime/docs/workflow/testing/using-dev-shipping-packages.md index 2c90c1e0118..d1513c59757 100644 --- a/src/runtime/docs/workflow/testing/using-dev-shipping-packages.md +++ b/src/runtime/docs/workflow/testing/using-dev-shipping-packages.md @@ -94,12 +94,12 @@ Once we have your `NuGet.Config` file ready, we have to make our project aware t ```xml - - + + ``` -If you're unsure of what version your packages are, it is included as part of their filenames. For example, pick the `nupkg` file that will be used with your app from your shipping folder (`artifacts/packages//Shipping`). It's name is something like `Microsoft.NETCore.App.Runtime.win-x64.10.0.0-dev.nupkg`, depending on the current version and your target platform. +If you're unsure of what version your packages are, it is included as part of their filenames. For example, pick the `nupkg` file that will be used with your app from your shipping folder (`artifacts/packages//Shipping`). It's name is something like `Microsoft.NETCore.App.Runtime.win-x64.11.0.0-dev.nupkg`, depending on the current version and your target platform. ### Write a small test @@ -124,8 +124,8 @@ dotnet publish --self-contained Running this little app should yield an output like the following: ```text -Hello World from .NET 10.0.0-dev -The location of System.Private.CoreLib.dll is '/path/to/your/app/bin/Debug/net10.0/win-x64/publish/System.Private.CoreLib.dll' +Hello World from .NET 11.0.0-dev +The location of System.Private.CoreLib.dll is '/path/to/your/app/bin/Debug/net11.0/win-x64/publish/System.Private.CoreLib.dll' ``` ## Making Changes and Consuming Updated Packages diff --git a/src/runtime/docs/workflow/testing/using-your-build-with-installed-sdk.md b/src/runtime/docs/workflow/testing/using-your-build-with-installed-sdk.md index 88509c7bfee..f9b959a14d1 100644 --- a/src/runtime/docs/workflow/testing/using-your-build-with-installed-sdk.md +++ b/src/runtime/docs/workflow/testing/using-your-build-with-installed-sdk.md @@ -93,7 +93,7 @@ dotnet publish --self-contained ``` -After you publish successfully, you will find all the binaries needed to run your application under `bin\Debug\net10.0\win-x64\publish`. +After you publish successfully, you will find all the binaries needed to run your application under `bin\Debug\net11.0\win-x64\publish`. **But we are not done yet, you need to replace the published runtime files with the files from your local build!** @@ -105,12 +105,12 @@ The publishing step described above creates a directory that has all the files n * `System.Private.CoreLib.dll`: If you modified managed C# code, it will end up here. * `clrjit.dll`: The JIT compiler. It is also required you copy this one to your published app. -Now, here comes the main deal to test your build. Once you have your self-contained app published, and CoreCLR built, you will replace the binaries listed above with the generated artifacts. Copy them from `artifacts/bin/coreclr/../` to your app's publication directory, which by default is `your-app-folder/bin//net10.0/-/publish`. +Now, here comes the main deal to test your build. Once you have your self-contained app published, and CoreCLR built, you will replace the binaries listed above with the generated artifacts. Copy them from `artifacts/bin/coreclr/../` to your app's publication directory, which by default is `your-app-folder/bin//net11.0/-/publish`. In our previous example this would be: * From: `artifacts/bin/coreclr/windows.x64.Debug/` -* To: `HelloWorld/bin/Debug/net10.0/win-x64/publish/` +* To: `HelloWorld/bin/Debug/net11.0/win-x64/publish/` ## Confirm that the app used your new runtime (Optional) @@ -129,8 +129,8 @@ Console.WriteLine($"System.Private.CoreLib.dll is located at: {typeof(object).As That should tell you the version, and which user and machine built the assembly, as well as the _commit hash_ of the code at the time of building: ```text -Core Runtime Info: 10.0.0-dev -System.Private.CoreLib.dll is located at: /path/to/your/app/bin/Debug/net10.0/win-x64/publish/System.Private.CoreLib.dll +Core Runtime Info: 11.0.0-dev +System.Private.CoreLib.dll is located at: /path/to/your/app/bin/Debug/net11.0/win-x64/publish/System.Private.CoreLib.dll ``` What you are looking for here is that the core runtime used is labelled as `-dev`. This means it is indeed using the one you built in the runtime repo. Also, ensure that the picked _System.Private.CoreLib.dll_ is indeed the one in your `publish` folder. @@ -144,7 +144,7 @@ Here are a few very common errors you might encounter, and how to fix them. Make sure you are running the executable directly. ```cmd -.\bin\Debug\net10.0\win-x64\publish\HelloWorld.exe +.\bin\Debug\net11.0\win-x64\publish\HelloWorld.exe ``` If you use `dotnet run` it will overwrite your custom binaries before executing the app. diff --git a/src/runtime/docs/workflow/using-docker.md b/src/runtime/docs/workflow/using-docker.md index 76e2493970a..037500ef428 100644 --- a/src/runtime/docs/workflow/using-docker.md +++ b/src/runtime/docs/workflow/using-docker.md @@ -47,7 +47,7 @@ The main Docker images are the most commonly used ones, and the ones you will pr | Azure Linux (x64) | Debian sid | LoongArch | `mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net11.0-cross-loongarch64` | `/crossrootfs/loongarch64` | | Azure Linux (x64) | Ubuntu 18.04 | S390x | `mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net11.0-cross-s390x` | `/crossrootfs/s390x` | | Azure Linux (x64) | Ubuntu 18.04 (Wasm) | x64 | `mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net11.0-webassembly-amd64` | `/crossrootfs/x64` | -| Debian (x64) | Debian 12 | x64 | `mcr.microsoft.com/dotnet-buildtools/prereqs:debian-12-gcc15-amd64` | *N/A* | +| Debian (x64) | Debian 13 | x64 | `mcr.microsoft.com/dotnet-buildtools/prereqs:debian-13-gcc15-amd64` | *N/A* | | Ubuntu (x64) | Tizen 9.0 | Arm32 (armel) | `mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-cross-armel-tizen` | `/crossrootfs/armel` | ## Build the Repo diff --git a/src/runtime/eng/Signing.props b/src/runtime/eng/Signing.props index b5c6188764b..3d671fb0506 100644 --- a/src/runtime/eng/Signing.props +++ b/src/runtime/eng/Signing.props @@ -132,7 +132,7 @@ $(ArtifactsPackagesDir)**\Microsoft.NET.Runtime.WorkloadTesting.Internal.*.nupkg; $(ArtifactsPackagesDir)**\Microsoft.NETCore.BrowserDebugHost.Transport.*.nupkg; $(ArtifactsPackagesDir)**\Microsoft.NET.Runtime.WebAssembly.Sdk.*.nupkg; - $(ArtifactsPackagesDir)**\Microsoft.NET.Runtime.WebAssembly.Templates.net10.*.nupkg; + $(ArtifactsPackagesDir)**\Microsoft.NET.Runtime.WebAssembly.Templates.net11.*.nupkg; $(ArtifactsPackagesDir)**\Microsoft.NET.Sdk.WebAssembly.Pack.*.nupkg; $(ArtifactsPackagesDir)**\Microsoft.NET.Workload.Mono.ToolChain.*.nupkg" /> diff --git a/src/runtime/eng/Version.Details.props b/src/runtime/eng/Version.Details.props index 7874074ae52..b63b8750064 100644 --- a/src/runtime/eng/Version.Details.props +++ b/src/runtime/eng/Version.Details.props @@ -40,61 +40,62 @@ This file should be imported by eng/Versions.props 19.1.0-alpha.1.25574.1 19.1.0-alpha.1.25574.1 - 5.3.0-1.25528.108 - 5.3.0-1.25528.108 - 5.3.0-1.25528.108 - 10.0.100 - 10.0.100-rc.2.25528.108 - 11.0.0-beta.25528.108 - 11.0.0-beta.25528.108 - 11.0.0-beta.25528.108 - 11.0.0-beta.25528.108 - 11.0.0-beta.25528.108 - 11.0.0-beta.25528.108 - 11.0.0-beta.25528.108 - 11.0.0-beta.25528.108 - 0.11.5-alpha.25528.108 - 11.0.0-beta.25528.108 - 11.0.0-beta.25528.108 - 11.0.0-beta.25528.108 - 11.0.0-beta.25528.108 - 11.0.0-beta.25528.108 - 11.0.0-beta.25528.108 - 11.0.0-beta.25528.108 - 11.0.0-beta.25528.108 - 2.9.3-beta.25528.108 - 2.9.3-beta.25528.108 - 11.0.0-beta.25528.108 - 5.3.0-1.25528.108 - 10.0.0-rc.1.25528.108 - 10.0.100-rc.2.25528.108 - 10.0.0-rc.1.25528.108 - 10.0.0-rc.1.25528.108 - 7.0.0-preview.1.2908 - 7.0.0-preview.1.2908 - 7.0.0-preview.1.2908 - 7.0.0-preview.1.2908 - 10.0.0-rc.1.25528.108 - 2.0.0-rc.1.25528.108 - 10.0.0-rc.1.25528.108 - 10.0.0-rc.1.25528.108 - 10.0.0-rc.1.25528.108 + 5.3.0-1.25608.101 + 5.3.0-1.25608.101 + 5.3.0-1.25608.101 + 11.0.100-alpha.1.25608.101 + 11.0.100-alpha.1.25608.101 + 11.0.0-beta.25608.101 + 11.0.0-beta.25608.101 + 11.0.0-beta.25608.101 + 11.0.0-beta.25608.101 + 11.0.0-beta.25608.101 + 11.0.0-beta.25608.101 + 11.0.0-beta.25608.101 + 11.0.0-beta.25608.101 + 0.11.5-alpha.25608.101 + 11.0.0-beta.25608.101 + 11.0.0-beta.25608.101 + 11.0.0-beta.25608.101 + 11.0.0-beta.25608.101 + 11.0.0-beta.25608.101 + 11.0.0-beta.25608.101 + 11.0.0-beta.25608.101 + 11.0.0-beta.25608.101 + 2.9.3-beta.25608.101 + 2.9.3-beta.25608.101 + 11.0.0-beta.25608.101 + 5.3.0-1.25608.101 + 11.0.0-alpha.1.25608.101 + 11.0.100-alpha.1.25608.101 + 11.0.0-alpha.1.25608.101 + 11.0.0-alpha.1.25608.101 + 7.0.0-preview.1.10901 + 7.0.0-preview.1.10901 + 7.0.0-preview.1.10901 + 7.0.0-preview.1.10901 + 11.0.0-alpha.1.25608.101 + 3.0.0-alpha.1.25608.101 + 11.0.0-alpha.1.25608.101 + 11.0.0-alpha.1.25608.101 + 11.0.0-alpha.1.25608.101 - 11.0.0-beta.25553.1 - 11.0.0-beta.25553.1 - 11.0.0-beta.25553.1 - 11.0.0-beta.25553.1 - 11.0.0-beta.25553.1 - 11.0.0-beta.25553.1 - 11.0.0-beta.25553.1 - 11.0.0-beta.25553.1 - 11.0.0-beta.25553.1 - 11.0.0-beta.25553.1 - 11.0.0-beta.25553.1 - 11.0.0-beta.25553.1 - 11.0.0-beta.25553.1 - 11.0.0-beta.25553.1 - 11.0.0-beta.25553.1 + 11.0.0-beta.25574.4 + 11.0.0-beta.25574.4 + 11.0.0-beta.25574.4 + 11.0.0-beta.25574.4 + 11.0.0-beta.25574.4 + 11.0.0-beta.25574.4 + 11.0.0-beta.25574.4 + 11.0.0-beta.25574.4 + 11.0.0-beta.25574.4 + 11.0.0-beta.25574.4 + 11.0.0-beta.25574.4 + 11.0.0-beta.25574.4 + 11.0.0-beta.25574.4 + 11.0.0-beta.25574.4 + 11.0.0-beta.25574.4 + 11.0.0-beta.25574.4 11.0.0-prerelease.25601.7 11.0.0-prerelease.25601.7 @@ -107,7 +108,7 @@ This file should be imported by eng/Versions.props 1.0.0-prerelease.25502.1 1.0.0-prerelease.25502.1 - 11.0.0-alpha.0.25528.1 + 11.0.0-alpha.0.25574.1 11.0.0-alpha.1.25602.4 11.0.0-alpha.1.25602.4 @@ -196,6 +197,7 @@ This file should be imported by eng/Versions.props $(SystemTextJsonPackageVersion) $(MicrosoftDotNetCilStripSourcesPackageVersion) + $(MicrosoftDotnetFuzzingTestDataPackageVersion) $(MicrosoftNETHostModelTestDataPackageVersion) $(SystemComponentModelTypeConverterTestDataPackageVersion) $(SystemDataCommonTestDataPackageVersion) diff --git a/src/runtime/eng/Version.Details.xml b/src/runtime/eng/Version.Details.xml index 71a2a0783a6..025a32e72e4 100644 --- a/src/runtime/eng/Version.Details.xml +++ b/src/runtime/eng/Version.Details.xml @@ -1,5 +1,5 @@ - + https://github.com/dotnet/icu @@ -41,143 +41,143 @@ https://github.com/dotnet/llvm-project a504aeb8ef551dbd01b94df9af22f4cfa2bf90d9 - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/runtime-assets - b5d67650a6a37772770a9df6ca762eebd0c21617 + 37bfb075f3ce49c8cd0abb7190eea8d121359813 - + https://github.com/dotnet/runtime-assets - b5d67650a6a37772770a9df6ca762eebd0c21617 + 37bfb075f3ce49c8cd0abb7190eea8d121359813 - + https://github.com/dotnet/runtime-assets - b5d67650a6a37772770a9df6ca762eebd0c21617 + 37bfb075f3ce49c8cd0abb7190eea8d121359813 - + https://github.com/dotnet/runtime-assets - b5d67650a6a37772770a9df6ca762eebd0c21617 + 37bfb075f3ce49c8cd0abb7190eea8d121359813 - + https://github.com/dotnet/runtime-assets - b5d67650a6a37772770a9df6ca762eebd0c21617 + 37bfb075f3ce49c8cd0abb7190eea8d121359813 - + https://github.com/dotnet/runtime-assets - b5d67650a6a37772770a9df6ca762eebd0c21617 + 37bfb075f3ce49c8cd0abb7190eea8d121359813 - + https://github.com/dotnet/runtime-assets - b5d67650a6a37772770a9df6ca762eebd0c21617 + 37bfb075f3ce49c8cd0abb7190eea8d121359813 - + https://github.com/dotnet/runtime-assets - b5d67650a6a37772770a9df6ca762eebd0c21617 + 37bfb075f3ce49c8cd0abb7190eea8d121359813 - + https://github.com/dotnet/runtime-assets - b5d67650a6a37772770a9df6ca762eebd0c21617 + 37bfb075f3ce49c8cd0abb7190eea8d121359813 - + https://github.com/dotnet/runtime-assets - b5d67650a6a37772770a9df6ca762eebd0c21617 + 37bfb075f3ce49c8cd0abb7190eea8d121359813 - + https://github.com/dotnet/runtime-assets - b5d67650a6a37772770a9df6ca762eebd0c21617 + 37bfb075f3ce49c8cd0abb7190eea8d121359813 - + https://github.com/dotnet/runtime-assets - b5d67650a6a37772770a9df6ca762eebd0c21617 + 37bfb075f3ce49c8cd0abb7190eea8d121359813 - + https://github.com/dotnet/runtime-assets - b5d67650a6a37772770a9df6ca762eebd0c21617 + 37bfb075f3ce49c8cd0abb7190eea8d121359813 https://github.com/dotnet/llvm-project @@ -263,33 +263,33 @@ https://github.com/dotnet/llvm-project a504aeb8ef551dbd01b94df9af22f4cfa2bf90d9 - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d https://github.com/dotnet/xharness @@ -303,9 +303,9 @@ https://github.com/dotnet/xharness 8c52965b101b84e92f3e088666684be4857e9429 - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d https://dev.azure.com/dnceng/internal/_git/dotnet-optimization @@ -323,37 +323,37 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-optimization 71ce9774e9875270b80faaac1d6b60568a80e1fa - + https://github.com/dotnet/hotreload-utils - 1c8f1e360f50bc3edeb8969a3a8414333e389bae + 92b850b157a46e9c4605b7ae76f5ada3e6856eb5 - + https://github.com/dotnet/runtime-assets - b5d67650a6a37772770a9df6ca762eebd0c21617 + 37bfb075f3ce49c8cd0abb7190eea8d121359813 - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d https://dev.azure.com/dnceng/internal/_git/dotnet-optimization @@ -365,21 +365,21 @@ - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d - + https://github.com/dotnet/dotnet - e545239117919cda700be149a2e9a032374fc284 + ce3dea8b1d1c12cf4b85999f834052d942d84a6d https://github.com/dotnet/node @@ -413,9 +413,13 @@ https://github.com/dotnet/node a49032ade9a84e5d9b4723668508419f0ff20412 - + https://github.com/dotnet/runtime-assets - b5d67650a6a37772770a9df6ca762eebd0c21617 + 37bfb075f3ce49c8cd0abb7190eea8d121359813 + + + https://github.com/dotnet/runtime-assets + 37bfb075f3ce49c8cd0abb7190eea8d121359813 - + \ No newline at end of file diff --git a/src/runtime/eng/Versions.props b/src/runtime/eng/Versions.props index 49d4726be83..898d49ed9ec 100644 --- a/src/runtime/eng/Versions.props +++ b/src/runtime/eng/Versions.props @@ -3,31 +3,43 @@ + + 11.0.0 + 11 0 0 - alpha - 1 - - - - - $(MajorVersion).$(MinorVersion).$(PatchVersion) - $(MajorVersion).0.100 - 9.0.3 + 10.0.0 + 9.0.$([MSBuild]::Add($([System.Version]::Parse('$(PackageVersionNet10)').Build),12)) 8.0.$([MSBuild]::Add($([System.Version]::Parse('$(PackageVersionNet9)').Build),11)) 7.0.20 6.0.36 + alpha + 1 + + false + release + + + <_GlobalJsonContent>$([System.IO.File]::ReadAllText('$(MSBuildThisFileDirectory)../global.json')) + <_GlobalJsonSdkVersion Condition="'$(_GlobalJsonContent)' != ''">$([System.Text.RegularExpressions.Regex]::Match($(_GlobalJsonContent), '"sdk"\s*:\s*\{[^\}]*"version"\s*:\s*"([^"]+)"', System.Text.RegularExpressions.RegexOptions.Singleline).Groups[1].Value) + <_DotnetSdkVersion>$(MicrosoftNETWorkloadEmscriptenCurrentManifest110100TransportVersion) + $(_DotnetSdkVersion) + $(_GlobalJsonSdkVersion) + $([System.String]::Copy('$(SdkVersionForWorkloadTesting)').Split('.')[0]) + $(SdkMajorVersion).0.100 + $([System.Text.RegularExpressions.Regex]::Match($(SdkVersionForWorkloadTesting), '-(?!rtm|servicing)(.+)\.[^.]+\.[^.]+$').Groups[1].Value) + $(SdkBandVersion) + $(SdkBandVersion)-$(SdkPreReleaseLabel) - -$(PreReleaseVersionLabel) - -$(PreReleaseVersionLabel).$(PreReleaseVersionIteration) - $(SdkBandVersion)$(WorkloadVersionSuffix) + $(MajorVersion).$(MinorVersion).0.0 - - 10.0.0.0 - false false @@ -151,25 +163,18 @@ 10.0.0-preview-20251006.1 2.4.16 - - $(MicrosoftNETWorkloadEmscriptenCurrentManifest110100TransportVersion) - + + $(MicrosoftDotNetApiCompatTaskPackageVersion) + 10.0.0 + $(runtimewinx64MicrosoftNETCoreRuntimeWasmNodeTransportPackageVersion) + + 3.1.56 + 1.1.87-gba258badda 1.0.0-v3.14.0.5722 3.1.7 1.0.406601 - - - - 10.0.100-rc.2.25502.107 - 10.0.0-preview.7.25359.101 - $(runtimewinx64MicrosoftNETCoreRuntimeWasmNodeTransportPackageVersion) - - 3.1.56 5.0.2-dotnet.2811440 5.0.2-dotnet.2811440 diff --git a/src/runtime/eng/build.ps1 b/src/runtime/eng/build.ps1 index eb90cf14e18..2b1a6ec75be 100644 --- a/src/runtime/eng/build.ps1 +++ b/src/runtime/eng/build.ps1 @@ -84,8 +84,8 @@ function Get-Help() { Write-Host "Libraries settings:" Write-Host " -coverage Collect code coverage when testing." - Write-Host " -framework (-f) Build framework: net10.0 or net481." - Write-Host " [Default: net10.0]" + Write-Host " -framework (-f) Build framework: net11.0 or net481." + Write-Host " [Default: net11.0]" Write-Host " -testnobuild Skip building tests when invoking -test." Write-Host " -testscope Scope tests, allowed values: innerloop, outerloop, all." Write-Host "" diff --git a/src/runtime/eng/build.sh b/src/runtime/eng/build.sh index 92acdc975e0..43ed2988fa1 100755 --- a/src/runtime/eng/build.sh +++ b/src/runtime/eng/build.sh @@ -69,8 +69,8 @@ usage() echo "Libraries settings:" echo " --coverage Collect code coverage when testing." - echo " --framework (-f) Build framework: net10.0 or net481." - echo " [Default: net10.0]" + echo " --framework (-f) Build framework: net11.0 or net481." + echo " [Default: net11.0]" echo " --testnobuild Skip building tests when invoking -test." echo " --testscope Test scope, allowed values: innerloop, outerloop, all." echo "" diff --git a/src/runtime/eng/common/core-templates/job/job.yml b/src/runtime/eng/common/core-templates/job/job.yml index cb4ccc023a3..748c4f07a64 100644 --- a/src/runtime/eng/common/core-templates/job/job.yml +++ b/src/runtime/eng/common/core-templates/job/job.yml @@ -73,6 +73,8 @@ jobs: templateContext: ${{ parameters.templateContext }} variables: + - name: AllowPtrToDetectTestRunRetryFiles + value: true - ${{ if ne(parameters.enableTelemetry, 'false') }}: - name: DOTNET_CLI_TELEMETRY_PROFILE value: '$(Build.Repository.Uri)' diff --git a/src/runtime/eng/common/core-templates/job/publish-build-assets.yml b/src/runtime/eng/common/core-templates/job/publish-build-assets.yml index 721a5566699..8b5c635fe80 100644 --- a/src/runtime/eng/common/core-templates/job/publish-build-assets.yml +++ b/src/runtime/eng/common/core-templates/job/publish-build-assets.yml @@ -122,8 +122,9 @@ jobs: # Populate internal runtime variables. - template: /eng/common/templates/steps/enable-internal-sources.yml - parameters: - legacyCredential: $(dn-bot-dnceng-artifact-feeds-rw) + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + parameters: + legacyCredential: $(dn-bot-dnceng-artifact-feeds-rw) - template: /eng/common/templates/steps/enable-internal-runtimes.yml @@ -140,7 +141,7 @@ jobs: /p:MaestroApiEndpoint=https://maestro.dot.net /p:OfficialBuildId=$(OfficialBuildId) -runtimeSourceFeed https://ci.dot.net/internal - -runtimeSourceFeedKey $(dotnetbuilds-internal-container-read-token-base64) + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} @@ -189,6 +190,11 @@ jobs: BARBuildId: ${{ parameters.BARBuildId }} PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} is1ESPipeline: ${{ parameters.is1ESPipeline }} + + # Darc is targeting 8.0, so make sure it's installed + - task: UseDotNet@2 + inputs: + version: 8.0.x - task: AzureCLI@2 displayName: Publish Using Darc @@ -205,8 +211,8 @@ jobs: -ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}' -SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}' -SkipAssetsPublishing '${{ parameters.isAssetlessBuild }}' - -runtimeSourceFeed https://ci.dot.net/internal - -runtimeSourceFeedKey $(dotnetbuilds-internal-container-read-token-base64) + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' - ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }}: - template: /eng/common/core-templates/steps/publish-logs.yml diff --git a/src/runtime/eng/common/core-templates/job/source-build.yml b/src/runtime/eng/common/core-templates/job/source-build.yml index d805d5faeb9..9d820f97421 100644 --- a/src/runtime/eng/common/core-templates/job/source-build.yml +++ b/src/runtime/eng/common/core-templates/job/source-build.yml @@ -60,10 +60,10 @@ jobs: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore-Svc-Public' ), False, 'NetCore-Public')] - demands: ImageOverride -equals build.ubuntu.2004.amd64 + demands: ImageOverride -equals build.ubuntu.2204.amd64 ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore1ESPool-Svc-Internal'), False, 'NetCore1ESPool-Internal')] - image: 1es-mariner-2 + image: 1es-azurelinux-3 os: linux ${{ else }}: pool: diff --git a/src/runtime/eng/common/core-templates/job/source-index-stage1.yml b/src/runtime/eng/common/core-templates/job/source-index-stage1.yml index 30530359a5d..76baf5c2725 100644 --- a/src/runtime/eng/common/core-templates/job/source-index-stage1.yml +++ b/src/runtime/eng/common/core-templates/job/source-index-stage1.yml @@ -3,7 +3,7 @@ parameters: sourceIndexBuildCommand: powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -Command "eng/common/build.ps1 -restore -build -binarylog -ci" preSteps: [] binlogPath: artifacts/log/Debug/Build.binlog - condition: '' + condition: eq(variables['Build.SourceBranch'], 'refs/heads/main') dependsOn: '' pool: '' is1ESPipeline: '' @@ -25,10 +25,10 @@ jobs: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $(DncEngPublicBuildPool) - image: windows.vs2022.amd64.open + image: windows.vs2026preview.scout.amd64.open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $(DncEngInternalBuildPool) - image: windows.vs2022.amd64 + image: windows.vs2026preview.scout.amd64 steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: @@ -41,4 +41,4 @@ jobs: - template: /eng/common/core-templates/steps/source-index-stage1-publish.yml parameters: - binLogPath: ${{ parameters.binLogPath }} \ No newline at end of file + binLogPath: ${{ parameters.binLogPath }} diff --git a/src/runtime/eng/common/core-templates/post-build/post-build.yml b/src/runtime/eng/common/core-templates/post-build/post-build.yml index 0cea81c74f2..06864cd1feb 100644 --- a/src/runtime/eng/common/core-templates/post-build/post-build.yml +++ b/src/runtime/eng/common/core-templates/post-build/post-build.yml @@ -127,11 +127,11 @@ stages: ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: windows.vs2022.amd64 + image: windows.vs2026preview.scout.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026preview.scout.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml @@ -175,7 +175,7 @@ stages: os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026preview.scout.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: @@ -236,7 +236,7 @@ stages: os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026preview.scout.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: @@ -305,14 +305,19 @@ stages: PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} is1ESPipeline: ${{ parameters.is1ESPipeline }} - - task: NuGetAuthenticate@1 # Populate internal runtime variables. + - task: NuGetAuthenticate@1 + # Populate internal runtime variables. - template: /eng/common/templates/steps/enable-internal-sources.yml parameters: legacyCredential: $(dn-bot-dnceng-artifact-feeds-rw) - template: /eng/common/templates/steps/enable-internal-runtimes.yml + - task: UseDotNet@2 + inputs: + version: 8.0.x + - task: AzureCLI@2 displayName: Publish Using Darc inputs: @@ -330,4 +335,4 @@ stages: -SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}' -SkipAssetsPublishing '${{ parameters.isAssetlessBuild }}' -runtimeSourceFeed https://ci.dot.net/internal - -runtimeSourceFeedKey $(dotnetbuilds-internal-container-read-token-base64) + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' diff --git a/src/runtime/eng/common/core-templates/steps/install-microbuild-impl.yml b/src/runtime/eng/common/core-templates/steps/install-microbuild-impl.yml index 9fdf3a11677..b9e0143ee92 100644 --- a/src/runtime/eng/common/core-templates/steps/install-microbuild-impl.yml +++ b/src/runtime/eng/common/core-templates/steps/install-microbuild-impl.yml @@ -20,15 +20,15 @@ parameters: steps: - ${{ if eq(parameters.enablePreviewMicrobuild, 'true') }}: - task: MicroBuildSigningPluginPreview@4 - displayName: Install Preview MicroBuild plugin (Windows) + displayName: Install Preview MicroBuild plugin inputs: ${{ parameters.microbuildTaskInputs }} env: ${{ parameters.microbuildEnv }} continueOnError: ${{ parameters.continueOnError }} condition: ${{ parameters.condition }} - ${{ else }}: - task: MicroBuildSigningPlugin@4 - displayName: Install MicroBuild plugin (Windows) + displayName: Install MicroBuild plugin inputs: ${{ parameters.microbuildTaskInputs }} env: ${{ parameters.microbuildEnv }} continueOnError: ${{ parameters.continueOnError }} - condition: ${{ parameters.condition }} \ No newline at end of file + condition: ${{ parameters.condition }} diff --git a/src/runtime/eng/common/core-templates/steps/install-microbuild.yml b/src/runtime/eng/common/core-templates/steps/install-microbuild.yml index 3d42d9a5661..4f4b56ed2a6 100644 --- a/src/runtime/eng/common/core-templates/steps/install-microbuild.yml +++ b/src/runtime/eng/common/core-templates/steps/install-microbuild.yml @@ -13,6 +13,8 @@ parameters: # Unfortunately, _SignType can't be used to exclude the use of the service connection in non-real sign scenarios. The # variable is not available in template expression. _SignType has a very large proliferation across .NET, so replacing it is tough. microbuildUseESRP: true + # Microbuild installation directory + microBuildOutputFolder: $(Agent.TempDirectory)/MicroBuild # Microbuild version microbuildPluginVersion: 'latest' @@ -21,16 +23,33 @@ parameters: steps: - ${{ if eq(parameters.enableMicrobuild, 'true') }}: - ${{ if eq(parameters.enableMicrobuildForMacAndLinux, 'true') }}: - # Installing .NET 8 is required to use the MicroBuild signing plugin on non-Windows platforms + # Needed to download the MicroBuild plugin nupkgs on Mac and Linux when nuget.exe is unavailable - task: UseDotNet@2 displayName: Install .NET 8.0 SDK for MicroBuild Plugin inputs: packageType: sdk version: 8.0.x - # Installing the SDK in a '.dotnet-microbuild' directory is required for signing. - # See target FindDotNetPathForMicroBuild in arcade/src/Microsoft.DotNet.Arcade.Sdk/tools/Sign.proj - # Do not remove '.dotnet-microbuild' from the path without changing the corresponding logic. - installationPath: $(Agent.TempDirectory)/.dotnet-microbuild + installationPath: ${{ parameters.microBuildOutputFolder }}/.dotnet-microbuild + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + + - script: | + set -euo pipefail + + # UseDotNet@2 prepends the dotnet executable path to the PATH variable, so we can call dotnet directly + version=$(dotnet --version) + cat << 'EOF' > ${{ parameters.microBuildOutputFolder }}/global.json + { + "sdk": { + "version": "$version", + "paths": [ + "${{ parameters.microBuildOutputFolder }}/.dotnet-microbuild" + ], + "errorMessage": "The .NET SDK version $version is required to install the MicroBuild signing plugin." + } + } + EOF + displayName: 'Add global.json to MicroBuild Installation path' + workingDirectory: ${{ parameters.microBuildOutputFolder }} condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) - script: | @@ -70,7 +89,7 @@ steps: ConnectedPMEServiceName: 248d384a-b39b-46e3-8ad5-c2c210d5e7ca microbuildEnv: TeamName: $(_TeamName) - MicroBuildOutputFolderOverride: $(Agent.TempDirectory)/MicroBuild + MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} SYSTEM_ACCESSTOKEN: $(System.AccessToken) continueOnError: ${{ parameters.continueOnError }} condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT'), in(variables['_SignType'], 'real', 'test')) @@ -84,6 +103,7 @@ steps: zipSources: false feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json version: ${{ parameters.microbuildPluginVersion }} + workingDirectory: ${{ parameters.microBuildOutputFolder }} ${{ if eq(parameters.microbuildUseESRP, true) }}: ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: @@ -92,7 +112,7 @@ steps: ConnectedPMEServiceName: c24de2a5-cc7a-493d-95e4-8e5ff5cad2bc microbuildEnv: TeamName: $(_TeamName) - MicroBuildOutputFolderOverride: $(Agent.TempDirectory)/MicroBuild + MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} SYSTEM_ACCESSTOKEN: $(System.AccessToken) continueOnError: ${{ parameters.continueOnError }} condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT'), eq(variables['_SignType'], 'real')) diff --git a/src/runtime/eng/common/core-templates/steps/publish-logs.yml b/src/runtime/eng/common/core-templates/steps/publish-logs.yml index 10f825e270a..5a927b4c7bc 100644 --- a/src/runtime/eng/common/core-templates/steps/publish-logs.yml +++ b/src/runtime/eng/common/core-templates/steps/publish-logs.yml @@ -26,8 +26,10 @@ steps: # If the file exists - sensitive data for redaction will be sourced from it # (single entry per line, lines starting with '# ' are considered comments and skipped) arguments: -InputPath '$(System.DefaultWorkingDirectory)/PostBuildLogs' - -BinlogToolVersion ${{parameters.BinlogToolVersion}} + -BinlogToolVersion '${{parameters.BinlogToolVersion}}' -TokensFilePath '$(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt' + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' '$(publishing-dnceng-devdiv-code-r-build-re)' '$(MaestroAccessToken)' '$(dn-bot-all-orgs-artifact-feeds-rw)' diff --git a/src/runtime/eng/common/core-templates/steps/source-index-stage1-publish.yml b/src/runtime/eng/common/core-templates/steps/source-index-stage1-publish.yml index eff4573c6e5..ac019e2d033 100644 --- a/src/runtime/eng/common/core-templates/steps/source-index-stage1-publish.yml +++ b/src/runtime/eng/common/core-templates/steps/source-index-stage1-publish.yml @@ -14,8 +14,8 @@ steps: workingDirectory: $(Agent.TempDirectory) - script: | - $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version ${{parameters.sourceIndexProcessBinlogPackageVersion}} --add-source ${{parameters.SourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools - $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version ${{parameters.sourceIndexUploadPackageVersion}} --add-source ${{parameters.SourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools + $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version ${{parameters.sourceIndexProcessBinlogPackageVersion}} --source ${{parameters.SourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools + $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version ${{parameters.sourceIndexUploadPackageVersion}} --source ${{parameters.SourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools displayName: "Source Index: Download netsourceindex Tools" # Set working directory to temp directory so 'dotnet' doesn't try to use global.json and use the repo's sdk. workingDirectory: $(Agent.TempDirectory) diff --git a/src/runtime/eng/common/generate-sbom-prep.sh b/src/runtime/eng/common/generate-sbom-prep.sh old mode 100755 new mode 100644 diff --git a/src/runtime/eng/common/native/install-dependencies.sh b/src/runtime/eng/common/native/install-dependencies.sh index f7bd4af0c8d..64b87d0bcc3 100755 --- a/src/runtime/eng/common/native/install-dependencies.sh +++ b/src/runtime/eng/common/native/install-dependencies.sh @@ -27,7 +27,7 @@ case "$os" in libssl-dev libkrb5-dev pigz cpio localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 - elif [ "$ID" = "fedora" ] || [ "$ID" = "rhel" ] || [ "$ID" = "azurelinux" ]; then + elif [ "$ID" = "fedora" ] || [ "$ID" = "rhel" ] || [ "$ID" = "azurelinux" ] || [ "$ID" = "centos"]; then pkg_mgr="$(command -v tdnf 2>/dev/null || command -v dnf)" $pkg_mgr install -y cmake llvm lld lldb clang python curl libicu-devel openssl-devel krb5-devel lttng-ust-devel pigz cpio elif [ "$ID" = "amzn" ]; then diff --git a/src/runtime/eng/common/post-build/redact-logs.ps1 b/src/runtime/eng/common/post-build/redact-logs.ps1 index b7fc1959150..fc0218a013d 100644 --- a/src/runtime/eng/common/post-build/redact-logs.ps1 +++ b/src/runtime/eng/common/post-build/redact-logs.ps1 @@ -7,7 +7,9 @@ param( # File with strings to redact - separated by newlines. # For comments start the line with '# ' - such lines are ignored [Parameter(Mandatory=$false)][string] $TokensFilePath, - [Parameter(ValueFromRemainingArguments=$true)][String[]]$TokensToRedact + [Parameter(ValueFromRemainingArguments=$true)][String[]]$TokensToRedact, + [Parameter(Mandatory=$false)][string] $runtimeSourceFeed, + [Parameter(Mandatory=$false)][string] $runtimeSourceFeedKey ) try { diff --git a/src/runtime/eng/common/sdk-task.ps1 b/src/runtime/eng/common/sdk-task.ps1 index 9ae443f1c36..b64b66a6275 100644 --- a/src/runtime/eng/common/sdk-task.ps1 +++ b/src/runtime/eng/common/sdk-task.ps1 @@ -70,7 +70,7 @@ try { $GlobalJson.tools | Add-Member -Name "vs" -Value (ConvertFrom-Json "{ `"version`": `"16.5`" }") -MemberType NoteProperty } if( -not ($GlobalJson.tools.PSObject.Properties.Name -match "xcopy-msbuild" )) { - $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "17.14.16" -MemberType NoteProperty + $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "18.0.0" -MemberType NoteProperty } if ($GlobalJson.tools."xcopy-msbuild".Trim() -ine "none") { $xcopyMSBuildToolsFolder = InitializeXCopyMSBuild $GlobalJson.tools."xcopy-msbuild" -install $true diff --git a/src/runtime/eng/common/tools.ps1 b/src/runtime/eng/common/tools.ps1 index 4bc50bd568c..1556562c68f 100644 --- a/src/runtime/eng/common/tools.ps1 +++ b/src/runtime/eng/common/tools.ps1 @@ -157,9 +157,6 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { return $global:_DotNetInstallDir } - # Don't resolve runtime, shared framework, or SDK from other locations to ensure build determinism - $env:DOTNET_MULTILEVEL_LOOKUP=0 - # Disable first run since we do not need all ASP.NET packages restored. $env:DOTNET_NOLOGO=1 @@ -225,7 +222,6 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { # Make Sure that our bootstrapped dotnet cli is available in future steps of the Azure Pipelines build Write-PipelinePrependPath -Path $dotnetRoot - Write-PipelineSetVariable -Name 'DOTNET_MULTILEVEL_LOOKUP' -Value '0' Write-PipelineSetVariable -Name 'DOTNET_NOLOGO' -Value '1' return $global:_DotNetInstallDir = $dotnetRoot @@ -394,8 +390,8 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = # If the version of msbuild is going to be xcopied, # use this version. Version matches a package here: - # https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/Microsoft.DotNet.Arcade.MSBuild.Xcopy/versions/17.14.16 - $defaultXCopyMSBuildVersion = '17.14.16' + # https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/Microsoft.DotNet.Arcade.MSBuild.Xcopy/versions/18.0.0 + $defaultXCopyMSBuildVersion = '18.0.0' if (!$vsRequirements) { if (Get-Member -InputObject $GlobalJson.tools -Name 'vs') { diff --git a/src/runtime/eng/common/tools.sh b/src/runtime/eng/common/tools.sh index c1841c9dfd0..6c121300ac7 100755 --- a/src/runtime/eng/common/tools.sh +++ b/src/runtime/eng/common/tools.sh @@ -115,9 +115,6 @@ function InitializeDotNetCli { local install=$1 - # Don't resolve runtime, shared framework, or SDK from other locations to ensure build determinism - export DOTNET_MULTILEVEL_LOOKUP=0 - # Disable first run since we want to control all package sources export DOTNET_NOLOGO=1 @@ -166,7 +163,6 @@ function InitializeDotNetCli { # build steps from using anything other than what we've downloaded. Write-PipelinePrependPath -path "$dotnet_root" - Write-PipelineSetVariable -name "DOTNET_MULTILEVEL_LOOKUP" -value "0" Write-PipelineSetVariable -name "DOTNET_NOLOGO" -value "1" # return value diff --git a/src/runtime/eng/intellisense.targets b/src/runtime/eng/intellisense.targets index e53bf035e91..c6ddd0aa4eb 100644 --- a/src/runtime/eng/intellisense.targets +++ b/src/runtime/eng/intellisense.targets @@ -6,7 +6,8 @@ $([MSBuild]::NormalizeDirectory('$(NuGetPackageRoot)', 'microsoft.private.intellisense', '$(MicrosoftPrivateIntellisenseVersion)', 'IntellisenseFiles')) - $([MSBuild]::NormalizePath('$(IntellisensePackageXmlRootFolder)', 'net-$(NetCoreAppCurrentVersion)', '1033', '$(AssemblyName).xml')) + + $([MSBuild]::NormalizePath('$(IntellisensePackageXmlRootFolder)', 'net-10.0', '1033', '$(AssemblyName).xml')) $([MSBuild]::NormalizePath('$(IntellisensePackageXmlRootFolder)', 'net', '1033', '$(AssemblyName).xml')) $(IntellisensePackageXmlFilePathFromNetVersionFolder) $(IntellisensePackageXmlFilePathFromNetFolder) diff --git a/src/runtime/eng/packaging.targets b/src/runtime/eng/packaging.targets index 2c7fe264f5e..e5b1ee774db 100644 --- a/src/runtime/eng/packaging.targets +++ b/src/runtime/eng/packaging.targets @@ -38,6 +38,11 @@ false + + + + + diff --git a/src/runtime/eng/pipelines/common/evaluate-paths-job.yml b/src/runtime/eng/pipelines/common/evaluate-paths-job.yml index 696e9ac909f..cadab9bdda2 100644 --- a/src/runtime/eng/pipelines/common/evaluate-paths-job.yml +++ b/src/runtime/eng/pipelines/common/evaluate-paths-job.yml @@ -34,6 +34,7 @@ jobs: - checkout: self clean: true fetchDepth: 2 + fetchTags: false - ${{ if ne(parameters.paths[0], '') }}: - ${{ each path in parameters.paths }}: diff --git a/src/runtime/eng/pipelines/common/global-build-job.yml b/src/runtime/eng/pipelines/common/global-build-job.yml index d76f7075d72..b1833e94b4d 100644 --- a/src/runtime/eng/pipelines/common/global-build-job.yml +++ b/src/runtime/eng/pipelines/common/global-build-job.yml @@ -167,6 +167,7 @@ jobs: - checkout: self clean: true fetchDepth: $(checkoutFetchDepth) + fetchTags: false - ${{ if and(eq(parameters.isOfficialBuild, true), notin(parameters.osGroup, 'osx', 'maccatalyst', 'ios', 'iossimulator', 'tvos', 'tvossimulator')) }}: - template: /eng/pipelines/common/restore-internal-tools.yml diff --git a/src/runtime/eng/pipelines/common/platform-matrix.yml b/src/runtime/eng/pipelines/common/platform-matrix.yml index cd622a6b607..36440a2d74f 100644 --- a/src/runtime/eng/pipelines/common/platform-matrix.yml +++ b/src/runtime/eng/pipelines/common/platform-matrix.yml @@ -327,7 +327,7 @@ jobs: targetRid: linux-x64 platform: linux_x64 shouldContinueOnError: ${{ parameters.shouldContinueOnError }} - container: debian-12-gcc15-amd64 + container: debian-13-gcc15-amd64 jobParameters: runtimeFlavor: ${{ parameters.runtimeFlavor }} buildConfig: ${{ parameters.buildConfig }} diff --git a/src/runtime/eng/pipelines/common/templates/pipeline-with-resources.yml b/src/runtime/eng/pipelines/common/templates/pipeline-with-resources.yml index 78c3c5e7299..034de117260 100644 --- a/src/runtime/eng/pipelines/common/templates/pipeline-with-resources.yml +++ b/src/runtime/eng/pipelines/common/templates/pipeline-with-resources.yml @@ -102,8 +102,8 @@ extends: env: ROOTFS_DIR: /crossrootfs/loongarch64 - debian-12-gcc15-amd64: - image: mcr.microsoft.com/dotnet-buildtools/prereqs:debian-12-gcc15-amd64 + debian-13-gcc15-amd64: + image: mcr.microsoft.com/dotnet-buildtools/prereqs:debian-13-gcc15-amd64 linux_x64_llvmaot: image: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream-10-amd64 diff --git a/src/runtime/eng/pipelines/common/templates/runtimes/xplat-job.yml b/src/runtime/eng/pipelines/common/templates/runtimes/xplat-job.yml index 3b7dfa334ed..00e8dfb520a 100644 --- a/src/runtime/eng/pipelines/common/templates/runtimes/xplat-job.yml +++ b/src/runtime/eng/pipelines/common/templates/runtimes/xplat-job.yml @@ -107,5 +107,6 @@ jobs: - checkout: self clean: true fetchDepth: $(checkoutFetchDepth) + fetchTags: false - ${{ parameters.steps }} diff --git a/src/runtime/eng/pipelines/coreclr/templates/crossgen2-comparison-build-job.yml b/src/runtime/eng/pipelines/coreclr/templates/crossgen2-comparison-build-job.yml index 01f9ed4cfb5..1d0163ba4c5 100644 --- a/src/runtime/eng/pipelines/coreclr/templates/crossgen2-comparison-build-job.yml +++ b/src/runtime/eng/pipelines/coreclr/templates/crossgen2-comparison-build-job.yml @@ -71,7 +71,7 @@ jobs: - name: crossgen2location value: $(binDirectory)$(dir)crossgen2_inbuild$(dir)$(archType)$(dir)$(buildConfigUpper)$(dir)crossgen2.dll - name: librariesProductDllDir - value: $(Build.SourcesDirectory)$(dir)artifacts$(dir)bin$(dir)runtime$(dir)net10.0-$(osGroup)$(osSubgroup)-$(buildConfig)-$(archType) + value: $(Build.SourcesDirectory)$(dir)artifacts$(dir)bin$(dir)runtime$(dir)net11.0-$(osGroup)$(osSubgroup)-$(buildConfig)-$(archType) - ${{ parameters.variables }} diff --git a/src/runtime/eng/pipelines/coreclr/templates/helix-queues-setup.yml b/src/runtime/eng/pipelines/coreclr/templates/helix-queues-setup.yml index 314b76dc270..08bfe2d54d7 100644 --- a/src/runtime/eng/pipelines/coreclr/templates/helix-queues-setup.yml +++ b/src/runtime/eng/pipelines/coreclr/templates/helix-queues-setup.yml @@ -34,7 +34,7 @@ jobs: # iOS Simulator/Mac Catalyst arm64 - ${{ if in(parameters.platform, 'maccatalyst_arm64', 'iossimulator_arm64') }}: - - OSX.14.Arm64.Open + - OSX.15.Arm64.Open # iOS/tvOS Simulator x64 & MacCatalyst x64 - ${{ if in(parameters.platform, 'iossimulator_x64', 'tvossimulator_x64', 'maccatalyst_x64') }}: diff --git a/src/runtime/eng/pipelines/diagnostics/runtime-diag-job.yml b/src/runtime/eng/pipelines/diagnostics/runtime-diag-job.yml index 83ee3812777..85d644e851a 100644 --- a/src/runtime/eng/pipelines/diagnostics/runtime-diag-job.yml +++ b/src/runtime/eng/pipelines/diagnostics/runtime-diag-job.yml @@ -142,6 +142,7 @@ jobs: - checkout: diagnostics clean: true fetchDepth: $(checkoutFetchDepth) + fetchTags: false - ${{ if and(eq(parameters.isOfficialBuild, true), notin(parameters.osGroup, 'osx', 'maccatalyst', 'ios', 'iossimulator', 'tvos', 'tvossimulator')) }}: - template: /eng/pipelines/common/restore-internal-tools.yml diff --git a/src/runtime/eng/pipelines/libraries/deploy-networking-echo-test-servers.yml b/src/runtime/eng/pipelines/libraries/deploy-networking-echo-test-servers.yml index 85b48410238..aed57086410 100644 --- a/src/runtime/eng/pipelines/libraries/deploy-networking-echo-test-servers.yml +++ b/src/runtime/eng/pipelines/libraries/deploy-networking-echo-test-servers.yml @@ -54,6 +54,7 @@ extends: displayName: Build steps: - checkout: self + fetchTags: false - task: UseDotNet@2 inputs: diff --git a/src/runtime/eng/pipelines/libraries/fuzzing/deploy-to-onefuzz.yml b/src/runtime/eng/pipelines/libraries/fuzzing/deploy-to-onefuzz.yml index eb23479af97..f112f9ae762 100644 --- a/src/runtime/eng/pipelines/libraries/fuzzing/deploy-to-onefuzz.yml +++ b/src/runtime/eng/pipelines/libraries/fuzzing/deploy-to-onefuzz.yml @@ -31,6 +31,7 @@ extends: - checkout: self clean: true fetchDepth: 1 + fetchTags: false lfs: false - powershell: | diff --git a/src/runtime/eng/pipelines/libraries/helix-queues-setup.yml b/src/runtime/eng/pipelines/libraries/helix-queues-setup.yml index 12c23119a64..92494860e9a 100644 --- a/src/runtime/eng/pipelines/libraries/helix-queues-setup.yml +++ b/src/runtime/eng/pipelines/libraries/helix-queues-setup.yml @@ -92,7 +92,7 @@ jobs: # iOS Simulator/Mac Catalyst arm64 - ${{ if in(parameters.platform, 'maccatalyst_arm64', 'iossimulator_arm64') }}: - - OSX.14.Arm64.Open + - OSX.15.Arm64.Open # iOS/tvOS Simulator x64 & MacCatalyst x64 - ${{ if in(parameters.platform, 'iossimulator_x64', 'tvossimulator_x64', 'maccatalyst_x64') }}: diff --git a/src/runtime/eng/pipelines/libraries/run-test-job.yml b/src/runtime/eng/pipelines/libraries/run-test-job.yml index 280c1937b2d..ed826732c81 100644 --- a/src/runtime/eng/pipelines/libraries/run-test-job.yml +++ b/src/runtime/eng/pipelines/libraries/run-test-job.yml @@ -86,6 +86,7 @@ jobs: - checkout: self clean: true fetchDepth: $(checkoutFetchDepth) + fetchTags: false - ${{ if ne(variables['System.TeamProject'], 'public') }}: - ${{ if ne(parameters.osGroup, 'windows') }}: diff --git a/src/runtime/eng/pipelines/libraries/stress/http.yml b/src/runtime/eng/pipelines/libraries/stress/http.yml index f0f9a8d2f5b..3c84b6343b3 100644 --- a/src/runtime/eng/pipelines/libraries/stress/http.yml +++ b/src/runtime/eng/pipelines/libraries/stress/http.yml @@ -44,6 +44,7 @@ extends: - checkout: self clean: true fetchDepth: 5 + fetchTags: false - bash: | $(dockerfilesFolder)/build-docker-sdk.sh -t $(sdkBaseImage) -c $(BUILD_CONFIGURATION) && \ @@ -110,6 +111,7 @@ extends: - checkout: self clean: true fetchDepth: 5 + fetchTags: false lfs: false - powershell: | diff --git a/src/runtime/eng/pipelines/libraries/stress/ssl.yml b/src/runtime/eng/pipelines/libraries/stress/ssl.yml index 234d1d85eaa..fbb9a896730 100644 --- a/src/runtime/eng/pipelines/libraries/stress/ssl.yml +++ b/src/runtime/eng/pipelines/libraries/stress/ssl.yml @@ -45,6 +45,7 @@ extends: - checkout: self clean: true fetchDepth: 5 + fetchTags: false - bash: | $(dockerfilesFolder)/build-docker-sdk.sh -t $(sdkBaseImage) -c $(BUILD_CONFIGURATION) @@ -79,6 +80,7 @@ extends: - checkout: self clean: true fetchDepth: 5 + fetchTags: false lfs: false - powershell: | diff --git a/src/runtime/eng/pipelines/runtime.yml b/src/runtime/eng/pipelines/runtime.yml index 199bf189964..e41dc68fd49 100644 --- a/src/runtime/eng/pipelines/runtime.yml +++ b/src/runtime/eng/pipelines/runtime.yml @@ -141,7 +141,7 @@ extends: platforms: - linux_x64 - linux_musl_x64 - - osx_x64 + - osx_arm64 - windows_x64 jobParameters: nameSuffix: CoreCLR_Libraries @@ -214,7 +214,7 @@ extends: jobTemplate: /eng/pipelines/common/global-build-job.yml buildConfig: release platforms: - - osx_arm64 + - osx_x64 jobParameters: nameSuffix: CoreCLR_Libraries buildArgs: -s clr+libs -c $(_BuildConfig) @@ -245,7 +245,7 @@ extends: buildConfig: ${{ variables.debugOnPrReleaseOnRolling }} platforms: - linux_arm64 - - osx_x64 + - osx_arm64 jobParameters: nameSuffix: Libraries_CheckedCoreCLR buildArgs: -s clr+libs+libs.tests -c $(_BuildConfig) -rc Checked /p:ArchiveTests=true @@ -353,7 +353,7 @@ extends: jobTemplate: /eng/pipelines/common/global-build-job.yml buildConfig: ${{ variables.debugOnPrReleaseOnRolling }} platforms: - - osx_arm64 + - osx_x64 jobParameters: nameSuffix: Libraries_CheckedCoreCLR buildArgs: -s clr+libs -c $(_BuildConfig) -rc Checked @@ -376,7 +376,8 @@ extends: configOverride: Checked condition: >- or( - eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_coreclr_AppleSilicon.containsChange'], true), + eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true), + eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_runtimetests.containsChange'], true), eq(variables['isRollingBuild'], true)) - template: /eng/pipelines/common/platform-matrix.yml @@ -1336,7 +1337,7 @@ extends: buildConfig: ${{ variables.debugOnPrReleaseOnRolling }} platforms: - windows_x86 - - osx_arm64 + - osx_x64 helixQueuesTemplate: /eng/pipelines/installer/helix-queues-setup.yml jobParameters: nameSuffix: Installer_Build_And_Test @@ -1367,7 +1368,7 @@ extends: buildConfig: release platforms: - windows_x64 - - osx_x64 + - osx_arm64 - linux_x64 helixQueuesTemplate: /eng/pipelines/installer/helix-queues-setup.yml jobParameters: @@ -1591,7 +1592,7 @@ extends: jobTemplate: /eng/pipelines/common/templates/runtimes/run-test-job.yml buildConfig: checked platforms: - - osx_x64 + - osx_arm64 - linux_x64 - linux_arm64 - windows_x64 @@ -1614,7 +1615,7 @@ extends: jobTemplate: /eng/pipelines/common/templates/runtimes/run-test-job.yml buildConfig: checked platforms: - - osx_arm64 + - osx_x64 helixQueueGroup: pr helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml jobParameters: @@ -1625,7 +1626,8 @@ extends: unifiedBuildConfigOverride: ${{ variables.debugOnPrReleaseOnRolling }} condition: >- or( - eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_coreclr_AppleSilicon.containsChange'], true), + eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true), + eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_runtimetests.containsChange'], true), eq(variables['isRollingBuild'], true)) # @@ -1661,7 +1663,7 @@ extends: buildConfig: ${{ variables.debugOnPrReleaseOnRolling }} platforms: - windows_x64 - - osx_x64 + - osx_arm64 - linux_x64 - linux_musl_x64 helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml @@ -1686,7 +1688,7 @@ extends: # | linux-arm64 | Debug | Release | # | windows-x86 | Debug | Release | # | linux-musl-x64 | Debug | Release | - # | OSX-x64 | Debug | Release | + # | osx-arm64 | Debug | Release | # | linux-musl-arm | Release | Release | # | linux-musl-arm64 | Release | Release | # | linux-x64 | Release | Release | @@ -1749,7 +1751,7 @@ extends: jobTemplate: /eng/pipelines/libraries/run-test-job.yml buildConfig: ${{ variables.debugOnPrReleaseOnRolling }} platforms: - - osx_x64 + - osx_arm64 helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml helixQueueGroup: libraries jobParameters: diff --git a/src/runtime/eng/pruning.targets b/src/runtime/eng/pruning.targets new file mode 100644 index 00000000000..845e99f7e1b --- /dev/null +++ b/src/runtime/eng/pruning.targets @@ -0,0 +1,19 @@ + + + + true + 10.0 + + + + + + + diff --git a/src/runtime/eng/targetingpacks.targets b/src/runtime/eng/targetingpacks.targets index e98c834fff8..a1018381262 100644 --- a/src/runtime/eng/targetingpacks.targets +++ b/src/runtime/eng/targetingpacks.targets @@ -56,7 +56,7 @@ RuntimePackNamePatterns="$(LocalFrameworkOverrideName).Runtime.Mono.**RID**" RuntimePackRuntimeIdentifiers="linux-arm;linux-arm64;linux-musl-arm64;linux-musl-x64;linux-x64;osx-x64;linux-riscv64;linux-musl-riscv64;linux-loongarch64;linux-musl-loongarch64;rhel.6-x64;win-arm64;win-x64;win-x86;linux-musl-arm;osx-arm64;linux-s390x;linux-bionic-arm;linux-bionic-arm64;linux-bionic-x64;linux-bionic-x86;browser-wasm;ios-arm64;ios-arm;iossimulator-arm64;iossimulator-x64;iossimulator-x86;tvos-arm64;tvossimulator-arm64;tvossimulator-x64;maccatalyst-x64;maccatalyst-arm64;android-arm64;android-arm;android-x64;android-x86" RuntimePackLabels="Mono" - Condition="'$(UseLocalTargetingRuntimePack)' == 'true' and ('@(KnownRuntimePack)' == '' or @(KnownRuntimePack->WithMetadataValue('Identity', 'Microsoft.NETCore.App')->WithMetadataValue('RuntimePackLabels', 'Mono')->WithMetadataValue('TargetFramework', '$(NetCoreAppCurrent)')) == '')" /> + Condition="'$(UseLocalTargetingRuntimePack)' == 'true' and ('@(KnownRuntimePack)' == '' or '@(KnownRuntimePack->WithMetadataValue('Identity', 'Microsoft.NETCore.App')->WithMetadataValue('RuntimePackLabels', 'Mono')->AnyHaveMetadataValue('TargetFramework', '$(NetCoreAppCurrent)'))' != 'true')" /> + Condition="'$(UseLocalTargetingRuntimePack)' == 'true' and ('@(KnownRuntimePack)' == '' or '@(KnownRuntimePack->WithMetadataValue('Identity', 'Microsoft.NETCore.App')->WithMetadataValue('RuntimePackLabels', 'NativeAOT')->AnyHaveMetadataValue('TargetFramework', '$(NetCoreAppCurrent)'))' != 'true')" /> + diff --git a/src/runtime/eng/testing/scenarios/BuildWasmAppsJobsList.txt b/src/runtime/eng/testing/scenarios/BuildWasmAppsJobsList.txt index 1d4e72cb048..312c79d785d 100644 --- a/src/runtime/eng/testing/scenarios/BuildWasmAppsJobsList.txt +++ b/src/runtime/eng/testing/scenarios/BuildWasmAppsJobsList.txt @@ -5,7 +5,6 @@ Wasm.Build.NativeRebuild.Tests.ReferenceNewAssemblyRebuildTest Wasm.Build.NativeRebuild.Tests.SimpleSourceChangeRebuildTest Wasm.Build.Tests.InterpPgoTests Wasm.Build.Templates.Tests.NativeBuildTests -Wasm.Build.Tests.Blazor.AppsettingsTests Wasm.Build.Tests.Blazor.BuildPublishTests Wasm.Build.Tests.Blazor.SimpleRunTests Wasm.Build.Tests.Blazor.CleanTests diff --git a/src/runtime/eng/testing/tests.wasm.targets b/src/runtime/eng/testing/tests.wasm.targets index 5cded7ee674..ba5df32aeb8 100644 --- a/src/runtime/eng/testing/tests.wasm.targets +++ b/src/runtime/eng/testing/tests.wasm.targets @@ -91,7 +91,7 @@ - + diff --git a/src/runtime/eng/testing/workloads-browser.targets b/src/runtime/eng/testing/workloads-browser.targets index ad279f9f506..4bb3ddb7502 100644 --- a/src/runtime/eng/testing/workloads-browser.targets +++ b/src/runtime/eng/testing/workloads-browser.targets @@ -14,6 +14,11 @@ Variant="latest" Version="$(PackageVersionForWorkloadManifests)" /> + + + - - + + diff --git a/src/runtime/eng/testing/workloads-testing.targets b/src/runtime/eng/testing/workloads-testing.targets index 4c21756db44..25b53de8d15 100644 --- a/src/runtime/eng/testing/workloads-testing.targets +++ b/src/runtime/eng/testing/workloads-testing.targets @@ -7,18 +7,19 @@ $([MSBuild]::NormalizeDirectory($(ArtifactsDir), 'packages', $(Configuration), 'Shipping')) + $(_DotNetInstallScriptPath) -i $(_SdkWithNoWorkloadPath) -v latest -q daily --channel 10.0 + >$(_DotNetInstallScriptPath) -i $(_SdkWithNoWorkloadPath) -v latest -q daily --channel 11.0 $(_DotNetInstallScriptPath) -InstallDir $(_SdkWithNoWorkloadPath) -Quality daily -Channel 10.0 + >$(_DotNetInstallScriptPath) -InstallDir $(_SdkWithNoWorkloadPath) -Quality daily -Channel 11.0 $(SdkBandVersionForWorkload_FromRuntimeVersions) - - + + diff --git a/src/runtime/eng/testing/workloads-wasi.targets b/src/runtime/eng/testing/workloads-wasi.targets index 1fa46bc733a..e3e26167a56 100644 --- a/src/runtime/eng/testing/workloads-wasi.targets +++ b/src/runtime/eng/testing/workloads-wasi.targets @@ -14,6 +14,12 @@ Variant="latest" Version="$(PackageVersionForWorkloadManifests)" /> + + + diff --git a/src/runtime/global.json b/src/runtime/global.json index 6767e8120de..bacd34f1bb6 100644 --- a/src/runtime/global.json +++ b/src/runtime/global.json @@ -1,18 +1,18 @@ { "sdk": { - "version": "10.0.100-rc.2.25502.107", + "version": "10.0.100", "allowPrerelease": true, "rollForward": "major" }, "tools": { - "dotnet": "10.0.100-rc.2.25502.107" + "dotnet": "10.0.100" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.25528.108", - "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.25528.108", - "Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.25528.108", + "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.25608.101", + "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.25608.101", + "Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.25608.101", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", - "Microsoft.NET.Sdk.IL": "10.0.0-rc.1.25528.108" + "Microsoft.NET.Sdk.IL": "11.0.0-alpha.1.25608.101" } } diff --git a/src/runtime/src/coreclr/System.Private.CoreLib/CompatibilitySuppressions.xml b/src/runtime/src/coreclr/System.Private.CoreLib/CompatibilitySuppressions.xml new file mode 100644 index 00000000000..090777eb758 --- /dev/null +++ b/src/runtime/src/coreclr/System.Private.CoreLib/CompatibilitySuppressions.xml @@ -0,0 +1,32 @@ + + + + + CP0001 + T:Internal.Console + + + CP0002 + F:System.Resources.ResourceManager.BaseNameField + + + CP0002 + F:System.Resources.ResourceSet.Reader + + + CP0002 + M:System.String.Trim(System.ReadOnlySpan{System.Char}) + + + CP0002 + M:System.String.TrimEnd(System.ReadOnlySpan{System.Char}) + + + CP0002 + M:System.String.TrimStart(System.ReadOnlySpan{System.Char}) + + + CP0008 + T:System.Collections.BitArray + + \ No newline at end of file diff --git a/src/runtime/src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncHelpers.CoreCLR.cs b/src/runtime/src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncHelpers.CoreCLR.cs index 0045c9e53db..b429a94e516 100644 --- a/src/runtime/src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncHelpers.CoreCLR.cs +++ b/src/runtime/src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncHelpers.CoreCLR.cs @@ -267,17 +267,6 @@ private static void TransparentAwait(object o) AsyncSuspend(sentinelContinuation); } - private interface IRuntimeAsyncTaskOps - { - static abstract Action GetContinuationAction(T task); - static abstract Continuation MoveContinuationState(T task); - static abstract void SetContinuationState(T task, Continuation value); - static abstract bool SetCompleted(T task); - static abstract void PostToSyncContext(T task, SynchronizationContext syncCtx); - static abstract void ValueTaskSourceOnCompleted(T task, IValueTaskSourceNotifier vtsNotifier, ValueTaskSourceOnCompletedFlags configFlags); - static abstract ref byte GetResultStorage(T task); - } - // Represents execution of a chain of suspended and resuming runtime // async functions. private sealed class RuntimeAsyncTask : Task, ITaskCompletionAction @@ -288,195 +277,144 @@ public RuntimeAsyncTask() // Ensure that state object isn't published out for others to see. Debug.Assert((m_stateFlags & (int)InternalTaskOptions.PromiseTask) != 0, "Expected state flags to already be configured."); Debug.Assert(m_stateObject is null, "Expected to be able to use the state object field for Continuation."); - m_action = MoveNext; + m_action = DispatchContinuations; m_stateFlags |= (int)InternalTaskOptions.HiddenState; } internal override void ExecuteFromThreadPool(Thread threadPoolThread) { - MoveNext(); - } - - private void MoveNext() - { - RuntimeAsyncTaskCore.DispatchContinuations, Ops>(this); - } - - public void HandleSuspended() - { - RuntimeAsyncTaskCore.HandleSuspended, Ops>(this); + DispatchContinuations(); } void ITaskCompletionAction.Invoke(Task completingTask) { - MoveNext(); + DispatchContinuations(); } bool ITaskCompletionAction.InvokeMayRunArbitraryCode => true; - private static readonly SendOrPostCallback s_postCallback = static state => - { - Debug.Assert(state is RuntimeAsyncTask); - ((RuntimeAsyncTask)state).MoveNext(); - }; + private Action GetContinuationAction() => (Action)m_action!; - public static readonly Action s_runContinuationAction = static state => + private Continuation MoveContinuationState() { - Debug.Assert(state is RuntimeAsyncTask); - ((RuntimeAsyncTask)state).MoveNext(); - }; - - private struct Ops : IRuntimeAsyncTaskOps> - { - public static Action GetContinuationAction(RuntimeAsyncTask task) => (Action)task.m_action!; - public static Continuation MoveContinuationState(RuntimeAsyncTask task) - { - Continuation continuation = (Continuation)task.m_stateObject!; - task.m_stateObject = null; - return continuation; - } - - public static void SetContinuationState(RuntimeAsyncTask task, Continuation value) - { - Debug.Assert(task.m_stateObject == null); - task.m_stateObject = value; - } - - public static bool SetCompleted(RuntimeAsyncTask task) - { - return task.TrySetResult(task.m_result); - } - - public static void PostToSyncContext(RuntimeAsyncTask task, SynchronizationContext syncContext) - { - syncContext.Post(s_postCallback, task); - } - - public static void ValueTaskSourceOnCompleted(RuntimeAsyncTask task, IValueTaskSourceNotifier vtsNotifier, ValueTaskSourceOnCompletedFlags configFlags) - { - vtsNotifier.OnCompleted(s_runContinuationAction, task, configFlags); - } - - public static ref byte GetResultStorage(RuntimeAsyncTask task) => ref Unsafe.As(ref task.m_result); + Continuation continuation = (Continuation)m_stateObject!; + m_stateObject = null; + return continuation; } - } - // Represents execution of a chain of suspended and resuming runtime - // async functions. - private sealed class RuntimeAsyncTask : Task, ITaskCompletionAction - { - public RuntimeAsyncTask() + private void SetContinuationState(Continuation value) { - // We use the base Task's state object field to store the Continuation while posting the task around. - // Ensure that state object isn't published out for others to see. - Debug.Assert((m_stateFlags & (int)InternalTaskOptions.PromiseTask) != 0, "Expected state flags to already be configured."); - Debug.Assert(m_stateObject is null, "Expected to be able to use the state object field for Continuation."); - m_action = MoveNext; - m_stateFlags |= (int)InternalTaskOptions.HiddenState; + Debug.Assert(m_stateObject == null); + m_stateObject = value; } - internal override void ExecuteFromThreadPool(Thread threadPoolThread) + internal void HandleSuspended() { - MoveNext(); - } + ref RuntimeAsyncAwaitState state = ref t_runtimeAsyncAwaitState; - private void MoveNext() - { - RuntimeAsyncTaskCore.DispatchContinuations(this); - } + RestoreContextsOnSuspension(false, state.ExecutionContext, state.SynchronizationContext); - public void HandleSuspended() - { - RuntimeAsyncTaskCore.HandleSuspended(this); - } + ICriticalNotifyCompletion? critNotifier = state.CriticalNotifier; + INotifyCompletion? notifier = state.Notifier; + IValueTaskSourceNotifier? vtsNotifier = state.ValueTaskSourceNotifier; + Task? taskNotifier = state.TaskNotifier; - void ITaskCompletionAction.Invoke(Task completingTask) - { - MoveNext(); - } + state.CriticalNotifier = null; + state.Notifier = null; + state.ValueTaskSourceNotifier = null; + state.TaskNotifier = null; + state.ExecutionContext = null; + state.SynchronizationContext = null; - bool ITaskCompletionAction.InvokeMayRunArbitraryCode => true; + Continuation sentinelContinuation = state.SentinelContinuation!; + Continuation headContinuation = sentinelContinuation.Next!; + sentinelContinuation.Next = null; - private static readonly SendOrPostCallback s_postCallback = static state => - { - Debug.Assert(state is RuntimeAsyncTask); - ((RuntimeAsyncTask)state).MoveNext(); - }; + // Head continuation should be the result of async call to AwaitAwaiter or UnsafeAwaitAwaiter. + // These never have special continuation context handling. + const ContinuationFlags continueFlags = + ContinuationFlags.ContinueOnCapturedSynchronizationContext | + ContinuationFlags.ContinueOnThreadPool | + ContinuationFlags.ContinueOnCapturedTaskScheduler; - public static readonly Action s_runContinuationAction = static state => - { - Debug.Assert(state is RuntimeAsyncTask); - ((RuntimeAsyncTask)state).MoveNext(); - }; + Debug.Assert((headContinuation.Flags & continueFlags) == 0); - private struct Ops : IRuntimeAsyncTaskOps - { - public static Action GetContinuationAction(RuntimeAsyncTask task) => (Action)task.m_action!; - public static Continuation MoveContinuationState(RuntimeAsyncTask task) - { - Continuation continuation = (Continuation)task.m_stateObject!; - task.m_stateObject = null; - return continuation; - } + SetContinuationState(headContinuation); - public static void SetContinuationState(RuntimeAsyncTask task, Continuation value) + try { - Debug.Assert(task.m_stateObject == null); - task.m_stateObject = value; - } + if (critNotifier != null) + { + critNotifier.UnsafeOnCompleted(GetContinuationAction()); + } + else if (taskNotifier != null) + { + // Runtime async callable wrapper for task returning + // method. This implements the context transparent + // forwarding and makes these wrappers minimal cost. + if (!taskNotifier.TryAddCompletionAction(this)) + { + ThreadPool.UnsafeQueueUserWorkItemInternal(this, preferLocal: true); + } + } + else if (vtsNotifier != null) + { + // The awaiter must inform the ValueTaskSource on whether the continuation + // wants to run on a context, although the source may decide to ignore the suggestion. + // Since the behavior of the source takes precedence, we clear the context flags of + // the awaiting continuation (so it will run transparently on what the source decides) + // and then tell the source if the awaiting frame prefers to continue on a context. + // The reason why we do it here and not when the notifier is created is because + // the continuation chain builds from the innermost frame out and at the time when the + // notifier is created we do not know yet if the caller wants to continue on a context. + ValueTaskSourceOnCompletedFlags configFlags = ValueTaskSourceOnCompletedFlags.None; - public static bool SetCompleted(RuntimeAsyncTask task) - { - return task.TrySetResult(); - } + // Skip to a nontransparent/user continuation. Such continuaton must exist. + // Since we see a VTS notifier, something was directly or indirectly + // awaiting an async thunk for a ValueTask-returning method. + // That can only happen in nontransparent/user code. + Continuation nextUserContinuation = headContinuation.Next!; + while ((nextUserContinuation.Flags & continueFlags) == 0 && nextUserContinuation.Next != null) + { + nextUserContinuation = nextUserContinuation.Next; + } - public static void PostToSyncContext(RuntimeAsyncTask task, SynchronizationContext syncContext) - { - syncContext.Post(s_postCallback, task); - } + ContinuationFlags continuationFlags = nextUserContinuation.Flags; + const ContinuationFlags continueOnContextFlags = + ContinuationFlags.ContinueOnCapturedSynchronizationContext | + ContinuationFlags.ContinueOnCapturedTaskScheduler; - public static void ValueTaskSourceOnCompleted(RuntimeAsyncTask task, IValueTaskSourceNotifier vtsNotifier, ValueTaskSourceOnCompletedFlags configFlags) + if ((continuationFlags & continueOnContextFlags) != 0) + { + // if await has captured some context, inform the source + configFlags |= ValueTaskSourceOnCompletedFlags.UseSchedulingContext; + } + + // Clear continuation flags, so that continuation runs transparently + nextUserContinuation.Flags &= ~continueFlags; + vtsNotifier.OnCompleted(s_runContinuationAction, this, configFlags); + } + else + { + Debug.Assert(notifier != null); + notifier.OnCompleted(GetContinuationAction()); + } + } + catch (Exception ex) { - vtsNotifier.OnCompleted(s_runContinuationAction, task, configFlags); + Task.ThrowAsync(ex, targetContext: null); } - - public static ref byte GetResultStorage(RuntimeAsyncTask task) => ref Unsafe.NullRef(); } - } - private static class RuntimeAsyncTaskCore - { - [StructLayout(LayoutKind.Explicit)] - private unsafe ref struct DispatcherInfo - { - // Dispatcher info for next dispatcher present on stack, or - // null if none. - [FieldOffset(0)] - public DispatcherInfo* Next; - - // Next continuation the dispatcher will process. -#if TARGET_64BIT - [FieldOffset(8)] -#else - [FieldOffset(4)] -#endif - public Continuation? NextContinuation; - } - - // Information about current task dispatching, to be used for async - // stackwalking. - [ThreadStatic] - private static unsafe DispatcherInfo* t_dispatcherInfo; - - public static unsafe void DispatchContinuations(T task) where T : Task, ITaskCompletionAction where TOps : IRuntimeAsyncTaskOps + private unsafe void DispatchContinuations() { ExecutionAndSyncBlockStore contexts = default; contexts.Push(); - DispatcherInfo dispatcherInfo; - dispatcherInfo.Next = t_dispatcherInfo; - dispatcherInfo.NextContinuation = TOps.MoveContinuationState(task); - t_dispatcherInfo = &dispatcherInfo; + RuntimeAsyncTaskCore.DispatcherInfo dispatcherInfo; + dispatcherInfo.Next = RuntimeAsyncTaskCore.t_dispatcherInfo; + dispatcherInfo.NextContinuation = MoveContinuationState(); + RuntimeAsyncTaskCore.t_dispatcherInfo = &dispatcherInfo; while (true) { @@ -487,15 +425,15 @@ public static unsafe void DispatchContinuations(T task) where T : Task, Continuation? nextContinuation = curContinuation.Next; dispatcherInfo.NextContinuation = nextContinuation; - ref byte resultLoc = ref nextContinuation != null ? ref nextContinuation.GetResultStorageOrNull() : ref TOps.GetResultStorage(task); + ref byte resultLoc = ref nextContinuation != null ? ref nextContinuation.GetResultStorageOrNull() : ref GetResultStorage(); Continuation? newContinuation = curContinuation.ResumeInfo->Resume(curContinuation, ref resultLoc); if (newContinuation != null) { newContinuation.Next = nextContinuation; - HandleSuspended(task); + HandleSuspended(); contexts.Pop(); - t_dispatcherInfo = dispatcherInfo.Next; + RuntimeAsyncTaskCore.t_dispatcherInfo = dispatcherInfo.Next; return; } } @@ -506,12 +444,12 @@ public static unsafe void DispatchContinuations(T task) where T : Task, { // Tail of AsyncTaskMethodBuilderT.SetException bool successfullySet = ex is OperationCanceledException oce ? - task.TrySetCanceled(oce.CancellationToken, oce) : - task.TrySetException(ex); + TrySetCanceled(oce.CancellationToken, oce) : + TrySetException(ex); contexts.Pop(); - t_dispatcherInfo = dispatcherInfo.Next; + RuntimeAsyncTaskCore.t_dispatcherInfo = dispatcherInfo.Next; if (!successfullySet) { @@ -527,11 +465,11 @@ public static unsafe void DispatchContinuations(T task) where T : Task, if (dispatcherInfo.NextContinuation == null) { - bool successfullySet = TOps.SetCompleted(task); + bool successfullySet = TrySetResult(m_result); contexts.Pop(); - t_dispatcherInfo = dispatcherInfo.Next; + RuntimeAsyncTaskCore.t_dispatcherInfo = dispatcherInfo.Next; if (!successfullySet) { @@ -541,15 +479,17 @@ public static unsafe void DispatchContinuations(T task) where T : Task, return; } - if (QueueContinuationFollowUpActionIfNecessary(task, dispatcherInfo.NextContinuation)) + if (QueueContinuationFollowUpActionIfNecessary(dispatcherInfo.NextContinuation)) { contexts.Pop(); - t_dispatcherInfo = dispatcherInfo.Next; + RuntimeAsyncTaskCore.t_dispatcherInfo = dispatcherInfo.Next; return; } } } + private ref byte GetResultStorage() => ref Unsafe.As(ref m_result); + private static Continuation? UnwindToPossibleHandler(Continuation? continuation) { while (true) @@ -561,105 +501,7 @@ public static unsafe void DispatchContinuations(T task) where T : Task, } } - public static void HandleSuspended(T task) where T : Task, ITaskCompletionAction where TOps : IRuntimeAsyncTaskOps - { - ref RuntimeAsyncAwaitState state = ref t_runtimeAsyncAwaitState; - - RestoreContextsOnSuspension(false, state.ExecutionContext, state.SynchronizationContext); - - ICriticalNotifyCompletion? critNotifier = state.CriticalNotifier; - INotifyCompletion? notifier = state.Notifier; - IValueTaskSourceNotifier? vtsNotifier = state.ValueTaskSourceNotifier; - Task? taskNotifier = state.TaskNotifier; - - state.CriticalNotifier = null; - state.Notifier = null; - state.ValueTaskSourceNotifier = null; - state.TaskNotifier = null; - state.ExecutionContext = null; - state.SynchronizationContext = null; - - Continuation sentinelContinuation = state.SentinelContinuation!; - Continuation headContinuation = sentinelContinuation.Next!; - sentinelContinuation.Next = null; - - // Head continuation should be the result of async call to AwaitAwaiter or UnsafeAwaitAwaiter. - // These never have special continuation context handling. - const ContinuationFlags continueFlags = - ContinuationFlags.ContinueOnCapturedSynchronizationContext | - ContinuationFlags.ContinueOnThreadPool | - ContinuationFlags.ContinueOnCapturedTaskScheduler; - - Debug.Assert((headContinuation.Flags & continueFlags) == 0); - - TOps.SetContinuationState(task, headContinuation); - - try - { - if (critNotifier != null) - { - critNotifier.UnsafeOnCompleted(TOps.GetContinuationAction(task)); - } - else if (taskNotifier != null) - { - // Runtime async callable wrapper for task returning - // method. This implements the context transparent - // forwarding and makes these wrappers minimal cost. - if (!taskNotifier.TryAddCompletionAction(task)) - { - ThreadPool.UnsafeQueueUserWorkItemInternal(task, preferLocal: true); - } - } - else if (vtsNotifier != null) - { - // The awaiter must inform the ValueTaskSource on whether the continuation - // wants to run on a context, although the source may decide to ignore the suggestion. - // Since the behavior of the source takes precedence, we clear the context flags of - // the awaiting continuation (so it will run transparently on what the source decides) - // and then tell the source if the awaiting frame prefers to continue on a context. - // The reason why we do it here and not when the notifier is created is because - // the continuation chain builds from the innermost frame out and at the time when the - // notifier is created we do not know yet if the caller wants to continue on a context. - ValueTaskSourceOnCompletedFlags configFlags = ValueTaskSourceOnCompletedFlags.None; - - // Skip to a nontransparent/user continuation. Such continuaton must exist. - // Since we see a VTS notifier, something was directly or indirectly - // awaiting an async thunk for a ValueTask-returning method. - // That can only happen in nontransparent/user code. - Continuation nextUserContinuation = headContinuation.Next!; - while ((nextUserContinuation.Flags & continueFlags) == 0 && nextUserContinuation.Next != null) - { - nextUserContinuation = nextUserContinuation.Next; - } - - ContinuationFlags continuationFlags = nextUserContinuation.Flags; - const ContinuationFlags continueOnContextFlags = - ContinuationFlags.ContinueOnCapturedSynchronizationContext | - ContinuationFlags.ContinueOnCapturedTaskScheduler; - - if ((continuationFlags & continueOnContextFlags) != 0) - { - // if await has captured some context, inform the source - configFlags |= ValueTaskSourceOnCompletedFlags.UseSchedulingContext; - } - - // Clear continuation flags, so that continuation runs transparently - nextUserContinuation.Flags &= ~continueFlags; - TOps.ValueTaskSourceOnCompleted(task, vtsNotifier, configFlags); - } - else - { - Debug.Assert(notifier != null); - notifier.OnCompleted(TOps.GetContinuationAction(task)); - } - } - catch (Exception ex) - { - Task.ThrowAsync(ex, targetContext: null); - } - } - - private static bool QueueContinuationFollowUpActionIfNecessary(T task, Continuation continuation) where T : Task where TOps : IRuntimeAsyncTaskOps + private bool QueueContinuationFollowUpActionIfNecessary(Continuation continuation) { if ((continuation.Flags & ContinuationFlags.ContinueOnThreadPool) != 0) { @@ -674,8 +516,8 @@ private static bool QueueContinuationFollowUpActionIfNecessary(T task, } } - TOps.SetContinuationState(task, continuation); - ThreadPool.UnsafeQueueUserWorkItemInternal(task, preferLocal: true); + SetContinuationState(continuation); + ThreadPool.UnsafeQueueUserWorkItemInternal(this, preferLocal: true); return true; } @@ -691,11 +533,11 @@ private static bool QueueContinuationFollowUpActionIfNecessary(T task, return false; } - TOps.SetContinuationState(task, continuation); + SetContinuationState(continuation); try { - TOps.PostToSyncContext(task, continuationSyncCtx); + continuationSyncCtx.Post(s_postCallback, this); } catch (Exception ex) { @@ -711,9 +553,9 @@ private static bool QueueContinuationFollowUpActionIfNecessary(T task, Debug.Assert(continuationContext is TaskScheduler { }); TaskScheduler sched = (TaskScheduler)continuationContext; - TOps.SetContinuationState(task, continuation); + SetContinuationState(continuation); // TODO: We do not need TaskSchedulerAwaitTaskContinuation here, just need to refactor its Run method... - var taskSchedCont = new TaskSchedulerAwaitTaskContinuation(sched, TOps.GetContinuationAction(task), flowExecutionContext: false); + var taskSchedCont = new TaskSchedulerAwaitTaskContinuation(sched, GetContinuationAction(), flowExecutionContext: false); taskSchedCont.Run(Task.CompletedTask, canInlineContinuationTask: true); return true; @@ -721,6 +563,43 @@ private static bool QueueContinuationFollowUpActionIfNecessary(T task, return false; } + + private static readonly SendOrPostCallback s_postCallback = static state => + { + Debug.Assert(state is RuntimeAsyncTask); + ((RuntimeAsyncTask)state).DispatchContinuations(); + }; + + private static readonly Action s_runContinuationAction = static state => + { + Debug.Assert(state is RuntimeAsyncTask); + ((RuntimeAsyncTask)state).DispatchContinuations(); + }; + } + + internal static class RuntimeAsyncTaskCore + { + [StructLayout(LayoutKind.Explicit)] + internal unsafe ref struct DispatcherInfo + { + // Dispatcher info for next dispatcher present on stack, or + // null if none. + [FieldOffset(0)] + public DispatcherInfo* Next; + + // Next continuation the dispatcher will process. +#if TARGET_64BIT + [FieldOffset(8)] +#else + [FieldOffset(4)] +#endif + public Continuation? NextContinuation; + } + + // Information about current task dispatching, to be used for async + // stackwalking. + [ThreadStatic] + internal static unsafe DispatcherInfo* t_dispatcherInfo; } // Change return type to RuntimeAsyncTask -- no benefit since this is used for Task returning thunks only @@ -736,7 +615,7 @@ private static bool QueueContinuationFollowUpActionIfNecessary(T task, private static Task FinalizeTaskReturningThunk() { - RuntimeAsyncTask result = new(); + RuntimeAsyncTask result = new(); result.HandleSuspended(); return result; } diff --git a/src/runtime/src/coreclr/System.Private.CoreLib/src/System/String.CoreCLR.cs b/src/runtime/src/coreclr/System.Private.CoreLib/src/System/String.CoreCLR.cs index a2c9f4f6e4e..3396efc142d 100644 --- a/src/runtime/src/coreclr/System.Private.CoreLib/src/System/String.CoreCLR.cs +++ b/src/runtime/src/coreclr/System.Private.CoreLib/src/System/String.CoreCLR.cs @@ -10,20 +10,6 @@ namespace System { public partial class String { - [LibraryImport(RuntimeHelpers.QCall, EntryPoint = "String_StrCns")] - private static unsafe partial string* StrCnsInternal(uint rid, IntPtr scopeHandle); - - // implementation of CORINFO_HELP_STRCNS - [StackTraceHidden] - [DebuggerStepThrough] - [DebuggerHidden] - internal static unsafe string StrCns(uint rid, IntPtr scopeHandle) - { - string* ptr = StrCnsInternal(rid, scopeHandle); - Debug.Assert(ptr != null); - return *ptr; - } - [MethodImpl(MethodImplOptions.InternalCall)] internal static extern unsafe string FastAllocateString(MethodTable *pMT, nint length); diff --git a/src/runtime/src/coreclr/hosts/corerun/CMakeLists.txt b/src/runtime/src/coreclr/hosts/corerun/CMakeLists.txt index 509cdf95b09..b3613dcf767 100644 --- a/src/runtime/src/coreclr/hosts/corerun/CMakeLists.txt +++ b/src/runtime/src/coreclr/hosts/corerun/CMakeLists.txt @@ -61,7 +61,7 @@ else() set(JS_SYSTEM_NATIVE_BROWSER "${STATIC_LIB_DESTINATION}/libSystem.Native.Browser.js") set(JS_SYSTEM_BROWSER_UTILS - "${STATIC_LIB_DESTINATION}/libSystem.Browser.Utils.js") + "${STATIC_LIB_DESTINATION}/libSystem.Native.Browser.Utils.js") set(JS_CORE_RUN "${CMAKE_CURRENT_SOURCE_DIR}/wasm/libCorerun.extpost.js") set_target_properties(corerun PROPERTIES diff --git a/src/runtime/src/coreclr/inc/corinfo.h b/src/runtime/src/coreclr/inc/corinfo.h index 777f67f03aa..9f5698e0a56 100644 --- a/src/runtime/src/coreclr/inc/corinfo.h +++ b/src/runtime/src/coreclr/inc/corinfo.h @@ -367,8 +367,6 @@ enum CorInfoHelpFunc CORINFO_HELP_NEWARR_1_VC, // optimized 1-D value class arrays CORINFO_HELP_NEWARR_1_ALIGN8, // like VC, but aligns the array start - CORINFO_HELP_STRCNS, // create a new string literal - /* Object model */ CORINFO_HELP_INITCLASS, // Initialize class if not already initialized @@ -3237,12 +3235,6 @@ class ICorDynamicInfo : public ICorStaticInfo CORINFO_CONST_LOOKUP * pResult ) = 0; - // get slow lazy string literal helper to use (CORINFO_HELP_STRCNS*). - // Returns CORINFO_HELP_UNDEF if lazy string literal helper cannot be used. - virtual CorInfoHelpFunc getLazyStringLiteralHelper( - CORINFO_MODULE_HANDLE handle - ) = 0; - virtual CORINFO_MODULE_HANDLE embedModuleHandle( CORINFO_MODULE_HANDLE handle, void **ppIndirection = NULL diff --git a/src/runtime/src/coreclr/inc/icorjitinfoimpl_generated.h b/src/runtime/src/coreclr/inc/icorjitinfoimpl_generated.h index 0be459ad10d..dcc4865513a 100644 --- a/src/runtime/src/coreclr/inc/icorjitinfoimpl_generated.h +++ b/src/runtime/src/coreclr/inc/icorjitinfoimpl_generated.h @@ -556,9 +556,6 @@ void getFunctionFixedEntryPoint( bool isUnsafeFunctionPointer, CORINFO_CONST_LOOKUP* pResult) override; -CorInfoHelpFunc getLazyStringLiteralHelper( - CORINFO_MODULE_HANDLE handle) override; - CORINFO_MODULE_HANDLE embedModuleHandle( CORINFO_MODULE_HANDLE handle, void** ppIndirection) override; diff --git a/src/runtime/src/coreclr/inc/jiteeversionguid.h b/src/runtime/src/coreclr/inc/jiteeversionguid.h index 45fffd0935c..c85fafc1d7d 100644 --- a/src/runtime/src/coreclr/inc/jiteeversionguid.h +++ b/src/runtime/src/coreclr/inc/jiteeversionguid.h @@ -37,11 +37,11 @@ #include -constexpr GUID JITEEVersionIdentifier = { /* 567f89f4-2ddb-4d80-9107-0ce8c30a18ff */ - 0x567f89f4, - 0x2ddb, - 0x4d80, - {0x91, 0x07, 0x0c, 0xe8, 0xc3, 0x0a, 0x18, 0xff} +constexpr GUID JITEEVersionIdentifier = { /* 4a42a64a-d034-44d4-8f0d-b7f67b3ea4dc */ + 0x4a42a64a, + 0xd034, + 0x44d4, + {0x8f, 0x0d, 0xb7, 0xf6, 0x7b, 0x3e, 0xa4, 0xdc} }; #endif // JIT_EE_VERSIONING_GUID_H diff --git a/src/runtime/src/coreclr/inc/jithelpers.h b/src/runtime/src/coreclr/inc/jithelpers.h index 9cc5c7e7091..24ce3b00085 100644 --- a/src/runtime/src/coreclr/inc/jithelpers.h +++ b/src/runtime/src/coreclr/inc/jithelpers.h @@ -112,8 +112,6 @@ DYNAMICJITHELPER(CORINFO_HELP_NEWARR_1_VC, RhpNewVariableSizeObject, METHOD__NIL) DYNAMICJITHELPER(CORINFO_HELP_NEWARR_1_ALIGN8, RhpNewVariableSizeObject, METHOD__NIL) - DYNAMICJITHELPER(CORINFO_HELP_STRCNS, NULL, METHOD__STRING__STRCNS) - // Object model DYNAMICJITHELPER(CORINFO_HELP_INITCLASS, NULL, METHOD__INITHELPERS__INITCLASS) DYNAMICJITHELPER(CORINFO_HELP_INITINSTCLASS, NULL, METHOD__INITHELPERS__INITINSTANTIATEDCLASS) diff --git a/src/runtime/src/coreclr/inc/readytorun.h b/src/runtime/src/coreclr/inc/readytorun.h index 2f2ec3a0a57..db88393b101 100644 --- a/src/runtime/src/coreclr/inc/readytorun.h +++ b/src/runtime/src/coreclr/inc/readytorun.h @@ -360,7 +360,7 @@ enum ReadyToRunHelper READYTORUN_HELPER_ReversePInvokeExit = 0x46, // Get string handle lazily - READYTORUN_HELPER_GetString = 0x50, + READYTORUN_HELPER_GetString = 0x50, // No longer supported as of READYTORUN_MAJOR_VERSION 17.0 // Used by /Tuning for Profile optimizations READYTORUN_HELPER_LogMethodEnter = 0x51, // No longer supported as of READYTORUN_MAJOR_VERSION 10.0 diff --git a/src/runtime/src/coreclr/interpreter/compiler.cpp b/src/runtime/src/coreclr/interpreter/compiler.cpp index fe416738fa5..c55003ed501 100644 --- a/src/runtime/src/coreclr/interpreter/compiler.cpp +++ b/src/runtime/src/coreclr/interpreter/compiler.cpp @@ -2271,6 +2271,9 @@ void InterpCompiler::CreateBasicBlocks(CORINFO_METHOD_INFO* methodInfo) // This is a ret instruction coming from the initial IL of a synchronized or async method. CreateLeaveChainIslandBasicBlocks(methodInfo, insOffset, GetBB(m_synchronizedOrAsyncPostFinallyOffset)); } + + // The instruction AFTER a ret is always a different basic block if it exists. + GetBB((int32_t)(ip - codeStart)); } break; case InlineString: @@ -8672,6 +8675,14 @@ void InterpCompiler::GenerateCode(CORINFO_METHOD_INFO* methodInfo) } } +#ifdef TARGET_64BIT + if (m_pStackPointer->GetStackType() == StackTypeI) + { + // Emit a saturating conversion from U8 to U4 + EmitConv(m_pStackPointer, StackTypeI4, INTOP_CONV_U4_U8_SAT); + } +#endif // TARGET_64BIT + AddInsExplicit(INTOP_SWITCH, n + 3); m_pLastNewIns->data[0] = n; m_pLastNewIns->SetSVar(m_pStackPointer->var); diff --git a/src/runtime/src/coreclr/interpreter/inc/intops.def b/src/runtime/src/coreclr/interpreter/inc/intops.def index 6b8a382cb9a..838739cd21b 100644 --- a/src/runtime/src/coreclr/interpreter/inc/intops.def +++ b/src/runtime/src/coreclr/interpreter/inc/intops.def @@ -163,6 +163,7 @@ OPDEF(INTOP_CONV_U2_R8, "conv.u2.r8", 3, 1, 1, InterpOpNoArgs) OPDEF(INTOP_CONV_I4_R4, "conv.i4.r4", 3, 1, 1, InterpOpNoArgs) OPDEF(INTOP_CONV_I4_R8, "conv.i4.r8", 3, 1, 1, InterpOpNoArgs) +OPDEF(INTOP_CONV_U4_U8_SAT, "conv.u4.u8.sat", 3, 1, 1, InterpOpNoArgs) OPDEF(INTOP_CONV_U4_R4, "conv.u4.r4", 3, 1, 1, InterpOpNoArgs) OPDEF(INTOP_CONV_U4_R8, "conv.u4.r8", 3, 1, 1, InterpOpNoArgs) diff --git a/src/runtime/src/coreclr/jit/ICorJitInfo_names_generated.h b/src/runtime/src/coreclr/jit/ICorJitInfo_names_generated.h index ec4b01cf889..2d1ce082f8d 100644 --- a/src/runtime/src/coreclr/jit/ICorJitInfo_names_generated.h +++ b/src/runtime/src/coreclr/jit/ICorJitInfo_names_generated.h @@ -137,7 +137,6 @@ DEF_CLR_API(getAddrOfCaptureThreadGlobal) DEF_CLR_API(getHelperFtn) DEF_CLR_API(getFunctionEntryPoint) DEF_CLR_API(getFunctionFixedEntryPoint) -DEF_CLR_API(getLazyStringLiteralHelper) DEF_CLR_API(embedModuleHandle) DEF_CLR_API(embedClassHandle) DEF_CLR_API(embedMethodHandle) diff --git a/src/runtime/src/coreclr/jit/ICorJitInfo_wrapper_generated.hpp b/src/runtime/src/coreclr/jit/ICorJitInfo_wrapper_generated.hpp index 0f1ff35e09c..b8073df5e97 100644 --- a/src/runtime/src/coreclr/jit/ICorJitInfo_wrapper_generated.hpp +++ b/src/runtime/src/coreclr/jit/ICorJitInfo_wrapper_generated.hpp @@ -1310,15 +1310,6 @@ void WrapICorJitInfo::getFunctionFixedEntryPoint( API_LEAVE(getFunctionFixedEntryPoint); } -CorInfoHelpFunc WrapICorJitInfo::getLazyStringLiteralHelper( - CORINFO_MODULE_HANDLE handle) -{ - API_ENTER(getLazyStringLiteralHelper); - CorInfoHelpFunc temp = wrapHnd->getLazyStringLiteralHelper(handle); - API_LEAVE(getLazyStringLiteralHelper); - return temp; -} - CORINFO_MODULE_HANDLE WrapICorJitInfo::embedModuleHandle( CORINFO_MODULE_HANDLE handle, void** ppIndirection) diff --git a/src/runtime/src/coreclr/jit/codegen.h b/src/runtime/src/coreclr/jit/codegen.h index 9e9d6921c11..028b98f2c39 100644 --- a/src/runtime/src/coreclr/jit/codegen.h +++ b/src/runtime/src/coreclr/jit/codegen.h @@ -759,6 +759,10 @@ class CodeGen final : public CodeGenInterface void genCodeForBinary(GenTreeOp* treeNode); bool genIsSameLocalVar(GenTree* tree1, GenTree* tree2); +#if defined(TARGET_WASM) + void genCodeForConstant(GenTree* treeNode); +#endif + #if defined(TARGET_X86) void genCodeForLongUMod(GenTreeOp* node); #endif // TARGET_X86 diff --git a/src/runtime/src/coreclr/jit/codegencommon.cpp b/src/runtime/src/coreclr/jit/codegencommon.cpp index 00c72a83d67..77486f17c82 100644 --- a/src/runtime/src/coreclr/jit/codegencommon.cpp +++ b/src/runtime/src/coreclr/jit/codegencommon.cpp @@ -2213,6 +2213,11 @@ void CodeGen::genEmitMachineCode() // void CodeGen::genEmitUnwindDebugGCandEH() { +#ifdef TARGET_WASM + // TODO-WASM: Fix this phase causing an assertion failure even for methods with no GC locals or EH clauses + return; +#endif + /* Now that the code is issued, we can finalize and emit the unwind data */ compiler->unwindEmit(*codePtr, coldCodePtr); diff --git a/src/runtime/src/coreclr/jit/codegenwasm.cpp b/src/runtime/src/coreclr/jit/codegenwasm.cpp index 7e0e2d567c4..cd7886b11ba 100644 --- a/src/runtime/src/coreclr/jit/codegenwasm.cpp +++ b/src/runtime/src/coreclr/jit/codegenwasm.cpp @@ -11,8 +11,8 @@ void CodeGen::genMarkLabelsForCodegen() { - // TODO-WASM: serialize fgWasmControlFlow results into codegen-level metadata/labels - // (or use them directly and leave this empty). + // No work needed here for now. + // We mark labels as needed in genEmitStartBlock. } void CodeGen::genFnEpilog(BasicBlock* block) @@ -154,7 +154,13 @@ void CodeGen::genEmitStartBlock(BasicBlock* block) while (!wasmControlFlowStack->Empty() && (wasmControlFlowStack->Top()->End() == cursor)) { instGen(INS_end); - wasmControlFlowStack->Pop(); + WasmInterval* interval = wasmControlFlowStack->Pop(); + + if (!interval->IsLoop() && !block->HasFlag(BBF_HAS_LABEL)) + { + block->SetFlags(BBF_HAS_LABEL); + genDefineTempLabel(block); + } } // Push control flow for intervals that start here or earlier, and emit @@ -179,6 +185,12 @@ void CodeGen::genEmitStartBlock(BasicBlock* block) wasmCursor++; wasmControlFlowStack->Push(interval); + if (interval->IsLoop() && !block->HasFlag(BBF_HAS_LABEL)) + { + block->SetFlags(BBF_HAS_LABEL); + genDefineTempLabel(block); + } + if (wasmCursor >= compiler->fgWasmIntervals->size()) { break; @@ -269,6 +281,19 @@ void CodeGen::genCodeForTreeNode(GenTree* treeNode) // Do nothing; this node is a marker for debug info. break; + case GT_NOP: + break; + + case GT_NO_OP: + instGen(INS_nop); + break; + + case GT_CNS_INT: + case GT_CNS_LNG: + case GT_CNS_DBL: + genCodeForConstant(treeNode); + break; + default: #ifdef DEBUG NYIRAW(GenTree::OpName(treeNode->OperGet())); @@ -331,14 +356,10 @@ void CodeGen::genTableBasedSwitch(GenTree* treeNode) BBswtDesc* const desc = block->GetSwitchTargets(); unsigned const caseCount = desc->GetCaseCount(); - // TODO-WASM: update lowering not to peel off the default + // We don't expect degenerate or default-less switches // - assert(!desc->HasDefaultCase()); - - if (caseCount == 0) - { - return; - } + assert(caseCount > 0); + assert(desc->HasDefaultCase()); GetEmitter()->emitIns_I(INS_br_table, EA_4BYTE, caseCount); @@ -347,7 +368,7 @@ void CodeGen::genTableBasedSwitch(GenTree* treeNode) BasicBlock* const caseTarget = desc->GetCase(caseNum)->getDestinationBlock(); unsigned depth = findTargetDepth(caseTarget); - GetEmitter()->emitIns_I(INS_label, EA_4BYTE, depth); + GetEmitter()->emitIns_J(INS_label, EA_4BYTE, depth, caseTarget); } } @@ -537,6 +558,60 @@ void CodeGen::genCodeForDivMod(GenTreeOp* treeNode) genProduceReg(treeNode); } +//------------------------------------------------------------------------ +// genCodeForConstant: Generate code for an integer or floating point constant +// +// Arguments: +// treeNode - The constant. +// +void CodeGen::genCodeForConstant(GenTree* treeNode) +{ + instruction ins; + cnsval_ssize_t bits; + var_types type = treeNode->TypeIs(TYP_REF, TYP_BYREF) ? TYP_I_IMPL : treeNode->TypeGet(); + static_assert(sizeof(cnsval_ssize_t) >= sizeof(double)); + + switch (type) + { + case TYP_INT: + { + ins = INS_i32_const; + GenTreeIntConCommon* con = treeNode->AsIntConCommon(); + bits = con->IntegralValue(); + break; + } + case TYP_LONG: + { + ins = INS_i64_const; + GenTreeIntConCommon* con = treeNode->AsIntConCommon(); + bits = con->IntegralValue(); + break; + } + case TYP_FLOAT: + { + ins = INS_f32_const; + GenTreeDblCon* con = treeNode->AsDblCon(); + double value = con->DconValue(); + memcpy(&bits, &value, sizeof(double)); + break; + } + case TYP_DOUBLE: + { + ins = INS_f64_const; + GenTreeDblCon* con = treeNode->AsDblCon(); + double value = con->DconValue(); + memcpy(&bits, &value, sizeof(double)); + break; + } + default: + unreached(); + } + + // The IF_ for the selected instruction, i.e. IF_F64, determines how these bits are emitted + GetEmitter()->emitIns_I(ins, emitTypeSize(treeNode), bits); + genProduceReg(treeNode); +} + //------------------------------------------------------------------------ // genCodeForShift: Generate code for a shift or rotate operator // @@ -822,7 +897,7 @@ void CodeGen::inst_JMP(emitJumpKind jmp, BasicBlock* tgtBlock) { instruction instr = emitter::emitJumpKindToIns(jmp); unsigned const depth = findTargetDepth(tgtBlock); - GetEmitter()->emitIns_I(instr, EA_4BYTE, depth); + GetEmitter()->emitIns_J(instr, EA_4BYTE, depth, tgtBlock); } void CodeGen::genCreateAndStoreGCInfo(unsigned codeSize, unsigned prologSize, unsigned epilogSize DEBUGARG(void* code)) diff --git a/src/runtime/src/coreclr/jit/compiler.hpp b/src/runtime/src/coreclr/jit/compiler.hpp index 47e7823164d..148b87544d1 100644 --- a/src/runtime/src/coreclr/jit/compiler.hpp +++ b/src/runtime/src/coreclr/jit/compiler.hpp @@ -4057,7 +4057,7 @@ inline bool Compiler::IsSharedStaticHelper(GenTree* tree) bool result1 = // More helpers being added to IsSharedStaticHelper (that have similar behaviors but are not true // ShareStaticHelpers) - helper == CORINFO_HELP_STRCNS || helper == CORINFO_HELP_BOX || + helper == CORINFO_HELP_BOX || // helpers being added to IsSharedStaticHelper helper == CORINFO_HELP_GETSTATICFIELDADDR_TLS || diff --git a/src/runtime/src/coreclr/jit/emit.cpp b/src/runtime/src/coreclr/jit/emit.cpp index f18b84a19ca..2482c1b22c6 100644 --- a/src/runtime/src/coreclr/jit/emit.cpp +++ b/src/runtime/src/coreclr/jit/emit.cpp @@ -1729,6 +1729,7 @@ void* emitter::emitAllocAnyInstr(size_t sz, emitAttr opsz) assert(info->idFinallyCall == false); assert(info->idCatchRet == false); assert(info->idCallSig == nullptr); + assert(info->idTargetBlock == nullptr); info->idNum = emitInsCount; info->idSize = sz; diff --git a/src/runtime/src/coreclr/jit/emit.h b/src/runtime/src/coreclr/jit/emit.h index 4418dc4c2e9..254b144598f 100644 --- a/src/runtime/src/coreclr/jit/emit.h +++ b/src/runtime/src/coreclr/jit/emit.h @@ -637,6 +637,7 @@ class emitter bool idFinallyCall; // Branch instruction is a call to finally bool idCatchRet; // Instruction is for a catch 'return' CORINFO_SIG_INFO* idCallSig; // Used to report native call site signatures to the EE + BasicBlock* idTargetBlock; // Target block for branches }; #ifdef TARGET_ARM diff --git a/src/runtime/src/coreclr/jit/emitfmtswasm.h b/src/runtime/src/coreclr/jit/emitfmtswasm.h index 1413c3cdfb1..a9e3861ff16 100644 --- a/src/runtime/src/coreclr/jit/emitfmtswasm.h +++ b/src/runtime/src/coreclr/jit/emitfmtswasm.h @@ -31,6 +31,9 @@ IF_DEF(OPCODE, IS_NONE, NONE) // IF_DEF(BLOCK, IS_NONE, NONE) // <0x40> IF_DEF(LABEL, IS_NONE, NONE) // IF_DEF(ULEB128, IS_NONE, NONE) // +IF_DEF(SLEB128, IS_NONE, NONE) // +IF_DEF(F32, IS_NONE, NONE) // +IF_DEF(F64, IS_NONE, NONE) // IF_DEF(MEMARG, IS_NONE, NONE) // ( ) #undef IF_DEF diff --git a/src/runtime/src/coreclr/jit/emitwasm.cpp b/src/runtime/src/coreclr/jit/emitwasm.cpp index a3276ef5097..243edde1926 100644 --- a/src/runtime/src/coreclr/jit/emitwasm.cpp +++ b/src/runtime/src/coreclr/jit/emitwasm.cpp @@ -29,7 +29,12 @@ void emitter::emitIns(instruction ins) //------------------------------------------------------------------------ // emitIns_I: Emit an instruction with an immediate operand. // -void emitter::emitIns_I(instruction ins, emitAttr attr, target_ssize_t imm) +// Arguments: +// ins - instruction to emit +// attr - emit attributes +// imm - immediate value +// +void emitter::emitIns_I(instruction ins, emitAttr attr, cnsval_ssize_t imm) { instrDesc* id = emitNewInstrSC(attr, imm); insFormat fmt = emitInsFormat(ins); @@ -41,6 +46,32 @@ void emitter::emitIns_I(instruction ins, emitAttr attr, target_ssize_t imm) appendToCurIG(id); } +//------------------------------------------------------------------------ +// emitIns_J: Emit a jump instruction with an immediate operand. +// +// Arguments: +// ins - instruction to emit +// attr - emit attributes +// imm - immediate value (depth in control flow stack) +// targetBlock - block at that depth +// +void emitter::emitIns_J(instruction ins, emitAttr attr, cnsval_ssize_t imm, BasicBlock* targetBlock) +{ + instrDesc* id = emitNewInstrSC(attr, imm); + insFormat fmt = emitInsFormat(ins); + + id->idIns(ins); + id->idInsFmt(fmt); + + if (m_debugInfoSize > 0) + { + id->idDebugOnlyInfo()->idTargetBlock = targetBlock; + } + + dispIns(id); + appendToCurIG(id); +} + //------------------------------------------------------------------------ // emitIns_S: Emit a memory instruction with a stack-based address mode operand. // @@ -59,7 +90,7 @@ void emitter::emitIns_R(instruction ins, emitAttr attr, regNumber reg) NYI_WASM("emitIns_R"); } -void emitter::emitIns_R_I(instruction ins, emitAttr attr, regNumber reg, ssize_t imm) +void emitter::emitIns_R_I(instruction ins, emitAttr attr, regNumber reg, cnsval_ssize_t imm) { NYI_WASM("emitIns_R_I"); } @@ -113,7 +144,9 @@ static unsigned GetInsOpcode(instruction ins) size_t emitter::emitSizeOfInsDsc(instrDesc* id) const { if (emitIsSmallInsDsc(id)) + { return SMALL_IDSC_SIZE; + } if (id->idIsLargeCns()) { @@ -121,10 +154,17 @@ size_t emitter::emitSizeOfInsDsc(instrDesc* id) const assert(!id->idIsLargeCall()); return sizeof(instrDescCns); } + return sizeof(instrDesc); } -static unsigned SizeOfULEB128(uint64_t value) +unsigned emitter::emitGetAlignHintLog2(const instrDesc* id) +{ + // FIXME + return 0; +} + +unsigned emitter::SizeOfULEB128(uint64_t value) { // bits_to_encode = (data != 0) ? 64 - CLZ(x) : 1 = 64 - CLZ(data | 1) // bytes = ceil(bits_to_encode / 7.0); = (6 + bits_to_encode) / 7 @@ -134,6 +174,13 @@ static unsigned SizeOfULEB128(uint64_t value) return (x * 37) >> 8; } +unsigned emitter::SizeOfSLEB128(int64_t value) +{ + // The same as SizeOfULEB128 calculation but we have to account for the sign bit. + unsigned x = 1 + 6 + 64 - (unsigned)BitOperations::LeadingZeroCount((uint64_t)(value ^ (value >> 63)) | 1UL); + return (x * 37) >> 8; +} + unsigned emitter::instrDesc::idCodeSize() const { #ifdef TARGET_WASM32 @@ -154,15 +201,28 @@ unsigned emitter::instrDesc::idCodeSize() const break; case IF_LABEL: assert(!idIsCnsReloc()); - size = SizeOfULEB128(static_cast(emitGetInsSC(this))); + size = SizeOfULEB128(emitGetInsSC(this)); break; case IF_ULEB128: - size += idIsCnsReloc() ? PADDED_RELOC_SIZE : SizeOfULEB128(static_cast(emitGetInsSC(this))); + size += idIsCnsReloc() ? PADDED_RELOC_SIZE : SizeOfULEB128(emitGetInsSC(this)); + break; + case IF_SLEB128: + size += idIsCnsReloc() ? PADDED_RELOC_SIZE : SizeOfSLEB128(emitGetInsSC(this)); + break; + case IF_F32: + size += 4; + break; + case IF_F64: + size += 8; break; case IF_MEMARG: - size += 1; // The alignment hint byte. - size += idIsCnsReloc() ? PADDED_RELOC_SIZE : SizeOfULEB128(static_cast(emitGetInsSC(this))); + { + uint64_t align = emitGetAlignHintLog2(this); + assert(align < 64); // spec says align > 2^6 produces a memidx for multiple memories. + size += SizeOfULEB128(align); + size += idIsCnsReloc() ? PADDED_RELOC_SIZE : SizeOfULEB128(emitGetInsSC(this)); break; + } default: unreached(); } @@ -174,6 +234,56 @@ void emitter::emitSetShortJump(instrDescJmp* id) NYI_WASM("emitSetShortJump"); } +size_t emitter::emitOutputULEB128(uint8_t* destination, uint64_t value) +{ + uint8_t* buffer = destination + writeableOffset; + if (value >= 0x80) + { + int pos = 0; + do + { + buffer[pos++] = (uint8_t)((value & 0x7F) | ((value >= 0x80) ? 0x80u : 0)); + value >>= 7; + } while (value > 0); + + return pos; + } + else + { + buffer[0] = (uint8_t)value; + return 1; + } +} + +size_t emitter::emitOutputSLEB128(uint8_t* destination, int64_t value) +{ + uint8_t* buffer = destination + writeableOffset; + bool cont = true; + int pos = 0; + while (cont) + { + uint8_t b = ((uint8_t)value & 0x7F); + value >>= 7; + bool isSignBitSet = (b & 0x40) != 0; + if ((value == 0 && !isSignBitSet) || (value == -1 && isSignBitSet)) + { + cont = false; + } + else + { + b |= 0x80; + } + buffer[pos++] = b; + } + return pos; +} + +size_t emitter::emitRawBytes(uint8_t* destination, const void* source, size_t count) +{ + memcpy(destination + writeableOffset, source, count); + return count; +} + size_t emitter::emitOutputInstr(insGroup* ig, instrDesc* id, BYTE** dp) { BYTE* dst = *dp; @@ -189,16 +299,64 @@ size_t emitter::emitOutputInstr(insGroup* ig, instrDesc* id, BYTE** dp) break; case IF_BLOCK: dst += emitOutputByte(dst, opcode); - dst += emitOutputByte(dst, 0x40); + dst += emitOutputByte(dst, 0x40 /* block type of void */); break; case IF_ULEB128: + { + dst += emitOutputByte(dst, opcode); + cnsval_ssize_t constant = emitGetInsSC(id); + dst += emitOutputULEB128(dst, (uint64_t)constant); + break; + } + case IF_SLEB128: + { + dst += emitOutputByte(dst, opcode); + cnsval_ssize_t constant = emitGetInsSC(id); + dst += emitOutputSLEB128(dst, (int64_t)constant); + break; + } + case IF_F32: + { + dst += emitOutputByte(dst, opcode); + // Reinterpret the bits as a double constant and then truncate it to f32, + // then finally copy the raw truncated f32 bits to the output. + cnsval_ssize_t bits = emitGetInsSC(id); + double value; + float truncated; + memcpy(&value, &bits, sizeof(double)); + truncated = FloatingPointUtils::convertToSingle(value); + dst += emitRawBytes(dst, &truncated, sizeof(float)); + break; + } + case IF_F64: + { dst += emitOutputByte(dst, opcode); - // TODO-WASM: emit uleb128 + // The int64 bits are actually a double constant we can copy directly + // to the output stream. + cnsval_ssize_t bits = emitGetInsSC(id); + dst += emitRawBytes(dst, &bits, sizeof(cnsval_ssize_t)); break; + } case IF_LABEL: - // TODO-WASM: emit uleb128 + { + cnsval_ssize_t constant = emitGetInsSC(id); + dst += emitOutputULEB128(dst, (uint64_t)constant); + break; + } + case IF_MEMARG: + { + dst += emitOutputByte(dst, opcode); + uint64_t align = emitGetAlignHintLog2(id); + uint64_t offset = emitGetInsSC(id); + assert(align <= UINT32_MAX); // spec says memarg alignment is u32 + assert(align < 64); // spec says align > 2^6 produces a memidx for multiple memories. + dst += emitOutputULEB128(dst, align); + dst += emitOutputULEB128(dst, offset); + break; + } default: NYI_WASM("emitOutputInstr"); + break; } #ifdef DEBUG @@ -290,6 +448,20 @@ void emitter::emitDispIns( emitDispInst(ins); + auto dispJumpTargetIfAny = [this, id]() { + if (m_debugInfoSize > 0) + { + BasicBlock* const targetBlock = id->idDebugOnlyInfo()->idTargetBlock; + if (targetBlock != nullptr) + { + printf(" ;; "); + insGroup* const targetGroup = (insGroup*)emitCodeGetCookie(targetBlock); + assert(targetGroup != nullptr); + emitPrintLabel(targetGroup); + } + } + }; + // The reference for the following style of display is wasm-objdump output. // switch (fmt) @@ -301,17 +473,35 @@ void emitter::emitDispIns( case IF_LABEL: case IF_ULEB128: { - target_size_t imm = emitGetInsSC(id); - printf(" %u", imm); + cnsval_ssize_t imm = emitGetInsSC(id); + printf(" %llu", (uint64_t)imm); + dispJumpTargetIfAny(); + } + break; + + case IF_SLEB128: + { + cnsval_ssize_t imm = emitGetInsSC(id); + printf(" %lli", (int64_t)imm); + } + break; + + case IF_F32: + case IF_F64: + { + cnsval_ssize_t bits = emitGetInsSC(id); + double value; + memcpy(&value, &bits, sizeof(double)); + printf(" %f", value); } break; case IF_MEMARG: { // TODO-WASM: decide what our strategy for alignment hints is and display these accordingly. - unsigned log2align = 1; - target_size_t offset = emitGetInsSC(id); - printf(" %u %u", log2align, offset); + unsigned log2align = emitGetAlignHintLog2(id) + 1; + cnsval_ssize_t offset = emitGetInsSC(id); + printf(" %u %llu", log2align, (uint64_t)offset); } break; diff --git a/src/runtime/src/coreclr/jit/emitwasm.h b/src/runtime/src/coreclr/jit/emitwasm.h index 890ab53c041..896f7d1cea2 100644 --- a/src/runtime/src/coreclr/jit/emitwasm.h +++ b/src/runtime/src/coreclr/jit/emitwasm.h @@ -17,16 +17,22 @@ void emitDispInst(instruction ins); public: void emitIns(instruction ins); -void emitIns_I(instruction ins, emitAttr attr, target_ssize_t imm); +void emitIns_I(instruction ins, emitAttr attr, cnsval_ssize_t imm); +void emitIns_J(instruction ins, emitAttr attr, cnsval_ssize_t imm, BasicBlock* tgtBlock); void emitIns_S(instruction ins, emitAttr attr, int varx, int offs); void emitIns_R(instruction ins, emitAttr attr, regNumber reg); -void emitIns_R_I(instruction ins, emitAttr attr, regNumber reg, ssize_t imm); +void emitIns_R_I(instruction ins, emitAttr attr, regNumber reg, cnsval_ssize_t imm); void emitIns_Mov(instruction ins, emitAttr attr, regNumber dstReg, regNumber srcReg, bool canSkip); void emitIns_R_R(instruction ins, emitAttr attr, regNumber reg1, regNumber reg2); void emitIns_S_R(instruction ins, emitAttr attr, regNumber ireg, int varx, int offs); +static unsigned SizeOfULEB128(uint64_t value); +static unsigned SizeOfSLEB128(int64_t value); + +static unsigned emitGetAlignHintLog2(const instrDesc* id); + /************************************************************************/ /* Private members that deal with target-dependent instr. descriptors */ /************************************************************************/ @@ -51,3 +57,7 @@ instrDesc* emitNewInstrCallInd(int argCnt, bool emitInsIsStore(instruction ins); insFormat emitInsFormat(instruction ins); + +size_t emitOutputULEB128(uint8_t* destination, uint64_t value); +size_t emitOutputSLEB128(uint8_t* destination, int64_t value); +size_t emitRawBytes(uint8_t* destination, const void* source, size_t count); diff --git a/src/runtime/src/coreclr/jit/fgopt.cpp b/src/runtime/src/coreclr/jit/fgopt.cpp index 31439a5a068..480cc6a8826 100644 --- a/src/runtime/src/coreclr/jit/fgopt.cpp +++ b/src/runtime/src/coreclr/jit/fgopt.cpp @@ -1657,7 +1657,11 @@ bool Compiler::fgOptimizeSwitchBranches(BasicBlock* block) blockRange = &LIR::AsRange(block); switchTree = blockRange->LastNode(); +#ifdef TARGET_WASM + assert(switchTree->OperIs(GT_SWITCH)); +#else assert(switchTree->OperIs(GT_SWITCH_TABLE)); +#endif } else { diff --git a/src/runtime/src/coreclr/jit/fgwasm.cpp b/src/runtime/src/coreclr/jit/fgwasm.cpp index 4a99e3b4370..a00fdb71531 100644 --- a/src/runtime/src/coreclr/jit/fgwasm.cpp +++ b/src/runtime/src/coreclr/jit/fgwasm.cpp @@ -1144,7 +1144,6 @@ PhaseStatus Compiler::fgWasmControlFlow() } // Branch to next needs no block, unless this is a switch - // (eventually when we leave the default on the switch we can remove this). // if ((succNum == (cursor + 1)) && !block->KindIs(BBJ_SWITCH)) { @@ -1623,13 +1622,10 @@ void Compiler::fgDumpWasmControlFlow() BBswtDesc* const desc = block->GetSwitchTargets(); unsigned const caseCount = desc->GetCaseCount(); - // BR_TABLE supports a default case, so we need to ensure - // that wasm lower does not remove it. + // BR_TABLE supports a default case. + // Wasm lower should not remove it. // - // For now, we expect non-wasm lower has made the default case check explicit - // and so our BR_TABLE emission is deficient. - // - assert(!desc->HasDefaultCase()); + assert(desc->HasDefaultCase()); if (caseCount == 0) { diff --git a/src/runtime/src/coreclr/jit/gentree.cpp b/src/runtime/src/coreclr/jit/gentree.cpp index 0e2ee29316c..2ec6ed5e5be 100644 --- a/src/runtime/src/coreclr/jit/gentree.cpp +++ b/src/runtime/src/coreclr/jit/gentree.cpp @@ -5175,11 +5175,13 @@ unsigned Compiler::gtSetEvalOrder(GenTree* tree) case GT_CNS_LNG: case GT_CNS_INT: - // TODO-WASM: needs tuning based on the [S]LEB128 encoding size. - NYI_WASM("GT_CNS_LNG/GT_CNS_INT costing"); - costEx = 0; - costSz = 0; + { + GenTreeIntConCommon* con = tree->AsIntConCommon(); + int64_t imm = con->IntegralValue(); + costEx = 1; + costSz = 1 + (int)emitter::SizeOfSLEB128(imm); goto COMMON_CNS; + } #else case GT_CNS_STR: case GT_CNS_LNG: diff --git a/src/runtime/src/coreclr/jit/instrswasm.h b/src/runtime/src/coreclr/jit/instrswasm.h index 7b204d189a0..5264fdf0817 100644 --- a/src/runtime/src/coreclr/jit/instrswasm.h +++ b/src/runtime/src/coreclr/jit/instrswasm.h @@ -44,11 +44,11 @@ INST(i64_load, "i64.load", 0, IF_MEMARG, 0x29) INST(f32_load, "f32.load", 0, IF_MEMARG, 0x2A) INST(f64_load, "f64.load", 0, IF_MEMARG, 0x2B) // 5.4.7 Numeric Instructions -// TODO-WASM: Constants -// INST(i32_const, "i32.const", 0, IF_LEB128, 0x41) -// INST(i64_const, "i64.const", 0, IF_LEB128, 0x42) -// INST(f32_const, "f32.const", 0, IF_F32, 0x43) -// INST(f64_const, "f64.const", 0, IF_F64, 0x44) +// Constants +INST(i32_const, "i32.const", 0, IF_SLEB128, 0x41) +INST(i64_const, "i64.const", 0, IF_SLEB128, 0x42) +INST(f32_const, "f32.const", 0, IF_F32, 0x43) +INST(f64_const, "f64.const", 0, IF_F64, 0x44) // Integer comparisons INST(i32_eqz, "i32.eqz", 0, IF_OPCODE, 0x45) INST(i32_eq, "i32.eq", 0, IF_OPCODE, 0x46) diff --git a/src/runtime/src/coreclr/jit/lower.cpp b/src/runtime/src/coreclr/jit/lower.cpp index 0f02d542659..efbc4621366 100644 --- a/src/runtime/src/coreclr/jit/lower.cpp +++ b/src/runtime/src/coreclr/jit/lower.cpp @@ -891,6 +891,12 @@ GenTree* Lowering::LowerSwitch(GenTree* node) noway_assert(jumpCnt >= 2); +#ifdef TARGET_WASM + // Wasm's br_table maps exactly to GT_SWITCH + // + return node->gtNext; +#endif // TARGET_WASM + // Spill the argument to the switch node into a local so that it can be used later. LIR::Use use(switchBBRange, &(node->AsOp()->gtOp1), node); ReplaceWithLclVar(use); @@ -6409,7 +6415,7 @@ void Lowering::OptimizeCallIndirectTargetEvaluation(GenTreeCall* call) { // This node is in the dataflow. See if we can move it ahead of the // range we are moving. - if (m_scratchSideEffects.InterferesWith(comp, cur, /* strict */ true)) + if (cur->OperConsumesFlags() || m_scratchSideEffects.InterferesWith(comp, cur, /* strict */ true)) { // Stop moving the range, but keep going through the rest // of the nodes to unmark them diff --git a/src/runtime/src/coreclr/jit/morph.cpp b/src/runtime/src/coreclr/jit/morph.cpp index e2293dacb4d..fd688eea612 100644 --- a/src/runtime/src/coreclr/jit/morph.cpp +++ b/src/runtime/src/coreclr/jit/morph.cpp @@ -6714,36 +6714,6 @@ GenTree* Compiler::fgMorphConst(GenTree* tree) return fgMorphTree(gtNewStringLiteralNode(iat, pValue)); } - // TODO-CQ: Do this for compCurBB->isRunRarely(). Doing that currently will - // guarantee slow performance for that block. Instead cache the return value - // of CORINFO_HELP_STRCNS and go to cache first giving reasonable perf. - - bool useLazyStrCns = false; - if (compCurBB->KindIs(BBJ_THROW)) - { - useLazyStrCns = true; - } - else if (fgGlobalMorph && compCurStmt->GetRootNode()->IsCall()) - { - // Quick check: if the root node of the current statement happens to be a noreturn call. - GenTreeCall* call = compCurStmt->GetRootNode()->AsCall(); - useLazyStrCns = call->IsNoReturn() || fgIsThrow(call); - } - - if (useLazyStrCns) - { - CorInfoHelpFunc helper = info.compCompHnd->getLazyStringLiteralHelper(tree->AsStrCon()->gtScpHnd); - if (helper != CORINFO_HELP_UNDEF) - { - // For un-important blocks, we want to construct the string lazily - - tree = - gtNewHelperCallNode(helper, TYP_REF, gtNewIconNode(RidFromToken(tree->AsStrCon()->gtSconCPX), TYP_INT), - gtNewIconEmbScpHndNode(tree->AsStrCon()->gtScpHnd)); - return fgMorphTree(tree); - } - } - assert(tree->AsStrCon()->gtScpHnd == info.compScopeHnd || !IsUninitialized(tree->AsStrCon()->gtScpHnd)); LPVOID pValue; diff --git a/src/runtime/src/coreclr/jit/target.h b/src/runtime/src/coreclr/jit/target.h index 62112cfeca9..bfa443dc1f4 100644 --- a/src/runtime/src/coreclr/jit/target.h +++ b/src/runtime/src/coreclr/jit/target.h @@ -1186,6 +1186,11 @@ static_assert(sizeof(target_ssize_t) == TARGET_POINTER_SIZE); // to represent these pointers. typedef ssize_t cnsval_ssize_t; typedef size_t cnsval_size_t; +#elif defined(TARGET_WASM) +// WebAssembly has native support for 64-bit constants even in 32-bit mode, so we need the +// ability to store long constants regardless of pointer size on host or target. +typedef int64_t cnsval_ssize_t; +typedef uint64_t cnsval_size_t; #else typedef target_ssize_t cnsval_ssize_t; typedef target_size_t cnsval_size_t; diff --git a/src/runtime/src/coreclr/jit/utils.cpp b/src/runtime/src/coreclr/jit/utils.cpp index aeb3c76f2e1..5923cafe076 100644 --- a/src/runtime/src/coreclr/jit/utils.cpp +++ b/src/runtime/src/coreclr/jit/utils.cpp @@ -1606,15 +1606,6 @@ void HelperCallProperties::init() nonNullReturn = true; break; - // Heap Allocation helpers that are also pure - case CORINFO_HELP_STRCNS: - - isPure = true; - isAllocator = true; - nonNullReturn = true; - exceptions = ExceptionSetFlags::None; // only can throw OutOfMemory - break; - case CORINFO_HELP_BOX_NULLABLE: // Box Nullable is not a 'pure' function // It has a Byref argument that it reads the contents of. diff --git a/src/runtime/src/coreclr/jit/valuenum.cpp b/src/runtime/src/coreclr/jit/valuenum.cpp index 6dfaf595a33..7cd1f48a075 100644 --- a/src/runtime/src/coreclr/jit/valuenum.cpp +++ b/src/runtime/src/coreclr/jit/valuenum.cpp @@ -14291,10 +14291,6 @@ VNFunc Compiler::fgValueNumberJitHelperMethodVNFunc(CorInfoHelpFunc helpFunc) vnf = VNF_RuntimeHandleClass; break; - case CORINFO_HELP_STRCNS: - vnf = VNF_LazyStrCns; - break; - case CORINFO_HELP_CHKCASTCLASS: case CORINFO_HELP_CHKCASTCLASS_SPECIAL: case CORINFO_HELP_CHKCASTARRAY: diff --git a/src/runtime/src/coreclr/jit/valuenumfuncs.h b/src/runtime/src/coreclr/jit/valuenumfuncs.h index a1b31849ace..d2df32ae4e2 100644 --- a/src/runtime/src/coreclr/jit/valuenumfuncs.h +++ b/src/runtime/src/coreclr/jit/valuenumfuncs.h @@ -165,7 +165,6 @@ ValueNumFuncDef(JitReadyToRunNewLclArr, 3, false, true, false) ValueNumFuncDef(Box, 3, false, true, false) ValueNumFuncDef(BoxNullable, 3, false, false, false) -ValueNumFuncDef(LazyStrCns, 2, false, true, false) // Lazy-initialized string literal (helper) ValueNumFuncDef(InvariantLoad, 1, false, false, false) // Args: 0: (VN of) the address. ValueNumFuncDef(InvariantNonNullLoad, 1, false, true, false) // Args: 0: (VN of) the address. ValueNumFuncDef(Unbox, 2, false, false, false) diff --git a/src/runtime/src/coreclr/nativeaot/Runtime/CMakeLists.txt b/src/runtime/src/coreclr/nativeaot/Runtime/CMakeLists.txt index c3dd534aa2f..dbd19d083a1 100644 --- a/src/runtime/src/coreclr/nativeaot/Runtime/CMakeLists.txt +++ b/src/runtime/src/coreclr/nativeaot/Runtime/CMakeLists.txt @@ -55,6 +55,12 @@ set(COMMON_RUNTIME_SOURCES ${CLR_SRC_NATIVE_DIR}/minipal/xoshiro128pp.c ) +if (CLR_CMAKE_TARGET_UNIX AND NOT CLR_CMAKE_TARGET_ARCH_WASM) + list(APPEND COMMON_RUNTIME_SOURCES + ${RUNTIME_DIR}/asyncsafethreadmap.cpp + ) +endif() + set(SERVER_GC_SOURCES ${GC_DIR}/gceesvr.cpp ${GC_DIR}/gcsvr.cpp diff --git a/src/runtime/src/coreclr/nativeaot/Runtime/threadstore.cpp b/src/runtime/src/coreclr/nativeaot/Runtime/threadstore.cpp index 498d36d94d8..5ba546e3893 100644 --- a/src/runtime/src/coreclr/nativeaot/Runtime/threadstore.cpp +++ b/src/runtime/src/coreclr/nativeaot/Runtime/threadstore.cpp @@ -22,6 +22,8 @@ #include "TargetPtrs.h" #include "yieldprocessornormalized.h" #include +#include +#include "asyncsafethreadmap.h" #include "slist.inl" @@ -143,6 +145,14 @@ void ThreadStore::AttachCurrentThread(bool fAcquireThreadStoreLock) pAttachingThread->m_ThreadStateFlags = Thread::TSF_Attached; pTS->m_ThreadList.PushHead(pAttachingThread); + +#if defined(TARGET_UNIX) && !defined(TARGET_WASM) + if (!InsertThreadIntoAsyncSafeMap(pAttachingThread->m_threadId, pAttachingThread)) + { + PalPrintFatalError("\nFailed to insert thread into async-safe map due to out of memory.\n"); + RhFailFast(); + } +#endif // TARGET_UNIX && !TARGET_WASM } // static @@ -188,6 +198,9 @@ void ThreadStore::DetachCurrentThread() pTS->m_ThreadList.RemoveFirst(pDetachingThread); // tidy up GC related stuff (release allocation context, etc..) pDetachingThread->Detach(); +#if defined(TARGET_UNIX) && !defined(TARGET_WASM) + RemoveThreadFromAsyncSafeMap(pDetachingThread->m_threadId, pDetachingThread); +#endif } // post-mortem clean up. @@ -352,6 +365,13 @@ EXTERN_C RuntimeThreadLocals* RhpGetThread() return &tls_CurrentThread; } +#if defined(TARGET_UNIX) && !defined(TARGET_WASM) +Thread * ThreadStore::GetCurrentThreadIfAvailableAsyncSafe() +{ + return (Thread*)FindThreadInAsyncSafeMap(minipal_get_current_thread_id_no_cache()); +} +#endif // TARGET_UNIX && !TARGET_WASM + #endif // !DACCESS_COMPILE #ifdef _WIN32 diff --git a/src/runtime/src/coreclr/nativeaot/Runtime/threadstore.h b/src/runtime/src/coreclr/nativeaot/Runtime/threadstore.h index 0ebe8e7d39a..694608e70e6 100644 --- a/src/runtime/src/coreclr/nativeaot/Runtime/threadstore.h +++ b/src/runtime/src/coreclr/nativeaot/Runtime/threadstore.h @@ -47,6 +47,7 @@ class ThreadStore static Thread * RawGetCurrentThread(); static Thread * GetCurrentThread(); static Thread * GetCurrentThreadIfAvailable(); + static Thread * GetCurrentThreadIfAvailableAsyncSafe(); static PTR_Thread GetSuspendingThread(); static void AttachCurrentThread(); static void AttachCurrentThread(bool fAcquireThreadStoreLock); diff --git a/src/runtime/src/coreclr/nativeaot/Runtime/unix/PalUnix.cpp b/src/runtime/src/coreclr/nativeaot/Runtime/unix/PalUnix.cpp index 476633637ce..b3fc0daf4d5 100644 --- a/src/runtime/src/coreclr/nativeaot/Runtime/unix/PalUnix.cpp +++ b/src/runtime/src/coreclr/nativeaot/Runtime/unix/PalUnix.cpp @@ -1017,24 +1017,24 @@ static struct sigaction g_previousActivationHandler; static void ActivationHandler(int code, siginfo_t* siginfo, void* context) { - // Only accept activations from the current process - if (siginfo->si_pid == getpid() + Thread* pThread = ThreadStore::GetCurrentThreadIfAvailableAsyncSafe(); + if (pThread) + { + // Only accept activations from the current process + if (siginfo->si_pid == getpid() #ifdef HOST_APPLE - // On Apple platforms si_pid is sometimes 0. It was confirmed by Apple to be expected, as the si_pid is tracked at the process level. So when multiple - // signals are in flight in the same process at the same time, it may be overwritten / zeroed. - || siginfo->si_pid == 0 + // On Apple platforms si_pid is sometimes 0. It was confirmed by Apple to be expected, as the si_pid is tracked at the process level. So when multiple + // signals are in flight in the same process at the same time, it may be overwritten / zeroed. + || siginfo->si_pid == 0 #endif - ) - { - // Make sure that errno is not modified - int savedErrNo = errno; - Thread::HijackCallback((NATIVE_CONTEXT*)context, NULL); - errno = savedErrNo; - } + ) + { + // Make sure that errno is not modified + int savedErrNo = errno; + Thread::HijackCallback((NATIVE_CONTEXT*)context, pThread); + errno = savedErrNo; + } - Thread* pThread = ThreadStore::GetCurrentThreadIfAvailable(); - if (pThread) - { pThread->SetActivationPending(false); } diff --git a/src/runtime/src/coreclr/nativeaot/docs/android-bionic.md b/src/runtime/src/coreclr/nativeaot/docs/android-bionic.md index df6ac78c7ea..8a7aa566466 100644 --- a/src/runtime/src/coreclr/nativeaot/docs/android-bionic.md +++ b/src/runtime/src/coreclr/nativeaot/docs/android-bionic.md @@ -20,7 +20,7 @@ To build for Bionic: ```sh $ dotnet publish -r linux-bionic-arm64 -p:DisableUnsupportedError=true -p:PublishAotUsingRuntimePack=true ``` -* You should have a binary under `bin\Release\net10.0\linux-bionic-arm64\publish`. Copy it to an Android device. Either `adb push` or using some GUI. +* You should have a binary under `bin\Release\net11.0\linux-bionic-arm64\publish`. Copy it to an Android device. Either `adb push` or using some GUI. * You can probably run it with `adb shell`, but I used Termux: open Termux, give it access to file system by running `termux-setup-storage`. This will give you access to phone storage under `~/storage`. Copy the binary from `~/storage/...` to `~` (internal storage is not executable and you won't be able to run stuff from it). Then `chmod +x HelloBionic` and `./HelloBionic`. You should see Hello World. Command line apps are not very interesting for Android. The more interesting scenario are shared libraries that can be called into from Java/Kotlin through JNI. This is very similar to building shared libraries in other languages like C/C++/Rust. `PublishAot` allows building shared libraries that are callable from non-.NET languages. See https://learn.microsoft.com/dotnet/core/deploying/native-aot/interop#native-exports. diff --git a/src/runtime/src/coreclr/nativeaot/docs/compiling.md b/src/runtime/src/coreclr/nativeaot/docs/compiling.md index 818d2875f71..6d9252e71d6 100644 --- a/src/runtime/src/coreclr/nativeaot/docs/compiling.md +++ b/src/runtime/src/coreclr/nativeaot/docs/compiling.md @@ -8,7 +8,7 @@ The rest of this document covers advanced topics only. For using daily builds, you need to make sure the `nuget.config` file for your project contains the following package sources under the `` element: ```xml - + ``` @@ -21,13 +21,13 @@ from the project's root directory. New package sources must be added after the ` Once you have added the package sources, add a reference to the ILCompiler package either by running ```bash -> dotnet add package Microsoft.DotNet.ILCompiler -v 10.0.0-* +> dotnet add package Microsoft.DotNet.ILCompiler -v 11.0.0-* ``` or by adding the following element to the project file: ```xml - + ``` @@ -54,7 +54,7 @@ For using daily builds according to the instructions above, in addition to the ` ``` -Replace `9.0.0-alpha.1.23456.7` with the latest version from the [dotnet10](https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet10/NuGet/Microsoft.DotNet.ILCompiler/) feed. +Replace `9.0.0-alpha.1.23456.7` with the latest version from the [dotnet11](https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet11/NuGet/Microsoft.DotNet.ILCompiler/) feed. Note that it is important to use _the same version_ for both packages to avoid potential hard-to-debug issues. After adding the package reference, you may publish for win-arm64 as usual: ```bash > dotnet publish -r win-arm64 diff --git a/src/runtime/src/coreclr/pal/src/exception/signal.cpp b/src/runtime/src/coreclr/pal/src/exception/signal.cpp index 2fdd83b88d2..b13c2865900 100644 --- a/src/runtime/src/coreclr/pal/src/exception/signal.cpp +++ b/src/runtime/src/coreclr/pal/src/exception/signal.cpp @@ -936,22 +936,20 @@ static void inject_activation_handler(int code, siginfo_t *siginfo, void *contex CONTEXTToNativeContext(&winContext, ucontext); } } + + // Call the original handler when it is not ignored or default (terminate). + if (g_previous_activation.sa_flags & SA_SIGINFO) + { + _ASSERTE(g_previous_activation.sa_sigaction != NULL); + g_previous_activation.sa_sigaction(code, siginfo, context); + } else { - // Call the original handler when it is not ignored or default (terminate). - if (g_previous_activation.sa_flags & SA_SIGINFO) - { - _ASSERTE(g_previous_activation.sa_sigaction != NULL); - g_previous_activation.sa_sigaction(code, siginfo, context); - } - else + if (g_previous_activation.sa_handler != SIG_IGN && + g_previous_activation.sa_handler != SIG_DFL) { - if (g_previous_activation.sa_handler != SIG_IGN && - g_previous_activation.sa_handler != SIG_DFL) - { - _ASSERTE(g_previous_activation.sa_handler != NULL); - g_previous_activation.sa_handler(code); - } + _ASSERTE(g_previous_activation.sa_handler != NULL); + g_previous_activation.sa_handler(code); } } } diff --git a/src/runtime/src/coreclr/runtime/asyncsafethreadmap.cpp b/src/runtime/src/coreclr/runtime/asyncsafethreadmap.cpp new file mode 100644 index 00000000000..5c5882589a2 --- /dev/null +++ b/src/runtime/src/coreclr/runtime/asyncsafethreadmap.cpp @@ -0,0 +1,126 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +#include "common.h" + +#include "asyncsafethreadmap.h" + +// Async safe lock free thread map for use in signal handlers + +struct ThreadEntry +{ + size_t osThread; + void* pThread; +}; + +#define MAX_THREADS_IN_SEGMENT 256 + +struct ThreadSegment +{ + ThreadEntry entries[MAX_THREADS_IN_SEGMENT]; + ThreadSegment* pNext; +}; + +static ThreadSegment *s_pAsyncSafeThreadMapHead = NULL; + +bool InsertThreadIntoAsyncSafeMap(size_t osThread, void* pThread) +{ + size_t startIndex = osThread % MAX_THREADS_IN_SEGMENT; + + ThreadSegment* pSegment = s_pAsyncSafeThreadMapHead; + ThreadSegment** ppSegment = &s_pAsyncSafeThreadMapHead; + while (true) + { + if (pSegment == NULL) + { + // Need to add a new segment + ThreadSegment* pNewSegment = new (nothrow) ThreadSegment(); + if (pNewSegment == NULL) + { + // Memory allocation failed + return false; + } + + memset(pNewSegment, 0, sizeof(ThreadSegment)); + ThreadSegment* pExpected = NULL; + if (!__atomic_compare_exchange_n( + ppSegment, + &pExpected, + pNewSegment, + false /* weak */, + __ATOMIC_RELEASE /* success_memorder */, + __ATOMIC_RELAXED /* failure_memorder */)) + { + // Another thread added the segment first + delete pNewSegment; + pNewSegment = pExpected; + } + + pSegment = pNewSegment; + } + for (size_t i = 0; i < MAX_THREADS_IN_SEGMENT; i++) + { + size_t index = (startIndex + i) % MAX_THREADS_IN_SEGMENT; + + size_t expected = 0; + if (__atomic_compare_exchange_n( + &pSegment->entries[index].osThread, + &expected, + osThread, + false /* weak */, + __ATOMIC_RELEASE /* success_memorder */, + __ATOMIC_RELAXED /* failure_memorder */)) + { + // Successfully inserted + // Use atomic store with release to ensure proper ordering + __atomic_store_n(&pSegment->entries[index].pThread, pThread, __ATOMIC_RELEASE); + return true; + } + } + + ppSegment = &pSegment->pNext; + pSegment = __atomic_load_n(&pSegment->pNext, __ATOMIC_ACQUIRE); + } +} + +void RemoveThreadFromAsyncSafeMap(size_t osThread, void* pThread) +{ + size_t startIndex = osThread % MAX_THREADS_IN_SEGMENT; + + ThreadSegment* pSegment = s_pAsyncSafeThreadMapHead; + while (pSegment) + { + for (size_t i = 0; i < MAX_THREADS_IN_SEGMENT; i++) + { + size_t index = (startIndex + i) % MAX_THREADS_IN_SEGMENT; + if (pSegment->entries[index].pThread == pThread) + { + // Found the entry, remove it + pSegment->entries[index].pThread = NULL; + __atomic_exchange_n(&pSegment->entries[index].osThread, (size_t)0, __ATOMIC_RELEASE); + return; + } + } + pSegment = __atomic_load_n(&pSegment->pNext, __ATOMIC_ACQUIRE); + } +} + +void *FindThreadInAsyncSafeMap(size_t osThread) +{ + size_t startIndex = osThread % MAX_THREADS_IN_SEGMENT; + ThreadSegment* pSegment = s_pAsyncSafeThreadMapHead; + while (pSegment) + { + for (size_t i = 0; i < MAX_THREADS_IN_SEGMENT; i++) + { + size_t index = (startIndex + i) % MAX_THREADS_IN_SEGMENT; + // Use acquire to synchronize with release in InsertThreadIntoAsyncSafeMap + if (__atomic_load_n(&pSegment->entries[index].osThread, __ATOMIC_ACQUIRE) == osThread) + { + return pSegment->entries[index].pThread; + } + } + pSegment = __atomic_load_n(&pSegment->pNext, __ATOMIC_ACQUIRE); + } + return NULL; +} diff --git a/src/runtime/src/coreclr/runtime/asyncsafethreadmap.h b/src/runtime/src/coreclr/runtime/asyncsafethreadmap.h new file mode 100644 index 00000000000..b7d44f84da4 --- /dev/null +++ b/src/runtime/src/coreclr/runtime/asyncsafethreadmap.h @@ -0,0 +1,27 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +#ifndef __ASYNCSAFETHREADMAP_H__ +#define __ASYNCSAFETHREADMAP_H__ + +#if defined(TARGET_UNIX) && !defined(TARGET_WASM) + +// Insert a thread into the async-safe map. +// * osThread - The OS thread ID to insert. +// * pThread - A pointer to the thread object to associate with the OS thread ID. +// * return true if the insertion was successful, false otherwise (OOM). +bool InsertThreadIntoAsyncSafeMap(size_t osThread, void* pThread); + +// Remove a thread from the async-safe map. +// * osThread - The OS thread ID to remove. +// * pThread - A pointer to the thread object associated with the OS thread ID. +void RemoveThreadFromAsyncSafeMap(size_t osThread, void* pThread); + +// Find a thread in the async-safe map. +// * osThread = The OS thread ID to search for. +// * return - A pointer to the thread object associated with the OS thread ID, or NULL if not found. +void* FindThreadInAsyncSafeMap(size_t osThread); + +#endif // TARGET_UNIX && !TARGET_WASM + +#endif // __ASYNCSAFETHREADMAP_H__ diff --git a/src/runtime/src/coreclr/scripts/superpmi_aspnet2.py b/src/runtime/src/coreclr/scripts/superpmi_aspnet2.py index 40ae796f7a6..41b426cfbd5 100644 --- a/src/runtime/src/coreclr/scripts/superpmi_aspnet2.py +++ b/src/runtime/src/coreclr/scripts/superpmi_aspnet2.py @@ -272,7 +272,7 @@ def run_crank_scenario(crank_app: Path, scenario_name: str, framework: str, work def main(): parser = argparse.ArgumentParser(description="Cross-platform crank runner.") parser.add_argument("--core_root", help="Path to built runtime bits (CORE_ROOT).") - parser.add_argument("--tfm", default="net10.0", help="Target Framework Moniker (e.g., net10.0).") + parser.add_argument("--tfm", default="net11.0", help="Target Framework Moniker (e.g., net11.0).") parser.add_argument("--output_mch", help="File path to copy the resulting merged .mch to (expects a file path, not a directory).") parser.add_argument("--work_dir", help="Optional path to a directory in which a new working directory will be created. If specified, a new subdirectory with a random name prefixed with 'aspnet2_' will be created inside this directory. Otherwise a system temp directory is used.") parser.add_argument("--dryrun", action="store_true", help="Run benchmarks only without collecting SPMI data or generating .mch files.") diff --git a/src/runtime/src/coreclr/scripts/superpmi_benchmarks.py b/src/runtime/src/coreclr/scripts/superpmi_benchmarks.py index bc1319a2b8a..d64ab61cf80 100644 --- a/src/runtime/src/coreclr/scripts/superpmi_benchmarks.py +++ b/src/runtime/src/coreclr/scripts/superpmi_benchmarks.py @@ -184,7 +184,7 @@ def build_and_run(coreclr_args, output_mch_name): # Start with a "dotnet --info" to see what we've got. run_command([dotnet_exe, "--info"]) - tfm = "net10.0" + tfm = "net11.0" os.environ["PERFLAB_TARGET_FRAMEWORKS"] = tfm env_for_restore = os.environ.copy() diff --git a/src/runtime/src/coreclr/tools/Common/Compiler/DependencyAnalysis/MethodReadOnlyDataNode.cs b/src/runtime/src/coreclr/tools/Common/Compiler/DependencyAnalysis/MethodReadOnlyDataNode.cs index 35557a1d8aa..6532f6c4be1 100644 --- a/src/runtime/src/coreclr/tools/Common/Compiler/DependencyAnalysis/MethodReadOnlyDataNode.cs +++ b/src/runtime/src/coreclr/tools/Common/Compiler/DependencyAnalysis/MethodReadOnlyDataNode.cs @@ -34,7 +34,7 @@ public override ObjectNodeSection GetSection(NodeFactory factory) public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { - sb.Append("__readonlydata_" + nameMangler.GetMangledMethodName(_owningMethod)); + sb.Append("__readonlydata_"u8).Append(nameMangler.GetMangledMethodName(_owningMethod)); } public int Offset => 0; public override bool IsShareable => true; diff --git a/src/runtime/src/coreclr/tools/Common/Compiler/NameMangler.cs b/src/runtime/src/coreclr/tools/Common/Compiler/NameMangler.cs index 8e327e85ad8..91879a359e7 100644 --- a/src/runtime/src/coreclr/tools/Common/Compiler/NameMangler.cs +++ b/src/runtime/src/coreclr/tools/Common/Compiler/NameMangler.cs @@ -23,7 +23,7 @@ public NameMangler(NodeMangler nodeMangler) public NodeMangler NodeMangler { get; private set; } #endif - public abstract string CompilationUnitPrefix { get; set; } + public abstract Utf8String CompilationUnitPrefix { get; set; } public abstract Utf8String SanitizeName(Utf8String s); diff --git a/src/runtime/src/coreclr/tools/Common/Compiler/NativeAotNameMangler.cs b/src/runtime/src/coreclr/tools/Common/Compiler/NativeAotNameMangler.cs index 2f00a4fb19b..427ee9e1e9c 100644 --- a/src/runtime/src/coreclr/tools/Common/Compiler/NativeAotNameMangler.cs +++ b/src/runtime/src/coreclr/tools/Common/Compiler/NativeAotNameMangler.cs @@ -22,13 +22,13 @@ public NativeAotNameMangler(NodeMangler nodeMangler) : base(nodeMangler) } #endif - private string _compilationUnitPrefix; + private Utf8String _compilationUnitPrefix; - public override string CompilationUnitPrefix + public override Utf8String CompilationUnitPrefix { get { - Debug.Assert(_compilationUnitPrefix != null); + Debug.Assert(!_compilationUnitPrefix.IsNull); return _compilationUnitPrefix; } set { _compilationUnitPrefix = SanitizeNameWithHash(value); } @@ -170,6 +170,31 @@ private string SanitizeNameWithHash(string literal) return mangledName; } + private Utf8String SanitizeNameWithHash(Utf8String literal) + { + Utf8String mangledName = SanitizeName(literal); + + if (mangledName.Length > 30) + mangledName = new Utf8String(mangledName.AsSpan().Slice(0, 30).ToArray()); + + if (!mangledName.AsSpan().SequenceEqual(literal.AsSpan())) + { + byte[] hash; + lock (this) + { + // Use SHA256 hash here to provide a high degree of uniqueness to symbol names without requiring them to be long + // This hash function provides an exceedingly high likelihood that no two strings will be given equal symbol names + // This is not considered used for security purpose; however collisions would be highly unfortunate as they will cause compilation + // failure. + hash = SHA256.HashData(literal.AsSpan()); + } + + mangledName += "_" + Convert.ToHexString(hash); + } + + return mangledName; + } + /// /// Dictionary given a mangled name for a given /// diff --git a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/CoffObjectWriter.cs b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/CoffObjectWriter.cs index 11bc8b65729..dda356a81ab 100644 --- a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/CoffObjectWriter.cs +++ b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/CoffObjectWriter.cs @@ -14,6 +14,7 @@ using System.Text; using ILCompiler.DependencyAnalysis; using ILCompiler.DependencyAnalysisFramework; +using Internal.Text; using Internal.TypeSystem; using static ILCompiler.DependencyAnalysis.RelocType; using static ILCompiler.ObjectWriter.CoffObjectWriter.CoffRelocationType; @@ -46,16 +47,16 @@ namespace ILCompiler.ObjectWriter /// internal partial class CoffObjectWriter : ObjectWriter { - protected sealed record SectionDefinition(CoffSectionHeader Header, Stream Stream, List Relocations, string ComdatName, string SymbolName); + protected sealed record SectionDefinition(CoffSectionHeader Header, Stream Stream, List Relocations, Utf8String ComdatName, Utf8String SymbolName); protected readonly Machine _machine; protected readonly List _sections = new(); // Symbol table private readonly List _symbols = new(); - private readonly Dictionary _symbolNameToIndex = new(StringComparer.Ordinal); + private readonly Dictionary _symbolNameToIndex = new(); private readonly Dictionary _sectionNumberToComdatAuxRecord = new(); - private readonly HashSet _referencedMethods = new(); + private readonly HashSet _referencedMethods = new(); private static readonly ObjectNodeSection GfidsSection = new ObjectNodeSection(".gfids$y", SectionType.ReadOnly); private static readonly ObjectNodeSection DebugTypesSection = new ObjectNodeSection(".debug$T", SectionType.ReadOnly); @@ -76,7 +77,7 @@ public CoffObjectWriter(NodeFactory factory, ObjectWritingOptions options, Outpu }; } - private protected override void CreateSection(ObjectNodeSection section, string comdatName, string symbolName, int sectionIndex, Stream sectionStream) + private protected override void CreateSection(ObjectNodeSection section, Utf8String comdatName, Utf8String symbolName, int sectionIndex, Stream sectionStream) { var sectionHeader = new CoffSectionHeader { @@ -108,7 +109,7 @@ private protected override void CreateSection(ObjectNodeSection section, string SectionCharacteristics.MemDiscardable; } - if (comdatName is not null) + if (!comdatName.IsNull) { sectionHeader.SectionCharacteristics |= SectionCharacteristics.LinkerComdat; @@ -140,7 +141,7 @@ private protected override void CreateSection(ObjectNodeSection section, string }); _symbols.Add(auxRecord); - if (symbolName is not null) + if (!symbolName.IsNull) { _symbolNameToIndex.Add(symbolName, (uint)_symbols.Count); _symbols.Add(new CoffSymbol @@ -186,7 +187,7 @@ protected internal override unsafe void EmitRelocation( long offset, Span data, RelocType relocType, - string symbolName, + Utf8String symbolName, long addend) { if (relocType is IMAGE_REL_BASED_RELPTR32) @@ -206,14 +207,14 @@ protected internal override unsafe void EmitRelocation( base.EmitRelocation(sectionIndex, offset, data, relocType, symbolName, 0); } - private protected override void EmitReferencedMethod(string symbolName) + private protected override void EmitReferencedMethod(Utf8String symbolName) { _referencedMethods.Add(symbolName); } private protected override void EmitSymbolTable( - IDictionary definedSymbols, - SortedSet undefinedSymbols) + IDictionary definedSymbols, + SortedSet undefinedSymbols) { Feat00Flags feat00Flags = _machine is Machine.I386 ? Feat00Flags.SafeSEH : 0; @@ -734,7 +735,7 @@ private enum CoffSymbolClass : byte private sealed class CoffSymbol : CoffSymbolRecord { - public string Name { get; set; } + public Utf8String Name { get; set; } public uint Value { get; set; } public uint SectionIndex { get; set; } public ushort Type { get; set; } @@ -763,13 +764,12 @@ public override void Write(Stream stream, CoffStringTable stringTable, bool isBi { Span buffer = stackalloc byte[isBigObj ? BigObjSize : RegularSize]; - int nameBytes = Encoding.UTF8.GetByteCount(Name); - if (nameBytes <= NameSize) + if (Name.Length <= NameSize) { - Encoding.UTF8.GetBytes(Name, buffer); - if (nameBytes < NameSize) + Name.AsSpan().CopyTo(buffer); + if (Name.Length < NameSize) { - buffer.Slice(nameBytes, 8 - nameBytes).Clear(); + buffer.Slice(Name.Length, 8 - Name.Length).Clear(); } } else @@ -853,7 +853,7 @@ protected sealed class CoffStringTable : StringTableBuilder { public new uint Size => (uint)(base.Size + 4); - public new uint GetStringOffset(string text) + public new uint GetStringOffset(Utf8String text) { return base.GetStringOffset(text) + 4; } diff --git a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/ElfObjectWriter.cs b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/ElfObjectWriter.cs index 8cdeb8ee7aa..3d3586fbd64 100644 --- a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/ElfObjectWriter.cs +++ b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/ElfObjectWriter.cs @@ -10,6 +10,7 @@ using System.Reflection; using ILCompiler.DependencyAnalysis; using ILCompiler.DependencyAnalysisFramework; +using Internal.Text; using Internal.TypeSystem; using static ILCompiler.DependencyAnalysis.RelocType; using static ILCompiler.ObjectWriter.EabiNative; @@ -40,10 +41,10 @@ internal sealed partial class ElfObjectWriter : UnixObjectWriter private readonly List _sections = new(); private readonly List _symbols = new(); private uint _localSymbolCount; - private readonly Dictionary _comdatNameToElfSection = new(StringComparer.Ordinal); + private readonly Dictionary _comdatNameToElfSection = new(); // Symbol table - private readonly Dictionary _symbolNameToIndex = new(); + private readonly Dictionary _symbolNameToIndex = new(); private static readonly ObjectNodeSection ArmAttributesSection = new ObjectNodeSection(".ARM.attributes", SectionType.ReadOnly); private static readonly ObjectNodeSection ArmTextThunkSection = new ObjectNodeSection(".text.thunks", SectionType.Executable); @@ -69,7 +70,7 @@ public ElfObjectWriter(NodeFactory factory, ObjectWritingOptions options) _symbols.Add(new ElfSymbol {}); } - private protected override void CreateSection(ObjectNodeSection section, string comdatName, string symbolName, int sectionIndex, Stream sectionStream) + private protected override void CreateSection(ObjectNodeSection section, Utf8String comdatName, Utf8String symbolName, int sectionIndex, Stream sectionStream) { string sectionName = section.Name == "rdata" ? ".rodata" : @@ -114,7 +115,7 @@ private protected override void CreateSection(ObjectNodeSection section, string }; } - if (comdatName is not null) + if (!comdatName.IsNull) { flags |= SHF_GROUP; if (!_comdatNameToElfSection.TryGetValue(comdatName, out groupSection)) @@ -154,7 +155,7 @@ private protected override void CreateSection(ObjectNodeSection section, string }); // Emit section symbol into symbol table (for COMDAT the defining symbol is section symbol) - if (comdatName is null) + if (comdatName.IsNull) { _symbolNameToIndex[sectionName] = (uint)_symbols.Count; _symbols.Add(new ElfSymbol @@ -174,7 +175,7 @@ private protected override void CreateSection(ObjectNodeSection section, string }); } - base.CreateSection(section, comdatName, symbolName ?? sectionName, sectionIndex, sectionStream); + base.CreateSection(section, comdatName, symbolName.IsNull ? sectionName : symbolName, sectionIndex, sectionStream); } protected internal override void UpdateSectionAlignment(int sectionIndex, int alignment) @@ -188,7 +189,7 @@ protected internal override unsafe void EmitRelocation( long offset, Span data, RelocType relocType, - string symbolName, + Utf8String symbolName, long addend) { fixed (byte *pData = data) @@ -265,11 +266,11 @@ protected internal override unsafe void EmitRelocation( private static string GetRiscV64SymbolNameForPcrelRelocation(int sectionIndex, long offset) => $".Lpcrel_hi{sectionIndex}_{offset:x}"; private protected override void EmitSymbolTable( - IDictionary definedSymbols, - SortedSet undefinedSymbols) + IDictionary definedSymbols, + SortedSet undefinedSymbols) { List sortedSymbols = new(definedSymbols.Count + undefinedSymbols.Count); - foreach ((string name, SymbolDefinition definition) in definedSymbols) + foreach ((Utf8String name, SymbolDefinition definition) in definedSymbols) { var section = _sections[definition.SectionIndex]; var type = @@ -290,7 +291,7 @@ private protected override void EmitSymbolTable( int thunkSectionIndex = useArmThunks ? GetOrCreateSection(ArmTextThunkSection).SectionIndex : 0; int thunkSymbolsIndex = 0; - foreach (string externSymbol in undefinedSymbols) + foreach (Utf8String externSymbol in undefinedSymbols) { if (!_symbolNameToIndex.ContainsKey(externSymbol)) { @@ -316,7 +317,7 @@ private protected override void EmitSymbolTable( } } - sortedSymbols.Sort((symA, symB) => string.CompareOrdinal(symA.Name, symB.Name)); + sortedSymbols.Sort((symA, symB) => Comparer.Default.Compare(symA.Name, symB.Name)); _localSymbolCount = (uint)_symbols.Count; _symbols.AddRange(sortedSymbols); uint symbolIndex = _localSymbolCount; @@ -337,7 +338,7 @@ private protected override void EmitSymbolTable( Span relocationEntry = stackalloc byte[8]; var relocationStream = new MemoryStream(8 * undefinedSymbols.Count); _sections[thunkSectionWriter.SectionIndex].RelocationStream = relocationStream; - foreach (string externSymbol in undefinedSymbols) + foreach (Utf8String externSymbol in undefinedSymbols) { if (_symbolNameToIndex.TryGetValue($"{externSymbol}$thunk", out uint thunkSymbolIndex)) { @@ -356,7 +357,7 @@ private protected override void EmitSymbolTable( } // Update group sections links - foreach ((string comdatName, ElfSectionDefinition groupSection) in _comdatNameToElfSection) + foreach ((Utf8String comdatName, ElfSectionDefinition groupSection) in _comdatNameToElfSection) { groupSection.SectionHeader.Info = (uint)_symbolNameToIndex[comdatName]; } @@ -669,7 +670,7 @@ private void EmitObjectFile(Stream outputFileStream) // Reserve all symbol names foreach (var symbol in _symbols) { - if (symbol.Name is not null) + if (!symbol.Name.IsNull) { _stringTable.ReserveString(symbol.Name); } @@ -1039,7 +1040,7 @@ public void Write(Stream stream) private sealed class ElfSymbol { - public string Name { get; init; } + public Utf8String Name { get; init; } public ulong Value { get; init; } public ulong Size { get; init; } public ElfSectionDefinition Section { get; init; } @@ -1062,7 +1063,7 @@ public void Write(Stream stream, ElfStringTable stringTable) (ushort)SHN_XINDEX : (Section is not null ? (ushort)Section.SectionIndex : (ushort)0u); - BinaryPrimitives.WriteUInt32LittleEndian(buffer, Name is not null ? stringTable.GetStringOffset(Name) : 0); + BinaryPrimitives.WriteUInt32LittleEndian(buffer, !Name.IsNull ? stringTable.GetStringOffset(Name) : 0); if (typeof(TSize) == typeof(uint)) { TSize.CreateChecked(Value).WriteLittleEndian(buffer.Slice(4)); diff --git a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/MachObjectWriter.cs b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/MachObjectWriter.cs index 46ea1a542be..ef8ee1bf507 100644 --- a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/MachObjectWriter.cs +++ b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/MachObjectWriter.cs @@ -12,6 +12,7 @@ using System.Text; using ILCompiler.DependencyAnalysis; using ILCompiler.DependencyAnalysisFramework; +using Internal.Text; using Internal.TypeSystem; using static ILCompiler.DependencyAnalysis.RelocType; using static ILCompiler.ObjectWriter.MachNative; @@ -62,10 +63,10 @@ internal sealed partial class MachObjectWriter : UnixObjectWriter private readonly List _sections = new(); // Symbol table - private readonly Dictionary _symbolNameToIndex = new(); + private readonly Dictionary _symbolNameToIndex = new(); private readonly List _symbolTable = new(); private readonly MachDynamicLinkEditSymbolTable _dySymbolTable = new(); - private readonly Dictionary _rangeSymbols = new(); + private readonly Dictionary _rangeSymbols = new(); /// /// Base symbol to use for relocations. @@ -316,7 +317,7 @@ private protected override void EmitObjectFile(Stream outputFileStream) stringTable.Write(outputFileStream); } - private protected override void CreateSection(ObjectNodeSection section, string comdatName, string symbolName, int sectionIndex, Stream sectionStream) + private protected override void CreateSection(ObjectNodeSection section, Utf8String comdatName, Utf8String symbolName, int sectionIndex, Stream sectionStream) { string segmentName = section.Name switch { @@ -374,7 +375,7 @@ private protected override void CreateSection(ObjectNodeSection section, string _sections.Add(machSection); - base.CreateSection(section, comdatName, symbolName ?? $"lsection{sectionIndex}", sectionIndex, sectionStream); + base.CreateSection(section, comdatName, symbolName.IsNull ? $"lsection{sectionIndex}" : symbolName, sectionIndex, sectionStream); } protected internal override void UpdateSectionAlignment(int sectionIndex, int alignment) @@ -384,7 +385,7 @@ protected internal override void UpdateSectionAlignment(int sectionIndex, int al machSection.Log2Alignment = Math.Max(machSection.Log2Alignment, (uint)BitOperations.Log2((uint)alignment)); } - private protected override void EmitSymbolRangeDefinition(string rangeNodeName, string startSymbolName, string endSymbolName, SymbolDefinition endSymbol) + private protected override void EmitSymbolRangeDefinition(Utf8String rangeNodeName, Utf8String startSymbolName, Utf8String endSymbolName, SymbolDefinition endSymbol) { // Mach has a few characteristics that make range symbols more difficult to emit: // - Emitting two symbols in the same location is not well supported by the Apple linker. @@ -399,13 +400,13 @@ protected internal override unsafe void EmitRelocation( long offset, Span data, RelocType relocType, - string symbolName, + Utf8String symbolName, long addend) { // We don't emit the range node name into the image as it overlaps with another symbol. // For relocs to it, instead target the start symbol. // For the "symbol size" reloc, we'll handle it later when we emit relocations in the Mach format. - if (_rangeSymbols.TryGetValue(symbolName, out (string StartNode, string, int Size) range)) + if (_rangeSymbols.TryGetValue(symbolName, out (Utf8String StartNode, Utf8String, int Size) range)) { if (relocType == RelocType.IMAGE_REL_SYMBOL_SIZE) { @@ -425,7 +426,7 @@ protected internal override unsafe void EmitRelocation( _sections[sectionIndex].IsDwarfSection) { // DWARF section to DWARF section relocation - if (symbolName.StartsWith('.')) + if (symbolName.AsSpan().StartsWith((byte)'.')) { switch (relocType) { @@ -504,8 +505,8 @@ protected internal override unsafe void EmitRelocation( } private protected override void EmitSymbolTable( - IDictionary definedSymbols, - SortedSet undefinedSymbols) + IDictionary definedSymbols, + SortedSet undefinedSymbols) { // We already emitted symbols for all non-debug sections in EmitSectionsAndLayout, // these symbols are local and we need to account for them. @@ -515,7 +516,7 @@ private protected override void EmitSymbolTable( // Sort and insert all defined symbols var sortedDefinedSymbols = new List(definedSymbols.Count); - foreach ((string name, SymbolDefinition definition) in definedSymbols) + foreach ((Utf8String name, SymbolDefinition definition) in definedSymbols) { MachSection section = _sections[definition.SectionIndex]; // Sections in our object file should not be altered during native linking as the runtime @@ -530,7 +531,7 @@ private protected override void EmitSymbolTable( Type = (byte)(N_SECT | N_EXT | (definition.Global ? 0 : N_PEXT)), }); } - sortedDefinedSymbols.Sort((symA, symB) => string.CompareOrdinal(symA.Name, symB.Name)); + sortedDefinedSymbols.Sort((symA, symB) => Comparer.Default.Compare(symA.Name, symB.Name)); foreach (MachSymbol definedSymbol in sortedDefinedSymbols) { _symbolTable.Add(definedSymbol); @@ -549,7 +550,7 @@ private protected override void EmitSymbolTable( undefinedSymbols.Add(_baseSymbolName); } - foreach (string externSymbol in undefinedSymbols) + foreach (Utf8String externSymbol in undefinedSymbols) { if (!_symbolNameToIndex.ContainsKey(externSymbol)) { @@ -597,10 +598,10 @@ private void EmitRelocationsX64(int sectionIndex, List reloc foreach (SymbolicRelocation symbolicRelocation in relocationList) { if (symbolicRelocation.Type == RelocType.IMAGE_REL_SYMBOL_SIZE - && _rangeSymbols.TryGetValue(symbolicRelocation.SymbolName, out (string, string, int) range)) + && _rangeSymbols.TryGetValue(symbolicRelocation.SymbolName, out (Utf8String, Utf8String, int) range)) { // Represent as X86_64_RELOC_SUBTRACTOR + X86_64_RELOC_UNSIGNED. - (string StartNode, string EndNode, int Size) = range; + (Utf8String StartNode, Utf8String EndNode, int Size) = range; uint startSymbolIndex = _symbolNameToIndex[StartNode]; uint endSymbolIndex = _symbolNameToIndex[EndNode]; sectionRelocations.Add( @@ -724,10 +725,10 @@ private void EmitRelocationsArm64(int sectionIndex, List rel foreach (SymbolicRelocation symbolicRelocation in relocationList) { if (symbolicRelocation.Type == RelocType.IMAGE_REL_SYMBOL_SIZE - && _rangeSymbols.TryGetValue(symbolicRelocation.SymbolName, out (string, string, int) range)) + && _rangeSymbols.TryGetValue(symbolicRelocation.SymbolName, out (Utf8String, Utf8String, int) range)) { // Represent as ARM64_RELOC_SUBTRACTOR + ARM64_RELOC_UNSIGNED. - (string StartNode, string EndNode, _) = range; + (Utf8String StartNode, Utf8String EndNode, _) = range; uint startSymbolIndex = _symbolNameToIndex[StartNode]; uint endSymbolIndex = _symbolNameToIndex[EndNode]; sectionRelocations.Add( @@ -879,11 +880,11 @@ private void EmitRelocationsArm64(int sectionIndex, List rel } } - partial void EmitCompactUnwindTable(IDictionary definedSymbols); + partial void EmitCompactUnwindTable(IDictionary definedSymbols); - private protected override string ExternCName(string name) => "_" + name; + private protected override Utf8String ExternCName(Utf8String name) => Utf8String.Concat("_"u8, name.AsSpan()); - private static bool IsSectionSymbolName(string symbolName) => symbolName.StartsWith('l'); + private static bool IsSectionSymbolName(Utf8String symbolName) => symbolName.AsSpan().StartsWith((byte)'l'); private struct MachHeader64 { @@ -1033,7 +1034,7 @@ public void Write(Stream stream) private sealed class MachSymbol { - public string Name { get; init; } = string.Empty; + public Utf8String Name { get; init; } = string.Empty; public byte Type { get; init; } public MachSection Section { get; init; } public ushort Descriptor { get; init; } diff --git a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/ObjectWriter.cs b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/ObjectWriter.cs index ce8347cd072..02046f9358f 100644 --- a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/ObjectWriter.cs +++ b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/ObjectWriter.cs @@ -21,7 +21,7 @@ namespace ILCompiler.ObjectWriter public abstract partial class ObjectWriter { private protected sealed record SymbolDefinition(int SectionIndex, long Value, int Size = 0, bool Global = false); - protected sealed record SymbolicRelocation(long Offset, RelocType Type, string SymbolName, long Addend = 0); + protected sealed record SymbolicRelocation(long Offset, RelocType Type, Utf8String SymbolName, long Addend = 0); private sealed record BlockToRelocate(int SectionIndex, long Offset, byte[] Data, Relocation[] Relocations); private protected sealed record ChecksumsToCalculate(int SectionIndex, long Offset, Relocation[] ChecksumRelocations); @@ -29,8 +29,9 @@ private protected sealed record ChecksumsToCalculate(int SectionIndex, long Offs private protected readonly ObjectWritingOptions _options; private protected readonly OutputInfoBuilder _outputInfoBuilder; private readonly bool _isSingleFileCompilation; + protected readonly Utf8StringBuilder _utf8StringBuilder = new(); - private readonly Dictionary _mangledNameMap = new(); + private readonly Dictionary _mangledNameMap = new(); private readonly byte _insPaddingByte; @@ -41,7 +42,7 @@ private protected sealed record ChecksumsToCalculate(int SectionIndex, long Offs private protected readonly List _outputSectionLayout = []; // Symbol table - private readonly Dictionary _definedSymbols = new(StringComparer.Ordinal); + private readonly Dictionary _definedSymbols = new(); private protected ObjectWriter(NodeFactory factory, ObjectWritingOptions options, OutputInfoBuilder outputInfoBuilder = null) { @@ -60,10 +61,13 @@ private protected ObjectWriter(NodeFactory factory, ObjectWritingOptions options } private protected virtual bool UsesSubsectionsViaSymbols => false; - private protected abstract void CreateSection(ObjectNodeSection section, string comdatName, string symbolName, int sectionIndex, Stream sectionStream); + private protected abstract void CreateSection(ObjectNodeSection section, Utf8String comdatName, Utf8String symbolName, int sectionIndex, Stream sectionStream); protected internal abstract void UpdateSectionAlignment(int sectionIndex, int alignment); + private protected SectionWriter GetOrCreateSection(ObjectNodeSection section) + => GetOrCreateSection(section, default, default); + /// /// Get or creates an object file section. /// @@ -78,19 +82,19 @@ private protected ObjectWriter(NodeFactory factory, ObjectWritingOptions options /// For associated sections, such as exception or debugging information, the /// will be different. /// - private protected SectionWriter GetOrCreateSection(ObjectNodeSection section, string comdatName = null, string symbolName = null) + private protected SectionWriter GetOrCreateSection(ObjectNodeSection section, Utf8String comdatName, Utf8String symbolName) { int sectionIndex; SectionData sectionData; - if (comdatName is not null || !_sectionNameToSectionIndex.TryGetValue(section.Name, out sectionIndex)) + if (!comdatName.IsNull || !_sectionNameToSectionIndex.TryGetValue(section.Name, out sectionIndex)) { sectionData = new SectionData(section.Type == SectionType.Executable ? _insPaddingByte : (byte)0); sectionIndex = _sectionIndexToData.Count; CreateSection(section, comdatName, symbolName, sectionIndex, sectionData.GetReadStream()); _sectionIndexToData.Add(sectionData); _sectionIndexToRelocations.Add(new()); - if (comdatName is null) + if (comdatName.IsNull) { _sectionNameToSectionIndex.Add(section.Name, sectionIndex); } @@ -140,7 +144,7 @@ private unsafe void EmitOrResolveRelocation( long offset, Span data, RelocType relocType, - string symbolName, + Utf8String symbolName, long addend) { if (!UsesSubsectionsViaSymbols && @@ -217,7 +221,7 @@ protected internal virtual void EmitRelocation( long offset, Span data, RelocType relocType, - string symbolName, + Utf8String symbolName, long addend) { _sectionIndexToRelocations[sectionIndex].Add(new SymbolicRelocation(offset, relocType, symbolName, addend)); @@ -228,7 +232,7 @@ private protected bool SectionHasRelocations(int sectionIndex) return _sectionIndexToRelocations[sectionIndex].Count > 0; } - private protected virtual void EmitReferencedMethod(string symbolName) { } + private protected virtual void EmitReferencedMethod(Utf8String symbolName) { } /// /// Emit symbolic relocations into object file as format specific @@ -250,7 +254,7 @@ private protected virtual void EmitReferencedMethod(string symbolName) { } /// protected internal void EmitSymbolDefinition( int sectionIndex, - string symbolName, + Utf8String symbolName, long offset = 0, int size = 0, bool global = false) @@ -264,18 +268,19 @@ protected internal void EmitSymbolDefinition( /// Emit symbolic definitions into object file symbols. /// private protected abstract void EmitSymbolTable( - IDictionary definedSymbols, - SortedSet undefinedSymbols); + IDictionary definedSymbols, + SortedSet undefinedSymbols); - private protected virtual string ExternCName(string name) => name; + private protected virtual Utf8String ExternCName(Utf8String name) => name; - private protected string GetMangledName(ISymbolNode symbolNode) + private protected Utf8String GetMangledName(ISymbolNode symbolNode) { - string symbolName; + Utf8String symbolName; if (!_mangledNameMap.TryGetValue(symbolNode, out symbolName)) { - symbolName = ExternCName(symbolNode.GetMangledName(_nodeFactory.NameMangler)); + symbolNode.AppendMangledName(_nodeFactory.NameMangler, _utf8StringBuilder.Clear()); + symbolName = ExternCName(_utf8StringBuilder.ToUtf8String()); _mangledNameMap.Add(symbolNode, symbolName); } @@ -290,9 +295,9 @@ private protected virtual void EmitSectionsAndLayout() partial void EmitDebugInfo(IReadOnlyCollection nodes, Logger logger); - private SortedSet GetUndefinedSymbols() + private SortedSet GetUndefinedSymbols() { - SortedSet undefinedSymbolSet = new SortedSet(StringComparer.Ordinal); + SortedSet undefinedSymbolSet = new SortedSet(); foreach (var relocationList in _sectionIndexToRelocations) foreach (var symbolicRelocation in relocationList) { @@ -304,7 +309,7 @@ private SortedSet GetUndefinedSymbols() return undefinedSymbolSet; } - public void EmitObject(Stream outputFileStream, IReadOnlyCollection nodes, IObjectDumper dumper, Logger logger) + public virtual void EmitObject(Stream outputFileStream, IReadOnlyCollection nodes, IObjectDumper dumper, Logger logger) { // Pre-create some of the sections GetOrCreateSection(ObjectNodeSection.TextSection); @@ -371,7 +376,7 @@ public void EmitObject(Stream outputFileStream, IReadOnlyCollection nodes, NodeFactory factory, ObjectWritingOptions options, IObjectDumper dumper, Logger logger) { @@ -669,6 +675,13 @@ public static void EmitObject(string objectFilePath, IReadOnlyCollection FormatUtf8Int(Span buffer, int number) + { + bool b = number.TryFormat(buffer, out int bytesWritten); + Debug.Assert(b); + return buffer.Slice(0, bytesWritten); + } + private struct ProgressReporter { private readonly Logger _logger; diff --git a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/OutputInfoBuilder.cs b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/OutputInfoBuilder.cs index f99e03b7ebd..83bf11db428 100644 --- a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/OutputInfoBuilder.cs +++ b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/OutputInfoBuilder.cs @@ -13,6 +13,7 @@ using ILCompiler.DependencyAnalysisFramework; using ILCompiler.Diagnostics; using Internal.JitInterface; +using Internal.Text; using Internal.TypeSystem; using Internal.TypeSystem.Ecma; @@ -47,9 +48,9 @@ public int Compare([AllowNull] OutputItem x, [AllowNull] OutputItem y) /// /// Item name /// - public readonly string Name; + public readonly Utf8String Name; - public OutputItem(int sectionIndex, ulong offset, string name) + public OutputItem(int sectionIndex, ulong offset, Utf8String name) { SectionIndex = sectionIndex; Offset = offset; @@ -93,7 +94,7 @@ public void AddRelocation() /// public sealed class OutputSymbol : OutputItem { - public OutputSymbol(int sectionIndex, ulong offset, string name) + public OutputSymbol(int sectionIndex, ulong offset, Utf8String name) : base(sectionIndex, offset, name) { } @@ -171,7 +172,7 @@ public void Sort() public bool FindSymbol(OutputItem item, out int index) { - index = _symbols.BinarySearch(new OutputSymbol(item.SectionIndex, item.Offset, name: null), OutputItem.Comparer.Instance); + index = _symbols.BinarySearch(new OutputSymbol(item.SectionIndex, item.Offset, name: default), OutputItem.Comparer.Instance); bool result = (index >= 0 && index < _symbols.Count && OutputItem.Comparer.Instance.Compare(_symbols[index], item) == 0); if (!result) { diff --git a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/PEObjectWriter.cs b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/PEObjectWriter.cs index e31468b3813..5243d2e214c 100644 --- a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/PEObjectWriter.cs +++ b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/PEObjectWriter.cs @@ -13,6 +13,7 @@ using System.Security.Cryptography; using System.Text; using ILCompiler.DependencyAnalysis; +using Internal.Text; using Internal.TypeSystem; namespace ILCompiler.ObjectWriter @@ -80,7 +81,7 @@ internal sealed class PEObjectWriter : CoffObjectWriter // Base relocation (.reloc) bookkeeping private readonly SortedDictionary> _baseRelocMap = new(); - private Dictionary _definedSymbols = []; + private Dictionary _definedSymbols = []; private HashSet _exportedSymbolNames = new(); private long _coffHeaderOffset; @@ -101,10 +102,10 @@ public void AddExportedSymbol(string symbol) } } - private protected override void CreateSection(ObjectNodeSection section, string comdatName, string symbolName, int sectionIndex, Stream sectionStream) + private protected override void CreateSection(ObjectNodeSection section, Utf8String comdatName, Utf8String symbolName, int sectionIndex, Stream sectionStream) { // COMDAT sections are not supported in PE files - base.CreateSection(section, comdatName: null, symbolName, sectionIndex, sectionStream); + base.CreateSection(section, comdatName: default, symbolName, sectionIndex, sectionStream); if (_requestedSectionAlignment != 0) { @@ -339,7 +340,7 @@ private enum ImageDirectoryEntry Reserved = 15, } - private protected override void EmitSymbolTable(IDictionary definedSymbols, SortedSet undefinedSymbols) + private protected override void EmitSymbolTable(IDictionary definedSymbols, SortedSet undefinedSymbols) { if (undefinedSymbols.Count > 0) { @@ -347,7 +348,7 @@ private protected override void EmitSymbolTable(IDictionary(definedSymbols); + _definedSymbols = new Dictionary(definedSymbols); } private protected override void EmitSectionsAndLayout() diff --git a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/SectionWriter.cs b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/SectionWriter.cs index 2378830f5e0..9965646738d 100644 --- a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/SectionWriter.cs +++ b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/SectionWriter.cs @@ -45,7 +45,7 @@ public readonly void EmitRelocation( long relativeOffset, Span data, RelocType relocType, - string symbolName, + Utf8String symbolName, long addend) { _objectWriter.EmitRelocation( @@ -58,7 +58,7 @@ public readonly void EmitRelocation( } public readonly void EmitSymbolDefinition( - string symbolName, + Utf8String symbolName, long relativeOffset = 0, int size = 0, bool global = false) @@ -73,7 +73,7 @@ public readonly void EmitSymbolDefinition( public readonly void EmitSymbolReference( RelocType relocType, - string symbolName, + Utf8String symbolName, long addend = 0) { IBufferWriter bufferWriter = _sectionData.BufferWriter; @@ -136,6 +136,15 @@ public readonly void WriteUtf8String(string value) bufferWriter.Advance(size); } + public readonly void WriteUtf8StringNoNull(string value) + { + IBufferWriter bufferWriter = _sectionData.BufferWriter; + int size = Encoding.UTF8.GetByteCount(value); + Span buffer = bufferWriter.GetSpan(size); + Encoding.UTF8.GetBytes(value, buffer); + bufferWriter.Advance(size); + } + public readonly void WritePadding(int size) => _sectionData.AppendPadding(size); public readonly long Position => _sectionData.Length; diff --git a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/StringTableBuilder.cs b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/StringTableBuilder.cs index 0c6d1831dd4..db5a9a9406e 100644 --- a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/StringTableBuilder.cs +++ b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/StringTableBuilder.cs @@ -8,14 +8,15 @@ using System.IO; using System.Text; using System.Linq; +using Internal.Text; namespace ILCompiler.ObjectWriter { internal class StringTableBuilder { private readonly MemoryStream _stream = new(); - private readonly SortedSet _reservedStrings = new(StringComparer.Ordinal); - private Dictionary _stringToOffset = new(StringComparer.Ordinal); + private readonly SortedSet _reservedStrings = new(); + private Dictionary _stringToOffset = new(); public void Write(Stream stream) { @@ -32,9 +33,9 @@ public uint Size } } - public void ReserveString(string text) + public void ReserveString(Utf8String text) { - if (text is object && !_stringToOffset.ContainsKey(text)) + if (!text.IsNull && !_stringToOffset.ContainsKey(text)) { _reservedStrings.Add(text); } @@ -42,21 +43,21 @@ public void ReserveString(string text) private void FlushReservedStrings() { - string[] reservedStrings = _reservedStrings.ToArray(); + Utf8String[] reservedStrings = _reservedStrings.ToArray(); // Pre-sort the string based on their matching suffix MultiKeySort(reservedStrings, 0); // Add the strings to string table - string lastText = null; + Utf8String lastText = default; for (int i = 0; i < reservedStrings.Length; i++) { var text = reservedStrings[i]; uint index; - if (lastText is not null && lastText.EndsWith(text, StringComparison.Ordinal)) + if (!lastText.IsNull && lastText.AsSpan().EndsWith(text.AsSpan())) { // Suffix matches the last symbol - index = (uint)(_stream.Length - Encoding.UTF8.GetByteCount(text) - 1); + index = (uint)(_stream.Length - text.Length - 1); _stringToOffset.Add(text, index); } else @@ -68,15 +69,15 @@ private void FlushReservedStrings() _reservedStrings.Clear(); - static char TailCharacter(string str, int pos) + static byte TailCharacter(Utf8String str, int pos) { int index = str.Length - pos - 1; if ((uint)index < str.Length) - return str[index]; - return '\0'; + return str.AsSpan()[index]; + return 0; } - static void MultiKeySort(Span input, int pos) + static void MultiKeySort(Span input, int pos) { if (!MultiKeySortSmallInput(input, pos)) { @@ -84,14 +85,14 @@ static void MultiKeySort(Span input, int pos) } } - static void MultiKeySortLargeInput(Span input, int pos) + static void MultiKeySortLargeInput(Span input, int pos) { tailcall: - char pivot = TailCharacter(input[0], pos); + byte pivot = TailCharacter(input[0], pos); int l = 0, h = input.Length; for (int i = 1; i < h;) { - char c = TailCharacter(input[i], pos); + byte c = TailCharacter(input[i], pos); if (c > pivot) { (input[l], input[i]) = (input[i], input[l]); @@ -123,7 +124,7 @@ static void MultiKeySortLargeInput(Span input, int pos) } } - static bool MultiKeySortSmallInput(Span input, int pos) + static bool MultiKeySortSmallInput(Span input, int pos) { if (input.Length <= 1) return true; @@ -133,14 +134,14 @@ static bool MultiKeySortSmallInput(Span input, int pos) { while (true) { - char c0 = TailCharacter(input[0], pos); - char c1 = TailCharacter(input[1], pos); + byte c0 = TailCharacter(input[0], pos); + byte c1 = TailCharacter(input[1], pos); if (c0 < c1) { (input[0], input[1]) = (input[1], input[0]); break; } - else if (c0 > c1 || c0 == (char)0) + else if (c0 > c1 || c0 == 0) { break; } @@ -153,21 +154,18 @@ static bool MultiKeySortSmallInput(Span input, int pos) } } - private uint CreateIndex(string text) + private uint CreateIndex(Utf8String text) { uint offset = (uint)_stream.Position; - int reservedBytes = Encoding.UTF8.GetByteCount(text) + 1; - byte[] buffer = ArrayPool.Shared.Rent(reservedBytes); - var span = new Span(buffer, 0, reservedBytes); - Encoding.UTF8.GetBytes(text, span); - span[reservedBytes - 1] = 0; - _stream.Write(span); - ArrayPool.Shared.Return(buffer); + + _stream.Write(text.AsSpan()); + _stream.WriteByte(0); + _stringToOffset[text] = offset; return offset; } - public uint GetStringOffset(string text) + public uint GetStringOffset(Utf8String text) { if (_reservedStrings.Count > 0) { diff --git a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/UnixObjectWriter.cs b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/UnixObjectWriter.cs index 3d0a80050e2..8aba39808e3 100644 --- a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/UnixObjectWriter.cs +++ b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/UnixObjectWriter.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Buffers.Binary; using ILCompiler.DependencyAnalysis; +using Internal.Text; using Internal.TypeSystem; using Debug = System.Diagnostics.Debug; @@ -19,7 +20,7 @@ namespace ILCompiler.ObjectWriter /// internal abstract partial class UnixObjectWriter : ObjectWriter { - private sealed record UnixSectionDefinition(string SymbolName, Stream SectionStream); + private sealed record UnixSectionDefinition(Utf8String SymbolName, Stream SectionStream); private readonly List _sections = new(); private static readonly ObjectNodeSection LsdaSection = new ObjectNodeSection(".dotnet_eh_table", SectionType.ReadOnly); @@ -30,12 +31,12 @@ protected UnixObjectWriter(NodeFactory factory, ObjectWritingOptions options, Ou { } - private protected override void CreateSection(ObjectNodeSection section, string comdatName, string symbolName, int sectionIndex, Stream sectionStream) + private protected override void CreateSection(ObjectNodeSection section, Utf8String comdatName, Utf8String symbolName, int sectionIndex, Stream sectionStream) { if (section.Type != SectionType.Debug && section != LsdaSection && section != EhFrameSection && - (comdatName is null || Equals(comdatName, symbolName))) + (comdatName.IsNull || Equals(comdatName, symbolName))) { // Record code and data sections that can be referenced from debugging information _sections.Add(new UnixSectionDefinition(symbolName, sectionStream)); diff --git a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/WasmNative.cs b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/WasmNative.cs new file mode 100644 index 00000000000..aa4c4738ae2 --- /dev/null +++ b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/WasmNative.cs @@ -0,0 +1,185 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Diagnostics; +using System.Linq; +using System.Collections.Generic; + +namespace ILCompiler.ObjectWriter +{ + public enum WasmSectionType + { + Custom = 0, + Type = 1, + Import = 2, + Function = 3, + Table = 4, + Memory = 5, + Global = 6, + Export = 7, + Start = 8, + Element = 9, + Code = 10, + Data = 11, + DataCount = 12, + Tag = 13, + } + + public static class PlaceholderValues + { + // Wasm function signature for (func (params i32) (result i32)) + public static WasmFuncType CreateWasmFunc_i32_i32() + { + return new WasmFuncType( + paramTypes: new([WasmValueType.I32]), + returnTypes: new([WasmValueType.I32]) + ); + } + } + + // For now, we only encode Wasm numeric value types. + // These are encoded as a single byte. However, + // not all value types can be encoded this way. + // For example, reference types (see https://webassembly.github.io/spec/core/binary/types.html#reference-types) + // require a more complex encoding. + public enum WasmValueType : byte + { + I32 = 0x7F, + I64 = 0x7E, + F32 = 0x7D, + F64 = 0x7C + } + + public static class WasmValueTypeExtensions + { + public static string ToTypeString(this WasmValueType valueType) + { + return valueType switch + { + WasmValueType.I32 => "i32", + WasmValueType.I64 => "i64", + WasmValueType.F32 => "f32", + WasmValueType.F64 => "f64", + _ => "unknown", + }; + } + } + + #nullable enable + public readonly struct WasmResultType : IEquatable + { + private readonly WasmValueType[] _types; + public ReadOnlySpan Types => _types; + + /// + /// Initializes a new instance of the WasmResultType class with the specified value types. + /// + /// An array of WasmValueType elements representing the types included in the result. If null, an empty array is + /// used. + public WasmResultType(WasmValueType[]? types) + { + _types = types ?? Array.Empty(); + } + + public bool Equals(WasmResultType other) => Types.SequenceEqual(other.Types); + public override bool Equals(object? obj) + { + return obj is WasmResultType other && Equals(other); + } + + public override int GetHashCode() + { + if (_types == null || _types.Length == 0) + return 0; + + int code = _types[0].GetHashCode(); + for (int i = 1; i < _types.Length; i++) + { + code = HashCode.Combine(code, _types[i].GetHashCode()); + } + + return code; + } + + public int EncodeSize() + { + uint sizeLength = DwarfHelper.SizeOfULEB128((ulong)_types.Length); + return (int)(sizeLength + (uint)_types.Length); + } + + public int Encode(Span buffer) + { + int sizeLength = DwarfHelper.WriteULEB128(buffer, (ulong)_types.Length); + Span rest = buffer.Slice(sizeLength); + for (int i = 0; i < _types.Length; i++) + { + rest[i] = (byte)_types[i]; + } + return (int)(sizeLength + (uint)_types.Length); + } + } + + public static class WasmResultTypeExtensions + { + public static string ToTypeListString(this WasmResultType result) + { + return string.Join(" ", result.Types.ToArray().Select(t => t.ToTypeString())); + } + } + + public struct WasmFuncType : IEquatable + { + private readonly WasmResultType _params; + private readonly WasmResultType _returns; + + public WasmFuncType(WasmResultType paramTypes, WasmResultType returnTypes) + { + _params = paramTypes; + _returns = returnTypes; + } + + public readonly int EncodeSize() + { + return 1 + _params.EncodeSize() + _returns.EncodeSize(); + } + + public readonly int Encode(Span buffer) + { + int totalSize = EncodeSize(); + buffer[0] = 0x60; // function type indicator + + int paramSize = _params.Encode(buffer.Slice(1)); + int returnSize = _returns.Encode(buffer.Slice(1+paramSize)); + Debug.Assert(totalSize == 1 + paramSize + returnSize); + + return totalSize; + } + + public bool Equals(WasmFuncType other) + { + return _params.Equals(other._params) && _returns.Equals(other._returns); + } + + public override bool Equals(object? obj) + { + return obj is WasmFuncType other && Equals(other); + } + + public override int GetHashCode() + { + return HashCode.Combine(_params.GetHashCode(), _returns.GetHashCode()); + } + + public override string ToString() + { + string paramList = _params.ToTypeListString(); + string returnList = _returns.ToTypeListString(); + + if (string.IsNullOrEmpty(returnList)) + return $"(func (param {paramList}))"; + return $"(func (param {paramList}) (result {returnList}))"; + } + } + +} diff --git a/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/WasmObjectWriter.cs b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/WasmObjectWriter.cs new file mode 100644 index 00000000000..d02cc5d4c30 --- /dev/null +++ b/src/runtime/src/coreclr/tools/Common/Compiler/ObjectWriter/WasmObjectWriter.cs @@ -0,0 +1,245 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Buffers; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using ILCompiler.DependencyAnalysis; +using ILCompiler.DependencyAnalysis.ReadyToRun; +using ILCompiler.DependencyAnalysisFramework; +using Internal.Text; +using Internal.TypeSystem; + +using ObjectData = ILCompiler.DependencyAnalysis.ObjectNode.ObjectData; + +namespace ILCompiler.ObjectWriter +{ + /// + /// Wasm object file format writer. + /// + internal sealed class WasmObjectWriter : ObjectWriter + { + public WasmObjectWriter(NodeFactory factory, ObjectWritingOptions options, OutputInfoBuilder outputInfoBuilder) + : base(factory, options, outputInfoBuilder) + { + } + + private void EmitWasmHeader(Stream outputFileStream) + { + outputFileStream.Write("\0asm"u8); + outputFileStream.Write([0x1, 0x0, 0x0, 0x0]); + } + + // TODO: for now, we are fully overriding EmitObject. As we support more features, we should + // see if we can re-use the base, or refactor the base method to allow for code sharing. + public override void EmitObject(Stream outputFileStream, IReadOnlyCollection nodes, IObjectDumper dumper, Logger logger) + { + ArrayBuilder methodSignatures = new(); + ArrayBuilder methodNames = new(); + ArrayBuilder methodBodies = new(); + foreach (DependencyNode node in nodes) + { + if (node is not ObjectNode) + { + continue; + } + + if (node is IMethodBodyNode methodNode) + { + ObjectNode methodObject = (ObjectNode)node; + methodSignatures.Add(WasmAbiContext.GetSignature(methodNode.Method)); + methodNames.Add(methodNode.GetMangledName(_nodeFactory.NameMangler)); + methodBodies.Add(methodObject.GetData(_nodeFactory)); + // TODO: record relocations and attached data + } + } + + IEnumerable uniqueSignatures = methodSignatures.ToArray().Distinct(); + Dictionary signatureMap = uniqueSignatures.Select((sig, i) => (sig, i)).ToDictionary(); + + // TODO: The EmitSection calls here can be moved to this class' `EmitObjectFile` implementation + // when we can share more code with the base class. + EmitWasmHeader(outputFileStream); + EmitSection(() => WriteTypeSection(uniqueSignatures, logger), outputFileStream, logger); + EmitSection(() => WriteFunctionSection(methodSignatures, signatureMap, logger), outputFileStream, logger); + EmitSection(() => WriteExportSection(methodBodies, methodSignatures, methodNames, signatureMap, logger), outputFileStream, logger); + EmitSection(() => WriteCodeSection(methodBodies, logger), outputFileStream, logger); + } + + private WasmSection WriteExportSection(ArrayBuilder methodNodes, ArrayBuilder methodSignatures, + ArrayBuilder methodNames, Dictionary signatureMap, Logger logger) + { + WasmSection exportSection = new WasmSection(WasmSectionType.Export, new SectionData(), "export"); + SectionWriter writer = exportSection.Writer; + // Write the number of exports + writer.WriteULEB128((ulong)methodNodes.Count); + for (int i = 0; i < methodNodes.Count; i++) + { + ObjectData methodNode = methodNodes[i]; + WasmFuncType methodSignature = methodSignatures[i]; + string exportName = methodNames[i]; + + int length = Encoding.UTF8.GetByteCount(exportName); + writer.WriteULEB128((ulong)length); + writer.WriteUtf8StringNoNull(exportName); + writer.WriteByte(0x00); // export kind: function + writer.WriteULEB128((ulong)i); + if (logger.IsVerbose) + { + logger.LogMessage($"Emitting export: {exportName} for function index {i}"); + } + } + + return exportSection; + } + + private WasmSection WriteCodeSection(ArrayBuilder methodBodies, Logger logger) + { + WasmSection codeSection = new WasmSection(WasmSectionType.Code, new SectionData(), "code"); + SectionWriter writer = codeSection.Writer; + + // Write the number of functions + writer.WriteULEB128((ulong)methodBodies.Count); + for (int i = 0; i < methodBodies.Count; i++) + { + ObjectData methodBody = methodBodies[i]; + writer.WriteULEB128((ulong)methodBody.Data.Length); + writer.EmitData(methodBody.Data); + } + + return codeSection; + } + + private WasmSection WriteTypeSection(IEnumerable functionSignatures, Logger logger) + { + SectionData sectionData = new(); + WasmSection typeSection = new WasmSection(WasmSectionType.Type, sectionData, "type"); + SectionWriter writer = typeSection.Writer; + + // Write the number of types + writer.WriteULEB128((ulong)functionSignatures.Count()); + + IBufferWriter buffer = sectionData.BufferWriter; + foreach (WasmFuncType signature in functionSignatures) + { + if (logger.IsVerbose) + { + logger.LogMessage($"Emitting function signature: {signature}"); + } + + int signatureSize = signature.EncodeSize(); + signature.Encode(buffer.GetSpan(signatureSize)); + buffer.Advance(signatureSize); + } + + return typeSection; + } + + private WasmSection WriteFunctionSection(ArrayBuilder allFunctionSignatures, Dictionary signatureMap, Logger logger) + { + WasmSection functionSection = new WasmSection(WasmSectionType.Function, new SectionData(), "function"); + SectionWriter writer = functionSection.Writer; + // Write the number of functions + writer.WriteULEB128((ulong)allFunctionSignatures.Count); + for (int i = 0; i < allFunctionSignatures.Count; i++) + { + WasmFuncType signature = allFunctionSignatures[i]; + writer.WriteULEB128((ulong)signatureMap[signature]); + } + return functionSection; + } + + private void EmitSection(Func writeFunc, Stream outputFileStream, Logger logger) + { + WasmSection section = writeFunc(); + Span headerBuffer = stackalloc byte[section.HeaderSize]; + + section.EncodeHeader(headerBuffer); + outputFileStream.Write(headerBuffer); + if (logger.IsVerbose) + { + logger.LogMessage($"Wrote section header of size {headerBuffer.Length} bytes."); + } + + section.Data.GetReadStream().CopyTo(outputFileStream); + if (logger.IsVerbose) + { + logger.LogMessage($"Emitted section: {section.Name} of type `{section.Type}` with size {section.Data.Length} bytes."); + } + } + + protected internal override void UpdateSectionAlignment(int sectionIndex, int alignment) => throw new NotImplementedException(); + private WasmSection CreateSection(WasmSectionType sectionType, string symbolName, int sectionIndex) => throw new NotImplementedException(); + private protected override void CreateSection(ObjectNodeSection section, Utf8String comdatName, Utf8String symbolName, int sectionIndex, Stream sectionStream) => throw new NotImplementedException(); + private protected override void EmitObjectFile(Stream outputFileStream) => throw new NotImplementedException(); + private protected override void EmitRelocations(int sectionIndex, List relocationList) => throw new NotImplementedException(); + private protected override void EmitSymbolTable(IDictionary definedSymbols, SortedSet undefinedSymbols) => throw new NotImplementedException(); + } + + // TODO: This is a placeholder implementation. The real implementation will derive the Wasm function signature + // from the MethodDesc's signature and type system information. + public static class WasmAbiContext + { + public static WasmFuncType GetSignature(MethodDesc method) + { + return PlaceholderValues.CreateWasmFunc_i32_i32(); + } + } + + internal class WasmSection + { + public WasmSectionType Type { get; } + public string Name { get; } + public SectionData Data => _data; + private SectionWriter? _writer; + + private SectionData _data; + + public int HeaderSize + { + get + { + ulong sectionSize = (ulong)_data.Length; + uint sizeEncodeLength = DwarfHelper.SizeOfULEB128(sectionSize); + return 1 + (int)sizeEncodeLength; + } + } + + public int EncodeHeader(Span headerBuffer) + { + ulong sectionSize = (ulong)_data.Length; + uint encodeLength = DwarfHelper.SizeOfULEB128(sectionSize); + + // Section header consists of: + // 1 byte: section type + // ULEB128: size of section + headerBuffer[0] = (byte)Type; + DwarfHelper.WriteULEB128(headerBuffer.Slice(1), sectionSize); + + return 1 + (int)encodeLength; + } + + public SectionWriter Writer + { + get + { + if (_writer == null) + { + _writer = new SectionWriter(null, 0, _data); + } + return _writer.Value; + } + } + + public WasmSection(WasmSectionType type, SectionData data, string name) + { + Type = type; + Name = name; + _data = data; + } + } +} diff --git a/src/runtime/src/coreclr/tools/Common/InstructionSetHelpers.cs b/src/runtime/src/coreclr/tools/Common/InstructionSetHelpers.cs index 5c77e6ef7f7..7dcf031a9e0 100644 --- a/src/runtime/src/coreclr/tools/Common/InstructionSetHelpers.cs +++ b/src/runtime/src/coreclr/tools/Common/InstructionSetHelpers.cs @@ -17,7 +17,7 @@ namespace System.CommandLine internal static partial class Helpers { public static InstructionSetSupport ConfigureInstructionSetSupport(string instructionSet, int maxVectorTBitWidth, bool isVectorTOptimistic, TargetArchitecture targetArchitecture, TargetOS targetOS, - string mustNotBeMessage, string invalidImplicationMessage, Logger logger, bool optimizingForSize, bool isReadyToRun) + string mustNotBeMessage, string invalidImplicationMessage, Logger logger, bool allowOptimistic, bool isReadyToRun) { InstructionSetSupportBuilder instructionSetSupportBuilder = new(targetArchitecture); @@ -31,7 +31,7 @@ public static InstructionSetSupport ConfigureInstructionSetSupport(string instru if ((targetArchitecture == TargetArchitecture.X86) || (targetArchitecture == TargetArchitecture.X64)) { - if (isReadyToRun && (targetOS != TargetOS.OSX)) + if (isReadyToRun && targetOS != TargetOS.OSX && targetOS != TargetOS.MacCatalyst) { // ReadyToRun can presume AVX2, BMI1, BMI2, F16C, FMA, LZCNT, and MOVBE instructionSetSupportBuilder.AddSupportedInstructionSet("x86-64-v3"); @@ -67,6 +67,11 @@ public static InstructionSetSupport ConfigureInstructionSetSupport(string instru instructionSetSupportBuilder.AddSupportedInstructionSet("armv8.2-a"); instructionSetSupportBuilder.AddSupportedInstructionSet("rcpc"); } + else if (targetOS is TargetOS.iOS or TargetOS.iOSSimulator or TargetOS.tvOS or TargetOS.tvOSSimulator) + { + // ReadyToRun on iOS/tvOS can only presume armv8.0-a + instructionSetSupportBuilder.AddSupportedInstructionSet("armv8-a"); + } else { // While Unix needs a lower baseline due to things like Raspberry PI @@ -87,11 +92,6 @@ public static InstructionSetSupport ConfigureInstructionSetSupport(string instru } } - // Whether to allow optimistically expanding the instruction sets beyond what was specified. - // We seed this from optimizingForSize - if we're size-optimizing, we don't want to unnecessarily - // compile both branches of IsSupported checks. - bool allowOptimistic = !optimizingForSize; - bool throttleAvx512 = false; if (instructionSet == "native") diff --git a/src/runtime/src/coreclr/tools/Common/Internal/Text/Utf8String.cs b/src/runtime/src/coreclr/tools/Common/Internal/Text/Utf8String.cs index 5ade766c61d..4c8d9028090 100644 --- a/src/runtime/src/coreclr/tools/Common/Internal/Text/Utf8String.cs +++ b/src/runtime/src/coreclr/tools/Common/Internal/Text/Utf8String.cs @@ -11,6 +11,8 @@ namespace Internal.Text { private readonly byte[] _value; + public bool IsNull => _value == null; + public Utf8String(byte[] underlyingArray) { _value = underlyingArray; @@ -102,5 +104,43 @@ public static Utf8String Concat(params ReadOnlySpan strings) return new Utf8String(result); } + + public static Utf8String Concat(ReadOnlySpan s1, ReadOnlySpan s2) + { + var result = new byte[s1.Length + s2.Length]; + s1.CopyTo(result); + s2.CopyTo(result.AsSpan(s1.Length)); + return new Utf8String(result); + } + + public static Utf8String Concat(ReadOnlySpan s1, ReadOnlySpan s2, ReadOnlySpan s3) + { + var result = new byte[s1.Length + s2.Length + s3.Length]; + s1.CopyTo(result); + s2.CopyTo(result.AsSpan(s1.Length)); + s3.CopyTo(result.AsSpan(s1.Length + s2.Length)); + return new Utf8String(result); + } + + public static Utf8String Concat(ReadOnlySpan s1, ReadOnlySpan s2, ReadOnlySpan s3, ReadOnlySpan s4) + { + var result = new byte[s1.Length + s2.Length + s3.Length + s4.Length]; + s1.CopyTo(result); + s2.CopyTo(result.AsSpan(s1.Length)); + s3.CopyTo(result.AsSpan(s1.Length + s2.Length)); + s4.CopyTo(result.AsSpan(s1.Length + s2.Length + s3.Length)); + return new Utf8String(result); + } + + public static Utf8String Concat(ReadOnlySpan s1, ReadOnlySpan s2, ReadOnlySpan s3, ReadOnlySpan s4, ReadOnlySpan s5) + { + var result = new byte[s1.Length + s2.Length + s3.Length + s4.Length + s5.Length]; + s1.CopyTo(result); + s2.CopyTo(result.AsSpan(s1.Length)); + s3.CopyTo(result.AsSpan(s1.Length + s2.Length)); + s4.CopyTo(result.AsSpan(s1.Length + s2.Length + s3.Length)); + s5.CopyTo(result.AsSpan(s1.Length + s2.Length + s3.Length + s4.Length)); + return new Utf8String(result); + } } } diff --git a/src/runtime/src/coreclr/tools/Common/JitInterface/CorInfoHelpFunc.cs b/src/runtime/src/coreclr/tools/Common/JitInterface/CorInfoHelpFunc.cs index 2a8e08fe327..55faa2e79b6 100644 --- a/src/runtime/src/coreclr/tools/Common/JitInterface/CorInfoHelpFunc.cs +++ b/src/runtime/src/coreclr/tools/Common/JitInterface/CorInfoHelpFunc.cs @@ -59,7 +59,6 @@ which is the right helper to use to allocate an object of a given type. */ CORINFO_HELP_NEWARR_1_VC, // optimized 1-D value class arrays CORINFO_HELP_NEWARR_1_ALIGN8, // like VC, but aligns the array start - CORINFO_HELP_STRCNS, // create a new string literal /* Object model */ CORINFO_HELP_INITCLASS, // Initialize class if not already initialized diff --git a/src/runtime/src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs b/src/runtime/src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs index f5c2a50d6f0..f1d765dc8b3 100644 --- a/src/runtime/src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs +++ b/src/runtime/src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs @@ -163,7 +163,7 @@ private IntPtr AllocException(Exception ex) public static void Startup(CORINFO_OS os) { - jitStartup(GetJitHost(JitConfigProvider.Instance.UnmanagedInstance)); + jitStartup(GetJitHost(JitConfigProvider.UnmanagedInstance)); JitSetOs(JitPointerAccessor.Get(), os); } @@ -3655,14 +3655,6 @@ public static ReadyToRunHelperId GetReadyToRunHelperFromStaticBaseHelper(CorInfo private void getFunctionFixedEntryPoint(CORINFO_METHOD_STRUCT_* ftn, bool isUnsafeFunctionPointer, ref CORINFO_CONST_LOOKUP pResult) { throw new NotImplementedException("getFunctionFixedEntryPoint"); } -#pragma warning disable CA1822 // Mark members as static - private CorInfoHelpFunc getLazyStringLiteralHelper(CORINFO_MODULE_STRUCT_* handle) -#pragma warning restore CA1822 // Mark members as static - { - // TODO: Lazy string literal helper - return CorInfoHelpFunc.CORINFO_HELP_UNDEF; - } - private CORINFO_MODULE_STRUCT_* embedModuleHandle(CORINFO_MODULE_STRUCT_* handle, ref void* ppIndirection) { throw new NotImplementedException("embedModuleHandle"); } diff --git a/src/runtime/src/coreclr/tools/Common/JitInterface/CorInfoImpl_generated.cs b/src/runtime/src/coreclr/tools/Common/JitInterface/CorInfoImpl_generated.cs index 772c840e422..c828a995140 100644 --- a/src/runtime/src/coreclr/tools/Common/JitInterface/CorInfoImpl_generated.cs +++ b/src/runtime/src/coreclr/tools/Common/JitInterface/CorInfoImpl_generated.cs @@ -6,12 +6,383 @@ // and follow the instructions in docs/project/updating-jitinterface.md using System; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace Internal.JitInterface { internal unsafe partial class CorInfoImpl { + private struct ICorJitInfoCallbacks + { + [FixedAddressValueType] + internal static readonly ICorJitInfoCallbacks s_callbacks; + + static ICorJitInfoCallbacks() + { + s_callbacks.isIntrinsic = &_isIntrinsic; + s_callbacks.notifyMethodInfoUsage = &_notifyMethodInfoUsage; + s_callbacks.getMethodAttribs = &_getMethodAttribs; + s_callbacks.setMethodAttribs = &_setMethodAttribs; + s_callbacks.getMethodSig = &_getMethodSig; + s_callbacks.getMethodInfo = &_getMethodInfo; + s_callbacks.haveSameMethodDefinition = &_haveSameMethodDefinition; + s_callbacks.getTypeDefinition = &_getTypeDefinition; + s_callbacks.canInline = &_canInline; + s_callbacks.beginInlining = &_beginInlining; + s_callbacks.reportInliningDecision = &_reportInliningDecision; + s_callbacks.canTailCall = &_canTailCall; + s_callbacks.reportTailCallDecision = &_reportTailCallDecision; + s_callbacks.getEHinfo = &_getEHinfo; + s_callbacks.getMethodClass = &_getMethodClass; + s_callbacks.getMethodVTableOffset = &_getMethodVTableOffset; + s_callbacks.resolveVirtualMethod = &_resolveVirtualMethod; + s_callbacks.getUnboxedEntry = &_getUnboxedEntry; + s_callbacks.getInstantiatedEntry = &_getInstantiatedEntry; + s_callbacks.getDefaultComparerClass = &_getDefaultComparerClass; + s_callbacks.getDefaultEqualityComparerClass = &_getDefaultEqualityComparerClass; + s_callbacks.getSZArrayHelperEnumeratorClass = &_getSZArrayHelperEnumeratorClass; + s_callbacks.expandRawHandleIntrinsic = &_expandRawHandleIntrinsic; + s_callbacks.isIntrinsicType = &_isIntrinsicType; + s_callbacks.getUnmanagedCallConv = &_getUnmanagedCallConv; + s_callbacks.pInvokeMarshalingRequired = &_pInvokeMarshalingRequired; + s_callbacks.satisfiesMethodConstraints = &_satisfiesMethodConstraints; + s_callbacks.methodMustBeLoadedBeforeCodeIsRun = &_methodMustBeLoadedBeforeCodeIsRun; + s_callbacks.getGSCookie = &_getGSCookie; + s_callbacks.setPatchpointInfo = &_setPatchpointInfo; + s_callbacks.getOSRInfo = &_getOSRInfo; + s_callbacks.resolveToken = &_resolveToken; + s_callbacks.findSig = &_findSig; + s_callbacks.findCallSiteSig = &_findCallSiteSig; + s_callbacks.getTokenTypeAsHandle = &_getTokenTypeAsHandle; + s_callbacks.getStringLiteral = &_getStringLiteral; + s_callbacks.printObjectDescription = &_printObjectDescription; + s_callbacks.asCorInfoType = &_asCorInfoType; + s_callbacks.getClassNameFromMetadata = &_getClassNameFromMetadata; + s_callbacks.getTypeInstantiationArgument = &_getTypeInstantiationArgument; + s_callbacks.getMethodInstantiationArgument = &_getMethodInstantiationArgument; + s_callbacks.printClassName = &_printClassName; + s_callbacks.isValueClass = &_isValueClass; + s_callbacks.getClassAttribs = &_getClassAttribs; + s_callbacks.getClassAssemblyName = &_getClassAssemblyName; + s_callbacks.LongLifetimeMalloc = &_LongLifetimeMalloc; + s_callbacks.LongLifetimeFree = &_LongLifetimeFree; + s_callbacks.getIsClassInitedFlagAddress = &_getIsClassInitedFlagAddress; + s_callbacks.getClassThreadStaticDynamicInfo = &_getClassThreadStaticDynamicInfo; + s_callbacks.getClassStaticDynamicInfo = &_getClassStaticDynamicInfo; + s_callbacks.getStaticBaseAddress = &_getStaticBaseAddress; + s_callbacks.getClassSize = &_getClassSize; + s_callbacks.getHeapClassSize = &_getHeapClassSize; + s_callbacks.canAllocateOnStack = &_canAllocateOnStack; + s_callbacks.getClassAlignmentRequirement = &_getClassAlignmentRequirement; + s_callbacks.getClassGClayout = &_getClassGClayout; + s_callbacks.getClassNumInstanceFields = &_getClassNumInstanceFields; + s_callbacks.getFieldInClass = &_getFieldInClass; + s_callbacks.getTypeLayout = &_getTypeLayout; + s_callbacks.checkMethodModifier = &_checkMethodModifier; + s_callbacks.getNewHelper = &_getNewHelper; + s_callbacks.getNewArrHelper = &_getNewArrHelper; + s_callbacks.getCastingHelper = &_getCastingHelper; + s_callbacks.getSharedCCtorHelper = &_getSharedCCtorHelper; + s_callbacks.getTypeForBox = &_getTypeForBox; + s_callbacks.getBoxHelper = &_getBoxHelper; + s_callbacks.getUnBoxHelper = &_getUnBoxHelper; + s_callbacks.getRuntimeTypePointer = &_getRuntimeTypePointer; + s_callbacks.isObjectImmutable = &_isObjectImmutable; + s_callbacks.getStringChar = &_getStringChar; + s_callbacks.getObjectType = &_getObjectType; + s_callbacks.getReadyToRunHelper = &_getReadyToRunHelper; + s_callbacks.getReadyToRunDelegateCtorHelper = &_getReadyToRunDelegateCtorHelper; + s_callbacks.initClass = &_initClass; + s_callbacks.classMustBeLoadedBeforeCodeIsRun = &_classMustBeLoadedBeforeCodeIsRun; + s_callbacks.getBuiltinClass = &_getBuiltinClass; + s_callbacks.getTypeForPrimitiveValueClass = &_getTypeForPrimitiveValueClass; + s_callbacks.getTypeForPrimitiveNumericClass = &_getTypeForPrimitiveNumericClass; + s_callbacks.canCast = &_canCast; + s_callbacks.compareTypesForCast = &_compareTypesForCast; + s_callbacks.compareTypesForEquality = &_compareTypesForEquality; + s_callbacks.isMoreSpecificType = &_isMoreSpecificType; + s_callbacks.isExactType = &_isExactType; + s_callbacks.isGenericType = &_isGenericType; + s_callbacks.isNullableType = &_isNullableType; + s_callbacks.isEnum = &_isEnum; + s_callbacks.getParentType = &_getParentType; + s_callbacks.getChildType = &_getChildType; + s_callbacks.isSDArray = &_isSDArray; + s_callbacks.getArrayRank = &_getArrayRank; + s_callbacks.getArrayIntrinsicID = &_getArrayIntrinsicID; + s_callbacks.getArrayInitializationData = &_getArrayInitializationData; + s_callbacks.canAccessClass = &_canAccessClass; + s_callbacks.printFieldName = &_printFieldName; + s_callbacks.getFieldClass = &_getFieldClass; + s_callbacks.getFieldType = &_getFieldType; + s_callbacks.getFieldOffset = &_getFieldOffset; + s_callbacks.getFieldInfo = &_getFieldInfo; + s_callbacks.getThreadLocalFieldInfo = &_getThreadLocalFieldInfo; + s_callbacks.getThreadLocalStaticBlocksInfo = &_getThreadLocalStaticBlocksInfo; + s_callbacks.getThreadLocalStaticInfo_NativeAOT = &_getThreadLocalStaticInfo_NativeAOT; + s_callbacks.isFieldStatic = &_isFieldStatic; + s_callbacks.getArrayOrStringLength = &_getArrayOrStringLength; + s_callbacks.getBoundaries = &_getBoundaries; + s_callbacks.setBoundaries = &_setBoundaries; + s_callbacks.getVars = &_getVars; + s_callbacks.setVars = &_setVars; + s_callbacks.reportRichMappings = &_reportRichMappings; + s_callbacks.reportAsyncDebugInfo = &_reportAsyncDebugInfo; + s_callbacks.reportMetadata = &_reportMetadata; + s_callbacks.allocateArray = &_allocateArray; + s_callbacks.freeArray = &_freeArray; + s_callbacks.getArgNext = &_getArgNext; + s_callbacks.getArgType = &_getArgType; + s_callbacks.getExactClasses = &_getExactClasses; + s_callbacks.getArgClass = &_getArgClass; + s_callbacks.getHFAType = &_getHFAType; + s_callbacks.runWithErrorTrap = &_runWithErrorTrap; + s_callbacks.runWithSPMIErrorTrap = &_runWithSPMIErrorTrap; + s_callbacks.getEEInfo = &_getEEInfo; + s_callbacks.getAsyncInfo = &_getAsyncInfo; + s_callbacks.getMethodDefFromMethod = &_getMethodDefFromMethod; + s_callbacks.printMethodName = &_printMethodName; + s_callbacks.getMethodNameFromMetadata = &_getMethodNameFromMetadata; + s_callbacks.getMethodHash = &_getMethodHash; + s_callbacks.getSystemVAmd64PassStructInRegisterDescriptor = &_getSystemVAmd64PassStructInRegisterDescriptor; + s_callbacks.getSwiftLowering = &_getSwiftLowering; + s_callbacks.getFpStructLowering = &_getFpStructLowering; + s_callbacks.getThreadTLSIndex = &_getThreadTLSIndex; + s_callbacks.getAddrOfCaptureThreadGlobal = &_getAddrOfCaptureThreadGlobal; + s_callbacks.getHelperFtn = &_getHelperFtn; + s_callbacks.getFunctionEntryPoint = &_getFunctionEntryPoint; + s_callbacks.getFunctionFixedEntryPoint = &_getFunctionFixedEntryPoint; + s_callbacks.embedModuleHandle = &_embedModuleHandle; + s_callbacks.embedClassHandle = &_embedClassHandle; + s_callbacks.embedMethodHandle = &_embedMethodHandle; + s_callbacks.embedFieldHandle = &_embedFieldHandle; + s_callbacks.embedGenericHandle = &_embedGenericHandle; + s_callbacks.getLocationOfThisType = &_getLocationOfThisType; + s_callbacks.getAddressOfPInvokeTarget = &_getAddressOfPInvokeTarget; + s_callbacks.GetCookieForPInvokeCalliSig = &_GetCookieForPInvokeCalliSig; + s_callbacks.GetCookieForInterpreterCalliSig = &_GetCookieForInterpreterCalliSig; + s_callbacks.getJustMyCodeHandle = &_getJustMyCodeHandle; + s_callbacks.GetProfilingHandle = &_GetProfilingHandle; + s_callbacks.getCallInfo = &_getCallInfo; + s_callbacks.getStaticFieldContent = &_getStaticFieldContent; + s_callbacks.getObjectContent = &_getObjectContent; + s_callbacks.getStaticFieldCurrentClass = &_getStaticFieldCurrentClass; + s_callbacks.getVarArgsHandle = &_getVarArgsHandle; + s_callbacks.constructStringLiteral = &_constructStringLiteral; + s_callbacks.emptyStringLiteral = &_emptyStringLiteral; + s_callbacks.getFieldThreadLocalStoreID = &_getFieldThreadLocalStoreID; + s_callbacks.GetDelegateCtor = &_GetDelegateCtor; + s_callbacks.MethodCompileComplete = &_MethodCompileComplete; + s_callbacks.getTailCallHelpers = &_getTailCallHelpers; + s_callbacks.getContinuationType = &_getContinuationType; + s_callbacks.getAsyncResumptionStub = &_getAsyncResumptionStub; + s_callbacks.convertPInvokeCalliToCall = &_convertPInvokeCalliToCall; + s_callbacks.notifyInstructionSetUsage = &_notifyInstructionSetUsage; + s_callbacks.updateEntryPointForTailCall = &_updateEntryPointForTailCall; + s_callbacks.allocMem = &_allocMem; + s_callbacks.reserveUnwindInfo = &_reserveUnwindInfo; + s_callbacks.allocUnwindInfo = &_allocUnwindInfo; + s_callbacks.allocGCInfo = &_allocGCInfo; + s_callbacks.setEHcount = &_setEHcount; + s_callbacks.setEHinfo = &_setEHinfo; + s_callbacks.logMsg = &_logMsg; + s_callbacks.doAssert = &_doAssert; + s_callbacks.reportFatalError = &_reportFatalError; + s_callbacks.getPgoInstrumentationResults = &_getPgoInstrumentationResults; + s_callbacks.allocPgoInstrumentationBySchema = &_allocPgoInstrumentationBySchema; + s_callbacks.recordCallSite = &_recordCallSite; + s_callbacks.recordRelocation = &_recordRelocation; + s_callbacks.getRelocTypeHint = &_getRelocTypeHint; + s_callbacks.getExpectedTargetArchitecture = &_getExpectedTargetArchitecture; + s_callbacks.getJitFlags = &_getJitFlags; + s_callbacks.getSpecialCopyHelper = &_getSpecialCopyHelper; + } + + public delegate* unmanaged isIntrinsic; + public delegate* unmanaged notifyMethodInfoUsage; + public delegate* unmanaged getMethodAttribs; + public delegate* unmanaged setMethodAttribs; + public delegate* unmanaged getMethodSig; + public delegate* unmanaged getMethodInfo; + public delegate* unmanaged haveSameMethodDefinition; + public delegate* unmanaged getTypeDefinition; + public delegate* unmanaged canInline; + public delegate* unmanaged beginInlining; + public delegate* unmanaged reportInliningDecision; + public delegate* unmanaged canTailCall; + public delegate* unmanaged reportTailCallDecision; + public delegate* unmanaged getEHinfo; + public delegate* unmanaged getMethodClass; + public delegate* unmanaged getMethodVTableOffset; + public delegate* unmanaged resolveVirtualMethod; + public delegate* unmanaged getUnboxedEntry; + public delegate* unmanaged getInstantiatedEntry; + public delegate* unmanaged getDefaultComparerClass; + public delegate* unmanaged getDefaultEqualityComparerClass; + public delegate* unmanaged getSZArrayHelperEnumeratorClass; + public delegate* unmanaged expandRawHandleIntrinsic; + public delegate* unmanaged isIntrinsicType; + public delegate* unmanaged getUnmanagedCallConv; + public delegate* unmanaged pInvokeMarshalingRequired; + public delegate* unmanaged satisfiesMethodConstraints; + public delegate* unmanaged methodMustBeLoadedBeforeCodeIsRun; + public delegate* unmanaged getGSCookie; + public delegate* unmanaged setPatchpointInfo; + public delegate* unmanaged getOSRInfo; + public delegate* unmanaged resolveToken; + public delegate* unmanaged findSig; + public delegate* unmanaged findCallSiteSig; + public delegate* unmanaged getTokenTypeAsHandle; + public delegate* unmanaged getStringLiteral; + public delegate* unmanaged printObjectDescription; + public delegate* unmanaged asCorInfoType; + public delegate* unmanaged getClassNameFromMetadata; + public delegate* unmanaged getTypeInstantiationArgument; + public delegate* unmanaged getMethodInstantiationArgument; + public delegate* unmanaged printClassName; + public delegate* unmanaged isValueClass; + public delegate* unmanaged getClassAttribs; + public delegate* unmanaged getClassAssemblyName; + public delegate* unmanaged LongLifetimeMalloc; + public delegate* unmanaged LongLifetimeFree; + public delegate* unmanaged getIsClassInitedFlagAddress; + public delegate* unmanaged getClassThreadStaticDynamicInfo; + public delegate* unmanaged getClassStaticDynamicInfo; + public delegate* unmanaged getStaticBaseAddress; + public delegate* unmanaged getClassSize; + public delegate* unmanaged getHeapClassSize; + public delegate* unmanaged canAllocateOnStack; + public delegate* unmanaged getClassAlignmentRequirement; + public delegate* unmanaged getClassGClayout; + public delegate* unmanaged getClassNumInstanceFields; + public delegate* unmanaged getFieldInClass; + public delegate* unmanaged getTypeLayout; + public delegate* unmanaged checkMethodModifier; + public delegate* unmanaged getNewHelper; + public delegate* unmanaged getNewArrHelper; + public delegate* unmanaged getCastingHelper; + public delegate* unmanaged getSharedCCtorHelper; + public delegate* unmanaged getTypeForBox; + public delegate* unmanaged getBoxHelper; + public delegate* unmanaged getUnBoxHelper; + public delegate* unmanaged getRuntimeTypePointer; + public delegate* unmanaged isObjectImmutable; + public delegate* unmanaged getStringChar; + public delegate* unmanaged getObjectType; + public delegate* unmanaged getReadyToRunHelper; + public delegate* unmanaged getReadyToRunDelegateCtorHelper; + public delegate* unmanaged initClass; + public delegate* unmanaged classMustBeLoadedBeforeCodeIsRun; + public delegate* unmanaged getBuiltinClass; + public delegate* unmanaged getTypeForPrimitiveValueClass; + public delegate* unmanaged getTypeForPrimitiveNumericClass; + public delegate* unmanaged canCast; + public delegate* unmanaged compareTypesForCast; + public delegate* unmanaged compareTypesForEquality; + public delegate* unmanaged isMoreSpecificType; + public delegate* unmanaged isExactType; + public delegate* unmanaged isGenericType; + public delegate* unmanaged isNullableType; + public delegate* unmanaged isEnum; + public delegate* unmanaged getParentType; + public delegate* unmanaged getChildType; + public delegate* unmanaged isSDArray; + public delegate* unmanaged getArrayRank; + public delegate* unmanaged getArrayIntrinsicID; + public delegate* unmanaged getArrayInitializationData; + public delegate* unmanaged canAccessClass; + public delegate* unmanaged printFieldName; + public delegate* unmanaged getFieldClass; + public delegate* unmanaged getFieldType; + public delegate* unmanaged getFieldOffset; + public delegate* unmanaged getFieldInfo; + public delegate* unmanaged getThreadLocalFieldInfo; + public delegate* unmanaged getThreadLocalStaticBlocksInfo; + public delegate* unmanaged getThreadLocalStaticInfo_NativeAOT; + public delegate* unmanaged isFieldStatic; + public delegate* unmanaged getArrayOrStringLength; + public delegate* unmanaged getBoundaries; + public delegate* unmanaged setBoundaries; + public delegate* unmanaged getVars; + public delegate* unmanaged setVars; + public delegate* unmanaged reportRichMappings; + public delegate* unmanaged reportAsyncDebugInfo; + public delegate* unmanaged reportMetadata; + public delegate* unmanaged allocateArray; + public delegate* unmanaged freeArray; + public delegate* unmanaged getArgNext; + public delegate* unmanaged getArgType; + public delegate* unmanaged getExactClasses; + public delegate* unmanaged getArgClass; + public delegate* unmanaged getHFAType; + public delegate* unmanaged runWithErrorTrap; + public delegate* unmanaged runWithSPMIErrorTrap; + public delegate* unmanaged getEEInfo; + public delegate* unmanaged getAsyncInfo; + public delegate* unmanaged getMethodDefFromMethod; + public delegate* unmanaged printMethodName; + public delegate* unmanaged getMethodNameFromMetadata; + public delegate* unmanaged getMethodHash; + public delegate* unmanaged getSystemVAmd64PassStructInRegisterDescriptor; + public delegate* unmanaged getSwiftLowering; + public delegate* unmanaged getFpStructLowering; + public delegate* unmanaged getThreadTLSIndex; + public delegate* unmanaged getAddrOfCaptureThreadGlobal; + public delegate* unmanaged getHelperFtn; + public delegate* unmanaged getFunctionEntryPoint; + public delegate* unmanaged getFunctionFixedEntryPoint; + public delegate* unmanaged embedModuleHandle; + public delegate* unmanaged embedClassHandle; + public delegate* unmanaged embedMethodHandle; + public delegate* unmanaged embedFieldHandle; + public delegate* unmanaged embedGenericHandle; + public delegate* unmanaged getLocationOfThisType; + public delegate* unmanaged getAddressOfPInvokeTarget; + public delegate* unmanaged GetCookieForPInvokeCalliSig; + public delegate* unmanaged GetCookieForInterpreterCalliSig; + public delegate* unmanaged getJustMyCodeHandle; + public delegate* unmanaged GetProfilingHandle; + public delegate* unmanaged getCallInfo; + public delegate* unmanaged getStaticFieldContent; + public delegate* unmanaged getObjectContent; + public delegate* unmanaged getStaticFieldCurrentClass; + public delegate* unmanaged getVarArgsHandle; + public delegate* unmanaged constructStringLiteral; + public delegate* unmanaged emptyStringLiteral; + public delegate* unmanaged getFieldThreadLocalStoreID; + public delegate* unmanaged GetDelegateCtor; + public delegate* unmanaged MethodCompileComplete; + public delegate* unmanaged getTailCallHelpers; + public delegate* unmanaged getContinuationType; + public delegate* unmanaged getAsyncResumptionStub; + public delegate* unmanaged convertPInvokeCalliToCall; + public delegate* unmanaged notifyInstructionSetUsage; + public delegate* unmanaged updateEntryPointForTailCall; + public delegate* unmanaged allocMem; + public delegate* unmanaged reserveUnwindInfo; + public delegate* unmanaged allocUnwindInfo; + public delegate* unmanaged allocGCInfo; + public delegate* unmanaged setEHcount; + public delegate* unmanaged setEHinfo; + public delegate* unmanaged logMsg; + public delegate* unmanaged doAssert; + public delegate* unmanaged reportFatalError; + public delegate* unmanaged getPgoInstrumentationResults; + public delegate* unmanaged allocPgoInstrumentationBySchema; + public delegate* unmanaged recordCallSite; + public delegate* unmanaged recordRelocation; + public delegate* unmanaged getRelocTypeHint; + public delegate* unmanaged getExpectedTargetArchitecture; + public delegate* unmanaged getJitFlags; + public delegate* unmanaged getSpecialCopyHelper; + } + + private static IntPtr GetUnmanagedCallbacks() + { + return (IntPtr)Unsafe.AsPointer(ref Unsafe.AsRef(in ICorJitInfoCallbacks.s_callbacks)); + } + [UnmanagedCallersOnly] private static byte _isIntrinsic(IntPtr thisHandle, IntPtr* ppException, CORINFO_METHOD_STRUCT_* ftn) { @@ -1972,21 +2343,6 @@ private static void _getFunctionFixedEntryPoint(IntPtr thisHandle, IntPtr* ppExc } } - [UnmanagedCallersOnly] - private static CorInfoHelpFunc _getLazyStringLiteralHelper(IntPtr thisHandle, IntPtr* ppException, CORINFO_MODULE_STRUCT_* handle) - { - var _this = GetThis(thisHandle); - try - { - return _this.getLazyStringLiteralHelper(handle); - } - catch (Exception ex) - { - *ppException = _this.AllocException(ex); - return default; - } - } - [UnmanagedCallersOnly] private static CORINFO_MODULE_STRUCT_* _embedModuleHandle(IntPtr thisHandle, IntPtr* ppException, CORINFO_MODULE_STRUCT_* handle, void** ppIndirection) { @@ -2632,191 +2988,5 @@ private static uint _getJitFlags(IntPtr thisHandle, IntPtr* ppException, CORJIT_ } } - - private static IntPtr GetUnmanagedCallbacks() - { - void** callbacks = (void**)NativeMemory.Alloc((nuint)(sizeof(void*) * 178)); - - callbacks[0] = (delegate* unmanaged)&_isIntrinsic; - callbacks[1] = (delegate* unmanaged)&_notifyMethodInfoUsage; - callbacks[2] = (delegate* unmanaged)&_getMethodAttribs; - callbacks[3] = (delegate* unmanaged)&_setMethodAttribs; - callbacks[4] = (delegate* unmanaged)&_getMethodSig; - callbacks[5] = (delegate* unmanaged)&_getMethodInfo; - callbacks[6] = (delegate* unmanaged)&_haveSameMethodDefinition; - callbacks[7] = (delegate* unmanaged)&_getTypeDefinition; - callbacks[8] = (delegate* unmanaged)&_canInline; - callbacks[9] = (delegate* unmanaged)&_beginInlining; - callbacks[10] = (delegate* unmanaged)&_reportInliningDecision; - callbacks[11] = (delegate* unmanaged)&_canTailCall; - callbacks[12] = (delegate* unmanaged)&_reportTailCallDecision; - callbacks[13] = (delegate* unmanaged)&_getEHinfo; - callbacks[14] = (delegate* unmanaged)&_getMethodClass; - callbacks[15] = (delegate* unmanaged)&_getMethodVTableOffset; - callbacks[16] = (delegate* unmanaged)&_resolveVirtualMethod; - callbacks[17] = (delegate* unmanaged)&_getUnboxedEntry; - callbacks[18] = (delegate* unmanaged)&_getInstantiatedEntry; - callbacks[19] = (delegate* unmanaged)&_getDefaultComparerClass; - callbacks[20] = (delegate* unmanaged)&_getDefaultEqualityComparerClass; - callbacks[21] = (delegate* unmanaged)&_getSZArrayHelperEnumeratorClass; - callbacks[22] = (delegate* unmanaged)&_expandRawHandleIntrinsic; - callbacks[23] = (delegate* unmanaged)&_isIntrinsicType; - callbacks[24] = (delegate* unmanaged)&_getUnmanagedCallConv; - callbacks[25] = (delegate* unmanaged)&_pInvokeMarshalingRequired; - callbacks[26] = (delegate* unmanaged)&_satisfiesMethodConstraints; - callbacks[27] = (delegate* unmanaged)&_methodMustBeLoadedBeforeCodeIsRun; - callbacks[28] = (delegate* unmanaged)&_getGSCookie; - callbacks[29] = (delegate* unmanaged)&_setPatchpointInfo; - callbacks[30] = (delegate* unmanaged)&_getOSRInfo; - callbacks[31] = (delegate* unmanaged)&_resolveToken; - callbacks[32] = (delegate* unmanaged)&_findSig; - callbacks[33] = (delegate* unmanaged)&_findCallSiteSig; - callbacks[34] = (delegate* unmanaged)&_getTokenTypeAsHandle; - callbacks[35] = (delegate* unmanaged)&_getStringLiteral; - callbacks[36] = (delegate* unmanaged)&_printObjectDescription; - callbacks[37] = (delegate* unmanaged)&_asCorInfoType; - callbacks[38] = (delegate* unmanaged)&_getClassNameFromMetadata; - callbacks[39] = (delegate* unmanaged)&_getTypeInstantiationArgument; - callbacks[40] = (delegate* unmanaged)&_getMethodInstantiationArgument; - callbacks[41] = (delegate* unmanaged)&_printClassName; - callbacks[42] = (delegate* unmanaged)&_isValueClass; - callbacks[43] = (delegate* unmanaged)&_getClassAttribs; - callbacks[44] = (delegate* unmanaged)&_getClassAssemblyName; - callbacks[45] = (delegate* unmanaged)&_LongLifetimeMalloc; - callbacks[46] = (delegate* unmanaged)&_LongLifetimeFree; - callbacks[47] = (delegate* unmanaged)&_getIsClassInitedFlagAddress; - callbacks[48] = (delegate* unmanaged)&_getClassThreadStaticDynamicInfo; - callbacks[49] = (delegate* unmanaged)&_getClassStaticDynamicInfo; - callbacks[50] = (delegate* unmanaged)&_getStaticBaseAddress; - callbacks[51] = (delegate* unmanaged)&_getClassSize; - callbacks[52] = (delegate* unmanaged)&_getHeapClassSize; - callbacks[53] = (delegate* unmanaged)&_canAllocateOnStack; - callbacks[54] = (delegate* unmanaged)&_getClassAlignmentRequirement; - callbacks[55] = (delegate* unmanaged)&_getClassGClayout; - callbacks[56] = (delegate* unmanaged)&_getClassNumInstanceFields; - callbacks[57] = (delegate* unmanaged)&_getFieldInClass; - callbacks[58] = (delegate* unmanaged)&_getTypeLayout; - callbacks[59] = (delegate* unmanaged)&_checkMethodModifier; - callbacks[60] = (delegate* unmanaged)&_getNewHelper; - callbacks[61] = (delegate* unmanaged)&_getNewArrHelper; - callbacks[62] = (delegate* unmanaged)&_getCastingHelper; - callbacks[63] = (delegate* unmanaged)&_getSharedCCtorHelper; - callbacks[64] = (delegate* unmanaged)&_getTypeForBox; - callbacks[65] = (delegate* unmanaged)&_getBoxHelper; - callbacks[66] = (delegate* unmanaged)&_getUnBoxHelper; - callbacks[67] = (delegate* unmanaged)&_getRuntimeTypePointer; - callbacks[68] = (delegate* unmanaged)&_isObjectImmutable; - callbacks[69] = (delegate* unmanaged)&_getStringChar; - callbacks[70] = (delegate* unmanaged)&_getObjectType; - callbacks[71] = (delegate* unmanaged)&_getReadyToRunHelper; - callbacks[72] = (delegate* unmanaged)&_getReadyToRunDelegateCtorHelper; - callbacks[73] = (delegate* unmanaged)&_initClass; - callbacks[74] = (delegate* unmanaged)&_classMustBeLoadedBeforeCodeIsRun; - callbacks[75] = (delegate* unmanaged)&_getBuiltinClass; - callbacks[76] = (delegate* unmanaged)&_getTypeForPrimitiveValueClass; - callbacks[77] = (delegate* unmanaged)&_getTypeForPrimitiveNumericClass; - callbacks[78] = (delegate* unmanaged)&_canCast; - callbacks[79] = (delegate* unmanaged)&_compareTypesForCast; - callbacks[80] = (delegate* unmanaged)&_compareTypesForEquality; - callbacks[81] = (delegate* unmanaged)&_isMoreSpecificType; - callbacks[82] = (delegate* unmanaged)&_isExactType; - callbacks[83] = (delegate* unmanaged)&_isGenericType; - callbacks[84] = (delegate* unmanaged)&_isNullableType; - callbacks[85] = (delegate* unmanaged)&_isEnum; - callbacks[86] = (delegate* unmanaged)&_getParentType; - callbacks[87] = (delegate* unmanaged)&_getChildType; - callbacks[88] = (delegate* unmanaged)&_isSDArray; - callbacks[89] = (delegate* unmanaged)&_getArrayRank; - callbacks[90] = (delegate* unmanaged)&_getArrayIntrinsicID; - callbacks[91] = (delegate* unmanaged)&_getArrayInitializationData; - callbacks[92] = (delegate* unmanaged)&_canAccessClass; - callbacks[93] = (delegate* unmanaged)&_printFieldName; - callbacks[94] = (delegate* unmanaged)&_getFieldClass; - callbacks[95] = (delegate* unmanaged)&_getFieldType; - callbacks[96] = (delegate* unmanaged)&_getFieldOffset; - callbacks[97] = (delegate* unmanaged)&_getFieldInfo; - callbacks[98] = (delegate* unmanaged)&_getThreadLocalFieldInfo; - callbacks[99] = (delegate* unmanaged)&_getThreadLocalStaticBlocksInfo; - callbacks[100] = (delegate* unmanaged)&_getThreadLocalStaticInfo_NativeAOT; - callbacks[101] = (delegate* unmanaged)&_isFieldStatic; - callbacks[102] = (delegate* unmanaged)&_getArrayOrStringLength; - callbacks[103] = (delegate* unmanaged)&_getBoundaries; - callbacks[104] = (delegate* unmanaged)&_setBoundaries; - callbacks[105] = (delegate* unmanaged)&_getVars; - callbacks[106] = (delegate* unmanaged)&_setVars; - callbacks[107] = (delegate* unmanaged)&_reportRichMappings; - callbacks[108] = (delegate* unmanaged)&_reportAsyncDebugInfo; - callbacks[109] = (delegate* unmanaged)&_reportMetadata; - callbacks[110] = (delegate* unmanaged)&_allocateArray; - callbacks[111] = (delegate* unmanaged)&_freeArray; - callbacks[112] = (delegate* unmanaged)&_getArgNext; - callbacks[113] = (delegate* unmanaged)&_getArgType; - callbacks[114] = (delegate* unmanaged)&_getExactClasses; - callbacks[115] = (delegate* unmanaged)&_getArgClass; - callbacks[116] = (delegate* unmanaged)&_getHFAType; - callbacks[117] = (delegate* unmanaged)&_runWithErrorTrap; - callbacks[118] = (delegate* unmanaged)&_runWithSPMIErrorTrap; - callbacks[119] = (delegate* unmanaged)&_getEEInfo; - callbacks[120] = (delegate* unmanaged)&_getAsyncInfo; - callbacks[121] = (delegate* unmanaged)&_getMethodDefFromMethod; - callbacks[122] = (delegate* unmanaged)&_printMethodName; - callbacks[123] = (delegate* unmanaged)&_getMethodNameFromMetadata; - callbacks[124] = (delegate* unmanaged)&_getMethodHash; - callbacks[125] = (delegate* unmanaged)&_getSystemVAmd64PassStructInRegisterDescriptor; - callbacks[126] = (delegate* unmanaged)&_getSwiftLowering; - callbacks[127] = (delegate* unmanaged)&_getFpStructLowering; - callbacks[128] = (delegate* unmanaged)&_getThreadTLSIndex; - callbacks[129] = (delegate* unmanaged)&_getAddrOfCaptureThreadGlobal; - callbacks[130] = (delegate* unmanaged)&_getHelperFtn; - callbacks[131] = (delegate* unmanaged)&_getFunctionEntryPoint; - callbacks[132] = (delegate* unmanaged)&_getFunctionFixedEntryPoint; - callbacks[133] = (delegate* unmanaged)&_getLazyStringLiteralHelper; - callbacks[134] = (delegate* unmanaged)&_embedModuleHandle; - callbacks[135] = (delegate* unmanaged)&_embedClassHandle; - callbacks[136] = (delegate* unmanaged)&_embedMethodHandle; - callbacks[137] = (delegate* unmanaged)&_embedFieldHandle; - callbacks[138] = (delegate* unmanaged)&_embedGenericHandle; - callbacks[139] = (delegate* unmanaged)&_getLocationOfThisType; - callbacks[140] = (delegate* unmanaged)&_getAddressOfPInvokeTarget; - callbacks[141] = (delegate* unmanaged)&_GetCookieForPInvokeCalliSig; - callbacks[142] = (delegate* unmanaged)&_GetCookieForInterpreterCalliSig; - callbacks[143] = (delegate* unmanaged)&_getJustMyCodeHandle; - callbacks[144] = (delegate* unmanaged)&_GetProfilingHandle; - callbacks[145] = (delegate* unmanaged)&_getCallInfo; - callbacks[146] = (delegate* unmanaged)&_getStaticFieldContent; - callbacks[147] = (delegate* unmanaged)&_getObjectContent; - callbacks[148] = (delegate* unmanaged)&_getStaticFieldCurrentClass; - callbacks[149] = (delegate* unmanaged)&_getVarArgsHandle; - callbacks[150] = (delegate* unmanaged)&_constructStringLiteral; - callbacks[151] = (delegate* unmanaged)&_emptyStringLiteral; - callbacks[152] = (delegate* unmanaged)&_getFieldThreadLocalStoreID; - callbacks[153] = (delegate* unmanaged)&_GetDelegateCtor; - callbacks[154] = (delegate* unmanaged)&_MethodCompileComplete; - callbacks[155] = (delegate* unmanaged)&_getTailCallHelpers; - callbacks[156] = (delegate* unmanaged)&_getContinuationType; - callbacks[157] = (delegate* unmanaged)&_getAsyncResumptionStub; - callbacks[158] = (delegate* unmanaged)&_convertPInvokeCalliToCall; - callbacks[159] = (delegate* unmanaged)&_notifyInstructionSetUsage; - callbacks[160] = (delegate* unmanaged)&_updateEntryPointForTailCall; - callbacks[161] = (delegate* unmanaged)&_allocMem; - callbacks[162] = (delegate* unmanaged)&_reserveUnwindInfo; - callbacks[163] = (delegate* unmanaged)&_allocUnwindInfo; - callbacks[164] = (delegate* unmanaged)&_allocGCInfo; - callbacks[165] = (delegate* unmanaged)&_setEHcount; - callbacks[166] = (delegate* unmanaged)&_setEHinfo; - callbacks[167] = (delegate* unmanaged)&_logMsg; - callbacks[168] = (delegate* unmanaged)&_doAssert; - callbacks[169] = (delegate* unmanaged)&_reportFatalError; - callbacks[170] = (delegate* unmanaged)&_getPgoInstrumentationResults; - callbacks[171] = (delegate* unmanaged)&_allocPgoInstrumentationBySchema; - callbacks[172] = (delegate* unmanaged)&_recordCallSite; - callbacks[173] = (delegate* unmanaged)&_recordRelocation; - callbacks[174] = (delegate* unmanaged)&_getRelocTypeHint; - callbacks[175] = (delegate* unmanaged)&_getExpectedTargetArchitecture; - callbacks[176] = (delegate* unmanaged)&_getJitFlags; - callbacks[177] = (delegate* unmanaged)&_getSpecialCopyHelper; - - return (IntPtr)callbacks; - } } } diff --git a/src/runtime/src/coreclr/tools/Common/JitInterface/JitConfigProvider.cs b/src/runtime/src/coreclr/tools/Common/JitInterface/JitConfigProvider.cs index 6a4fc6bc2b0..7d1c182ce32 100644 --- a/src/runtime/src/coreclr/tools/Common/JitInterface/JitConfigProvider.cs +++ b/src/runtime/src/coreclr/tools/Common/JitInterface/JitConfigProvider.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; using System.Threading; @@ -25,6 +26,21 @@ public static JitConfigProvider Instance } } + [FixedAddressValueType] + private static readonly JitConfigProviderVtbl s_JitConfigProviderVtbl; + + [FixedAddressValueType] + private static readonly JitConfigProviderInstance s_JitConfigProvider; + + unsafe static JitConfigProvider() + { + s_JitConfigProviderVtbl.GetIntConfigValue = &getIntConfigValue; + s_JitConfigProviderVtbl.GetStringConfigValue = &getStringConfigValue; + s_JitConfigProvider.Vtbl = (JitConfigProviderVtbl*)Unsafe.AsPointer(ref s_JitConfigProviderVtbl); + } + + public unsafe static IntPtr UnmanagedInstance => (IntPtr)Unsafe.AsPointer(ref Unsafe.AsRef(in s_JitConfigProvider)); + private CorJitFlag[] _jitFlags; private Dictionary _config = new Dictionary(StringComparer.OrdinalIgnoreCase); @@ -65,11 +81,6 @@ public static void Initialize( CorInfoImpl.Startup(CorInfoImpl.TargetToOs(target)); } - public IntPtr UnmanagedInstance - { - get; - } - public IEnumerable Flags => _jitFlags; /// @@ -91,8 +102,6 @@ public JitConfigProvider(IEnumerable jitFlags, IEnumerable)&getIntConfigValue; - callbacks[1] = (delegate* unmanaged)&getStringConfigValue; - - IntPtr instance = (IntPtr)NativeMemory.Alloc((nuint)sizeof(IntPtr)); - *(IntPtr*)instance = (IntPtr)callbacks; + public delegate* unmanaged GetIntConfigValue; + public delegate* unmanaged GetStringConfigValue; + } - return instance; + private unsafe struct JitConfigProviderInstance + { + public JitConfigProviderVtbl* Vtbl; } [UnmanagedCallersOnly] diff --git a/src/runtime/src/coreclr/tools/Common/JitInterface/ThunkGenerator/Program.cs b/src/runtime/src/coreclr/tools/Common/JitInterface/ThunkGenerator/Program.cs index 172c2839f01..3f3ed10f770 100644 --- a/src/runtime/src/coreclr/tools/Common/JitInterface/ThunkGenerator/Program.cs +++ b/src/runtime/src/coreclr/tools/Common/JitInterface/ThunkGenerator/Program.cs @@ -278,12 +278,44 @@ private static void WriteManagedThunkInterface(TextWriter tw, IEnumerable {decl.FunctionName};"); + } + tw.Write(@" } + + private static IntPtr GetUnmanagedCallbacks() + { + return (IntPtr)Unsafe.AsPointer(ref Unsafe.AsRef(in ICorJitInfoCallbacks.s_callbacks)); + } + "); foreach (FunctionDecl decl in functionData) @@ -345,29 +377,7 @@ internal unsafe partial class CorInfoImpl tw.WriteLine(); } - int total = functionData.Count(); - tw.WriteLine(@" - private static IntPtr GetUnmanagedCallbacks() - { - void** callbacks = (void**)NativeMemory.Alloc((nuint)(sizeof(void*) * " + total + @")); -"); - - int index = 0; - foreach (FunctionDecl decl in functionData) - { - tw.Write($" callbacks[{index}] = (delegate* unmanaged)&_{decl.FunctionName};"); - index++; - } - - tw.WriteLine(@" - return (IntPtr)callbacks; - } - } + tw.WriteLine(@" } }"); } diff --git a/src/runtime/src/coreclr/tools/Common/JitInterface/ThunkGenerator/ThunkInput.txt b/src/runtime/src/coreclr/tools/Common/JitInterface/ThunkGenerator/ThunkInput.txt index c584192347b..1212351dbcd 100644 --- a/src/runtime/src/coreclr/tools/Common/JitInterface/ThunkGenerator/ThunkInput.txt +++ b/src/runtime/src/coreclr/tools/Common/JitInterface/ThunkGenerator/ThunkInput.txt @@ -303,7 +303,6 @@ FUNCTIONS void getHelperFtn (CorInfoHelpFunc ftnNum, CORINFO_CONST_LOOKUP* pNativeEntrypoint, CORINFO_METHOD_HANDLE *pMethod); void getFunctionEntryPoint(CORINFO_METHOD_HANDLE ftn, REF_CORINFO_CONST_LOOKUP pResult, CORINFO_ACCESS_FLAGS accessFlags); void getFunctionFixedEntryPoint(CORINFO_METHOD_HANDLE ftn, bool isUnsafeFunctionPointer, REF_CORINFO_CONST_LOOKUP pResult); - CorInfoHelpFunc getLazyStringLiteralHelper(CORINFO_MODULE_HANDLE handle); CORINFO_MODULE_HANDLE embedModuleHandle(CORINFO_MODULE_HANDLE handle, void **ppIndirection); CORINFO_CLASS_HANDLE embedClassHandle(CORINFO_CLASS_HANDLE handle, void **ppIndirection); CORINFO_METHOD_HANDLE embedMethodHandle(CORINFO_METHOD_HANDLE handle, void **ppIndirection); diff --git a/src/runtime/src/coreclr/tools/Common/TypeSystem/TypesDebugInfoWriter/TypesDebugInfoWriter.cs b/src/runtime/src/coreclr/tools/Common/TypeSystem/TypesDebugInfoWriter/TypesDebugInfoWriter.cs index 27ad49899a3..b792e754e33 100644 --- a/src/runtime/src/coreclr/tools/Common/TypeSystem/TypesDebugInfoWriter/TypesDebugInfoWriter.cs +++ b/src/runtime/src/coreclr/tools/Common/TypeSystem/TypesDebugInfoWriter/TypesDebugInfoWriter.cs @@ -32,7 +32,7 @@ uint GetCompleteClassTypeIndex(ClassTypeDescriptor classTypeDescriptor, ClassFie public struct EnumRecordTypeDescriptor { public ulong Value; - public string Name; + public Utf8String Name; } [StructLayout(LayoutKind.Sequential)] @@ -57,13 +57,13 @@ public struct DataFieldDescriptor { public uint FieldTypeIndex; public ulong Offset; - public string Name; + public Utf8String Name; } [StructLayout(LayoutKind.Sequential)] public struct StaticDataFieldDescriptor { - public string StaticDataName; + public Utf8String StaticDataName; public ulong StaticOffset; public int IsStaticDataInObject; } @@ -109,6 +109,6 @@ public struct MemberFunctionIdTypeDescriptor { public uint MemberFunction; public uint ParentClass; - public string Name; + public Utf8String Name; } } diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/EETypeNode.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/EETypeNode.cs index 423d845f8a4..8ecdb7b7c0d 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/EETypeNode.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/EETypeNode.cs @@ -229,11 +229,6 @@ public override bool InterestingForDynamicDependencyAnalysis public override bool StaticDependenciesAreComputed => true; - public static string GetMangledName(TypeDesc type, NameMangler nameMangler) - { - return nameMangler.NodeMangler.MethodTable(type); - } - public virtual void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.NodeMangler.MethodTable(_type)); diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GCStaticsNode.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GCStaticsNode.cs index bf645650170..0d848dabd5b 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GCStaticsNode.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GCStaticsNode.cs @@ -39,7 +39,7 @@ public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) public int Offset => 0; public MetadataType Type => _type; - public static string GetMangledName(TypeDesc type, NameMangler nameMangler) + public static Utf8String GetMangledName(TypeDesc type, NameMangler nameMangler) { return nameMangler.NodeMangler.GCStatics(type); } diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/MethodExceptionHandlingInfoNode.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/MethodExceptionHandlingInfoNode.cs index 1b1bd06d72d..d8705af7f7b 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/MethodExceptionHandlingInfoNode.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/MethodExceptionHandlingInfoNode.cs @@ -30,7 +30,7 @@ public override ObjectNodeSection GetSection(NodeFactory factory) => _owningMeth public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { - sb.Append("__ehinfo_" + nameMangler.GetMangledMethodName(_owningMethod)); + sb.Append("__ehinfo_"u8).Append(nameMangler.GetMangledMethodName(_owningMethod)); } public int Offset => 0; public override bool IsShareable => true; diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NodeFactory.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NodeFactory.cs index 68fb7ddfc6b..215e62af768 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NodeFactory.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NodeFactory.cs @@ -273,15 +273,15 @@ private void CreateNodeCaches() return new FieldRvaDataNode(key); }); - _externFunctionSymbols = new NodeCache((string name) => + _externFunctionSymbols = new NodeCache((Utf8String name) => { return new ExternFunctionSymbolNode(name); }); - _externIndirectFunctionSymbols = new NodeCache((string name) => + _externIndirectFunctionSymbols = new NodeCache((Utf8String name) => { return new ExternFunctionSymbolNode(name, isIndirection: true); }); - _externDataSymbols = new NodeCache((string name) => + _externDataSymbols = new NodeCache((Utf8String name) => { return new ExternDataSymbolNode(name); }); @@ -972,30 +972,30 @@ internal ISymbolNode GenericVariance(GenericVarianceDetails details) return _genericVariances.GetOrAdd(details); } - private NodeCache _externFunctionSymbols; + private NodeCache _externFunctionSymbols; - public ISortableSymbolNode ExternFunctionSymbol(string name) + public ISortableSymbolNode ExternFunctionSymbol(Utf8String name) { return _externFunctionSymbols.GetOrAdd(name); } - private NodeCache _externIndirectFunctionSymbols; + private NodeCache _externIndirectFunctionSymbols; - public ISortableSymbolNode ExternIndirectFunctionSymbol(string name) + public ISortableSymbolNode ExternIndirectFunctionSymbol(Utf8String name) { return _externIndirectFunctionSymbols.GetOrAdd(name); } - private NodeCache _externDataSymbols; + private NodeCache _externDataSymbols; - public ISortableSymbolNode ExternDataSymbol(string name) + public ISortableSymbolNode ExternDataSymbol(Utf8String name) { return _externDataSymbols.GetOrAdd(name); } - public ISortableSymbolNode ExternVariable(string name) + public ISortableSymbolNode ExternVariable(Utf8String name) { - string mangledName = NameMangler.NodeMangler.ExternVariable(name); + Utf8String mangledName = NameMangler.NodeMangler.ExternVariable(name); return _externDataSymbols.GetOrAdd(mangledName); } @@ -1563,12 +1563,12 @@ public AnalysisCharacteristicNode AnalysisCharacteristic(string ch) /// Returns alternative symbol name that object writer should produce for given symbols /// in addition to the regular one. /// - public string GetSymbolAlternateName(ISymbolNode node, out bool isHidden) + public Utf8String GetSymbolAlternateName(ISymbolNode node, out bool isHidden) { if (!NodeAliases.TryGetValue(node, out var value)) { isHidden = false; - return null; + return default; } isHidden = value.Hidden; @@ -1595,7 +1595,7 @@ public string GetSymbolAlternateName(ISymbolNode node, out bool isHidden) public ReadyToRunHeaderNode ReadyToRunHeader; - public Dictionary NodeAliases = new Dictionary(); + public Dictionary NodeAliases = new Dictionary(); protected internal TypeManagerIndirectionNode TypeManagerIndirection = new TypeManagerIndirectionNode(); diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NonGCStaticsNode.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NonGCStaticsNode.cs index e03cad4f078..9cc8edccb96 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NonGCStaticsNode.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NonGCStaticsNode.cs @@ -71,7 +71,7 @@ protected override ObjectNodeSection GetDehydratedSection(NodeFactory factory) } } - public static string GetMangledName(TypeDesc type, NameMangler nameMangler) + public static Utf8String GetMangledName(TypeDesc type, NameMangler nameMangler) { return nameMangler.NodeMangler.NonGCStatics(type); } diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/SealedVTableNode.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/SealedVTableNode.cs index f0b9fbf5324..2d994f76ec0 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/SealedVTableNode.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/SealedVTableNode.cs @@ -34,7 +34,7 @@ public SealedVTableNode(TypeDesc type) public virtual void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { - sb.Append(nameMangler.CompilationUnitPrefix + "__SealedVTable_" + nameMangler.NodeMangler.MethodTable(_type)); + sb.Append(nameMangler.CompilationUnitPrefix).Append("__SealedVTable_"u8).Append(nameMangler.NodeMangler.MethodTable(_type)); } int ISymbolNode.Offset => 0; diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ThreadStaticsNode.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ThreadStaticsNode.cs index f024dd24e13..26526a19f50 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ThreadStaticsNode.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ThreadStaticsNode.cs @@ -37,7 +37,7 @@ protected override void OnMarked(NodeFactory factory) factory.ThreadStaticsRegion.AddEmbeddedObject(this); } - public static string GetMangledName(TypeDesc type, NameMangler nameMangler) + public static Utf8String GetMangledName(TypeDesc type, NameMangler nameMangler) { return nameMangler.NodeMangler.ThreadStatics(type); } @@ -48,7 +48,7 @@ public static string GetMangledName(TypeDesc type, NameMangler nameMangler) public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { - string mangledName = _type == null ? "_inlinedThreadStatics" : GetMangledName(_type, nameMangler); + Utf8String mangledName = _type == null ? "_inlinedThreadStatics" : GetMangledName(_type, nameMangler); sb.Append(mangledName); } diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/UnboxingStubNode.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/UnboxingStubNode.cs index bf7eeaea29e..f3c764057b8 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/UnboxingStubNode.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/UnboxingStubNode.cs @@ -41,9 +41,9 @@ public override void AppendMangledName(NameMangler nameMangler, Utf8StringBuilde sb.Append("unbox_"u8).Append(nameMangler.GetMangledMethodName(Method)); } - public static string GetMangledName(NameMangler nameMangler, MethodDesc method) + public static Utf8String GetMangledName(NameMangler nameMangler, MethodDesc method) { - return "unbox_" + nameMangler.GetMangledMethodName(method); + return Utf8String.Concat("unbox_"u8, nameMangler.GetMangledMethodName(method).AsSpan()); } protected override string GetName(NodeFactory factory) => this.GetMangledName(factory.NameMangler); diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/IRootingServiceProvider.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/IRootingServiceProvider.cs index 74bdcbdac01..8896d68dac3 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/IRootingServiceProvider.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/IRootingServiceProvider.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using Internal.Text; using Internal.TypeSystem; namespace ILCompiler @@ -10,7 +11,8 @@ namespace ILCompiler /// public interface IRootingServiceProvider { - void AddCompilationRoot(MethodDesc method, string reason, string exportName = null, bool exportHidden = false); + void AddCompilationRoot(MethodDesc method, string reason) => AddCompilationRoot(method, reason, default); + void AddCompilationRoot(MethodDesc method, string reason, Utf8String exportName, bool exportHidden = false); void AddCompilationRoot(TypeDesc type, string reason); void AddReflectionRoot(TypeDesc type, string reason); void AddReflectionRoot(MethodDesc method, string reason); @@ -19,7 +21,7 @@ public interface IRootingServiceProvider void RootGCStaticBaseForType(TypeDesc type, string reason); void RootNonGCStaticBaseForType(TypeDesc type, string reason); void RootModuleMetadata(ModuleDesc module, string reason); - void RootReadOnlyDataBlob(byte[] data, int alignment, string reason, string exportName, bool exportHidden); + void RootReadOnlyDataBlob(byte[] data, int alignment, string reason, Utf8String exportName, bool exportHidden); void RootDelegateMarshallingData(DefType type, string reason); void RootStructMarshallingData(DefType type, string reason); void AddCompilationRoot(object o, string reason); diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/NodeMangler.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/NodeMangler.cs index bcf71ddab35..5c42fc88f68 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/NodeMangler.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/NodeMangler.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using Internal.Text; using Internal.TypeSystem; namespace ILCompiler @@ -14,19 +15,19 @@ public abstract class NodeMangler { public NameMangler NameMangler; - protected const string GenericDictionaryNamePrefix = "__GenericDict_"; + protected static readonly Utf8String GenericDictionaryNamePrefix = new Utf8String("__GenericDict_"); // Mangled name of boxed version of a type - public abstract string MangledBoxedTypeName(TypeDesc type); + public abstract Utf8String MangledBoxedTypeName(TypeDesc type); - public abstract string MethodTable(TypeDesc type); - public abstract string GCStatics(TypeDesc type); - public abstract string NonGCStatics(TypeDesc type); - public abstract string ThreadStatics(TypeDesc type); - public abstract string ThreadStaticsIndex(TypeDesc type); - public abstract string TypeGenericDictionary(TypeDesc type); - public abstract string MethodGenericDictionary(MethodDesc method); - public abstract string ExternMethod(string unmangledName, MethodDesc method); - public abstract string ExternVariable(string unmangledName); + public abstract Utf8String MethodTable(TypeDesc type); + public abstract Utf8String GCStatics(TypeDesc type); + public abstract Utf8String NonGCStatics(TypeDesc type); + public abstract Utf8String ThreadStatics(TypeDesc type); + public abstract Utf8String ThreadStaticsIndex(TypeDesc type); + public abstract Utf8String TypeGenericDictionary(TypeDesc type); + public abstract Utf8String MethodGenericDictionary(MethodDesc method); + public abstract Utf8String ExternMethod(Utf8String unmangledName, MethodDesc method); + public abstract Utf8String ExternVariable(Utf8String unmangledName); } } diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectDataInterner.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectDataInterner.cs index 7c8a0bbc7ae..9092b870f81 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectDataInterner.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectDataInterner.cs @@ -69,7 +69,7 @@ private void EnsureMap(NodeFactory factory) // Bodies that are visible from outside should not be folded because we don't know // if they're address taken. - if (factory.GetSymbolAlternateName(body, out _) != null) + if (!factory.GetSymbolAlternateName(body, out _).IsNull) continue; var key = new MethodInternKey(body, factory); diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/CodeView/CodeViewSymbolsBuilder.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/CodeView/CodeViewSymbolsBuilder.cs index 132b97a0e99..2ca792fd664 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/CodeView/CodeViewSymbolsBuilder.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/CodeView/CodeViewSymbolsBuilder.cs @@ -112,7 +112,7 @@ private CodeViewRegister GetCVRegNum(uint regNum) } public void EmitSubprogramInfo( - string methodName, + Utf8String methodName, int methodPCLength, uint methodTypeIndex, IEnumerable<(DebugVarInfoMetadata, uint)> debugVars, @@ -220,7 +220,7 @@ public void EmitSubprogramInfo( public void EmitLineInfo( CodeViewFileTableBuilder fileTableBuilder, - string methodName, + Utf8String methodName, int methodPCLength, IEnumerable sequencePoints) { @@ -300,7 +300,7 @@ private sealed class SubsectionWriter : IDisposable private readonly SectionWriter _sectionWriter; internal uint _size; internal readonly List _data = new(); - internal readonly List<(uint, RelocType, string)> _relocations = new(); + internal readonly List<(uint, RelocType, Utf8String)> _relocations = new(); public SubsectionWriter(DebugSymbolsSubsectionType kind, SectionWriter sectionWriter) { @@ -416,7 +416,7 @@ public void Write(string value) public void EmitSymbolReference( RelocType relocType, - string symbolName, + Utf8String symbolName, int addend = 0) { _subsectionWriter._relocations.Add(( diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/CoffObjectWriter.Aot.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/CoffObjectWriter.Aot.cs index 78f0dad8ed5..ebc36125afe 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/CoffObjectWriter.Aot.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/CoffObjectWriter.Aot.cs @@ -14,6 +14,7 @@ using System.Text; using ILCompiler.DependencyAnalysis; using ILCompiler.DependencyAnalysisFramework; +using Internal.Text; using Internal.TypeSystem; using Internal.TypeSystem.TypesDebugInfo; using static ILCompiler.DependencyAnalysis.RelocType; @@ -66,7 +67,7 @@ private protected override void CreateEhSections() private protected override void EmitUnwindInfo( SectionWriter sectionWriter, INodeWithCodeInfo nodeWithCodeInfo, - string currentSymbolName) + Utf8String currentSymbolName) { if (nodeWithCodeInfo.FrameInfos is FrameInfo[] frameInfos && nodeWithCodeInfo is ISymbolDefinitionNode) @@ -75,6 +76,8 @@ private protected override void EmitUnwindInfo( SectionWriter pdataSectionWriter; bool shareSymbol = ShouldShareSymbol((ObjectNode)nodeWithCodeInfo); + Span i_str = stackalloc byte[16]; + for (int i = 0; i < frameInfos.Length; i++) { FrameInfo frameInfo = frameInfos[i]; @@ -83,13 +86,17 @@ private protected override void EmitUnwindInfo( int end = frameInfo.EndOffset; byte[] blob = frameInfo.BlobData; - string unwindSymbolName = $"_unwind{i}{currentSymbolName}"; + _utf8StringBuilder.Clear() + .Append("_unwind"u8) + .Append(FormatUtf8Int(i_str, i)) + .Append(currentSymbolName); + Utf8String unwindSymbolName = _utf8StringBuilder.ToUtf8String(); if (shareSymbol) { // Produce an associative COMDAT symbol. xdataSectionWriter = GetOrCreateSection(ObjectNodeSection.XDataSection, currentSymbolName, unwindSymbolName); - pdataSectionWriter = GetOrCreateSection(ObjectNodeSection.PDataSection, currentSymbolName, null); + pdataSectionWriter = GetOrCreateSection(ObjectNodeSection.PDataSection, currentSymbolName, default); } else { @@ -179,7 +186,7 @@ private protected override ITypesDebugInfoWriter CreateDebugInfoBuilder() private protected override void EmitDebugFunctionInfo( uint methodTypeIndex, - string methodName, + Utf8String methodName, SymbolDefinition methodSymbol, INodeWithDebugInfo debugNode, bool hasSequencePoints) @@ -196,7 +203,7 @@ private protected override void EmitDebugFunctionInfo( { // If the method is emitted in COMDAT section then we need to create an // associated COMDAT section for the debugging symbols. - var sectionWriter = GetOrCreateSection(DebugSymbolSection, methodName, null); + var sectionWriter = GetOrCreateSection(DebugSymbolSection, methodName, default); debugSymbolsBuilder = new CodeViewSymbolsBuilder(_nodeFactory.Target.Architecture, sectionWriter); } else @@ -222,7 +229,7 @@ private protected override void EmitDebugFunctionInfo( } private protected override void EmitDebugThunkInfo( - string methodName, + Utf8String methodName, SymbolDefinition methodSymbol, INodeWithDebugInfo debugNode) { @@ -235,7 +242,7 @@ private protected override void EmitDebugThunkInfo( { // If the method is emitted in COMDAT section then we need to create an // associated COMDAT section for the debugging symbols. - var sectionWriter = GetOrCreateSection(DebugSymbolSection, methodName, null); + var sectionWriter = GetOrCreateSection(DebugSymbolSection, methodName, default); debugSymbolsBuilder = new CodeViewSymbolsBuilder(_nodeFactory.Target.Architecture, sectionWriter); } else @@ -250,7 +257,7 @@ private protected override void EmitDebugThunkInfo( debugNode.GetNativeSequencePoints()); } - private protected override void EmitDebugSections(IDictionary definedSymbols) + private protected override void EmitDebugSections(IDictionary definedSymbols) { _debugSymbolsBuilder.WriteUserDefinedTypes(_debugTypesBuilder.UserDefinedTypes); _debugFileTableBuilder.Write(_debugSymbolSectionWriter); diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfBuilder.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfBuilder.cs index 4dcccbdd32f..0f63ef910c8 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfBuilder.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfBuilder.cs @@ -17,9 +17,9 @@ namespace ILCompiler.ObjectWriter { internal sealed class DwarfBuilder : ITypesDebugInfoWriter { - private record struct SectionInfo(string SectionSymbolName, ulong Size); + private record struct SectionInfo(Utf8String SectionSymbolName, ulong Size); private record struct MemberFunctionTypeInfo(MemberFunctionTypeDescriptor MemberDescriptor, uint[] ArgumentTypes, bool IsStatic); - public delegate (string SectionSymbolName, long Address) ResolveStaticVariable(string name); + public delegate (Utf8String SectionSymbolName, long Address) ResolveStaticVariable(Utf8String name); private readonly NameMangler _nameMangler; private readonly TargetArchitecture _architecture; @@ -201,8 +201,8 @@ public void WriteInfoTable( foreach (DwarfStaticVariableInfo staticField in _staticFields) { - (string sectionSymbolName, long address) = resolveStaticVariable(staticField.Name); - if (sectionSymbolName is not null) + (Utf8String sectionSymbolName, long address) = resolveStaticVariable(staticField.Name); + if (!sectionSymbolName.IsNull) { staticField.Dump(dwarfInfoWriter, sectionSymbolName, address); } @@ -429,8 +429,8 @@ public Utf8String GetMangledName(TypeDesc type) } public void EmitSubprogramInfo( - string methodName, - string sectionSymbolName, + Utf8String methodName, + Utf8String sectionSymbolName, long methodAddress, int methodPCLength, uint methodTypeIndex, @@ -456,7 +456,7 @@ public void EmitSubprogramInfo( public void EmitLineInfo( int sectionIndex, - string sectionSymbolName, + Utf8String sectionSymbolName, long methodAddress, IEnumerable sequencePoints) { @@ -493,7 +493,7 @@ public void EmitLineInfo( } } - public void EmitSectionInfo(string sectionSymbolName, ulong size) + public void EmitSectionInfo(Utf8String sectionSymbolName, ulong size) { _sections.Add(new SectionInfo(sectionSymbolName, size)); } diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfEhFrame.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfEhFrame.cs index 3e207ffe296..bc4d835eaca 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfEhFrame.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfEhFrame.cs @@ -171,9 +171,9 @@ private uint AddressSize(byte encoding) } } - private void WriteAddress(byte encoding, string symbolName, long symbolOffset = 0) + private void WriteAddress(byte encoding, Utf8String symbolName, long symbolOffset = 0) { - if (symbolName != null) + if (!symbolName.IsNull) { RelocType relocationType = encoding switch { diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfFde.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfFde.cs index f405fddde48..4c1444c179a 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfFde.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfFde.cs @@ -2,8 +2,11 @@ // The .NET Foundation licenses this file to you under the MIT license. using System; -using System.Diagnostics; using System.Buffers; +using System.Diagnostics; + +using Internal.Text; + using static ILCompiler.ObjectWriter.DwarfNative; namespace ILCompiler.ObjectWriter @@ -12,20 +15,20 @@ internal readonly struct DwarfFde { public readonly DwarfCie Cie; public readonly byte[] Instructions; - public readonly string PcStartSymbolName; + public readonly Utf8String PcStartSymbolName; public readonly long PcStartSymbolOffset; public readonly ulong PcLength; - public readonly string LsdaSymbolName; - public readonly string PersonalitySymbolName; + public readonly Utf8String LsdaSymbolName; + public readonly Utf8String PersonalitySymbolName; public DwarfFde( DwarfCie cie, byte[] blobData, - string pcStartSymbolName, + Utf8String pcStartSymbolName, long pcStartSymbolOffset, ulong pcLength, - string lsdaSymbolName, - string personalitySymbolName) + Utf8String lsdaSymbolName, + Utf8String personalitySymbolName) { Cie = cie; Instructions = CfiCodeToInstructions(cie, blobData); diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfInfo.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfInfo.cs index fa02122c9a8..4ce33dbbe5d 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfInfo.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfInfo.cs @@ -7,6 +7,7 @@ using System.Linq; using ILCompiler.DependencyAnalysis; using Internal.JitInterface; +using Internal.Text; using Internal.TypeSystem; using Internal.TypeSystem.TypesDebugInfo; using static ILCompiler.ObjectWriter.DwarfNative; @@ -194,15 +195,15 @@ public override void Dump(DwarfInfoWriter writer) internal sealed class DwarfMemberFunction { - public string Name { get; private set; } - public string LinkageName { get; set; } + public Utf8String Name { get; private set; } + public Utf8String LinkageName { get; set; } public MemberFunctionTypeDescriptor Descriptor { get; private set; } public uint[] ArgumentTypes { get; private set; } public bool IsStatic { get; private set; } public long InfoOffset { get; set; } public DwarfMemberFunction( - string name, + Utf8String name, MemberFunctionTypeDescriptor descriptor, uint[] argumentTypes, bool isStatic) @@ -360,7 +361,7 @@ public override void Dump(DwarfInfoWriter writer) internal sealed class DwarfSubprogramInfo : DwarfInfo { - private readonly string _sectionSymbolName; + private readonly Utf8String _sectionSymbolName; private readonly long _methodAddress; private readonly int _methodSize; private readonly DwarfMemberFunction _memberFunction; @@ -370,7 +371,7 @@ internal sealed class DwarfSubprogramInfo : DwarfInfo private readonly bool _hasChildren; public DwarfSubprogramInfo( - string sectionSymbolName, + Utf8String sectionSymbolName, long methodAddress, int methodSize, DwarfMemberFunction memberFunction, @@ -553,14 +554,14 @@ internal sealed class DwarfStaticVariableInfo private readonly StaticDataFieldDescriptor _descriptor; public long InfoOffset { get; set; } - public string Name => _descriptor.StaticDataName; + public Utf8String Name => _descriptor.StaticDataName; public DwarfStaticVariableInfo(StaticDataFieldDescriptor descriptor) { _descriptor = descriptor; } - public void Dump(DwarfInfoWriter writer, string sectionSymbolName, long address) + public void Dump(DwarfInfoWriter writer, Utf8String sectionSymbolName, long address) { writer.WriteStartDIE(DwarfAbbrev.VariableStatic); diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfInfoWriter.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfInfoWriter.cs index 89d42674ab4..935b6c397c6 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfInfoWriter.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfInfoWriter.cs @@ -137,7 +137,7 @@ public void WriteInfoReference(uint typeIndex) } } - public void WriteCodeReference(string sectionSymbolName, long offset = 0) + public void WriteCodeReference(Utf8String sectionSymbolName, long offset = 0) { Debug.Assert(offset >= 0); _infoSectionWriter.EmitSymbolReference(_codeRelocType, sectionSymbolName, offset); @@ -169,7 +169,7 @@ public void WriteStartLocationList() _infoSectionWriter.EmitSymbolReference(RelocType.IMAGE_REL_BASED_HIGHLOW, ".debug_loc", (int)offset); } - public void WriteLocationListExpression(string methodName, long startOffset, long endOffset, DwarfExpressionBuilder expressionBuilder) + public void WriteLocationListExpression(Utf8String methodName, long startOffset, long endOffset, DwarfExpressionBuilder expressionBuilder) { _ = expressionBuilder; _locSectionWriter.EmitSymbolReference(_codeRelocType, methodName, startOffset); @@ -190,7 +190,7 @@ public void WriteStartRangeList() _infoSectionWriter.EmitSymbolReference(RelocType.IMAGE_REL_BASED_HIGHLOW, ".debug_ranges", offset); } - public void WriteRangeListEntry(string symbolName, long startOffset, long endOffset) + public void WriteRangeListEntry(Utf8String symbolName, long startOffset, long endOffset) { _rangeSectionWriter.EmitSymbolReference(_codeRelocType, symbolName, startOffset); _rangeSectionWriter.EmitSymbolReference(_codeRelocType, symbolName, endOffset); diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfLineSequenceWriter.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfLineSequenceWriter.cs index 2fa8650b0af..c7eca4d7e0b 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfLineSequenceWriter.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/Dwarf/DwarfLineSequenceWriter.cs @@ -4,6 +4,7 @@ using System.Buffers; using System.Diagnostics; using ILCompiler.DependencyAnalysis; +using Internal.Text; using static ILCompiler.ObjectWriter.DwarfNative; namespace ILCompiler.ObjectWriter @@ -11,7 +12,7 @@ namespace ILCompiler.ObjectWriter internal sealed class DwarfLineSequenceWriter { private readonly ArrayBufferWriter _writer; - private readonly string _sectionName; + private readonly Utf8String _sectionName; private readonly byte _minimumInstructionLength; private readonly uint _maxDeltaAddressPerSpecialCode; @@ -21,7 +22,7 @@ internal sealed class DwarfLineSequenceWriter private int _line = 1; private int _column; - public DwarfLineSequenceWriter(string sectionName, byte minimumInstructionLength) + public DwarfLineSequenceWriter(Utf8String sectionName, byte minimumInstructionLength) { _writer = new ArrayBufferWriter(); _sectionName = sectionName; diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/ElfObjectWriter.Aot.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/ElfObjectWriter.Aot.cs index 8550b20e19c..837d3c64832 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/ElfObjectWriter.Aot.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/ElfObjectWriter.Aot.cs @@ -2,14 +2,15 @@ // The .NET Foundation licenses this file to you under the MIT license. using System; +using System.Buffers.Binary; using System.Collections.Generic; -using System.IO; using System.Diagnostics; -using System.Buffers.Binary; +using System.IO; using System.Numerics; using System.Reflection; using ILCompiler.DependencyAnalysis; using ILCompiler.DependencyAnalysisFramework; +using Internal.Text; using Internal.TypeSystem; using static ILCompiler.DependencyAnalysis.RelocType; using static ILCompiler.ObjectWriter.EabiNative; @@ -50,7 +51,7 @@ private protected override void CreateEhSections() private protected override void EmitUnwindInfo( SectionWriter sectionWriter, INodeWithCodeInfo nodeWithCodeInfo, - string currentSymbolName) + Utf8String currentSymbolName) { if (_machine is not EM_ARM) { @@ -66,8 +67,8 @@ private protected override void EmitUnwindInfo( if (ShouldShareSymbol((ObjectNode)nodeWithCodeInfo)) { - exidxSectionWriter = GetOrCreateSection(ArmUnwindIndexSection, currentSymbolName, $"_unwind0{currentSymbolName}"); - extabSectionWriter = GetOrCreateSection(ArmUnwindTableSection, currentSymbolName, $"_extab0{currentSymbolName}"); + exidxSectionWriter = GetOrCreateSection(ArmUnwindIndexSection, currentSymbolName, Utf8String.Concat("_unwind0"u8, currentSymbolName.AsSpan())); + extabSectionWriter = GetOrCreateSection(ArmUnwindTableSection, currentSymbolName, Utf8String.Concat("_extab0"u8, currentSymbolName.AsSpan())); _sections[exidxSectionWriter.SectionIndex].LinkSection = _sections[sectionWriter.SectionIndex]; } else @@ -90,6 +91,7 @@ private protected override void EmitUnwindInfo( long mainLsdaOffset = 0; Span unwindWord = stackalloc byte[4]; + Span i_str = stackalloc byte[16]; for (int i = 0; i < frameInfos.Length; i++) { FrameInfo frameInfo = frameInfos[i]; @@ -97,8 +99,8 @@ private protected override void EmitUnwindInfo( int end = frameInfo.EndOffset; byte[] blob = frameInfo.BlobData; - string framSymbolName = $"_fram{i}{currentSymbolName}"; - string extabSymbolName = $"_extab{i}{currentSymbolName}"; + Utf8String framSymbolName = _utf8StringBuilder.Clear().Append("_fram"u8).Append(FormatUtf8Int(i_str, i)).Append(currentSymbolName).ToUtf8String(); + Utf8String extabSymbolName = _utf8StringBuilder.Clear().Append("_extab"u8).Append(FormatUtf8Int(i_str, i)).Append(currentSymbolName).ToUtf8String(); sectionWriter.EmitSymbolDefinition(framSymbolName, start); diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/MachObjectWriter.Aot.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/MachObjectWriter.Aot.cs index 76cdb395b82..6cb3f71f117 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/MachObjectWriter.Aot.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/MachObjectWriter.Aot.cs @@ -12,6 +12,7 @@ using System.Text; using ILCompiler.DependencyAnalysis; using ILCompiler.DependencyAnalysisFramework; +using Internal.Text; using Internal.TypeSystem; using static ILCompiler.DependencyAnalysis.RelocType; using static ILCompiler.ObjectWriter.MachNative; @@ -56,7 +57,7 @@ namespace ILCompiler.ObjectWriter /// internal sealed partial class MachObjectWriter : UnixObjectWriter { - private sealed record CompactUnwindCode(string PcStartSymbolName, uint PcLength, uint Code, string LsdaSymbolName = null, string PersonalitySymbolName = null); + private sealed record CompactUnwindCode(Utf8String PcStartSymbolName, uint PcLength, uint Code, Utf8String LsdaSymbolName, Utf8String PersonalitySymbolName); // Exception handling sections private MachSection _compactUnwindSection; @@ -66,7 +67,7 @@ private sealed record CompactUnwindCode(string PcStartSymbolName, uint PcLength, private bool IsEhFrameSection(int sectionIndex) => sectionIndex == EhFrameSectionIndex; - partial void EmitCompactUnwindTable(IDictionary definedSymbols) + partial void EmitCompactUnwindTable(IDictionary definedSymbols) { _compactUnwindStream = new MemoryStream(32 * _compactUnwindCodes.Count); // Preset the size of the compact unwind section which is not generated yet @@ -90,10 +91,10 @@ partial void EmitCompactUnwindTable(IDictionary define EmitCompactUnwindSymbol(cu.LsdaSymbolName); } - void EmitCompactUnwindSymbol(string symbolName) + void EmitCompactUnwindSymbol(Utf8String symbolName) { Span tempBuffer = stackalloc byte[8]; - if (symbolName is not null) + if (!symbolName.IsNull) { SymbolDefinition symbol = definedSymbols[symbolName]; MachSection section = _sections[symbol.SectionIndex]; @@ -273,7 +274,7 @@ private static uint GetArm64CompactUnwindCode(byte[] blobData) return unwindCode; } - private protected override bool EmitCompactUnwinding(string startSymbolName, ulong length, string lsdaSymbolName, byte[] blob) + private protected override bool EmitCompactUnwinding(Utf8String startSymbolName, ulong length, Utf8String lsdaSymbolName, byte[] blob) { uint encoding = _compactUnwindDwarfCode; @@ -285,8 +286,9 @@ private protected override bool EmitCompactUnwinding(string startSymbolName, ulo _compactUnwindCodes.Add(new CompactUnwindCode( PcStartSymbolName: startSymbolName, PcLength: (uint)length, - Code: encoding | (encoding != _compactUnwindDwarfCode && lsdaSymbolName is not null ? 0x40000000u : 0), // UNWIND_HAS_LSDA - LsdaSymbolName: encoding != _compactUnwindDwarfCode ? lsdaSymbolName : null + Code: encoding | (encoding != _compactUnwindDwarfCode && !lsdaSymbolName.IsNull ? 0x40000000u : 0), // UNWIND_HAS_LSDA + LsdaSymbolName: encoding != _compactUnwindDwarfCode ? lsdaSymbolName : default, + PersonalitySymbolName: default )); return encoding != _compactUnwindDwarfCode; diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/ObjectWriter.Aot.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/ObjectWriter.Aot.cs index 03717aa881e..fd9c43327f3 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/ObjectWriter.Aot.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/ObjectWriter.Aot.cs @@ -9,6 +9,7 @@ using System.Linq; using ILCompiler.DependencyAnalysis; using ILCompiler.DependencyAnalysisFramework; +using Internal.Text; using Internal.TypeSystem; using Internal.TypeSystem.TypesDebugInfo; using ObjectData = ILCompiler.DependencyAnalysis.ObjectNode.ObjectData; @@ -24,7 +25,7 @@ public abstract partial class ObjectWriter private protected abstract void EmitUnwindInfo( SectionWriter sectionWriter, INodeWithCodeInfo nodeWithCodeInfo, - string currentSymbolName); + Utf8String currentSymbolName); private protected uint GetVarTypeIndex(bool isStateMachineMoveNextMethod, DebugVarInfoMetadata debugVar) { @@ -55,19 +56,19 @@ private protected uint GetVarTypeIndex(bool isStateMachineMoveNextMethod, DebugV private protected abstract void EmitDebugFunctionInfo( uint methodTypeIndex, - string methodName, + Utf8String methodName, SymbolDefinition methodSymbol, INodeWithDebugInfo debugNode, bool hasSequencePoints); private protected virtual void EmitDebugThunkInfo( - string methodName, + Utf8String methodName, SymbolDefinition methodSymbol, INodeWithDebugInfo debugNode) { } - private protected abstract void EmitDebugSections(IDictionary definedSymbols); + private protected abstract void EmitDebugSections(IDictionary definedSymbols); partial void EmitDebugInfo(IReadOnlyCollection nodes, Logger logger) { @@ -99,7 +100,7 @@ partial void EmitDebugInfo(IReadOnlyCollection nodes, Logger log if (node is INodeWithDebugInfo debugNode and ISymbolDefinitionNode symbolDefinitionNode) { - string methodName = GetMangledName(symbolDefinitionNode); + Utf8String methodName = GetMangledName(symbolDefinitionNode); if (_definedSymbols.TryGetValue(methodName, out var methodSymbol)) { if (node is IMethodNode methodNode) @@ -129,7 +130,7 @@ partial void EmitDebugInfo(IReadOnlyCollection nodes, Logger log partial void PrepareForUnwindInfo() => CreateEhSections(); - partial void EmitUnwindInfoForNode(ObjectNode node, string currentSymbolName, SectionWriter sectionWriter) + partial void EmitUnwindInfoForNode(ObjectNode node, Utf8String currentSymbolName, SectionWriter sectionWriter) { if (node is INodeWithCodeInfo nodeWithCodeInfo) { @@ -137,7 +138,7 @@ partial void EmitUnwindInfoForNode(ObjectNode node, string currentSymbolName, Se } } - partial void HandleControlFlowForRelocation(ISymbolNode relocTarget, string relocSymbolName) + partial void HandleControlFlowForRelocation(ISymbolNode relocTarget, Utf8String relocSymbolName) { if (relocTarget is IMethodNode or AssemblyStubNode or AddressTakenExternFunctionSymbolNode) { diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/UnixObjectWriter.Aot.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/UnixObjectWriter.Aot.cs index 70923f97089..85ecb3d0bb7 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/UnixObjectWriter.Aot.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ObjectWriter/UnixObjectWriter.Aot.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Buffers.Binary; using ILCompiler.DependencyAnalysis; +using Internal.Text; using Internal.TypeSystem; using Internal.TypeSystem.TypesDebugInfo; @@ -41,7 +42,7 @@ internal abstract partial class UnixObjectWriter : ObjectWriter private protected virtual bool UseFrameNames => false; - private protected virtual bool EmitCompactUnwinding(string startSymbolName, ulong length, string lsdaSymbolName, byte[] blob) => false; + private protected virtual bool EmitCompactUnwinding(Utf8String startSymbolName, ulong length, Utf8String lsdaSymbolName, byte[] blob) => false; private protected override void CreateEhSections() { @@ -96,13 +97,13 @@ private protected void EmitLsda( if (associatedDataNode is not null) { - string symbolName = GetMangledName(associatedDataNode); + Utf8String symbolName = GetMangledName(associatedDataNode); lsdaSectionWriter.EmitSymbolReference(RelocType.IMAGE_REL_BASED_RELPTR32, symbolName, 0); } if (ehInfo is not null) { - string symbolName = GetMangledName(ehInfo); + Utf8String symbolName = GetMangledName(ehInfo); lsdaSectionWriter.EmitSymbolReference(RelocType.IMAGE_REL_BASED_RELPTR32, symbolName, 0); } @@ -144,18 +145,18 @@ public int GetHashCode(INodeWithCodeInfo obj) } } - private Dictionary _lsdas = new Dictionary(LsdaComparer.Instance); + private Dictionary _lsdas = new Dictionary(LsdaComparer.Instance); public static bool IsCacheable(INodeWithCodeInfo nodeWithCodeInfo) => nodeWithCodeInfo.EHInfo == null && !MethodAssociatedDataNode.MethodHasAssociatedData((IMethodNode)nodeWithCodeInfo); - public string[] FindCachedLsda(INodeWithCodeInfo nodeWithCodeInfo) + public Utf8String[] FindCachedLsda(INodeWithCodeInfo nodeWithCodeInfo) { Debug.Assert(IsCacheable(nodeWithCodeInfo)); return _lsdas.GetValueOrDefault(nodeWithCodeInfo); } - public void AddLsdaToCache(INodeWithCodeInfo nodeWithCodeInfo, string[] symbols) + public void AddLsdaToCache(INodeWithCodeInfo nodeWithCodeInfo, Utf8String[] symbols) { Debug.Assert(IsCacheable(nodeWithCodeInfo)); _lsdas.Add(nodeWithCodeInfo, symbols); @@ -167,7 +168,7 @@ public void AddLsdaToCache(INodeWithCodeInfo nodeWithCodeInfo, string[] symbols) private protected override void EmitUnwindInfo( SectionWriter sectionWriter, INodeWithCodeInfo nodeWithCodeInfo, - string currentSymbolName) + Utf8String currentSymbolName) { if (nodeWithCodeInfo.FrameInfos is FrameInfo[] frameInfos && nodeWithCodeInfo is ISymbolDefinitionNode) @@ -175,11 +176,11 @@ private protected override void EmitUnwindInfo( bool useFrameNames = UseFrameNames; SectionWriter lsdaSectionWriter; - string[] newLsdaSymbols = null; - string[] emittedLsdaSymbols = null; + Utf8String[] newLsdaSymbols = null; + Utf8String[] emittedLsdaSymbols = null; if (ShouldShareSymbol((ObjectNode)nodeWithCodeInfo)) { - lsdaSectionWriter = GetOrCreateSection(LsdaSection, currentSymbolName, $"_lsda0{currentSymbolName}"); + lsdaSectionWriter = GetOrCreateSection(LsdaSection, currentSymbolName, Utf8String.Concat("_lsda0"u8, currentSymbolName.AsSpan())); } else { @@ -188,11 +189,12 @@ private protected override void EmitUnwindInfo( { emittedLsdaSymbols = _lsdaCache.FindCachedLsda(nodeWithCodeInfo); if (emittedLsdaSymbols == null) - newLsdaSymbols = new string[frameInfos.Length]; + newLsdaSymbols = new Utf8String[frameInfos.Length]; } } long mainLsdaOffset = 0; + Span i_str = stackalloc byte[16]; for (int i = 0; i < frameInfos.Length; i++) { FrameInfo frameInfo = frameInfos[i]; @@ -201,27 +203,27 @@ private protected override void EmitUnwindInfo( int end = frameInfo.EndOffset; byte[] blob = frameInfo.BlobData; - string lsdaSymbolName; + Utf8String lsdaSymbolName; if (emittedLsdaSymbols != null) { lsdaSymbolName = emittedLsdaSymbols[i]; } else { - lsdaSymbolName = $"_lsda{i}{currentSymbolName}"; + lsdaSymbolName = _utf8StringBuilder.Clear().Append("_lsda"u8).Append(FormatUtf8Int(i_str, i)).Append(currentSymbolName).ToUtf8String(); if (newLsdaSymbols != null) newLsdaSymbols[i] = lsdaSymbolName; lsdaSectionWriter.EmitSymbolDefinition(lsdaSymbolName); EmitLsda(nodeWithCodeInfo, frameInfos, i, _lsdaSectionWriter, ref mainLsdaOffset); } - string framSymbolName = $"_fram{i}{currentSymbolName}"; + Utf8String framSymbolName = _utf8StringBuilder.Clear().Append("_fram"u8).Append(FormatUtf8Int(i_str, i)).Append(currentSymbolName).ToUtf8String(); if (useFrameNames && start != 0) { sectionWriter.EmitSymbolDefinition(framSymbolName, start); } - string startSymbolName = useFrameNames && start != 0 ? framSymbolName : currentSymbolName; + Utf8String startSymbolName = useFrameNames && start != 0 ? framSymbolName : currentSymbolName; ulong length = (ulong)(end - start); if (!EmitCompactUnwinding(startSymbolName, length, lsdaSymbolName, blob)) { @@ -232,7 +234,7 @@ private protected override void EmitUnwindInfo( pcStartSymbolOffset: useFrameNames ? 0 : start, pcLength: (ulong)(end - start), lsdaSymbolName, - personalitySymbolName: null); + personalitySymbolName: default); _dwarfEhFrame.AddFde(fde); } } @@ -244,7 +246,7 @@ private protected override void EmitUnwindInfo( private protected override void EmitDebugFunctionInfo( uint methodTypeIndex, - string methodName, + Utf8String methodName, SymbolDefinition methodSymbol, INodeWithDebugInfo debugNode, bool hasSequencePoints) @@ -278,7 +280,7 @@ private protected override void EmitDebugFunctionInfo( } } - private protected override void EmitDebugSections(IDictionary definedSymbols) + private protected override void EmitDebugSections(IDictionary definedSymbols) { foreach (UnixSectionDefinition section in _sections) { @@ -311,7 +313,7 @@ private protected override void EmitDebugSections(IDictionary typeNameLengthStr = stackalloc byte[16]; + mangledJustTypeName.Length.TryFormat(typeNameLengthStr, out int written); - return "_ZTV" + mangledJustTypeName.Length.ToString(CultureInfo.InvariantCulture) + mangledJustTypeName; + return Utf8String.Concat("_ZTV"u8, typeNameLengthStr.Slice(0, written), mangledJustTypeName.AsSpan()); } - public sealed override string GCStatics(TypeDesc type) + public sealed override Utf8String GCStatics(TypeDesc type) { - return "__GCSTATICS" + NameMangler.GetMangledTypeName(type); + return Utf8String.Concat("__GCSTATICS"u8, NameMangler.GetMangledTypeName(type).AsSpan()); } - public sealed override string NonGCStatics(TypeDesc type) + public sealed override Utf8String NonGCStatics(TypeDesc type) { - return "__NONGCSTATICS" + NameMangler.GetMangledTypeName(type); + return Utf8String.Concat("__NONGCSTATICS"u8, NameMangler.GetMangledTypeName(type).AsSpan()); } - public sealed override string ThreadStatics(TypeDesc type) + public sealed override Utf8String ThreadStatics(TypeDesc type) { - return NameMangler.CompilationUnitPrefix + "__THREADSTATICS" + NameMangler.GetMangledTypeName(type); + return Utf8String.Concat(NameMangler.CompilationUnitPrefix.AsSpan(), "__THREADSTATICS"u8, NameMangler.GetMangledTypeName(type).AsSpan()); } - public sealed override string ThreadStaticsIndex(TypeDesc type) + public sealed override Utf8String ThreadStaticsIndex(TypeDesc type) { - return "__TypeThreadStaticIndex" + NameMangler.GetMangledTypeName(type); + return Utf8String.Concat("__TypeThreadStaticIndex"u8, NameMangler.GetMangledTypeName(type).AsSpan()); } - public sealed override string TypeGenericDictionary(TypeDesc type) + public sealed override Utf8String TypeGenericDictionary(TypeDesc type) { - return GenericDictionaryNamePrefix + NameMangler.GetMangledTypeName(type); + return Utf8String.Concat(GenericDictionaryNamePrefix, NameMangler.GetMangledTypeName(type)); } - public sealed override string MethodGenericDictionary(MethodDesc method) + public sealed override Utf8String MethodGenericDictionary(MethodDesc method) { - return GenericDictionaryNamePrefix + NameMangler.GetMangledMethodName(method); + return Utf8String.Concat(GenericDictionaryNamePrefix, NameMangler.GetMangledMethodName(method)); } - public sealed override string ExternMethod(string unmangledName, MethodDesc method) + public sealed override Utf8String ExternMethod(Utf8String unmangledName, MethodDesc method) { return unmangledName; } - public sealed override string ExternVariable(string unmangledName) + public sealed override Utf8String ExternVariable(Utf8String unmangledName) { return unmangledName; } diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/UserDefinedTypeDescriptor.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/UserDefinedTypeDescriptor.cs index 9464667df35..7ab79c353fc 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/UserDefinedTypeDescriptor.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/UserDefinedTypeDescriptor.cs @@ -6,6 +6,7 @@ using System.Diagnostics; using System.Reflection.Metadata; +using Internal.Text; using Internal.TypeSystem; using Internal.TypeSystem.Ecma; using Internal.TypeSystem.TypesDebugInfo; @@ -233,7 +234,7 @@ public uint GetMethodFunctionIdTypeIndex(MethodDesc method) descriptor.MemberFunction = GetMethodTypeIndex(method); descriptor.ParentClass = GetTypeIndex(method.OwningType, true); - descriptor.Name = method.GetName(); + descriptor.Name = new Utf8String(method.Name.ToArray()); typeIndex = _objectWriter.GetMemberFunctionId(descriptor); _methodIdIndices.Add(method, typeIndex); @@ -420,7 +421,7 @@ private uint GetEnumTypeIndex(TypeDesc type) FieldDesc field = fieldsDescriptors[i]; EnumRecordTypeDescriptor recordTypeDescriptor; recordTypeDescriptor.Value = GetEnumRecordValue(field); - recordTypeDescriptor.Name = field.GetName(); + recordTypeDescriptor.Name = new Utf8String(field.Name.ToArray()); typeRecords[i] = recordTypeDescriptor; } uint typeIndex = _objectWriter.GetEnumTypeIndex(enumTypeDescriptor, typeRecords); @@ -585,9 +586,9 @@ private uint GetClassTypeIndex(TypeDesc type, bool needsCompleteType) List threadStaticFields = new List(); List staticsDescs = new List(); - string nonGcStaticDataName = NodeFactory.NameMangler.NodeMangler.NonGCStatics(type); - string gcStaticDataName = NodeFactory.NameMangler.NodeMangler.GCStatics(type); - string threadStaticDataName = NodeFactory.NameMangler.NodeMangler.ThreadStatics(type); + Utf8String nonGcStaticDataName = NodeFactory.NameMangler.NodeMangler.NonGCStatics(type); + Utf8String gcStaticDataName = NodeFactory.NameMangler.NodeMangler.GCStatics(type); + Utf8String threadStaticDataName = NodeFactory.NameMangler.NodeMangler.ThreadStatics(type); bool isNativeAOT = Abi == TargetAbi.NativeAot; bool hasNonGcStatics = NodeFactory.MetadataManager.HasNonGcStaticBase(defType); @@ -665,7 +666,7 @@ private uint GetClassTypeIndex(TypeDesc type, bool needsCompleteType) { FieldTypeIndex = fieldTypeIndex, Offset = (ulong)fieldOffsetEmit, - Name = fieldDesc.GetName() + Name = new Utf8String(fieldDesc.Name.ToArray()) }; if (fieldDesc.IsStatic) @@ -749,7 +750,7 @@ private uint GetClassTypeIndex(TypeDesc type, bool needsCompleteType) return typeIndex; } - private void InsertStaticFieldRegionMember(List fieldDescs, DefType defType, List staticFields, string staticFieldForm, + private void InsertStaticFieldRegionMember(List fieldDescs, DefType defType, List staticFields, Utf8String staticFieldForm, bool staticDataInObject, bool isThreadStatic) { if (staticFields != null && (staticFields.Count > 0)) @@ -764,7 +765,7 @@ private void InsertStaticFieldRegionMember(List fieldDescs, ClassTypeDescriptor classTypeDescriptor = new ClassTypeDescriptor { IsStruct = !staticDataInObject ? 1 : 0, - Name = $"__type{staticFieldForm}{_objectWriter.GetMangledName(defType)}", + Name = Utf8String.Concat("__type"u8, staticFieldForm.AsSpan(), _objectWriter.GetMangledName(defType).AsSpan()), BaseClassId = 0 }; diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/WindowsNodeMangler.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/WindowsNodeMangler.cs index be2930565d3..336badab463 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/WindowsNodeMangler.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/WindowsNodeMangler.cs @@ -1,7 +1,9 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using Internal.Text; using Internal.TypeSystem; +using System; using System.Diagnostics; namespace ILCompiler @@ -13,10 +15,10 @@ public class WindowsNodeMangler : NodeMangler { private TargetDetails _target; - public const string NonGCStaticMemberName = "__NONGCSTATICS"; - public const string GCStaticMemberName = "__GCSTATICS"; - public const string ThreadStaticMemberName = "__THREADSTATICS"; - public const string ThreadStaticIndexName = "__THREADSTATICINDEX"; + public static Utf8String NonGCStaticMemberName = "__NONGCSTATICS"; + public static Utf8String GCStaticMemberName = "__GCSTATICS"; + public static Utf8String ThreadStaticMemberName = "__THREADSTATICS"; + public static Utf8String ThreadStaticIndexName = "__THREADSTATICINDEX"; public WindowsNodeMangler(TargetDetails target) { @@ -24,60 +26,64 @@ public WindowsNodeMangler(TargetDetails target) } // Mangled name of boxed version of a type - public sealed override string MangledBoxedTypeName(TypeDesc type) + public sealed override Utf8String MangledBoxedTypeName(TypeDesc type) { Debug.Assert(type.IsValueType); - return "Boxed_" + NameMangler.GetMangledTypeName(type); + return Utf8String.Concat("Boxed_"u8, NameMangler.GetMangledTypeName(type).AsSpan()); } - public sealed override string MethodTable(TypeDesc type) + public sealed override Utf8String MethodTable(TypeDesc type) { - string mangledJustTypeName = type.IsValueType + Utf8String mangledJustTypeName = type.IsValueType ? MangledBoxedTypeName(type) - : NameMangler.GetMangledTypeName(type).ToString(); + : NameMangler.GetMangledTypeName(type); // "??_7TypeName@@6B@" is the C++ mangling for "const TypeName::`vftable'" // This, along with LF_VTSHAPE debug records added by the object writer // is the debugger magic that allows debuggers to vcast types to their bases. - return "??_7" + mangledJustTypeName + "@@6B@"; + return Utf8String.Concat("??_7"u8, mangledJustTypeName.AsSpan(), "@@6B@"u8); } - private string CreateStaticFieldName(TypeDesc type, string fieldName) + private Utf8String CreateStaticFieldName(TypeDesc type, ReadOnlySpan fieldName) { - return @$"?{fieldName}@{NameMangler.GetMangledTypeName(type)}@@"; + return Utf8String.Concat("?"u8, fieldName, "@"u8, NameMangler.GetMangledTypeName(type).AsSpan(), "@@"u8); } - public sealed override string GCStatics(TypeDesc type) + public sealed override Utf8String GCStatics(TypeDesc type) { - return CreateStaticFieldName(type, GCStaticMemberName); + return CreateStaticFieldName(type, GCStaticMemberName.AsSpan()); } - public sealed override string NonGCStatics(TypeDesc type) + public sealed override Utf8String NonGCStatics(TypeDesc type) { - return CreateStaticFieldName(type, NonGCStaticMemberName); + return CreateStaticFieldName(type, NonGCStaticMemberName.AsSpan()); } - public sealed override string ThreadStatics(TypeDesc type) + public sealed override Utf8String ThreadStatics(TypeDesc type) { - return CreateStaticFieldName(type, NameMangler.CompilationUnitPrefix + ThreadStaticMemberName); + Utf8String name = NameMangler.CompilationUnitPrefix.Length > 0 + ? Utf8String.Concat(NameMangler.CompilationUnitPrefix, ThreadStaticMemberName) + : ThreadStaticMemberName; + + return CreateStaticFieldName(type, name.AsSpan()); } - public sealed override string ThreadStaticsIndex(TypeDesc type) + public sealed override Utf8String ThreadStaticsIndex(TypeDesc type) { - return CreateStaticFieldName(type, ThreadStaticIndexName); + return CreateStaticFieldName(type, ThreadStaticIndexName.AsSpan()); } - public sealed override string TypeGenericDictionary(TypeDesc type) + public sealed override Utf8String TypeGenericDictionary(TypeDesc type) { - return GenericDictionaryNamePrefix + NameMangler.GetMangledTypeName(type); + return Utf8String.Concat(GenericDictionaryNamePrefix, NameMangler.GetMangledTypeName(type)); } - public sealed override string MethodGenericDictionary(MethodDesc method) + public sealed override Utf8String MethodGenericDictionary(MethodDesc method) { - return GenericDictionaryNamePrefix + NameMangler.GetMangledMethodName(method); + return Utf8String.Concat(GenericDictionaryNamePrefix, NameMangler.GetMangledMethodName(method)); } - public sealed override string ExternMethod(string unmangledName, MethodDesc method) + public sealed override Utf8String ExternMethod(Utf8String unmangledName, MethodDesc method) { if (_target.Architecture != TargetArchitecture.X86) { @@ -117,7 +123,7 @@ public sealed override string ExternMethod(string unmangledName, MethodDesc meth }; } - public sealed override string ExternVariable(string unmangledName) + public sealed override Utf8String ExternVariable(Utf8String unmangledName) { if (_target.Architecture != TargetArchitecture.X86) { diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/CodeGen/ReadyToRunContainerFormat.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/CodeGen/ReadyToRunContainerFormat.cs index eac1177708e..b08f12011a6 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/CodeGen/ReadyToRunContainerFormat.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/CodeGen/ReadyToRunContainerFormat.cs @@ -7,5 +7,6 @@ public enum ReadyToRunContainerFormat { PE, MachO, + Wasm, } } diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/CodeGen/ReadyToRunObjectWriter.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/CodeGen/ReadyToRunObjectWriter.cs index 45a398dc225..d0cd1542163 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/CodeGen/ReadyToRunObjectWriter.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/CodeGen/ReadyToRunObjectWriter.cs @@ -183,6 +183,7 @@ public void EmitReadyToRunObjects(ReadyToRunContainerFormat format, Logger logge { ReadyToRunContainerFormat.PE => CreatePEObjectWriter(), ReadyToRunContainerFormat.MachO => CreateMachObjectWriter(), + ReadyToRunContainerFormat.Wasm => CreateWasmObjectWriter(), _ => throw new UnreachableException() }; @@ -297,6 +298,11 @@ private MachObjectWriter CreateMachObjectWriter() return new MachObjectWriter(_nodeFactory, ObjectWritingOptions.None, _outputInfoBuilder, baseSymbolName: "__mh_dylib_header"); } + private WasmObjectWriter CreateWasmObjectWriter() + { + return new WasmObjectWriter(_nodeFactory, ObjectWritingOptions.None, _outputInfoBuilder); + } + public static void EmitObject( string objectFilePath, EcmaModule componentModule, diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRunCodegenNodeFactory.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRunCodegenNodeFactory.cs index 238de065635..a3160b962d8 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRunCodegenNodeFactory.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRunCodegenNodeFactory.cs @@ -1062,14 +1062,14 @@ public void DetectGenericCycles(TypeSystemEntity caller, TypeSystemEntity callee _genericCycleDetector?.DetectCycle(caller, callee); } - public string GetSymbolAlternateName(ISymbolNode node, out bool isHidden) + public Utf8String GetSymbolAlternateName(ISymbolNode node, out bool isHidden) { isHidden = false; if (node == Header) { - return "RTR_HEADER"; + return new Utf8String("RTR_HEADER"u8.ToArray()); } - return null; + return default; } } } diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/ReadyToRunCompilerContext.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/ReadyToRunCompilerContext.cs index 1189d599d2c..4088fe402e1 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/ReadyToRunCompilerContext.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/ReadyToRunCompilerContext.cs @@ -57,11 +57,12 @@ public partial class ReadyToRunCompilerContext : CompilerTypeSystemContext public ReadyToRunCompilerContext( TargetDetails details, SharedGenericsMode genericsMode, - bool bubbleIncludesCorelib, + bool bubbleIncludesCoreModule, InstructionSetSupport instructionSetSupport, CompilerTypeSystemContext oldTypeSystemContext) : base(details, genericsMode) { + BubbleIncludesCoreModule = bubbleIncludesCoreModule; InstructionSetSupport = instructionSetSupport; _r2rFieldLayoutAlgorithm = new ReadyToRunMetadataFieldLayoutAlgorithm(); _systemObjectFieldLayoutAlgorithm = new SystemObjectFieldLayoutAlgorithm(_r2rFieldLayoutAlgorithm); @@ -94,8 +95,28 @@ public ReadyToRunCompilerContext( } } + public bool BubbleIncludesCoreModule { get; } + public InstructionSetSupport InstructionSetSupport { get; } + public bool TargetAllowsRuntimeCodeGeneration + { + get + { + if (Target.OperatingSystem is TargetOS.iOS or TargetOS.iOSSimulator or TargetOS.MacCatalyst or TargetOS.tvOS or TargetOS.tvOSSimulator) + { + return false; + } + + if (Target.Architecture is TargetArchitecture.Wasm32) + { + return false; + } + + return true; + } + } + public override FieldLayoutAlgorithm GetLayoutAlgorithmForType(DefType type) { if (type.IsObject) diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/ReadyToRunHardwareIntrinsicRootProvider.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/ReadyToRunHardwareIntrinsicRootProvider.cs new file mode 100644 index 00000000000..00219f0425e --- /dev/null +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/ReadyToRunHardwareIntrinsicRootProvider.cs @@ -0,0 +1,51 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Generic; + +using Internal.TypeSystem; +using Internal.JitInterface; +using System.Diagnostics; + +namespace ILCompiler +{ + /// + /// Root all methods on supported hardware intrinsic classes. + /// + public class ReadyToRunHardwareIntrinsicRootProvider(ReadyToRunCompilerContext context) : ICompilationRootProvider + { + public void AddCompilationRoots(IRootingServiceProvider rootProvider) + { + InstructionSetSupport specifiedInstructionSet = context.InstructionSetSupport; + TargetArchitecture targetArch = context.Target.Architecture; + + // Hardware intrinsics can only live in the system module. + foreach (MetadataType type in context.SystemModule.GetAllTypes()) + { + InstructionSet instructionSet = InstructionSetParser.LookupPlatformIntrinsicInstructionSet(targetArch, type); + + if (instructionSet == InstructionSet.ILLEGAL) + { + // Not a HardwareIntrinsics type for our platform. + continue; + } + + if (specifiedInstructionSet.IsInstructionSetSupported(instructionSet)) + { + foreach (MethodDesc method in type.GetMethods()) + { + rootProvider.AddCompilationRoot(method, rootMinimalDependencies: false, "Hardware intrinsic method fallback implementation"); + } + } + else + { + MethodDesc isSupportedMethod = type.GetMethod("get_IsSupported"u8, new MethodSignature(MethodSignatureFlags.Static, 0, context.GetWellKnownType(WellKnownType.Boolean), [])); + if (isSupportedMethod is not null) + { + rootProvider.AddCompilationRoot(isSupportedMethod, rootMinimalDependencies: false, "IsSupported getter for unsupported hardware intrinsic"); + } + } + } + } + } +} diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/ILCompiler.ReadyToRun.csproj b/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/ILCompiler.ReadyToRun.csproj index 6a84242ae3c..3647ced6bad 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/ILCompiler.ReadyToRun.csproj +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/ILCompiler.ReadyToRun.csproj @@ -163,6 +163,8 @@ + + @@ -189,6 +191,7 @@ + diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/ObjectWriter/MapFileBuilder.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/ObjectWriter/MapFileBuilder.cs index 9d49bb86680..a1fc983de71 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/ObjectWriter/MapFileBuilder.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.ReadyToRun/ObjectWriter/MapFileBuilder.cs @@ -19,6 +19,7 @@ using ILCompiler.DependencyAnalysis.ReadyToRun; using ILCompiler.Diagnostics; using ILCompiler.ObjectWriter; +using Internal.Text; namespace ILCompiler.PEWriter { @@ -37,19 +38,19 @@ public class MapFileBuilder /// private class NodeTypeStatistics { - public readonly string Name; + public readonly Utf8String Name; public int Count; public int Length; - public NodeTypeStatistics(string name) + public NodeTypeStatistics(Utf8String name) { Name = name; } public void AddNode(OutputNode node) { - Debug.Assert(Name == node.Name); + Debug.Assert(Name.AsSpan().SequenceEqual(node.Name.AsSpan())); Count++; Length += node.Length; } @@ -116,7 +117,7 @@ private void WriteHeader(StreamWriter writer) private IEnumerable GetNodeTypeStatistics() { List nodeTypeStats = new List(); - Dictionary statsNameIndex = new Dictionary(); + Dictionary statsNameIndex = new Dictionary(); foreach (OutputNode node in _outputInfoBuilder.Nodes) { if (!statsNameIndex.TryGetValue(node.Name, out int statsIndex)) diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.Reflection.ReadyToRun/ILCompiler.Reflection.ReadyToRun.csproj b/src/runtime/src/coreclr/tools/aot/ILCompiler.Reflection.ReadyToRun/ILCompiler.Reflection.ReadyToRun.csproj index 061cad8eb38..68bba4009b6 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.Reflection.ReadyToRun/ILCompiler.Reflection.ReadyToRun.csproj +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.Reflection.ReadyToRun/ILCompiler.Reflection.ReadyToRun.csproj @@ -20,12 +20,7 @@ This package provides a low-level ReadyToRun file format decoder. This package is experimental. ILCompiler.Reflection.ReadyToRun.Experimental - - - - - - + diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler.RyuJit/JitInterface/CorInfoImpl.RyuJit.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler.RyuJit/JitInterface/CorInfoImpl.RyuJit.cs index d1508e4f738..4f705b64531 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler.RyuJit/JitInterface/CorInfoImpl.RyuJit.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler.RyuJit/JitInterface/CorInfoImpl.RyuJit.cs @@ -8,12 +8,13 @@ using System.Runtime.InteropServices; using Internal.IL; -using Internal.TypeSystem; using Internal.ReadyToRunConstants; +using Internal.Text; +using Internal.TypeSystem; +using Internal.TypeSystem.Ecma; using ILCompiler; using ILCompiler.DependencyAnalysis; -using Internal.TypeSystem.Ecma; #if SUPPORT_JIT using MethodCodeNode = Internal.Runtime.JitSupport.JitMethodCodeNode; @@ -1922,7 +1923,7 @@ private void getAddressOfPInvokeTarget(CORINFO_METHOD_STRUCT_* method, ref CORIN { MethodDesc md = HandleToObject(method); - string externName = _compilation.PInvokeILProvider.GetDirectCallExternName(md); + Utf8String externName = _compilation.PInvokeILProvider.GetDirectCallExternName(md); externName = _compilation.NodeFactory.NameMangler.NodeMangler.ExternMethod(externName, md); pLookup = CreateConstLookupToSymbol(_compilation.NodeFactory.ExternFunctionSymbol(externName)); diff --git a/src/runtime/src/coreclr/tools/aot/ILCompiler/Program.cs b/src/runtime/src/coreclr/tools/aot/ILCompiler/Program.cs index 2054c723bc8..fb7910a0867 100644 --- a/src/runtime/src/coreclr/tools/aot/ILCompiler/Program.cs +++ b/src/runtime/src/coreclr/tools/aot/ILCompiler/Program.cs @@ -108,7 +108,7 @@ public int Run() TargetOS targetOS = Get(_command.TargetOS); InstructionSetSupport instructionSetSupport = Helpers.ConfigureInstructionSetSupport(Get(_command.InstructionSet), Get(_command.MaxVectorTBitWidth), isVectorTOptimistic, targetArchitecture, targetOS, "Unrecognized instruction set {0}", "Unsupported combination of instruction sets: {0}/{1}", logger, - optimizingForSize: _command.OptimizationMode == OptimizationMode.PreferSize, + allowOptimistic: _command.OptimizationMode != OptimizationMode.PreferSize, isReadyToRun: false); string systemModuleName = Get(_command.SystemModuleName); diff --git a/src/runtime/src/coreclr/tools/aot/crossgen2/Crossgen2RootCommand.cs b/src/runtime/src/coreclr/tools/aot/crossgen2/Crossgen2RootCommand.cs index 3f9d6d25067..b63e33f17ac 100644 --- a/src/runtime/src/coreclr/tools/aot/crossgen2/Crossgen2RootCommand.cs +++ b/src/runtime/src/coreclr/tools/aot/crossgen2/Crossgen2RootCommand.cs @@ -296,8 +296,8 @@ public static void PrintExtendedHelp(ParseResult _) Console.WriteLine(SR.DashDashHelp); Console.WriteLine(); - string[] ValidArchitectures = new string[] {"arm", "armel", "arm64", "x86", "x64", "riscv64", "loongarch64"}; - string[] ValidOS = new string[] {"windows", "linux", "osx", "ios", "iossimulator", "maccatalyst"}; + string[] ValidArchitectures = ["arm", "armel", "arm64", "x86", "x64", "riscv64", "loongarch64", "wasm"]; + string[] ValidOS = ["windows", "linux", "osx", "ios", "iossimulator", "maccatalyst", "browser"]; Console.WriteLine(String.Format(SR.SwitchWithDefaultHelp, "--targetos", String.Join("', '", ValidOS), Helpers.GetTargetOS(null).ToString().ToLowerInvariant())); Console.WriteLine(); @@ -416,6 +416,7 @@ private static ReadyToRunContainerFormat MakeOutputFormat(ArgumentResult result) { "pe" => ReadyToRunContainerFormat.PE, "macho" => ReadyToRunContainerFormat.MachO, + "wasm" => ReadyToRunContainerFormat.Wasm, _ => throw new CommandLineException(SR.InvalidOutputFormat) }; } diff --git a/src/runtime/src/coreclr/tools/aot/crossgen2/Program.cs b/src/runtime/src/coreclr/tools/aot/crossgen2/Program.cs index dfc8dd737d3..ffa238e9e43 100644 --- a/src/runtime/src/coreclr/tools/aot/crossgen2/Program.cs +++ b/src/runtime/src/coreclr/tools/aot/crossgen2/Program.cs @@ -85,9 +85,19 @@ public int Run() TargetArchitecture targetArchitecture = Get(_command.TargetArchitecture); TargetOS targetOS = Get(_command.TargetOS); + bool allowOptimistic = _command.OptimizationMode != OptimizationMode.PreferSize; + + if (targetOS is TargetOS.iOS or TargetOS.tvOS or TargetOS.iOSSimulator or TargetOS.tvOSSimulator or TargetOS.MacCatalyst) + { + // These platforms do not support jitted code, so we want to ensure that we don't + // need to fall back to the interpreter for any hardware-intrinsic optimizations. + // Disable optimistic instruction sets by default. + allowOptimistic = false; + } + InstructionSetSupport instructionSetSupport = Helpers.ConfigureInstructionSetSupport(Get(_command.InstructionSet), Get(_command.MaxVectorTBitWidth), isVectorTOptimistic, targetArchitecture, targetOS, SR.InstructionSetMustNotBe, SR.InstructionSetInvalidImplication, logger, - optimizingForSize: _command.OptimizationMode == OptimizationMode.PreferSize, + allowOptimistic: allowOptimistic, isReadyToRun: true); SharedGenericsMode genericsMode = SharedGenericsMode.CanonicalReferenceTypes; var targetDetails = new TargetDetails(targetArchitecture, targetOS, Crossgen2RootCommand.IsArmel ? TargetAbi.NativeAotArmel : TargetAbi.NativeAot, instructionSetSupport.GetVectorTSimdVector()); @@ -402,7 +412,7 @@ private void RunSingleCompilation(Dictionary inFilePaths, Instru } ReadyToRunContainerFormat format = Get(_command.OutputFormat); - if (!composite && format != ReadyToRunContainerFormat.PE) + if (!composite && format != ReadyToRunContainerFormat.PE && format != ReadyToRunContainerFormat.Wasm) { throw new Exception(string.Format(SR.ErrorContainerFormatRequiresComposite, format)); } @@ -562,6 +572,16 @@ private void RunSingleCompilation(Dictionary inFilePaths, Instru } } } + + if (!typeSystemContext.TargetAllowsRuntimeCodeGeneration && typeSystemContext.BubbleIncludesCoreModule) + { + // For some platforms, we cannot JIT. + // As a result, we need to ensure that we have a fallback implementation for all hardware intrinsics + // that are marked as supported. + // Otherwise, the interpreter won't have an implementation it can call for any non-ReadyToRun code. + compilationRoots.Add(new ReadyToRunHardwareIntrinsicRootProvider(typeSystemContext)); + } + // In single-file compilation mode, use the assembly's DebuggableAttribute to determine whether to optimize // or produce debuggable code if an explicit optimization level was not specified on the command line OptimizationMode optimizationMode = _command.OptimizationMode; diff --git a/src/runtime/src/coreclr/tools/aot/jitinterface/jitinterface_generated.h b/src/runtime/src/coreclr/tools/aot/jitinterface/jitinterface_generated.h index 7d83f1102af..a2c772f0199 100644 --- a/src/runtime/src/coreclr/tools/aot/jitinterface/jitinterface_generated.h +++ b/src/runtime/src/coreclr/tools/aot/jitinterface/jitinterface_generated.h @@ -144,7 +144,6 @@ struct JitInterfaceCallbacks void (* getHelperFtn)(void * thisHandle, CorInfoExceptionClass** ppException, CorInfoHelpFunc ftnNum, CORINFO_CONST_LOOKUP* pNativeEntrypoint, CORINFO_METHOD_HANDLE* pMethod); void (* getFunctionEntryPoint)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_METHOD_HANDLE ftn, CORINFO_CONST_LOOKUP* pResult, CORINFO_ACCESS_FLAGS accessFlags); void (* getFunctionFixedEntryPoint)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_METHOD_HANDLE ftn, bool isUnsafeFunctionPointer, CORINFO_CONST_LOOKUP* pResult); - CorInfoHelpFunc (* getLazyStringLiteralHelper)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_MODULE_HANDLE handle); CORINFO_MODULE_HANDLE (* embedModuleHandle)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_MODULE_HANDLE handle, void** ppIndirection); CORINFO_CLASS_HANDLE (* embedClassHandle)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_CLASS_HANDLE handle, void** ppIndirection); CORINFO_METHOD_HANDLE (* embedMethodHandle)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_METHOD_HANDLE handle, void** ppIndirection); @@ -1490,15 +1489,6 @@ class JitInterfaceWrapper : public ICorJitInfo if (pException != nullptr) throw pException; } - virtual CorInfoHelpFunc getLazyStringLiteralHelper( - CORINFO_MODULE_HANDLE handle) -{ - CorInfoExceptionClass* pException = nullptr; - CorInfoHelpFunc temp = _callbacks->getLazyStringLiteralHelper(_thisHandle, &pException, handle); - if (pException != nullptr) throw pException; - return temp; -} - virtual CORINFO_MODULE_HANDLE embedModuleHandle( CORINFO_MODULE_HANDLE handle, void** ppIndirection) diff --git a/src/runtime/src/coreclr/tools/superpmi/superpmi-shared/lwmlist.h b/src/runtime/src/coreclr/tools/superpmi/superpmi-shared/lwmlist.h index 12272fc9e0d..22449f398bd 100644 --- a/src/runtime/src/coreclr/tools/superpmi/superpmi-shared/lwmlist.h +++ b/src/runtime/src/coreclr/tools/superpmi/superpmi-shared/lwmlist.h @@ -98,7 +98,6 @@ LWM(GetHFAType, DWORDLONG, DWORD) LWM(GetIntConfigValue, Agnostic_ConfigIntInfo, DWORD) LWM(GetJitFlags, DWORD, DD) LWM(GetJustMyCodeHandle, DWORDLONG, DLDL) -LWM(GetLazyStringLiteralHelper, DWORDLONG, DWORD) LWM(GetLocationOfThisType, DWORDLONG, Agnostic_CORINFO_LOOKUP_KIND) LWM(IsIntrinsic, DWORDLONG, DWORD) LWM(NotifyMethodInfoUsage, DWORDLONG, DWORD) diff --git a/src/runtime/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.cpp b/src/runtime/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.cpp index 9dbb8b8d6a4..a3acbfa86f2 100644 --- a/src/runtime/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.cpp +++ b/src/runtime/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.cpp @@ -2099,29 +2099,6 @@ unsigned MethodContext::repGetFieldOffset(CORINFO_FIELD_HANDLE field) return result; } -void MethodContext::recGetLazyStringLiteralHelper(CORINFO_MODULE_HANDLE handle, CorInfoHelpFunc result) -{ - if (GetLazyStringLiteralHelper == nullptr) - GetLazyStringLiteralHelper = new LightWeightMap(); - - DWORDLONG key = CastHandle(handle); - DWORD value = (DWORD)result; - GetLazyStringLiteralHelper->Add(key, value); - DEBUG_REC(dmpGetLazyStringLiteralHelper(key, value)); -} -void MethodContext::dmpGetLazyStringLiteralHelper(DWORDLONG key, DWORD value) -{ - printf("GetLazyStringLiteralHelper key mod-%016" PRIX64 ", value res-%u", key, value); -} -CorInfoHelpFunc MethodContext::repGetLazyStringLiteralHelper(CORINFO_MODULE_HANDLE handle) -{ - DWORDLONG key = CastHandle(handle); - DWORD value = LookupByKeyOrMiss(GetLazyStringLiteralHelper, key, ": key %016" PRIX64 "", key); - DEBUG_REP(dmpGetLazyStringLiteralHelper(key, value)); - CorInfoHelpFunc result = (CorInfoHelpFunc)value; - return result; -} - void MethodContext::recGetUnBoxHelper(CORINFO_CLASS_HANDLE cls, CorInfoHelpFunc result) { if (GetUnBoxHelper == nullptr) diff --git a/src/runtime/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.h b/src/runtime/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.h index e8c9ee85cd8..61bbdff04fb 100644 --- a/src/runtime/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.h +++ b/src/runtime/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.h @@ -282,10 +282,6 @@ class MethodContext void dmpGetFieldOffset(DWORDLONG key, DWORD value); unsigned repGetFieldOffset(CORINFO_FIELD_HANDLE field); - void recGetLazyStringLiteralHelper(CORINFO_MODULE_HANDLE handle, CorInfoHelpFunc result); - void dmpGetLazyStringLiteralHelper(DWORDLONG key, DWORD value); - CorInfoHelpFunc repGetLazyStringLiteralHelper(CORINFO_MODULE_HANDLE handle); - void recGetUnBoxHelper(CORINFO_CLASS_HANDLE cls, CorInfoHelpFunc result); void dmpGetUnBoxHelper(DWORDLONG key, DWORD value); CorInfoHelpFunc repGetUnBoxHelper(CORINFO_CLASS_HANDLE cls); @@ -1125,7 +1121,7 @@ enum mcPackets //Packet_IsValidToken = 144, //Packet_FindNameOfToken = 145, //PacketCR_RecordCallSite = 146, - Packet_GetLazyStringLiteralHelper = 147, + //Packet_GetLazyStringLiteralHelper = 147, Packet_IsIntrinsicType = 148, Packet_PrintClassName = 149, Packet_GetReadyToRunHelper = 150, diff --git a/src/runtime/src/coreclr/tools/superpmi/superpmi-shim-collector/icorjitinfo.cpp b/src/runtime/src/coreclr/tools/superpmi/superpmi-shim-collector/icorjitinfo.cpp index 333c425d9af..34c4cefbaa0 100644 --- a/src/runtime/src/coreclr/tools/superpmi/superpmi-shim-collector/icorjitinfo.cpp +++ b/src/runtime/src/coreclr/tools/superpmi/superpmi-shim-collector/icorjitinfo.cpp @@ -1518,16 +1518,6 @@ void interceptor_ICJI::getFunctionFixedEntryPoint( // the code to be passed to a JIT helper function. (as opposed to just // being passed back into the ICorInfo interface.) -// get slow lazy string literal helper to use (CORINFO_HELP_STRCNS*). -// Returns CORINFO_HELP_UNDEF if lazy string literal helper cannot be used. -CorInfoHelpFunc interceptor_ICJI::getLazyStringLiteralHelper(CORINFO_MODULE_HANDLE handle) -{ - mc->cr->AddCall("getLazyStringLiteralHelper"); - CorInfoHelpFunc temp = original_ICorJitInfo->getLazyStringLiteralHelper(handle); - mc->recGetLazyStringLiteralHelper(handle, temp); - return temp; -} - CORINFO_MODULE_HANDLE interceptor_ICJI::embedModuleHandle(CORINFO_MODULE_HANDLE handle, void** ppIndirection) { mc->cr->AddCall("embedModuleHandle"); diff --git a/src/runtime/src/coreclr/tools/superpmi/superpmi-shim-counter/icorjitinfo_generated.cpp b/src/runtime/src/coreclr/tools/superpmi/superpmi-shim-counter/icorjitinfo_generated.cpp index c261b9c0bbe..1dd2a952046 100644 --- a/src/runtime/src/coreclr/tools/superpmi/superpmi-shim-counter/icorjitinfo_generated.cpp +++ b/src/runtime/src/coreclr/tools/superpmi/superpmi-shim-counter/icorjitinfo_generated.cpp @@ -1079,13 +1079,6 @@ void interceptor_ICJI::getFunctionFixedEntryPoint( original_ICorJitInfo->getFunctionFixedEntryPoint(ftn, isUnsafeFunctionPointer, pResult); } -CorInfoHelpFunc interceptor_ICJI::getLazyStringLiteralHelper( - CORINFO_MODULE_HANDLE handle) -{ - mcs->AddCall("getLazyStringLiteralHelper"); - return original_ICorJitInfo->getLazyStringLiteralHelper(handle); -} - CORINFO_MODULE_HANDLE interceptor_ICJI::embedModuleHandle( CORINFO_MODULE_HANDLE handle, void** ppIndirection) diff --git a/src/runtime/src/coreclr/tools/superpmi/superpmi-shim-simple/icorjitinfo_generated.cpp b/src/runtime/src/coreclr/tools/superpmi/superpmi-shim-simple/icorjitinfo_generated.cpp index 5fda8e24f1c..59f9a7dc414 100644 --- a/src/runtime/src/coreclr/tools/superpmi/superpmi-shim-simple/icorjitinfo_generated.cpp +++ b/src/runtime/src/coreclr/tools/superpmi/superpmi-shim-simple/icorjitinfo_generated.cpp @@ -946,12 +946,6 @@ void interceptor_ICJI::getFunctionFixedEntryPoint( original_ICorJitInfo->getFunctionFixedEntryPoint(ftn, isUnsafeFunctionPointer, pResult); } -CorInfoHelpFunc interceptor_ICJI::getLazyStringLiteralHelper( - CORINFO_MODULE_HANDLE handle) -{ - return original_ICorJitInfo->getLazyStringLiteralHelper(handle); -} - CORINFO_MODULE_HANDLE interceptor_ICJI::embedModuleHandle( CORINFO_MODULE_HANDLE handle, void** ppIndirection) diff --git a/src/runtime/src/coreclr/tools/superpmi/superpmi/icorjitinfo.cpp b/src/runtime/src/coreclr/tools/superpmi/superpmi/icorjitinfo.cpp index ce1cdf2ecad..4e7c6dc9e8b 100644 --- a/src/runtime/src/coreclr/tools/superpmi/superpmi/icorjitinfo.cpp +++ b/src/runtime/src/coreclr/tools/superpmi/superpmi/icorjitinfo.cpp @@ -1315,14 +1315,6 @@ void MyICJI::getFunctionFixedEntryPoint( // the code to be passed to a JIT helper function. (as opposed to just // being passed back into the ICorInfo interface.) -// get slow lazy string literal helper to use (CORINFO_HELP_STRCNS*). -// Returns CORINFO_HELP_UNDEF if lazy string literal helper cannot be used. -CorInfoHelpFunc MyICJI::getLazyStringLiteralHelper(CORINFO_MODULE_HANDLE handle) -{ - jitInstance->mc->cr->AddCall("getLazyStringLiteralHelper"); - return jitInstance->mc->repGetLazyStringLiteralHelper(handle); -} - CORINFO_MODULE_HANDLE MyICJI::embedModuleHandle(CORINFO_MODULE_HANDLE handle, void** ppIndirection) { jitInstance->mc->cr->AddCall("embedModuleHandle"); diff --git a/src/runtime/src/coreclr/vm/CMakeLists.txt b/src/runtime/src/coreclr/vm/CMakeLists.txt index c7b9dc5f7bf..58372398e73 100644 --- a/src/runtime/src/coreclr/vm/CMakeLists.txt +++ b/src/runtime/src/coreclr/vm/CMakeLists.txt @@ -380,6 +380,12 @@ set(VM_SOURCES_WKS ${VM_SOURCES_GDBJIT} ) +if (CLR_CMAKE_TARGET_UNIX AND NOT CLR_CMAKE_TARGET_ARCH_WASM) + list(APPEND VM_SOURCES_WKS + ${RUNTIME_DIR}/asyncsafethreadmap.cpp + ) +endif() + # coreclr needs to compile codeman.cpp differently depending on flavor (i.e. dll vs. static lib)) list(REMOVE_ITEM VM_SOURCES_WKS codeman.cpp) @@ -476,6 +482,12 @@ set(VM_HEADERS_WKS ${VM_HEADERS_GDBJIT} ) +if (CLR_CMAKE_TARGET_UNIX AND NOT CLR_CMAKE_TARGET_ARCH_WASM) + list(APPEND VM_HEADERS_WKS + ${RUNTIME_DIR}/asyncsafethreadmap.h + ) +endif() + set(GC_SOURCES_WKS ${GC_SOURCES_DAC_AND_WKS_COMMON} ../gc/gceventstatus.cpp diff --git a/src/runtime/src/coreclr/vm/appdomainnative.cpp b/src/runtime/src/coreclr/vm/appdomainnative.cpp index 0a447f284b1..ada5e6c7b68 100644 --- a/src/runtime/src/coreclr/vm/appdomainnative.cpp +++ b/src/runtime/src/coreclr/vm/appdomainnative.cpp @@ -129,22 +129,6 @@ extern "C" void QCALLTYPE String_IsInterned(QCall::StringHandleOnStack str) END_QCALL; } -extern "C" STRINGREF* QCALLTYPE String_StrCns(UINT32 rid, Module* pModule) -{ - QCALL_CONTRACT; - - STRINGREF* hndStr = NULL; - - BEGIN_QCALL; - - // Retrieve the handle to the CLR string object. - hndStr = pModule->ResolveStringRef(RidToToken(rid, mdtString)); - - END_QCALL; - - return hndStr; -} - extern "C" void QCALLTYPE String_Intern(QCall::StringHandleOnStack str) { QCALL_CONTRACT; diff --git a/src/runtime/src/coreclr/vm/appdomainnative.hpp b/src/runtime/src/coreclr/vm/appdomainnative.hpp index 682341b5a0e..7fb86136bf1 100644 --- a/src/runtime/src/coreclr/vm/appdomainnative.hpp +++ b/src/runtime/src/coreclr/vm/appdomainnative.hpp @@ -16,7 +16,6 @@ #include "qcall.h" -extern "C" STRINGREF* QCALLTYPE String_StrCns(UINT32 rid, Module* pModule); extern "C" void QCALLTYPE String_Intern(QCall::StringHandleOnStack str); extern "C" void QCALLTYPE String_IsInterned(QCall::StringHandleOnStack str); diff --git a/src/runtime/src/coreclr/vm/codeman.cpp b/src/runtime/src/coreclr/vm/codeman.cpp index 8dd4adf0894..c9a1230e8ba 100644 --- a/src/runtime/src/coreclr/vm/codeman.cpp +++ b/src/runtime/src/coreclr/vm/codeman.cpp @@ -858,7 +858,7 @@ IJitManager::IJitManager() // been stopped when we suspend the EE so they won't be touching an element that is about to be deleted. // However for pre-emptive mode threads, they could be stalled right on top of the element we want // to delete, so we need to apply the reader lock to them and wait for them to drain. -ExecutionManager::ScanFlag ExecutionManager::GetScanFlags() +ExecutionManager::ScanFlag ExecutionManager::GetScanFlags(Thread *pThread) { CONTRACTL { NOTHROW; @@ -869,7 +869,10 @@ ExecutionManager::ScanFlag ExecutionManager::GetScanFlags() #if !defined(DACCESS_COMPILE) - Thread *pThread = GetThreadNULLOk(); + if (!pThread) + { + pThread = GetThreadNULLOk(); + } if (!pThread) return ScanNoReaderLock; @@ -5229,6 +5232,24 @@ BOOL ExecutionManager::IsManagedCode(PCODE currentPC) return IsManagedCodeWorker(currentPC, &lockState); } +//************************************************************************** +BOOL ExecutionManager::IsManagedCodeNoLock(PCODE currentPC) +{ + CONTRACTL { + NOTHROW; + GC_NOTRIGGER; + } CONTRACTL_END; + + if (currentPC == (PCODE)NULL) + return FALSE; + + _ASSERTE(GetScanFlags() != ScanReaderLock); + + // Since ScanReaderLock is not set, then we must assume that the ReaderLock is effectively taken. + RangeSectionLockState lockState = RangeSectionLockState::ReaderLocked; + return IsManagedCodeWorker(currentPC, &lockState); +} + //************************************************************************** NOINLINE // Make sure that the slow path with lock won't affect the fast path BOOL ExecutionManager::IsManagedCodeWithLock(PCODE currentPC) diff --git a/src/runtime/src/coreclr/vm/codeman.h b/src/runtime/src/coreclr/vm/codeman.h index 466a6a7fa6f..da9b0b3f50b 100644 --- a/src/runtime/src/coreclr/vm/codeman.h +++ b/src/runtime/src/coreclr/vm/codeman.h @@ -2293,11 +2293,15 @@ class ExecutionManager }; // Returns default scan flag for current thread - static ScanFlag GetScanFlags(); + static ScanFlag GetScanFlags(Thread *pThread = NULL); // Returns whether currentPC is in managed code. Returns false for jump stubs on WIN64. static BOOL IsManagedCode(PCODE currentPC); + // Returns whether currentPC is in managed code. Returns false for jump stubs on WIN64. + // Does not acquire the reader lock. Caller must ensure it is safe. + static BOOL IsManagedCodeNoLock(PCODE currentPC); + // Returns true if currentPC is ready to run codegen static BOOL IsReadyToRunCode(PCODE currentPC); diff --git a/src/runtime/src/coreclr/vm/corelib.h b/src/runtime/src/coreclr/vm/corelib.h index 549df6f8113..07668ba3cfe 100644 --- a/src/runtime/src/coreclr/vm/corelib.h +++ b/src/runtime/src/coreclr/vm/corelib.h @@ -956,7 +956,6 @@ DEFINE_METHOD(STRING, CTORF_SBYTEPTR_START_LEN_ENCODING, Ctor, DEFINE_METHOD(STRING, INTERNAL_COPY, InternalCopy, SM_Str_IntPtr_Int_RetVoid) DEFINE_METHOD(STRING, WCSLEN, wcslen, SM_PtrChar_RetInt) DEFINE_METHOD(STRING, STRLEN, strlen, SM_PtrByte_RetInt) -DEFINE_METHOD(STRING, STRCNS, StrCns, SM_UInt_IntPtr_RetStr) DEFINE_PROPERTY(STRING, LENGTH, Length, Int) DEFINE_CLASS(STRING_BUILDER, Text, StringBuilder) diff --git a/src/runtime/src/coreclr/vm/interpexec.cpp b/src/runtime/src/coreclr/vm/interpexec.cpp index 9e26575fda4..caabc89fd8b 100644 --- a/src/runtime/src/coreclr/vm/interpexec.cpp +++ b/src/runtime/src/coreclr/vm/interpexec.cpp @@ -1385,7 +1385,16 @@ void InterpExecMethod(InterpreterFrame *pInterpreterFrame, InterpMethodContextFr ConvOvfHelper(stack, ip); ip += 3; break; - + case INTOP_CONV_U4_U8_SAT: + { + uint64_t val = LOCAL_VAR(ip[2], uint64_t); + if (val > UINT32_MAX) + LOCAL_VAR(ip[1], uint32_t) = UINT32_MAX; + else + LOCAL_VAR(ip[1], uint32_t) = (uint32_t)val; + ip += 3; + break; + } case INTOP_SWITCH: { uint32_t val = LOCAL_VAR(ip[1], uint32_t); diff --git a/src/runtime/src/coreclr/vm/jitinterface.cpp b/src/runtime/src/coreclr/vm/jitinterface.cpp index 520fba235a8..e18c2402719 100644 --- a/src/runtime/src/coreclr/vm/jitinterface.cpp +++ b/src/runtime/src/coreclr/vm/jitinterface.cpp @@ -783,25 +783,6 @@ size_t CEEInfo::findNameOfToken (Module* module, return strlen (szFQName); } -CorInfoHelpFunc CEEInfo::getLazyStringLiteralHelper(CORINFO_MODULE_HANDLE handle) -{ - CONTRACTL { - NOTHROW; - GC_NOTRIGGER; - MODE_PREEMPTIVE; - } CONTRACTL_END; - - CorInfoHelpFunc result = CORINFO_HELP_UNDEF; - - JIT_TO_EE_TRANSITION_LEAF(); - - result = IsDynamicScope(handle) ? CORINFO_HELP_UNDEF : CORINFO_HELP_STRCNS; - - EE_TO_JIT_TRANSITION_LEAF(); - - return result; -} - CHECK CheckContext(CORINFO_MODULE_HANDLE scopeHnd, CORINFO_CONTEXT_HANDLE context) { @@ -13654,8 +13635,6 @@ CorInfoHelpFunc MapReadyToRunHelper(ReadyToRunHelper helperNum) case readyToRunHelper: return corInfoHelpFunc; #include "readytorunhelpers.h" - case READYTORUN_HELPER_GetString: return CORINFO_HELP_STRCNS; - default: return CORINFO_HELP_UNDEF; } } diff --git a/src/runtime/src/coreclr/vm/perfmap.cpp b/src/runtime/src/coreclr/vm/perfmap.cpp index 74be61ed435..f2cc1212595 100644 --- a/src/runtime/src/coreclr/vm/perfmap.cpp +++ b/src/runtime/src/coreclr/vm/perfmap.cpp @@ -261,14 +261,12 @@ void PerfMap::WriteLine(SString& line) EX_TRY { // Write the line. - - if (fprintf(m_fp, "%s", line.GetUTF8()) != 0) + if (fprintf(m_fp, "%s", line.GetUTF8()) < 0) { // This will cause us to stop writing to the file. // The file will still remain open until shutdown so that we don't have to take a lock at this level when we touch the file stream. m_ErrorEncountered = true; } - } EX_CATCH{} EX_END_CATCH } diff --git a/src/runtime/src/coreclr/vm/qcallentrypoints.cpp b/src/runtime/src/coreclr/vm/qcallentrypoints.cpp index 960b68ef921..7d4ef0cc789 100644 --- a/src/runtime/src/coreclr/vm/qcallentrypoints.cpp +++ b/src/runtime/src/coreclr/vm/qcallentrypoints.cpp @@ -282,7 +282,6 @@ static const Entry s_QCall[] = DllImportEntry(MultiCoreJIT_InternalStartProfile) #endif DllImportEntry(LoaderAllocator_Destroy) - DllImportEntry(String_StrCns) DllImportEntry(String_Intern) DllImportEntry(String_IsInterned) DllImportEntry(AppDomain_CreateDynamicAssembly) diff --git a/src/runtime/src/coreclr/vm/reflectioninvocation.cpp b/src/runtime/src/coreclr/vm/reflectioninvocation.cpp index fa76344e927..2b08f9e85eb 100644 --- a/src/runtime/src/coreclr/vm/reflectioninvocation.cpp +++ b/src/runtime/src/coreclr/vm/reflectioninvocation.cpp @@ -25,6 +25,8 @@ #include "dbginterface.h" #include "argdestination.h" +#include "interpexec.h" + extern "C" void QCALLTYPE RuntimeFieldHandle_GetValue(FieldDesc* fieldDesc, QCall::ObjectHandleOnStack instance, QCall::TypeHandle fieldType, QCall::TypeHandle declaringType, BOOL* pIsClassInitialized, QCall::ObjectHandleOnStack result) { QCALL_CONTRACT; @@ -406,6 +408,10 @@ extern "C" void QCALLTYPE RuntimeMethodHandle_InvokeMethod( callDescrData.dwRegTypeMap = 0; #endif callDescrData.fpReturnSize = argit.GetFPReturnSize(); +#ifdef TARGET_WASM + // WASM-TODO: this is now called from the interpreter, so the arguments layout is OK. reconsider with codegen + callDescrData.nArgsSize = nStackBytes; +#endif // TARGET_WASM // This is duplicated logic from MethodDesc::GetCallTarget PCODE pTarget; @@ -1362,6 +1368,23 @@ FCIMPL0(FC_BOOL_RET, ReflectionInvocation::TryEnsureSufficientExecutionStack) UINT_PTR current = reinterpret_cast(&pThread); UINT_PTR limit = pThread->GetCachedStackSufficientExecutionLimit(); +#ifdef FEATURE_INTERPRETER + InterpThreadContext* pInterpThreadContext = pThread->GetInterpThreadContext(); + if (pInterpThreadContext != nullptr) + { + // The interpreter has its own stack, so we need to check against that too. +#ifdef HOST_64BIT + const UINT_PTR MinExecutionStackSize = 128 * 1024; +#else // !HOST_64BIT + const UINT_PTR MinExecutionStackSize = 64 * 1024; +#endif // HOST_64BIT + if (pInterpThreadContext->pStackPointer >= pInterpThreadContext->pStackEnd - MinExecutionStackSize) + { + FC_RETURN_BOOL(FALSE); + } + } +#endif // FEATURE_INTERPRETER + FC_RETURN_BOOL(current >= limit); } FCIMPLEND diff --git a/src/runtime/src/coreclr/vm/threads.cpp b/src/runtime/src/coreclr/vm/threads.cpp index 748486d2742..3062c4c0b0e 100644 --- a/src/runtime/src/coreclr/vm/threads.cpp +++ b/src/runtime/src/coreclr/vm/threads.cpp @@ -33,6 +33,8 @@ #include "vmholder.h" #include "exceptmacros.h" #include "minipal/time.h" +#include "minipal/thread.h" +#include "asyncsafethreadmap.h" #ifdef FEATURE_COMINTEROP #include "runtimecallablewrapper.h" @@ -62,6 +64,17 @@ #include "interpexec.h" #endif // FEATURE_INTERPRETER +#ifndef DACCESS_COMPILE +Thread* GetThreadAsyncSafe() +{ +#if defined(TARGET_UNIX) && !defined(TARGET_WASM) + return (Thread*)FindThreadInAsyncSafeMap(minipal_get_current_thread_id_no_cache()); +#else + return GetThreadNULLOk(); +#endif +} +#endif // DACCESS_COMPILE + static const PortableTailCallFrame g_sentinelTailCallFrame = { NULL, NULL }; TailCallTls::TailCallTls() @@ -370,7 +383,26 @@ void SetThread(Thread* t) #endif // Clear or set the app domain to the one domain based on if the thread is being nulled out or set - t_CurrentThreadInfo.m_pAppDomain = t == NULL ? NULL : AppDomain::GetCurrentDomain(); + if (t != NULL) + { + t_CurrentThreadInfo.m_pAppDomain = AppDomain::GetCurrentDomain(); +#if defined(TARGET_UNIX) && !defined(TARGET_WASM) + if (!InsertThreadIntoAsyncSafeMap(t->GetOSThreadId64(), t)) + { + EEPOLICY_HANDLE_FATAL_ERROR_WITH_MESSAGE(COR_E_EXECUTIONENGINE, W("Failed to insert thread into async-safe map due to out of memory.")); + } +#endif // TARGET_UNIX && !TARGET_WASM + } + else + { + t_CurrentThreadInfo.m_pAppDomain = NULL; +#if defined(TARGET_UNIX) && !defined(TARGET_WASM) + if (origThread != NULL) + { + RemoveThreadFromAsyncSafeMap(origThread->GetOSThreadId64(), origThread); + } +#endif // TARGET_UNIX && !TARGET_WASM + } } BOOL Thread::Alert () diff --git a/src/runtime/src/coreclr/vm/threads.h b/src/runtime/src/coreclr/vm/threads.h index 572c57fd9a0..ab6ae3127d3 100644 --- a/src/runtime/src/coreclr/vm/threads.h +++ b/src/runtime/src/coreclr/vm/threads.h @@ -5512,6 +5512,8 @@ class StackWalkerWalkingThreadHolder Thread* m_PreviousValue; }; +EXTERN_C Thread* GetThreadAsyncSafe(); + #ifndef DACCESS_COMPILE #if defined(TARGET_WINDOWS) && defined(TARGET_AMD64) EXTERN_C void STDCALL ClrRestoreNonvolatileContextWorker(PCONTEXT ContextRecord, DWORD64 ssp); diff --git a/src/runtime/src/coreclr/vm/threadsuspend.cpp b/src/runtime/src/coreclr/vm/threadsuspend.cpp index e003ae328df..14b52e7c4a7 100644 --- a/src/runtime/src/coreclr/vm/threadsuspend.cpp +++ b/src/runtime/src/coreclr/vm/threadsuspend.cpp @@ -5731,16 +5731,17 @@ void ThreadSuspend::SuspendEE(SUSPEND_REASON reason) // It is unsafe to use blocking APIs or allocate in this method. BOOL CheckActivationSafePoint(SIZE_T ip) { - Thread *pThread = GetThreadNULLOk(); + Thread *pThread = GetThreadAsyncSafe(); // The criteria for safe activation is to be running managed code. // Also we are not interested in handling interruption if we are already in preemptive mode nor if we are single stepping BOOL isActivationSafePoint = pThread != NULL && (pThread->m_StateNC & Thread::TSNC_DebuggerIsStepping) == 0 && pThread->PreemptiveGCDisabled() && - ExecutionManager::IsManagedCode(ip); + (ExecutionManager::GetScanFlags(pThread) != ExecutionManager::ScanReaderLock) && + ExecutionManager::IsManagedCodeNoLock(ip); - if (!isActivationSafePoint) + if (!isActivationSafePoint && pThread != NULL) { pThread->m_hasPendingActivation = false; } diff --git a/src/runtime/src/coreclr/vm/yieldprocessornormalizedshared.cpp b/src/runtime/src/coreclr/vm/yieldprocessornormalizedshared.cpp index 55acce2666b..20412b66da6 100644 --- a/src/runtime/src/coreclr/vm/yieldprocessornormalizedshared.cpp +++ b/src/runtime/src/coreclr/vm/yieldprocessornormalizedshared.cpp @@ -118,7 +118,7 @@ void YieldProcessorNormalization::PerformMeasurement() double latestNsPerYield; if (s_normalizationState == NormalizationState::Initialized) { - if (minipal_lowres_ticks() - s_previousNormalizationTimeMs < MeasurementPeriodMs) + if ((minipal_lowres_ticks() - s_previousNormalizationTimeMs) < MeasurementPeriodMs) { return; } @@ -203,7 +203,7 @@ void YieldProcessorNormalization::PerformMeasurement() GCHeapUtilities::GetGCHeap()->SetYieldProcessorScalingFactor((float)yieldsPerNormalizedYield); - s_previousNormalizationTimeMs = (unsigned int)minipal_lowres_ticks(); + s_previousNormalizationTimeMs = minipal_lowres_ticks(); s_normalizationState = NormalizationState::Initialized; s_isMeasurementScheduled = false; } @@ -222,7 +222,7 @@ void YieldProcessorNormalization::ScheduleMeasurementIfNecessary() NormalizationState normalizationState = VolatileLoadWithoutBarrier(&s_normalizationState); if (normalizationState == NormalizationState::Initialized) { - if (minipal_lowres_ticks() - s_previousNormalizationTimeMs < MeasurementPeriodMs) + if ((minipal_lowres_ticks() - s_previousNormalizationTimeMs) < MeasurementPeriodMs) { return; } diff --git a/src/runtime/src/installer/pkg/sfx/Microsoft.NETCore.App/Directory.Build.props b/src/runtime/src/installer/pkg/sfx/Microsoft.NETCore.App/Directory.Build.props index 30cb047bc02..4b649df6a6b 100644 --- a/src/runtime/src/installer/pkg/sfx/Microsoft.NETCore.App/Directory.Build.props +++ b/src/runtime/src/installer/pkg/sfx/Microsoft.NETCore.App/Directory.Build.props @@ -271,8 +271,8 @@ - - + + diff --git a/src/runtime/src/installer/tests/Assets/Projects/Directory.Build.targets b/src/runtime/src/installer/tests/Assets/Projects/Directory.Build.targets index ce73ee61bbe..95888565353 100644 --- a/src/runtime/src/installer/tests/Assets/Projects/Directory.Build.targets +++ b/src/runtime/src/installer/tests/Assets/Projects/Directory.Build.targets @@ -1,9 +1,11 @@ + false + $(NetCoreAppCurrentVersion) <_TestEchoMiddleware Condition="'$(ContinuousIntegrationBuild)' == 'true' and '$(OS)' == 'Windows_NT'">%HELIX_CORRELATION_PAYLOAD%/xharness/TestEchoMiddleware <_TestEchoMiddleware Condition="'$(ContinuousIntegrationBuild)' == 'true' and '$(OS)' != 'Windows_NT'">$HELIX_CORRELATION_PAYLOAD/xharness/TestEchoMiddleware - <_TestEchoMiddleware Condition="'$(ContinuousIntegrationBuild)' != 'true'">$(ArtifactsDir)bin/NetCoreServer/$(Configuration)/$(NetCoreAppPrevious) + <_TestEchoMiddleware Condition="'$(ContinuousIntegrationBuild)' != 'true'">$(ArtifactsDir)bin/NetCoreServer/$(Configuration)/$(NetCoreAppMinimum) <_RemoteLoopMiddleware Condition="'$(ContinuousIntegrationBuild)' == 'true' and '$(OS)' == 'Windows_NT'">%HELIX_CORRELATION_PAYLOAD%/xharness/RemoteLoopMiddleware <_RemoteLoopMiddleware Condition="'$(ContinuousIntegrationBuild)' == 'true' and '$(OS)' != 'Windows_NT'">$HELIX_CORRELATION_PAYLOAD/xharness/RemoteLoopMiddleware - <_RemoteLoopMiddleware Condition="'$(ContinuousIntegrationBuild)' != 'true'">$(ArtifactsDir)bin/RemoteLoopServer/$(Configuration)/$(NetCoreAppPrevious) - + <_RemoteLoopMiddleware Condition="'$(ContinuousIntegrationBuild)' != 'true'">$(ArtifactsDir)bin/RemoteLoopServer/$(Configuration)/$(NetCoreAppMinimum) + $(WasmXHarnessArgs) --web-server-use-cors --web-server-use-https $(WasmXHarnessArgs) --set-web-server-http-env=DOTNET_TEST_WEBSOCKETHOST,DOTNET_TEST_HTTPHOST,DOTNET_TEST_REMOTE_LOOP_HOST $(WasmXHarnessArgs) --set-web-server-https-env=DOTNET_TEST_SECUREWEBSOCKETHOST,DOTNET_TEST_SECUREHTTPHOST,DOTNET_TEST_HTTP2HOST diff --git a/src/runtime/src/libraries/Common/tests/System/Net/Prerequisites/NetCoreServer/NetCoreServer.csproj b/src/runtime/src/libraries/Common/tests/System/Net/Prerequisites/NetCoreServer/NetCoreServer.csproj index 8780fd5f0aa..b0ef064a14b 100644 --- a/src/runtime/src/libraries/Common/tests/System/Net/Prerequisites/NetCoreServer/NetCoreServer.csproj +++ b/src/runtime/src/libraries/Common/tests/System/Net/Prerequisites/NetCoreServer/NetCoreServer.csproj @@ -3,10 +3,10 @@ $(_TargetFrameworkForXHarness) - $(NetCoreAppPrevious) + $(NetCoreAppMinimum) InProcess Exe false diff --git a/src/runtime/src/libraries/Common/tests/System/Net/Prerequisites/RemoteLoopServer/RemoteLoopServer.csproj b/src/runtime/src/libraries/Common/tests/System/Net/Prerequisites/RemoteLoopServer/RemoteLoopServer.csproj index b8769e957b1..f534a00fe33 100644 --- a/src/runtime/src/libraries/Common/tests/System/Net/Prerequisites/RemoteLoopServer/RemoteLoopServer.csproj +++ b/src/runtime/src/libraries/Common/tests/System/Net/Prerequisites/RemoteLoopServer/RemoteLoopServer.csproj @@ -3,10 +3,10 @@ $(_TargetFrameworkForXHarness) - $(NetCoreAppPrevious) + $(NetCoreAppMinimum) InProcess Exe false diff --git a/src/runtime/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTests.cs b/src/runtime/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTests.cs index c5ef4fa48a0..239589a47a2 100644 --- a/src/runtime/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTests.cs +++ b/src/runtime/src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTests.cs @@ -35,7 +35,7 @@ public static void IsSupported_AgreesWithPlatform() } private static bool PlatformSupportsMLDsa() => - PlatformDetection.IsOpenSsl3_5 || PlatformDetection.IsWindows10Version26200OrGreater; + PlatformDetection.IsOpenSsl3_5 || PlatformDetection.IsWindows10Version26100OrGreater; [Fact] public static void DisposeIsCalledOnImplementation() diff --git a/src/runtime/src/libraries/Common/tests/System/Security/Cryptography/MLKemImplementationTests.cs b/src/runtime/src/libraries/Common/tests/System/Security/Cryptography/MLKemImplementationTests.cs index 1cfb1e2571b..9b031d61700 100644 --- a/src/runtime/src/libraries/Common/tests/System/Security/Cryptography/MLKemImplementationTests.cs +++ b/src/runtime/src/libraries/Common/tests/System/Security/Cryptography/MLKemImplementationTests.cs @@ -55,6 +55,6 @@ public static void IsSupported_AgreesWithPlatform() private static bool PlatformSupportsMLKem() => PlatformDetection.IsOpenSsl3_5 || - PlatformDetection.IsWindows10Version26200OrGreater; + PlatformDetection.IsWindows10Version26100OrGreater; } } diff --git a/src/runtime/src/libraries/Common/tests/TestUtilities/System/PlatformDetection.Windows.cs b/src/runtime/src/libraries/Common/tests/TestUtilities/System/PlatformDetection.Windows.cs index 73bdea8e025..09d73ea08b0 100644 --- a/src/runtime/src/libraries/Common/tests/TestUtilities/System/PlatformDetection.Windows.cs +++ b/src/runtime/src/libraries/Common/tests/TestUtilities/System/PlatformDetection.Windows.cs @@ -69,8 +69,8 @@ public static partial class PlatformDetection // Windows 11 aka 21H2 public static bool IsWindows10Version22000OrGreater => IsWindowsVersionOrLater(10, 0, 22000); - // Windows 11 2025 Update (25H2) - public static bool IsWindows10Version26200OrGreater => IsWindowsVersionOrLater(10, 0, 26200); + // Windows 11 2024 Update (24H2) + public static bool IsWindows10Version26100OrGreater => IsWindowsVersionOrLater(10, 0, 26100); public static bool IsWindowsIoTCore { diff --git a/src/runtime/src/libraries/Fuzzing/DotnetFuzzing/run.bat b/src/runtime/src/libraries/Fuzzing/DotnetFuzzing/run.bat index 9d92659e7fe..7d0edeb5585 100644 --- a/src/runtime/src/libraries/Fuzzing/DotnetFuzzing/run.bat +++ b/src/runtime/src/libraries/Fuzzing/DotnetFuzzing/run.bat @@ -1 +1 @@ -%~dp0..\..\..\..\artifacts\bin\DotnetFuzzing\Debug\net10.0\win-x64\DotnetFuzzing.exe prepare-onefuzz deployment \ No newline at end of file +%~dp0..\..\..\..\artifacts\bin\DotnetFuzzing\Debug\net11.0\win-x64\DotnetFuzzing.exe prepare-onefuzz deployment \ No newline at end of file diff --git a/src/runtime/src/libraries/System.Collections.Immutable/ref/System.Collections.Immutable.netcoreapp.cs b/src/runtime/src/libraries/System.Collections.Immutable/ref/System.Collections.Immutable.netcoreapp.cs index c419ecd91f2..453d301fb28 100644 --- a/src/runtime/src/libraries/System.Collections.Immutable/ref/System.Collections.Immutable.netcoreapp.cs +++ b/src/runtime/src/libraries/System.Collections.Immutable/ref/System.Collections.Immutable.netcoreapp.cs @@ -9,6 +9,11 @@ namespace System.Collections.Frozen public abstract partial class FrozenSet : System.Collections.Generic.IReadOnlySet { } + + [System.Runtime.CompilerServices.CollectionBuilder(typeof(FrozenDictionary), nameof(FrozenDictionary.Create))] + public abstract partial class FrozenDictionary + { + } } namespace System.Collections.Immutable { diff --git a/src/runtime/src/libraries/System.Collections.Immutable/src/CompatibilitySuppressions.xml b/src/runtime/src/libraries/System.Collections.Immutable/src/CompatibilitySuppressions.xml deleted file mode 100644 index e99bbdd2ecf..00000000000 --- a/src/runtime/src/libraries/System.Collections.Immutable/src/CompatibilitySuppressions.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CP0016 - T:System.Collections.Frozen.FrozenDictionary`2:[T:System.Runtime.CompilerServices.CollectionBuilderAttribute] - ref/net10.0/System.Collections.Immutable.dll - lib/net10.0/System.Collections.Immutable.dll - - - CP0016 - T:System.Collections.Frozen.FrozenDictionary`2:[T:System.Runtime.CompilerServices.CollectionBuilderAttribute] - ref/net8.0/System.Collections.Immutable.dll - lib/net8.0/System.Collections.Immutable.dll - - - CP0016 - T:System.Collections.Frozen.FrozenDictionary`2:[T:System.Runtime.CompilerServices.CollectionBuilderAttribute] - ref/net9.0/System.Collections.Immutable.dll - lib/net9.0/System.Collections.Immutable.dll - - \ No newline at end of file diff --git a/src/runtime/src/libraries/System.Data.Common/src/System/Data/SQLTypes/SQLDateTime.cs b/src/runtime/src/libraries/System.Data.Common/src/System/Data/SQLTypes/SQLDateTime.cs index a865a948b47..93fab7a8768 100644 --- a/src/runtime/src/libraries/System.Data.Common/src/System/Data/SQLTypes/SQLDateTime.cs +++ b/src/runtime/src/libraries/System.Data.Common/src/System/Data/SQLTypes/SQLDateTime.cs @@ -5,6 +5,7 @@ using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Xml; using System.Xml.Schema; @@ -30,30 +31,41 @@ public struct SqlDateTime : INullable, IComparable, IXmlSerializable, IEquatable // Constants // Number of (100ns) ticks per time unit - private const double s_SQLTicksPerMillisecond = 0.3; - public static readonly int SQLTicksPerSecond = 300; - public static readonly int SQLTicksPerMinute = SQLTicksPerSecond * 60; - public static readonly int SQLTicksPerHour = SQLTicksPerMinute * 60; - private static readonly int s_SQLTicksPerDay = SQLTicksPerHour * 24; + private const double TicksPerMillisecond = 0.3; + private const int TicksPerSecond = 300; + private const int TicksPerMinute = TicksPerSecond * (int)TimeSpan.SecondsPerMinute; + private const int TicksPerHour = TicksPerSecond * (int)TimeSpan.SecondsPerHour; + private const int TicksPerDay = TicksPerSecond * (int)TimeSpan.SecondsPerDay; - private static readonly DateTime s_SQLBaseDate = new DateTime(1900, 1, 1); - private static readonly long s_SQLBaseDateTicks = s_SQLBaseDate.Ticks; + private static DateTime BaseDate => new DateTime(1900, 1, 1); - private const int s_minYear = 1753; // Jan 1 1753 - private const int s_maxYear = 9999; // Dec 31 9999 + private const int MinYear = 1753; // Jan 1 1753 + private const int MaxYear = 9999; // Dec 31 9999 - private const int s_minDay = -53690; // Jan 1 1753 - private const int s_maxDay = 2958463; // Dec 31 9999 is this many days from Jan 1 1900 - private const int s_minTime = 0; // 00:00:0:000PM - private static readonly int s_maxTime = s_SQLTicksPerDay - 1; // = 25919999, 11:59:59:997PM + private const int MinDay = -53690; // Jan 1 1753 + private const int MaxDay = 2958463; // Dec 31 9999 is this many days from Jan 1 1900 + private const int MinTime = 0; // 00:00:0:000PM + private const int MaxTime = TicksPerDay - 1; // = 25919999, 11:59:59:997PM - private const int s_dayBase = 693595; // Jan 1 1900 is this many days from Jan 1 0001 + private const int DayBase = 693595; // Jan 1 1900 is this many days from Jan 1 0001 + + private const long DateTimeMaxTicks = 3155378975999999999; // DateTime.MaxValue.Ticks private static ReadOnlySpan DaysToMonth365 => [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]; private static ReadOnlySpan DaysToMonth366 => [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]; - private static readonly TimeSpan s_minTimeSpan = new DateTime(1753, 1, 1).Subtract(s_SQLBaseDate); - private static readonly TimeSpan s_maxTimeSpan = DateTime.MaxValue.Subtract(s_SQLBaseDate); + private static TimeSpan MinTimeSpan + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => new DateTime(1753, 1, 1).Subtract(BaseDate); + } + + private static TimeSpan MaxTimeSpan + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => new DateTime(DateTimeMaxTicks).Subtract(BaseDate); + } + private const string ISO8601_DateTimeFormat = "yyyy-MM-ddTHH:mm:ss.fff"; // These formats are valid styles in SQL Server (style 9, 12, 13, 14) @@ -96,7 +108,7 @@ public SqlDateTime(int year, int month, int day, int hour, int minute, int secon public SqlDateTime(int year, int month, int day, int hour, int minute, int second, double millisecond) { - if (year >= s_minYear && year <= s_maxYear && month >= 1 && month <= 12) + if (year >= MinYear && year <= MaxYear && month >= 1 && month <= 12) { ReadOnlySpan days = IsLeapYear(year) ? DaysToMonth366 : @@ -105,20 +117,20 @@ public SqlDateTime(int year, int month, int day, int hour, int minute, int secon { int y = year - 1; int dayticks = y * 365 + y / 4 - y / 100 + y / 400 + days[month - 1] + day - 1; - dayticks -= s_dayBase; + dayticks -= DayBase; - if (dayticks >= s_minDay && dayticks <= s_maxDay && + if (dayticks >= MinDay && dayticks <= MaxDay && hour >= 0 && hour < 24 && minute >= 0 && minute < 60 && second >= 0 && second < 60 && millisecond >= 0 && millisecond < 1000.0) { - double ticksForMilisecond = millisecond * s_SQLTicksPerMillisecond + 0.5; - int timeticks = hour * SQLTicksPerHour + minute * SQLTicksPerMinute + second * SQLTicksPerSecond + + double ticksForMilisecond = millisecond * TicksPerMillisecond + 0.5; + int timeticks = hour * TicksPerHour + minute * TicksPerMinute + second * TicksPerSecond + (int)ticksForMilisecond; - if (timeticks > s_maxTime) + if (timeticks > MaxTime) { // Only rounding up could cause time to become greater than MaxTime. - Debug.Assert(timeticks == s_maxTime + 1); + Debug.Assert(timeticks == MaxTime + 1); // Make time to be zero, and increment day. timeticks = 0; @@ -145,7 +157,7 @@ public SqlDateTime(int year, int month, int day, int hour, int minute, int secon public SqlDateTime(int dayTicks, int timeTicks) { - if (dayTicks < s_minDay || dayTicks > s_maxDay || timeTicks < s_minTime || timeTicks > s_maxTime) + if (dayTicks < MinDay || dayTicks > MaxDay || timeTicks < MinTime || timeTicks > MaxTime) { m_fNotNull = false; throw new OverflowException(SQLResource.DateTimeOverflowMessage); @@ -158,19 +170,19 @@ public SqlDateTime(int dayTicks, int timeTicks) internal SqlDateTime(double dblVal) { - if ((dblVal < s_minDay) || (dblVal >= s_maxDay + 1)) + if ((dblVal < MinDay) || (dblVal >= MaxDay + 1)) throw new OverflowException(SQLResource.DateTimeOverflowMessage); int day = (int)dblVal; - int time = (int)((dblVal - day) * s_SQLTicksPerDay); + int time = (int)((dblVal - day) * TicksPerDay); // Check if we need to borrow a day from the day portion. if (time < 0) { day--; - time += s_SQLTicksPerDay; + time += TicksPerDay; } - else if (time >= s_SQLTicksPerDay) + else if (time >= TicksPerDay) { // Deal with case where time portion = 24 hrs. // @@ -181,7 +193,7 @@ internal SqlDateTime(double dblVal) // there was a negative value for dblVal such that dblVal + 1.0 = 1.0 // day++; - time -= s_SQLTicksPerDay; + time -= TicksPerDay; } this = new SqlDateTime(day, time); @@ -195,34 +207,34 @@ public bool IsNull private static TimeSpan ToTimeSpan(SqlDateTime value) { - long millisecond = (long)(value.m_time / s_SQLTicksPerMillisecond + 0.5); + long millisecond = (long)(value.m_time / TicksPerMillisecond + 0.5); return new TimeSpan(value.m_day * TimeSpan.TicksPerDay + millisecond * TimeSpan.TicksPerMillisecond); } private static DateTime ToDateTime(SqlDateTime value) { - return s_SQLBaseDate.Add(ToTimeSpan(value)); + return BaseDate.Add(ToTimeSpan(value)); } // Used by SqlBuffer in SqlClient. internal static DateTime ToDateTime(int daypart, int timepart) { - if (daypart < s_minDay || daypart > s_maxDay || timepart < s_minTime || timepart > s_maxTime) + if (daypart < MinDay || daypart > MaxDay || timepart < MinTime || timepart > MaxTime) { throw new OverflowException(SQLResource.DateTimeOverflowMessage); } long dayticks = daypart * TimeSpan.TicksPerDay; - long timeticks = ((long)(timepart / s_SQLTicksPerMillisecond + 0.5)) * TimeSpan.TicksPerMillisecond; + long timeticks = ((long)(timepart / TicksPerMillisecond + 0.5)) * TimeSpan.TicksPerMillisecond; - DateTime result = new DateTime(s_SQLBaseDateTicks + dayticks + timeticks); + DateTime result = new DateTime(BaseDate.Ticks + dayticks + timeticks); return result; } // Convert from TimeSpan, rounded to one three-hundredth second, due to loss of precision private static SqlDateTime FromTimeSpan(TimeSpan value) { - if (value < s_minTimeSpan || value > s_maxTimeSpan) + if (value < MinTimeSpan || value > MaxTimeSpan) throw new SqlTypeException(SQLResource.DateTimeOverflowMessage); int day = value.Days; @@ -235,11 +247,11 @@ private static SqlDateTime FromTimeSpan(TimeSpan value) ticks += TimeSpan.TicksPerDay; } - int time = (int)((double)ticks / TimeSpan.TicksPerMillisecond * s_SQLTicksPerMillisecond + 0.5); - if (time > s_maxTime) + int time = (int)((double)ticks / TimeSpan.TicksPerMillisecond * TicksPerMillisecond + 0.5); + if (time > MaxTime) { // Only rounding up could cause time to become greater than MaxTime. - Debug.Assert(time == s_maxTime + 1); + Debug.Assert(time == MaxTime + 1); // Make time to be zero, and increment day. time = 0; @@ -260,7 +272,7 @@ private static SqlDateTime FromDateTime(DateTime value) // if (value == DateTime.MaxValue) return SqlDateTime.MaxValue; - return FromTimeSpan(value.Subtract(s_SQLBaseDate)); + return FromTimeSpan(value.Subtract(BaseDate)); } /* @@ -270,7 +282,7 @@ internal static SqlDateTime FromDouble(double dblVal) { internal static double ToDouble(SqlDateTime x) { AssertValidSqlDateTime(x); - return(double)x.m_day + ((double)x.m_time / (double)SQLTicksPerDay); + return(double)x.m_day + ((double)x.m_time / (double)TicksPerDay); } internal static int ToInt(SqlDateTime x) { @@ -674,8 +686,12 @@ public static XmlQualifiedName GetXsdType(XmlSchemaSet schemaSet) return new XmlQualifiedName("dateTime", XmlSchema.Namespace); } - public static readonly SqlDateTime MinValue = new SqlDateTime(s_minDay, 0); - public static readonly SqlDateTime MaxValue = new SqlDateTime(s_maxDay, s_maxTime); + public static readonly int SQLTicksPerSecond = TicksPerSecond; + public static readonly int SQLTicksPerMinute = TicksPerMinute; + public static readonly int SQLTicksPerHour = TicksPerHour; + + public static readonly SqlDateTime MinValue = new SqlDateTime(MinDay, 0); + public static readonly SqlDateTime MaxValue = new SqlDateTime(MaxDay, MaxTime); public static readonly SqlDateTime Null = new SqlDateTime(true); } // SqlDateTime diff --git a/src/runtime/src/libraries/System.Diagnostics.EventLog/src/CompatibilitySuppressions.xml b/src/runtime/src/libraries/System.Diagnostics.EventLog/src/CompatibilitySuppressions.xml index 11804bbda76..ea1809d2937 100644 --- a/src/runtime/src/libraries/System.Diagnostics.EventLog/src/CompatibilitySuppressions.xml +++ b/src/runtime/src/libraries/System.Diagnostics.EventLog/src/CompatibilitySuppressions.xml @@ -3,7 +3,7 @@ CP0004 - System.Diagnostics.EventLog.Messages, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 + System.Diagnostics.EventLog.Messages, Version=11.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 CP0015 diff --git a/src/runtime/src/libraries/System.Formats.Nrbf/src/System.Formats.Nrbf.csproj b/src/runtime/src/libraries/System.Formats.Nrbf/src/System.Formats.Nrbf.csproj index 75df3e54d48..056aa832e7d 100644 --- a/src/runtime/src/libraries/System.Formats.Nrbf/src/System.Formats.Nrbf.csproj +++ b/src/runtime/src/libraries/System.Formats.Nrbf/src/System.Formats.Nrbf.csproj @@ -6,11 +6,6 @@ false true Provides a safe reader for .NET Remoting Binary Format (NRBF) payloads. - - - true diff --git a/src/runtime/src/libraries/System.IO.Pipes/src/CompatibilitySuppressions.xml b/src/runtime/src/libraries/System.IO.Pipes/src/CompatibilitySuppressions.xml index 6c5f95aabfb..d9b6fb6b350 100644 --- a/src/runtime/src/libraries/System.IO.Pipes/src/CompatibilitySuppressions.xml +++ b/src/runtime/src/libraries/System.IO.Pipes/src/CompatibilitySuppressions.xml @@ -4,37 +4,37 @@ CP0001 T:System.IO.Pipes.AnonymousPipeServerStreamAcl - ref/net10.0/System.IO.Pipes.dll - runtimes/win/lib/net10.0/System.IO.Pipes.dll + ref/net11.0/System.IO.Pipes.dll + runtimes/win/lib/net11.0/System.IO.Pipes.dll CP0001 T:System.IO.Pipes.NamedPipeServerStreamAcl - ref/net10.0/System.IO.Pipes.dll - runtimes/win/lib/net10.0/System.IO.Pipes.dll + ref/net11.0/System.IO.Pipes.dll + runtimes/win/lib/net11.0/System.IO.Pipes.dll CP0001 T:System.IO.Pipes.PipeAccessRule - ref/net10.0/System.IO.Pipes.dll - runtimes/win/lib/net10.0/System.IO.Pipes.dll + ref/net11.0/System.IO.Pipes.dll + runtimes/win/lib/net11.0/System.IO.Pipes.dll CP0001 T:System.IO.Pipes.PipeAuditRule - ref/net10.0/System.IO.Pipes.dll - runtimes/win/lib/net10.0/System.IO.Pipes.dll + ref/net11.0/System.IO.Pipes.dll + runtimes/win/lib/net11.0/System.IO.Pipes.dll CP0001 T:System.IO.Pipes.PipesAclExtensions - ref/net10.0/System.IO.Pipes.dll - runtimes/win/lib/net10.0/System.IO.Pipes.dll + ref/net11.0/System.IO.Pipes.dll + runtimes/win/lib/net11.0/System.IO.Pipes.dll CP0001 T:System.IO.Pipes.PipeSecurity - ref/net10.0/System.IO.Pipes.dll - runtimes/win/lib/net10.0/System.IO.Pipes.dll + ref/net11.0/System.IO.Pipes.dll + runtimes/win/lib/net11.0/System.IO.Pipes.dll \ No newline at end of file diff --git a/src/runtime/src/libraries/System.Net.Http/src/System/Net/Http/BrowserHttpHandler/BrowserHttpInterop.cs b/src/runtime/src/libraries/System.Net.Http/src/System/Net/Http/BrowserHttpHandler/BrowserHttpInterop.cs index 517a23060c0..3fa134aa260 100644 --- a/src/runtime/src/libraries/System.Net.Http/src/System/Net/Http/BrowserHttpHandler/BrowserHttpInterop.cs +++ b/src/runtime/src/libraries/System.Net.Http/src/System/Net/Http/BrowserHttpHandler/BrowserHttpInterop.cs @@ -26,19 +26,19 @@ public static bool SupportsStreamingResponse() return _SupportsStreamingResponse.Value; } - [JSImport("INTERNAL.http_wasm_supports_streaming_request")] + [JSImport("INTERNAL.httpSupportsStreamingRequest")] public static partial bool SupportsStreamingRequestImpl(); - [JSImport("INTERNAL.http_wasm_supports_streaming_response")] + [JSImport("INTERNAL.httpSupportsStreamingResponse")] public static partial bool SupportsStreamingResponseImpl(); - [JSImport("INTERNAL.http_wasm_create_controller")] + [JSImport("INTERNAL.httpCreateController")] public static partial JSObject CreateController(); - [JSImport("INTERNAL.http_wasm_abort")] + [JSImport("INTERNAL.httpAbort")] public static partial void Abort(JSObject httpController); - [JSImport("INTERNAL.http_wasm_transform_stream_write")] + [JSImport("INTERNAL.httpTransformStreamWrite")] public static partial Task TransformStreamWrite( JSObject httpController, IntPtr bufferPtr, @@ -47,23 +47,23 @@ public static partial Task TransformStreamWrite( public static unsafe Task TransformStreamWriteUnsafe(JSObject httpController, ReadOnlyMemory buffer, Buffers.MemoryHandle handle) => TransformStreamWrite(httpController, (nint)handle.Pointer, buffer.Length); - [JSImport("INTERNAL.http_wasm_transform_stream_close")] + [JSImport("INTERNAL.httpTransformStreamClose")] public static partial Task TransformStreamClose( JSObject httpController); - [JSImport("INTERNAL.http_wasm_get_response_header_names")] + [JSImport("INTERNAL.httpGetResponseHeaderNames")] private static partial string[] _GetResponseHeaderNames( JSObject httpController); - [JSImport("INTERNAL.http_wasm_get_response_header_values")] + [JSImport("INTERNAL.httpGetResponseHeaderValues")] private static partial string[] _GetResponseHeaderValues( JSObject httpController); - [JSImport("INTERNAL.http_wasm_get_response_status")] + [JSImport("INTERNAL.httpGetResponseStatus")] public static partial int GetResponseStatus( JSObject httpController); - [JSImport("INTERNAL.http_wasm_get_response_type")] + [JSImport("INTERNAL.httpGetResponseType")] public static partial string GetResponseType( JSObject httpController); @@ -83,7 +83,7 @@ public static void GetResponseHeaders(JSObject httpController, HttpHeaders respo } } - [JSImport("INTERNAL.http_wasm_fetch")] + [JSImport("INTERNAL.httpFetch")] public static partial Task Fetch( JSObject httpController, string uri, @@ -92,7 +92,7 @@ public static partial Task Fetch( string[] optionNames, [JSMarshalAs>] object?[] optionValues); - [JSImport("INTERNAL.http_wasm_fetch_stream")] + [JSImport("INTERNAL.httpFetchStream")] public static partial Task FetchStream( JSObject httpController, string uri, @@ -101,7 +101,7 @@ public static partial Task FetchStream( string[] optionNames, [JSMarshalAs>] object?[] optionValues); - [JSImport("INTERNAL.http_wasm_fetch_bytes")] + [JSImport("INTERNAL.httpFetchBytes")] private static partial Task FetchBytes( JSObject httpController, string uri, @@ -117,7 +117,7 @@ public static unsafe Task FetchBytes(JSObject httpController, string uri, string return FetchBytes(httpController, uri, headerNames, headerValues, optionNames, optionValues, (IntPtr)pinBuffer.Pointer, bodyLength); } - [JSImport("INTERNAL.http_wasm_get_streamed_response_bytes")] + [JSImport("INTERNAL.httpGetStreamedResponseBytes")] public static partial Task GetStreamedResponseBytes( JSObject fetchResponse, IntPtr bufferPtr, @@ -127,11 +127,11 @@ public static unsafe Task GetStreamedResponseBytesUnsafe(JSObject jsControl => GetStreamedResponseBytes(jsController, (IntPtr)handle.Pointer, buffer.Length); - [JSImport("INTERNAL.http_wasm_get_response_length")] + [JSImport("INTERNAL.httpGetResponseLength")] public static partial Task GetResponseLength( JSObject fetchResponse); - [JSImport("INTERNAL.http_wasm_get_response_bytes")] + [JSImport("INTERNAL.httpGetResponseBytes")] public static partial int GetResponseBytes( JSObject fetchResponse, [JSMarshalAs] Span buffer); diff --git a/src/runtime/src/libraries/System.Net.WebSockets.Client/src/System/Net/WebSockets/BrowserWebSockets/BrowserInterop.cs b/src/runtime/src/libraries/System.Net.WebSockets.Client/src/System/Net/WebSockets/BrowserWebSockets/BrowserInterop.cs index b18338d3e98..a131a76aeb1 100644 --- a/src/runtime/src/libraries/System.Net.WebSockets.Client/src/System/Net/WebSockets/BrowserWebSockets/BrowserInterop.cs +++ b/src/runtime/src/libraries/System.Net.WebSockets.Client/src/System/Net/WebSockets/BrowserWebSockets/BrowserInterop.cs @@ -56,11 +56,11 @@ public static int GetReadyState(JSObject? webSocket) return BrowserInterop.WebSocketGetState(webSocket); } - [JSImport("INTERNAL.ws_get_state")] + [JSImport("INTERNAL.wsGetState")] public static partial int WebSocketGetState( JSObject webSocket); - [JSImport("INTERNAL.ws_wasm_create")] + [JSImport("INTERNAL.wsCreate")] public static partial JSObject WebSocketCreate( string uri, string?[]? subProtocols, @@ -74,11 +74,11 @@ public static unsafe JSObject UnsafeCreate( return WebSocketCreate(uri, subProtocols, (IntPtr)responseHandle.Pointer); } - [JSImport("INTERNAL.ws_wasm_open")] + [JSImport("INTERNAL.wsOpen")] public static partial Task WebSocketOpen( JSObject webSocket); - [JSImport("INTERNAL.ws_wasm_send")] + [JSImport("INTERNAL.wsSend")] public static partial Task? WebSocketSend( JSObject webSocket, IntPtr bufferPtr, @@ -91,7 +91,7 @@ public static partial Task WebSocketOpen( return WebSocketSend(jsWs, (IntPtr)pinBuffer.Pointer, length, (int)messageType, endOfMessage); } - [JSImport("INTERNAL.ws_wasm_receive")] + [JSImport("INTERNAL.wsReceive")] public static partial Task? WebSocketReceive( JSObject webSocket, IntPtr bufferPtr, @@ -102,14 +102,14 @@ public static partial Task WebSocketOpen( return WebSocketReceive(jsWs, (IntPtr)pinBuffer.Pointer, length); } - [JSImport("INTERNAL.ws_wasm_close")] + [JSImport("INTERNAL.wsClose")] public static partial Task? WebSocketClose( JSObject webSocket, int code, string? reason, bool waitForCloseReceived); - [JSImport("INTERNAL.ws_wasm_abort")] + [JSImport("INTERNAL.wsAbort")] public static partial void WebSocketAbort( JSObject webSocket); diff --git a/src/runtime/src/libraries/System.Numerics.Tensors/ref/System.Numerics.Tensors.netcore.cs b/src/runtime/src/libraries/System.Numerics.Tensors/ref/System.Numerics.Tensors.netcore.cs index 4847b33842b..163f652b815 100644 --- a/src/runtime/src/libraries/System.Numerics.Tensors/ref/System.Numerics.Tensors.netcore.cs +++ b/src/runtime/src/libraries/System.Numerics.Tensors/ref/System.Numerics.Tensors.netcore.cs @@ -484,7 +484,7 @@ public static void BroadcastTo(this System.Numerics.Tensors.Tensor source, public static ref readonly System.Numerics.Tensors.TensorSpan Negate(scoped in System.Numerics.Tensors.ReadOnlyTensorSpan x, in System.Numerics.Tensors.TensorSpan destination) where T : System.Numerics.IUnaryNegationOperators { throw null; } public static T Norm(scoped in System.Numerics.Tensors.ReadOnlyTensorSpan x) where T : System.Numerics.IRootFunctions { throw null; } public static System.Numerics.Tensors.Tensor OnesComplement(in System.Numerics.Tensors.ReadOnlyTensorSpan x) where T : System.Numerics.IBitwiseOperators { throw null; } - public static ref readonly System.Numerics.Tensors.TensorSpan OnesComplement(scoped in System.Numerics.Tensors.ReadOnlyTensorSpan y, in System.Numerics.Tensors.TensorSpan destination) where T : System.Numerics.IBitwiseOperators { throw null; } + public static ref readonly System.Numerics.Tensors.TensorSpan OnesComplement(scoped in System.Numerics.Tensors.ReadOnlyTensorSpan x, in System.Numerics.Tensors.TensorSpan destination) where T : System.Numerics.IBitwiseOperators { throw null; } public static System.Numerics.Tensors.Tensor PermuteDimensions(this System.Numerics.Tensors.Tensor tensor, System.ReadOnlySpan dimensions) { throw null; } public static System.Numerics.Tensors.Tensor PopCount(in System.Numerics.Tensors.ReadOnlyTensorSpan x) where T : System.Numerics.IBinaryInteger { throw null; } public static ref readonly System.Numerics.Tensors.TensorSpan PopCount(scoped in System.Numerics.Tensors.ReadOnlyTensorSpan y, in System.Numerics.Tensors.TensorSpan destination) where T : System.Numerics.IBinaryInteger { throw null; } diff --git a/src/runtime/src/libraries/System.Numerics.Tensors/src/CompatibilitySuppressions.xml b/src/runtime/src/libraries/System.Numerics.Tensors/src/CompatibilitySuppressions.xml index cbc50b64ff0..c936ddeeede 100644 --- a/src/runtime/src/libraries/System.Numerics.Tensors/src/CompatibilitySuppressions.xml +++ b/src/runtime/src/libraries/System.Numerics.Tensors/src/CompatibilitySuppressions.xml @@ -1163,24 +1163,6 @@ lib/net9.0/System.Numerics.Tensors.dll true - - CP0017 - M:System.Numerics.Tensors.Tensor.OnesComplement``1(System.Numerics.Tensors.ReadOnlyTensorSpan{``0}@,System.Numerics.Tensors.TensorSpan{``0}@)$0 - ref/net10.0/System.Numerics.Tensors.dll - lib/net10.0/System.Numerics.Tensors.dll - - - CP0017 - M:System.Numerics.Tensors.Tensor.OnesComplement``1(System.Numerics.Tensors.ReadOnlyTensorSpan{``0}@,System.Numerics.Tensors.TensorSpan{``0}@)$0 - ref/net8.0/System.Numerics.Tensors.dll - lib/net8.0/System.Numerics.Tensors.dll - - - CP0017 - M:System.Numerics.Tensors.Tensor.OnesComplement``1(System.Numerics.Tensors.ReadOnlyTensorSpan{``0}@,System.Numerics.Tensors.TensorSpan{``0}@)$0 - ref/net9.0/System.Numerics.Tensors.dll - lib/net9.0/System.Numerics.Tensors.dll - CP0021 M:System.Numerics.Tensors.Tensor.Average``1(System.Numerics.Tensors.ReadOnlyTensorSpan{``0}@)``0:T:System.Numerics.INumberBase{``0} diff --git a/src/runtime/src/libraries/System.Numerics.Tensors/tests/Net8Tests/System.Numerics.Tensors.Net8.Tests.csproj b/src/runtime/src/libraries/System.Numerics.Tensors/tests/Net8Tests/System.Numerics.Tensors.Net8.Tests.csproj deleted file mode 100644 index a8f53d7696c..00000000000 --- a/src/runtime/src/libraries/System.Numerics.Tensors/tests/Net8Tests/System.Numerics.Tensors.Net8.Tests.csproj +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - $(NetCoreAppCurrent) - true - $(DefineConstants);SNT_NET8_TESTS - - - - - - - - - - - - - - TargetFramework=net8.0 - - - - diff --git a/src/runtime/src/libraries/System.Private.CoreLib/src/CompatibilitySuppressions.xml b/src/runtime/src/libraries/System.Private.CoreLib/src/CompatibilitySuppressions.xml index 21e9323f9e7..e941aba56dc 100644 --- a/src/runtime/src/libraries/System.Private.CoreLib/src/CompatibilitySuppressions.xml +++ b/src/runtime/src/libraries/System.Private.CoreLib/src/CompatibilitySuppressions.xml @@ -28,7 +28,5 @@ CP0008 T:System.Collections.BitArray - ref/net10.0/System.Private.CoreLib.dll - lib/net10.0/System.Private.CoreLib.dll diff --git a/src/runtime/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems b/src/runtime/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems index f8cf9733e24..80981a2f3ac 100644 --- a/src/runtime/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems +++ b/src/runtime/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems @@ -1378,8 +1378,8 @@ Common\Interop\Browser\Interop.Locale.CoreCLR.cs - - Common\Interop\Browser\Interop.Locale.cs + + Common\Interop\Browser\Interop.Locale.Mono.cs Common\Interop\Interop.Calendar.cs diff --git a/src/runtime/src/libraries/System.Private.CoreLib/src/System/Type.Helpers.cs b/src/runtime/src/libraries/System.Private.CoreLib/src/System/Type.Helpers.cs index 9b9fb68afc0..053c6f48f32 100644 --- a/src/runtime/src/libraries/System.Private.CoreLib/src/System/Type.Helpers.cs +++ b/src/runtime/src/libraries/System.Private.CoreLib/src/System/Type.Helpers.cs @@ -49,6 +49,20 @@ public virtual bool ContainsGenericParameters if (IsGenericParameter) return true; + if (IsFunctionPointer) + { + if (GetFunctionPointerReturnType().ContainsGenericParameters) + return true; + + foreach (Type parameterType in GetFunctionPointerParameterTypes()) + { + if (parameterType.ContainsGenericParameters) + return true; + } + + return false; + } + if (!IsGenericType) return false; @@ -88,6 +102,20 @@ public bool IsVisible if (HasElementType) return GetElementType()!.IsVisible; + if (IsFunctionPointer) + { + if (!GetFunctionPointerReturnType().IsVisible) + return false; + + foreach (Type parameterType in GetFunctionPointerParameterTypes()) + { + if (!parameterType.IsVisible) + return false; + } + + return true; + } + Type type = this; while (type.IsNested) { diff --git a/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj b/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj index 5b4819e1020..c4fe3a5a1db 100644 --- a/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj +++ b/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj @@ -52,11 +52,15 @@ $(TargetDir)%(Class)%(Identity).exception.txt - $(NetCoreAppCurrentTestHostPath)dotnet exec --runtimeconfig $(TargetDir)$(TargetName).runtimeconfig.json Microsoft.DotNet.RemoteExecutor.dll $(AssemblyName) %(Class) %(Identity) %(ExceptionFile) %(Parameters) + $(NetCoreAppCurrentTestHostPath)dotnet exec --runtimeconfig $(TargetDir)$(TargetName).runtimeconfig.json --depsfile $(TargetDir)$(TargetName).deps.json Microsoft.DotNet.RemoteExecutor.dll $(AssemblyName) %(Class) %(Identity) %(ExceptionFile) %(Parameters) - + + + + + diff --git a/src/runtime/src/libraries/System.Resources.Extensions/tests/TestData.resources b/src/runtime/src/libraries/System.Resources.Extensions/tests/TestData.resources index 879b5148593..4b45bcff8a5 100644 Binary files a/src/runtime/src/libraries/System.Resources.Extensions/tests/TestData.resources and b/src/runtime/src/libraries/System.Resources.Extensions/tests/TestData.resources differ diff --git a/src/runtime/src/libraries/System.Runtime.InteropServices.JavaScript/src/CompatibilitySuppressions.WasmThreads.xml b/src/runtime/src/libraries/System.Runtime.InteropServices.JavaScript/src/CompatibilitySuppressions.WasmThreads.xml index 6c8c191008c..cbe63f15c8d 100644 --- a/src/runtime/src/libraries/System.Runtime.InteropServices.JavaScript/src/CompatibilitySuppressions.WasmThreads.xml +++ b/src/runtime/src/libraries/System.Runtime.InteropServices.JavaScript/src/CompatibilitySuppressions.WasmThreads.xml @@ -3,7 +3,7 @@ CP0001 T:System.Runtime.InteropServices.JavaScript.JSWebWorker - ref/net10.0/System.Runtime.InteropServices.JavaScript.dll - runtimes/browser/lib/net10.0/System.Runtime.InteropServices.JavaScript.dll + ref/net11.0/System.Runtime.InteropServices.JavaScript.dll + runtimes/browser/lib/net11.0/System.Runtime.InteropServices.JavaScript.dll diff --git a/src/runtime/src/libraries/System.Runtime.InteropServices.JavaScript/src/CompatibilitySuppressions.xml b/src/runtime/src/libraries/System.Runtime.InteropServices.JavaScript/src/CompatibilitySuppressions.xml index fc29a68116a..ca0c67c4ee0 100644 --- a/src/runtime/src/libraries/System.Runtime.InteropServices.JavaScript/src/CompatibilitySuppressions.xml +++ b/src/runtime/src/libraries/System.Runtime.InteropServices.JavaScript/src/CompatibilitySuppressions.xml @@ -3,25 +3,25 @@ CP0001 T:System.Runtime.InteropServices.JavaScript.CancelablePromise - ref/net10.0/System.Runtime.InteropServices.JavaScript.dll - runtimes/browser/lib/net10.0/System.Runtime.InteropServices.JavaScript.dll + ref/net11.0/System.Runtime.InteropServices.JavaScript.dll + runtimes/browser/lib/net11.0/System.Runtime.InteropServices.JavaScript.dll CP0002 M:System.Runtime.InteropServices.JavaScript.JSObject.get_SynchronizationContext - ref/net10.0/System.Runtime.InteropServices.JavaScript.dll - runtimes/browser/lib/net10.0/System.Runtime.InteropServices.JavaScript.dll + ref/net11.0/System.Runtime.InteropServices.JavaScript.dll + runtimes/browser/lib/net11.0/System.Runtime.InteropServices.JavaScript.dll CP0001 T:System.Runtime.InteropServices.JavaScript.JSType.DiscardNoWait - ref/net10.0/System.Runtime.InteropServices.JavaScript.dll - runtimes/browser/lib/net10.0/System.Runtime.InteropServices.JavaScript.dll + ref/net11.0/System.Runtime.InteropServices.JavaScript.dll + runtimes/browser/lib/net11.0/System.Runtime.InteropServices.JavaScript.dll CP0002 M:System.Runtime.InteropServices.JavaScript.JSMarshalerType.get_DiscardNoWait - ref/net10.0/System.Runtime.InteropServices.JavaScript.dll - runtimes/browser/lib/net10.0/System.Runtime.InteropServices.JavaScript.dll + ref/net11.0/System.Runtime.InteropServices.JavaScript.dll + runtimes/browser/lib/net11.0/System.Runtime.InteropServices.JavaScript.dll diff --git a/src/runtime/src/libraries/System.Runtime.InteropServices.JavaScript/src/System/Runtime/InteropServices/JavaScript/Interop/JavaScriptImports.Generated.cs b/src/runtime/src/libraries/System.Runtime.InteropServices.JavaScript/src/System/Runtime/InteropServices/JavaScript/Interop/JavaScriptImports.Generated.cs index e7ba1f9aadd..788c657d2a7 100644 --- a/src/runtime/src/libraries/System.Runtime.InteropServices.JavaScript/src/System/Runtime/InteropServices/JavaScript/Interop/JavaScriptImports.Generated.cs +++ b/src/runtime/src/libraries/System.Runtime.InteropServices.JavaScript/src/System/Runtime/InteropServices/JavaScript/Interop/JavaScriptImports.Generated.cs @@ -8,44 +8,44 @@ namespace System.Runtime.InteropServices.JavaScript { internal static unsafe partial class JavaScriptImports { - [JSImport("INTERNAL.has_property")] + [JSImport("INTERNAL.hasProperty")] public static partial bool HasProperty(JSObject self, string propertyName); - [JSImport("INTERNAL.get_typeof_property")] + [JSImport("INTERNAL.getTypeOfProperty")] public static partial string GetTypeOfProperty(JSObject self, string propertyName); - [JSImport("INTERNAL.get_property")] + [JSImport("INTERNAL.getProperty")] public static partial bool GetPropertyAsBoolean(JSObject self, string propertyName); - [JSImport("INTERNAL.get_property")] + [JSImport("INTERNAL.getProperty")] public static partial int GetPropertyAsInt32(JSObject self, string propertyName); - [JSImport("INTERNAL.get_property")] + [JSImport("INTERNAL.getProperty")] public static partial double GetPropertyAsDouble(JSObject self, string propertyName); - [JSImport("INTERNAL.get_property")] + [JSImport("INTERNAL.getProperty")] public static partial string GetPropertyAsString(JSObject self, string propertyName); - [JSImport("INTERNAL.get_property")] + [JSImport("INTERNAL.getProperty")] public static partial JSObject GetPropertyAsJSObject(JSObject self, string propertyName); - [JSImport("INTERNAL.get_property")] + [JSImport("INTERNAL.getProperty")] public static partial byte[] GetPropertyAsByteArray(JSObject self, string propertyName); - [JSImport("INTERNAL.set_property")] + [JSImport("INTERNAL.setProperty")] public static partial void SetPropertyBool(JSObject self, string propertyName, bool value); - [JSImport("INTERNAL.set_property")] + [JSImport("INTERNAL.setProperty")] public static partial void SetPropertyInt(JSObject self, string propertyName, int value); - [JSImport("INTERNAL.set_property")] + [JSImport("INTERNAL.setProperty")] public static partial void SetPropertyDouble(JSObject self, string propertyName, double value); - [JSImport("INTERNAL.set_property")] + [JSImport("INTERNAL.setProperty")] public static partial void SetPropertyString(JSObject self, string propertyName, string value); - [JSImport("INTERNAL.set_property")] + [JSImport("INTERNAL.setProperty")] public static partial void SetPropertyJSObject(JSObject self, string propertyName, JSObject value); - [JSImport("INTERNAL.set_property")] + [JSImport("INTERNAL.setProperty")] public static partial void SetPropertyBytes(JSObject self, string propertyName, byte[] value); - [JSImport("INTERNAL.get_global_this")] + [JSImport("INTERNAL.getGlobalThis")] public static partial JSObject GetGlobalThis(); - [JSImport("INTERNAL.get_dotnet_instance")] + [JSImport("INTERNAL.getDotnetInstance")] public static partial JSObject GetDotnetInstance(); - [JSImport("INTERNAL.dynamic_import")] + [JSImport("INTERNAL.dynamicImport")] public static partial Task DynamicImport(string moduleName, string moduleUrl); - [JSImport("INTERNAL.mono_wasm_bind_cs_function")] + [JSImport("INTERNAL.bindCsFunction")] public static partial void BindCSFunction(IntPtr monoMethod, string assemblyName, string namespaceName, string shortClassName, string methodName, int signatureHash, IntPtr signature); #if DEBUG diff --git a/src/runtime/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System.Runtime.InteropServices.JavaScript.UnitTests/System/Runtime/InteropServices/JavaScript/Utils.cs b/src/runtime/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System.Runtime.InteropServices.JavaScript.UnitTests/System/Runtime/InteropServices/JavaScript/Utils.cs index d0e73f10206..650939dae0f 100644 --- a/src/runtime/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System.Runtime.InteropServices.JavaScript.UnitTests/System/Runtime/InteropServices/JavaScript/Utils.cs +++ b/src/runtime/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System.Runtime.InteropServices.JavaScript.UnitTests/System/Runtime/InteropServices/JavaScript/Utils.cs @@ -15,11 +15,11 @@ public static unsafe partial class Utils [JSImport("globalThis.App.invoke_js")] public static partial string InvokeJS(string code); - [JSImport("INTERNAL.set_property")] + [JSImport("INTERNAL.setProperty")] public static partial void SetProperty(JSObject self, string propertyName, [JSMarshalAs>] Action value); - [JSImport("INTERNAL.get_property")] + [JSImport("INTERNAL.getProperty")] [return: JSMarshalAs>] public static partial Action GetActionOfJSObjectProperty(JSObject self, string propertyName); diff --git a/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Type/TypeTests.cs b/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Type/TypeTests.cs index e800d331b0b..2424af0f4fb 100644 --- a/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Type/TypeTests.cs +++ b/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Type/TypeTests.cs @@ -1509,6 +1509,87 @@ public enum NestedEnum C } } + + /// + /// A mock function pointer type used to test the abstract ContainsGenericParameters implementation in Type.Helpers.cs. + /// This inherits from Type directly (not MockType) so that it uses the base ContainsGenericParameters implementation. + /// + private sealed class MockFunctionPointerType_ContainsGenericParameters : Type + { + private readonly Type _returnType; + private readonly Type[] _parameterTypes; + private static readonly Exception s_unexpected = new Exception("Did not expect to be called."); + + public MockFunctionPointerType_ContainsGenericParameters(Type returnType, Type[] parameterTypes) + { + _returnType = returnType; + _parameterTypes = parameterTypes ?? Type.EmptyTypes; + } + + // Required for ContainsGenericParameters to work correctly + protected override bool HasElementTypeImpl() => false; + public override bool IsGenericParameter => false; + public override bool IsFunctionPointer => true; + public override Type GetFunctionPointerReturnType() => _returnType; + public override Type[] GetFunctionPointerParameterTypes() => _parameterTypes; + + // Required abstract members + public override Assembly Assembly => throw s_unexpected; + public override string AssemblyQualifiedName => throw s_unexpected; + public override Type BaseType => throw s_unexpected; + public override string FullName => throw s_unexpected; + public override Guid GUID => throw s_unexpected; + public override Module Module => throw s_unexpected; + public override string Namespace => throw s_unexpected; + public override Type UnderlyingSystemType => throw s_unexpected; + public override string Name => throw s_unexpected; + public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr) => throw s_unexpected; + public override object[] GetCustomAttributes(bool inherit) => throw s_unexpected; + public override object[] GetCustomAttributes(Type attributeType, bool inherit) => throw s_unexpected; + public override Type GetElementType() => throw s_unexpected; + public override EventInfo GetEvent(string name, BindingFlags bindingAttr) => throw s_unexpected; + public override EventInfo[] GetEvents(BindingFlags bindingAttr) => throw s_unexpected; + public override FieldInfo GetField(string name, BindingFlags bindingAttr) => throw s_unexpected; + public override FieldInfo[] GetFields(BindingFlags bindingAttr) => throw s_unexpected; + public override Type GetInterface(string name, bool ignoreCase) => throw s_unexpected; + public override Type[] GetInterfaces() => throw s_unexpected; + public override MemberInfo[] GetMembers(BindingFlags bindingAttr) => throw s_unexpected; + public override MethodInfo[] GetMethods(BindingFlags bindingAttr) => throw s_unexpected; + public override Type GetNestedType(string name, BindingFlags bindingAttr) => throw s_unexpected; + public override Type[] GetNestedTypes(BindingFlags bindingAttr) => throw s_unexpected; + public override PropertyInfo[] GetProperties(BindingFlags bindingAttr) => throw s_unexpected; + public override object InvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, string[] namedParameters) => throw s_unexpected; + public override bool IsDefined(Type attributeType, bool inherit) => throw s_unexpected; + protected override TypeAttributes GetAttributeFlagsImpl() => throw s_unexpected; + protected override ConstructorInfo GetConstructorImpl(BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) => throw s_unexpected; + protected override MethodInfo GetMethodImpl(string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) => throw s_unexpected; + protected override PropertyInfo GetPropertyImpl(string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers) => throw s_unexpected; + protected override bool IsArrayImpl() => throw s_unexpected; + protected override bool IsByRefImpl() => throw s_unexpected; + protected override bool IsCOMObjectImpl() => throw s_unexpected; + protected override bool IsPointerImpl() => throw s_unexpected; + protected override bool IsPrimitiveImpl() => throw s_unexpected; + } + + [Fact] + public static void FunctionPointerContainsGenericParameters() + { + // Function pointer with non-generic return type and no parameters should not contain generic parameters + var fnPtrNonGeneric = new MockFunctionPointerType_ContainsGenericParameters(typeof(string), Type.EmptyTypes); + Assert.False(fnPtrNonGeneric.ContainsGenericParameters); + + // Function pointer with generic return type should contain generic parameters + var fnPtrGenericReturn = new MockFunctionPointerType_ContainsGenericParameters(typeof(List<>), Type.EmptyTypes); + Assert.True(fnPtrGenericReturn.ContainsGenericParameters); + + // Function pointer with non-generic return type but generic parameter type should contain generic parameters + var fnPtrGenericParam = new MockFunctionPointerType_ContainsGenericParameters(typeof(string), new Type[] { typeof(List<>) }); + Assert.True(fnPtrGenericParam.ContainsGenericParameters); + + // Function pointer with non-generic return type and non-generic parameter type should not contain generic parameters + var fnPtrAllNonGeneric = new MockFunctionPointerType_ContainsGenericParameters(typeof(string), new Type[] { typeof(int) }); + Assert.False(fnPtrAllNonGeneric.ContainsGenericParameters); + } } public class NonGenericClass { } diff --git a/src/runtime/src/libraries/System.Security.Permissions/src/CompatibilitySuppressions.xml b/src/runtime/src/libraries/System.Security.Permissions/src/CompatibilitySuppressions.xml index ea58cd3565d..41cb9826afb 100644 --- a/src/runtime/src/libraries/System.Security.Permissions/src/CompatibilitySuppressions.xml +++ b/src/runtime/src/libraries/System.Security.Permissions/src/CompatibilitySuppressions.xml @@ -19,6 +19,30 @@ lib/netstandard2.0/System.Security.Permissions.dll lib/net462/System.Security.Permissions.dll + + CP0014 + F:System.Security.Permissions.SecurityAction.Deny:[T:System.ObsoleteAttribute] + lib/netstandard2.0/System.Security.Permissions.dll + lib/net10.0/System.Security.Permissions.dll + + + CP0014 + F:System.Security.Permissions.SecurityAction.RequestMinimum:[T:System.ObsoleteAttribute] + lib/netstandard2.0/System.Security.Permissions.dll + lib/net10.0/System.Security.Permissions.dll + + + CP0014 + F:System.Security.Permissions.SecurityAction.RequestOptional:[T:System.ObsoleteAttribute] + lib/netstandard2.0/System.Security.Permissions.dll + lib/net10.0/System.Security.Permissions.dll + + + CP0014 + F:System.Security.Permissions.SecurityAction.RequestRefuse:[T:System.ObsoleteAttribute] + lib/netstandard2.0/System.Security.Permissions.dll + lib/net10.0/System.Security.Permissions.dll + CP0014 M:System.Security.HostSecurityManager.ResolvePolicy(System.Security.Policy.Evidence):[T:System.ObsoleteAttribute] @@ -266,6 +290,42 @@ lib/netstandard2.0/System.Security.Permissions.dll true + + CP0015 + M:System.Security.Policy.Evidence.#ctor(System.Object[],System.Object[]):[T:System.ObsoleteAttribute] + lib/netstandard2.0/System.Security.Permissions.dll + lib/net10.0/System.Security.Permissions.dll + + + CP0015 + M:System.Security.Policy.Evidence.AddAssembly(System.Object):[T:System.ObsoleteAttribute] + lib/netstandard2.0/System.Security.Permissions.dll + lib/net10.0/System.Security.Permissions.dll + + + CP0015 + M:System.Security.Policy.Evidence.AddHost(System.Object):[T:System.ObsoleteAttribute] + lib/netstandard2.0/System.Security.Permissions.dll + lib/net10.0/System.Security.Permissions.dll + + + CP0015 + M:System.Security.Policy.Evidence.CopyTo(System.Array,System.Int32):[T:System.ObsoleteAttribute] + lib/netstandard2.0/System.Security.Permissions.dll + lib/net10.0/System.Security.Permissions.dll + + + CP0015 + M:System.Security.Policy.Evidence.GetEnumerator:[T:System.ObsoleteAttribute] + lib/netstandard2.0/System.Security.Permissions.dll + lib/net10.0/System.Security.Permissions.dll + + + CP0015 + P:System.Security.Policy.Evidence.Count:[T:System.ObsoleteAttribute] + lib/netstandard2.0/System.Security.Permissions.dll + lib/net10.0/System.Security.Permissions.dll + CP0015 F:System.Security.Permissions.ReflectionPermissionFlag.AllFlags:[T:System.ObsoleteAttribute] diff --git a/src/runtime/src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml b/src/runtime/src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml index a0d092eccf4..c34164bf783 100644 --- a/src/runtime/src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml +++ b/src/runtime/src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml @@ -1,1006 +1,10 @@  - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorByteNonFaultingZeroExtendToInt16(System.Byte*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorByteNonFaultingZeroExtendToInt32(System.Byte*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorByteNonFaultingZeroExtendToInt64(System.Byte*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorByteNonFaultingZeroExtendToUInt16(System.Byte*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorByteNonFaultingZeroExtendToUInt32(System.Byte*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorByteNonFaultingZeroExtendToUInt64(System.Byte*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorInt16NonFaultingSignExtendToInt32(System.Int16*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorInt16NonFaultingSignExtendToInt64(System.Int16*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorInt16NonFaultingSignExtendToUInt32(System.Int16*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorInt16NonFaultingSignExtendToUInt64(System.Int16*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorInt32NonFaultingSignExtendToInt64(System.Int32*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorInt32NonFaultingSignExtendToUInt64(System.Int32*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorNonFaulting(System.Byte*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorNonFaulting(System.Double*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorNonFaulting(System.Int16*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorNonFaulting(System.Int32*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorNonFaulting(System.Int64*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorNonFaulting(System.SByte*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorNonFaulting(System.Single*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorNonFaulting(System.UInt16*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorNonFaulting(System.UInt32*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorNonFaulting(System.UInt64*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorSByteNonFaultingSignExtendToInt16(System.SByte*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorSByteNonFaultingSignExtendToInt32(System.SByte*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorSByteNonFaultingSignExtendToInt64(System.SByte*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorSByteNonFaultingSignExtendToUInt16(System.SByte*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorSByteNonFaultingSignExtendToUInt32(System.SByte*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorSByteNonFaultingSignExtendToUInt64(System.SByte*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorUInt16NonFaultingZeroExtendToInt32(System.UInt16*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorUInt16NonFaultingZeroExtendToInt64(System.UInt16*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorUInt16NonFaultingZeroExtendToUInt32(System.UInt16*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorUInt16NonFaultingZeroExtendToUInt64(System.UInt16*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorUInt32NonFaultingZeroExtendToInt64(System.UInt32*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.LoadVectorUInt32NonFaultingZeroExtendToUInt64(System.UInt32*) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.PrefetchBytes(System.Numerics.Vector{System.Byte},System.Void*,System.Runtime.Intrinsics.Arm.SvePrefetchType) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.PrefetchInt16(System.Numerics.Vector{System.UInt16},System.Void*,System.Runtime.Intrinsics.Arm.SvePrefetchType) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.PrefetchInt32(System.Numerics.Vector{System.UInt32},System.Void*,System.Runtime.Intrinsics.Arm.SvePrefetchType) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0002 - M:System.Runtime.Intrinsics.Arm.Sve.PrefetchInt64(System.Numerics.Vector{System.UInt64},System.Void*,System.Runtime.Intrinsics.Arm.SvePrefetchType) - net9.0/System.Runtime.Intrinsics.dll - net10.0/System.Runtime.Intrinsics.dll - - - CP0014 - M:System.ComponentModel.DefaultValueAttribute.#ctor(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - CP0014 - M:System.ComponentModel.DefaultValueAttribute.#ctor(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0014 - M:System.ComponentModel.DefaultValueAttribute.#ctor(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Runtime.dll - net10.0/System.Runtime.dll - - - CP0015 - M:System.Delegate.#ctor(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - M:System.Delegate.CreateDelegate(System.Type,System.Type,System.String,System.Boolean,System.Boolean)$1:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - M:System.Delegate.CreateDelegate(System.Type,System.Type,System.String,System.Boolean)$1:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - M:System.Delegate.CreateDelegate(System.Type,System.Type,System.String)$1:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - M:System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String,System.Diagnostics.Tracing.EventManifestOptions)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - M:System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - M:System.MulticastDelegate.#ctor(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - M:System.Reflection.Emit.EnumBuilder.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - M:System.Reflection.Emit.GenericTypeParameterBuilder.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - M:System.Reflection.Emit.TypeBuilder.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - M:System.Reflection.IReflect.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - M:System.Reflection.TypeDelegator.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - M:System.Reflection.TypeInfo.get_DeclaredMembers:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - M:System.Type.FindMembers(System.Reflection.MemberTypes,System.Reflection.BindingFlags,System.Reflection.MemberFilter,System.Object):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - M:System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Globalization.CultureInfo):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - M:System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - M:System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - T:System.Diagnostics.Tracing.EventSource:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/mscorlib.dll - net10.0/mscorlib.dll - - - CP0015 - M:System.ComponentModel.AmbientValueAttribute.#ctor(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptionProvider.GetTypeDescriptor(System.Type,System.Object)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptionProvider.GetTypeDescriptor(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.CreateEvent(System.Type,System.ComponentModel.EventDescriptor,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.CreateEvent(System.Type,System.String,System.Type,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.CreateProperty(System.Type,System.ComponentModel.PropertyDescriptor,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.CreateProperty(System.Type,System.String,System.Type,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetAttributes(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetClassName(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetConverter(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetDefaultEvent(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetDefaultProperty(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetEditor(System.Type,System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetEvents(System.Type,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetEvents(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetProperties(System.Type,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetProperties(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.Delegate.#ctor(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.Delegate.CreateDelegate(System.Type,System.Type,System.String,System.Boolean,System.Boolean)$1:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.Delegate.CreateDelegate(System.Type,System.Type,System.String,System.Boolean)$1:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.Delegate.CreateDelegate(System.Type,System.Type,System.String)$1:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String,System.Diagnostics.Tracing.EventManifestOptions)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.MulticastDelegate.#ctor(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.Reflection.Emit.EnumBuilder.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.Reflection.Emit.GenericTypeParameterBuilder.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.Reflection.Emit.TypeBuilder.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.Reflection.IReflect.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.Reflection.TypeDelegator.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.Reflection.TypeInfo.get_DeclaredMembers:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.Type.FindMembers(System.Reflection.MemberTypes,System.Reflection.BindingFlags,System.Reflection.MemberFilter,System.Object):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Globalization.CultureInfo):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - T:System.ComponentModel.BindingList`1<0>:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - T:System.Data.Common.DbConnectionStringBuilder:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - T:System.Diagnostics.Tracing.EventSource:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/netstandard.dll - net10.0/netstandard.dll - - - CP0015 - M:System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider.#ctor(System.Type,System.Type)$1:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.Annotations.dll - net10.0/System.ComponentModel.Annotations.dll - - - CP0015 - M:System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider.GetTypeDescriptor(System.Type,System.Object)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.Annotations.dll - net10.0/System.ComponentModel.Annotations.dll - - - CP0015 - M:System.ComponentModel.DataAnnotations.MetadataTypeAttribute.#ctor(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.Annotations.dll - net10.0/System.ComponentModel.Annotations.dll - - - CP0015 - M:System.ComponentModel.DataAnnotations.RangeAttribute.#ctor(System.Type,System.String,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.Annotations.dll - net10.0/System.ComponentModel.Annotations.dll - - - CP0015 - P:System.ComponentModel.DataAnnotations.MetadataTypeAttribute.MetadataClassType:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.Annotations.dll - net10.0/System.ComponentModel.Annotations.dll - - - CP0015 - P:System.ComponentModel.DataAnnotations.RangeAttribute.OperandType:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.Annotations.dll - net10.0/System.ComponentModel.Annotations.dll - - - CP0015 - M:System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider.#ctor(System.Type,System.Type)$1:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.DataAnnotations.dll - net10.0/System.ComponentModel.DataAnnotations.dll - - - CP0015 - M:System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider.GetTypeDescriptor(System.Type,System.Object)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.DataAnnotations.dll - net10.0/System.ComponentModel.DataAnnotations.dll - - - CP0015 - M:System.ComponentModel.DataAnnotations.MetadataTypeAttribute.#ctor(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.DataAnnotations.dll - net10.0/System.ComponentModel.DataAnnotations.dll - - - CP0015 - M:System.ComponentModel.DataAnnotations.RangeAttribute.#ctor(System.Type,System.String,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.DataAnnotations.dll - net10.0/System.ComponentModel.DataAnnotations.dll - - - CP0015 - P:System.ComponentModel.DataAnnotations.MetadataTypeAttribute.MetadataClassType:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.DataAnnotations.dll - net10.0/System.ComponentModel.DataAnnotations.dll - - - CP0015 - P:System.ComponentModel.DataAnnotations.RangeAttribute.OperandType:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.DataAnnotations.dll - net10.0/System.ComponentModel.DataAnnotations.dll - - - CP0015 - M:System.ComponentModel.AmbientValueAttribute.#ctor(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptionProvider.GetTypeDescriptor(System.Type,System.Object)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptionProvider.GetTypeDescriptor(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.CreateEvent(System.Type,System.ComponentModel.EventDescriptor,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.CreateEvent(System.Type,System.String,System.Type,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.CreateProperty(System.Type,System.ComponentModel.PropertyDescriptor,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.CreateProperty(System.Type,System.String,System.Type,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetAttributes(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetClassName(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetConverter(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetDefaultEvent(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetDefaultProperty(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetEditor(System.Type,System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetEvents(System.Type,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetEvents(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetProperties(System.Type,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetProperties(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - T:System.ComponentModel.BindingList`1<0>:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll - - - CP0015 - T:System.Data.Common.DbConnectionStringBuilder:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Data.Common.dll - net10.0/System.Data.Common.dll - - - CP0015 - T:System.Data.Common.DbConnectionStringBuilder:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Data.dll - net10.0/System.Data.dll - - - CP0015 - M:System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String,System.Diagnostics.Tracing.EventManifestOptions)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Diagnostics.Tracing.dll - net10.0/System.Diagnostics.Tracing.dll - - - CP0015 - M:System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Diagnostics.Tracing.dll - net10.0/System.Diagnostics.Tracing.dll - - - CP0015 - T:System.Diagnostics.Tracing.EventSource:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Diagnostics.Tracing.dll - net10.0/System.Diagnostics.Tracing.dll - - - CP0015 - M:System.ComponentModel.AmbientValueAttribute.#ctor(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptionProvider.GetTypeDescriptor(System.Type,System.Object)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptionProvider.GetTypeDescriptor(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.CreateEvent(System.Type,System.ComponentModel.EventDescriptor,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.CreateEvent(System.Type,System.String,System.Type,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.CreateProperty(System.Type,System.ComponentModel.PropertyDescriptor,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.CreateProperty(System.Type,System.String,System.Type,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetAttributes(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetClassName(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetConverter(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetDefaultEvent(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetDefaultProperty(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetEditor(System.Type,System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetEvents(System.Type,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetEvents(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetProperties(System.Type,System.Attribute[])$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - M:System.ComponentModel.TypeDescriptor.GetProperties(System.Type)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - T:System.ComponentModel.BindingList`1<0>:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.dll - net10.0/System.dll - - - CP0015 - M:System.Reflection.TypeInfo.get_DeclaredMembers:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Reflection.dll - net10.0/System.Reflection.dll - - - CP0015 - M:System.Reflection.Emit.EnumBuilder.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Reflection.Emit.dll - net10.0/System.Reflection.Emit.dll - - - CP0015 - M:System.Reflection.Emit.GenericTypeParameterBuilder.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Reflection.Emit.dll - net10.0/System.Reflection.Emit.dll - - - CP0015 - M:System.Reflection.Emit.TypeBuilder.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Reflection.Emit.dll - net10.0/System.Reflection.Emit.dll - - - CP0015 - M:System.Reflection.TypeExtensions.GetMember(System.Type,System.String,System.Reflection.BindingFlags)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Reflection.TypeExtensions.dll - net10.0/System.Reflection.TypeExtensions.dll - - - CP0015 - M:System.Reflection.TypeExtensions.GetMembers(System.Type,System.Reflection.BindingFlags)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Reflection.TypeExtensions.dll - net10.0/System.Reflection.TypeExtensions.dll - - - CP0015 - M:System.Delegate.#ctor(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Runtime.dll - net10.0/System.Runtime.dll - - - CP0015 - M:System.Delegate.CreateDelegate(System.Type,System.Type,System.String,System.Boolean,System.Boolean)$1:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Runtime.dll - net10.0/System.Runtime.dll - - - CP0015 - M:System.Delegate.CreateDelegate(System.Type,System.Type,System.String,System.Boolean)$1:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Runtime.dll - net10.0/System.Runtime.dll - - - CP0015 - M:System.Delegate.CreateDelegate(System.Type,System.Type,System.String)$1:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Runtime.dll - net10.0/System.Runtime.dll - - - CP0015 - M:System.MulticastDelegate.#ctor(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Runtime.dll - net10.0/System.Runtime.dll - - - CP0015 - M:System.Reflection.IReflect.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Runtime.dll - net10.0/System.Runtime.dll - - - CP0015 - M:System.Reflection.TypeDelegator.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Runtime.dll - net10.0/System.Runtime.dll - - - CP0015 - M:System.Reflection.TypeInfo.get_DeclaredMembers:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Runtime.dll - net10.0/System.Runtime.dll - - - CP0015 - M:System.Type.FindMembers(System.Reflection.MemberTypes,System.Reflection.BindingFlags,System.Reflection.MemberFilter,System.Object):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Runtime.dll - net10.0/System.Runtime.dll - - - CP0015 - M:System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Globalization.CultureInfo):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Runtime.dll - net10.0/System.Runtime.dll - - - CP0015 - M:System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Runtime.dll - net10.0/System.Runtime.dll - - - CP0015 - M:System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[]):[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] - net9.0/System.Runtime.dll - net10.0/System.Runtime.dll + T:System.Runtime.CompilerServices.AsyncHelpers:[T:System.Diagnostics.CodeAnalysis.ExperimentalAttribute] + net10.0/System.Runtime.dll + net11.0/System.Runtime.dll \ No newline at end of file diff --git a/src/runtime/src/libraries/apicompat/ApiCompatBaseline.netstandard2.0.xml b/src/runtime/src/libraries/apicompat/ApiCompatBaseline.netstandard2.0.xml index 94f7e8d61ad..8d18b718a61 100644 --- a/src/runtime/src/libraries/apicompat/ApiCompatBaseline.netstandard2.0.xml +++ b/src/runtime/src/libraries/apicompat/ApiCompatBaseline.netstandard2.0.xml @@ -11,127 +11,127 @@ CP0002 M:System.ComponentModel.BaseNumberConverter.#ctor netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0002 M:System.Data.Constraint.#ctor netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0002 M:System.Data.Constraint.CheckStateForProperty netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0002 M:System.Data.Constraint.get__DataSet netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0002 M:System.Data.Constraint.SetDataSet(System.Data.DataSet) netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0002 M:System.Linq.EnumerableExecutor.#ctor netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0002 M:System.Linq.EnumerableQuery.#ctor netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0002 M:System.Xml.Schema.XmlSchemaDatatype.#ctor netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0002 M:System.Xml.Schema.XmlSchemaGroupBase.#ctor netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0002 M:System.ComponentModel.BaseNumberConverter.#ctor netstandard2.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll + net11.0/System.ComponentModel.TypeConverter.dll CP0002 M:System.Linq.EnumerableExecutor.#ctor netstandard2.0/System.Core.dll - net10.0/System.Core.dll + net11.0/System.Core.dll CP0002 M:System.Linq.EnumerableQuery.#ctor netstandard2.0/System.Core.dll - net10.0/System.Core.dll + net11.0/System.Core.dll CP0002 M:System.Data.Constraint.#ctor netstandard2.0/System.Data.dll - net10.0/System.Data.dll + net11.0/System.Data.dll CP0002 M:System.Data.Constraint.CheckStateForProperty netstandard2.0/System.Data.dll - net10.0/System.Data.dll + net11.0/System.Data.dll CP0002 M:System.Data.Constraint.get__DataSet netstandard2.0/System.Data.dll - net10.0/System.Data.dll + net11.0/System.Data.dll CP0002 M:System.Data.Constraint.SetDataSet(System.Data.DataSet) netstandard2.0/System.Data.dll - net10.0/System.Data.dll + net11.0/System.Data.dll CP0002 M:System.ComponentModel.BaseNumberConverter.#ctor netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0002 M:System.Linq.EnumerableExecutor.#ctor netstandard2.0/System.Linq.Queryable.dll - net10.0/System.Linq.Queryable.dll + net11.0/System.Linq.Queryable.dll CP0002 M:System.Linq.EnumerableQuery.#ctor netstandard2.0/System.Linq.Queryable.dll - net10.0/System.Linq.Queryable.dll + net11.0/System.Linq.Queryable.dll CP0002 M:System.Xml.Schema.XmlSchemaDatatype.#ctor netstandard2.0/System.Xml.dll - net10.0/System.Xml.dll + net11.0/System.Xml.dll CP0002 M:System.Xml.Schema.XmlSchemaGroupBase.#ctor netstandard2.0/System.Xml.dll - net10.0/System.Xml.dll + net11.0/System.Xml.dll CP0004 @@ -143,3030 +143,3030 @@ CP0009 T:System.ComponentModel.BaseNumberConverter netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0009 T:System.Data.Constraint netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0009 T:System.Linq.EnumerableExecutor netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0009 T:System.Linq.EnumerableQuery netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0009 T:System.Xml.Schema.XmlSchemaDatatype netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0009 T:System.Xml.Schema.XmlSchemaGroupBase netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0009 T:System.ComponentModel.BaseNumberConverter netstandard2.0/System.ComponentModel.TypeConverter.dll - net10.0/System.ComponentModel.TypeConverter.dll + net11.0/System.ComponentModel.TypeConverter.dll CP0009 T:System.Linq.EnumerableExecutor netstandard2.0/System.Core.dll - net10.0/System.Core.dll + net11.0/System.Core.dll CP0009 T:System.Linq.EnumerableQuery netstandard2.0/System.Core.dll - net10.0/System.Core.dll + net11.0/System.Core.dll CP0009 T:System.Data.Constraint netstandard2.0/System.Data.dll - net10.0/System.Data.dll + net11.0/System.Data.dll CP0009 T:System.ComponentModel.BaseNumberConverter netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0009 T:System.Linq.EnumerableExecutor netstandard2.0/System.Linq.Queryable.dll - net10.0/System.Linq.Queryable.dll + net11.0/System.Linq.Queryable.dll CP0009 T:System.Linq.EnumerableQuery netstandard2.0/System.Linq.Queryable.dll - net10.0/System.Linq.Queryable.dll + net11.0/System.Linq.Queryable.dll CP0009 T:System.Xml.Schema.XmlSchemaDatatype netstandard2.0/System.Xml.dll - net10.0/System.Xml.dll + net11.0/System.Xml.dll CP0009 T:System.Xml.Schema.XmlSchemaGroupBase netstandard2.0/System.Xml.dll - net10.0/System.Xml.dll + net11.0/System.Xml.dll CP0014 M:System.Collections.IEnumerable.GetEnumerator:[T:System.Runtime.InteropServices.DispIdAttribute] netstandard2.0/mscorlib.dll - net10.0/mscorlib.dll + net11.0/mscorlib.dll CP0014 M:System.Security.SecureString.AppendChar(System.Char):[T:System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute] netstandard2.0/mscorlib.dll - net10.0/mscorlib.dll + net11.0/mscorlib.dll CP0014 M:System.Security.SecureString.InsertAt(System.Int32,System.Char):[T:System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute] netstandard2.0/mscorlib.dll - net10.0/mscorlib.dll + net11.0/mscorlib.dll CP0014 M:System.Security.SecureString.RemoveAt(System.Int32):[T:System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute] netstandard2.0/mscorlib.dll - net10.0/mscorlib.dll + net11.0/mscorlib.dll CP0014 M:System.Security.SecureString.SetAt(System.Int32,System.Char):[T:System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute] netstandard2.0/mscorlib.dll - net10.0/mscorlib.dll + net11.0/mscorlib.dll CP0014 E:System.Diagnostics.Process.ErrorDataReceived:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 E:System.Diagnostics.Process.Exited:[T:System.ComponentModel.CategoryAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 E:System.Diagnostics.Process.OutputDataReceived:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 E:System.IO.FileSystemWatcher.Error:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 E:System.Timers.Timer.Elapsed:[T:System.ComponentModel.CategoryAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 F:System.Text.RegularExpressions.Regex.internalMatchTimeout:[T:System.Runtime.Serialization.OptionalFieldAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 M:System.Collections.IEnumerable.GetEnumerator:[T:System.Runtime.InteropServices.DispIdAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 M:System.Security.SecureString.AppendChar(System.Char):[T:System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 M:System.Security.SecureString.InsertAt(System.Int32,System.Char):[T:System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 M:System.Security.SecureString.RemoveAt(System.Int32):[T:System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 M:System.Security.SecureString.SetAt(System.Int32,System.Char):[T:System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.ComponentModel.BackgroundWorker.CancellationPending:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.ComponentModel.BackgroundWorker.IsBusy:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.ComponentModel.BackgroundWorker.WorkerReportsProgress:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.ComponentModel.BackgroundWorker.WorkerSupportsCancellation:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.ComponentModel.RunWorkerCompletedEventArgs.UserState:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.BasePriority:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.EnableRaisingEvents:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.EnableRaisingEvents:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.ExitCode:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.ExitCode:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.ExitTime:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.ExitTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.Handle:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.Handle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.HandleCount:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.HasExited:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.HasExited:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.Id:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.MachineName:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.MachineName:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.MainModule:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.MainModule:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.MainWindowHandle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.MainWindowTitle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.MaxWorkingSet:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.MinWorkingSet:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.Modules:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.Modules:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.NonpagedSystemMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.NonpagedSystemMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PagedMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PagedMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PagedSystemMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PagedSystemMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PeakPagedMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PeakPagedMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PeakVirtualMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PeakVirtualMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PeakWorkingSet:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PeakWorkingSet64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PriorityBoostEnabled:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PriorityClass:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PrivateMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PrivateMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PrivilegedProcessorTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.ProcessName:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.ProcessorAffinity:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.Responding:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.SafeHandle:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.SafeHandle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.SessionId:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StandardError:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StandardError:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StandardInput:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StandardInput:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StandardOutput:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StandardOutput:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StartInfo:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StartInfo:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StartTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.SynchronizingObject:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.SynchronizingObject:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.Threads:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.Threads:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.TotalProcessorTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.UserProcessorTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.VirtualMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.VirtualMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.WorkingSet:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.WorkingSet64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessModule.FileVersionInfo:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Arguments:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Arguments:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Arguments:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.CreateNoWindow:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.CreateNoWindow:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Domain:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Environment:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Environment:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Environment:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.EnvironmentVariables:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.EnvironmentVariables:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.EnvironmentVariables:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.ErrorDialog:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.ErrorDialog:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.ErrorDialogParentHandle:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.ErrorDialogParentHandle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.FileName:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.FileName:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.FileName:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.LoadUserProfile:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.PasswordInClearText:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.PasswordInClearText:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardError:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardError:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardInput:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardInput:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardOutput:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardOutput:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.UserName:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.UseShellExecute:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.UseShellExecute:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Verb:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Verbs:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Verbs:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.WindowStyle:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.WorkingDirectory:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.WorkingDirectory:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.WorkingDirectory:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessThread.IdealProcessor:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessThread.ProcessorAffinity:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.EnableRaisingEvents:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.Filter:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.Filter:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.IncludeSubdirectories:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.InternalBufferSize:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.InternalBufferSize:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.NotifyFilter:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.Path:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.Path:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.Site:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.SynchronizingObject:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.SynchronizingObject:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Timers.Timer.AutoReset:[T:System.ComponentModel.CategoryAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Timers.Timer.Enabled:[T:System.ComponentModel.CategoryAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Timers.Timer.Interval:[T:System.ComponentModel.CategoryAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Timers.Timer.Interval:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Timers.Timer.SynchronizingObject:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 T:System.ComponentModel.BackgroundWorker:[T:System.ComponentModel.DefaultEventAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 T:System.Diagnostics.Process:[T:System.ComponentModel.DefaultEventAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 T:System.Diagnostics.Process:[T:System.ComponentModel.DefaultPropertyAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 T:System.IO.FileSystemWatcher:[T:System.ComponentModel.DefaultEventAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.ComponentModel.BackgroundWorker.CancellationPending:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.ComponentModel.EventBasedAsync.dll - net10.0/System.ComponentModel.EventBasedAsync.dll + net11.0/System.ComponentModel.EventBasedAsync.dll CP0014 P:System.ComponentModel.BackgroundWorker.IsBusy:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.ComponentModel.EventBasedAsync.dll - net10.0/System.ComponentModel.EventBasedAsync.dll + net11.0/System.ComponentModel.EventBasedAsync.dll CP0014 P:System.ComponentModel.BackgroundWorker.WorkerReportsProgress:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.ComponentModel.EventBasedAsync.dll - net10.0/System.ComponentModel.EventBasedAsync.dll + net11.0/System.ComponentModel.EventBasedAsync.dll CP0014 P:System.ComponentModel.BackgroundWorker.WorkerSupportsCancellation:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.ComponentModel.EventBasedAsync.dll - net10.0/System.ComponentModel.EventBasedAsync.dll + net11.0/System.ComponentModel.EventBasedAsync.dll CP0014 P:System.ComponentModel.RunWorkerCompletedEventArgs.UserState:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.ComponentModel.EventBasedAsync.dll - net10.0/System.ComponentModel.EventBasedAsync.dll + net11.0/System.ComponentModel.EventBasedAsync.dll CP0014 T:System.ComponentModel.BackgroundWorker:[T:System.ComponentModel.DefaultEventAttribute] netstandard2.0/System.ComponentModel.EventBasedAsync.dll - net10.0/System.ComponentModel.EventBasedAsync.dll + net11.0/System.ComponentModel.EventBasedAsync.dll CP0014 E:System.Diagnostics.Process.ErrorDataReceived:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 E:System.Diagnostics.Process.Exited:[T:System.ComponentModel.CategoryAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 E:System.Diagnostics.Process.OutputDataReceived:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.BasePriority:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.EnableRaisingEvents:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.EnableRaisingEvents:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.ExitCode:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.ExitCode:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.ExitTime:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.ExitTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.Handle:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.Handle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.HandleCount:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.HasExited:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.HasExited:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.Id:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.MachineName:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.MachineName:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.MainModule:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.MainModule:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.MainWindowHandle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.MainWindowTitle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.MaxWorkingSet:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.MinWorkingSet:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.Modules:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.Modules:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.NonpagedSystemMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.NonpagedSystemMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.PagedMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.PagedMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.PagedSystemMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.PagedSystemMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.PeakPagedMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.PeakPagedMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.PeakVirtualMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.PeakVirtualMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.PeakWorkingSet:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.PeakWorkingSet64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.PriorityBoostEnabled:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.PriorityClass:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.PrivateMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.PrivateMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.PrivilegedProcessorTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.ProcessName:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.ProcessorAffinity:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.Responding:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.SafeHandle:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.SafeHandle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.SessionId:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.StandardError:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.StandardError:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.StandardInput:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.StandardInput:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.StandardOutput:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.StandardOutput:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.StartInfo:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.StartInfo:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.StartTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.SynchronizingObject:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.SynchronizingObject:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.Threads:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.Threads:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.TotalProcessorTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.UserProcessorTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.VirtualMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.VirtualMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.WorkingSet:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.Process.WorkingSet64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessModule.FileVersionInfo:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Arguments:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Arguments:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Arguments:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.CreateNoWindow:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.CreateNoWindow:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Domain:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Environment:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Environment:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Environment:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.EnvironmentVariables:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.EnvironmentVariables:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.EnvironmentVariables:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.ErrorDialog:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.ErrorDialog:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.ErrorDialogParentHandle:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.ErrorDialogParentHandle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.FileName:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.FileName:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.FileName:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.LoadUserProfile:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.PasswordInClearText:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.PasswordInClearText:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardError:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardError:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardInput:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardInput:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardOutput:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardOutput:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.UserName:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.UseShellExecute:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.UseShellExecute:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Verb:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Verbs:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Verbs:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.WindowStyle:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.WorkingDirectory:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.WorkingDirectory:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessStartInfo.WorkingDirectory:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessThread.IdealProcessor:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 P:System.Diagnostics.ProcessThread.ProcessorAffinity:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 T:System.Diagnostics.Process:[T:System.ComponentModel.DefaultEventAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 T:System.Diagnostics.Process:[T:System.ComponentModel.DefaultPropertyAttribute] netstandard2.0/System.Diagnostics.Process.dll - net10.0/System.Diagnostics.Process.dll + net11.0/System.Diagnostics.Process.dll CP0014 E:System.Diagnostics.Process.ErrorDataReceived:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 E:System.Diagnostics.Process.Exited:[T:System.ComponentModel.CategoryAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 E:System.Diagnostics.Process.OutputDataReceived:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 E:System.IO.FileSystemWatcher.Error:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 E:System.Timers.Timer.Elapsed:[T:System.ComponentModel.CategoryAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 F:System.Text.RegularExpressions.Regex.internalMatchTimeout:[T:System.Runtime.Serialization.OptionalFieldAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.ComponentModel.BackgroundWorker.CancellationPending:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.ComponentModel.BackgroundWorker.IsBusy:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.ComponentModel.BackgroundWorker.WorkerReportsProgress:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.ComponentModel.BackgroundWorker.WorkerSupportsCancellation:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.ComponentModel.RunWorkerCompletedEventArgs.UserState:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.BasePriority:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.EnableRaisingEvents:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.EnableRaisingEvents:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.ExitCode:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.ExitCode:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.ExitTime:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.ExitTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.Handle:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.Handle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.HandleCount:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.HasExited:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.HasExited:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.Id:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.MachineName:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.MachineName:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.MainModule:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.MainModule:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.MainWindowHandle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.MainWindowTitle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.MaxWorkingSet:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.MinWorkingSet:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.Modules:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.Modules:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.NonpagedSystemMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.NonpagedSystemMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.PagedMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.PagedMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.PagedSystemMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.PagedSystemMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.PeakPagedMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.PeakPagedMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.PeakVirtualMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.PeakVirtualMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.PeakWorkingSet:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.PeakWorkingSet64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.PriorityBoostEnabled:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.PriorityClass:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.PrivateMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.PrivateMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.PrivilegedProcessorTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.ProcessName:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.ProcessorAffinity:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.Responding:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.SafeHandle:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.SafeHandle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.SessionId:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.StandardError:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.StandardError:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.StandardInput:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.StandardInput:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.StandardOutput:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.StandardOutput:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.StartInfo:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.StartInfo:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.StartTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.SynchronizingObject:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.SynchronizingObject:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.Threads:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.Threads:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.TotalProcessorTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.UserProcessorTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.VirtualMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.VirtualMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.WorkingSet:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.Process.WorkingSet64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessModule.FileVersionInfo:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Arguments:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Arguments:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Arguments:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.CreateNoWindow:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.CreateNoWindow:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Domain:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Environment:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Environment:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Environment:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.EnvironmentVariables:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.EnvironmentVariables:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.EnvironmentVariables:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.ErrorDialog:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.ErrorDialog:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.ErrorDialogParentHandle:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.ErrorDialogParentHandle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.FileName:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.FileName:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.FileName:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.LoadUserProfile:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.PasswordInClearText:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.PasswordInClearText:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardError:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardError:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardInput:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardInput:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardOutput:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardOutput:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.UserName:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.UseShellExecute:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.UseShellExecute:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Verb:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Verbs:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Verbs:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.WindowStyle:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.WorkingDirectory:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.WorkingDirectory:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessStartInfo.WorkingDirectory:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessThread.IdealProcessor:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Diagnostics.ProcessThread.ProcessorAffinity:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.IO.FileSystemWatcher.EnableRaisingEvents:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.IO.FileSystemWatcher.Filter:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.IO.FileSystemWatcher.Filter:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.IO.FileSystemWatcher.IncludeSubdirectories:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.IO.FileSystemWatcher.InternalBufferSize:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.IO.FileSystemWatcher.InternalBufferSize:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.IO.FileSystemWatcher.NotifyFilter:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.IO.FileSystemWatcher.Path:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.IO.FileSystemWatcher.Path:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.IO.FileSystemWatcher.Site:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.IO.FileSystemWatcher.SynchronizingObject:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.IO.FileSystemWatcher.SynchronizingObject:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Timers.Timer.AutoReset:[T:System.ComponentModel.CategoryAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Timers.Timer.Enabled:[T:System.ComponentModel.CategoryAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Timers.Timer.Interval:[T:System.ComponentModel.CategoryAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Timers.Timer.Interval:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 P:System.Timers.Timer.SynchronizingObject:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 T:System.ComponentModel.BackgroundWorker:[T:System.ComponentModel.DefaultEventAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 T:System.Diagnostics.Process:[T:System.ComponentModel.DefaultEventAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 T:System.Diagnostics.Process:[T:System.ComponentModel.DefaultPropertyAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 T:System.IO.FileSystemWatcher:[T:System.ComponentModel.DefaultEventAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0014 E:System.IO.FileSystemWatcher.Error:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.IO.FileSystem.Watcher.dll - net10.0/System.IO.FileSystem.Watcher.dll + net11.0/System.IO.FileSystem.Watcher.dll CP0014 P:System.IO.FileSystemWatcher.EnableRaisingEvents:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.IO.FileSystem.Watcher.dll - net10.0/System.IO.FileSystem.Watcher.dll + net11.0/System.IO.FileSystem.Watcher.dll CP0014 P:System.IO.FileSystemWatcher.Filter:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.IO.FileSystem.Watcher.dll - net10.0/System.IO.FileSystem.Watcher.dll + net11.0/System.IO.FileSystem.Watcher.dll CP0014 P:System.IO.FileSystemWatcher.Filter:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.0/System.IO.FileSystem.Watcher.dll - net10.0/System.IO.FileSystem.Watcher.dll + net11.0/System.IO.FileSystem.Watcher.dll CP0014 P:System.IO.FileSystemWatcher.IncludeSubdirectories:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.IO.FileSystem.Watcher.dll - net10.0/System.IO.FileSystem.Watcher.dll + net11.0/System.IO.FileSystem.Watcher.dll CP0014 P:System.IO.FileSystemWatcher.InternalBufferSize:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.IO.FileSystem.Watcher.dll - net10.0/System.IO.FileSystem.Watcher.dll + net11.0/System.IO.FileSystem.Watcher.dll CP0014 P:System.IO.FileSystemWatcher.InternalBufferSize:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.IO.FileSystem.Watcher.dll - net10.0/System.IO.FileSystem.Watcher.dll + net11.0/System.IO.FileSystem.Watcher.dll CP0014 P:System.IO.FileSystemWatcher.NotifyFilter:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.IO.FileSystem.Watcher.dll - net10.0/System.IO.FileSystem.Watcher.dll + net11.0/System.IO.FileSystem.Watcher.dll CP0014 P:System.IO.FileSystemWatcher.Path:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.IO.FileSystem.Watcher.dll - net10.0/System.IO.FileSystem.Watcher.dll + net11.0/System.IO.FileSystem.Watcher.dll CP0014 P:System.IO.FileSystemWatcher.Path:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.0/System.IO.FileSystem.Watcher.dll - net10.0/System.IO.FileSystem.Watcher.dll + net11.0/System.IO.FileSystem.Watcher.dll CP0014 P:System.IO.FileSystemWatcher.Site:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.IO.FileSystem.Watcher.dll - net10.0/System.IO.FileSystem.Watcher.dll + net11.0/System.IO.FileSystem.Watcher.dll CP0014 P:System.IO.FileSystemWatcher.SynchronizingObject:[T:System.ComponentModel.BrowsableAttribute] netstandard2.0/System.IO.FileSystem.Watcher.dll - net10.0/System.IO.FileSystem.Watcher.dll + net11.0/System.IO.FileSystem.Watcher.dll CP0014 P:System.IO.FileSystemWatcher.SynchronizingObject:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.IO.FileSystem.Watcher.dll - net10.0/System.IO.FileSystem.Watcher.dll + net11.0/System.IO.FileSystem.Watcher.dll CP0014 T:System.IO.FileSystemWatcher:[T:System.ComponentModel.DefaultEventAttribute] netstandard2.0/System.IO.FileSystem.Watcher.dll - net10.0/System.IO.FileSystem.Watcher.dll + net11.0/System.IO.FileSystem.Watcher.dll CP0014 M:System.Collections.IEnumerable.GetEnumerator:[T:System.Runtime.InteropServices.DispIdAttribute] netstandard2.0/System.Runtime.dll - net10.0/System.Runtime.dll + net11.0/System.Runtime.dll CP0014 M:System.Security.SecureString.AppendChar(System.Char):[T:System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute] netstandard2.0/System.Security.SecureString.dll - net10.0/System.Security.SecureString.dll + net11.0/System.Security.SecureString.dll CP0014 M:System.Security.SecureString.InsertAt(System.Int32,System.Char):[T:System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute] netstandard2.0/System.Security.SecureString.dll - net10.0/System.Security.SecureString.dll + net11.0/System.Security.SecureString.dll CP0014 M:System.Security.SecureString.RemoveAt(System.Int32):[T:System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute] netstandard2.0/System.Security.SecureString.dll - net10.0/System.Security.SecureString.dll + net11.0/System.Security.SecureString.dll CP0014 M:System.Security.SecureString.SetAt(System.Int32,System.Char):[T:System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute] netstandard2.0/System.Security.SecureString.dll - net10.0/System.Security.SecureString.dll + net11.0/System.Security.SecureString.dll CP0014 F:System.Text.RegularExpressions.Regex.internalMatchTimeout:[T:System.Runtime.Serialization.OptionalFieldAttribute] netstandard2.0/System.Text.RegularExpressions.dll - net10.0/System.Text.RegularExpressions.dll + net11.0/System.Text.RegularExpressions.dll CP0015 P:System.Timers.Timer.Interval:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0015 T:System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute:[T:System.AttributeUsageAttribute] netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0015 P:System.Timers.Timer.Interval:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0015 T:System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute:[T:System.AttributeUsageAttribute] netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0021 M:System.Runtime.InteropServices.Marshal.CreateAggregatedObject``1(System.IntPtr,``0)``0:notnull netstandard2.0/mscorlib.dll - net10.0/mscorlib.dll + net11.0/mscorlib.dll CP0021 M:System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate``1(``0)``0:notnull netstandard2.0/mscorlib.dll - net10.0/mscorlib.dll + net11.0/mscorlib.dll CP0021 T:System.Collections.Concurrent.ConcurrentDictionary`2``0:notnull netstandard2.0/mscorlib.dll - net10.0/mscorlib.dll + net11.0/mscorlib.dll CP0021 T:System.Collections.Generic.Dictionary`2``0:notnull netstandard2.0/mscorlib.dll - net10.0/mscorlib.dll + net11.0/mscorlib.dll CP0021 T:System.Collections.ObjectModel.KeyedCollection`2``0:notnull netstandard2.0/mscorlib.dll - net10.0/mscorlib.dll + net11.0/mscorlib.dll CP0021 T:System.Collections.ObjectModel.ReadOnlyDictionary`2``0:notnull netstandard2.0/mscorlib.dll - net10.0/mscorlib.dll + net11.0/mscorlib.dll CP0021 T:System.Tuple`8``7:notnull netstandard2.0/mscorlib.dll - net10.0/mscorlib.dll + net11.0/mscorlib.dll CP0021 M:System.Linq.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``1})``1:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``1},System.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``1},System.Func{``0,``2})``1:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.ParallelEnumerable.ToDictionary``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.ParallelEnumerable.ToDictionary``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1})``1:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.ParallelEnumerable.ToDictionary``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.ParallelEnumerable.ToDictionary``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2})``1:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.ParallelEnumerable.ToLookup``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.ParallelEnumerable.ToLookup``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1})``1:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.ParallelEnumerable.ToLookup``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.ParallelEnumerable.ToLookup``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2})``1:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Runtime.InteropServices.Marshal.CreateAggregatedObject``1(System.IntPtr,``0)``0:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate``1(``0)``0:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 T:System.Collections.Concurrent.ConcurrentDictionary`2``0:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 T:System.Collections.Generic.Dictionary`2``0:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 T:System.Collections.Generic.SortedDictionary`2``0:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 T:System.Collections.Generic.SortedList`2``0:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 T:System.Collections.ObjectModel.KeyedCollection`2``0:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 T:System.Collections.ObjectModel.ReadOnlyDictionary`2``0:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 T:System.Tuple`8``7:notnull netstandard2.0/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 T:System.Collections.Concurrent.ConcurrentDictionary`2``0:notnull netstandard2.0/System.Collections.Concurrent.dll - net10.0/System.Collections.Concurrent.dll + net11.0/System.Collections.Concurrent.dll CP0021 T:System.Collections.Generic.Dictionary`2``0:notnull netstandard2.0/System.Collections.dll - net10.0/System.Collections.dll + net11.0/System.Collections.dll CP0021 T:System.Collections.Generic.SortedDictionary`2``0:notnull netstandard2.0/System.Collections.dll - net10.0/System.Collections.dll + net11.0/System.Collections.dll CP0021 T:System.Collections.Generic.SortedList`2``0:notnull netstandard2.0/System.Collections.dll - net10.0/System.Collections.dll + net11.0/System.Collections.dll CP0021 M:System.Linq.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/System.Core.dll - net10.0/System.Core.dll + net11.0/System.Core.dll CP0021 M:System.Linq.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``1})``1:notnull netstandard2.0/System.Core.dll - net10.0/System.Core.dll + net11.0/System.Core.dll CP0021 M:System.Linq.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``1},System.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/System.Core.dll - net10.0/System.Core.dll + net11.0/System.Core.dll CP0021 M:System.Linq.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``1},System.Func{``0,``2})``1:notnull netstandard2.0/System.Core.dll - net10.0/System.Core.dll + net11.0/System.Core.dll CP0021 M:System.Linq.ParallelEnumerable.ToDictionary``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/System.Core.dll - net10.0/System.Core.dll + net11.0/System.Core.dll CP0021 M:System.Linq.ParallelEnumerable.ToDictionary``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1})``1:notnull netstandard2.0/System.Core.dll - net10.0/System.Core.dll + net11.0/System.Core.dll CP0021 M:System.Linq.ParallelEnumerable.ToDictionary``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/System.Core.dll - net10.0/System.Core.dll + net11.0/System.Core.dll CP0021 M:System.Linq.ParallelEnumerable.ToDictionary``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2})``1:notnull netstandard2.0/System.Core.dll - net10.0/System.Core.dll + net11.0/System.Core.dll CP0021 M:System.Linq.ParallelEnumerable.ToLookup``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/System.Core.dll - net10.0/System.Core.dll + net11.0/System.Core.dll CP0021 M:System.Linq.ParallelEnumerable.ToLookup``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1})``1:notnull netstandard2.0/System.Core.dll - net10.0/System.Core.dll + net11.0/System.Core.dll CP0021 M:System.Linq.ParallelEnumerable.ToLookup``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/System.Core.dll - net10.0/System.Core.dll + net11.0/System.Core.dll CP0021 M:System.Linq.ParallelEnumerable.ToLookup``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2})``1:notnull netstandard2.0/System.Core.dll - net10.0/System.Core.dll + net11.0/System.Core.dll CP0021 T:System.Collections.Generic.SortedDictionary`2``0:notnull netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0021 T:System.Collections.Generic.SortedList`2``0:notnull netstandard2.0/System.dll - net10.0/System.dll + net11.0/System.dll CP0021 M:System.Linq.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/System.Linq.dll - net10.0/System.Linq.dll + net11.0/System.Linq.dll CP0021 M:System.Linq.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``1})``1:notnull netstandard2.0/System.Linq.dll - net10.0/System.Linq.dll + net11.0/System.Linq.dll CP0021 M:System.Linq.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``1},System.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/System.Linq.dll - net10.0/System.Linq.dll + net11.0/System.Linq.dll CP0021 M:System.Linq.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``1},System.Func{``0,``2})``1:notnull netstandard2.0/System.Linq.dll - net10.0/System.Linq.dll + net11.0/System.Linq.dll CP0021 M:System.Linq.ParallelEnumerable.ToDictionary``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/System.Linq.Parallel.dll - net10.0/System.Linq.Parallel.dll + net11.0/System.Linq.Parallel.dll CP0021 M:System.Linq.ParallelEnumerable.ToDictionary``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1})``1:notnull netstandard2.0/System.Linq.Parallel.dll - net10.0/System.Linq.Parallel.dll + net11.0/System.Linq.Parallel.dll CP0021 M:System.Linq.ParallelEnumerable.ToDictionary``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/System.Linq.Parallel.dll - net10.0/System.Linq.Parallel.dll + net11.0/System.Linq.Parallel.dll CP0021 M:System.Linq.ParallelEnumerable.ToDictionary``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2})``1:notnull netstandard2.0/System.Linq.Parallel.dll - net10.0/System.Linq.Parallel.dll + net11.0/System.Linq.Parallel.dll CP0021 M:System.Linq.ParallelEnumerable.ToLookup``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/System.Linq.Parallel.dll - net10.0/System.Linq.Parallel.dll + net11.0/System.Linq.Parallel.dll CP0021 M:System.Linq.ParallelEnumerable.ToLookup``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1})``1:notnull netstandard2.0/System.Linq.Parallel.dll - net10.0/System.Linq.Parallel.dll + net11.0/System.Linq.Parallel.dll CP0021 M:System.Linq.ParallelEnumerable.ToLookup``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.0/System.Linq.Parallel.dll - net10.0/System.Linq.Parallel.dll + net11.0/System.Linq.Parallel.dll CP0021 M:System.Linq.ParallelEnumerable.ToLookup``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2})``1:notnull netstandard2.0/System.Linq.Parallel.dll - net10.0/System.Linq.Parallel.dll + net11.0/System.Linq.Parallel.dll CP0021 T:System.Collections.ObjectModel.KeyedCollection`2``0:notnull netstandard2.0/System.ObjectModel.dll - net10.0/System.ObjectModel.dll + net11.0/System.ObjectModel.dll CP0021 T:System.Collections.ObjectModel.ReadOnlyDictionary`2``0:notnull netstandard2.0/System.ObjectModel.dll - net10.0/System.ObjectModel.dll + net11.0/System.ObjectModel.dll CP0021 T:System.Tuple`8``7:notnull netstandard2.0/System.Runtime.dll - net10.0/System.Runtime.dll + net11.0/System.Runtime.dll CP0021 M:System.Runtime.InteropServices.Marshal.CreateAggregatedObject``1(System.IntPtr,``0)``0:notnull netstandard2.0/System.Runtime.InteropServices.dll - net10.0/System.Runtime.InteropServices.dll + net11.0/System.Runtime.InteropServices.dll CP0021 M:System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate``1(``0)``0:notnull netstandard2.0/System.Runtime.InteropServices.dll - net10.0/System.Runtime.InteropServices.dll + net11.0/System.Runtime.InteropServices.dll \ No newline at end of file diff --git a/src/runtime/src/libraries/apicompat/ApiCompatBaseline.netstandard2.1.xml b/src/runtime/src/libraries/apicompat/ApiCompatBaseline.netstandard2.1.xml index b32deb0ed95..af134b78c32 100644 --- a/src/runtime/src/libraries/apicompat/ApiCompatBaseline.netstandard2.1.xml +++ b/src/runtime/src/libraries/apicompat/ApiCompatBaseline.netstandard2.1.xml @@ -5,1002 +5,1002 @@ CP0014 E:System.Diagnostics.Process.ErrorDataReceived:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 E:System.Diagnostics.Process.Exited:[T:System.ComponentModel.CategoryAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 E:System.Diagnostics.Process.OutputDataReceived:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 E:System.IO.FileSystemWatcher.Error:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 E:System.Timers.Timer.Elapsed:[T:System.ComponentModel.CategoryAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 M:System.Security.SecureString.AppendChar(System.Char):[T:System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 M:System.Security.SecureString.InsertAt(System.Int32,System.Char):[T:System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 M:System.Security.SecureString.RemoveAt(System.Int32):[T:System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 M:System.Security.SecureString.SetAt(System.Int32,System.Char):[T:System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.ComponentModel.BackgroundWorker.CancellationPending:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.ComponentModel.BackgroundWorker.IsBusy:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.ComponentModel.BackgroundWorker.WorkerReportsProgress:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.ComponentModel.BackgroundWorker.WorkerSupportsCancellation:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.ComponentModel.RunWorkerCompletedEventArgs.UserState:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.BasePriority:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.EnableRaisingEvents:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.EnableRaisingEvents:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.ExitCode:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.ExitCode:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.ExitTime:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.ExitTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.Handle:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.Handle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.HandleCount:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.HasExited:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.HasExited:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.Id:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.MachineName:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.MachineName:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.MainModule:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.MainModule:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.MainWindowHandle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.MainWindowTitle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.MaxWorkingSet:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.MinWorkingSet:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.Modules:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.Modules:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.NonpagedSystemMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.NonpagedSystemMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PagedMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PagedMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PagedSystemMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PagedSystemMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PeakPagedMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PeakPagedMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PeakVirtualMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PeakVirtualMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PeakWorkingSet:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PeakWorkingSet64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PriorityBoostEnabled:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PriorityClass:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PrivateMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PrivateMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.PrivilegedProcessorTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.ProcessName:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.ProcessorAffinity:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.Responding:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.SafeHandle:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.SafeHandle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.SessionId:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StandardError:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StandardError:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StandardInput:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StandardInput:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StandardOutput:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StandardOutput:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StartInfo:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StartInfo:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.StartTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.SynchronizingObject:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.SynchronizingObject:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.Threads:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.Threads:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.TotalProcessorTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.UserProcessorTime:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.VirtualMemorySize:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.VirtualMemorySize64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.WorkingSet:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.Process.WorkingSet64:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessModule.FileVersionInfo:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Arguments:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Arguments:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Arguments:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.CreateNoWindow:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.CreateNoWindow:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Domain:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Environment:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Environment:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Environment:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.EnvironmentVariables:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.EnvironmentVariables:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.EnvironmentVariables:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.ErrorDialog:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.ErrorDialog:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.ErrorDialogParentHandle:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.ErrorDialogParentHandle:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.FileName:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.FileName:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.FileName:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.LoadUserProfile:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.PasswordInClearText:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.PasswordInClearText:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardError:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardError:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardInput:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardInput:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardOutput:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.RedirectStandardOutput:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.UserName:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.UseShellExecute:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.UseShellExecute:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Verb:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Verbs:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.Verbs:[T:System.ComponentModel.DesignerSerializationVisibilityAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.WindowStyle:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.WorkingDirectory:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.WorkingDirectory:[T:System.ComponentModel.NotifyParentPropertyAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessStartInfo.WorkingDirectory:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessThread.IdealProcessor:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Diagnostics.ProcessThread.ProcessorAffinity:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.EnableRaisingEvents:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.Filter:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.Filter:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.IncludeSubdirectories:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.InternalBufferSize:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.InternalBufferSize:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.NotifyFilter:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.Path:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.Path:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.Site:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.SynchronizingObject:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.IO.FileSystemWatcher.SynchronizingObject:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Timers.Timer.AutoReset:[T:System.ComponentModel.CategoryAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Timers.Timer.Enabled:[T:System.ComponentModel.CategoryAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Timers.Timer.Interval:[T:System.ComponentModel.CategoryAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Timers.Timer.Interval:[T:System.ComponentModel.SettingsBindableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 P:System.Timers.Timer.SynchronizingObject:[T:System.ComponentModel.BrowsableAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 T:System.ComponentModel.BackgroundWorker:[T:System.ComponentModel.DefaultEventAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 T:System.Diagnostics.Process:[T:System.ComponentModel.DefaultEventAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 T:System.Diagnostics.Process:[T:System.ComponentModel.DefaultPropertyAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0014 T:System.IO.FileSystemWatcher:[T:System.ComponentModel.DefaultEventAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0015 P:System.Timers.Timer.Interval:[T:System.ComponentModel.DefaultValueAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0015 T:System.Runtime.CompilerServices.AsyncMethodBuilderAttribute:[T:System.AttributeUsageAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0015 T:System.Runtime.InteropServices.ManagedToNativeComInteropStubAttribute:[T:System.AttributeUsageAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0015 T:System.Xml.Serialization.XmlAnyAttributeAttribute:[T:System.AttributeUsageAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0015 T:System.Xml.Serialization.XmlNamespaceDeclarationsAttribute:[T:System.AttributeUsageAttribute] netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``1})``1:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``1},System.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``1},System.Func{``0,``2})``1:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.ParallelEnumerable.ToDictionary``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.ParallelEnumerable.ToDictionary``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1})``1:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.ParallelEnumerable.ToDictionary``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.ParallelEnumerable.ToDictionary``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2})``1:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.ParallelEnumerable.ToLookup``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.ParallelEnumerable.ToLookup``2(System.Linq.ParallelQuery{``0},System.Func{``0,``1})``1:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.ParallelEnumerable.ToLookup``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})``1:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Linq.ParallelEnumerable.ToLookup``3(System.Linq.ParallelQuery{``0},System.Func{``0,``1},System.Func{``0,``2})``1:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Runtime.InteropServices.Marshal.CreateAggregatedObject``1(System.IntPtr,``0)``0:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 M:System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate``1(``0)``0:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 T:System.Collections.Concurrent.ConcurrentDictionary`2``0:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 T:System.Collections.Generic.Dictionary`2``0:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 T:System.Collections.Generic.SortedDictionary`2``0:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 T:System.Collections.Generic.SortedList`2``0:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 T:System.Collections.ObjectModel.KeyedCollection`2``0:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 T:System.Collections.ObjectModel.ReadOnlyDictionary`2``0:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll CP0021 T:System.Tuple`8``7:notnull netstandard2.1/netstandard.dll - net10.0/netstandard.dll + net11.0/netstandard.dll \ No newline at end of file diff --git a/src/runtime/src/libraries/externals.csproj b/src/runtime/src/libraries/externals.csproj index d689529b137..b83b9ac3e08 100644 --- a/src/runtime/src/libraries/externals.csproj +++ b/src/runtime/src/libraries/externals.csproj @@ -86,8 +86,8 @@ - - + + diff --git a/src/runtime/src/mono/browser/runtime/exports-internal.ts b/src/runtime/src/mono/browser/runtime/exports-internal.ts index 29d50f22a61..174bf360de6 100644 --- a/src/runtime/src/mono/browser/runtime/exports-internal.ts +++ b/src/runtime/src/mono/browser/runtime/exports-internal.ts @@ -56,41 +56,41 @@ export function export_internal (): any { mono_wasm_get_func_id_to_name_mappings, // interop - get_property, - set_property, - has_property, - get_typeof_property, - get_global_this, - get_dotnet_instance: () => exportedRuntimeAPI, - dynamic_import, - mono_wasm_bind_cs_function, + getProperty: get_property, + setProperty: set_property, + hasProperty: has_property, + getTypeOfProperty: get_typeof_property, + getGlobalThis: get_global_this, + getDotnetInstance: () => exportedRuntimeAPI, + dynamicImport: dynamic_import, + bindCsFunction: mono_wasm_bind_cs_function, // BrowserWebSocket - ws_wasm_create, - ws_wasm_open, - ws_wasm_send, - ws_wasm_receive, - ws_wasm_close, - ws_wasm_abort, - ws_get_state, + wsCreate: ws_wasm_create, + wsOpen: ws_wasm_open, + wsSend: ws_wasm_send, + wsReceive: ws_wasm_receive, + wsClose: ws_wasm_close, + wsAbort: ws_wasm_abort, + wsGetState: ws_get_state, // BrowserHttpHandler - http_wasm_supports_streaming_request, - http_wasm_supports_streaming_response, - http_wasm_create_controller, - http_wasm_get_response_type, - http_wasm_get_response_status, - http_wasm_abort, - http_wasm_transform_stream_write, - http_wasm_transform_stream_close, - http_wasm_fetch, - http_wasm_fetch_stream, - http_wasm_fetch_bytes, - http_wasm_get_response_header_names, - http_wasm_get_response_header_values, - http_wasm_get_response_bytes, - http_wasm_get_response_length, - http_wasm_get_streamed_response_bytes, + httpSupportsStreamingRequest: http_wasm_supports_streaming_request, + httpSupportsStreamingResponse: http_wasm_supports_streaming_response, + httpCreateController: http_wasm_create_controller, + httpGetResponseType: http_wasm_get_response_type, + httpGetResponseStatus: http_wasm_get_response_status, + httpAbort: http_wasm_abort, + httpTransformStreamWrite: http_wasm_transform_stream_write, + httpTransformStreamClose: http_wasm_transform_stream_close, + httpFetch: http_wasm_fetch, + httpFetchStream: http_wasm_fetch_stream, + httpFetchBytes: http_wasm_fetch_bytes, + httpGetResponseHeaderNames: http_wasm_get_response_header_names, + httpGetResponseHeaderValues: http_wasm_get_response_header_values, + httpGetResponseBytes: http_wasm_get_response_bytes, + httpGetResponseLength: http_wasm_get_response_length, + httpGetStreamedResponseBytes: http_wasm_get_streamed_response_bytes, // jiterpreter jiterpreter_dump_stats, diff --git a/src/runtime/src/mono/msbuild/apple/build/AppleBuild.LocalBuild.props b/src/runtime/src/mono/msbuild/apple/build/AppleBuild.LocalBuild.props index 221d9f34fee..92668cf265f 100644 --- a/src/runtime/src/mono/msbuild/apple/build/AppleBuild.LocalBuild.props +++ b/src/runtime/src/mono/msbuild/apple/build/AppleBuild.LocalBuild.props @@ -22,9 +22,9 @@ - <_NetCoreAppCurrent>net10.0 + <_NetCoreAppCurrent>net11.0 $(_NetCoreAppCurrent) - <_NetCoreAppToolCurrent>net10.0 + <_NetCoreAppToolCurrent>net11.0 false diff --git a/src/runtime/src/mono/msbuild/apple/build/AppleBuild.props b/src/runtime/src/mono/msbuild/apple/build/AppleBuild.props index f798429007f..b4b28f4d33a 100644 --- a/src/runtime/src/mono/msbuild/apple/build/AppleBuild.props +++ b/src/runtime/src/mono/msbuild/apple/build/AppleBuild.props @@ -21,9 +21,9 @@ - + - $(AfterMicrosoftNETSdkTargets);$(Crossgen2SdkOverrideTargetsPath) + $(AfterMicrosoftNETSdkTargets);$(Crossgen2SdkOverrideTargetsPath) $(AfterMicrosoftNETSdkTargets);$(MonoProjectRoot)\msbuild\apple\build\AppleBuild.ReadyToRun.targets diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Runtime.WebAssembly.Sdk/Sdk/AutoImport.props b/src/runtime/src/mono/nuget/Microsoft.NET.Runtime.WebAssembly.Sdk/Sdk/AutoImport.props index f2d45ad27a8..a47c2a51cb2 100644 --- a/src/runtime/src/mono/nuget/Microsoft.NET.Runtime.WebAssembly.Sdk/Sdk/AutoImport.props +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Runtime.WebAssembly.Sdk/Sdk/AutoImport.props @@ -1,7 +1,7 @@ - net10.0 - true + net11.0 + true diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Runtime.WebAssembly.Wasi.Sdk/Sdk/AutoImport.props b/src/runtime/src/mono/nuget/Microsoft.NET.Runtime.WebAssembly.Wasi.Sdk/Sdk/AutoImport.props index a31e36737e8..bb2c3f4e48b 100644 --- a/src/runtime/src/mono/nuget/Microsoft.NET.Runtime.WebAssembly.Wasi.Sdk/Sdk/AutoImport.props +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Runtime.WebAssembly.Wasi.Sdk/Sdk/AutoImport.props @@ -1,7 +1,7 @@ - net10.0 - true + net11.0 + true diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Runtime.WorkloadTesting.Internal/Sdk/WorkloadTesting.Core.targets b/src/runtime/src/mono/nuget/Microsoft.NET.Runtime.WorkloadTesting.Internal/Sdk/WorkloadTesting.Core.targets index 768e1cd44ec..550672aa417 100755 --- a/src/runtime/src/mono/nuget/Microsoft.NET.Runtime.WorkloadTesting.Internal/Sdk/WorkloadTesting.Core.targets +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Runtime.WorkloadTesting.Internal/Sdk/WorkloadTesting.Core.targets @@ -110,7 +110,7 @@ - $(SdkBandVersion)$([System.Text.RegularExpressions.Regex]::Match($(_DotNetVersionOutput), `-(?!rtm)[A-z]*[\.]*\d*`)) + $(SdkBandVersion)$([System.Text.RegularExpressions.Regex]::Match($(_DotNetVersionOutput), `-(?!rtm|release)[A-z]*[\.]*\d*`)) $(SdkBandVersionForWorkload_ComputedFromInstaller) $(VersionBandForSdkManifestsDir) diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Wasm.web.config b/src/runtime/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Wasm.web.config index 586d3565ed1..1512f5fe510 100644 --- a/src/runtime/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Wasm.web.config +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Wasm.web.config @@ -8,6 +8,7 @@ + @@ -16,6 +17,7 @@ + diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Current.Manifest/Microsoft.NET.Workload.Mono.Toolchain.Current.Manifest.pkgproj b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Current.Manifest/Microsoft.NET.Workload.Mono.Toolchain.Current.Manifest.pkgproj index 2997dc75ffa..448b3ecf843 100644 --- a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Current.Manifest/Microsoft.NET.Workload.Mono.Toolchain.Current.Manifest.pkgproj +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Current.Manifest/Microsoft.NET.Workload.Mono.Toolchain.Current.Manifest.pkgproj @@ -45,11 +45,12 @@ - <_WorkloadManifestValues Include="NetVersion" Value="net10" /> + <_WorkloadManifestValues Include="NetVersion" Value="net11" /> + <_WorkloadManifestValues Include="FrameworkVersionCurrent" Value="11.0" /> <_WorkloadManifestValues Include="WorkloadVersion" Value="$(PackageVersion)" /> <_WorkloadManifestValues Include="PackageVersion" Value="$(PackageVersion)" /> - <_WorkloadManifestValues Include="PackageVersionNet9" Value="$(PackageVersionNet9)" Condition="'$(PackageVersionNet9)' != ''" /> - <_WorkloadManifestValues Include="PackageVersionNet9" Value="$(PackageVersion)" Condition="'$(PackageVersionNet9)' == ''" /> + <_WorkloadManifestValues Include="PackageVersionNet10" Value="$(PackageVersionNet10)" /> + <_WorkloadManifestValues Include="PackageVersionNet9" Value="$(PackageVersionNet9)" /> <_WorkloadManifestValues Include="PackageVersionNet8" Value="$(PackageVersionNet8)" /> <_WorkloadManifestValues Include="PackageVersionNet7" Value="$(PackageVersionNet7)" /> <_WorkloadManifestValues Include="PackageVersionNet6" Value="$(PackageVersionNet6)" /> diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Current.Manifest/WorkloadManifest.targets.in b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Current.Manifest/WorkloadManifest.targets.in index cd8057e306a..e5fb9c71177 100644 --- a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Current.Manifest/WorkloadManifest.targets.in +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Current.Manifest/WorkloadManifest.targets.in @@ -2,12 +2,13 @@ <_RuntimePackInWorkloadVersionCurrent>${PackageVersion} + <_RuntimePackInWorkloadVersion10>${PackageVersionNet10} <_RuntimePackInWorkloadVersion9>${PackageVersionNet9} <_RuntimePackInWorkloadVersion8>${PackageVersionNet8} <_RuntimePackInWorkloadVersion7>${PackageVersionNet7} <_RuntimePackInWorkloadVersion6>${PackageVersionNet6} - true + true + true true true true @@ -36,7 +38,8 @@ true - $(WasmNativeWorkload10) + $(WasmNativeWorkload11) + $(WasmNativeWorkload10) $(WasmNativeWorkload9) $(WasmNativeWorkload8) $(WasmNativeWorkload7) diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest.pkgproj b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest.pkgproj new file mode 100644 index 00000000000..6235409b44e --- /dev/null +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest.pkgproj @@ -0,0 +1,63 @@ + + + + + Internal toolchain package not meant for direct consumption. Please do not reference directly. + + + + + + + + Microsoft.NET.Workload.Mono.ToolChain.net10.Manifest-$(SdkBandVersionForWorkload_FromRuntimeVersions) + + + + $(IntermediateOutputPath)WorkloadManifest.json + $(IntermediateOutputPath)WorkloadManifest.targets + + + + + + + + + + data/localize + + + + + + + + PackageVersion=$(PackageVersion); + + + + <_WorkloadManifestValues Include="WorkloadVersion" Value="$(PackageVersion)" /> + <_WorkloadManifestValues Include="PackageVersionNet10" Value="$(PackageVersionNet10)" /> + <_WorkloadManifestValues Include="NetCoreAppCurrent" Value="$(NetCoreAppCurrent)" /> + <_WorkloadManifestValues Include="EmscriptenVersion" Value="$(MicrosoftNETRuntimeEmscriptenVersion)" /> + + + + + + + + + + + + diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/WorkloadManifest.json.in b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/WorkloadManifest.json.in new file mode 100644 index 00000000000..09f31428e75 --- /dev/null +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/WorkloadManifest.json.in @@ -0,0 +1,473 @@ +{ + "version": "${WorkloadVersion}", + "workloads": { + "wasm-tools-net10": { + "description": ".NET WebAssembly build tools for net10.0", + "packs": [ + "Microsoft.NET.Runtime.WebAssembly.Sdk.net10", + "Microsoft.NET.Sdk.WebAssembly.Pack.net10", + "Microsoft.NETCore.App.Runtime.Mono.net10.browser-wasm", + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.browser-wasm" + ], + "extends": [ "microsoft-net-runtime-mono-tooling-net10", "microsoft-net-sdk-emscripten" ], + "platforms": [ "win-x64", "win-arm64", "linux-x64", "linux-arm64", "linux-musl-x64", "linux-musl-arm64", "osx-x64", "osx-arm64" ] + }, + "wasm-experimental-net10": { + "description": ".NET WebAssembly experimental tooling for net10.0", + "packs": [ + "Microsoft.NET.Runtime.WebAssembly.Templates.net10", + "Microsoft.NETCore.App.Runtime.Mono.multithread.net10.browser-wasm" + ], + "extends": [ "wasm-tools-net10" ], + "platforms": [ "win-x64", "win-arm64", "linux-x64", "linux-arm64", "linux-musl-x64", "linux-musl-arm64", "osx-x64", "osx-arm64" ] + }, + "wasi-experimental-net10": { + "description": ".NET WASI experimental tooing for for net10.0", + "packs": [ + "Microsoft.NET.Runtime.WebAssembly.Wasi.Sdk.net10", + "Microsoft.NETCore.App.Runtime.Mono.net10.wasi-wasm", + "Microsoft.NET.Runtime.WebAssembly.Templates.net10", + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.wasi-wasm" + ], + "extends": [ "microsoft-net-runtime-mono-tooling-net10" ], + "platforms": [ "win-x64", "win-arm64", "linux-x64", "linux-arm64", "linux-musl-x64", "linux-musl-arm64", "osx-x64", "osx-arm64" ] + }, + "mobile-librarybuilder-net10": { + "description": "Mobile SDK for building a self-contained .NET native library in net10.0", + "packs": [ + "Microsoft.NET.Runtime.LibraryBuilder.Sdk.net10" + ], + "extends": [ "microsoft-net-runtime-android-aot-net10", "microsoft-net-runtime-ios-net10", "microsoft-net-runtime-maccatalyst-net10", "microsoft-net-runtime-tvos-net10" ], + "platforms": [ "win-x64", "win-arm64", "osx-x64", "osx-arm64" ] + }, + "microsoft-net-runtime-android-net10": { + "abstract": true, + "description": "Android Mono Runtime", + "packs": [ + "Microsoft.NETCore.App.Runtime.Mono.net10.android-arm", + "Microsoft.NETCore.App.Runtime.Mono.net10.android-arm64", + "Microsoft.NETCore.App.Runtime.Mono.net10.android-x64", + "Microsoft.NETCore.App.Runtime.Mono.net10.android-x86" + ], + "extends": [ "microsoft-net-runtime-mono-tooling-net10" ], + "platforms": [ "win-x64", "win-arm64", "linux-x64", "linux-arm64", "osx-x64", "osx-arm64" ] + }, + "microsoft-net-runtime-android-aot-net10": { + "abstract": true, + "description": "Android Mono AOT Workload", + "packs": [ + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.android-x86", + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.android-x64", + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.android-arm", + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.android-arm64" + ], + "extends": [ "microsoft-net-runtime-android-net10" ], + "platforms": [ "win-x64", "win-arm64", "linux-x64", "linux-arm64", "osx-x64", "osx-arm64" ] + }, + "microsoft-net-runtime-ios-net10": { + "abstract": true, + "description": "iOS Mono Runtime and AOT Workload", + "packs": [ + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.ios-arm64", + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.iossimulator-arm64", + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.iossimulator-x64" + ], + "extends": [ "runtimes-ios-net10" ], + "platforms": [ "win-x64", "win-arm64", "osx-arm64", "osx-x64" ] + }, + "runtimes-ios-net10": { + "abstract": true, + "description": "iOS Mono Runtime Packs", + "packs": [ + "Microsoft.NETCore.App.Runtime.Mono.net10.ios-arm64", + "Microsoft.NETCore.App.Runtime.Mono.net10.iossimulator-arm64", + "Microsoft.NETCore.App.Runtime.Mono.net10.iossimulator-x64" + ], + "extends": [ "microsoft-net-runtime-mono-tooling-net10" ], + "platforms": [ "win-x64", "win-arm64", "osx-arm64", "osx-x64" ] + }, + "microsoft-net-runtime-maccatalyst-net10": { + "abstract": true, + "description": "MacCatalyst Mono Runtime and AOT Workload", + "packs": [ + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.maccatalyst-arm64", + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.maccatalyst-x64" + ], + "extends": [ "runtimes-maccatalyst-net10" ], + "platforms": [ "win-x64", "win-arm64", "osx-arm64", "osx-x64" ] + }, + "runtimes-maccatalyst-net10": { + "abstract": true, + "description": "MacCatalyst Mono Runtime Packs", + "packs": [ + "Microsoft.NETCore.App.Runtime.Mono.net10.maccatalyst-arm64", + "Microsoft.NETCore.App.Runtime.Mono.net10.maccatalyst-x64" + ], + "extends": [ "microsoft-net-runtime-mono-tooling-net10" ], + "platforms": [ "win-x64", "win-arm64", "osx-arm64", "osx-x64" ] + }, + "microsoft-net-runtime-macos-net10": { + "abstract": true, + "description": "MacOS CoreCLR and Mono Runtime Workload", + "packs": [ + "Microsoft.NETCore.App.Runtime.Mono.net10.osx-arm64", + "Microsoft.NETCore.App.Runtime.Mono.net10.osx-x64", + "Microsoft.NETCore.App.Runtime.net10.osx-arm64", + "Microsoft.NETCore.App.Runtime.net10.osx-x64" + ], + "extends": [ "microsoft-net-runtime-mono-tooling-net10" ], + "platforms": [ "osx-arm64", "osx-x64" ] + }, + "microsoft-net-runtime-tvos-net10": { + "abstract": true, + "description": "tvOS Mono Runtime and AOT Workload", + "packs": [ + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.tvos-arm64", + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.tvossimulator-arm64", + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.tvossimulator-x64" + ], + "extends": [ "runtimes-tvos-net10" ], + "platforms": [ "win-x64", "win-arm64", "osx-arm64", "osx-x64" ] + }, + "runtimes-tvos-net10": { + "abstract": true, + "description": "tvOS Mono Runtime Packs", + "packs": [ + "Microsoft.NETCore.App.Runtime.Mono.net10.tvos-arm64", + "Microsoft.NETCore.App.Runtime.Mono.net10.tvossimulator-arm64", + "Microsoft.NETCore.App.Runtime.Mono.net10.tvossimulator-x64" + ], + "extends": [ "microsoft-net-runtime-mono-tooling-net10" ], + "platforms": [ "win-x64", "win-arm64", "osx-arm64", "osx-x64" ] + }, + "microsoft-net-runtime-mono-tooling-net10": { + "abstract": true, + "description": "Shared native build tooling for Mono runtime", + "packs": [ + "Microsoft.NET.Runtime.MonoAOTCompiler.Task.net10", + "Microsoft.NET.Runtime.MonoTargets.Sdk.net10" + ] + } + }, + "packs": { + "Microsoft.NET.Runtime.MonoAOTCompiler.Task.net10": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NET.Runtime.MonoAOTCompiler.Task" + } + }, + "Microsoft.NET.Runtime.MonoTargets.Sdk.net10": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NET.Runtime.MonoTargets.Sdk" + } + }, + "Microsoft.NET.Runtime.LibraryBuilder.Sdk.net10": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NET.Runtime.LibraryBuilder.Sdk" + } + }, + "Microsoft.NET.Runtime.WebAssembly.Sdk.net10": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NET.Runtime.WebAssembly.Sdk" + } + }, + "Microsoft.NET.Sdk.WebAssembly.Pack.net10": { + "kind": "library", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NET.Sdk.WebAssembly.Pack" + } + }, + "Microsoft.NET.Runtime.WebAssembly.Wasi.Sdk.net10": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NET.Runtime.WebAssembly.Wasi.Sdk" + } + }, + "Microsoft.NET.Runtime.WebAssembly.Templates.net10": { + "kind": "template", + "version": "${PackageVersionNet10}" + }, + "Microsoft.NETCore.App.Runtime.Mono.net10.android-arm": { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.Mono.android-arm" + } + }, + "Microsoft.NETCore.App.Runtime.Mono.net10.android-arm64": { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.Mono.android-arm64" + } + }, + "Microsoft.NETCore.App.Runtime.Mono.net10.android-x64": { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.Mono.android-x64" + } + }, + "Microsoft.NETCore.App.Runtime.Mono.net10.android-x86": { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.Mono.android-x86" + } + }, + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.android-x86": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-x86", + "win-arm64": "Microsoft.NETCore.App.Runtime.AOT.win-arm64.Cross.android-x86", + "linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.android-x86", + "linux-arm64": "Microsoft.NETCore.App.Runtime.AOT.linux-arm64.Cross.android-x86", + "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-x86", + "osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-arm64.Cross.android-x86" + } + }, + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.android-x64": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-x64", + "win-arm64": "Microsoft.NETCore.App.Runtime.AOT.win-arm64.Cross.android-x64", + "linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.android-x64", + "linux-arm64": "Microsoft.NETCore.App.Runtime.AOT.linux-arm64.Cross.android-x64", + "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-x64", + "osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-arm64.Cross.android-x64" + } + }, + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.android-arm": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-arm", + "win-arm64": "Microsoft.NETCore.App.Runtime.AOT.win-arm64.Cross.android-arm", + "linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.android-arm", + "linux-arm64": "Microsoft.NETCore.App.Runtime.AOT.linux-arm64.Cross.android-arm", + "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-arm", + "osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-arm64.Cross.android-arm" + } + }, + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.android-arm64": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-arm64", + "win-arm64": "Microsoft.NETCore.App.Runtime.AOT.win-arm64.Cross.android-arm64", + "linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.android-arm64", + "linux-arm64": "Microsoft.NETCore.App.Runtime.AOT.linux-arm64.Cross.android-arm64", + "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-arm64", + "osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-arm64.Cross.android-arm64" + } + }, + "Microsoft.NETCore.App.Runtime.Mono.net10.maccatalyst-arm64": { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.Mono.maccatalyst-arm64" + } + }, + "Microsoft.NETCore.App.Runtime.Mono.net10.maccatalyst-x64": { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.Mono.maccatalyst-x64" + } + }, + "Microsoft.NETCore.App.Runtime.Mono.net10.osx-arm64": { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.Mono.osx-arm64" + } + }, + "Microsoft.NETCore.App.Runtime.Mono.net10.osx-x64": { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.Mono.osx-x64" + } + }, + "Microsoft.NETCore.App.Runtime.net10.osx-arm64": { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.osx-arm64" + } + }, + "Microsoft.NETCore.App.Runtime.net10.osx-x64": { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.osx-x64" + } + }, + "Microsoft.NETCore.App.Runtime.Mono.net10.ios-arm64" : { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.Mono.ios-arm64" + } + }, + "Microsoft.NETCore.App.Runtime.Mono.net10.iossimulator-arm64" : { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.Mono.iossimulator-arm64" + } + }, + "Microsoft.NETCore.App.Runtime.Mono.net10.iossimulator-x64" : { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.Mono.iossimulator-x64" + } + }, + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.tvos-arm64": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-arm64.Cross.tvos-arm64", + "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.tvos-arm64" + } + }, + "Microsoft.NETCore.App.Runtime.Mono.net10.tvos-arm64" : { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.Mono.tvos-arm64" + } + }, + "Microsoft.NETCore.App.Runtime.Mono.net10.tvossimulator-arm64" : { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.Mono.tvossimulator-arm64" + } + }, + "Microsoft.NETCore.App.Runtime.Mono.net10.tvossimulator-x64" : { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.Mono.tvossimulator-x64" + } + }, + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.maccatalyst-arm64": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-arm64.Cross.maccatalyst-arm64", + "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.maccatalyst-arm64" + } + }, + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.maccatalyst-x64": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-arm64.Cross.maccatalyst-x64", + "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.maccatalyst-x64" + } + }, + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.tvossimulator-arm64": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-arm64.Cross.tvossimulator-arm64", + "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.tvossimulator-arm64" + } + }, + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.tvossimulator-x64": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-arm64.Cross.tvossimulator-x64", + "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.tvossimulator-x64" + } + }, + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.ios-arm64": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.ios-arm64", + "osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-arm64.Cross.ios-arm64" + } + }, + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.iossimulator-arm64": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-arm64.Cross.iossimulator-arm64", + "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.iossimulator-arm64" + } + }, + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.iossimulator-x64": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-arm64.Cross.iossimulator-x64", + "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.iossimulator-x64" + } + }, + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.browser-wasm": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm", + "win-arm64": "Microsoft.NETCore.App.Runtime.AOT.win-arm64.Cross.browser-wasm", + "linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.browser-wasm", + "linux-arm64": "Microsoft.NETCore.App.Runtime.AOT.linux-arm64.Cross.browser-wasm", + "linux-musl-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-musl-x64.Cross.browser-wasm", + "linux-musl-arm64": "Microsoft.NETCore.App.Runtime.AOT.linux-musl-arm64.Cross.browser-wasm", + "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.browser-wasm", + "osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-arm64.Cross.browser-wasm" + } + }, + "Microsoft.NETCore.App.Runtime.AOT.Cross.net10.wasi-wasm": { + "kind": "Sdk", + "version": "${PackageVersionNet10}", + "alias-to": { + "win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.wasi-wasm", + "win-arm64": "Microsoft.NETCore.App.Runtime.AOT.win-arm64.Cross.wasi-wasm", + "linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.wasi-wasm", + "linux-arm64": "Microsoft.NETCore.App.Runtime.AOT.linux-arm64.Cross.wasi-wasm", + "linux-musl-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-musl-x64.Cross.wasi-wasm", + "linux-musl-arm64": "Microsoft.NETCore.App.Runtime.AOT.linux-musl-arm64.Cross.wasi-wasm", + "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.wasi-wasm", + "osx-arm64": "Microsoft.NETCore.App.Runtime.AOT.osx-arm64.Cross.wasi-wasm" + } + }, + "Microsoft.NETCore.App.Runtime.Mono.net10.browser-wasm" : { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.Mono.browser-wasm" + } + }, + "Microsoft.NETCore.App.Runtime.Mono.multithread.net10.browser-wasm" : { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.Mono.multithread.browser-wasm" + } + }, + "Microsoft.NETCore.App.Runtime.Mono.net10.wasi-wasm" : { + "kind": "framework", + "version": "${PackageVersionNet10}", + "alias-to": { + "any": "Microsoft.NETCore.App.Runtime.Mono.wasi-wasm" + } + } + } +} diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/WorkloadManifest.targets.in b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/WorkloadManifest.targets.in new file mode 100644 index 00000000000..17137925bef --- /dev/null +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/WorkloadManifest.targets.in @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersion10) + <_KnownWebAssemblySdkPackVersion>$(_RuntimePackInWorkloadVersion10) + + + + + + %(RuntimePackRuntimeIdentifiers);wasi-wasm + + $(_MonoWorkloadRuntimePackPackageVersion) + + Microsoft.NETCore.App.Runtime.Mono.multithread.**RID** + + + $(_MonoWorkloadRuntimePackPackageVersion) + + + $(_KnownWebAssemblySdkPackVersion) + + + + + diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.cs.json b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.cs.json new file mode 100644 index 00000000000..b5217907171 --- /dev/null +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.cs.json @@ -0,0 +1,4 @@ +{ + "workloads/wasm-tools-net10/description": "Nástroje pro sestavení .NET WebAssembly", + "workloads/wasm-experimental-net10/description": "Experimentální nástroje .NET WebAssembly" +} diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.de.json b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.de.json new file mode 100644 index 00000000000..352a4bbe4da --- /dev/null +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.de.json @@ -0,0 +1,4 @@ +{ + "workloads/wasm-tools-net10/description": ".NET 10.0 WebAssembly-Buildtools", + "workloads/wasm-experimental-net10/description": "Experimentelle .NET 10.0 WebAssembly-Tools" +} diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.en.json b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.en.json new file mode 100644 index 00000000000..17cc61feb89 --- /dev/null +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.en.json @@ -0,0 +1,4 @@ +{ + "workloads/wasm-tools-net10/description": ".NET WebAssembly build tools for .NET 10.0", + "workloads/wasm-experimental-net10/description": ".NET WebAssembly experimental tooling for .NET 10.0" +} diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.es.json b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.es.json new file mode 100644 index 00000000000..a8959961230 --- /dev/null +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.es.json @@ -0,0 +1,4 @@ +{ + "workloads/wasm-tools-net10/description": "Herramientas de compilación de WebAssembly de .NET 10.0", + "workloads/wasm-experimental-net10/description": "Herramientas experimentales .NET 10.0 WebAssembly" +} diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.fr.json b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.fr.json new file mode 100644 index 00000000000..ae8932b4038 --- /dev/null +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.fr.json @@ -0,0 +1,4 @@ +{ + "workloads/wasm-tools-net10/description": "Outils de build .NET 10.0 WebAssembly", + "workloads/wasm-experimental-net10/description": "Outils expérimentaux .NET 10.0 WebAssembly" +} diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.it.json b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.it.json new file mode 100644 index 00000000000..890ddc6220b --- /dev/null +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.it.json @@ -0,0 +1,4 @@ +{ + "workloads/wasm-tools-net10/description": "Strumenti di compilazione WebAssembly .NET 10.0", + "workloads/wasm-experimental-net10/description": "Strumenti sperimentali di .NET 10.0 WebAssembly" +} diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.ja.json b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.ja.json new file mode 100644 index 00000000000..c29228a225a --- /dev/null +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.ja.json @@ -0,0 +1,4 @@ +{ + "workloads/wasm-tools-net10/description": ".NET 10.0 WebAssembly ビルドツール", + "workloads/wasm-experimental-net10/description": ".NET 10.0 WebAssembly 実験的ツール" +} diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.ko.json b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.ko.json new file mode 100644 index 00000000000..e745d6318e1 --- /dev/null +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.ko.json @@ -0,0 +1,4 @@ +{ + "workloads/wasm-tools-net10/description": ".NET 10.0 WebAssembly 빌드 도구", + "workloads/wasm-experimental-net10/description": ".NET 10.0 WebAssembly 실험 도구" +} diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.pl.json b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.pl.json new file mode 100644 index 00000000000..5cedb151759 --- /dev/null +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.pl.json @@ -0,0 +1,4 @@ +{ + "workloads/wasm-tools-net10/description": "Narzędzia kompilacji zestawu WebAssembly platformy .NET 10.0", + "workloads/wasm-experimental-net10/description": "Eksperymentalne narzędzia .NET 10.0 WebAssembly" +} diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.pt-BR.json b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.pt-BR.json new file mode 100644 index 00000000000..d0e58725ef3 --- /dev/null +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.pt-BR.json @@ -0,0 +1,4 @@ +{ + "workloads/wasm-tools-net10/description": "Ferramentas de build para .NET 10.0 WebAssembly", + "workloads/wasm-experimental-net10/description": "Ferramentas experimentais para .NET 10.0 WebAssembly" +} diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.ru.json b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.ru.json new file mode 100644 index 00000000000..f39ccf00384 --- /dev/null +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.ru.json @@ -0,0 +1,4 @@ +{ + "workloads/wasm-tools-net10/description": "Средства сборки WebAssembly .NET 10.0", + "workloads/wasm-experimental-net10/description": "Экспериментальный инструментарий .NET 10.0 WebAssembly" +} diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.tr.json b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.tr.json new file mode 100644 index 00000000000..0b710819cbf --- /dev/null +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.tr.json @@ -0,0 +1,4 @@ +{ + "workloads/wasm-tools-net10/description": ".NET 10.0 WebAssembly derleme araçları", + "workloads/wasm-experimental-net10/description": ".NET 10.0 WebAssembly deneysel araçlar" +} diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.zh-Hans.json b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.zh-Hans.json new file mode 100644 index 00000000000..412df4a7306 --- /dev/null +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.zh-Hans.json @@ -0,0 +1,4 @@ +{ + "workloads/wasm-tools-net10/description": ".NET 10.0 WebAssembly 生成工具", + "workloads/wasm-experimental-net10/description": ".NET 10.0 WebAssembly 实验工具" +} diff --git a/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.zh-Hant.json b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.zh-Hant.json new file mode 100644 index 00000000000..9e1044eae33 --- /dev/null +++ b/src/runtime/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net10.Manifest/localize/WorkloadManifest.zh-Hant.json @@ -0,0 +1,4 @@ +{ + "workloads/wasm-tools-net10/description": ".NET 10.0 WebAssembly 組建工具", + "workloads/wasm-experimental-net10/description": ".NET 10.0 WebAssembly 實驗工具" +} diff --git a/src/runtime/src/mono/nuget/manifest-packages.proj b/src/runtime/src/mono/nuget/manifest-packages.proj index c617ca8af03..d2c487a7587 100644 --- a/src/runtime/src/mono/nuget/manifest-packages.proj +++ b/src/runtime/src/mono/nuget/manifest-packages.proj @@ -5,5 +5,6 @@ + diff --git a/src/runtime/src/mono/sample/iOS/Program.csproj b/src/runtime/src/mono/sample/iOS/Program.csproj index c1c66136210..53c3cd3583f 100644 --- a/src/runtime/src/mono/sample/iOS/Program.csproj +++ b/src/runtime/src/mono/sample/iOS/Program.csproj @@ -31,6 +31,7 @@ + diff --git a/src/runtime/src/mono/wasi/Wasi.Build.Tests/BuildTestBase.cs b/src/runtime/src/mono/wasi/Wasi.Build.Tests/BuildTestBase.cs index 2dbc48098d5..366068ad8ac 100644 --- a/src/runtime/src/mono/wasi/Wasi.Build.Tests/BuildTestBase.cs +++ b/src/runtime/src/mono/wasi/Wasi.Build.Tests/BuildTestBase.cs @@ -26,7 +26,8 @@ namespace Wasm.Build.Tests { public abstract class BuildTestBase : IClassFixture, IDisposable { - public static readonly string DefaultTargetFramework = $"net{Environment.Version.Major}.0"; + private const int TargetMajorVersion = 11; + public static readonly string DefaultTargetFramework = $"net{TargetMajorVersion}.0"; protected static readonly bool s_skipProjectCleanup; protected static readonly string s_xharnessRunnerCommand; protected string? _projectDir; @@ -760,7 +761,7 @@ public record BuildProjectOptions string? TargetFramework = null, IDictionary? ExtraBuildEnvironmentVariables = null ); - + public record AssertBundleOptions( BuildProjectOptions BuildOptions, bool ExpectSymbolsFile = true, diff --git a/src/runtime/src/mono/wasi/Wasi.Build.Tests/Wasi.Build.Tests.csproj b/src/runtime/src/mono/wasi/Wasi.Build.Tests/Wasi.Build.Tests.csproj index eb0a15f451f..03acddf4318 100644 --- a/src/runtime/src/mono/wasi/Wasi.Build.Tests/Wasi.Build.Tests.csproj +++ b/src/runtime/src/mono/wasi/Wasi.Build.Tests/Wasi.Build.Tests.csproj @@ -102,7 +102,11 @@ <_RuntimePackCurrentVersion Condition="'$(DotNetFinalVersionKind)' == ''">$(PackageVersion) - <_RuntimePackVersions Include="$(_RuntimePackCurrentVersion)" EnvVarName="RUNTIME_PACK_VER10" /> + + <_RuntimePackVersions Include="$(_RuntimePackCurrentVersion)" EnvVarName="RUNTIME_PACK_VER11" /> + + <_RuntimePackVersions Include="$(PackageVersionNet10)" EnvVarName="RUNTIME_PACK_VER10" Condition="'$(PackageVersionNet10)' != ''" /> + <_RuntimePackVersions Include="$(_RuntimePackCurrentVersion)" EnvVarName="RUNTIME_PACK_VER10" Condition="'$(PackageVersionNet10)' == ''" /> <_RuntimePackVersions Include="$(PackageVersionNet9)" EnvVarName="RUNTIME_PACK_VER9" Condition="'$(PackageVersionNet9)' != ''" /> <_RuntimePackVersions Include="$(_RuntimePackCurrentVersion)" EnvVarName="RUNTIME_PACK_VER9" Condition="'$(PackageVersionNet9)' == ''" /> diff --git a/src/runtime/src/mono/wasm/Wasm.Build.Tests/Blazor/AppsettingsTests.cs b/src/runtime/src/mono/wasm/Wasm.Build.Tests/Blazor/AppsettingsTests.cs index fa47fc4b458..b1f5bd28f6d 100644 --- a/src/runtime/src/mono/wasm/Wasm.Build.Tests/Blazor/AppsettingsTests.cs +++ b/src/runtime/src/mono/wasm/Wasm.Build.Tests/Blazor/AppsettingsTests.cs @@ -14,12 +14,13 @@ namespace Wasm.Build.Tests.Blazor; public class AppsettingsTests : BlazorWasmTestBase { public AppsettingsTests(ITestOutputHelper output, SharedBuildPerTestClassFixture buildContext) - : base(output, buildContext) + : base(output, buildContext, DefaultTargetFrameworkForBlazorTemplate) { _enablePerTestCleanup = true; } [Fact] + [ActiveIssue("https://github.com/dotnet/runtime/issues/122338")] // add it back to eng\testing\scenarios\BuildWasmAppsJobsList.txt public async Task FileInVfs() { Configuration config = Configuration.Debug; diff --git a/src/runtime/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs b/src/runtime/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs index f37ff2ade6f..1f434026008 100644 --- a/src/runtime/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs +++ b/src/runtime/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs @@ -23,8 +23,8 @@ public abstract class BlazorWasmTestBase : WasmTemplateTestsBase protected readonly PublishOptions _defaultBlazorPublishOptions; private readonly BuildOptions _defaultBlazorBuildOptions; - protected BlazorWasmTestBase(ITestOutputHelper output, SharedBuildPerTestClassFixture buildContext) - : base(output, buildContext, new WasmSdkBasedProjectProvider(output, DefaultTargetFrameworkForBlazor)) + protected BlazorWasmTestBase(ITestOutputHelper output, SharedBuildPerTestClassFixture buildContext, string? targetFramework = null) + : base(output, buildContext, new WasmSdkBasedProjectProvider(output, targetFramework ?? DefaultTargetFrameworkForBlazor)) { _provider = GetProvider(); _defaultBlazorPublishOptions = _defaultPublishOptions with { ExtraMSBuildArgs = _blazorExtraMSBuildArgs }; @@ -67,9 +67,8 @@ protected override void OnAfterRender(bool firstRender) protected void UpdateHomePage() => UpdateFile(Path.Combine("Pages", "Home.razor"), blazorHomePageReplacements); - public void InitBlazorWasmProjectDir(string id, string? targetFramework = null) + public void InitBlazorWasmProjectDir(string id) { - targetFramework ??= DefaultTargetFrameworkForBlazor; InitPaths(id); if (Directory.Exists(_projectDir)) Directory.Delete(_projectDir, recursive: true); @@ -77,7 +76,7 @@ public void InitBlazorWasmProjectDir(string id, string? targetFramework = null) File.WriteAllText(Path.Combine(_projectDir, "nuget.config"), GetNuGetConfigWithLocalPackagesPath( - GetNuGetConfigPathFor(targetFramework), + GetNuGetConfigPath(), s_buildEnv.BuiltNuGetsPath)); File.Copy(Path.Combine(BuildEnvironment.TestDataPath, "Blazor.Directory.Build.props"), Path.Combine(_projectDir, "Directory.Build.props")); diff --git a/src/runtime/src/mono/wasm/Wasm.Build.Tests/BuildTestBase.cs b/src/runtime/src/mono/wasm/Wasm.Build.Tests/BuildTestBase.cs index 4155c5fbfe1..64b7c72447a 100644 --- a/src/runtime/src/mono/wasm/Wasm.Build.Tests/BuildTestBase.cs +++ b/src/runtime/src/mono/wasm/Wasm.Build.Tests/BuildTestBase.cs @@ -26,11 +26,13 @@ namespace Wasm.Build.Tests { public abstract class BuildTestBase : IClassFixture, IDisposable { - public static readonly string DefaultTargetFramework = $"net{Environment.Version.Major}.0"; - public static readonly string PreviousTargetFramework = $"net{Environment.Version.Major - 1}.0"; - public static readonly string Previous2TargetFramework = $"net{Environment.Version.Major - 2}.0"; - public static readonly string DefaultTargetFrameworkForBlazor = $"net{Environment.Version.Major}.0"; + private const int TargetMajorVersion = 11; /* net11 */ + public static readonly string DefaultTargetFramework = $"net{TargetMajorVersion}.0"; + public static readonly string PreviousTargetFramework = $"net{TargetMajorVersion - 1}.0"; + public static readonly string Previous2TargetFramework = $"net{TargetMajorVersion - 2}.0"; public static readonly string TargetFrameworkForTasks = $"net{Environment.Version.Major}.0"; + public static readonly string DefaultTargetFrameworkForBlazor = DefaultTargetFramework; + public static readonly string DefaultTargetFrameworkForBlazorTemplate = $"net{Environment.Version.Major}.0"; private const string DefaultEnvironmentLocale = "en-US"; protected static readonly string s_unicodeChars = "\u9FC0\u8712\u679B\u906B\u486B\u7149"; protected static readonly bool s_skipProjectCleanup; @@ -63,7 +65,7 @@ public abstract class BuildTestBase : IClassFixture !s_buildEnv.IsWorkload; public static bool IsWorkloadWithMultiThreadingForDefaultFramework => s_buildEnv.IsWorkloadWithMultiThreadingForDefaultFramework; public static bool UseWebcil => s_buildEnv.UseWebcil; - public static string GetNuGetConfigPathFor(string targetFramework) + public static string GetNuGetConfigPath() => Path.Combine(BuildEnvironment.TestDataPath, "nuget.config"); public TProvider GetProvider() where TProvider : ProjectProviderBase @@ -232,9 +234,8 @@ private string GetBinlogMessageContext(TextNode node) return (_logPath, _nugetPackagesDir); } - protected void InitProjectDir(string dir, bool addNuGetSourceForLocalPackages = true, string? targetFramework = null) + protected void InitProjectDir(string dir, bool addNuGetSourceForLocalPackages = true) { - targetFramework ??= DefaultTargetFramework; if (Directory.Exists(dir)) Directory.Delete(dir, recursive: true); Directory.CreateDirectory(dir); @@ -248,12 +249,12 @@ protected void InitProjectDir(string dir, bool addNuGetSourceForLocalPackages = { File.WriteAllText(targetNuGetConfigPath, GetNuGetConfigWithLocalPackagesPath( - GetNuGetConfigPathFor(targetFramework), + GetNuGetConfigPath(), s_buildEnv.BuiltNuGetsPath)); } else { - File.Copy(GetNuGetConfigPathFor(targetFramework), targetNuGetConfigPath); + File.Copy(GetNuGetConfigPath(), targetNuGetConfigPath); } } diff --git a/src/runtime/src/mono/wasm/Wasm.Build.Tests/NonWasmTemplateBuildTests.cs b/src/runtime/src/mono/wasm/Wasm.Build.Tests/NonWasmTemplateBuildTests.cs index c6e0134797e..7ec8febbf36 100644 --- a/src/runtime/src/mono/wasm/Wasm.Build.Tests/NonWasmTemplateBuildTests.cs +++ b/src/runtime/src/mono/wasm/Wasm.Build.Tests/NonWasmTemplateBuildTests.cs @@ -25,9 +25,10 @@ public NonWasmTemplateBuildTests(ITestOutputHelper output, SharedBuildPerTestCla // TFM=DefaultTargetFramework // // This is useful for the case when we are on latest TFM, but sdk, and packages - // are really the previous version . - private static readonly string s_latestTargetFramework = $"net{Environment.Version.Major}.0"; - private static readonly string s_previousTargetFramework = $"net{Environment.Version.Major - 1}.0"; + // are really the previous version. + private const int TargetMajorVersion = 11; /* net11 */ + private static readonly string s_latestTargetFramework = $"net{TargetMajorVersion}.0"; + private static readonly string s_previousTargetFramework = $"net{TargetMajorVersion - 1}.0"; private static string s_directoryBuildTargetsForPreviousTFM = $$""" diff --git a/src/runtime/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs b/src/runtime/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs index 1f26c39fe47..042c107a1a9 100644 --- a/src/runtime/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs +++ b/src/runtime/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs @@ -73,8 +73,15 @@ public ProjectInfo CreateWasmTemplateProject( (string projectName, string logPath, string nugetDir) = InitProjectLocation(idPrefix, config, aot, appendUnicodeToPath ?? s_buildEnv.IsRunningOnCI); - if (addFrameworkArg) - extraArgs += $" -f {DefaultTargetFramework}"; + if (addFrameworkArg) { + var defaultTarget = template switch + { + Template.BlazorWasm => DefaultTargetFrameworkForBlazorTemplate, + _ => DefaultTargetFramework, + }; + + extraArgs += $" -f {defaultTarget}"; + } using DotNetCommand cmd = new DotNetCommand(s_buildEnv, _testOutput, useDefaultArgs: false); CommandResult result = cmd.WithWorkingDirectory(_projectDir) diff --git a/src/runtime/src/mono/wasm/Wasm.Build.Tests/Wasm.Build.Tests.csproj b/src/runtime/src/mono/wasm/Wasm.Build.Tests/Wasm.Build.Tests.csproj index 34652d3793d..812ad366183 100644 --- a/src/runtime/src/mono/wasm/Wasm.Build.Tests/Wasm.Build.Tests.csproj +++ b/src/runtime/src/mono/wasm/Wasm.Build.Tests/Wasm.Build.Tests.csproj @@ -143,8 +143,11 @@ <_RuntimePackCurrentVersion Condition="'$(DotNetFinalVersionKind)' == ''">$(PackageVersion) - <_RuntimePackVersions Include="$(_RuntimePackCurrentVersion)" EnvVarName="RUNTIME_PACK_VER10" /> + + <_RuntimePackVersions Include="$(_RuntimePackCurrentVersion)" EnvVarName="RUNTIME_PACK_VER11" /> + <_RuntimePackVersions Include="$(PackageVersionNet10)" EnvVarName="RUNTIME_PACK_VER10" Condition="'$(PackageVersionNet10)' != ''" /> + <_RuntimePackVersions Include="$(_RuntimePackCurrentVersion)" EnvVarName="RUNTIME_PACK_VER10" Condition="'$(PackageVersionNet10)' == ''" /> <_RuntimePackVersions Include="$(PackageVersionNet9)" EnvVarName="RUNTIME_PACK_VER9" Condition="'$(PackageVersionNet9)' != ''" /> <_RuntimePackVersions Include="$(_RuntimePackCurrentVersion)" EnvVarName="RUNTIME_PACK_VER9" Condition="'$(PackageVersionNet9)' == ''" /> <_RuntimePackVersions Include="$(PackageVersionNet8)" EnvVarName="RUNTIME_PACK_VER8" Condition="'$(PackageVersionNet8)' != ''" /> diff --git a/src/runtime/src/mono/wasm/build/WasmApp.Common.targets b/src/runtime/src/mono/wasm/build/WasmApp.Common.targets index 1b3fe84a5e2..5f2d5f1b112 100644 --- a/src/runtime/src/mono/wasm/build/WasmApp.Common.targets +++ b/src/runtime/src/mono/wasm/build/WasmApp.Common.targets @@ -174,6 +174,7 @@ true true + false true false diff --git a/src/runtime/src/mono/wasm/build/WasmApp.LocalBuild.props b/src/runtime/src/mono/wasm/build/WasmApp.LocalBuild.props index 2a313c41979..608742da7e5 100644 --- a/src/runtime/src/mono/wasm/build/WasmApp.LocalBuild.props +++ b/src/runtime/src/mono/wasm/build/WasmApp.LocalBuild.props @@ -22,7 +22,7 @@ - <_NetCoreAppToolCurrent>net10.0 + <_NetCoreAppToolCurrent>net11.0 false true diff --git a/src/runtime/src/mono/wasm/symbolicator/WasmSymbolicator.csproj b/src/runtime/src/mono/wasm/symbolicator/WasmSymbolicator.csproj index 45a2b5fefbc..3a7b67c4350 100644 --- a/src/runtime/src/mono/wasm/symbolicator/WasmSymbolicator.csproj +++ b/src/runtime/src/mono/wasm/symbolicator/WasmSymbolicator.csproj @@ -2,10 +2,10 @@ - $(NetCoreAppPrevious) + $(NetCoreAppMinimum) Exe enable enable diff --git a/src/runtime/src/mono/wasm/templates/Microsoft.NET.Runtime.WebAssembly.Templates.csproj b/src/runtime/src/mono/wasm/templates/Microsoft.NET.Runtime.WebAssembly.Templates.csproj index 3a0957bcfbe..b1bae872a5b 100644 --- a/src/runtime/src/mono/wasm/templates/Microsoft.NET.Runtime.WebAssembly.Templates.csproj +++ b/src/runtime/src/mono/wasm/templates/Microsoft.NET.Runtime.WebAssembly.Templates.csproj @@ -1,16 +1,16 @@ + $(NetCoreAppToolCurrent) + Template - Microsoft.NET.Runtime.WebAssembly.Templates.net10 + Microsoft.NET.Runtime.WebAssembly.Templates.net11 WebAssembly Templates Microsoft Templates to create WebAssembly projects. dotnet-new;templates - $(NetCoreAppToolCurrent) - true false content diff --git a/src/runtime/src/mono/wasm/templates/templates/browser/.template.config/template.json b/src/runtime/src/mono/wasm/templates/templates/browser/.template.config/template.json index aa939b87eb9..bf631660311 100644 --- a/src/runtime/src/mono/wasm/templates/templates/browser/.template.config/template.json +++ b/src/runtime/src/mono/wasm/templates/templates/browser/.template.config/template.json @@ -5,7 +5,7 @@ "generatorVersions": "[1.0.0.0-*)", "groupIdentity": "WebAssembly.Browser", "precedence": 9000, - "identity": "WebAssembly.Browser.10.0", + "identity": "WebAssembly.Browser.11.0", "name": "WebAssembly Browser App", "description": "A project template for creating a .NET app that runs on WebAssembly in a browser", "shortName": "wasmbrowser", @@ -40,12 +40,12 @@ "datatype": "choice", "choices": [ { - "choice": "net10.0", - "description": "Target net10.0", - "displayName": ".NET 10.0" + "choice": "net11.0", + "description": "Target net11.0", + "displayName": ".NET 11.0" } ], - "defaultValue": "net10.0", + "defaultValue": "net11.0", "replaces": "netX.0", "displayName": "framework" } diff --git a/src/runtime/src/mono/wasm/templates/templates/console/.template.config/template.json b/src/runtime/src/mono/wasm/templates/templates/console/.template.config/template.json index c5372c82d13..722734936e6 100644 --- a/src/runtime/src/mono/wasm/templates/templates/console/.template.config/template.json +++ b/src/runtime/src/mono/wasm/templates/templates/console/.template.config/template.json @@ -4,7 +4,7 @@ "classifications": [ "Web", "WebAssembly", "Console" ], "groupIdentity": "WebAssembly.Console", "precedence": 9000, - "identity": "WebAssembly.Console.10.0", + "identity": "WebAssembly.Console.11.0", "name": "WebAssembly Console App", "description": "A project template for creating a .NET app that runs on WebAssembly on Node JS or V8", "shortName": "wasmconsole", @@ -21,12 +21,12 @@ "datatype": "choice", "choices": [ { - "choice": "net10.0", - "description": "Target net10.0", - "displayName": ".NET 10.0" + "choice": "net11.0", + "description": "Target net11.0", + "displayName": ".NET 11.0" } ], - "defaultValue": "net10.0", + "defaultValue": "net11.0", "replaces": "netX.0", "displayName": "framework" } diff --git a/src/runtime/src/mono/wasm/templates/templates/wasi-console/.template.config/template.json b/src/runtime/src/mono/wasm/templates/templates/wasi-console/.template.config/template.json index c24adb95117..43d64bf72dd 100644 --- a/src/runtime/src/mono/wasm/templates/templates/wasi-console/.template.config/template.json +++ b/src/runtime/src/mono/wasm/templates/templates/wasi-console/.template.config/template.json @@ -4,7 +4,7 @@ "classifications": [ "Wasi", "WasiConsole" ], "groupIdentity": "Wasi.Console", "precedence": 9000, - "identity": "Wasi.Console.10.0", + "identity": "Wasi.Console.11.0", "name": "Wasi Console App", "description": "A project template for creating a .NET app that runs on a WASI runtime", "shortName": "wasiconsole", @@ -21,12 +21,12 @@ "datatype": "choice", "choices": [ { - "choice": "net10.0", - "description": "Target net10.0", - "displayName": ".NET 10.0" + "choice": "net11.0", + "description": "Target net11.0", + "displayName": ".NET 11.0" } ], - "defaultValue": "net10.0", + "defaultValue": "net11.0", "replaces": "netX.0", "displayName": "framework" } diff --git a/src/runtime/src/mono/wasm/testassets/BlazorBasicTestApp/App/BlazorBasicTestApp.csproj b/src/runtime/src/mono/wasm/testassets/BlazorBasicTestApp/App/BlazorBasicTestApp.csproj index a76fd751306..f24c344837e 100644 --- a/src/runtime/src/mono/wasm/testassets/BlazorBasicTestApp/App/BlazorBasicTestApp.csproj +++ b/src/runtime/src/mono/wasm/testassets/BlazorBasicTestApp/App/BlazorBasicTestApp.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 enable enable true diff --git a/src/runtime/src/mono/wasm/testassets/BlazorBasicTestApp/RazorClassLibrary/RazorClassLibrary.csproj b/src/runtime/src/mono/wasm/testassets/BlazorBasicTestApp/RazorClassLibrary/RazorClassLibrary.csproj index 7d785ff3dc4..a6bcd3f2e3c 100644 --- a/src/runtime/src/mono/wasm/testassets/BlazorBasicTestApp/RazorClassLibrary/RazorClassLibrary.csproj +++ b/src/runtime/src/mono/wasm/testassets/BlazorBasicTestApp/RazorClassLibrary/RazorClassLibrary.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 enable enable diff --git a/src/runtime/src/mono/wasm/testassets/LibraryMode/LibraryMode.csproj b/src/runtime/src/mono/wasm/testassets/LibraryMode/LibraryMode.csproj index ad30fa250b5..b7be9e23a93 100644 --- a/src/runtime/src/mono/wasm/testassets/LibraryMode/LibraryMode.csproj +++ b/src/runtime/src/mono/wasm/testassets/LibraryMode/LibraryMode.csproj @@ -1,7 +1,7 @@ browser-wasm - net10.0 + net11.0 true Library true diff --git a/src/runtime/src/mono/wasm/testassets/SatelliteAssemblyFromProjectRef/LibraryWithResources/LibraryWithResources.csproj b/src/runtime/src/mono/wasm/testassets/SatelliteAssemblyFromProjectRef/LibraryWithResources/LibraryWithResources.csproj index 555ae434a70..bdef8eb1c34 100644 --- a/src/runtime/src/mono/wasm/testassets/SatelliteAssemblyFromProjectRef/LibraryWithResources/LibraryWithResources.csproj +++ b/src/runtime/src/mono/wasm/testassets/SatelliteAssemblyFromProjectRef/LibraryWithResources/LibraryWithResources.csproj @@ -1,5 +1,5 @@ - net10.0 + net11.0 diff --git a/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/App/WasmBasicTestApp.csproj b/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/App/WasmBasicTestApp.csproj index 25a77d37e5b..fdb57ced730 100644 --- a/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/App/WasmBasicTestApp.csproj +++ b/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/App/WasmBasicTestApp.csproj @@ -1,6 +1,6 @@ - net10.0 + net11.0 browser-wasm Exe true diff --git a/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/Json/Json.csproj b/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/Json/Json.csproj index f3b9c89cb1f..90023a5e01d 100644 --- a/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/Json/Json.csproj +++ b/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/Json/Json.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 Library true diff --git a/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/LazyLibrary/LazyLibrary.csproj b/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/LazyLibrary/LazyLibrary.csproj index 7861a9e9795..0e42ce3d859 100644 --- a/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/LazyLibrary/LazyLibrary.csproj +++ b/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/LazyLibrary/LazyLibrary.csproj @@ -1,6 +1,6 @@ - net10.0 + net11.0 browser-wasm Library true diff --git a/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/Library/Library.csproj b/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/Library/Library.csproj index a3006ce340b..9a4419fdc08 100644 --- a/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/Library/Library.csproj +++ b/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/Library/Library.csproj @@ -1,6 +1,6 @@ - net10.0 + net11.0 Library true diff --git a/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/ResourceLibrary/ResourceLibrary.csproj b/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/ResourceLibrary/ResourceLibrary.csproj index a3006ce340b..9a4419fdc08 100644 --- a/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/ResourceLibrary/ResourceLibrary.csproj +++ b/src/runtime/src/mono/wasm/testassets/WasmBasicTestApp/ResourceLibrary/ResourceLibrary.csproj @@ -1,6 +1,6 @@ - net10.0 + net11.0 Library true diff --git a/src/runtime/src/mono/wasm/testassets/WasmOnAspNetCore/AspNetCoreServer/AspNetCoreServer.csproj b/src/runtime/src/mono/wasm/testassets/WasmOnAspNetCore/AspNetCoreServer/AspNetCoreServer.csproj index 7b1b4ec3d34..51f36436780 100644 --- a/src/runtime/src/mono/wasm/testassets/WasmOnAspNetCore/AspNetCoreServer/AspNetCoreServer.csproj +++ b/src/runtime/src/mono/wasm/testassets/WasmOnAspNetCore/AspNetCoreServer/AspNetCoreServer.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 enable enable true diff --git a/src/runtime/src/mono/wasm/testassets/WasmOnAspNetCore/BlazorClient/BlazorClient.csproj b/src/runtime/src/mono/wasm/testassets/WasmOnAspNetCore/BlazorClient/BlazorClient.csproj index c2919105fca..d96cb98376f 100644 --- a/src/runtime/src/mono/wasm/testassets/WasmOnAspNetCore/BlazorClient/BlazorClient.csproj +++ b/src/runtime/src/mono/wasm/testassets/WasmOnAspNetCore/BlazorClient/BlazorClient.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 enable enable true diff --git a/src/runtime/src/mono/wasm/testassets/WasmOnAspNetCore/Shared/Shared.csproj b/src/runtime/src/mono/wasm/testassets/WasmOnAspNetCore/Shared/Shared.csproj index 8c2bce70138..bdd2f496f16 100644 --- a/src/runtime/src/mono/wasm/testassets/WasmOnAspNetCore/Shared/Shared.csproj +++ b/src/runtime/src/mono/wasm/testassets/WasmOnAspNetCore/Shared/Shared.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 Library true enable diff --git a/src/runtime/src/mono/wasm/testassets/WasmOnAspNetCore/WasmBrowserClient/WasmBrowserClient.csproj b/src/runtime/src/mono/wasm/testassets/WasmOnAspNetCore/WasmBrowserClient/WasmBrowserClient.csproj index 969fbdd238a..5b7de67e215 100644 --- a/src/runtime/src/mono/wasm/testassets/WasmOnAspNetCore/WasmBrowserClient/WasmBrowserClient.csproj +++ b/src/runtime/src/mono/wasm/testassets/WasmOnAspNetCore/WasmBrowserClient/WasmBrowserClient.csproj @@ -1,6 +1,6 @@ - net10.0 + net11.0 browser-wasm Exe true diff --git a/src/runtime/src/native/corehost/CMakeLists.txt b/src/runtime/src/native/corehost/CMakeLists.txt index 663455d6a0b..143537aaa65 100644 --- a/src/runtime/src/native/corehost/CMakeLists.txt +++ b/src/runtime/src/native/corehost/CMakeLists.txt @@ -27,9 +27,6 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}) include_directories(${CLR_ARTIFACTS_OBJ_DIR}) # Generated version files if (NOT ${CLR_SINGLE_FILE_HOST_ONLY}) - if("${CLI_CMAKE_PKG_RID}" STREQUAL "") - message(FATAL_ERROR "A minimum supported package rid is not specified (ex: win7-x86 or ubuntu.14.04-x64, osx.10.12-x64, rhel.7-x64)") - endif() if("${CLI_CMAKE_COMMIT_HASH}" STREQUAL "") message(FATAL_ERROR "Commit hash needs to be specified to build the host") endif() diff --git a/src/runtime/src/native/corehost/apphost/static/hostpolicy_resolver.cpp b/src/runtime/src/native/corehost/apphost/static/hostpolicy_resolver.cpp index 0011da290c1..81972e40c1d 100644 --- a/src/runtime/src/native/corehost/apphost/static/hostpolicy_resolver.cpp +++ b/src/runtime/src/native/corehost/apphost/static/hostpolicy_resolver.cpp @@ -42,7 +42,6 @@ bool hostpolicy_resolver::try_get_dir( const fx_definition_vector_t& fx_definitions, const pal::string_t& app_candidate, const pal::string_t& specified_deps_file, - const std::vector& probe_realpaths, pal::string_t* impl_dir) { // static apphost is not supposed to be used in a framework-dependent app diff --git a/src/runtime/src/native/corehost/browserhost/CMakeLists.txt b/src/runtime/src/native/corehost/browserhost/CMakeLists.txt index 7c4bdfd3b3e..6173bee1ef0 100644 --- a/src/runtime/src/native/corehost/browserhost/CMakeLists.txt +++ b/src/runtime/src/native/corehost/browserhost/CMakeLists.txt @@ -79,7 +79,7 @@ LIST(APPEND NATIVE_LIBS set(JS_SYSTEM_NATIVE_BROWSER "${SHARED_LIB_DESTINATION}/libSystem.Native.Browser.js") set(JS_SYSTEM_BROWSER_UTILS - "${SHARED_LIB_DESTINATION}/libSystem.Browser.Utils.js") + "${SHARED_LIB_DESTINATION}/libSystem.Native.Browser.Utils.js") set(JS_SYSTEM_RUNTIME_INTEROPSERVICES_JAVASCRIPT_NATIVE "${SHARED_LIB_DESTINATION}/libSystem.Runtime.InteropServices.JavaScript.Native.js") set(JS_BROWSER_HOST diff --git a/src/runtime/src/native/corehost/browserhost/ReadMe.md b/src/runtime/src/native/corehost/browserhost/ReadMe.md index c84b888122e..042b5d9ee76 100644 --- a/src/runtime/src/native/corehost/browserhost/ReadMe.md +++ b/src/runtime/src/native/corehost/browserhost/ReadMe.md @@ -17,7 +17,7 @@ Implements native part of the CoreCLR host and exposes it as an internal JavaScr It is **Emscripten application** statically linked from libraries. - `libSystem.Native.Browser.js` linked -> `dotnet.native.js` -- `libSystem.Browser.Utils.js` linked -> `dotnet.native.js` +- `libSystem.Native.Browser.Utils.js` linked -> `dotnet.native.js` - `libSystem.Runtime.InteropServices.JavaScript.Native.js` linked -> `dotnet.native.js` - `libSystem.Native.Browser.a` linked -> `dotnet.native.wasm` - `libSystem.Runtime.InteropServices.JavaScript.Native.a` linked -> `dotnet.native.wasm` diff --git a/src/runtime/src/native/corehost/browserhost/browserhost.cpp b/src/runtime/src/native/corehost/browserhost/browserhost.cpp index 1350d13ad59..14d26f295d1 100644 --- a/src/runtime/src/native/corehost/browserhost/browserhost.cpp +++ b/src/runtime/src/native/corehost/browserhost/browserhost.cpp @@ -68,7 +68,7 @@ static const void* pinvoke_override(const char* library_name, const char* entry_ { return SystemResolveDllImport(entry_point_name); } - if (strcmp(library_name, "libSystem.JavaScript.Native") == 0) + if (strcmp(library_name, "libSystem.Native.Browser") == 0) { return SystemJSResolveDllImport(entry_point_name); } diff --git a/src/runtime/src/native/corehost/browserhost/libBrowserHost.footer.js b/src/runtime/src/native/corehost/browserhost/libBrowserHost.footer.js index 8d89fdd8293..dfedd5ce787 100644 --- a/src/runtime/src/native/corehost/browserhost/libBrowserHost.footer.js +++ b/src/runtime/src/native/corehost/browserhost/libBrowserHost.footer.js @@ -45,12 +45,15 @@ !config.environmentVariables) { throw new Error("Invalid runtime config, cannot initialize the runtime."); } - const assemblyPaths = config.resources.assembly.map(a => a.virtualPath); - const coreAssemblyPaths = config.resources.coreAssembly.map(a => a.virtualPath); - ENV[HOST_PROPERTY_TRUSTED_PLATFORM_ASSEMBLIES] = config.environmentVariables[HOST_PROPERTY_TRUSTED_PLATFORM_ASSEMBLIES] = [...coreAssemblyPaths, ...assemblyPaths].join(":"); - ENV[HOST_PROPERTY_NATIVE_DLL_SEARCH_DIRECTORIES] = config.environmentVariables[HOST_PROPERTY_NATIVE_DLL_SEARCH_DIRECTORIES] = config.virtualWorkingDirectory; - ENV[HOST_PROPERTY_APP_PATHS] = config.environmentVariables[HOST_PROPERTY_APP_PATHS] = config.virtualWorkingDirectory; - ENV[HOST_PROPERTY_ENTRY_ASSEMBLY_NAME] = config.environmentVariables[HOST_PROPERTY_ENTRY_ASSEMBLY_NAME] = config.mainAssemblyName; + const assemblyPaths = config.resources.assembly.map(a => "/" + a.virtualPath); + const coreAssemblyPaths = config.resources.coreAssembly.map(a => "/" + a.virtualPath); + config.environmentVariables[HOST_PROPERTY_TRUSTED_PLATFORM_ASSEMBLIES] = [...coreAssemblyPaths, ...assemblyPaths].join(":"); + config.environmentVariables[HOST_PROPERTY_NATIVE_DLL_SEARCH_DIRECTORIES] = config.virtualWorkingDirectory; + config.environmentVariables[HOST_PROPERTY_APP_PATHS] = config.virtualWorkingDirectory; + config.environmentVariables[HOST_PROPERTY_ENTRY_ASSEMBLY_NAME] = config.mainAssemblyName; + for (const key in config.environmentVariables) { + ENV[key] = config.environmentVariables[key]; + } if (ENVIRONMENT_IS_NODE) { Module.preInit = [() => { diff --git a/src/runtime/src/native/corehost/browserhost/loader/assets.ts b/src/runtime/src/native/corehost/browserhost/loader/assets.ts new file mode 100644 index 00000000000..c214e61b8f4 --- /dev/null +++ b/src/runtime/src/native/corehost/browserhost/loader/assets.ts @@ -0,0 +1,129 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +import type { LoadBootResourceCallback, JsModuleExports, JsAsset, AssemblyAsset, PdbAsset, WasmAsset, IcuAsset, EmscriptenModuleInternal, InstantiateWasmSuccessCallback } from "./types"; + +import { dotnetAssert, dotnetGetInternals, dotnetBrowserHostExports, dotnetUpdateInternals } from "./cross-module"; +import { getIcuResourceName } from "./icu"; +import { getLoaderConfig } from "./config"; +import { BrowserHost_InitializeCoreCLR } from "./run"; +import { createPromiseCompletionSource } from "./promise-completion-source"; +import { locateFile } from "./bootstrap"; +import { fetchLike } from "./polyfills"; + +const nativeModulePromiseController = createPromiseCompletionSource(() => { + dotnetUpdateInternals(dotnetGetInternals()); +}); +let wasmBinaryPromise: any = undefined; + +// WASM-TODO: retry logic +// WASM-TODO: throttling logic +// WASM-TODO: invokeLibraryInitializers +// WASM-TODO: webCIL +// WASM-TODO: downloadOnly - blazor render mode auto pre-download. Really no start. +// WASM-TODO: no-cache, force-cache, integrity +// WASM-TODO: LoadBootResourceCallback +// WASM-TODO: fail fast for missing WASM features - SIMD, EH, BigInt detection + +export async function createRuntime(downloadOnly: boolean, loadBootResource?: LoadBootResourceCallback): Promise { + if (loadBootResource) throw new Error("TODO: loadBootResource is not implemented yet"); + const config = getLoaderConfig(); + if (!config.resources || !config.resources.coreAssembly || !config.resources.coreAssembly.length) throw new Error("Invalid config, resources is not set"); + + const nativeModulePromise = loadJSModule(config.resources.jsModuleNative[0]); + const runtimeModulePromise = loadJSModule(config.resources.jsModuleRuntime[0]); + const wasmNativePromise = fetchWasm(config.resources.wasmNative[0]); + + const coreAssembliesPromise = Promise.all(config.resources.coreAssembly.map(fetchDll)); + const coreVfsPromise = Promise.all((config.resources.coreVfs || []).map(fetchVfs)); + const assembliesPromise = Promise.all(config.resources.assembly.map(fetchDll)); + const vfsPromise = Promise.all((config.resources.vfs || []).map(fetchVfs)); + const icuResourceName = getIcuResourceName(config); + const icuDataPromise = icuResourceName ? Promise.all((config.resources.icu || []).filter(asset => asset.name === icuResourceName).map(fetchIcu)) : Promise.resolve([]); + + const nativeModule = await nativeModulePromise; + const modulePromise = nativeModule.dotnetInitializeModule(dotnetGetInternals()); + nativeModulePromiseController.propagateFrom(modulePromise); + + const runtimeModule = await runtimeModulePromise; + const runtimeModuleReady = runtimeModule.dotnetInitializeModule(dotnetGetInternals()); + + await nativeModulePromiseController.promise; + await coreAssembliesPromise; + await coreVfsPromise; + await vfsPromise; + await icuDataPromise; + await wasmNativePromise; // this is just to propagate errors + if (!downloadOnly) { + BrowserHost_InitializeCoreCLR(); + } + + await assembliesPromise; + await runtimeModuleReady; +} + +async function loadJSModule(asset: JsAsset): Promise { + if (asset.name && !asset.resolvedUrl) { + asset.resolvedUrl = locateFile(asset.name); + } + if (!asset.resolvedUrl) throw new Error("Invalid config, resources is not set"); + return await import(/* webpackIgnore: true */ asset.resolvedUrl); +} + +function fetchWasm(asset: WasmAsset): Promise { + if (asset.name && !asset.resolvedUrl) { + asset.resolvedUrl = locateFile(asset.name); + } + if (!asset.resolvedUrl) throw new Error("Invalid config, resources is not set"); + wasmBinaryPromise = fetchLike(asset.resolvedUrl); + return wasmBinaryPromise; +} + +export async function instantiateWasm(imports: WebAssembly.Imports, successCallback: InstantiateWasmSuccessCallback): Promise { + if (wasmBinaryPromise instanceof globalThis.Response === false || !WebAssembly.instantiateStreaming) { + const res = await wasmBinaryPromise; + const data = await res.arrayBuffer(); + const module = await WebAssembly.compile(data); + const instance = await WebAssembly.instantiate(module, imports); + successCallback(instance, module); + } else { + const res = await WebAssembly.instantiateStreaming(wasmBinaryPromise, imports); + successCallback(res.instance, res.module); + } +} + +async function fetchIcu(asset: IcuAsset): Promise { + if (asset.name && !asset.resolvedUrl) { + asset.resolvedUrl = locateFile(asset.name); + } + const bytes = await fetchBytes(asset); + await nativeModulePromiseController.promise; + dotnetBrowserHostExports.loadIcuData(bytes); +} + +async function fetchDll(asset: AssemblyAsset): Promise { + if (asset.name && !asset.resolvedUrl) { + asset.resolvedUrl = locateFile(asset.name); + } + const bytes = await fetchBytes(asset); + await nativeModulePromiseController.promise; + + dotnetBrowserHostExports.registerDllBytes(bytes, asset); +} + +async function fetchVfs(asset: AssemblyAsset): Promise { + if (asset.name && !asset.resolvedUrl) { + asset.resolvedUrl = locateFile(asset.name); + } + const bytes = await fetchBytes(asset); + await nativeModulePromiseController.promise; + + dotnetBrowserHostExports.installVfsFile(bytes, asset); +} + +async function fetchBytes(asset: WasmAsset | AssemblyAsset | PdbAsset | IcuAsset): Promise { + dotnetAssert.check(asset && asset.resolvedUrl, "Bad asset.resolvedUrl"); + const response = await fetchLike(asset.resolvedUrl); + const buffer = await response.arrayBuffer(); + return new Uint8Array(buffer); +} diff --git a/src/runtime/src/native/corehost/browserhost/loader/bootstrap.ts b/src/runtime/src/native/corehost/browserhost/loader/bootstrap.ts index 4083099ad56..b2f78437590 100644 --- a/src/runtime/src/native/corehost/browserhost/loader/bootstrap.ts +++ b/src/runtime/src/native/corehost/browserhost/loader/bootstrap.ts @@ -1,13 +1,8 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -import type { LoadBootResourceCallback, JsModuleExports, JsAsset, AssemblyAsset, PdbAsset, WasmAsset, IcuAsset, EmscriptenModuleInternal, LoaderConfig, DotnetHostBuilder } from "./types"; -import { dotnetAssert, dotnetGetInternals, dotnetBrowserHostExports, dotnetUpdateInternals } from "./cross-module"; +import { type LoaderConfig, type DotnetHostBuilder, GlobalizationMode } from "./types"; import { ENVIRONMENT_IS_NODE, ENVIRONMENT_IS_SHELL } from "./per-module"; -import { getIcuResourceName } from "./icu"; -import { getLoaderConfig } from "./config"; -import { BrowserHost_InitializeCoreCLR } from "./run"; -import { createPromiseCompletionSource } from "./promise-completion-source"; import { nodeFs } from "./polyfills"; const scriptUrlQuery = /*! webpackIgnore: true */import.meta.url; @@ -16,110 +11,7 @@ const modulesUniqueQuery = queryIndex > 0 ? scriptUrlQuery.substring(queryIndex) const scriptUrl = normalizeFileUrl(scriptUrlQuery); const scriptDirectory = normalizeDirectoryUrl(scriptUrl); -const nativeModulePromiseController = createPromiseCompletionSource(() => { - dotnetUpdateInternals(dotnetGetInternals()); -}); - -// WASM-TODO: retry logic -// WASM-TODO: throttling logic -// WASM-TODO: invokeLibraryInitializers -// WASM-TODO: webCIL -// WASM-TODO: downloadOnly - blazor render mode auto pre-download. Really no start. - -export async function createRuntime(downloadOnly: boolean, loadBootResource?: LoadBootResourceCallback): Promise { - const config = getLoaderConfig(); - if (!config.resources || !config.resources.coreAssembly || !config.resources.coreAssembly.length) throw new Error("Invalid config, resources is not set"); - - const nativeModulePromise = loadJSModule(config.resources.jsModuleNative[0], loadBootResource); - const runtimeModulePromise = loadJSModule(config.resources.jsModuleRuntime[0], loadBootResource); - const coreAssembliesPromise = Promise.all(config.resources.coreAssembly.map(fetchDll)); - const coreVfsPromise = Promise.all((config.resources.coreVfs || []).map(fetchVfs)); - const assembliesPromise = Promise.all(config.resources.assembly.map(fetchDll)); - const vfsPromise = Promise.all((config.resources.vfs || []).map(fetchVfs)); - const icuResourceName = getIcuResourceName(config); - const icuDataPromise = icuResourceName ? Promise.all((config.resources.icu || []).filter(asset => asset.name === icuResourceName).map(fetchIcu)) : Promise.resolve([]); - // WASM-TODO fetchWasm(config.resources.wasmNative[0]);// start loading early, no await - - const nativeModule = await nativeModulePromise; - const modulePromise = nativeModule.dotnetInitializeModule(dotnetGetInternals()); - nativeModulePromiseController.propagateFrom(modulePromise); - - const runtimeModule = await runtimeModulePromise; - const runtimeModuleReady = runtimeModule.dotnetInitializeModule(dotnetGetInternals()); - - await nativeModulePromiseController.promise; - await coreAssembliesPromise; - await coreVfsPromise; - await vfsPromise; - await icuDataPromise; - if (!downloadOnly) { - BrowserHost_InitializeCoreCLR(); - } - - await assembliesPromise; - await runtimeModuleReady; -} - -async function loadJSModule(asset: JsAsset, loadBootResource?: LoadBootResourceCallback): Promise { - if (loadBootResource) throw new Error("TODO: loadBootResource is not implemented yet"); - if (asset.name && !asset.resolvedUrl) { - asset.resolvedUrl = locateFile(asset.name); - } - if (!asset.resolvedUrl) throw new Error("Invalid config, resources is not set"); - return await import(/* webpackIgnore: true */ asset.resolvedUrl); -} - -async function fetchIcu(asset: IcuAsset): Promise { - if (asset.name && !asset.resolvedUrl) { - asset.resolvedUrl = locateFile(asset.name); - } - const bytes = await fetchBytes(asset); - await nativeModulePromiseController.promise; - dotnetBrowserHostExports.loadIcuData(bytes); -} - -async function fetchDll(asset: AssemblyAsset): Promise { - if (asset.name && !asset.resolvedUrl) { - asset.resolvedUrl = locateFile(asset.name); - } - const bytes = await fetchBytes(asset); - await nativeModulePromiseController.promise; - - dotnetBrowserHostExports.registerDllBytes(bytes, asset); -} - -async function fetchVfs(asset: AssemblyAsset): Promise { - if (asset.name && !asset.resolvedUrl) { - asset.resolvedUrl = locateFile(asset.name); - } - const bytes = await fetchBytes(asset); - await nativeModulePromiseController.promise; - - dotnetBrowserHostExports.installVfsFile(bytes, asset); -} - -async function fetchBytes(asset: WasmAsset | AssemblyAsset | PdbAsset | IcuAsset): Promise { - dotnetAssert.check(asset && asset.resolvedUrl, "Bad asset.resolvedUrl"); - if (ENVIRONMENT_IS_NODE) { - const { promises: fs } = await import("fs"); - const { fileURLToPath } = await import(/*! webpackIgnore: true */"url"); - const isFileUrl = asset.resolvedUrl!.startsWith("file://"); - if (isFileUrl) { - asset.resolvedUrl = fileURLToPath(asset.resolvedUrl!); - } - const buffer = await fs.readFile(asset.resolvedUrl!); - return new Uint8Array(buffer); - } else { - const response = await fetch(asset.resolvedUrl!); - if (!response.ok) { - throw new Error(`Failed to load ${asset.resolvedUrl} with ${response.status} ${response.statusText}`); - } - const buffer = await response.arrayBuffer(); - return new Uint8Array(buffer); - } -} - -function locateFile(path: string) { +export function locateFile(path: string) { if ("URL" in globalThis) { return new URL(path, scriptDirectory).toString(); } @@ -192,17 +84,34 @@ export async function findResources(dotnet: DotnetHostBuilder): Promise { const json = await fs.promises.readFile(runtimeConfigName, { encoding: "utf8" }); runtimeConfig = JSON.parse(json); } + const icus = files + .filter(file => file.startsWith("icudt") && file.endsWith(".dat")) + .map(filename => { + // filename without path + const name = filename.substring(filename.lastIndexOf("/") + 1); + return { virtualPath: name, name }; + }); + + const environmentVariables: { [key: string]: string } = {}; + let globalizationMode = GlobalizationMode.All; + if (!icus.length) { + globalizationMode = GlobalizationMode.Invariant; + environmentVariables["DOTNET_SYSTEM_GLOBALIZATION_INVARIANT"] = "1"; + } const config: LoaderConfig = { mainAssemblyName, runtimeConfig, + globalizationMode, virtualWorkingDirectory: mountedDir, + environmentVariables, resources: { jsModuleNative: [{ name: "dotnet.native.js" }], jsModuleRuntime: [{ name: "dotnet.runtime.js" }], wasmNative: [{ name: "dotnet.native.wasm", }], coreAssembly: [{ virtualPath: mountedDir + "/System.Private.CoreLib.dll", name: "System.Private.CoreLib.dll" },], assembly: assemblies, + icu: icus, } }; dotnet.withConfig(config); diff --git a/src/runtime/src/native/corehost/browserhost/loader/dotnet.d.ts b/src/runtime/src/native/corehost/browserhost/loader/dotnet.d.ts index bb4e95306d7..17df552d1ac 100644 --- a/src/runtime/src/native/corehost/browserhost/loader/dotnet.d.ts +++ b/src/runtime/src/native/corehost/browserhost/loader/dotnet.d.ts @@ -773,10 +773,6 @@ declare global { function getDotnetRuntime(runtimeId: number): RuntimeAPI | undefined; } -declare global { - function getDotnetRuntime(runtimeId: number): RuntimeAPI | undefined; - const dotnetSidecar: boolean | undefined; -} declare const createDotnetRuntime: CreateDotnetRuntimeType; export { GlobalizationMode, createDotnetRuntime as default, dotnet, exit }; diff --git a/src/runtime/src/native/corehost/browserhost/loader/dotnet.ts b/src/runtime/src/native/corehost/browserhost/loader/dotnet.ts index f9fc7fe6d11..6a1b68cf626 100644 --- a/src/runtime/src/native/corehost/browserhost/loader/dotnet.ts +++ b/src/runtime/src/native/corehost/browserhost/loader/dotnet.ts @@ -23,5 +23,7 @@ await initPolyfillsAsync(); export const dotnet: DotnetHostBuilder | undefined = new HostBuilder() as DotnetHostBuilder; export { exit }; +dotnet.withConfig(/*! dotnetBootConfig */{}); + // Auto-start when in Node.js or Shell environment selfHostNodeJS(dotnet!).catch(); diff --git a/src/runtime/src/native/corehost/browserhost/loader/host-builder.ts b/src/runtime/src/native/corehost/browserhost/loader/host-builder.ts index 4114eaa1aee..465f60ae7fb 100644 --- a/src/runtime/src/native/corehost/browserhost/loader/host-builder.ts +++ b/src/runtime/src/native/corehost/browserhost/loader/host-builder.ts @@ -5,7 +5,7 @@ import type { DotnetHostBuilder, LoaderConfig, RuntimeAPI, LoadBootResourceCallb import { Module, dotnetApi } from "./cross-module"; import { getLoaderConfig, mergeLoaderConfig, validateLoaderConfig } from "./config"; -import { createRuntime } from "./bootstrap"; +import { createRuntime } from "./assets"; import { exit } from "./exit"; let applicationArguments: string[] | undefined = []; diff --git a/src/runtime/src/native/corehost/browserhost/loader/icu.ts b/src/runtime/src/native/corehost/browserhost/loader/icu.ts index 1e0d9359d4a..6aef6afa31e 100644 --- a/src/runtime/src/native/corehost/browserhost/loader/icu.ts +++ b/src/runtime/src/native/corehost/browserhost/loader/icu.ts @@ -33,6 +33,7 @@ export function getIcuResourceName(config: LoaderConfig): string | null { } config.globalizationMode = GlobalizationMode.Invariant; + config.environmentVariables!["DOTNET_SYSTEM_GLOBALIZATION_INVARIANT"] = "1"; return null; } diff --git a/src/runtime/src/native/corehost/browserhost/loader/index.ts b/src/runtime/src/native/corehost/browserhost/loader/index.ts index 63eb64cdd35..241edb02e9b 100644 --- a/src/runtime/src/native/corehost/browserhost/loader/index.ts +++ b/src/runtime/src/native/corehost/browserhost/loader/index.ts @@ -3,7 +3,8 @@ import type { LoggerType, AssertType, RuntimeAPI, LoaderExports, - NativeBrowserExportsTable, LoaderExportsTable, RuntimeExportsTable, InternalExchange, BrowserHostExportsTable, InteropJavaScriptExportsTable, BrowserUtilsExportsTable + NativeBrowserExportsTable, LoaderExportsTable, RuntimeExportsTable, InternalExchange, BrowserHostExportsTable, InteropJavaScriptExportsTable, BrowserUtilsExportsTable, + EmscriptenModuleInternal } from "./types"; import { InternalExchangeIndex } from "../types"; @@ -19,6 +20,7 @@ import { check, error, info, warn, debug } from "./logging"; import { dotnetAssert, dotnetLoaderExports, dotnetLogger, dotnetUpdateInternals, dotnetUpdateInternalsSubscriber } from "./cross-module"; import { rejectRunMainPromise, resolveRunMainPromise, getRunMainPromise } from "./run"; import { createPromiseCompletionSource, getPromiseCompletionSource, isControllablePromise } from "./promise-completion-source"; +import { instantiateWasm } from "./assets"; export function dotnetInitializeModule(): RuntimeAPI { @@ -71,6 +73,12 @@ export function dotnetInitializeModule(): RuntimeAPI { }; Object.assign(dotnetAssert, assert); + // emscripten extension point + const localModule: Partial = { + instantiateWasm, + }; + Object.assign(dotnetApi.Module!, localModule); + internals[InternalExchangeIndex.LoaderExportsTable] = loaderExportsToTable(dotnetLogger, dotnetAssert, dotnetLoaderExports); dotnetUpdateInternals(internals, dotnetUpdateInternalsSubscriber); return dotnetApi as RuntimeAPI; diff --git a/src/runtime/src/native/corehost/build.cmd b/src/runtime/src/native/corehost/build.cmd index a07a2a3603b..82c0fc71a33 100644 --- a/src/runtime/src/native/corehost/build.cmd +++ b/src/runtime/src/native/corehost/build.cmd @@ -93,22 +93,13 @@ if exist "%__IntermediatesDir%" rd /s /q "%__IntermediatesDir%" :CreateIntermediates if not exist "%__IntermediatesDir%" md "%__IntermediatesDir%" -if /i "%__BuildArch%" == "x64" (set cm_BaseRid=win7) -if /i "%__BuildArch%" == "x86" (set cm_BaseRid=win7) -if /i "%__BuildArch%" == "arm64" (set cm_BaseRid=win10) -if /i "%__BuildArch%" == "wasm" (set cm_BaseRid=browser) -:: Form the base RID to be used if we are doing a portable build -if /i "%__PortableBuild%" == "1" (set cm_BaseRid=win) -set cm_BaseRid=%cm_BaseRid%-%__BuildArch% -echo "Computed RID for native build is %cm_BaseRid%" - :: When the host runs on an unknown rid, it falls back to the output rid :: Strip the architecture for /f "delims=-" %%i in ("%__TargetRid%") do set __HostFallbackOS=%%i :: The "win" host build is Windows 10 compatible if "%__HostFallbackOS%" == "win" (set __HostFallbackOS=win10) -set __ExtraCmakeParams=%__ExtraCmakeParams% "-DCLI_CMAKE_PKG_RID=%cm_BaseRid%" "-DCLI_CMAKE_FALLBACK_OS=%__HostFallbackOS%" "-DCLI_CMAKE_COMMIT_HASH=%__CommitSha%" +set __ExtraCmakeParams=%__ExtraCmakeParams% "-DCLI_CMAKE_FALLBACK_OS=%__HostFallbackOS%" "-DCLI_CMAKE_COMMIT_HASH=%__CommitSha%" set __ExtraCmakeParams=%__ExtraCmakeParams% "-DCLR_CMAKE_TARGET_ARCH=%__BuildArch%" "-DCLR_CMAKE_TARGET_OS=%__TargetOS%" set __ExtraCmakeParams=%__ExtraCmakeParams% "-DCLI_CMAKE_RESOURCE_DIR=%__ResourcesDir%" "-DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE%" diff --git a/src/runtime/src/native/corehost/build.sh b/src/runtime/src/native/corehost/build.sh index 63c3b6d996e..b1bd4983b79 100755 --- a/src/runtime/src/native/corehost/build.sh +++ b/src/runtime/src/native/corehost/build.sh @@ -59,7 +59,7 @@ __IntermediatesDir="$__RootBinDir/obj/$__TargetRid.$__BuildType" export __BinDir __IntermediatesDir __RuntimeFlavor -__CMakeArgs="-DCLI_CMAKE_PKG_RID=\"$__TargetRid\" -DCLI_CMAKE_FALLBACK_OS=\"$__HostFallbackOS\" -DCLI_CMAKE_COMMIT_HASH=\"$__commit_hash\" $__CMakeArgs" +__CMakeArgs="-DCLI_CMAKE_FALLBACK_OS=\"$__HostFallbackOS\" -DCLI_CMAKE_COMMIT_HASH=\"$__commit_hash\" $__CMakeArgs" if [[ "$__TargetOS" != osx ]]; then __CMakeArgs="-DFEATURE_DISTRO_AGNOSTIC_SSL=$__PortableBuild $__CMakeArgs" diff --git a/src/runtime/src/native/corehost/configure.h.in b/src/runtime/src/native/corehost/configure.h.in index a8774b2aee0..7d766945a9c 100644 --- a/src/runtime/src/native/corehost/configure.h.in +++ b/src/runtime/src/native/corehost/configure.h.in @@ -7,12 +7,8 @@ // When hosting components are all statically linked, // the versioning information is irrelevant and may only come up in tracing. // so we will use "static" -#define HOST_POLICY_PKG_NAME "static" -#define HOST_POLICY_PKG_REL_DIR "static" #define REPO_COMMIT_HASH "static" #else -#define HOST_POLICY_PKG_NAME "runtime.@CLI_CMAKE_PKG_RID@.Microsoft.NETCore.DotNetHostPolicy" -#define HOST_POLICY_PKG_REL_DIR "runtime.@CLI_CMAKE_PKG_RID@/native" #define REPO_COMMIT_HASH "@CLI_CMAKE_COMMIT_HASH@" #endif diff --git a/src/runtime/src/native/corehost/fxr/fx_muxer.cpp b/src/runtime/src/native/corehost/fxr/fx_muxer.cpp index cef02fd75a4..cd3b69addc1 100644 --- a/src/runtime/src/native/corehost/fxr/fx_muxer.cpp +++ b/src/runtime/src/native/corehost/fxr/fx_muxer.cpp @@ -491,7 +491,7 @@ namespace trace::verbose(_X("Executing as a %s app as per config file [%s]"), (is_framework_dependent ? _X("framework-dependent") : _X("self-contained")), app_config.get_path().c_str()); - if (!hostpolicy_resolver::try_get_dir(mode, host_info.dotnet_root, fx_definitions, app_candidate, deps_file, probe_fullpaths, &hostpolicy_dir)) + if (!hostpolicy_resolver::try_get_dir(mode, host_info.dotnet_root, fx_definitions, app_candidate, deps_file, &hostpolicy_dir)) { return StatusCode::CoreHostLibMissingFailure; } @@ -629,7 +629,7 @@ namespace trace::verbose(_X("Libhost loading occurring for a framework-dependent component per config file [%s]"), app_config.get_path().c_str()); const pal::string_t deps_file; - if (!hostpolicy_resolver::try_get_dir(mode, host_info.dotnet_root, fx_definitions, host_info.app_path, deps_file, probe_fullpaths, &hostpolicy_dir)) + if (!hostpolicy_resolver::try_get_dir(mode, host_info.dotnet_root, fx_definitions, host_info.app_path, deps_file, &hostpolicy_dir)) { return StatusCode::CoreHostLibMissingFailure; } diff --git a/src/runtime/src/native/corehost/fxr/hostpolicy_resolver.h b/src/runtime/src/native/corehost/fxr/hostpolicy_resolver.h index 2e3ae03e411..b9eab1f660b 100644 --- a/src/runtime/src/native/corehost/fxr/hostpolicy_resolver.h +++ b/src/runtime/src/native/corehost/fxr/hostpolicy_resolver.h @@ -37,7 +37,6 @@ namespace hostpolicy_resolver const fx_definition_vector_t& fx_definitions, const pal::string_t& app_candidate, const pal::string_t& specified_deps_file, - const std::vector& probe_realpaths, pal::string_t* impl_dir); }; diff --git a/src/runtime/src/native/corehost/fxr/standalone/hostpolicy_resolver.cpp b/src/runtime/src/native/corehost/fxr/standalone/hostpolicy_resolver.cpp index be784c61a69..d72952d1e7e 100644 --- a/src/runtime/src/native/corehost/fxr/standalone/hostpolicy_resolver.cpp +++ b/src/runtime/src/native/corehost/fxr/standalone/hostpolicy_resolver.cpp @@ -18,151 +18,6 @@ namespace pal::dll_t g_hostpolicy; hostpolicy_contract_t g_hostpolicy_contract; pal::string_t g_hostpolicy_dir; - - /** - * Resolve the hostpolicy version from deps. - * - Scan the deps file's libraries section and find the hostpolicy version in the file. - */ - pal::string_t resolve_hostpolicy_version_from_deps(const pal::string_t& deps_json) - { - trace::verbose(_X("--- Resolving %s version from deps json [%s]"), LIBHOSTPOLICY_NAME, deps_json.c_str()); - - json_parser_t json; - if (!json.parse_file(deps_json)) - { - return {}; - } - - // Look up the root package instead of the "runtime" package because we can't do a full rid resolution. - // i.e., look for "Microsoft.NETCore.DotNetHostPolicy/" followed by version. - const pal::char_t prefix[] = _X("Microsoft.NETCore.DotNetHostPolicy/"); - for (const auto& library : json.document()[_X("libraries")].GetObject()) - { - pal::string_t lib_name{library.name.GetString()}; - if (utils::starts_with(lib_name, prefix, false)) - { - // Extract the version information that occurs after '/' - pal::string_t version = lib_name.substr(utils::strlen(prefix)); - trace::verbose(_X("Resolved version %s from dependency manifest file [%s]"), version.c_str(), deps_json.c_str()); - return version; - } - } - - return {}; - } - - /** - * Given a directory and a version, find if the package relative - * dir under the given directory contains hostpolicy.dll - */ - bool to_hostpolicy_package_dir(const pal::string_t& dir, const pal::string_t& version, pal::string_t* candidate) - { - assert(!version.empty()); - - candidate->clear(); - - // Ensure the relative dir contains platform directory separators. - pal::string_t rel_dir = _STRINGIFY(HOST_POLICY_PKG_REL_DIR); - if (DIR_SEPARATOR != '/') - { - replace_char(&rel_dir, '/', DIR_SEPARATOR); - } - - // Construct the path to directory containing hostpolicy. - pal::string_t path = dir; - append_path(&path, _STRINGIFY(HOST_POLICY_PKG_NAME)); // package name - append_path(&path, version.c_str()); // package version - append_path(&path, rel_dir.c_str()); // relative dir containing hostpolicy library - - // Check if "path" contains the required library. - if (!file_exists_in_dir(path, LIBHOSTPOLICY_NAME, nullptr)) - { - trace::verbose(_X("Did not find %s in directory %s"), LIBHOSTPOLICY_NAME, path.c_str()); - return false; - } - - // "path" contains the directory containing hostpolicy library. - *candidate = path; - - trace::verbose(_X("Found %s in directory %s"), LIBHOSTPOLICY_NAME, path.c_str()); - return true; - } - - /** - * Given a nuget version, detect if a serviced hostpolicy is available at - * platform servicing location. - */ - bool hostpolicy_exists_in_svc(const pal::string_t& version, pal::string_t* resolved_dir) - { - if (version.empty()) - { - return false; - } - - pal::string_t svc_dir; - pal::get_default_servicing_directory(&svc_dir); - append_path(&svc_dir, _X("pkgs")); - return to_hostpolicy_package_dir(svc_dir, version, resolved_dir); - } - - /** - * Given a version and probing paths, find if package layout - * directory containing hostpolicy exists. - */ - bool resolve_hostpolicy_dir_from_probe_paths(const pal::string_t& version, const std::vector& probe_fullpaths, pal::string_t* candidate) - { - if (probe_fullpaths.empty() || version.empty()) - { - return false; - } - - // Check if the package relative directory containing hostpolicy exists. - for (const auto& probe_path : probe_fullpaths) - { - trace::verbose(_X("Considering %s to probe for %s"), probe_path.c_str(), LIBHOSTPOLICY_NAME); - if (to_hostpolicy_package_dir(probe_path, version, candidate)) - { - return true; - } - } - - // Print detailed message about the file not found in the probe paths. - trace::error(_X("Could not find required library %s in %d probing paths:"), - LIBHOSTPOLICY_NAME, probe_fullpaths.size()); - for (const auto& path : probe_fullpaths) - { - trace::error(_X(" %s"), path.c_str()); - } - return false; - } - - /** - * Return name of deps file for app. - */ - pal::string_t get_deps_file( - bool is_framework_dependent, - const pal::string_t& app_candidate, - const pal::string_t& specified_deps_file, - const fx_definition_vector_t& fx_definitions - ) - { - if (is_framework_dependent) - { - // The hostpolicy is resolved from the root framework's name and location. - pal::string_t deps_file = get_root_framework(fx_definitions).get_dir(); - if (!deps_file.empty() && deps_file.back() != DIR_SEPARATOR) - { - deps_file.push_back(DIR_SEPARATOR); - } - - return deps_file + get_root_framework(fx_definitions).get_name() + _X(".deps.json"); - } - else - { - // Self-contained app's hostpolicy is from specified deps or from app deps. - return !specified_deps_file.empty() ? specified_deps_file : get_deps_from_app_binary(get_directory(app_candidate), app_candidate); - } - } } int hostpolicy_resolver::load( @@ -236,32 +91,10 @@ bool hostpolicy_resolver::try_get_dir( const fx_definition_vector_t& fx_definitions, const pal::string_t& app_candidate, const pal::string_t& specified_deps_file, - const std::vector& probe_fullpaths, pal::string_t* impl_dir) { bool is_framework_dependent = get_app(fx_definitions).get_runtime_config().get_is_framework_dependent(); - // Obtain deps file for the given configuration. - pal::string_t resolved_deps = get_deps_file(is_framework_dependent, app_candidate, specified_deps_file, fx_definitions); - - // Resolve hostpolicy version out of the deps file. - pal::string_t version; - if (pal::file_exists(resolved_deps)) - { - version = resolve_hostpolicy_version_from_deps(resolved_deps); - if (trace::is_enabled() && version.empty()) - { - trace::warning(_X("Dependency manifest %s does not contain an entry for %s"), - resolved_deps.c_str(), _STRINGIFY(HOST_POLICY_PKG_NAME)); - } - - // Check if the given version of the hostpolicy exists in servicing. - if (hostpolicy_exists_in_svc(version, impl_dir)) - { - return true; - } - } - // Get the expected directory that would contain hostpolicy. pal::string_t expected; if (is_framework_dependent) @@ -298,16 +131,6 @@ bool hostpolicy_resolver::try_get_dir( return true; } - trace::verbose(_X("The %s was not found in [%s]"), LIBHOSTPOLICY_NAME, expected.c_str()); - - // Start probing for hostpolicy in the specified probe paths. - pal::string_t candidate; - if (resolve_hostpolicy_dir_from_probe_paths(version, probe_fullpaths, &candidate)) - { - impl_dir->assign(candidate); - return true; - } - // If it still couldn't be found, somebody upstack messed up. Flag an error for the "expected" location. trace::error(_X("A fatal error was encountered. The library '%s' required to execute the application was not found in '%s'."), LIBHOSTPOLICY_NAME, expected.c_str()); diff --git a/src/runtime/src/native/corehost/hostpolicy/hostpolicy_context.cpp b/src/runtime/src/native/corehost/hostpolicy/hostpolicy_context.cpp index 38e324cade0..d1285d5221b 100644 --- a/src/runtime/src/native/corehost/hostpolicy/hostpolicy_context.cpp +++ b/src/runtime/src/native/corehost/hostpolicy/hostpolicy_context.cpp @@ -192,29 +192,11 @@ int hostpolicy_context_t::initialize(const hostpolicy_init_t &hostpolicy_init, c return StatusCode::ResolverInitFailure; } + // Resolve probe paths and setup breadcrumbs if enabled probe_paths_t probe_paths; - - // Setup breadcrumbs. - if (breadcrumbs_enabled) - { - pal::string_t policy_name = _STRINGIFY(HOST_POLICY_PKG_NAME); - pal::string_t policy_version = _STRINGIFY(HOST_VERSION); - - // Always insert the hostpolicy that the code is running on. - breadcrumbs.insert(policy_name); - breadcrumbs.insert(policy_name + _X(",") + policy_version); - - if (!resolver.resolve_probe_paths(&probe_paths, &breadcrumbs)) - { - return StatusCode::ResolverResolveFailure; - } - } - else + if (!resolver.resolve_probe_paths(&probe_paths, breadcrumbs_enabled ? &breadcrumbs : nullptr)) { - if (!resolver.resolve_probe_paths(&probe_paths, nullptr)) - { - return StatusCode::ResolverResolveFailure; - } + return StatusCode::ResolverResolveFailure; } clr_path = probe_paths.coreclr; diff --git a/src/runtime/src/native/libs/Common/JavaScript/CMakeLists.txt b/src/runtime/src/native/libs/Common/JavaScript/CMakeLists.txt index a4a5842dbd7..b01a16cef84 100644 --- a/src/runtime/src/native/libs/Common/JavaScript/CMakeLists.txt +++ b/src/runtime/src/native/libs/Common/JavaScript/CMakeLists.txt @@ -12,14 +12,17 @@ set(ROLLUP_TS_SOURCES "${CLR_SRC_NATIVE_DIR}/rollup.config.defines.js" "${CLR_SRC_NATIVE_DIR}/rollup.config.plugins.js" "${CLR_SRC_NATIVE_DIR}/corehost/browserhost/libBrowserHost.footer.js" - "${CLR_SRC_NATIVE_DIR}/libs/System.Native.Browser/libSystem.Browser.Utils.footer.js" + "${CLR_SRC_NATIVE_DIR}/corehost/browserhost/sample/dotnet.boot.js" + "${CLR_SRC_NATIVE_DIR}/libs/System.Native.Browser/libSystem.Native.Browser.Utils.footer.js" "${CLR_SRC_NATIVE_DIR}/libs/System.Native.Browser/libSystem.Native.Browser.extpost.js" "${CLR_SRC_NATIVE_DIR}/libs/System.Native.Browser/libSystem.Native.Browser.footer.js" "${CLR_SRC_NATIVE_DIR}/libs/System.Runtime.InteropServices.JavaScript.Native/libSystem.Runtime.InteropServices.JavaScript.Native.footer.js" + "${CLR_SRC_NATIVE_DIR}/corehost/browserhost/host/cross-linked.ts" "${CLR_SRC_NATIVE_DIR}/corehost/browserhost/host/host.ts" "${CLR_SRC_NATIVE_DIR}/corehost/browserhost/host/index.ts" "${CLR_SRC_NATIVE_DIR}/corehost/browserhost/host/types.ts" + "${CLR_SRC_NATIVE_DIR}/corehost/browserhost/loader/assets.ts" "${CLR_SRC_NATIVE_DIR}/corehost/browserhost/loader/bootstrap.ts" "${CLR_SRC_NATIVE_DIR}/corehost/browserhost/loader/config.ts" "${CLR_SRC_NATIVE_DIR}/corehost/browserhost/loader/cross-module.ts" @@ -27,6 +30,7 @@ set(ROLLUP_TS_SOURCES "${CLR_SRC_NATIVE_DIR}/corehost/browserhost/loader/dotnet.ts" "${CLR_SRC_NATIVE_DIR}/corehost/browserhost/loader/exit.ts" "${CLR_SRC_NATIVE_DIR}/corehost/browserhost/loader/host-builder.ts" + "${CLR_SRC_NATIVE_DIR}/corehost/browserhost/loader/icu.ts" "${CLR_SRC_NATIVE_DIR}/corehost/browserhost/loader/index.ts" "${CLR_SRC_NATIVE_DIR}/corehost/browserhost/loader/lib-initializers.ts" "${CLR_SRC_NATIVE_DIR}/corehost/browserhost/loader/logging.ts" @@ -87,8 +91,8 @@ set(ROLLUP_OUTPUTS "${STATIC_LIB_DESTINATION}/libBrowserHost.js.map" "${STATIC_LIB_DESTINATION}/libSystem.Native.Browser.js" "${STATIC_LIB_DESTINATION}/libSystem.Native.Browser.js.map" - "${STATIC_LIB_DESTINATION}/libSystem.Browser.Utils.js" - "${STATIC_LIB_DESTINATION}/libSystem.Browser.Utils.js.map" + "${STATIC_LIB_DESTINATION}/libSystem.Native.Browser.Utils.js" + "${STATIC_LIB_DESTINATION}/libSystem.Native.Browser.Utils.js.map" "${STATIC_LIB_DESTINATION}/dotnet.runtime.js" "${STATIC_LIB_DESTINATION}/dotnet.runtime.js.map" "${STATIC_LIB_DESTINATION}/dotnet.diagnostics.js" diff --git a/src/runtime/src/native/libs/Common/JavaScript/cross-linked/index.ts b/src/runtime/src/native/libs/Common/JavaScript/cross-linked/index.ts index 59daab0da57..2700568e6ba 100644 --- a/src/runtime/src/native/libs/Common/JavaScript/cross-linked/index.ts +++ b/src/runtime/src/native/libs/Common/JavaScript/cross-linked/index.ts @@ -4,7 +4,7 @@ import type { AssertType, EmscriptenModuleInternal, LoggerType, LoaderExports, InternalExchange, InternalExchangeSubscriber, RuntimeAPI, BrowserUtilsExports, NativePointer, CharPtr, VoidPtr, RuntimeExports } from "../types"; // we want to use the cross-module symbols defined in closure of dotnet.native.js -// which are installed there by libSystem.Browser.Utils.footer.js +// which are installed there by libSystem.Native.Browser.Utils.footer.js // see also `reserved` in `rollup.config.defines.js` declare global { export const dotnetApi: RuntimeAPI; diff --git a/src/runtime/src/native/libs/Common/JavaScript/cross-module/index.ts b/src/runtime/src/native/libs/Common/JavaScript/cross-module/index.ts index 2ad7099edae..d0821b10cc0 100644 --- a/src/runtime/src/native/libs/Common/JavaScript/cross-module/index.ts +++ b/src/runtime/src/native/libs/Common/JavaScript/cross-module/index.ts @@ -156,6 +156,7 @@ export function dotnetUpdateInternalsSubscriber() { stringToUTF16Ptr: table[2], stringToUTF8Ptr: table[3], zeroRegion: table[4], + isSharedArrayBuffer: table[5], }; Object.assign(interop, interopLocal); } diff --git a/src/runtime/src/native/libs/Common/JavaScript/per-module/index.ts b/src/runtime/src/native/libs/Common/JavaScript/per-module/index.ts index 532437903bc..8858f9084f1 100644 --- a/src/runtime/src/native/libs/Common/JavaScript/per-module/index.ts +++ b/src/runtime/src/native/libs/Common/JavaScript/per-module/index.ts @@ -3,7 +3,7 @@ export const ENVIRONMENT_IS_NODE = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string"; export const ENVIRONMENT_IS_WEB_WORKER = typeof importScripts == "function"; -export const ENVIRONMENT_IS_SIDECAR = ENVIRONMENT_IS_WEB_WORKER && typeof dotnetSidecar !== "undefined"; // sidecar is emscripten main running in a web worker +export const ENVIRONMENT_IS_SIDECAR = ENVIRONMENT_IS_WEB_WORKER && typeof (globalThis as any).dotnetSidecar !== "undefined"; // sidecar is emscripten main running in a web worker export const ENVIRONMENT_IS_WORKER = ENVIRONMENT_IS_WEB_WORKER && !ENVIRONMENT_IS_SIDECAR; // we redefine what ENVIRONMENT_IS_WORKER, we replace it in emscripten internals, so that sidecar works export const ENVIRONMENT_IS_WEB = typeof window == "object" || (ENVIRONMENT_IS_WEB_WORKER && !ENVIRONMENT_IS_NODE); export const ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE; diff --git a/src/runtime/src/native/libs/Common/JavaScript/types/exchange.ts b/src/runtime/src/native/libs/Common/JavaScript/types/exchange.ts index 5222954bc05..fcb988b447e 100644 --- a/src/runtime/src/native/libs/Common/JavaScript/types/exchange.ts +++ b/src/runtime/src/native/libs/Common/JavaScript/types/exchange.ts @@ -5,7 +5,7 @@ import type { installVfsFile, registerDllBytes, loadIcuData } from "../../../../ import type { check, error, info, warn, debug } from "../../../../corehost/browserhost/loader/logging"; import type { createPromiseCompletionSource, getPromiseCompletionSource, isControllablePromise } from "../../../../corehost/browserhost/loader/promise-completion-source"; import type { resolveRunMainPromise, rejectRunMainPromise, getRunMainPromise } from "../../../../corehost/browserhost/loader/run"; -import type { zeroRegion } from "../../../System.Native.Browser/utils/memory"; +import type { isSharedArrayBuffer, zeroRegion } from "../../../System.Native.Browser/utils/memory"; import type { stringToUTF16, stringToUTF16Ptr, stringToUTF8Ptr, utf16ToString } from "../../../System.Native.Browser/utils/strings"; export type RuntimeExports = { @@ -78,6 +78,7 @@ export type BrowserUtilsExports = { stringToUTF16Ptr: typeof stringToUTF16Ptr, stringToUTF8Ptr: typeof stringToUTF8Ptr, zeroRegion: typeof zeroRegion, + isSharedArrayBuffer: typeof isSharedArrayBuffer } export type BrowserUtilsExportsTable = [ @@ -86,4 +87,5 @@ export type BrowserUtilsExportsTable = [ typeof stringToUTF16Ptr, typeof stringToUTF8Ptr, typeof zeroRegion, + typeof isSharedArrayBuffer, ] diff --git a/src/runtime/src/native/libs/Common/JavaScript/types/export-api.ts b/src/runtime/src/native/libs/Common/JavaScript/types/export-api.ts index 90d65cc84dd..59281204a5f 100644 --- a/src/runtime/src/native/libs/Common/JavaScript/types/export-api.ts +++ b/src/runtime/src/native/libs/Common/JavaScript/types/export-api.ts @@ -4,12 +4,6 @@ import type { CreateDotnetRuntimeType, DotnetHostBuilder, DotnetModuleConfig, ModuleAPI, LoaderConfig, IMemoryView, AssetEntry, GlobalizationMode, AssetBehaviors, RuntimeAPI, dotnet, exit } from "./public-api"; import type { EmscriptenModule } from "./emscripten"; -// Here, declare things that go in the global namespace, or augment existing declarations in the global namespace -declare global { - function getDotnetRuntime(runtimeId: number): RuntimeAPI | undefined; - const dotnetSidecar: boolean | undefined; -} - declare const createDotnetRuntime: CreateDotnetRuntimeType; export default createDotnetRuntime; diff --git a/src/runtime/src/native/libs/System.Native.Browser/ReadMe.md b/src/runtime/src/native/libs/System.Native.Browser/ReadMe.md index 19b1cc2f2e8..4005d0792d0 100644 --- a/src/runtime/src/native/libs/System.Native.Browser/ReadMe.md +++ b/src/runtime/src/native/libs/System.Native.Browser/ReadMe.md @@ -8,9 +8,9 @@ And a native library compiled by CMake into `libSystem.Native.Browser.a` as part ## Emscripten library - `native/index` compiled -> `libSystem.Native.Browser.js` linked ->`dotnet.native.js` - `libSystem.Native.Browser.footer.js` compiled -> `libSystem.Native.Browser.js` linked ->`dotnet.native.js` -- `libSystem.Browser.Utils.footer.js` compiled -> `libSystem.Browser.Utils.js` linked ->`dotnet.native.js` +- `libSystem.Native.Browser.Utils.footer.js` compiled -> `libSystem.Native.Browser.Utils.js` linked ->`dotnet.native.js` - `libSystem.Native.Browser.extpost.js` linked ->`dotnet.native.js` -- `ententrypoints.c` compiled -> `libSystem.Native.Browser.a` linked -> `dotnet.native.wasm` +- `entrypoints.c` compiled -> `libSystem.Native.Browser.a` linked -> `dotnet.native.wasm` ## Build TypeScript is compiled by `src/native/rollup.config.js` diff --git a/src/runtime/src/native/libs/System.Native.Browser/libSystem.Browser.Utils.footer.js b/src/runtime/src/native/libs/System.Native.Browser/libSystem.Native.Browser.Utils.footer.js similarity index 100% rename from src/runtime/src/native/libs/System.Native.Browser/libSystem.Browser.Utils.footer.js rename to src/runtime/src/native/libs/System.Native.Browser/libSystem.Native.Browser.Utils.footer.js diff --git a/src/runtime/src/native/libs/System.Native.Browser/native/crypto.ts b/src/runtime/src/native/libs/System.Native.Browser/native/crypto.ts index db2d0383251..2143d94ad20 100644 --- a/src/runtime/src/native/libs/System.Native.Browser/native/crypto.ts +++ b/src/runtime/src/native/libs/System.Native.Browser/native/crypto.ts @@ -22,7 +22,7 @@ export function SystemJS_RandomBytes(bufferPtr: number, bufferLength: number): n const targetView = memoryView.subarray(bufferPtr, bufferPtr + bufferLength); // When threading is enabled, Chrome doesn't want SharedArrayBuffer to be passed to crypto APIs - const needsCopy = false;//TODOHelpers.isSharedArrayBuffer(memoryView.buffer); + const needsCopy = dotnetBrowserUtilsExports.isSharedArrayBuffer(memoryView.buffer); const targetBuffer = needsCopy ? new Uint8Array(bufferLength) : targetView; diff --git a/src/runtime/src/native/libs/System.Native.Browser/native/globalization-locale.ts b/src/runtime/src/native/libs/System.Native.Browser/native/globalization-locale.ts index 76d770ff51a..0687aa5b44c 100644 --- a/src/runtime/src/native/libs/System.Native.Browser/native/globalization-locale.ts +++ b/src/runtime/src/native/libs/System.Native.Browser/native/globalization-locale.ts @@ -13,7 +13,7 @@ export function SystemJS_GetLocaleInfo(culture: number, cultureLength: number, l if (!localeName && localeNameOriginal) { // handle non-standard or malformed locales by forwarding the locale code dotnetBrowserUtilsExports.stringToUTF16(dst, dst + 2 * localeNameOriginal.length, localeNameOriginal); - dotnetApi.setHeapI32( dstLength, localeNameOriginal.length); + dotnetApi.setHeapI32(dstLength, localeNameOriginal.length); return VoidPtrNull; } const cultureNameOriginal = dotnetBrowserUtilsExports.utf16ToString(culture, (culture + 2 * cultureLength)); @@ -79,8 +79,8 @@ export function SystemJS_GetLocaleInfo(culture: number, cultureLength: number, l try { locale = locale.toLocaleLowerCase().replace("_", "-"); if (locale.startsWith("zh-")) { - // browser does not recognize "zh-chs" and "zh-cht" as equivalents of "zh-Hans" "zh-Hant", we are helping, otherwise - // it would throw on getCanonicalLocales with "RangeError: Incorrect locale information provided" + // browser does not recognize "zh-chs" and "zh-cht" as equivalents of "zh-Hans" "zh-Hant", we are helping, otherwise + // it would throw on getCanonicalLocales with "RangeError: Incorrect locale information provided" locale = locale.replace("-chs", "-Hans").replace("-cht", "-Hant"); } const canonicalLocales = (Intl as any).getCanonicalLocales(locale); diff --git a/src/runtime/src/native/libs/System.Native.Browser/utils/index.ts b/src/runtime/src/native/libs/System.Native.Browser/utils/index.ts index 8328cb2b486..7e4cfa6577c 100644 --- a/src/runtime/src/native/libs/System.Native.Browser/utils/index.ts +++ b/src/runtime/src/native/libs/System.Native.Browser/utils/index.ts @@ -10,6 +10,7 @@ import { getHeapB32, getHeapB8, getHeapU8, getHeapU16, getHeapU32, getHeapI8, getHeapI16, getHeapI32, getHeapI52, getHeapU52, getHeapI64Big, getHeapF32, getHeapF64, localHeapViewI8, localHeapViewI16, localHeapViewI32, localHeapViewI64Big, localHeapViewU8, localHeapViewU16, localHeapViewU32, localHeapViewF32, localHeapViewF64, zeroRegion, + isSharedArrayBuffer, } from "./memory"; import { stringToUTF16, stringToUTF16Ptr, stringToUTF8Ptr, utf16ToString } from "./strings"; import { exit, setEnvironmentVariable } from "./host"; @@ -41,6 +42,7 @@ export function dotnetInitializeModule(internals: InternalExchange): void { stringToUTF16Ptr, stringToUTF8Ptr, zeroRegion, + isSharedArrayBuffer, }); dotnetUpdateInternals(internals, dotnetUpdateInternalsSubscriber); function browserUtilsExportsToTable(map: BrowserUtilsExports): BrowserUtilsExportsTable { @@ -51,6 +53,7 @@ export function dotnetInitializeModule(internals: InternalExchange): void { map.stringToUTF16Ptr, map.stringToUTF8Ptr, map.zeroRegion, + map.isSharedArrayBuffer, ]; } } diff --git a/src/runtime/src/native/libs/System.Native.Browser/utils/memory.ts b/src/runtime/src/native/libs/System.Native.Browser/utils/memory.ts index bb6484c04be..9b9fb60dd0c 100644 --- a/src/runtime/src/native/libs/System.Native.Browser/utils/memory.ts +++ b/src/runtime/src/native/libs/System.Native.Browser/utils/memory.ts @@ -139,12 +139,12 @@ export function getHeapU16_local(localView: Uint16Array, offset: MemOffset): num } export function getHeapU32(offset: MemOffset): number { - return Module.HEAPU32[offset >>> 2]; + return Module.HEAPU32[offset >>> 2] >>> 0; } // does not check for growable heap export function getHeapU32_local(localView: Uint32Array, offset: MemOffset): number { - return localView[offset >>> 2]; + return localView[offset >>> 2] >>> 0; } export function getHeapI8(offset: MemOffset): number { diff --git a/src/runtime/src/native/managed/Directory.Build.props b/src/runtime/src/native/managed/Directory.Build.props index a431ff1b38f..05195ea7798 100644 --- a/src/runtime/src/native/managed/Directory.Build.props +++ b/src/runtime/src/native/managed/Directory.Build.props @@ -1,4 +1,8 @@ - - + + + + + true + diff --git a/src/runtime/src/native/managed/cdac/Directory.Build.props b/src/runtime/src/native/managed/cdac/Directory.Build.props index 41402cb0183..b8fb4646ebd 100644 --- a/src/runtime/src/native/managed/cdac/Directory.Build.props +++ b/src/runtime/src/native/managed/cdac/Directory.Build.props @@ -1,5 +1,12 @@ + + + false + false + true + + <_Parameter1>NETCDAC0001 diff --git a/src/runtime/src/native/minipal/thread.h b/src/runtime/src/native/minipal/thread.h index 5d2225df125..0f0c1ae1e8b 100644 --- a/src/runtime/src/native/minipal/thread.h +++ b/src/runtime/src/native/minipal/thread.h @@ -4,6 +4,8 @@ #ifndef HAVE_MINIPAL_THREAD_H #define HAVE_MINIPAL_THREAD_H +#ifndef HOST_WINDOWS + #include #include #include @@ -36,6 +38,42 @@ extern "C" { #endif +/** + * Get the current thread ID without caching in a TLS variable. + * + * @return The current thread ID as a size_t value. + */ +static inline size_t minipal_get_current_thread_id_no_cache(void) +{ + size_t tid; +#if defined(__wasm) && !defined(_REENTRANT) + tid = 1; // In non-reentrant WASM builds, we define a single thread with ID 1. +#else // !__wasm || _REENTRANT + +#if defined(__linux__) + tid = (size_t)syscall(SYS_gettid); +#elif defined(__APPLE__) + uint64_t thread_id; + pthread_threadid_np(pthread_self(), &thread_id); + tid = (size_t)thread_id; // Cast the uint64_t thread ID to size_t +#elif defined(__FreeBSD__) + tid = (size_t)pthread_getthreadid_np(); +#elif defined(__NetBSD__) + tid = (size_t)_lwp_self(); +#elif defined(__HAIKU__) + tid = (size_t)find_thread(NULL); +#elif defined(__sun) + tid = (size_t)pthread_self(); +#elif defined(__wasm) + tid = (size_t)(void*)pthread_self(); +#else +#error "Unsupported platform" +#endif + +#endif // __wasm && !_REENTRANT + return tid; +} + /** * Get the current thread ID. * @@ -44,7 +82,7 @@ extern "C" { static inline size_t minipal_get_current_thread_id(void) { #if defined(__wasm) && !defined(_REENTRANT) - return 1; // In non-reentrant WASM builds, we define a single thread with ID 1. + return minipal_get_current_thread_id_no_cache(); #else // !__wasm || _REENTRANT #if defined(__GNUC__) && !defined(__clang__) && defined(__cplusplus) @@ -57,25 +95,7 @@ static inline size_t minipal_get_current_thread_id(void) if (!tid) { -#if defined(__linux__) - tid = (size_t)syscall(SYS_gettid); -#elif defined(__APPLE__) - uint64_t thread_id; - pthread_threadid_np(pthread_self(), &thread_id); - tid = (size_t)thread_id; // Cast the uint64_t thread ID to size_t -#elif defined(__FreeBSD__) - tid = (size_t)pthread_getthreadid_np(); -#elif defined(__NetBSD__) - tid = (size_t)_lwp_self(); -#elif defined(__HAIKU__) - tid = (size_t)find_thread(NULL); -#elif defined(__sun) - tid = (size_t)pthread_self(); -#elif defined(__wasm) - tid = (size_t)(void*)pthread_self(); -#else -#error "Unsupported platform" -#endif + tid = minipal_get_current_thread_id_no_cache(); } return tid; @@ -118,8 +138,11 @@ static inline int minipal_set_thread_name(pthread_t thread, const char* name) #endif } + #ifdef __cplusplus } #endif // extern "C" +#endif // !HOST_WINDOWS + #endif // HAVE_MINIPAL_THREAD_H diff --git a/src/runtime/src/native/package.json b/src/runtime/src/native/package.json index c33fc705b4e..5f4d6f1f0cf 100644 --- a/src/runtime/src/native/package.json +++ b/src/runtime/src/native/package.json @@ -12,8 +12,8 @@ "scripts": { "rollup:stub": "node rollup.stub.js", "rollup:cmake": "rollup -c --environment ", - "rollup:release": "rollup -c --environment Configuration:Release,ProductVersion:10.0.0-dev,ContinuousIntegrationBuild:false", - "rollup:debug": "rollup -c --environment Configuration:Debug,ProductVersion:10.0.0-dev,ContinuousIntegrationBuild:false", + "rollup:release": "rollup -c --environment Configuration:Release,ProductVersion:11.0.0-dev,ContinuousIntegrationBuild:false", + "rollup:debug": "rollup -c --environment Configuration:Debug,ProductVersion:11.0.0-dev,ContinuousIntegrationBuild:false", "lint": "eslint --no-color --max-warnings=0 \"./**/*.ts\" \"./**/*.js\"", "format": "eslint --fix \"./**/*.ts\" \"./*.js\"" }, diff --git a/src/runtime/src/native/rollup.config.js b/src/runtime/src/native/rollup.config.js index c3ac6964711..a0504349a19 100644 --- a/src/runtime/src/native/rollup.config.js +++ b/src/runtime/src/native/rollup.config.js @@ -74,8 +74,8 @@ const libBrowserUtils = configure({ output: [{ name: "libBrowserUtils", format: "iife", - file: staticLibDestination + "/libSystem.Browser.Utils.js", - footer: await fs.readFile("./libs/System.Native.Browser/libSystem.Browser.Utils.footer.js"), + file: staticLibDestination + "/libSystem.Native.Browser.Utils.js", + footer: await fs.readFile("./libs/System.Native.Browser/libSystem.Native.Browser.Utils.footer.js"), }], terser: { compress: { diff --git a/src/runtime/src/tasks/Microsoft.NET.Sdk.WebAssembly.Pack.Tasks/ArtifactWriter.cs b/src/runtime/src/tasks/Microsoft.NET.Sdk.WebAssembly.Pack.Tasks/ArtifactWriter.cs index 331e8b28fb7..1d0e431cba3 100644 --- a/src/runtime/src/tasks/Microsoft.NET.Sdk.WebAssembly.Pack.Tasks/ArtifactWriter.cs +++ b/src/runtime/src/tasks/Microsoft.NET.Sdk.WebAssembly.Pack.Tasks/ArtifactWriter.cs @@ -48,7 +48,7 @@ public static bool PersistFileIfChanged(TaskLoggingHelper log, byte[] data, stri private static string ComputeHash(byte[] data) { -#if NET6_0_OR_GREATER +#if NET var hash = SHA256.HashData(data); return Convert.ToBase64String(hash); #else diff --git a/src/runtime/src/tests/Common/CLRTest.CrossGen.targets b/src/runtime/src/tests/Common/CLRTest.CrossGen.targets index 9c883118e0a..6fdd2000655 100644 --- a/src/runtime/src/tests/Common/CLRTest.CrossGen.targets +++ b/src/runtime/src/tests/Common/CLRTest.CrossGen.targets @@ -184,7 +184,7 @@ if [ ! -z ${RunCrossGen2+x} ]%3B then do echo $dllFile bareFileName="${dllFile##*/}" - RunCrossgen2OnFiles "$PWD/$bareFileName" "$dllFile" + RunCrossgen2OnFiles "$PWD/$bareFileName" "$PWD/$bareFileName" "$dllFile" if [ $__cg2ExitCode -ne 0 ]; then break fi diff --git a/src/runtime/src/tests/Common/GenerateHWIntrinsicTests/Arm/Sve2Tests.cs b/src/runtime/src/tests/Common/GenerateHWIntrinsicTests/Arm/Sve2Tests.cs index 6ad73360c19..ff34ba5f722 100644 --- a/src/runtime/src/tests/Common/GenerateHWIntrinsicTests/Arm/Sve2Tests.cs +++ b/src/runtime/src/tests/Common/GenerateHWIntrinsicTests/Arm/Sve2Tests.cs @@ -222,13 +222,11 @@ public static (string templateFileName, Dictionary templateData) ("SveVecTernOpTest.template", new Dictionary { ["TestName"] = "Sve2_BitwiseSelectRightInverted_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "BitwiseSelectRightInverted", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != Helpers.BitwiseSelectRightInverted(firstOp[i], secondOp[i], thirdOp[i])", ["GetIterResult"] = "Helpers.BitwiseSelectRightInverted(firstOp[i], secondOp[i], thirdOp[i])"}), ("SveVecTernOpTest.template", new Dictionary { ["TestName"] = "Sve2_BitwiseSelectRightInverted_ulong", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "BitwiseSelectRightInverted", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != Helpers.BitwiseSelectRightInverted(firstOp[i], secondOp[i], thirdOp[i])", ["GetIterResult"] = "Helpers.BitwiseSelectRightInverted(firstOp[i], secondOp[i], thirdOp[i])"}), - ("SveSimpleVecOpDiffRetTypeTest.template", new Dictionary { ["TestName"] = "Sve2_ConvertToDoubleOdd_double_float", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ConvertToDoubleOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Single", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSingle()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.ConvertToDouble(firstOp[i * 2 + 1]) != result[i]", ["GetIterResult"] = "Helpers.ConvertToDouble(left[i * 2 + 1])"}), + ("SveSimpleVecOpDiffRetTypeFloats.template", new Dictionary { ["TestName"] = "Sve2_ConvertToDoubleOdd_double_float", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ConvertToDoubleOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Single", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSingle()", ["ConvertFunc"] = "BitConverter.DoubleToInt64Bits", ["ValidateIterResult"] = "Helpers.ConvertToDouble(firstOp[i * 2 + 1]) != result[i]", ["GetIterResult"] = "Helpers.ConvertToDouble(left[i * 2 + 1])"}), + ("SveSimpleVecOpDiffRetTypeFloats.template", new Dictionary { ["TestName"] = "Sve2_ConvertToSingleEvenRoundToOdd_float_double", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ConvertToSingleEvenRoundToOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Single", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ConvertFunc"] = "BitConverter.SingleToInt32Bits", ["ValidateIterResult"] = "Helpers.ConvertToSingleEvenRoundToOdd(firstOp, i) != result[i]", ["GetIterResult"] = "Helpers.ConvertToSingleEvenRoundToOdd(left, i)"}), - ("SveSimpleVecOpDiffRetTypeTest.template", new Dictionary { ["TestName"] = "Sve2_ConvertToSingleEvenRoundToOdd_float_double", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ConvertToSingleEvenRoundToOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Single", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.ConvertToSingleEvenRoundToOdd(firstOp, i) != result[i]", ["GetIterResult"] = "Helpers.ConvertToSingleEvenRoundToOdd(left, i)"}), - - ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_ConvertToSingleOdd_float_double", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ConvertToSingleOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Single", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Single", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSingle()", ["NextValueOp2"] = "TestLibrary.Generator.GetDouble()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.ConvertToSingleOdd(left, right, i) != result[i]", ["GetIterResult"] = "Helpers.ConvertToSingleOdd(left, right, i)"}), - - ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_ConvertToSingleOddRoundToOdd_float_double", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ConvertToSingleOddRoundToOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Single", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Single", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSingle()", ["NextValueOp2"] = "TestLibrary.Generator.GetDouble()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.ConvertToSingleOddRoundToOdd(left, right, i) != result[i]", ["GetIterResult"] = "Helpers.ConvertToSingleOddRoundToOdd(left, right, i)"}), + ("SveVecBinOpDiffRetTypeFloats.template", new Dictionary { ["TestName"] = "Sve2_ConvertToSingleOdd_float_double", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ConvertToSingleOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Single", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Single", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSingle()", ["NextValueOp2"] = "TestLibrary.Generator.GetDouble()", ["ConvertFunc"] = "BitConverter.SingleToInt32Bits", ["ValidateIterResult"] = "Helpers.ConvertToSingleOdd(left, right, i) != result[i]", ["GetIterResult"] = "Helpers.ConvertToSingleOdd(left, right, i)"}), + ("SveVecBinOpDiffRetTypeFloats.template", new Dictionary { ["TestName"] = "Sve2_ConvertToSingleOddRoundToOdd_float_double", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ConvertToSingleOddRoundToOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Single", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Single", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSingle()", ["NextValueOp2"] = "TestLibrary.Generator.GetDouble()", ["ConvertFunc"] = "BitConverter.SingleToInt32Bits", ["ValidateIterResult"] = "Helpers.ConvertToSingleOddRoundToOdd(left, right, i) != result[i]", ["GetIterResult"] = "Helpers.ConvertToSingleOddRoundToOdd(left, right, i)"}), ("SveVecImmTernOpFirstArgTest.template", new Dictionary { ["TestName"] = "Sve2_DotProductRotateComplex_int_sbyte_0", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "DotProductRotateComplex", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "SByte", ["Op4BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp3"] = "TestLibrary.Generator.GetSByte()", ["Imm"] = "0", ["InvalidImm"] = "4", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.DotProductRotateComplex(first[i], second, 4 * i, third, Imm) != result[i]", ["GetIterResult"] = "Helpers.DotProductRotateComplex(first[i], second, 4 * i, third, Imm)"}), ("SveVecImmTernOpFirstArgTest.template", new Dictionary { ["TestName"] = "Sve2_DotProductRotateComplex_int_sbyte_1", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "DotProductRotateComplex", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "SByte", ["Op4BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp3"] = "TestLibrary.Generator.GetSByte()", ["Imm"] = "1", ["InvalidImm"] = "4", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.DotProductRotateComplex(first[i], second, 4 * i, third, Imm) != result[i]", ["GetIterResult"] = "Helpers.DotProductRotateComplex(first[i], second, 4 * i, third, Imm)"}), diff --git a/src/runtime/src/tests/Common/GenerateHWIntrinsicTests/Arm/Templates.cs b/src/runtime/src/tests/Common/GenerateHWIntrinsicTests/Arm/Templates.cs index cdf2f8340f7..e9a46129d90 100644 --- a/src/runtime/src/tests/Common/GenerateHWIntrinsicTests/Arm/Templates.cs +++ b/src/runtime/src/tests/Common/GenerateHWIntrinsicTests/Arm/Templates.cs @@ -311,12 +311,14 @@ public static (string templateFileName, string outputTemplateName, Dictionary { ["TemplateName"] = "SecureHash", ["TemplateValidationLogic"] = SecureHashOpTest_ValidationLogic }), ("_SveUnaryOpTestTemplate.template", "SveSimpleVecOpTest.template", new Dictionary { ["TemplateName"] = "Simple", ["TemplateValidationLogic"] = SimpleVecOpTest_ValidationLogic, ["TemplateValidationLogicForCndSel"] = SimpleVecOpTest_ValidationLogicForCndSel, ["TemplateValidationLogicForCndSel_FalseValue"] = SimpleVecOpTest_ValidationLogicForCndSel_FalseValue }), ("_SveUnaryOpDifferentRetTypeTestTemplate.template", "SveSimpleVecOpDiffRetTypeTest.template", new Dictionary { ["TemplateName"] = "Simple", ["TemplateValidationLogic"] = SimpleVecOpTest_ValidationLogic, ["TemplateValidationLogicForCndSel"] = SimpleVecOpTest_ValidationLogicForCndSel, ["TemplateValidationLogicForCndSel_FalseValue"] = SimpleVecOpTest_ValidationLogicForCndSel_FalseValue }), + ("_SveUnaryOpDifferentRetTypeTestTemplate.template", "SveSimpleVecOpDiffRetTypeFloats.template", new Dictionary { ["TemplateName"] = "Simple", ["TemplateValidationLogic"] = SimpleVecOpTest_ValidationLogic, ["TemplateValidationLogicForCndSel"] = SimpleVecOpTest_ValidationLogicForCndSelForNarrowing, ["TemplateValidationLogicForCndSel_FalseValue"] = SimpleVecOpTest_ValidationLogicForCndSelForNarrowing_FalseValue }), ("_SveUnaryOpDifferentRetTypeTestTemplate.template", "SveSimpleVecOpNarrowingTest.template", new Dictionary { ["TemplateName"] = "Simple", ["TemplateValidationLogic"] = SimpleVecOpTest_ValidationLogicForNarrowing, ["TemplateValidationLogicForCndSel"] = SimpleVecOpTest_ValidationLogicForCndSelForNarrowing, ["TemplateValidationLogicForCndSel_FalseValue"] = SimpleVecOpTest_ValidationLogicForCndSelForNarrowing_FalseValue }), ("_SveUnaryOpDifferentRetTypeTestTemplate.template", "SveSimpleVecOpDiffRetTypeTestVec.template", new Dictionary { ["TemplateName"] = "Simple", ["TemplateValidationLogic"] = SimpleVecOpTest_VectorValidationLogic, ["TemplateValidationLogicForCndSel"] = SimpleVecOpTest_VectorValidationLogicForCndSel, ["TemplateValidationLogicForCndSel_FalseValue"] = SimpleVecOpTest_VectorValidationLogicForCndSel_FalseValue }), ("_SveBinaryOpTestTemplate.template", "SveVecBinOpTest.template", new Dictionary { ["TemplateName"] = "Simple", ["TemplateValidationLogic"] = SimpleVecOpTest_ValidationLogic, ["TemplateValidationLogicForCndSel"] = SimpleVecOpTest_ValidationLogicForCndSel, ["TemplateValidationLogicForCndSel_FalseValue"] = SimpleVecOpTest_ValidationLogicForCndSel_FalseValue }), ("_SveBinaryOpTestTemplate.template", "SveVecBinOpVecTest.template", new Dictionary { ["TemplateName"] = "Simple", ["TemplateValidationLogic"] = SimpleVecOpTest_VectorValidationLogic, ["TemplateValidationLogicForCndSel"] = SimpleVecOpTest_VectorValidationLogicForCndSel, ["TemplateValidationLogicForCndSel_FalseValue"] = SimpleVecOpTest_VectorValidationLogicForCndSel_FalseValue }), ("_SveBinaryOpTestTemplate.template", "SveVecBinOpConvertTest.template", new Dictionary { ["TemplateName"] = "Simple", ["TemplateValidationLogic"] = SimpleVecOpTest_ValidationLogic, ["TemplateValidationLogicForCndSel"] = SimpleTernVecOpTest_ValidationLogicForCndSel, ["TemplateValidationLogicForCndSel_FalseValue"] = SimpleTernVecOpTest_ValidationLogicForCndSel_FalseValue }), - ("_SveBinaryOpDifferentRetTypeTestTemplate.template", "SveVecBinOpDifferentRetType.template", new Dictionary { ["TemplateName"] = "Simple", ["TemplateValidationLogic"] = SimpleVecOpTest_ValidationLogic, ["TemplateValidationLogicForCndSel"] = SimpleVecOpTest_ValidationLogicForCndSel, ["TemplateValidationLogicForCndSel_FalseValue"] = SimpleVecOpTest_ValidationLogicForCndSel_FalseValue}), + ("_SveBinaryOpDifferentRetTypeTestTemplate.template", "SveVecBinOpDifferentRetType.template", new Dictionary { ["TemplateName"] = "Simple", ["TemplateValidationLogic"] = SimpleVecOpTest_ValidationLogic, ["TemplateValidationLogicForCndSel"] = SimpleVecOpTest_ValidationLogicForCndSel, ["TemplateValidationLogicForCndSel_FalseValue"] = SimpleVecOpTest_ValidationLogicForCndSel_FalseValue }), + ("_SveBinaryOpDifferentRetTypeTestTemplate.template", "SveVecBinOpDiffRetTypeFloats.template", new Dictionary { ["TemplateName"] = "Simple", ["TemplateValidationLogic"] = SimpleVecOpTest_ValidationLogic, ["TemplateValidationLogicForCndSel"] = SimpleVecOpTest_ValidationLogicForCndSelForNarrowing, ["TemplateValidationLogicForCndSel_FalseValue"] = SimpleVecOpTest_ValidationLogicForCndSelForNarrowing_FalseValue }), ("_SveMasklessBinaryOpTestTemplate.template", "SveVecBinOpTestScalarRet.template", new Dictionary { ["TemplateName"] = "Simple", ["TemplateValidationLogic"] = SimpleScalarOpTest_ValidationLogic }), ("_SveBinaryRetMaskOpTestTemplate.template", "SveVecBinRetMaskOpConvertTest.template", new Dictionary { ["TemplateName"] = "Simple", ["TemplateValidationLogic"] = SimpleVecOpTest_ValidationLogic, ["TemplateValidationLogicForCndSel"] = SimpleTernVecOpTest_ValidationLogicForCndSel, ["TemplateValidationLogicForCndSel_FalseValue"] = SimpleTernVecOpTest_ValidationLogicForCndSel_FalseValue, ["TemplateValidationLogicForCndSelMask"] = SimpleVecOpTest_ValidationLogicForCndSelMask }), ("_SveBinaryOpDifferentTypesTestTemplate.template", "SveVecBinOpDifferentTypesTest.template", new Dictionary { ["TemplateName"] = "Simple", ["TemplateValidationLogic"] = SimpleVecOpTest_ValidationLogic, ["TemplateValidationLogicForCndSel"] = SimpleVecOpTest_ValidationLogicForCndSel, ["TemplateValidationLogicForCndSel_FalseValue"] = SimpleVecOpTest_ValidationLogicForCndSel_FalseValue }), diff --git a/src/runtime/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs b/src/runtime/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs index cc00b9f6db1..d8f9646f54e 100644 --- a/src/runtime/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs +++ b/src/runtime/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs @@ -7929,25 +7929,25 @@ public static T XorRotateRight(T op1, T op2, int shift) where T : IBinaryInte public static sbyte SveShiftArithmeticSaturate(sbyte op1, sbyte op2) => ArithmeticShift(op1, (int)ShiftSat(-op2, 8), saturate: true); - public static sbyte SveShiftArithmeticRoundedSaturate(sbyte op1, sbyte op2) => SignedShift(op1, op2, rounding: true, saturating: true, shiftSat: true); + public static sbyte SveShiftArithmeticRoundedSaturate(sbyte op1, sbyte op2) => ArithmeticShift(op1, (int)ShiftSat(-op2, 8), rounding: true, saturate: true); public static short SveShiftArithmeticRounded(short op1, short op2) => SignedShift(op1, op2, rounding: true, shiftSat: true); public static short SveShiftArithmeticSaturate(short op1, short op2) => ArithmeticShift(op1, (int)ShiftSat(-op2, 16), saturate: true); - public static short SveShiftArithmeticRoundedSaturate(short op1, short op2) => SignedShift(op1, op2, rounding: true, saturating: true, shiftSat: true); + public static short SveShiftArithmeticRoundedSaturate(short op1, short op2) => ArithmeticShift(op1, (int)ShiftSat(-op2, 16), rounding: true, saturate: true); public static int SveShiftArithmeticRounded(int op1, int op2) => SignedShift(op1, op2, rounding: true, shiftSat: true); public static int SveShiftArithmeticSaturate(int op1, int op2) => ArithmeticShift(op1, (int)ShiftSat(-op2, 32), saturate: true); - public static int SveShiftArithmeticRoundedSaturate(int op1, int op2) => SignedShift(op1, op2, rounding: true, saturating: true, shiftSat: true); + public static int SveShiftArithmeticRoundedSaturate(int op1, int op2) => ArithmeticShift(op1, (int)ShiftSat(-op2, 32), rounding: true, saturate: true); public static long SveShiftArithmeticRounded(long op1, long op2) => SignedShift(op1, op2, rounding: true, shiftSat: true); public static long SveShiftArithmeticSaturate(long op1, long op2) => ArithmeticShift(op1, (int)ShiftSat(-op2, 64), saturate: true); - public static long SveShiftArithmeticRoundedSaturate(long op1, long op2) => SignedShift(op1, op2, rounding: true, saturating: true, shiftSat: true); + public static long SveShiftArithmeticRoundedSaturate(long op1, long op2) => ArithmeticShift(op1, (int)ShiftSat(-op2, 64), rounding: true, saturate: true); public static byte SveShiftLeftLogicalSaturate(byte op1, sbyte op2) => UnsignedShift(op1, op2, saturating: true, shiftSat: true); @@ -8015,14 +8015,13 @@ public static U ArithmeticShift(T value, int count, bool rounding = false, where U : IBinaryInteger, IMinMaxValue { BigInteger v = BigInteger.CreateChecked(value); - BigInteger shifted = new BigInteger(); + BigInteger shifted; if (count > 0) { if (rounding) { - long bias = 1L << (count - 1); - shifted = v >= 0 ? (v + bias) >> count - : (v - bias) >> count; + BigInteger bias = BigInteger.One << (count - 1); + shifted = (v + bias) >> count; } else { diff --git a/src/runtime/src/tests/JIT/Methodical/Methodical_d1.csproj b/src/runtime/src/tests/JIT/Methodical/Methodical_d1.csproj index eaeba4dee33..aada00d39f3 100644 --- a/src/runtime/src/tests/JIT/Methodical/Methodical_d1.csproj +++ b/src/runtime/src/tests/JIT/Methodical/Methodical_d1.csproj @@ -1,5 +1,6 @@ + full true diff --git a/src/runtime/src/tests/JIT/Methodical/Methodical_d2.csproj b/src/runtime/src/tests/JIT/Methodical/Methodical_d2.csproj index 3053cf52ca4..7a5dd99beab 100644 --- a/src/runtime/src/tests/JIT/Methodical/Methodical_d2.csproj +++ b/src/runtime/src/tests/JIT/Methodical/Methodical_d2.csproj @@ -1,5 +1,6 @@ + full true @@ -144,4 +145,4 @@ - \ No newline at end of file + diff --git a/src/runtime/src/tests/JIT/Methodical/Methodical_do.csproj b/src/runtime/src/tests/JIT/Methodical/Methodical_do.csproj index 7447e30fe06..3bab9dac448 100644 --- a/src/runtime/src/tests/JIT/Methodical/Methodical_do.csproj +++ b/src/runtime/src/tests/JIT/Methodical/Methodical_do.csproj @@ -1,5 +1,7 @@ + full + true true diff --git a/src/runtime/src/tests/JIT/Methodical/Methodical_r1.csproj b/src/runtime/src/tests/JIT/Methodical/Methodical_r1.csproj index 16220f3b975..1fccfb11b67 100644 --- a/src/runtime/src/tests/JIT/Methodical/Methodical_r1.csproj +++ b/src/runtime/src/tests/JIT/Methodical/Methodical_r1.csproj @@ -1,5 +1,6 @@ + none true diff --git a/src/runtime/src/tests/JIT/Methodical/Methodical_r2.csproj b/src/runtime/src/tests/JIT/Methodical/Methodical_r2.csproj index f07b36dfa1e..b8e17fa426f 100644 --- a/src/runtime/src/tests/JIT/Methodical/Methodical_r2.csproj +++ b/src/runtime/src/tests/JIT/Methodical/Methodical_r2.csproj @@ -1,5 +1,6 @@ + none true @@ -144,4 +145,4 @@ - \ No newline at end of file + diff --git a/src/runtime/src/tests/JIT/Methodical/Methodical_ro.csproj b/src/runtime/src/tests/JIT/Methodical/Methodical_ro.csproj index edabd5c971a..9483d507e7c 100644 --- a/src/runtime/src/tests/JIT/Methodical/Methodical_ro.csproj +++ b/src/runtime/src/tests/JIT/Methodical/Methodical_ro.csproj @@ -1,5 +1,7 @@ + none + true true diff --git a/src/runtime/src/tools/illink/src/linker/CompatibilitySuppressions.xml b/src/runtime/src/tools/illink/src/linker/CompatibilitySuppressions.xml index eba23205563..ea5cd7c17ab 100644 --- a/src/runtime/src/tools/illink/src/linker/CompatibilitySuppressions.xml +++ b/src/runtime/src/tools/illink/src/linker/CompatibilitySuppressions.xml @@ -564,8 +564,6 @@ CP0001 T:Mono.Linker.Dataflow.TrimAnalysisGenericInstantiationAccessPattern - ref/net10.0/illink.dll - lib/net10.0/illink.dll CP0002 @@ -1538,14 +1536,10 @@ CP0002 M:Mono.Linker.LinkContext.get_DisableGeneratedCodeHeuristics - ref/net10.0/illink.dll - lib/net10.0/illink.dll CP0002 M:Mono.Linker.LinkContext.set_DisableGeneratedCodeHeuristics(System.Boolean) - ref/net10.0/illink.dll - lib/net10.0/illink.dll CP0008 diff --git a/src/runtime/src/tools/illink/test/ILLink.RoslynAnalyzer.Tests/TestCaseCompilation.cs b/src/runtime/src/tools/illink/test/ILLink.RoslynAnalyzer.Tests/TestCaseCompilation.cs index 16e4c6d9921..94e829fc71e 100644 --- a/src/runtime/src/tools/illink/test/ILLink.RoslynAnalyzer.Tests/TestCaseCompilation.cs +++ b/src/runtime/src/tools/illink/test/ILLink.RoslynAnalyzer.Tests/TestCaseCompilation.cs @@ -67,7 +67,12 @@ public static (CompilationWithAnalyzers Compilation, SemanticModel SemanticModel specificDiagnosticOptions: new Dictionary { // Allow the polyfilled DynamicallyAccessedMembersAttribute to take precedence over the one in corelib. - { "CS0436", ReportDiagnostic.Suppress } + { "CS0436", ReportDiagnostic.Suppress }, + // Suppress assembly reference version mismatch warnings. The linker test assemblies are built against + // NetCoreAppToolCurrent, but during test execution we recompile individual test files against the live + // libraries along with a reference to one of the already-built linker test assemblies. + { "CS1701", ReportDiagnostic.Suppress }, + { "CS1702", ReportDiagnostic.Suppress } })); var analyzerOptions = new AnalyzerOptions( additionalFiles: additionalFiles?.ToImmutableArray() ?? ImmutableArray.Empty, diff --git a/src/source-manifest.json b/src/source-manifest.json index ba0c98a1b46..afffd7056c7 100644 --- a/src/source-manifest.json +++ b/src/source-manifest.json @@ -1,221 +1,221 @@ -{ - "repositories": [ - { - "barId": 293804, - "path": "arcade", - "remoteUri": "https://github.com/dotnet/arcade", - "commitSha": "17c915fe8e3094d636fb256f2c2860f38ea7b121" - }, - { - "barId": 294076, - "path": "aspnetcore", - "remoteUri": "https://github.com/dotnet/aspnetcore", - "commitSha": "73ce13e67ec6dbf004b0f85508ae9920e30e0cb6" - }, - { - "barId": 292148, - "path": "cecil", - "remoteUri": "https://github.com/dotnet/cecil", - "commitSha": "82f47fc2ff84b3d94e910147d52f2e6795f6ae21" - }, - { - "barId": 291857, - "path": "command-line-api", - "remoteUri": "https://github.com/dotnet/command-line-api", - "commitSha": "cf5fd8d696450a48d3cc75a7a1792d34b5303f88" - }, - { - "barId": 292166, - "path": "deployment-tools", - "remoteUri": "https://github.com/dotnet/deployment-tools", - "commitSha": "56c3d96916e1b2bb065732ffedd6b9e0285a6ed4" - }, - { - "barId": 288647, - "path": "diagnostics", - "remoteUri": "https://github.com/dotnet/diagnostics", - "commitSha": "73f1fdca8d9fb191297a7e687790b804f4e78ef5" - }, - { - "barId": 294084, - "path": "efcore", - "remoteUri": "https://github.com/dotnet/efcore", - "commitSha": "bdeac5b76b25f4e027e8043a39e0c637a9914d8a" - }, - { - "barId": 292157, - "path": "emsdk", - "remoteUri": "https://github.com/dotnet/emsdk", - "commitSha": "f8b85873c9157f00b4951a78977fa87e3ab7c628" - }, - { - "barId": 293499, - "path": "fsharp", - "remoteUri": "https://github.com/dotnet/fsharp", - "commitSha": "89d788641914c5d0b87fddfa11f4df0b5cfaa73d" - }, - { - "barId": 294042, - "path": "msbuild", - "remoteUri": "https://github.com/dotnet/msbuild", - "commitSha": "60df124f65e3ad02433097bd7067f9c030fa1af1" - }, - { - "barId": 279847, - "path": "nuget-client", - "remoteUri": "https://github.com/nuget/nuget.client", - "commitSha": "56f4657d7585ec12b61c623756ca4b2b810c4863" - }, - { - "barId": 289390, - "path": "razor", - "remoteUri": "https://github.com/dotnet/razor", - "commitSha": "2d8783f051d7f5d31fc1b2014de263ded199eb3f" - }, - { - "barId": 286437, - "path": "roslyn", - "remoteUri": "https://github.com/dotnet/roslyn", - "commitSha": "a01d6a0838430706cea74ad38e054c2877ffbfa1" - }, - { - "barId": 293591, - "path": "runtime", - "remoteUri": "https://github.com/maestro-auth-test/runtime", - "commitSha": "bce6119e41ecfbcf630c369836770669604c22c6" - }, - { - "barId": 291013, - "path": "scenario-tests", - "remoteUri": "https://github.com/dotnet/scenario-tests", - "commitSha": "21ded7efec7463ab807b22a8e119b228d4039a1c" - }, - { - "barId": 289294, - "path": "sdk", - "remoteUri": "https://github.com/dotnet/sdk", - "commitSha": "6a6992f5fc42dbd06cd24f3a7db40013035d3965" - }, - { - "barId": 293746, - "path": "source-build-reference-packages", - "remoteUri": "https://github.com/dotnet/source-build-reference-packages", - "commitSha": "1c0ba39805434d3be12679eb7fe5deb9a221e32c" - }, - { - "barId": 293523, - "path": "sourcelink", - "remoteUri": "https://github.com/dotnet/sourcelink", - "commitSha": "d656e7bc73c28d039e6baf6d591c905ea8b76ee1" - }, - { - "barId": 291112, - "path": "symreader", - "remoteUri": "https://github.com/dotnet/symreader", - "commitSha": "2255aa6d6c21541848933c33f72e60363041abaf" - }, - { - "barId": 292030, - "path": "templating", - "remoteUri": "https://github.com/dotnet/templating", - "commitSha": "41ef93aacf72633b58372a9841d8940f6d87ae26" - }, - { - "barId": 293953, - "path": "vstest", - "remoteUri": "https://github.com/microsoft/vstest", - "commitSha": "bbee830b0ef18eb5b4aa5daee65ae35a34f8c132" - }, - { - "barId": 292669, - "path": "windowsdesktop", - "remoteUri": "https://github.com/dotnet/windowsdesktop", - "commitSha": "132afbade9e2ce626f26e27c136f34af73dde2f1" - }, - { - "barId": 294066, - "path": "winforms", - "remoteUri": "https://github.com/dotnet/winforms", - "commitSha": "6b55842360e78bd1d7b15977694524fc092b7cc7" - }, - { - "barId": 293871, - "path": "wpf", - "remoteUri": "https://github.com/dotnet/wpf", - "commitSha": "37b9597bebaf48196a05f6d6212ec1e9bc24352f" - }, - { - "barId": 291230, - "path": "xdt", - "remoteUri": "https://github.com/dotnet/xdt", - "commitSha": "a37116d1c37e696cc70fc138c01d02dff7542d82" - } - ], - "submodules": [ - { - "path": "aspnetcore/src/submodules/googletest", - "remoteUri": "https://github.com/google/googletest", - "commitSha": "1b96fa13f549387b7549cc89e1a785cf143a1a50" - }, - { - "path": "aspnetcore/src/submodules/MessagePack-CSharp", - "remoteUri": "https://github.com/aspnet/MessagePack-CSharp.git", - "commitSha": "9aeb12b9bdb024512ffe2e4bddfa2785dca6e39e" - }, - { - "path": "nuget-client/submodules/NuGet.Build.Localization", - "remoteUri": "https://github.com/NuGet/NuGet.Build.Localization.git", - "commitSha": "f15db7b7c6f5affbea268632ef8333d2687c8031" - }, - { - "path": "source-build-reference-packages/src/externalPackages/src/abstractions-xunit", - "remoteUri": "https://github.com/xunit/abstractions.xunit", - "commitSha": "b75d54d73b141709f805c2001b16f3dd4d71539d" - }, - { - "path": "source-build-reference-packages/src/externalPackages/src/application-insights", - "remoteUri": "https://github.com/microsoft/ApplicationInsights-dotnet", - "commitSha": "2faa7e8b157a431daa2e71785d68abd5fa817b53" - }, - { - "path": "source-build-reference-packages/src/externalPackages/src/azure-activedirectory-identitymodel-extensions-for-dotnet", - "remoteUri": "https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet.git", - "commitSha": "e67b25be77532af9ba405670b34b4d263d505fde" - }, - { - "path": "source-build-reference-packages/src/externalPackages/src/cssparser", - "remoteUri": "https://github.com/dotnet/cssparser", - "commitSha": "0d59611784841735a7778a67aa6e9d8d000c861f" - }, - { - "path": "source-build-reference-packages/src/externalPackages/src/docker-creds-provider", - "remoteUri": "https://github.com/mthalman/docker-creds-provider", - "commitSha": "6e1ecd0a80755f9f0e88dc23b98b52f51a77c65e" - }, - { - "path": "source-build-reference-packages/src/externalPackages/src/humanizer", - "remoteUri": "https://github.com/Humanizr/Humanizer", - "commitSha": "3ebc38de585fc641a04b0e78ed69468453b0f8a1" - }, - { - "path": "source-build-reference-packages/src/externalPackages/src/MSBuildLocator", - "remoteUri": "https://github.com/microsoft/MSBuildLocator", - "commitSha": "694ff392b2dcf6ac58fe865afd1c982eb9449014" - }, - { - "path": "source-build-reference-packages/src/externalPackages/src/newtonsoft-json", - "remoteUri": "https://github.com/JamesNK/Newtonsoft.Json.git", - "commitSha": "0a2e291c0d9c0c7675d445703e51750363a549ef" - }, - { - "path": "source-build-reference-packages/src/externalPackages/src/spectre-console", - "remoteUri": "https://github.com/spectreconsole/spectre.console", - "commitSha": "e097281ca8a50268b1022453fe6efd9112123a28" - }, - { - "path": "source-build-reference-packages/src/externalPackages/src/vs-solutionpersistence", - "remoteUri": "https://github.com/microsoft/vs-solutionpersistence.git", - "commitSha": "0b6f82a4073ce0ff0419991ea0cd6dd6898a51ac" - } - ] +{ + "repositories": [ + { + "barId": 293804, + "path": "arcade", + "remoteUri": "https://github.com/dotnet/arcade", + "commitSha": "17c915fe8e3094d636fb256f2c2860f38ea7b121" + }, + { + "barId": 294076, + "path": "aspnetcore", + "remoteUri": "https://github.com/dotnet/aspnetcore", + "commitSha": "73ce13e67ec6dbf004b0f85508ae9920e30e0cb6" + }, + { + "barId": 292148, + "path": "cecil", + "remoteUri": "https://github.com/dotnet/cecil", + "commitSha": "82f47fc2ff84b3d94e910147d52f2e6795f6ae21" + }, + { + "barId": 291857, + "path": "command-line-api", + "remoteUri": "https://github.com/dotnet/command-line-api", + "commitSha": "cf5fd8d696450a48d3cc75a7a1792d34b5303f88" + }, + { + "barId": 292166, + "path": "deployment-tools", + "remoteUri": "https://github.com/dotnet/deployment-tools", + "commitSha": "56c3d96916e1b2bb065732ffedd6b9e0285a6ed4" + }, + { + "barId": 288647, + "path": "diagnostics", + "remoteUri": "https://github.com/dotnet/diagnostics", + "commitSha": "73f1fdca8d9fb191297a7e687790b804f4e78ef5" + }, + { + "barId": 294084, + "path": "efcore", + "remoteUri": "https://github.com/dotnet/efcore", + "commitSha": "bdeac5b76b25f4e027e8043a39e0c637a9914d8a" + }, + { + "barId": 292157, + "path": "emsdk", + "remoteUri": "https://github.com/dotnet/emsdk", + "commitSha": "f8b85873c9157f00b4951a78977fa87e3ab7c628" + }, + { + "barId": 293499, + "path": "fsharp", + "remoteUri": "https://github.com/dotnet/fsharp", + "commitSha": "89d788641914c5d0b87fddfa11f4df0b5cfaa73d" + }, + { + "barId": 294042, + "path": "msbuild", + "remoteUri": "https://github.com/dotnet/msbuild", + "commitSha": "60df124f65e3ad02433097bd7067f9c030fa1af1" + }, + { + "barId": 279847, + "path": "nuget-client", + "remoteUri": "https://github.com/nuget/nuget.client", + "commitSha": "56f4657d7585ec12b61c623756ca4b2b810c4863" + }, + { + "barId": 289390, + "path": "razor", + "remoteUri": "https://github.com/dotnet/razor", + "commitSha": "2d8783f051d7f5d31fc1b2014de263ded199eb3f" + }, + { + "barId": 286437, + "path": "roslyn", + "remoteUri": "https://github.com/dotnet/roslyn", + "commitSha": "a01d6a0838430706cea74ad38e054c2877ffbfa1" + }, + { + "barId": 273, + "path": "runtime", + "remoteUri": "https://github.com/maestro-auth-test/runtime", + "commitSha": "8dbca2cd19e608d45f13b8f193299dd2fe52d3b3" + }, + { + "barId": 291013, + "path": "scenario-tests", + "remoteUri": "https://github.com/dotnet/scenario-tests", + "commitSha": "21ded7efec7463ab807b22a8e119b228d4039a1c" + }, + { + "barId": 289294, + "path": "sdk", + "remoteUri": "https://github.com/dotnet/sdk", + "commitSha": "6a6992f5fc42dbd06cd24f3a7db40013035d3965" + }, + { + "barId": 293746, + "path": "source-build-reference-packages", + "remoteUri": "https://github.com/dotnet/source-build-reference-packages", + "commitSha": "1c0ba39805434d3be12679eb7fe5deb9a221e32c" + }, + { + "barId": 293523, + "path": "sourcelink", + "remoteUri": "https://github.com/dotnet/sourcelink", + "commitSha": "d656e7bc73c28d039e6baf6d591c905ea8b76ee1" + }, + { + "barId": 291112, + "path": "symreader", + "remoteUri": "https://github.com/dotnet/symreader", + "commitSha": "2255aa6d6c21541848933c33f72e60363041abaf" + }, + { + "barId": 292030, + "path": "templating", + "remoteUri": "https://github.com/dotnet/templating", + "commitSha": "41ef93aacf72633b58372a9841d8940f6d87ae26" + }, + { + "barId": 293953, + "path": "vstest", + "remoteUri": "https://github.com/microsoft/vstest", + "commitSha": "bbee830b0ef18eb5b4aa5daee65ae35a34f8c132" + }, + { + "barId": 292669, + "path": "windowsdesktop", + "remoteUri": "https://github.com/dotnet/windowsdesktop", + "commitSha": "132afbade9e2ce626f26e27c136f34af73dde2f1" + }, + { + "barId": 294066, + "path": "winforms", + "remoteUri": "https://github.com/dotnet/winforms", + "commitSha": "6b55842360e78bd1d7b15977694524fc092b7cc7" + }, + { + "barId": 293871, + "path": "wpf", + "remoteUri": "https://github.com/dotnet/wpf", + "commitSha": "37b9597bebaf48196a05f6d6212ec1e9bc24352f" + }, + { + "barId": 291230, + "path": "xdt", + "remoteUri": "https://github.com/dotnet/xdt", + "commitSha": "a37116d1c37e696cc70fc138c01d02dff7542d82" + } + ], + "submodules": [ + { + "path": "aspnetcore/src/submodules/googletest", + "remoteUri": "https://github.com/google/googletest", + "commitSha": "1b96fa13f549387b7549cc89e1a785cf143a1a50" + }, + { + "path": "aspnetcore/src/submodules/MessagePack-CSharp", + "remoteUri": "https://github.com/aspnet/MessagePack-CSharp.git", + "commitSha": "9aeb12b9bdb024512ffe2e4bddfa2785dca6e39e" + }, + { + "path": "nuget-client/submodules/NuGet.Build.Localization", + "remoteUri": "https://github.com/NuGet/NuGet.Build.Localization.git", + "commitSha": "f15db7b7c6f5affbea268632ef8333d2687c8031" + }, + { + "path": "source-build-reference-packages/src/externalPackages/src/abstractions-xunit", + "remoteUri": "https://github.com/xunit/abstractions.xunit", + "commitSha": "b75d54d73b141709f805c2001b16f3dd4d71539d" + }, + { + "path": "source-build-reference-packages/src/externalPackages/src/application-insights", + "remoteUri": "https://github.com/microsoft/ApplicationInsights-dotnet", + "commitSha": "2faa7e8b157a431daa2e71785d68abd5fa817b53" + }, + { + "path": "source-build-reference-packages/src/externalPackages/src/azure-activedirectory-identitymodel-extensions-for-dotnet", + "remoteUri": "https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet.git", + "commitSha": "e67b25be77532af9ba405670b34b4d263d505fde" + }, + { + "path": "source-build-reference-packages/src/externalPackages/src/cssparser", + "remoteUri": "https://github.com/dotnet/cssparser", + "commitSha": "0d59611784841735a7778a67aa6e9d8d000c861f" + }, + { + "path": "source-build-reference-packages/src/externalPackages/src/docker-creds-provider", + "remoteUri": "https://github.com/mthalman/docker-creds-provider", + "commitSha": "6e1ecd0a80755f9f0e88dc23b98b52f51a77c65e" + }, + { + "path": "source-build-reference-packages/src/externalPackages/src/humanizer", + "remoteUri": "https://github.com/Humanizr/Humanizer", + "commitSha": "3ebc38de585fc641a04b0e78ed69468453b0f8a1" + }, + { + "path": "source-build-reference-packages/src/externalPackages/src/MSBuildLocator", + "remoteUri": "https://github.com/microsoft/MSBuildLocator", + "commitSha": "694ff392b2dcf6ac58fe865afd1c982eb9449014" + }, + { + "path": "source-build-reference-packages/src/externalPackages/src/newtonsoft-json", + "remoteUri": "https://github.com/JamesNK/Newtonsoft.Json.git", + "commitSha": "0a2e291c0d9c0c7675d445703e51750363a549ef" + }, + { + "path": "source-build-reference-packages/src/externalPackages/src/spectre-console", + "remoteUri": "https://github.com/spectreconsole/spectre.console", + "commitSha": "e097281ca8a50268b1022453fe6efd9112123a28" + }, + { + "path": "source-build-reference-packages/src/externalPackages/src/vs-solutionpersistence", + "remoteUri": "https://github.com/microsoft/vs-solutionpersistence.git", + "commitSha": "0b6f82a4073ce0ff0419991ea0cd6dd6898a51ac" + } + ] } \ No newline at end of file