user/dotnet8-stage0: enable ppc64le and s390x
This commit is contained in:
parent
072755f1f1
commit
7c24fe3777
5 changed files with 328 additions and 43 deletions
|
@ -3,7 +3,7 @@
|
|||
|
||||
pkgname=dotnet8-stage0
|
||||
pkgver=8.0.100_pre1
|
||||
pkgrel=0
|
||||
pkgrel=1
|
||||
|
||||
[ "$CBUILD" != "$CHOST" ] && _cross="-$CARCH" || _cross=""
|
||||
|
||||
|
@ -14,6 +14,7 @@ _gittag=v8.0.100-preview.1
|
|||
_artifactsver=0.1.0-8.0.100-5.centos.8-x64
|
||||
_prebuiltsver=0.1.0-8.0.100-4.centos.8-x64
|
||||
_bootstrapver="8.0.100-preview.1.23115.2"
|
||||
_bootstraprel=0
|
||||
_installerver=$_bootstrapver
|
||||
|
||||
# Version of packages that aren't defined in git-info or badly defined
|
||||
|
@ -28,6 +29,9 @@ _patches="
|
|||
installer_runtimepacks.patch
|
||||
roslyn_allow-extra-params.patch
|
||||
runtime_76500-properly-set-toolchain-for-alpine.patch
|
||||
runtime_79856-save-errno-when-using-posix-semaphores.patch
|
||||
runtime_82173-add-cmake-check-for-ioclt-prototype.patch
|
||||
runtime_82676-make-pal-console-c-use-int.patch
|
||||
runtime_make-lld-use-depend-on-existing-on-target.patch
|
||||
runtime_mono-thread-coop-undefine-fortify-source.patch
|
||||
runtime_no-additional-runtime-id.patch
|
||||
|
@ -39,6 +43,8 @@ _extra_nupkgs="
|
|||
https://globalcdn.nuget.org/packages/microsoft.netcore.app.host.linux-musl-x64.7.0.2.nupkg
|
||||
https://globalcdn.nuget.org/packages/microsoft.netcore.app.host.linux-musl-arm64.7.0.2.nupkg
|
||||
https://globalcdn.nuget.org/packages/microsoft.netcore.app.host.linux-musl-arm.7.0.2.nupkg
|
||||
https://lab.ilot.io/ayakael/repo-apk/-/raw/edge/archives/Microsoft.NETCore.App.Host.linux-musl-ppc64le.7.0.2.nupkg
|
||||
https://lab.ilot.io/ayakael/repo-apk/-/raw/edge/archives/Microsoft.NETCore.App.Host.linux-musl-s390x.7.0.2.nupkg
|
||||
"
|
||||
|
||||
_pkgver_macro=${pkgver%.*}
|
||||
|
@ -48,8 +54,7 @@ pkgdesc="The .NET Core stage0 bits for dotnet build"
|
|||
# x86: blocked by https://github.com/dotnet/runtime/issues/77667
|
||||
# armhf: blocked by https://github.com/dotnet/runtime/issues/77663
|
||||
# riscv64: port WIP https://github.com/dotnet/runtime/issues/36748
|
||||
# s390x / ppc64le: no bootstrap crossbuilt yet
|
||||
arch="all !x86 !armhf !riscv64 !s390x !ppc64le"
|
||||
arch="all !x86 !armhf !riscv64"
|
||||
url=https://dotnet.microsoft.com
|
||||
license="MIT"
|
||||
options="!check" # Testsuite in main -build aport
|
||||
|
@ -59,9 +64,11 @@ subpackages="
|
|||
"
|
||||
source="
|
||||
https://lab.ilot.io/dotnet/dotnet/-/releases/$_gittag/downloads/tarball/dotnet-$_gittag.tar.xz
|
||||
dotnet-sdk-$_bootstrapver-linux.musl.x64.noextract::https://dotnetbuilds.azureedge.net/public/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-x64.tar.gz
|
||||
dotnet-sdk-$_bootstrapver-linux.musl.arm64.noextract::https://dotnetbuilds.azureedge.net/public/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm64.tar.gz
|
||||
dotnet-sdk-$_bootstrapver-linux.musl.arm.noextract::https://dotnetbuilds.azureedge.net/public/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm.tar.gz
|
||||
dotnet-sdk-$_bootstrapver-linux-musl-x64.noextract::https://dotnetbuilds.azureedge.net/public/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-x64.tar.gz
|
||||
dotnet-sdk-$_bootstrapver-linux-musl-arm64.noextract::https://dotnetbuilds.azureedge.net/public/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm64.tar.gz
|
||||
dotnet-sdk-$_bootstrapver-linux-musl-arm.noextract::https://dotnetbuilds.azureedge.net/public/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm.tar.gz
|
||||
dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-ppc64le.noextract::https://lab.ilot.io/ayakael/dotnet-stage0/-/releases/$_bootstrapver-r$_bootstraprel/downloads/sdk/dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-ppc64le.tar.xz
|
||||
dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-s390x.noextract::https://lab.ilot.io/ayakael/dotnet-stage0/-/releases/$_bootstrapver-r$_bootstraprel/downloads/sdk/dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-s390x.tar.xz
|
||||
Private.SourceBuilt.Artifacts.$_artifactsver.noextract::https://dotnetcli.azureedge.net/source-built-artifacts/assets/Private.SourceBuilt.Artifacts.$_artifactsver.tar.gz
|
||||
Private.SourceBuilt.Prebuilts.$_prebuiltsver.noextract::https://dotnetcli.azureedge.net/source-built-artifacts/assets/Private.SourceBuilt.Prebuilts.$_prebuiltsver.tar.gz
|
||||
$_extra_nupkgs
|
||||
|
@ -182,16 +189,6 @@ snapshot() {
|
|||
prepare() {
|
||||
default_prepare
|
||||
|
||||
# Parallel restore is broken on mono-based builds since dotnet7
|
||||
# see https://github.com/dotnet/runtime/issues/77364
|
||||
# A workaround via runtime_enable-runtime-marshalling.diff
|
||||
case $CARCH in
|
||||
s390x|ppc64le)
|
||||
msg "runtime_enable-runtime-marshalling.diff"
|
||||
patch -p1 -i "$srcdir"/runtime_enable-runtime-marshalling.diff
|
||||
;;
|
||||
esac
|
||||
|
||||
# adjusts sdk version and packagedir to expected
|
||||
for i in runtime sdk installer aspnetcore roslyn; do
|
||||
sed "s|@@PACKAGESDIR@@|$_packagesdir|" -i "$builddir"/src/$i/NuGet.config
|
||||
|
@ -214,7 +211,7 @@ prepare() {
|
|||
ln -s "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts/log
|
||||
done
|
||||
|
||||
tar --use-compress-program="pigz" -xf "$srcdir"/dotnet-sdk-$_pkgver_macro*$_dotnet_arch.noextract -C "$_cli_root" --no-same-owner
|
||||
tar --use-compress-program="pigz" -xf "$srcdir"/dotnet-sdk-$_pkgver_macro*$_dotnet_arch*noextract -C "$_cli_root" --no-same-owner
|
||||
|
||||
for i in $_extra_nupkgs; do
|
||||
$_nuget push "$srcdir"/${i##*/} --source="$_packagesdir"
|
||||
|
@ -506,19 +503,26 @@ artifacts() {
|
|||
|
||||
sha512sums="
|
||||
f48d4168f526aade888bbd17f2da87f721dabc8ae004707ef9195b6359b79b871115a686678c87542ba74e1d86e5485df13d77ef4d3f4001c0804426aebaf92c dotnet-v8.0.100-preview.1.tar.xz
|
||||
120048fce7c455cb2f98cbdda6b7f789f210d9e7e0b48304f8fdc8b4838c705c6af18b2b4c375b57aa48e0e5084e60ecefad0edc09c19aca166855b3dd3fb539 dotnet-sdk-8.0.100-preview.1.23115.2-linux.musl.x64.noextract
|
||||
bf985c3b9c1f6f09f46f88527c54445c502e7c75dcbc004dccfb5339d0b5766290ff183abe3808919137ebc5a50c91cbd58a56ec31ad50a5e39a26671e990c61 dotnet-sdk-8.0.100-preview.1.23115.2-linux.musl.arm64.noextract
|
||||
461094d1f53067c2b496ec25b1bf7686aee3a75f0de5a139bb29a3ac989cdb824367165c8385b78185414430f0579bbba8c94be6d511d793a16746dc018f232f dotnet-sdk-8.0.100-preview.1.23115.2-linux.musl.arm.noextract
|
||||
120048fce7c455cb2f98cbdda6b7f789f210d9e7e0b48304f8fdc8b4838c705c6af18b2b4c375b57aa48e0e5084e60ecefad0edc09c19aca166855b3dd3fb539 dotnet-sdk-8.0.100-preview.1.23115.2-linux-musl-x64.noextract
|
||||
bf985c3b9c1f6f09f46f88527c54445c502e7c75dcbc004dccfb5339d0b5766290ff183abe3808919137ebc5a50c91cbd58a56ec31ad50a5e39a26671e990c61 dotnet-sdk-8.0.100-preview.1.23115.2-linux-musl-arm64.noextract
|
||||
461094d1f53067c2b496ec25b1bf7686aee3a75f0de5a139bb29a3ac989cdb824367165c8385b78185414430f0579bbba8c94be6d511d793a16746dc018f232f dotnet-sdk-8.0.100-preview.1.23115.2-linux-musl-arm.noextract
|
||||
727be7a0c753a72635d22044fef7fea4389294fce01a63638f7a6fdb1b18481737969b1ff2a666ac1b84c1d48434f3505b80ffdf8e56d4224c92c1db34f8a154 dotnet-sdk-8.0.100-preview.1.23115.2-r0-linux-musl-ppc64le.noextract
|
||||
6f2ff2b7e7c1eaac7af2a80684c361357313ccbc2c2572ee0ee495b63507192ab27b0aab61de8557a7afd18d8073b44a823f4d6fbbdc75c3058eeb0517ad52e6 dotnet-sdk-8.0.100-preview.1.23115.2-r0-linux-musl-s390x.noextract
|
||||
bb40f2fcd6f51e908e68fce740400345f2b3ee9c66c1cc69116b4188a19bb0f510e96c8ddcf99e03ee35d16f95ac0b918f940317cb7a5dd858682c4483d3c93b Private.SourceBuilt.Artifacts.0.1.0-8.0.100-5.centos.8-x64.noextract
|
||||
f20d22a4d069c3647433def852dba50e803a494f4a9f455c24baff8e259896ec709ebcd2a80a1716a9b582ad0d36cd4be98ee4918b0349cca46cea0643a1a9d8 Private.SourceBuilt.Prebuilts.0.1.0-8.0.100-4.centos.8-x64.noextract
|
||||
5c1fd9e250e7f08d996b7b335134973624a8d1afc331f7fda3a81eee7d2170e39905be20b8786e99078892b21d1582092aeee45d49c5feae3b2bd5374c306fec microsoft.netcore.app.host.linux-musl-x64.7.0.2.nupkg
|
||||
c5bb986179b4789a24cc4552fa33bee2015acba1c9775ff8fe2295797dd7114f244df2c133e8cee8a3de392c5c47530ba9ef87939cc55660f8c937146b98e1fb microsoft.netcore.app.host.linux-musl-arm64.7.0.2.nupkg
|
||||
2f35742d74255dd6e7a39e48f29e01cead2b410dabd9e4192d724186a8bd2e04f970b5015229045c732e6c7bcd89a8e9787d19fc50f09fcaab8cd94516f5a0ce microsoft.netcore.app.host.linux-musl-arm.7.0.2.nupkg
|
||||
f3296b92c91ff76d3238af8414e5e1b4729f641b7c9d25539e5399a472c828b23851fb3241b7c3ba9fc691be0ac2dacd3f7efefc66207920574eda066d76cb9d Microsoft.NETCore.App.Host.linux-musl-ppc64le.7.0.2.nupkg
|
||||
8e8dfc7184516f3e4ef4e43540fb403ec6066237e0596953cff5c49accaa811ad72f0286c52b2f03871adb9b24194cf4922bbcce05c2bb5caa8bcbd790013dde Microsoft.NETCore.App.Host.linux-musl-s390x.7.0.2.nupkg
|
||||
9c2f5410c2983ae1d073a5efb78afa56b212165a18252400a42696e10d8cb6016fde5941d1f453eb5332a77f5e209bcb5d40b8ee142609232be95b0cdca1e060 aspnetcore_use-linux-musl-crossgen-on-non-x64.patch
|
||||
ead38430e54530819ecdb7ab5b087707eee97c4e77b5011a42758352e8265417c65f07b4eec2488708d932de240877695b474e07b8984d34086ef539d5022830 build_set-local-repo.patch
|
||||
9fe4494b291128469874147e5f28f8fbd023b014114f0aa151fa5cf57821318fa88b834a131eeb77478c8c87adca8c1c0ff3e8c59264c7394fd0621a520eb014 installer_runtimepacks.patch
|
||||
d1811c1364d9ce4d180d61adf8a9074cf71cf854776959a6db98740f17ed75beec8536602cfb335f534a703d3917e43c3cd91f0f6aed68b5d40c1c80396f5908 roslyn_allow-extra-params.patch
|
||||
ba9c66b5bb8b8d2de87922717b8a7a6f880eed2a38b5208a554ebd64841c6053658692463471a26442c85cb9adb94043a9d91190786d46c0f45ff4e7cc9c707e runtime_76500-properly-set-toolchain-for-alpine.patch
|
||||
77fa6d9987a7c43725582c9c493e9d4d5965a611a1d795dad4e3d46cd730caced095f994d93f91a131df7fa4b6a7277bcd3d915bae2dcd869559f22076fbc575 runtime_79856-save-errno-when-using-posix-semaphores.patch
|
||||
86e805b5d0d85294b3ac4866dee00b906a35d064e988e5b48591aeabf29e34ddd8fccb4770cf2bd66437ce4f704fdda43a7522baa9f23ad9353ce010f884d1c5 runtime_82173-add-cmake-check-for-ioclt-prototype.patch
|
||||
18f2be488e4d6c667b90f6b6faed12a84f8c5748c6da91a291542e0a9e8b43effc3bba92a6b38da1b2a904466e3e9bd66b01ad0d3f521bd27a067eb362e2add6 runtime_82676-make-pal-console-c-use-int.patch
|
||||
946f7ddc979bced4e2991f0fe768476b537c97d864362d105fcaec9e6f9f312a798e5e19312966f29fdd80593aa88870be5747b74172d9a70bb1b173c3c75a43 runtime_make-lld-use-depend-on-existing-on-target.patch
|
||||
d732df247c721c9f677baabdd7f36dbf4b564814ff64164361065bb1c196b767494a1d39f634eadf01a23032c7b3e64102614b7213065c81096bbf3f8022e6a0 runtime_mono-thread-coop-undefine-fortify-source.patch
|
||||
1de4459522525e1d570e219c9ef067fbbf8745ad369602a006ea62cbafa0f64d2b01b63e00147cf8fed0ea9764373fb4c66aae2323b43a34447990a24f9f29c3 runtime_no-additional-runtime-id.patch
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
# dotnet7-stage0
|
||||
# dotnet8-stage0
|
||||
|
||||
This is the .NET 7.0 package for Alpine Linux.
|
||||
This is the .NET 8.0 package for Alpine Linux.
|
||||
|
||||
Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael
|
||||
|
||||
# Building info
|
||||
|
||||
## Generated packages
|
||||
* `dotnet7` (empty package to go around `buildrepo` build ordering bug)
|
||||
* `dotnet7-stage0-bootstrap` (packages binary bootstrap artifacts)
|
||||
* `dotnet7-stage0-artifacts` (packages non-binary bootstrap artifacts)
|
||||
* `dotnet8` (empty package to go around `buildrepo` build ordering bug)
|
||||
* `dotnet8-stage0-bootstrap` (packages binary bootstrap artifacts)
|
||||
* `dotnet8-stage0-artifacts` (packages non-binary bootstrap artifacts)
|
||||
|
||||
## How to build dotnet7 on Alpine
|
||||
## How to build dotnet8 on Alpine
|
||||
As dotnet is a self-hosting compiler (thus it compiles using itself), it
|
||||
requires a bootstrap for the initial build. To solve this problem, this package
|
||||
follows the `stage0` proposal outlined [here](https://lists.alpinelinux.org/~alpine/devel/%3C33KG0XO61I4IL.2Z7RTAZ5J3SY6%408pit.net%3E)
|
||||
|
@ -22,17 +22,17 @@ builds bootstraps for Alpine on `x86_64`, `aarch64`, and `armv7`. Thus, `stage0`
|
|||
has also been designed to be crossbuild aware, allowing bootstrapping to other
|
||||
platforms.
|
||||
|
||||
In summary, dotnet7 is built using three different aports.
|
||||
In summary, dotnet8 is built using three different aports.
|
||||
|
||||
* `community/dotnet7-stage0`
|
||||
Builds minimum components for full build of dotnet7, and packages these in an initial
|
||||
`dotnet7-stage0-bootstrap` package that `dotnet7-build` pulls.
|
||||
* `community/dotnet7-build`
|
||||
Builds full and packages dotnet7 fully using either stage0 or previoulsy built
|
||||
dotnet7 build.
|
||||
* `community/dotnet7-runtime`
|
||||
* `community/dotnet8-stage0`
|
||||
Builds minimum components for full build of dotnet8, and packages these in an initial
|
||||
`dotnet8-stage0-bootstrap` package that `dotnet8-build` pulls.
|
||||
* `community/dotnet8-build`
|
||||
Builds full and packages dotnet8 fully using either stage0 or previoulsy built
|
||||
dotnet8 build.
|
||||
* `community/dotnet8-runtime`
|
||||
As abuild does not allow different versions for subpackages, a different aport
|
||||
is required to package runtime bits from dotnet7-build.
|
||||
is required to package runtime bits from dotnet8-build.
|
||||
|
||||
## Crossbuilding with `stage0`
|
||||
Crossbuilding `stage0` is a three step process:
|
||||
|
@ -44,7 +44,7 @@ Crossbuilding `stage0` is a three step process:
|
|||
`$HOME/sysroot-$CTARGET_ARCH/etc/apk/repositories`, making sure to add required
|
||||
keys. This makes it so that whatever package is not built in step 1 will
|
||||
be pulled from package repos
|
||||
3. Crossbuild `dotnet7-stage0` via:
|
||||
3. Crossbuild `dotnet8-stage0` via:
|
||||
```
|
||||
CHOST=$CTARGET_ARCH abuild -r
|
||||
```
|
||||
|
@ -53,7 +53,7 @@ CHOST=$CTARGET_ARCH abuild -r
|
|||
|
||||
This package follows [package naming and contents suggested by upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging),
|
||||
with two exceptions. It installs dotnet to `/usr/lib/dotnet` (aka `$_libdir`).
|
||||
In addition, the package is named `dotnet7` as opposed to `dotnet-7.0`
|
||||
In addition, the package is named `dotnet8` as opposed to `dotnet-8.0`
|
||||
to match Alpine Linux naming conventions for packages with many installable versions
|
||||
|
||||
# Contributing
|
||||
|
@ -69,7 +69,7 @@ follow.
|
|||
2. Checkout the forked repository.
|
||||
|
||||
- `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports`
|
||||
- `cd community/dotnet7-build`
|
||||
- `cd community/dotnet8-build`
|
||||
|
||||
3. Make your changes. Don't forget to add a changelog.
|
||||
|
||||
|
@ -81,10 +81,10 @@ follow.
|
|||
|
||||
6. Commit the changes to the git repo in a git branch
|
||||
|
||||
- `git checkout -b dotnet7/<name>`
|
||||
- `git checkout -b dotnet8/<name>`
|
||||
- `git add` any new patches
|
||||
- `git remove` any now-unnecessary patches
|
||||
- `git commit -m 'community/dotnet7-build: descriptive description'`
|
||||
- `git commit -m 'community/dotnet8-build: descriptive description'`
|
||||
- `git push`
|
||||
|
||||
7. Create a merge request with your changes, tagging @ayakael for review.
|
||||
|
@ -99,7 +99,7 @@ follow.
|
|||
2. Checkout the forked repository.
|
||||
|
||||
- `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports`
|
||||
- `cd community/dotnet7-build`
|
||||
- `cd community/dotnet8-build`
|
||||
|
||||
|
||||
3. Build the new upstream source tarball. Update the versions in the
|
||||
|
@ -120,10 +120,10 @@ follow.
|
|||
|
||||
7. Commit the changes to the git repo in a git branch.
|
||||
|
||||
- `git checkout -b dotnet7/<name>`
|
||||
- `git checkout -b dotnet8/<name>`
|
||||
- `git add` any new patches
|
||||
- `git remove` any now-unnecessary patches
|
||||
- `git commit -m 'community/dotnet7-build: upgrade to <new-version>`
|
||||
- `git commit -m 'community/dotnet8-build: upgrade to <new-version>`
|
||||
- `git push`
|
||||
|
||||
8. Create a merge request with your changes, tagging @ayakael for review.
|
||||
|
|
|
@ -0,0 +1,174 @@
|
|||
From 50de22c7fa57c687a996bfdf6702871216881c0f Mon Sep 17 00:00:00 2001
|
||||
Patch-Source: https://github.com/dotnet/runtime/pull/79856
|
||||
From: Antoine Martin <dev@ayakael.net>
|
||||
Date: Sat, 25 Feb 2023 15:19:00 -0500
|
||||
Subject: [PATCH 1/1] [threads] Save errno when using posix semaphores for
|
||||
thread transitions
|
||||
|
||||
We already save/restore GetLastError on win32. Do it on posix
|
||||
platforms, too.
|
||||
|
||||
If one thread is in a pinvoke wrapper, while another thread triggers a
|
||||
STW, the pinvoke wrapper will self-suspend the thread and wait for a
|
||||
notification to resume. Depending on the platform we can use win32
|
||||
primitives, Mach semaphores or POSIX semaphores. win32 and posix can
|
||||
both change the value of last error (errno, respectively) while the
|
||||
thread is suspended.
|
||||
|
||||
That means that code like this (generated by the
|
||||
LibraryImportAttribute source generator) cannot reliably retrieve the
|
||||
error from the last pinvoke:
|
||||
|
||||
```csharp
|
||||
__retVal = __PInvoke(__path_native, mode); // there is a pinvoke wrapper here, that transitions from GC Safe to GC Unsafe mode
|
||||
__lastError = System.Runtime.InteropServices.Marshal.GetLastSystemError();
|
||||
```
|
||||
|
||||
The solution is to explicitly preserve the value of GetLastError/errno
|
||||
when exiting from GC Safe.
|
||||
|
||||
Fixes https://github.com/dotnet/runtime/issues/77364
|
||||
---
|
||||
.../src/mono/mono/utils/mono-threads-coop.c | 12 +++---
|
||||
.../src/mono/mono/utils/mono-threads.c | 4 +-
|
||||
.../src/mono/mono/utils/mono-threads.h | 43 ++++++++++++++++---
|
||||
3 files changed, 45 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/src/runtime/src/mono/mono/utils/mono-threads-coop.c b/src/runtime/src/mono/mono/utils/mono-threads-coop.c
|
||||
index 4ed659d66..c562ada67 100644
|
||||
--- a/src/runtime/src/mono/mono/utils/mono-threads-coop.c
|
||||
+++ b/src/runtime/src/mono/mono/utils/mono-threads-coop.c
|
||||
@@ -337,10 +337,10 @@ mono_threads_exit_gc_safe_region_internal (gpointer cookie, MonoStackData *stack
|
||||
return;
|
||||
|
||||
#ifdef ENABLE_CHECKED_BUILD_GC
|
||||
- W32_DEFINE_LAST_ERROR_RESTORE_POINT;
|
||||
+ MONO_DEFINE_LAST_ERROR_RESTORE_POINT;
|
||||
if (mono_check_mode_enabled (MONO_CHECK_MODE_GC))
|
||||
coop_tls_pop (cookie);
|
||||
- W32_RESTORE_LAST_ERROR_FROM_RESTORE_POINT;
|
||||
+ MONO_RESTORE_LAST_ERROR_FROM_RESTORE_POINT;
|
||||
#endif
|
||||
|
||||
mono_threads_exit_gc_safe_region_unbalanced_internal (cookie, stackdata);
|
||||
@@ -365,7 +365,7 @@ mono_threads_exit_gc_safe_region_unbalanced_internal (gpointer cookie, MonoStack
|
||||
/* Common to use enter/exit gc safe around OS API's affecting last error. */
|
||||
/* This method can call OS API's that will reset last error on some platforms. */
|
||||
/* To reduce errors, we need to restore last error before exit gc safe. */
|
||||
- W32_DEFINE_LAST_ERROR_RESTORE_POINT;
|
||||
+ MONO_DEFINE_LAST_ERROR_RESTORE_POINT;
|
||||
|
||||
info = (MonoThreadInfo *)cookie;
|
||||
|
||||
@@ -398,7 +398,7 @@ mono_threads_exit_gc_safe_region_unbalanced_internal (gpointer cookie, MonoStack
|
||||
info->user_data = NULL;
|
||||
}
|
||||
|
||||
- W32_RESTORE_LAST_ERROR_FROM_RESTORE_POINT;
|
||||
+ MONO_RESTORE_LAST_ERROR_FROM_RESTORE_POINT;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -652,14 +652,14 @@ mono_threads_suspend_policy_init (void)
|
||||
// otherwise if one of the old environment variables is set, use that.
|
||||
// otherwise use full preemptive suspend.
|
||||
|
||||
- W32_DEFINE_LAST_ERROR_RESTORE_POINT;
|
||||
+ MONO_DEFINE_LAST_ERROR_RESTORE_POINT;
|
||||
|
||||
(policy = threads_suspend_policy_getenv ())
|
||||
|| (policy = threads_suspend_policy_default ())
|
||||
|| (policy = threads_suspend_policy_getenv_compat ())
|
||||
|| (policy = MONO_THREADS_SUSPEND_FULL_PREEMPTIVE);
|
||||
|
||||
- W32_RESTORE_LAST_ERROR_FROM_RESTORE_POINT;
|
||||
+ MONO_RESTORE_LAST_ERROR_FROM_RESTORE_POINT;
|
||||
|
||||
g_assert (policy);
|
||||
mono_threads_suspend_policy_hidden_dont_modify = (char)policy;
|
||||
diff --git a/src/runtime/src/mono/mono/utils/mono-threads.c b/src/runtime/src/mono/mono/utils/mono-threads.c
|
||||
index 2ef2fe45b..41dbf3032 100644
|
||||
--- a/src/runtime/src/mono/mono/utils/mono-threads.c
|
||||
+++ b/src/runtime/src/mono/mono/utils/mono-threads.c
|
||||
@@ -1894,7 +1894,7 @@ mono_thread_info_uninstall_interrupt (gboolean *interrupted)
|
||||
/* Common to uninstall interrupt handler around OS API's affecting last error. */
|
||||
/* This method could call OS API's on some platforms that will reset last error so make sure to restore */
|
||||
/* last error before exit. */
|
||||
- W32_DEFINE_LAST_ERROR_RESTORE_POINT;
|
||||
+ MONO_DEFINE_LAST_ERROR_RESTORE_POINT;
|
||||
|
||||
g_assert (interrupted);
|
||||
*interrupted = FALSE;
|
||||
@@ -1917,7 +1917,7 @@ mono_thread_info_uninstall_interrupt (gboolean *interrupted)
|
||||
THREADS_INTERRUPT_DEBUG ("interrupt uninstall tid %p previous_token %p interrupted %s\n",
|
||||
mono_thread_info_get_tid (info), previous_token, *interrupted ? "TRUE" : "FALSE");
|
||||
|
||||
- W32_RESTORE_LAST_ERROR_FROM_RESTORE_POINT;
|
||||
+ MONO_RESTORE_LAST_ERROR_FROM_RESTORE_POINT;
|
||||
}
|
||||
|
||||
static MonoThreadInfoInterruptToken*
|
||||
diff --git a/src/runtime/src/mono/mono/utils/mono-threads.h b/src/runtime/src/mono/mono/utils/mono-threads.h
|
||||
index 6a548b183..45353db4e 100644
|
||||
--- a/src/runtime/src/mono/mono/utils/mono-threads.h
|
||||
+++ b/src/runtime/src/mono/mono/utils/mono-threads.h
|
||||
@@ -866,19 +866,50 @@ mono_win32_interrupt_wait (PVOID thread_info, HANDLE native_thread_handle, DWORD
|
||||
void
|
||||
mono_win32_abort_blocking_io_call (THREAD_INFO_TYPE *info);
|
||||
|
||||
-#define W32_DEFINE_LAST_ERROR_RESTORE_POINT \
|
||||
+#else
|
||||
+
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
+#ifdef USE_WINDOWS_BACKEND
|
||||
+
|
||||
+/* APC calls can change GetLastError while a thread is suspended. Save/restore it when doing thread
|
||||
+ state transitions (for example in m2n wrappers) in order to protect the result of the last
|
||||
+ pinvoke */
|
||||
+
|
||||
+#define MONO_DEFINE_LAST_ERROR_RESTORE_POINT \
|
||||
const DWORD _last_error_restore_point = GetLastError ();
|
||||
|
||||
-#define W32_RESTORE_LAST_ERROR_FROM_RESTORE_POINT \
|
||||
+#define MONO_RESTORE_LAST_ERROR_FROM_RESTORE_POINT \
|
||||
/* Only restore if changed to prevent unnecessary writes. */ \
|
||||
if (GetLastError () != _last_error_restore_point) \
|
||||
mono_SetLastError (_last_error_restore_point);
|
||||
|
||||
+#elif defined(USE_WASM_BACKEND) || defined (USE_POSIX_BACKEND)
|
||||
+
|
||||
+#define MONO_DEFINE_LAST_ERROR_RESTORE_POINT \
|
||||
+ int _last_errno_restore_point = errno;
|
||||
+
|
||||
+#define MONO_RESTORE_LAST_ERROR_FROM_RESTORE_POINT \
|
||||
+ if (errno != _last_errno_restore_point) \
|
||||
+ errno = _last_errno_restore_point;
|
||||
+
|
||||
+/* Posix semaphores set errno on failure and sporadic wakeup. GC state transitions are done in n2m
|
||||
+ * and m2n wrappers and may change the value of errno from the last pinvoke. Use these macros to
|
||||
+ * save/restore errno when doing thread state transitions. */
|
||||
+
|
||||
+#elif defined(USE_MACH_BACKEND)
|
||||
+
|
||||
+/* Mach semaphores don't set errno on failure. Change this to be the same as POSIX if some other primitives used
|
||||
+ in thread state transitions pollute errno. */
|
||||
+
|
||||
+#define MONO_DEFINE_LAST_ERROR_RESTORE_POINT /* nothing */
|
||||
+#define MONO_RESTORE_LAST_ERROR_FROM_RESTORE_POINT /* nothing */
|
||||
+
|
||||
#else
|
||||
-
|
||||
-#define W32_DEFINE_LAST_ERROR_RESTORE_POINT /* nothing */
|
||||
-#define W32_RESTORE_LAST_ERROR_FROM_RESTORE_POINT /* nothing */
|
||||
-
|
||||
+#error "unknown threads backend, not sure how to save/restore last error"
|
||||
#endif
|
||||
|
||||
+
|
||||
+
|
||||
#endif /* __MONO_THREADS_H__ */
|
||||
--
|
||||
2.38.4
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
From 8d085a4867cb28a24a6f87379df7b4eac6f4712d Mon Sep 17 00:00:00 2001
|
||||
Patch-Source: https://github.com/dotnet/runtime/pull/82173
|
||||
From: Adeel <3840695+am11@users.noreply.github.com>
|
||||
Date: Wed, 15 Feb 2023 17:53:20 +0200
|
||||
Subject: [PATCH 1/2] Add cmake check for ioclt prototype
|
||||
|
||||
---
|
||||
src/native/libs/Common/pal_config.h.in | 1 +
|
||||
src/native/libs/System.Native/pal_io.c | 4 ++++
|
||||
src/native/libs/configure.cmake | 7 +++++++
|
||||
3 files changed, 12 insertions(+)
|
||||
|
||||
diff --git a/src/runtime/src/native/libs/Common/pal_config.h.in b/src/runtime/src/native/libs/Common/pal_config.h.in
|
||||
index 7b592d10326f6..a5ce0ce2a46d4 100644
|
||||
--- a/src/runtime/src/native/libs/Common/pal_config.h.in
|
||||
+++ b/src/runtime/src/native/libs/Common/pal_config.h.in
|
||||
@@ -43,6 +43,7 @@
|
||||
#cmakedefine01 PRIORITY_REQUIRES_INT_WHO
|
||||
#cmakedefine01 KEVENT_REQUIRES_INT_PARAMS
|
||||
#cmakedefine01 HAVE_IOCTL
|
||||
+#cmakedefine01 HAVE_IOCTL_WITH_INT_REQUEST
|
||||
#cmakedefine01 HAVE_TIOCGWINSZ
|
||||
#cmakedefine01 HAVE_TIOCSWINSZ
|
||||
#cmakedefine01 HAVE_SCHED_GETAFFINITY
|
||||
diff --git a/src/runtime/src/native/libs/System.Native/pal_io.c b/src/runtime/src/native/libs/System.Native/pal_io.c
|
||||
index 22fcf3a4f7691..b89bbbbeeaf4b 100644
|
||||
--- a/src/runtime/src/native/libs/System.Native/pal_io.c
|
||||
+++ b/src/runtime/src/native/libs/System.Native/pal_io.c
|
||||
@@ -1325,7 +1325,11 @@ int32_t SystemNative_CopyFile(intptr_t sourceFd, intptr_t destinationFd, int64_t
|
||||
// Try copying data using a copy-on-write clone. This shares storage between the files.
|
||||
if (sourceLength != 0)
|
||||
{
|
||||
+#if HAVE_IOCTL_WITH_INT_REQUEST
|
||||
while ((ret = ioctl(outFd, (int)FICLONE, inFd)) < 0 && errno == EINTR);
|
||||
+#elif
|
||||
+ while ((ret = ioctl(outFd, FICLONE, inFd)) < 0 && errno == EINTR);
|
||||
+#endif
|
||||
copied = ret == 0;
|
||||
}
|
||||
#endif
|
||||
diff --git a/src/runtime/src/native/libs/configure.cmake b/src/runtime/src/native/libs/configure.cmake
|
||||
index 0b86bd6df64ed..cbaac692f2630 100644
|
||||
--- a/src/runtime/src/native/libs/configure.cmake
|
||||
+++ b/src/runtime/src/native/libs/configure.cmake
|
||||
@@ -790,6 +790,13 @@ check_prototype_definition(
|
||||
${STATFS_INCLUDES}
|
||||
HAVE_NON_LEGACY_STATFS)
|
||||
|
||||
+check_prototype_definition(
|
||||
+ ioctl
|
||||
+ "int ioctl(int fd, int request, ...)"
|
||||
+ 0
|
||||
+ "sys/ioctl.h"
|
||||
+ HAVE_IOCTL_WITH_INT_REQUEST)
|
||||
+
|
||||
check_c_source_compiles(
|
||||
"
|
||||
#include <stdlib.h>
|
||||
|
||||
From 349e0494a215a372538f6671d6f671c18f594f53 Mon Sep 17 00:00:00 2001
|
||||
From: Adeel Mujahid <3840695+am11@users.noreply.github.com>
|
||||
Date: Wed, 15 Feb 2023 18:07:42 +0200
|
||||
Subject: [PATCH 2/2] .
|
||||
|
||||
---
|
||||
src/native/libs/System.Native/pal_io.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/runtime/src/native/libs/System.Native/pal_io.c b/src/runtime/src/native/libs/System.Native/pal_io.c
|
||||
index b89bbbbeeaf4b..7551b426d0b84 100644
|
||||
--- a/src/runtime/src/native/libs/System.Native/pal_io.c
|
||||
+++ b/src/runtime/src/native/libs/System.Native/pal_io.c
|
||||
@@ -1327,7 +1327,7 @@ int32_t SystemNative_CopyFile(intptr_t sourceFd, intptr_t destinationFd, int64_t
|
||||
{
|
||||
#if HAVE_IOCTL_WITH_INT_REQUEST
|
||||
while ((ret = ioctl(outFd, (int)FICLONE, inFd)) < 0 && errno == EINTR);
|
||||
-#elif
|
||||
+#else
|
||||
while ((ret = ioctl(outFd, FICLONE, inFd)) < 0 && errno == EINTR);
|
||||
#endif
|
||||
copied = ret == 0;
|
|
@ -0,0 +1,26 @@
|
|||
From 86033acaa1dbc61833142ffa60cee0f1a0fb4a14 Mon Sep 17 00:00:00 2001
|
||||
Patch-Source: https://github.com/dotnet/runtime/pull/82676
|
||||
From: Antoine Martin <dev@ayakael.net>
|
||||
Date: Sat, 25 Feb 2023 14:39:43 -0500
|
||||
Subject: [PATCH] pal_console.c: cast TIOCSWINSZ to int when
|
||||
HAVE_IOCTL_WITH_INT_REQUEST
|
||||
|
||||
---
|
||||
src/native/libs/System.Native/pal_console.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/runtime/src/native/libs/System.Native/pal_console.c b/src/runtime/src/native/libs/System.Native/pal_console.c
|
||||
index d217075e5..52241f47d 100644
|
||||
--- a/src/runtime/src/native/libs/System.Native/pal_console.c
|
||||
+++ b/src/runtime/src/native/libs/System.Native/pal_console.c
|
||||
@@ -43,7 +43,9 @@ int32_t SystemNative_SetWindowSize(WinSize* windowSize)
|
||||
{
|
||||
assert(windowSize != NULL);
|
||||
|
||||
-#if HAVE_IOCTL && HAVE_TIOCSWINSZ
|
||||
+#if HAVE_IOCTL_WITH_INT_REQUEST && HAVE_TIOCSWINSZ
|
||||
+ return ioctl(STDOUT_FILENO, (int)TIOCSWINSZ, windowSize);
|
||||
+#elif HAVE_IOCTL && HAVE_TIOCSWINSZ
|
||||
return ioctl(STDOUT_FILENO, TIOCSWINSZ, windowSize);
|
||||
#else
|
||||
// Not supported on e.g. Android. Also, prevent a compiler error because windowSize is unused
|
Loading…
Reference in a new issue