<pre style='margin:0'>
Ken (kencu) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/9da88533634dede705a7dc13f47849350b52690f">https://github.com/macports/macports-ports/commit/9da88533634dede705a7dc13f47849350b52690f</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 9da88533634dede705a7dc13f47849350b52690f
</span>Author: Dean M Greer <38226388+Gcenx@users.noreply.github.com>
AuthorDate: Thu Jan 23 14:06:36 2025 -0500
<span style='display:block; white-space:pre;color:#404040;'> wine-*: Update to 10.0
</span>---
emulators/wine-devel/Portfile | 32 +-
...patch.diff => 0001-winemac.drv-no-flicker.diff} | 0
emulators/wine-stable/Portfile | 106 ++++-
.../files/0001-winemac.drv-no-flicker.diff | 27 +-
.../{macos_hacks.diff => 0002-macos_hacks.diff} | 514 ++++++++++++++-------
.../0002-ntdll-workarond-sendmsg-bug-on-macos.diff | 31 --
...after-free_in_macdrv_copy_pasteboard_types.diff | 26 --
emulators/wine-stable/files/5871.diff | 87 ----
8 files changed, 448 insertions(+), 375 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/emulators/wine-devel/Portfile b/emulators/wine-devel/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 271a26ecfa2..3c1b3e36fa7 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/emulators/wine-devel/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/emulators/wine-devel/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -7,12 +7,12 @@ PortGroup muniversal 1.1
</span>
# Keep the wine-stable, wine-devel and wine-crossover portfiles as similar as possible.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-github.setup wine-mirror wine 9.21 wine-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup wine-mirror wine 10.0 wine-
</span> github.tarball_from archive
name wine-devel
conflicts wine-stable wine-staging wine-crossover
set my_name wine
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision 0
</span> # MacPorts does not support i386 on macOS Mojave and new WoW64 requires macOS Catalina 10.15.4
platforms {darwin > 15 != 18}
set branch [lindex [split ${version} .] 0].x
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -38,9 +38,9 @@ long_description \
</span>
checksums \
${distname}${extract.suffix} \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- rmd160 9df39caf3f99be28c1fc73bda63edb8374fda62b \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 10dbc38de71950da5f8535d419f984a218be48641f54ab98830dd8415a6d9e75 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 51733008
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rmd160 0807d7f380af0851151b7abd04490a9636b187f1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 b3edf134a5698d55bd210f11c3ae833c943abcece75810f6aa8cbd7a9f293ff7 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 51935194
</span>
depends_build \
port:bison \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -58,7 +58,7 @@ depends_lib \
</span>
depends_run \
port:mingw-w64-wine-gecko-2.47.4 \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- port:mingw-w64-wine-mono-9.3.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ port:mingw-w64-wine-mono-9.4.0
</span>
post-extract {
# https://gitlab.winehq.org/wine/wine/-/commit/c7a97b5d5d56ef00a0061b75412c6e0e489fdc99
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -69,7 +69,7 @@ post-extract {
</span> patch.pre_args-replace -p0 -p1
patchfiles-append \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- 0001-winemac.drv-no-flicker-patch.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0001-winemac.drv-no-flicker.diff
</span>
# Some required hacks to make wine work better on macOS & Rosetta2
patchfiles-append \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -130,9 +130,9 @@ configure.ldflags-append -Wl,-rpath,${compiler.library_path}
</span> # FSF GCC cannot compile code using Apple's "blocks" language extensions
compiler.blacklist-append {*gcc*} {clang < 800} {macports-clang-3.*}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-if {${subport} eq "wine-devel"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- patchfiles-append 1001-devel-msync.diff
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if {${subport} eq "wine-devel"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# patchfiles-append 1001-devel-msync.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#}
</span>
subport wine-staging {
conflicts wine-stable wine-devel wine-crossover
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -145,9 +145,9 @@ subport wine-staging {
</span>
checksums-append \
${wine_staging_distfile} \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- rmd160 61f5912f617b47274545bf0941802f3f6b20d37c \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 2e8c9cf9e378f99de133c7d86f9f0d5d506305869f4c802cb598f97b2f6bf8a6 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 9564841
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rmd160 7c2cac03da0a1d90ae866f28499c53115e3f72b6 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 59eb36a2d9786d28242901458b282d49430bdbacf801af575566dcfc6c2943ea \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 9490601
</span>
depends_patch-append port:autoconf
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -159,8 +159,8 @@ subport wine-staging {
</span> post-patch {
system -W ${worksrcpath} \
"${frameworks_dir}/Python.framework/Versions/${py_ver}/bin/python3 ${workpath}/wine-staging-${staging_version}/staging/patchinstall.py --all -W eventfd_synchronization -W ntdll-Syscall_Emulation -W winemac.drv-no-flicker-patch"
<span style='display:block; white-space:pre;background:#ffe0e0;'>- system -W ${worksrcpath} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "patch -p1 < ${filespath}/1001-staging-msync.diff"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #system -W ${worksrcpath} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # "patch -p1 < ${filespath}/1001-staging-msync.diff"
</span> }
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -224,8 +224,10 @@ if {${os.major} < 19} {
</span> create a new wine prefix. The architecture can be selected using the\
WINEARCH environment variable which can be set to either \"win32\" or\
\"win64\".
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ \n
</span> To create a new pure 32-bit prefix, you can run:
\$ WINEARCH=win32 WINEPREFIX=~/.wine32 winecfg
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ \n
</span> See the Wine FAQ for details: https://wiki.winehq.org/FAQ#Wineprefixes
"
} else {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/emulators/wine-devel/files/0001-winemac.drv-no-flicker-patch.diff b/emulators/wine-devel/files/0001-winemac.drv-no-flicker.diff
</span>similarity index 100%
rename from emulators/wine-devel/files/0001-winemac.drv-no-flicker-patch.diff
rename to emulators/wine-devel/files/0001-winemac.drv-no-flicker.diff
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/emulators/wine-stable/Portfile b/emulators/wine-stable/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 40eb2a9b7b5..4dd912cf0b5 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/emulators/wine-stable/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/emulators/wine-stable/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -7,17 +7,18 @@ PortGroup muniversal 1.1
</span>
# Keep the wine-stable, wine-devel and wine-crossover portfiles as similar as possible.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-github.setup wine-mirror wine 9.0 wine-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup wine-mirror wine 10.0 wine-
</span> github.tarball_from archive
name wine-stable
conflicts wine-devel wine-staging wine-crossover
set my_name wine
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-platforms {darwin >= 19}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# MacPorts does not support i386 on macOS Mojave and new WoW64 requires macOS Catalina 10.15.4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+platforms {darwin > 15 != 18}
</span> set branch [lindex [split ${version} .] 0].0
license LGPL-2.1+
categories emulators
<span style='display:block; white-space:pre;background:#ffe0e0;'>-supported_archs x86_64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+supported_archs i386 x86_64
</span> maintainers {@Gcenx gmail.com:gcenx83}
homepage https://www.winehq.org
dist_subdir ${my_name}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -36,9 +37,10 @@ long_description \
</span> integrate Windows applications into your desktop.
checksums \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- rmd160 8a74032d3612e613ef5b97e9d2908ac612fa8d93 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 90cd86d1203a7b1d304ae15461bbe0cbf1fd24feb407b551d011cc6d2967eb3f \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 48912704
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${distname}${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rmd160 0807d7f380af0851151b7abd04490a9636b187f1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 b3edf134a5698d55bd210f11c3ae833c943abcece75810f6aa8cbd7a9f293ff7 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 51935194
</span>
depends_build \
port:bison \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -51,29 +53,27 @@ depends_lib \
</span> port:freetype \
port:gettext-runtime \
path:lib/pkgconfig/gnutls.pc:gnutls \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- path:lib/libMoltenVK.dylib:MoltenVK-latest \
</span> port:libpcap \
port:libsdl2
depends_run \
port:mingw-w64-wine-gecko-2.47.4 \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- port:mingw-w64-wine-mono-8.1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ port:mingw-w64-wine-mono-9.4.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+post-extract {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # https://gitlab.winehq.org/wine/wine/-/commit/c7a97b5d5d56ef00a0061b75412c6e0e489fdc99
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ reinplace -q "/PKG_CONFIG_LIBDIR/d" ${worksrcpath}/configure
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ reinplace -q "/PKG_CONFIG_LIBDIR/d" ${worksrcpath}/configure.ac
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span>
patch.pre_args-replace -p0 -p1
patchfiles-append \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- 0001-winemac.drv-no-flicker.diff \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 0002-ntdll-workarond-sendmsg-bug-on-macos.diff \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 0003-winemac.drv-fix_use-after-free_in_macdrv_copy_pasteboard_types.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0001-winemac.drv-no-flicker.diff
</span>
# Some required hacks to make wine work better on macOS & Rosetta2
patchfiles-append \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- macos_hacks.diff
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# ntdll: Fix macOS build errors with Xcode 16.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# https://gitlab.winehq.org/wine/wine/-/merge_requests/5871
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-patchfiles-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 5871.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0002-macos_hacks.diff
</span>
# wine requires the program specified in INSTALL to create intermediate
# directories; /usr/bin/install doesn't.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -82,7 +82,6 @@ configure.install \
</span> ${worksrcpath}/tools/install-sh
configure.args.x86_64 \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- --enable-archs=i386,x86_64 \
</span> --enable-win64
configure.args \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -92,6 +91,7 @@ configure.args \
</span> --with-coreaudio \
--with-cups \
--without-dbus \
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ --without-ffmpeg \
</span> --without-fontconfig \
--with-freetype \
--with-gettext \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -117,7 +117,7 @@ configure.args \
</span> --with-unwind \
--without-usb \
--without-v4l2 \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-vulkan \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --without-vulkan \
</span> --without-wayland \
--without-x
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -130,10 +130,6 @@ configure.ldflags-append -Wl,-rpath,${compiler.library_path}
</span> # FSF GCC cannot compile code using Apple's "blocks" language extensions
compiler.blacklist-append {*gcc*} {clang < 800} {macports-clang-3.*}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Setting an older deployment target avoids build error with MacOSX15.sdk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# https://gitlab.winehq.org/wine/wine/-/merge_requests/5935#note_74758
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-macosx_deployment_target 10.15
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> # Makes destroot take significantly longer
variant dev description "Install ${subport} development environment" {
build.target all
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -145,6 +141,23 @@ variant gphoto description "Build ${subport} with support for digital cameras" {
</span> configure.args-replace --without-gphoto --with-gphoto
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+variant ffmpeg description "Build ${subport} with FFmpeg-based implementation for the MF byte stream handlers" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Use the same version of ffmpeg as gstreamer1-gst-libav
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ffmpeg_ver 6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_lib-append port:ffmpeg${ffmpeg_ver}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.args-replace --without-ffmpeg --with-ffmpeg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.pkg_config_path ${prefix}/libexec/ffmpeg${ffmpeg_ver}/lib/pkgconfig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ notes-append "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \n
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ The new implementation can be enabled by setting the DWORD value:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \n
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ DisableGstByteStreamHandler = 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \n
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ in the HKCU\Software\Wine\MediaFoundation registry key.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> variant gstreamer description "Build ${subport} with GStreamer, for multimedia support" {
depends_lib-append port:gstreamer1 port:gstreamer1-gst-plugins-base port:gstreamer1-gst-plugins-good \
port:gstreamer1-gst-plugins-bad port:gstreamer1-gst-plugins-ugly port:gstreamer1-gst-libav
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -156,7 +169,50 @@ variant kerberos description "Build ${subport} with Kerberos, for network authen
</span> configure.args-replace --without-krb5 --with-krb5
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-default_variants +gstreamer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {${os.major} < 19} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Using the 10.13 SDK as that's what CodeWeavers tests against for i386
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.sdk_version 10.13
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {${configure.sdkroot} eq ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pre-fetch {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ error "Building ${subport} @${version} requires the MacOSX10.13.sdk to be present in ${developer_dir}/SDKs/"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default_variants +universal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {${universal_possible} && [variant_isset universal]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.args.i386 --with-wine64=${workpath}/${worksrcdir}-x86_64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ notes-append "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \n
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Wine supports both 32-bit and 64-bit now. It is compatible with your\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ existing 32-bit wine prefix, but it will now default to 64-bit when you\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ create a new wine prefix. The architecture can be selected using the\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ WINEARCH environment variable which can be set to either \"win32\" or\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \"win64\".
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \n
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ To create a new pure 32-bit prefix, you can run:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \$ WINEARCH=win32 WINEPREFIX=~/.wine32 winecfg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \n
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ See the Wine FAQ for details: https://wiki.winehq.org/FAQ#Wineprefixes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ supported_archs i386
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {${os.major} > 18} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_lib path:lib/libMoltenVK.dylib:MoltenVK-latest
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.args.x86_64-append --enable-archs=i386,x86_64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.args-replace --without-vulkan --with-vulkan
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Setting an older deployment target avoids build error with MacOSX15.sdk
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # https://gitlab.winehq.org/wine/wine/-/merge_requests/5935#note_74758
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ macosx_deployment_target 10.15
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default_variants +ffmpeg +gstreamer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span>
triplet.add_build cross
triplet.add_host none
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/emulators/wine-stable/files/0001-winemac.drv-no-flicker.diff b/emulators/wine-stable/files/0001-winemac.drv-no-flicker.diff
</span><span style='display:block; white-space:pre;color:#808080;'>index 615b70c751b..126639e9068 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/emulators/wine-stable/files/0001-winemac.drv-no-flicker.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/emulators/wine-stable/files/0001-winemac.drv-no-flicker.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,4 +1,4 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From 2bb3073bab5575a0a346ed25cde1a52da6f70a36 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 2d72a65d874538ec1032adaf42a28940e6b6a375 Mon Sep 17 00:00:00 2001
</span> From: Ken Thomases <ken@codeweavers.com>
Date: Tue, 22 Jun 2021 07:56:43 +1000
Subject: [PATCH] winemac.drv: No Flicker patch
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -10,30 +10,30 @@ Subject: [PATCH] winemac.drv: No Flicker patch
</span> 3 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/dlls/winemac.drv/macdrv.h b/dlls/winemac.drv/macdrv.h
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index a1cdcc76ebc..14db3930474 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index f9ada39d38a..89ffa0d5825 100644
</span> --- a/dlls/winemac.drv/macdrv.h
+++ b/dlls/winemac.drv/macdrv.h
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -44,6 +44,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -43,6 +43,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern BOOL allow_vsync;
</span> extern BOOL allow_set_gamma;
extern BOOL allow_software_rendering;
<span style='display:block; white-space:pre;background:#ffe0e0;'>- extern BOOL disable_window_decorations;
</span> +extern BOOL force_backing_store;
<span style='display:block; white-space:pre;background:#ffe0e0;'>- extern const char* debugstr_cf(CFTypeRef t);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern UINT64 app_icon_callback;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern UINT64 app_quit_request_callback;
</span> diff --git a/dlls/winemac.drv/macdrv_main.c b/dlls/winemac.drv/macdrv_main.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index b40bf02f267..bc630305175 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index ea556aef68d..e67f17f9f43 100644
</span> --- a/dlls/winemac.drv/macdrv_main.c
+++ b/dlls/winemac.drv/macdrv_main.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -60,6 +60,7 @@ int use_precise_scrolling = TRUE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -59,6 +59,7 @@ int use_precise_scrolling = TRUE;
</span> int gl_surface_mode = GL_SURFACE_IN_FRONT_OPAQUE;
int retina_enabled = FALSE;
int enable_app_nap = FALSE;
+BOOL force_backing_store = FALSE;
<span style='display:block; white-space:pre;background:#ffe0e0;'>- CFDictionaryRef localized_strings;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -378,6 +379,9 @@ static void setup_options(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ UINT64 app_icon_callback = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ UINT64 app_quit_request_callback = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -379,6 +380,9 @@ static void setup_options(void)
</span> if (!get_config_key(hkey, appkey, "EnableAppNap", buffer, sizeof(buffer)))
enable_app_nap = IS_OPTION_TRUE(buffer[0]);
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -44,7 +44,7 @@ index b40bf02f267..bc630305175 100644
</span> processes in the prefix. */
if (!get_config_key(hkey, NULL, "RetinaMode", buffer, sizeof(buffer)))
diff --git a/dlls/winemac.drv/opengl.c b/dlls/winemac.drv/opengl.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index f78454ed149..205c0816d44 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index ac87cfc1313..68de39f49cd 100644
</span> --- a/dlls/winemac.drv/opengl.c
+++ b/dlls/winemac.drv/opengl.c
@@ -1451,7 +1451,7 @@ static BOOL create_context(struct wgl_context *context, CGLContextObj share, uns
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -57,4 +57,5 @@ index f78454ed149..205c0816d44 100644
</span>
if (core)
--
<span style='display:block; white-space:pre;background:#ffe0e0;'>-2.42.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.45.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/emulators/wine-stable/files/macos_hacks.diff b/emulators/wine-stable/files/0002-macos_hacks.diff
</span>similarity index 72%
rename from emulators/wine-stable/files/macos_hacks.diff
rename to emulators/wine-stable/files/0002-macos_hacks.diff
<span style='display:block; white-space:pre;color:#808080;'>index c5d6b8bea40..e8477d198d2 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/emulators/wine-stable/files/macos_hacks.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/emulators/wine-stable/files/0002-macos_hacks.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,23 +1,13 @@
</span> diff --git a/dlls/kernelbase/process.c b/dlls/kernelbase/process.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 1aeb8f55257..956fd6c679f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index df3447a9014..4d70b83ee14 100644
</span> --- a/dlls/kernelbase/process.c
+++ b/dlls/kernelbase/process.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -504,6 +504,46 @@ done:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -502,6 +502,36 @@ done:
</span> return ret;
}
+static const WCHAR *hack_append_command_line( const WCHAR *cmd, const WCHAR *cmd_line )
+{
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ /* CROSSOVER HACK: bug 13322 (winehq bug 39403)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Insert --no-sandbox in command line of Steam's web helper process to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * work around rendering problems.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * CROSSOVER HACK: bug 17315
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Insert --in-process-gpu in command line of Steam's web helper process to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * work around page rendering problems.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * CROSSOVER HACK: bug 21883
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Insert --disable-gpu as well.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span> + static const struct
+ {
+ const WCHAR *exe_name;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -49,7 +39,7 @@ index 1aeb8f55257..956fd6c679f 100644
</span> /**********************************************************************
* CreateProcessInternalW (kernelbase.@)
*/
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -520,6 +560,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessInternalW( HANDLE token, const WCHAR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -518,6 +548,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessInternalW( HANDLE token, const WCHAR
</span> RTL_USER_PROCESS_PARAMETERS *params = NULL;
RTL_USER_PROCESS_INFORMATION rtl_info;
HANDLE parent = 0, debug = 0;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -57,7 +47,7 @@ index 1aeb8f55257..956fd6c679f 100644
</span> ULONG nt_flags = 0;
USHORT machine = 0;
NTSTATUS status;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -545,6 +586,20 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessInternalW( HANDLE token, const WCHAR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -543,6 +574,20 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessInternalW( HANDLE token, const WCHAR
</span> app_name = name;
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -79,16 +69,80 @@ index 1aeb8f55257..956fd6c679f 100644
</span>
if (flags & (IDLE_PRIORITY_CLASS | HIGH_PRIORITY_CLASS | REALTIME_PRIORITY_CLASS |
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 59624bc70f8..99d70a74248 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 2f2a7fe5427..ac525f1a477 100644
</span> --- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2693,6 +2693,331 @@ static WINE_MODREF *find_existing_module( HMODULE module )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2244,6 +2244,11 @@ static NTSTATUS perform_relocations( void *module, IMAGE_NT_HEADERS *nt, SIZE_T
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return STATUS_SUCCESS;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __x86_64__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static void apply_binary_patches( WINE_MODREF* wm );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*************************************************************************
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * build_module
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2324,6 +2329,15 @@ static NTSTATUS build_module( LPCWSTR load_path, const UNICODE_STRING *nt_name,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TRACE_(loaddll)( "Loaded %s at %p: %s\n", debugstr_w(wm->ldr.FullDllName.Buffer), *module,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ is_builtin ? "builtin" : "native" );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__x86_64__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* CW HACK 22434 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!wcscmp( wm->ldr.BaseDllName.Buffer, L"libcef.dll" ) ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ !wcscmp( wm->ldr.BaseDllName.Buffer, L"Qt5WebEngineCore.dll" ))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ apply_binary_patches( wm );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ wm->ldr.LoadCount = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *pwm = wm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *module = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2765,6 +2779,399 @@ static WINE_MODREF *find_existing_module( HMODULE module )
</span> return NULL;
}
+#ifdef __x86_64__
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* CW HACK 19487: Patch out %gs:8h accesses in various versions of libcef.dll */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static void patch_libcef( const WCHAR* libname, WINE_MODREF** pwm )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static BOOL byte_pattern_matches( const char *addr, char wildcard_byte,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const char *pattern, size_t pattern_size )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ size_t i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ for (i = 0; i < pattern_size; i++)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (pattern[i] != wildcard_byte && addr[i] != pattern[i])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return TRUE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static void *find_byte_pattern( void *dllbase, size_t size_of_image,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ char wildcard_byte, const char *pattern, size_t pattern_size )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ size_t offset;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ for (offset = 0; offset <= size_of_image - pattern_size; offset++)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ char *addr = (char *)dllbase + offset;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (byte_pattern_matches( addr, wildcard_byte, pattern, pattern_size ))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return addr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static void apply_byte_pattern_patch( void *addr, char wildcard_byte, const char *after, size_t after_size )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ size_t i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ for (i = 0; i < after_size; i++)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (after[i] != wildcard_byte)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ((char *)addr)[i] = after[i];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static void apply_binary_patches( WINE_MODREF* wm )
</span> +{
+ static const char before_85_3_9_0[] =
+ {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -251,6 +305,23 @@ index 59624bc70f8..99d70a74248 100644
</span> + };
+ C_ASSERT( sizeof(before_qt_5_15_2_0_2) == sizeof(after_qt_5_15_2_0_2) );
+
<span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static const char before_epic_cmd_line_args_90_6_7[] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x8b, 0x47, 0x64,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x89, 0x43, 0x64,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x8b, 0x47, 0x68, /* mov eax, dword ptr [rdi+0x68] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x89, 0x43, 0x68, /* mov dword ptr [rbx + 0x68], eax */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static const char after_epic_cmd_line_args_90_6_7[] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x8b, 0x47, 0x64,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x89, 0x43, 0x64,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x31, 0xc0, /* xor eax, eax */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x89, 0x43, 0x68 /* mov dword ptr [rsi+0x68], eax */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ C_ASSERT( sizeof(before_epic_cmd_line_args_90_6_7) == sizeof(after_epic_cmd_line_args_90_6_7) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span> + struct
+ {
+ const WCHAR *libname;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -266,7 +337,7 @@ index 59624bc70f8..99d70a74248 100644
</span> + */
+ {
+ L"libcef.dll",
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "85.3.11-0",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "CEF %gs 85.3.11-0",
</span> + /* This patch is identical to the one for 85.3.9, just at a different offset. */
+ before_85_3_9_0, after_85_3_9_0,
+ sizeof(before_85_3_9_0),
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -275,7 +346,7 @@ index 59624bc70f8..99d70a74248 100644
</span> + },
+ {
+ L"libcef.dll",
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "85.3.11-1",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "CEF %gs 85.3.11-1",
</span> + before_85_3_11_1, after_85_3_11_1,
+ sizeof(before_85_3_11_1),
+ 0x28c521a,
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -289,7 +360,7 @@ index 59624bc70f8..99d70a74248 100644
</span> + */
+ {
+ L"libcef.dll",
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "85.3.9.0",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "CEF %gs 85.3.9.0",
</span> + before_85_3_9_0, after_85_3_9_0,
+ sizeof(before_85_3_9_0),
+ 0x28c4b30,
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -302,7 +373,7 @@ index 59624bc70f8..99d70a74248 100644
</span> + */
+ {
+ L"libcef.dll",
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "72.0.3626.121",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "CEF %gs 72.0.3626.121-0",
</span> + before_72_0_3626_121_1, after_72_0_3626_121_1,
+ sizeof(before_72_0_3626_121_1),
+ 0x23bb2ad,
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -310,7 +381,7 @@ index 59624bc70f8..99d70a74248 100644
</span> + },
+ {
+ L"libcef.dll",
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "72.0.3626.121",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "CEF %gs 72.0.3626.121-1",
</span> + before_72_0_3626_121_2, after_72_0_3626_121_2,
+ sizeof(before_72_0_3626_121_2),
+ 0x23bb329,
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -318,7 +389,7 @@ index 59624bc70f8..99d70a74248 100644
</span> + },
+ {
+ L"libcef.dll",
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "72.0.3626.121",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "CEF %gs 72.0.3626.121-2",
</span> + before_72_0_3626_121_3, after_72_0_3626_121_3,
+ sizeof(before_72_0_3626_121_3),
+ 0x23bb369,
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -331,7 +402,7 @@ index 59624bc70f8..99d70a74248 100644
</span> + */
+ {
+ L"libcef.dll",
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "72.0.3626.96",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "CEF %gs 72.0.3626.96-0",
</span> + /* This patch is identical to the one for 72.0.3626.121, just at a different offset. */
+ before_72_0_3626_121_1, after_72_0_3626_121_1,
+ sizeof(before_72_0_3626_121_1),
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -340,7 +411,7 @@ index 59624bc70f8..99d70a74248 100644
</span> + },
+ {
+ L"libcef.dll",
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "72.0.3626.96",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "CEF %gs 72.0.3626.96-1",
</span> + before_72_0_3626_121_2, after_72_0_3626_121_2,
+ sizeof(before_72_0_3626_121_2),
+ 0x23bb8a9,
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -348,7 +419,7 @@ index 59624bc70f8..99d70a74248 100644
</span> + },
+ {
+ L"libcef.dll",
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "72.0.3626.96",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "CEF %gs 72.0.3626.96-2",
</span> + before_72_0_3626_121_3, after_72_0_3626_121_3,
+ sizeof(before_72_0_3626_121_3),
+ 0x23bb8e9,
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -361,7 +432,7 @@ index 59624bc70f8..99d70a74248 100644
</span> + */
+ {
+ L"Qt5WebEngineCore.dll",
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "5.15.2.0",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "CEF/Qt5WebEngineCore %gs 5.15.2.0-0",
</span> + before_qt_5_15_2_0_1, after_qt_5_15_2_0_1,
+ sizeof(before_qt_5_15_2_0_1),
+ 0x2810f10,
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -369,39 +440,54 @@ index 59624bc70f8..99d70a74248 100644
</span> + },
+ {
+ L"Qt5WebEngineCore.dll",
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "5.15.2.0",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "CEF/Qt5WebEngineCore %gs 5.15.2.0-1",
</span> + before_qt_5_15_2_0_2, after_qt_5_15_2_0_2,
+ sizeof(before_qt_5_15_2_0_2),
+ 0x2810f8d,
+ TRUE
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* CW HACK 23854:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Ignore the command_line_args_disabled flag in the cef_settings_t
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * passed to cef_inititalize. Always set it to 0.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ L"libcef.dll",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "CEF cmd_line_args_disabled 90.6.7",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ before_epic_cmd_line_args_90_6_7,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ after_epic_cmd_line_args_90_6_7,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ sizeof(before_epic_cmd_line_args_90_6_7),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x3807,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ TRUE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ },
</span> + };
+
+ unsigned int i;
+ SIZE_T pagesize = page_size;
<span style='display:block; white-space:pre;background:#e0ffe0;'>++ WCHAR *libname = wm->ldr.BaseDllName.Buffer;
</span> +
+ for (i = 0; i < ARRAY_SIZE(patches); i++)
+ {
+ DWORD old_prot;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ void *dllbase = (*pwm)->ldr.DllBase;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void *dllbase = wm->ldr.DllBase;
</span> + void *target = (void *)((ULONG_PTR)dllbase + patches[i].offset);
+ void *target_page = (void *)((ULONG_PTR)target & ~(page_size-1));
+
+ if (wcscmp( libname, patches[i].libname ))
+ continue;
+
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if ((*pwm)->ldr.SizeOfImage < patches[i].offset)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (wm->ldr.SizeOfImage < patches[i].offset)
</span> + {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ TRACE( "%s too small to be %s\n", debugstr_w(libname), patches[i].name );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ TRACE( "%s too small to match patch '%s'\n", debugstr_w(libname), patches[i].name );
</span> + continue;
+ }
+ if (memcmp( target, patches[i].before, patches[i].size ))
+ {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ TRACE( "%s doesn't match %s\n", debugstr_w(libname), patches[i].name );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ TRACE( "%s doesn't match patch '%s'\n", debugstr_w(libname), patches[i].name );
</span> + continue;
+ }
+
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ TRACE( "Found %s %s, patching out gs:0x8 accesses\n", debugstr_w(libname), patches[i].name );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ TRACE( "Found matching %s, applying patch '%s'\n", debugstr_w(libname), patches[i].name );
</span> + NtProtectVirtualMemory( NtCurrentProcess(), &target_page, &pagesize, PAGE_EXECUTE_READWRITE, &old_prot );
+ memcpy( target, patches[i].after, patches[i].size );
+ NtProtectVirtualMemory( NtCurrentProcess(), &target_page, &pagesize, old_prot, &old_prot );
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -414,18 +500,7 @@ index 59624bc70f8..99d70a74248 100644
</span>
/******************************************************************************
* load_native_dll (internal)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -3272,6 +3597,10 @@ static NTSTATUS load_dll( const WCHAR *load_path, const WCHAR *libname, DWORD fl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- case STATUS_SUCCESS: /* valid PE file */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- nts = load_native_dll( load_path, &nt_name, mapping, &image_info, &id, flags, system, pwm );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef __x86_64__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (nts == STATUS_SUCCESS && (!wcscmp( libname, L"libcef.dll" ) || !wcscmp( libname, L"Qt5WebEngineCore.dll" )))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ patch_libcef( libname, pwm );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -4260,6 +4589,18 @@ static void release_address_space(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4365,6 +4772,18 @@ static void release_address_space(void)
</span> #endif
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -444,10 +519,11 @@ index 59624bc70f8..99d70a74248 100644
</span> /******************************************************************
* loader_init
*
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -4337,6 +4678,24 @@ void loader_init( CONTEXT *context, void **entry )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4451,6 +4870,25 @@ void loader_init( CONTEXT *context, void **entry )
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- else wm = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span> +#ifdef __x86_64__
+ if (is_macos() && !NtCurrentTeb()->WowTebOffset)
+ {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -467,13 +543,13 @@ index 59624bc70f8..99d70a74248 100644
</span> +#endif
+
#ifdef _WIN64
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if (NtCurrentTeb()->WowTebOffset) init_wow64( context );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (NtCurrentTeb()->WowTebOffset) init_wow64( context );
</span> #endif
diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 803d8079213..b1723851e97 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 92f2e2eb3a3..0dfee19f714 100644
</span> --- a/dlls/ntdll/unix/loader.c
+++ b/dlls/ntdll/unix/loader.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1797,6 +1797,48 @@ static ULONG_PTR get_image_address(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1847,6 +1847,48 @@ static ULONG_PTR get_image_address(void)
</span> return 0;
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -522,7 +598,7 @@ index 803d8079213..b1723851e97 100644
</span> /***********************************************************************
* start_main_thread
*/
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1819,6 +1861,13 @@ static void start_main_thread(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1869,6 +1911,13 @@ static void start_main_thread(void)
</span> load_ntdll();
load_wow64_ntdll( main_image_info.Machine );
load_apiset_dll();
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -537,10 +613,10 @@ index 803d8079213..b1723851e97 100644
</span> }
diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index ab544908883..231c7f0ede0 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 537e4e1f60e..73d18fc80fb 100644
</span> --- a/dlls/ntdll/unix/signal_x86_64.c
+++ b/dlls/ntdll/unix/signal_x86_64.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1004,7 +1004,11 @@ NTSTATUS WINAPI NtSetContextThread( HANDLE handle, const CONTEXT *context )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1023,7 +1023,11 @@ NTSTATUS WINAPI NtSetContextThread( HANDLE handle, const CONTEXT *context )
</span> ret = set_thread_context( handle, context, &self, IMAGE_FILE_MACHINE_AMD64 );
#ifdef __APPLE__
if ((flags & CONTEXT_DEBUG_REGISTERS) && (ret == STATUS_UNSUCCESSFUL))
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -553,7 +629,7 @@ index ab544908883..231c7f0ede0 100644
</span> #endif
if (ret || !self) return ret;
if (flags & CONTEXT_DEBUG_REGISTERS)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1214,6 +1218,14 @@ NTSTATUS set_thread_wow64_context( HANDLE handle, const void *ctx, ULONG size )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1236,6 +1240,14 @@ NTSTATUS set_thread_wow64_context( HANDLE handle, const void *ctx, ULONG size )
</span> if (!self)
{
NTSTATUS ret = set_thread_context( handle, context, &self, IMAGE_FILE_MACHINE_I386 );
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -568,7 +644,7 @@ index ab544908883..231c7f0ede0 100644
</span> if (ret || !self) return ret;
if (flags & CONTEXT_I386_DEBUG_REGISTERS)
{
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1701,6 +1713,135 @@ NTSTATUS WINAPI NtCallbackReturn( void *ret_ptr, ULONG ret_len, NTSTATUS status
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1742,6 +1754,135 @@ NTSTATUS WINAPI NtCallbackReturn( void *ret_ptr, ULONG ret_len, NTSTATUS status
</span> user_mode_callback_return( ret_ptr, ret_len, status, NtCurrentTeb() );
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -704,7 +780,7 @@ index ab544908883..231c7f0ede0 100644
</span>
/***********************************************************************
* is_privileged_instr
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1942,7 +2083,14 @@ static void segv_handler( int signal, siginfo_t *siginfo, void *sigcontext )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1990,7 +2131,14 @@ static void segv_handler( int signal, siginfo_t *siginfo, void *sigcontext )
</span> rec.ExceptionCode = EXCEPTION_ARRAY_BOUNDS_EXCEEDED;
break;
case TRAP_x86_PRIVINFLT: /* Invalid opcode exception */
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -719,53 +795,7 @@ index ab544908883..231c7f0ede0 100644
</span> break;
case TRAP_x86_STKFLT: /* Stack fault */
rec.ExceptionCode = EXCEPTION_STACK_OVERFLOW;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2170,6 +2318,34 @@ static void usr1_handler( int signal, siginfo_t *siginfo, void *sigcontext )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/* CW HACK 22350 */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/**********************************************************************
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * sigsys_handler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Handler for SIGSYS, signals that a non-existent system call was invoked.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Only called on macOS 14 Sonoma and later.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static void sigsys_handler( int signal, siginfo_t *siginfo, void *sigcontext )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ extern const void *__wine_syscall_dispatcher_prolog_end_ptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ struct syscall_frame *frame = amd64_thread_data()->syscall_frame;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ucontext_t *ctx = sigcontext;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ TRACE_(seh)("SIGSYS, rax %#llx, rip %#llx.\n", RAX_sig(ctx), RIP_sig(ctx));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ frame->rip = RIP_sig(ctx) + 0xb;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ frame->rcx = RIP_sig(ctx);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ frame->eflags = EFL_sig(ctx);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ frame->restore_flags = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ RCX_sig(ctx) = (ULONG_PTR)frame;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ R11_sig(ctx) = frame->eflags;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ EFL_sig(ctx) &= ~0x100; /* clear single-step flag */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ RIP_sig(ctx) = (ULONG64)__wine_syscall_dispatcher_prolog_end_ptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /***********************************************************************
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * LDT support
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2460,6 +2636,10 @@ void signal_init_process(void)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (sigaction( SIGSEGV, &sig_act, NULL ) == -1) goto error;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (sigaction( SIGILL, &sig_act, NULL ) == -1) goto error;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (sigaction( SIGBUS, &sig_act, NULL ) == -1) goto error;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ sig_act.sa_sigaction = sigsys_handler;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (sigaction( SIGSYS, &sig_act, NULL ) == -1) goto error;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- error:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2492,6 +2672,8 @@ void call_init_thunk( LPTHREAD_START_ROUTINE entry, void *arg, BOOL suspend, TEB
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2600,6 +2748,8 @@ void call_init_thunk( LPTHREAD_START_ROUTINE entry, void *arg, BOOL suspend, TEB
</span> __asm__ volatile (".byte 0x65\n\tmovq %0,%c1" :: "r" (teb->Tib.Self), "n" (FIELD_OFFSET(TEB, Tib.Self)));
__asm__ volatile (".byte 0x65\n\tmovq %0,%c1" :: "r" (teb->ThreadLocalStoragePointer), "n" (FIELD_OFFSET(TEB, ThreadLocalStoragePointer)));
thread_data->pthread_teb = mac_thread_gsbase();
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -775,10 +805,10 @@ index ab544908883..231c7f0ede0 100644
</span> thread's gsbase. Have each thread record its gsbase pointer into its
TEB so alloc_tls_slot() can find it. */
diff --git a/dlls/ntdll/unix/thread.c b/dlls/ntdll/unix/thread.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 9e84ec3cc96..95b862a56d7 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 3909470dd66..ef6867ecdca 100644
</span> --- a/dlls/ntdll/unix/thread.c
+++ b/dlls/ntdll/unix/thread.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1084,6 +1084,16 @@ static DECLSPEC_NORETURN void pthread_exit_wrapper( int status )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1096,6 +1096,16 @@ static DECLSPEC_NORETURN void pthread_exit_wrapper( int status )
</span> close( ntdll_get_thread_data()->wait_fd[1] );
close( ntdll_get_thread_data()->reply_fd );
close( ntdll_get_thread_data()->request_fd );
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -796,7 +826,7 @@ index 9e84ec3cc96..95b862a56d7 100644
</span> }
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index abe1b4dc4ec..9838650847c 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 684a58a724b..bbe82086085 100644
</span> --- a/dlls/ntdll/unix/virtual.c
+++ b/dlls/ntdll/unix/virtual.c
@@ -62,6 +62,7 @@
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -807,7 +837,7 @@ index abe1b4dc4ec..9838650847c 100644
</span> #endif
#include "ntstatus.h"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1714,6 +1715,42 @@ static void mprotect_range( void *base, size_t size, BYTE set, BYTE clear )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1744,6 +1745,42 @@ static void mprotect_range( void *base, size_t size, BYTE set, BYTE clear )
</span> if (count) mprotect_exec( addr, count << page_shift, prot );
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -850,7 +880,7 @@ index abe1b4dc4ec..9838650847c 100644
</span>
/***********************************************************************
* set_vprot
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2085,7 +2122,7 @@ static NTSTATUS map_file_into_view( struct file_view *view, int fd, size_t start
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2114,7 +2151,7 @@ static NTSTATUS map_file_into_view( struct file_view *view, int fd, size_t start
</span> /* only try mmap if media is not removable (or if we require write access) */
if (!removable || (flags & MAP_SHARED))
{
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -859,7 +889,7 @@ index abe1b4dc4ec..9838650847c 100644
</span> goto done;
switch (errno)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2413,7 +2450,7 @@ static NTSTATUS map_pe_header( void *ptr, size_t size, int fd, BOOL *removable )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2442,7 +2479,7 @@ static NTSTATUS map_pe_header( void *ptr, size_t size, int fd, BOOL *removable )
</span>
if (!*removable)
{
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -868,7 +898,7 @@ index abe1b4dc4ec..9838650847c 100644
</span> return STATUS_SUCCESS;
switch (errno)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -3892,7 +3929,7 @@ void virtual_map_user_shared_data(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3943,7 +3980,7 @@ void virtual_map_user_shared_data(void)
</span> exit(1);
}
if ((res = server_get_unix_fd( section, 0, &fd, &needs_close, NULL, NULL )) ||
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -877,7 +907,7 @@ index abe1b4dc4ec..9838650847c 100644
</span> {
ERR( "failed to remap the process USD: %d\n", res );
exit(1);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -5906,6 +5943,56 @@ NTSTATUS WINAPI NtReadVirtualMemory( HANDLE process, const void *addr, void *buf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -6124,6 +6161,56 @@ NTSTATUS WINAPI NtReadVirtualMemory( HANDLE process, const void *addr, void *buf
</span> return status;
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -934,7 +964,7 @@ index abe1b4dc4ec..9838650847c 100644
</span>
/***********************************************************************
* NtWriteVirtualMemory (NTDLL.@)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -5926,6 +6013,10 @@ NTSTATUS WINAPI NtWriteVirtualMemory( HANDLE process, void *addr, const void *bu
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -6144,6 +6231,10 @@ NTSTATUS WINAPI NtWriteVirtualMemory( HANDLE process, void *addr, const void *bu
</span> if ((status = wine_server_call( req ))) size = 0;
}
SERVER_END_REQ;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -946,13 +976,20 @@ index abe1b4dc4ec..9838650847c 100644
</span> else
{
diff --git a/dlls/wow64cpu/cpu.c b/dlls/wow64cpu/cpu.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index a613c73d29f..26c471ff778 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 6c6b2352bb6..2edac50a51c 100644
</span> --- a/dlls/wow64cpu/cpu.c
+++ b/dlls/wow64cpu/cpu.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -38,6 +38,15 @@ struct thunk_32to64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- DWORD op;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -40,10 +40,35 @@ struct thunk_32to64
</span> DWORD addr;
WORD cs;
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct thunk_32to64_rosetta2_workaround
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ BYTE lcall; /* call far, absolute indirect */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ BYTE modrm; /* address=disp32, opcode=3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ DWORD op;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ DWORD addr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ WORD cs;
</span> +
+ BYTE add;
+ BYTE add_modrm;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -962,38 +999,80 @@ index a613c73d29f..26c471ff778 100644
</span> + BYTE jmp_modrm;
+ DWORD jmp_op;
+ ULONG64 jmp_addr;
<span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span> struct thunk_opcodes
{
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -207,7 +216,18 @@ __ASM_GLOBAL_FUNC( syscall_32to64,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- struct thunk_32to64 syscall_thunk;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- struct thunk_32to64 unix_thunk;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ union
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct thunk_32to64 syscall_thunk;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct thunk_32to64_rosetta2_workaround syscall_thunk_rosetta;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ union
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct thunk_32to64 unix_thunk;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct thunk_32to64_rosetta2_workaround unix_thunk_rosetta;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "poppack.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -55,6 +80,19 @@ static USHORT fs32_sel;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void **__wine_unix_call_dispatcher = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++BOOL use_rosetta2_workaround;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static BOOL is_rosetta2(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ char buffer[64];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ NTSTATUS status = NtQuerySystemInformation( SystemProcessorBrandString, buffer, sizeof(buffer), NULL );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (status || !strstr( buffer, "VirtualApple" ))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return TRUE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, void *reserved )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (reason == DLL_PROCESS_ATTACH) LdrDisableThreadCalloutsForDll( inst );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -206,7 +244,21 @@ __ASM_GLOBAL_FUNC( syscall_32to64,
</span> "movl %edx,4(%rsp)\n\t"
"movl 0xc4(%r13),%r14d\n\t" /* context->Esp */
"xchgq %r14,%rsp\n\t"
- "ljmp *(%r14)\n"
+
+ /* CW HACK 20760:
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Use lretq rather than ljmp to work around a Rosetta SIGUSR1 race condition.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * When running under Rosetta 2, use lretq instead of ljmp to work around a SIGUSR1 race condition.
</span> + */
<span style='display:block; white-space:pre;background:#e0ffe0;'>++ "cmpl $0, " __ASM_NAME("use_rosetta2_workaround") "\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jne syscall_32to64_rosetta2_workaround\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "ljmp *(%r14)\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "syscall_32to64_rosetta2_workaround:\n\t"
</span> + "subq $0x10,%rsp\n\t"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "movl 4(%r14),%ebx\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "movq %rbx,0x8(%rsp)\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "movl 0(%r14),%ebx\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "movq %rbx,(%rsp)\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "movl 0xa4(%r13),%ebx\n\t" /* context->Ebx */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "movl 4(%r14),%edx\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "movq %rdx,0x8(%rsp)\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "movl 0(%r14),%edx\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "movq %rdx,(%rsp)\n\t"
</span> + "lretq\n"
+
".Lsyscall_32to64_return:\n\t"
"movq %rsp,%r14\n\t"
"movl 0xa8(%r13),%edx\n\t" /* context->Edx */
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -261,7 +281,16 @@ __ASM_GLOBAL_FUNC( unix_call_32to64,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -263,7 +315,20 @@ __ASM_GLOBAL_FUNC( unix_call_32to64,
</span> "movl %edx,4(%rsp)\n\t"
"movl 0xc4(%r13),%r14d\n\t" /* context->Esp */
"xchgq %r14,%rsp\n\t"
- "ljmp *(%r14)" )
+
+ /* CW HACK 20760:
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Use lretq rather than ljmp to work around a Rosetta SIGUSR1 race condition.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * When running under Rosetta 2, use lretq instead of ljmp to work around a SIGUSR1 race condition.
</span> + */
<span style='display:block; white-space:pre;background:#e0ffe0;'>++ "cmpl $0, " __ASM_NAME("use_rosetta2_workaround") "\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jne unix_call_32to64_rosetta2_workaround\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "ljmp *(%r14)\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "unix_call_32to64_rosetta2_workaround:\n\t"
</span> + "subq $0x10,%rsp\n\t"
+ "movl 4(%r14),%edx\n\t"
+ "movq %rdx,0x8(%rsp)\n\t"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1003,63 +1082,142 @@ index a613c73d29f..26c471ff778 100644
</span>
/**********************************************************************
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -308,22 +337,53 @@ NTSTATUS WINAPI BTCpuProcessInit(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -309,6 +374,8 @@ NTSTATUS WINAPI BTCpuProcessInit(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ wow64info->CpuFlags |= WOW64_CPUFLAGS_MSFT64;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ use_rosetta2_workaround = is_rosetta2();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ LdrGetDllHandle( NULL, 0, &str, &module );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ p__wine_unix_call_dispatcher = RtlFindExportedRoutineByName( module, "__wine_unix_call_dispatcher" );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __wine_unix_call_dispatcher = *p__wine_unix_call_dispatcher;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -318,17 +385,65 @@ NTSTATUS WINAPI BTCpuProcessInit(void)
</span> ds64_sel = context.SegDs;
fs32_sel = context.SegFs;
- thunk->syscall_thunk.ljmp = 0xff;
- thunk->syscall_thunk.modrm = 0x2d;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ /* CW HACK 20760:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Use lcall rather than ljmp to work around a Rosetta SIGUSR1 race condition.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->syscall_thunk.ljmp = 0xff; /* call far, absolute indirect */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->syscall_thunk.modrm = 0x1d; /* address=disp32, opcode=3 */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- thunk->syscall_thunk.op = PtrToUlong( &thunk->syscall_thunk.addr );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- thunk->syscall_thunk.op = PtrToUlong( &thunk->syscall_thunk.addr );
</span> - thunk->syscall_thunk.addr = PtrToUlong( syscall_32to64 );
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->syscall_thunk.addr = PtrToUlong( &thunk->syscall_thunk.add );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- thunk->syscall_thunk.cs = cs64_sel;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ /* We are now in 64-bit. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ /* add $0x08,%esp to remove the addr/segment pushed on the stack by the lcall */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->syscall_thunk.add = 0x83;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->syscall_thunk.add_modrm = 0xc4;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->syscall_thunk.add_op = 0x08;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ /* jmp to syscall_32to64 */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->syscall_thunk.jmp = 0xff;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->syscall_thunk.jmp_modrm = 0x25;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->syscall_thunk.jmp_op = 0x00;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->syscall_thunk.jmp_addr = PtrToUlong( syscall_32to64 );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ /* CW HACK 20760:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ * Use lcall rather than ljmp to work around a Rosetta SIGUSR1 race condition.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- thunk->unix_thunk.pushl = 0x68;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- thunk->unix_thunk.dispatcher_high = (ULONG_PTR)*p__wine_unix_call_dispatcher >> 32;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- thunk->unix_thunk.pushl2 = 0x68;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- thunk->unix_thunk.dispatcher_low = (ULONG_PTR)*p__wine_unix_call_dispatcher;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- thunk->unix_thunk.t.ljmp = 0xff;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- thunk->unix_thunk.t.modrm = 0x2d;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->unix_thunk.t.ljmp = 0xff; /* call far, absolute indirect */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->unix_thunk.t.modrm = 0x1d; /* address=disp32, opcode=3 */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- thunk->unix_thunk.t.op = PtrToUlong( &thunk->unix_thunk.t.addr );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- thunk->unix_thunk.t.addr = PtrToUlong( unix_call_32to64 );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->unix_thunk.t.addr = PtrToUlong( &thunk->unix_thunk.t.add );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- thunk->unix_thunk.t.cs = cs64_sel;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ /* We are now in 64-bit. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ /* add $0x08,%esp to remove the addr/segment pushed on the stack by the lcall */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->unix_thunk.t.add = 0x83;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->unix_thunk.t.add_modrm = 0xc4;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->unix_thunk.t.add_op = 0x08;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ /* jmp to unix_call_32to64 */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->unix_thunk.t.jmp = 0xff;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->unix_thunk.t.jmp_modrm = 0x25;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->unix_thunk.t.jmp_op = 0x00;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ thunk->unix_thunk.t.jmp_addr = PtrToUlong( unix_call_32to64 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- thunk->syscall_thunk.cs = cs64_sel;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- thunk->unix_thunk.ljmp = 0xff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- thunk->unix_thunk.modrm = 0x2d;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- thunk->unix_thunk.op = PtrToUlong( &thunk->unix_thunk.addr );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- thunk->unix_thunk.addr = PtrToUlong( unix_call_32to64 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- thunk->unix_thunk.cs = cs64_sel;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* CW HACK 20760 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (use_rosetta2_workaround)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk_rosetta.lcall = 0xff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk_rosetta.modrm = 0x1d;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk_rosetta.op = PtrToUlong( &thunk->syscall_thunk_rosetta.addr );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk_rosetta.addr = PtrToUlong( &thunk->syscall_thunk_rosetta.add );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk_rosetta.cs = cs64_sel;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* We are now in 64-bit. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* add $0x08,%esp to remove the addr/segment pushed on the stack by the lcall */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk_rosetta.add = 0x83;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk_rosetta.add_modrm = 0xc4;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk_rosetta.add_op = 0x08;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* jmp to syscall_32to64 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk_rosetta.jmp = 0xff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk_rosetta.jmp_modrm = 0x25;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk_rosetta.jmp_op = 0x00;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk_rosetta.jmp_addr = PtrToUlong( syscall_32to64 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk.ljmp = 0xff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk.modrm = 0x2d;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk.op = PtrToUlong( &thunk->syscall_thunk.addr );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk.addr = PtrToUlong( syscall_32to64 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk.cs = cs64_sel;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span> +
<span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* CW HACK 20760 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (use_rosetta2_workaround)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk_rosetta.lcall = 0xff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk_rosetta.modrm = 0x1d;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk_rosetta.op = PtrToUlong( &thunk->unix_thunk_rosetta.addr );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk_rosetta.addr = PtrToUlong( &thunk->unix_thunk_rosetta.add );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk_rosetta.cs = cs64_sel;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* We are now in 64-bit. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* add $0x08,%esp to remove the addr/segment pushed on the stack by the lcall */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk_rosetta.add = 0x83;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk_rosetta.add_modrm = 0xc4;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk_rosetta.add_op = 0x08;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* jmp to unix_call_32to64 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk_rosetta.jmp = 0xff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk_rosetta.jmp_modrm = 0x25;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk_rosetta.jmp_op = 0x00;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk_rosetta.jmp_addr = PtrToUlong( unix_call_32to64 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk.ljmp = 0xff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk.modrm = 0x2d;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk.op = PtrToUlong( &thunk->unix_thunk.addr );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk.addr = PtrToUlong( unix_call_32to64 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk.cs = cs64_sel;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> NtProtectVirtualMemory( GetCurrentProcess(), (void **)&thunk, &size, PAGE_EXECUTE_READ, &old_prot );
return STATUS_SUCCESS;
<span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/server/mach.c b/server/mach.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 86ff7eac382..c659857884f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/server/mach.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/server/mach.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -48,6 +48,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <mach/thread_act.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <mach/mach_vm.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <servers/bootstrap.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <sys/sysctl.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static mach_port_t server_mach_port;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -172,6 +173,26 @@ void init_thread_context( struct thread *thread )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span> }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* CX HACK 21217 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static int is_apple_silicon( void )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static int apple_silicon_status, did_check = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!did_check)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* returns 0 for native process or on error, 1 for translated */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ int ret = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ size_t size = sizeof(ret);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (sysctlbyname( "sysctl.proc_translated", &ret, &size, NULL, 0 ) == -1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ apple_silicon_status = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ apple_silicon_status = ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ did_check = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return apple_silicon_status;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* retrieve the thread x86 registers */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void get_thread_context( struct thread *thread, context_t *context, unsigned int flags )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -251,6 +272,13 @@ void get_thread_context( struct thread *thread, context_t *context, unsigned int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ context->flags |= SERVER_CTX_DEBUG_REGISTERS;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else if (is_apple_silicon())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* CX HACK 21217: Fake debug registers on Apple Silicon */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fprintf( stderr, "%04x: thread_get_state failed on Apple Silicon - faking zero debug registers\n", thread->id );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ memset( &context->debug, 0, sizeof(context->debug) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ context->flags |= SERVER_CTX_DEBUG_REGISTERS;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mach_set_error( ret );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ done:
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/emulators/wine-stable/files/0002-ntdll-workarond-sendmsg-bug-on-macos.diff b/emulators/wine-stable/files/0002-ntdll-workarond-sendmsg-bug-on-macos.diff
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index ea952239f21..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/emulators/wine-stable/files/0002-ntdll-workarond-sendmsg-bug-on-macos.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,31 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From 174bb7776d3971e1ed91d57a47a7599b14c6eb45 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: Piotr Caban <piotr@codeweavers.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Fri, 8 Mar 2024 13:37:30 +0100
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH] ntdll: Workaround sendmsg bug on macOS.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-There's a race on macOS when sending socket fd with sendmsg. The fd may get
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-broken if it's closed before recvmsg is called.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dlls/ntdll/unix/process.c | 2 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1 file changed, 1 insertion(+), 1 deletion(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/dlls/ntdll/unix/process.c b/dlls/ntdll/unix/process.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 4342ac8ac454..2c6dc1b43ccd 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/dlls/ntdll/unix/process.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/dlls/ntdll/unix/process.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -846,7 +846,6 @@ NTSTATUS WINAPI NtCreateUserProcess( HANDLE *process_handle_ptr, HANDLE *thread_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- wine_server_send_fd( socketfd[1] );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- close( socketfd[1] );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* create the process on the server side */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -875,6 +874,7 @@ NTSTATUS WINAPI NtCreateUserProcess( HANDLE *process_handle_ptr, HANDLE *thread_
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- process_info = wine_server_ptr_handle( reply->info );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SERVER_END_REQ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ close( socketfd[1] );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free( objattr );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free( handles );
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free( jobs );
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/emulators/wine-stable/files/0003-winemac.drv-fix_use-after-free_in_macdrv_copy_pasteboard_types.diff b/emulators/wine-stable/files/0003-winemac.drv-fix_use-after-free_in_macdrv_copy_pasteboard_types.diff
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 57535afc98b..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/emulators/wine-stable/files/0003-winemac.drv-fix_use-after-free_in_macdrv_copy_pasteboard_types.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,26 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From 7935a28d078f677467e68f551fb9c4e73863f25a Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: Brendan Shanks <bshanks@codeweavers.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Thu, 2 May 2024 16:02:24 -0700
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH] winemac.drv: Fix use-after-free in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- macdrv_copy_pasteboard_types.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Fixes a regression from bb2e02ab66c5c602d635722cf3a5820d6b366006.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dlls/winemac.drv/cocoa_clipboard.m | 1 +
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1 file changed, 1 insertion(+)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/dlls/winemac.drv/cocoa_clipboard.m b/dlls/winemac.drv/cocoa_clipboard.m
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index a3dca323705..4994442f1df 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/dlls/winemac.drv/cocoa_clipboard.m
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/dlls/winemac.drv/cocoa_clipboard.m
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -103,6 +103,7 @@ CFArrayRef macdrv_copy_pasteboard_types(CFTypeRef pasteboard)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- @"com.compuserve.gif" : @(NSBitmapImageFileTypeGIF),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- @"public.jpeg" : @(NSBitmapImageFileTypeJPEG),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ [BitmapOutputTypeMap retain];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- });
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- OnMainThread(^{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GitLab
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/emulators/wine-stable/files/5871.diff b/emulators/wine-stable/files/5871.diff
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 9a62f1b8b02..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/emulators/wine-stable/files/5871.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,87 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From 802a52cb1b9825a8baa63276b0e6620d7f4edc83 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: Brendan Shanks <bshanks@codeweavers.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Wed, 19 Jun 2024 15:36:27 -0700
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH] ntdll: Make __wine_syscall_dispatcher_return a separate
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- function to fix Xcode 16 build errors.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-LLVM no longer allows non-private labels to appear between
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-.cfi_startproc/endproc when targeting Mach-O.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-For consistency, also modify ARM and i386.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dlls/ntdll/unix/signal_arm.c | 6 +++---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dlls/ntdll/unix/signal_arm64.c | 6 +++---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dlls/ntdll/unix/signal_i386.c | 5 ++---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dlls/ntdll/unix/signal_x86_64.c | 6 +++---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 4 files changed, 11 insertions(+), 12 deletions(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/dlls/ntdll/unix/signal_arm.c b/dlls/ntdll/unix/signal_arm.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 5115fa7ec3a..9cadd1ceb10 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/dlls/ntdll/unix/signal_arm.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/dlls/ntdll/unix/signal_arm.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1756,9 +1756,9 @@ __ASM_GLOBAL_FUNC( __wine_syscall_dispatcher,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "5:\tmovw r0, #0x000d\n\t" /* STATUS_INVALID_PARAMETER */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "movt r0, #0xc000\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "add sp, sp, #0x10\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- "b " __ASM_LOCAL_LABEL("__wine_syscall_dispatcher_return") "\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ".globl " __ASM_NAME("__wine_syscall_dispatcher_return") "\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- __ASM_NAME("__wine_syscall_dispatcher_return") ":\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "b " __ASM_LOCAL_LABEL("__wine_syscall_dispatcher_return") )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+__ASM_GLOBAL_FUNC( __wine_syscall_dispatcher_return,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "mov r8, r0\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "mov r0, r1\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "b " __ASM_LOCAL_LABEL("__wine_syscall_dispatcher_return") )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/dlls/ntdll/unix/signal_arm64.c b/dlls/ntdll/unix/signal_arm64.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index f96ec330796..898f2555bbb 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/dlls/ntdll/unix/signal_arm64.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/dlls/ntdll/unix/signal_arm64.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1864,9 +1864,9 @@ __ASM_GLOBAL_FUNC( __wine_syscall_dispatcher,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "ret x16\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "4:\tmov x0, #0xc0000000\n\t" /* STATUS_INVALID_PARAMETER */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "movk x0, #0x000d\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- "b " __ASM_LOCAL_LABEL("__wine_syscall_dispatcher_return") "\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ".globl " __ASM_NAME("__wine_syscall_dispatcher_return") "\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- __ASM_NAME("__wine_syscall_dispatcher_return") ":\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "b " __ASM_LOCAL_LABEL("__wine_syscall_dispatcher_return") )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+__ASM_GLOBAL_FUNC( __wine_syscall_dispatcher_return,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "mov sp, x0\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "mov x0, x1\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "b " __ASM_LOCAL_LABEL("__wine_syscall_dispatcher_return") )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/dlls/ntdll/unix/signal_i386.c b/dlls/ntdll/unix/signal_i386.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 751b0081534..b0026711044 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/dlls/ntdll/unix/signal_i386.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/dlls/ntdll/unix/signal_i386.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2742,10 +2742,9 @@ __ASM_GLOBAL_FUNC( __wine_syscall_dispatcher,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- __ASM_CFI("\t.cfi_restore_state\n")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "6:\tmovl $0xc000000d,%eax\n\t" /* STATUS_INVALID_PARAMETER */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- "jmp " __ASM_LOCAL_LABEL("__wine_syscall_dispatcher_return") "\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "jmp " __ASM_LOCAL_LABEL("__wine_syscall_dispatcher_return") )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ".globl " __ASM_NAME("__wine_syscall_dispatcher_return") "\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- __ASM_NAME("__wine_syscall_dispatcher_return") ":\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+__ASM_GLOBAL_FUNC( __wine_syscall_dispatcher_return,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "movl 8(%esp),%eax\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "movl 4(%esp),%esp\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "jmp " __ASM_LOCAL_LABEL("__wine_syscall_dispatcher_return") )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index ab544908883..029374610b7 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/dlls/ntdll/unix/signal_x86_64.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/dlls/ntdll/unix/signal_x86_64.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2821,9 +2821,9 @@ __ASM_GLOBAL_FUNC( __wine_syscall_dispatcher,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- __ASM_CFI("\t.cfi_restore_state\n")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "5:\tmovl $0xc000000d,%eax\n\t" /* STATUS_INVALID_PARAMETER */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "movq %rsp,%rcx\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- "jmp " __ASM_LOCAL_LABEL("__wine_syscall_dispatcher_return") "\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ".globl " __ASM_NAME("__wine_syscall_dispatcher_return") "\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- __ASM_NAME("__wine_syscall_dispatcher_return") ":\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "jmp " __ASM_LOCAL_LABEL("__wine_syscall_dispatcher_return") )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+__ASM_GLOBAL_FUNC( __wine_syscall_dispatcher_return,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "movq %rdi,%rcx\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "movl 0xb0(%rcx),%r14d\n\t" /* frame->syscall_flags */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "movq %rsi,%rax\n\t"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GitLab
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span></pre><pre style='margin:0'>
</pre>