<pre style='margin:0'>
Perry E. Metzger (pmetzger) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/07bfc250747b5156a97008ec189690aea450f73d">https://github.com/macports/macports-ports/commit/07bfc250747b5156a97008ec189690aea450f73d</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 07bfc250747 wine-devel, wine-staging: New ports
</span>07bfc250747 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 07bfc250747b5156a97008ec189690aea450f73d
</span>Author: Dean M Greer <38226388+Gcenx@users.noreply.github.com>
AuthorDate: Tue Jun 11 21:21:26 2024 -0400
<span style='display:block; white-space:pre;color:#404040;'> wine-devel, wine-staging: New ports
</span>---
emulators/{wine-stable => wine-devel}/Portfile | 51 +-
.../files/0001-winemac.drv-no-flicker-patch.diff | 61 ++
emulators/wine-devel/files/macos_hacks.diff | 941 +++++++++++++++++++++
emulators/wine-stable/Portfile | 2 +-
x11/wine-devel/Portfile | 389 ---------
x11/wine-devel/files/BOOL.patch | 126 ---
x11/wine-devel/files/cups_headers.patch | 10 -
x11/wine-devel/files/fix-flicker.patch | 102 ---
x11/wine-devel/files/mach_machine.patch | 12 -
9 files changed, 1041 insertions(+), 653 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/emulators/wine-stable/Portfile b/emulators/wine-devel/Portfile
</span>similarity index 75%
copy from emulators/wine-stable/Portfile
copy to emulators/wine-devel/Portfile
<span style='display:block; white-space:pre;color:#808080;'>index e1c1ffbfed3..e19c8a1bb34 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-devel/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -7,14 +7,14 @@ 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 9.10 wine-
</span> github.tarball_from archive
<span style='display:block; white-space:pre;background:#ffe0e0;'>-name wine-stable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-conflicts wine-devel wine-crossover
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+name wine-devel
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+conflicts wine-stable wine-staging wine-crossover
</span> set my_name wine
revision 0
platforms {darwin >= 19}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-set branch [lindex [split ${version} .] 0].0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set branch [lindex [split ${version} .] 0].x
</span> license LGPL-2.1+
categories emulators
supported_archs x86_64
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -36,9 +36,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 1c78a5448e9f5b67f2596ddad047924d26d75e7e \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 21888fe11fad645934a5a03c9a4c515821d293af2341321e129e1f779945a24f \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 49438484
</span>
depends_build \
port:bison \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -57,14 +58,12 @@ 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-8.1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ port:mingw-w64-wine-mono-9.1.0
</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-patch.diff
</span>
# Some required hacks to make wine work better on macOS & Rosetta2
patchfiles-append \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -99,6 +98,7 @@ configure.args \
</span> --without-krb5 \
--with-mingw \
--without-netapi \
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ --without-odbc \
</span> --with-opencl \
--with-opengl \
--without-oss \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -125,6 +125,31 @@ 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:#e0ffe0;'>+subport wine-staging {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ conflicts wine-stable wine-devel wine-crossover
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set staging_version ${version}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set wine_staging_distfile v${staging_version}${extract.suffix}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ distfiles-append ${wine_staging_distfile}:stagingsource
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ master_sites-append https://github.com/wine-staging/wine-staging/archive/:stagingsource
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ worksrcdir wine-${distname}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extract.rename no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ checksums-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${wine_staging_distfile} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rmd160 b3418e632fb9163a9242f9b3bc44f08c4eed5b8b \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 79af9a7f18cc975a38ec831903bd62cf509e9445600600aac5d5ed8569bb75d5 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 9436968
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_extract-append port:autoconf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Running "patchinstall.py" before 'patchfiles' get inherited from wine-devel
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # "winemac.drv-no-flicker-patch" gets inherited from wine-devel
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ post-extract {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ system -W ${worksrcpath} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "${workpath}/wine-staging-${staging_version}/staging/patchinstall.py --all -W winemac.drv-no-flicker-patch"
</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> # Makes destroot take significantly longer
variant dev description "Install ${subport} development environment" {
build.target all
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -159,7 +184,7 @@ muniversal.arch_flag no
</span> muniversal.arch_compiler yes
configure.ldflags-delete -L${compiler.library_path}
configure.optflags -g -O2
<span style='display:block; white-space:pre;background:#ffe0e0;'>-configure.env-append "CROSSCFLAGS=${configure.optflags}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.env-append "CROSSCFLAGS=${configure.optflags} -Wno-incompatible-pointer-types"
</span>
# Were only installing wine not the development files
destroot.target install-lib
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -185,4 +210,4 @@ pre-activate {
</span>
livecheck.url ${homepage}
livecheck.type regex
<span style='display:block; white-space:pre;background:#ffe0e0;'>-livecheck.regex {"/announce/([0-9]+\.0(\.[0-9]+)*)"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+livecheck.regex {"/announce/([^"]+)"}
</span><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-patch.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..afb64dcb2eb
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/emulators/wine-devel/files/0001-winemac.drv-no-flicker-patch.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,61 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From ad91a015d40c8bea7dcb603ead7897e593ea173a Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Ken Thomases <ken@codeweavers.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 22 Jun 2021 07:56:43 +1000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] winemac.drv: No Flicker patch
</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;'>+ dlls/winemac.drv/macdrv.h | 1 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dlls/winemac.drv/macdrv_main.c | 4 ++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dlls/winemac.drv/opengl.c | 2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 3 files changed, 6 insertions(+), 1 deletion(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/dlls/winemac.drv/macdrv.h b/dlls/winemac.drv/macdrv.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 19efc4dc7d4..2468d4219f6 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/dlls/winemac.drv/macdrv.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/dlls/winemac.drv/macdrv.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -44,6 +44,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern BOOL allow_set_gamma;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern BOOL allow_software_rendering;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern BOOL disable_window_decorations;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++extern BOOL force_backing_store;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern const char* debugstr_cf(CFTypeRef t);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/dlls/winemac.drv/macdrv_main.c b/dlls/winemac.drv/macdrv_main.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 21b148ff558..3034fe2f780 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/dlls/winemac.drv/macdrv_main.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/dlls/winemac.drv/macdrv_main.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -60,6 +60,7 @@ int use_precise_scrolling = TRUE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int gl_surface_mode = GL_SURFACE_IN_FRONT_OPAQUE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int retina_enabled = FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int enable_app_nap = FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++BOOL force_backing_store = FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CFDictionaryRef localized_strings;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -378,6 +379,9 @@ static void setup_options(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!get_config_key(hkey, appkey, "EnableAppNap", buffer, sizeof(buffer)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ enable_app_nap = IS_OPTION_TRUE(buffer[0]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!get_config_key(hkey, appkey, "ForceOpenGLBackingStore", buffer, sizeof(buffer)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ force_backing_store = IS_OPTION_TRUE(buffer[0]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Don't use appkey. The DPI and monitor sizes should be consistent for all
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ processes in the prefix. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!get_config_key(hkey, NULL, "RetinaMode", buffer, sizeof(buffer)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/dlls/winemac.drv/opengl.c b/dlls/winemac.drv/opengl.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 1c0b87d694a..b0a3e25fd73 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/dlls/winemac.drv/opengl.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/dlls/winemac.drv/opengl.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1451,7 +1451,7 @@ static BOOL create_context(struct wgl_context *context, CGLContextObj share, uns
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ attribs[n++] = pf->samples;
</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 (pf->backing_store)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (force_backing_store || pf->backing_store)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ attribs[n++] = kCGLPFABackingStore;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (core)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.43.0
</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-devel/files/macos_hacks.diff b/emulators/wine-devel/files/macos_hacks.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..267b46526b4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/emulators/wine-devel/files/macos_hacks.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,941 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/dlls/kernelbase/process.c b/dlls/kernelbase/process.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 775512e7f0d..049d8224789 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/dlls/kernelbase/process.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/dlls/kernelbase/process.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -502,6 +502,46 @@ done:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return ret;
</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 const WCHAR *hack_append_command_line( const WCHAR *cmd, const WCHAR *cmd_line )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* CROSSOVER HACK: bug 13322 (winehq bug 39403)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Insert --no-sandbox in command line of Steam's web helper process to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * work around rendering problems.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * CROSSOVER HACK: bug 17315
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Insert --in-process-gpu in command line of Steam's web helper process to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * work around page rendering problems.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * CROSSOVER HACK: bug 21883
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Insert --disable-gpu as well.
</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 const struct
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const WCHAR *exe_name;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const WCHAR *append;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const WCHAR *required_args;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const WCHAR *forbidden_args;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ options[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {L"steamwebhelper.exe", L" --no-sandbox --in-process-gpu --disable-gpu", NULL, L"--type=crashpad-handler"},
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ unsigned int i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!cmd) return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ for (i = 0; i < ARRAY_SIZE(options); ++i)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (wcsstr( cmd, options[i].exe_name )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ && (!options[i].required_args || wcsstr(cmd_line, options[i].required_args))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ && (!options[i].forbidden_args || !wcsstr(cmd_line, options[i].forbidden_args)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ FIXME( "HACK: appending %s to command line.\n", debugstr_w(options[i].append) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return options[i].append;
</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;'>+ /**********************************************************************
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * CreateProcessInternalW (kernelbase.@)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -518,6 +558,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessInternalW( HANDLE token, const WCHAR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ RTL_USER_PROCESS_PARAMETERS *params = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ RTL_USER_PROCESS_INFORMATION rtl_info;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HANDLE parent = 0, debug = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const WCHAR *append;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ULONG nt_flags = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ USHORT machine = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ NTSTATUS status;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -543,6 +584,20 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessInternalW( HANDLE token, const WCHAR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ app_name = name;
</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;'>++ /* CROSSOVER HACK */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if ((append = hack_append_command_line( app_name, tidy_cmdline )))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ WCHAR *new_cmdline = RtlAllocateHeap( GetProcessHeap(), 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ sizeof(WCHAR) * (lstrlenW(cmd_line) + lstrlenW(append) + 1) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ lstrcpyW(new_cmdline, tidy_cmdline);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ lstrcatW(new_cmdline, append);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (tidy_cmdline != cmd_line) RtlFreeHeap( GetProcessHeap(), 0, tidy_cmdline );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ tidy_cmdline = new_cmdline;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* end CROSSOVER HACK */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ TRACE( "app %s cmdline %s after all hacks\n", debugstr_w(app_name), debugstr_w(tidy_cmdline) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Warn if unsupported features are used */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (flags & (IDLE_PRIORITY_CLASS | HIGH_PRIORITY_CLASS | REALTIME_PRIORITY_CLASS |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 5c59d102dd9..08df8328080 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/dlls/ntdll/loader.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/dlls/ntdll/loader.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2712,6 +2712,331 @@ static WINE_MODREF *find_existing_module( HMODULE module )
</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;'>++#ifdef __x86_64__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* CW HACK 19487: Patch out %gs:8h accesses in various versions of libcef.dll */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static void patch_libcef( const WCHAR* libname, WINE_MODREF** pwm )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static const char before_85_3_9_0[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x65, 0x48, 0x8b, 0x04, 0x25, 0x08, 0x00, 0x00, 0x00, /* mov rax, qword [gs:0x8] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xc3, /* ret */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x83, 0xec, 0x28, /* sub rsp, 0x28 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x65, 0x48, 0x8b, 0x04, 0x25, 0x08, 0x00, 0x00, 0x00, /* mov rax, qword [gs:0x8] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x83, 0xc0, 0xf8 /* add rax, 0xfffffffffffffff8 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static const char after_85_3_9_0[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x65, 0x48, 0x8b, 0x04, 0x25, 0x30, 0x00, 0x00, 0x00, /* mov rax, qword [gs:0x30] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x8b, 0x40, 0x08, /* mov rax, qword [rax+8] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xc3, /* ret */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x83, 0xec, 0x28, /* sub rsp, 0x28 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xe8, 0xe7, 0xff, 0xff, 0xff, /* call 0xfffffffffffffffe */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x83, 0xc0, 0xf8 /* add rax,0xfffffffffffffff8 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ C_ASSERT( sizeof(before_85_3_9_0) == sizeof(after_85_3_9_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;'>++ /* The first patch needed for 85.3.11 is the same as 85_3_9_0, just at a different offset. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static const char before_85_3_11_1[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x8b, 0x44, 0x24, 0x28, /* mov rax, qword ptr [rsp + 0x28] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x65, 0x48, 0x8b, 0x34, 0x25, 0x08, 0x00, 0x00, 0x00, /* mov rsi, qword ptr gs:[0x8] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x85, 0xf6, /* test rsi, rsi */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x74, 0x2e /* jz 0x028c525b */
</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 const char after_85_3_11_1[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* Taking a cue from after_72_0_3626_121_2 - overwriting the test and jump to make room. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x8b, 0x44, 0x24, 0x28, /* mov rax, qword ptr [rsp + 0x28] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x65, 0x48, 0x8b, 0x34, 0x25, 0x30, 0x00, 0x00, 0x00, /* mov rsi, qword ptr gs:[0x30] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x8b, 0x76, 0x08, /* mov rsi, qword ptr [rsi+8] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ C_ASSERT( sizeof(before_85_3_11_1) == sizeof(after_85_3_11_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;'>++ static const char before_72_0_3626_121_1[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x65, 0x48, 0x8b, 0x04, 0x25, 0x08, 0x00, 0x00, 0x00, /* mov rax, qword [gs:0x8] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xc3, /* ret */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x83, 0xec, 0x28, /* sub rsp, 0x28 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x65, 0x48, 0x8b, 0x04, 0x25, 0x08, 0x00, 0x00, 0x00, /* mov rax, qword [gs:0x8] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x83, 0xc0, 0xf8, /* add rax, 0xfffffffffffffff8 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static const char after_72_0_3626_121_1[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xe8, 0xb7, 0x00, 0x00, 0x00, /* call 0xbc */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xc3, /* ret */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x83, 0xec, 0x28, /* sub rsp, 0x28 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xe8, 0xa9, 0x00, 0x00, 0x00, /* call 0xae */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x83, 0xc0, 0xf8, /* add rax, 0xfffffffffffffff8 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ C_ASSERT( sizeof(before_72_0_3626_121_1) == sizeof(after_72_0_3626_121_1) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static const char before_72_0_3626_121_2[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x8b, 0x46, 0x08, /* mov rax, qword [rsi+8] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x65, 0x48, 0x8b, 0x34, 0x25, 0x08, 0x00, 0x00, 0x00, /* mov rsi, qword [gs:0x8] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x85, 0xf6, /* test rsi, rsi */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x74, 0x2e, /* je 0x30 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static const char after_72_0_3626_121_2[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x8b, 0x46, 0x08, /* mov rax, qword [rsi+8] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x65, 0x48, 0x8b, 0x34, 0x25, 0x30, 0x00, 0x00, 0x00, /* mov rsi, qword [gs:0x30] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x8b, 0x76, 0x08, /* mov rsi, qword [rsi+8] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ C_ASSERT( sizeof(before_72_0_3626_121_2) == sizeof(after_72_0_3626_121_2) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static const char before_72_0_3626_121_3[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x0f, 0x0b, /* ud2 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x6a, 0x1c, /* push 0x1c */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x0f, 0x0b, /* ud2 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x0f, 0x0b, /* ud2 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x6a, 0x1d, /* push 0x1d */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x0f, 0x0b /* ud2 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static const char after_72_0_3626_121_3[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x65, 0x48, 0x8b, 0x04, 0x25, 0x30, 0x00, 0x00, 0x00, /* mov rax, qword [gs:0x30] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x8b, 0x40, 0x08, /* mov rax, qword [rax+8] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xc3, /* ret */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ C_ASSERT( sizeof(before_72_0_3626_121_3) == sizeof(after_72_0_3626_121_3) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static const char before_qt_5_15_2_0_1[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x65, 0x48, 0x8b, 0x04, 0x25, 0x08, 0x00, 0x00, 0x00, /* mov rax, qword [gs:0x8] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xc3, /* ret */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x83, 0xec, 0x28, /* sub rsp, 0x28 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x65, 0x48, 0x8b, 0x04, 0x25, 0x08, 0x00, 0x00, 0x00, /* mov rax, qword [gs:0x8] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x83, 0xe8, 0x08 /* sub rax, 0x8 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static const char after_qt_5_15_2_0_1[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x65, 0x48, 0x8b, 0x04, 0x25, 0x30, 0x00, 0x00, 0x00, /* mov rax, qword [gs:0x30] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x8b, 0x40, 0x08, /* mov rax, qword [rax+8] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xc3, /* ret */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xcc, /* int3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x83, 0xec, 0x28, /* sub rsp, 0x28 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xe8, 0xe7, 0xff, 0xff, 0xff, /* call 0xfffffffffffffffe */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x83, 0xe8, 0x08 /* sub rax,0x8 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ C_ASSERT( sizeof(before_qt_5_15_2_0_1) == sizeof(after_qt_5_15_2_0_1) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static const char before_qt_5_15_2_0_2[] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xff, 0x15, 0xd5, 0xb4, 0x6e, 0x02, /* call [KERNEL32.DLL::VirtualQuery] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x65, 0x48, 0x8b, 0x04, 0x25, 0x08, 0x00, 0x00, 0x00, /* mov rax, qword [gs:0x8] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x8b, 0x4c, 0x24, 0x28 /* mov rcx, qword [rsp+0x28] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static const char after_qt_5_15_2_0_2[] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xff, 0x15, 0xd5, 0xb4, 0x6e, 0x02, /* call [KERNEL32.DLL::VirtualQuery] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0xe8, 0x78, 0xff, 0xff, 0xff, /* call 0xfffffffffffffffe */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x90, /* nop */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x48, 0x8b, 0x4c, 0x24, 0x28 /* mov rcx, qword [rsp+0x28] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ C_ASSERT( sizeof(before_qt_5_15_2_0_2) == sizeof(after_qt_5_15_2_0_2) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const WCHAR *libname;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const char *name;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const void *before, *after;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ size_t size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ULONG_PTR offset;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ BOOL stop_patching_after_success;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ } static const patches[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* CW HACK 22584L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * libcef.dll 85.3.11, for an updated Rockstar Games Social Club/Launcher.
</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;'>++ "85.3.11-0",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* This patch is identical to the one for 85.3.9, just at a different offset. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ before_85_3_9_0, after_85_3_9_0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ sizeof(before_85_3_9_0),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x28c5190,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 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;'>++ L"libcef.dll",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "85.3.11-1",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ before_85_3_11_1, after_85_3_11_1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ sizeof(before_85_3_11_1),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x28c521a,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 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;'>++ /* CW HACK 18582:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * libcef.dll 85.3.9.0 used by the Rockstar Games Social Club/Launcher
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * (and downloadable from
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * https://cef-builds.spotifycdn.com/index.html#windows64).
</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;'>++ "85.3.9.0",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ before_85_3_9_0, after_85_3_9_0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ sizeof(before_85_3_9_0),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x28c4b30,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 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;'>++ /* CW HACK 19114:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * libcef.dll 72.0.3626.121 used by the game beamNG.drive.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Patch also works for version downloadable from CEF builds.
</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;'>++ "72.0.3626.121",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ before_72_0_3626_121_1, after_72_0_3626_121_1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ sizeof(before_72_0_3626_121_1),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x23bb2ad,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 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;'>++ L"libcef.dll",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "72.0.3626.121",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ before_72_0_3626_121_2, after_72_0_3626_121_2,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ sizeof(before_72_0_3626_121_2),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x23bb329,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 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;'>++ L"libcef.dll",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "72.0.3626.121",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ before_72_0_3626_121_3, after_72_0_3626_121_3,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ sizeof(before_72_0_3626_121_3),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x23bb369,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 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;'>++ /* CW HACK 16900:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * libcef.dll 72.0.3626.96 used by the game Wizard101.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Patch also works for version 3.3626.1886.g162fdec downloadable from CEF builds.
</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;'>++ "72.0.3626.96",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* This patch is identical to the one for 72.0.3626.121, just at a different offset. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ before_72_0_3626_121_1, after_72_0_3626_121_1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ sizeof(before_72_0_3626_121_1),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x23bb82d,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 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;'>++ L"libcef.dll",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "72.0.3626.96",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ before_72_0_3626_121_2, after_72_0_3626_121_2,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ sizeof(before_72_0_3626_121_2),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x23bb8a9,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 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;'>++ L"libcef.dll",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "72.0.3626.96",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ before_72_0_3626_121_3, after_72_0_3626_121_3,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ sizeof(before_72_0_3626_121_3),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x23bb8e9,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 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;'>++ /* CW HACK 21548:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Qt5WebEngineCore.dll 5.15.2.0 used by the EA Launcher.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Based on CEF 83.0.4103.122, but has different offsets.
</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"Qt5WebEngineCore.dll",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "5.15.2.0",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ before_qt_5_15_2_0_1, after_qt_5_15_2_0_1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ sizeof(before_qt_5_15_2_0_1),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x2810f10,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 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;'>++ L"Qt5WebEngineCore.dll",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "5.15.2.0",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ before_qt_5_15_2_0_2, after_qt_5_15_2_0_2,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ sizeof(before_qt_5_15_2_0_2),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0x2810f8d,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 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;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ unsigned int i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ SIZE_T pagesize = page_size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ for (i = 0; i < ARRAY_SIZE(patches); i++)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ DWORD old_prot;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void *dllbase = (*pwm)->ldr.DllBase;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void *target = (void *)((ULONG_PTR)dllbase + patches[i].offset);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void *target_page = (void *)((ULONG_PTR)target & ~(page_size-1));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (wcscmp( libname, patches[i].libname ))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ continue;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if ((*pwm)->ldr.SizeOfImage < patches[i].offset)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ TRACE( "%s too small to be %s\n", debugstr_w(libname), patches[i].name );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ continue;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (memcmp( target, patches[i].before, patches[i].size ))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ TRACE( "%s doesn't match %s\n", debugstr_w(libname), patches[i].name );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ continue;
</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;'>++ 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;'>++ NtProtectVirtualMemory( NtCurrentProcess(), &target_page, &pagesize, PAGE_EXECUTE_READWRITE, &old_prot );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ memcpy( target, patches[i].after, patches[i].size );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ NtProtectVirtualMemory( NtCurrentProcess(), &target_page, &pagesize, old_prot, &old_prot );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (patches[i].stop_patching_after_success)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ break;
</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;'>++#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;'>+ * load_native_dll (internal)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3293,6 +3618,10 @@ static NTSTATUS load_dll( const WCHAR *load_path, const WCHAR *libname, DWORD fl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case STATUS_SUCCESS: /* valid PE file */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ nts = load_native_dll( load_path, &nt_name, mapping, &image_info, &id, flags, system, pwm );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __x86_64__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (nts == STATUS_SUCCESS && (!wcscmp( libname, L"libcef.dll" ) || !wcscmp( libname, L"Qt5WebEngineCore.dll" )))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ patch_libcef( libname, pwm );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</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;'>+@@ -4282,6 +4611,18 @@ static void release_address_space(void)
</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;'>++#ifdef __x86_64__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++extern void CDECL wine_get_host_version( const char **sysname, const char **release );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static BOOL is_macos(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const char *sysname;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ wine_get_host_version( &sysname, NULL );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return !strcmp( sysname, "Darwin" );
</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;'>+ * loader_init
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4357,6 +4698,24 @@ void loader_init( CONTEXT *context, void **entry )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else wm = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress );
</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;'>++ if (is_macos() && !NtCurrentTeb()->WowTebOffset)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* CW HACK 18756 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* Preallocate TlsExpansionSlots. Otherwise, kernelbase will
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ allocate it on demand, but won't be able to do the Mac-specific poking to the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ %gs-relative address. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!NtCurrentTeb()->TlsExpansionSlots)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ NtCurrentTeb()->TlsExpansionSlots = RtlAllocateHeap( GetProcessHeap(), HEAP_ZERO_MEMORY, 8 * sizeof(NtCurrentTeb()->Peb->TlsExpansionBitmapBits) * sizeof(void*) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __asm__ volatile ("movq %0,%%gs:%c1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ :
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ : "r" (NtCurrentTeb()->TlsExpansionSlots), "n" (FIELD_OFFSET(TEB, TlsExpansionSlots)));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!attach_done) /* only the first time */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ while (RtlFindClearBitsAndSet(NtCurrentTeb()->Peb->TlsBitmap, 1, 1) != ~0U);
</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;'>+ #ifdef _WIN64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (NtCurrentTeb()->WowTebOffset) init_wow64( context );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 9d866fa70f5..992db125965 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/dlls/ntdll/unix/loader.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/dlls/ntdll/unix/loader.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1809,6 +1809,48 @@ static ULONG_PTR get_image_address(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 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;'>++#if defined(__APPLE__) && defined(__x86_64__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static __thread struct tm localtime_tls;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct tm *my_localtime(const time_t *timep)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return localtime_r(timep, &localtime_tls);
</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 hook(void *to_hook, const void *replace)
</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;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct hooked_function
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ char jmp[8];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const void *dst;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ } *hooked_function = to_hook;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ULONG_PTR intval = (UINT_PTR)to_hook;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ intval -= (intval % 4096);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mprotect((void *)intval, 0x2000, PROT_EXEC | PROT_READ | PROT_WRITE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* The offset is from the end of the jmp instruction (6 bytes) to the start of the destination. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ offset = offsetof(struct hooked_function, dst) - offsetof(struct hooked_function, jmp) - 0x6;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* jmp *(rip + offset) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hooked_function->jmp[0] = 0xff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hooked_function->jmp[1] = 0x25;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hooked_function->jmp[2] = offset;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hooked_function->jmp[3] = 0x00;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hooked_function->jmp[4] = 0x00;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hooked_function->jmp[5] = 0x00;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* Filler */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hooked_function->jmp[6] = 0xcc;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hooked_function->jmp[7] = 0xcc;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* Dest address absolute */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hooked_function->dst = replace;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ //size = sizeof(*hooked_function);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ //NtProtectVirtualMemory(proc, (void **)hooked_function, &size, old_protect, &old_protect);
</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;'>+ * start_main_thread
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1831,6 +1873,13 @@ static void start_main_thread(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ load_ntdll();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ load_wow64_ntdll( main_image_info.Machine );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ load_apiset_dll();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__APPLE__) && defined(__x86_64__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* This is necessary because we poke PEB into pthread TLS at offset 0x60. It is normally in use by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * localtime(), which is called a lot by system libraries. Make localtime() go away. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hook(localtime, my_localtime);
</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;'>+ server_init_process_done();
</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;'>+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:#e0ffe0;'>+index a163d5d0b33..73995693b57 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/dlls/ntdll/unix/signal_x86_64.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/dlls/ntdll/unix/signal_x86_64.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1003,7 +1003,11 @@ NTSTATUS WINAPI NtSetContextThread( HANDLE handle, const CONTEXT *context )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ret = set_thread_context( handle, context, &self, IMAGE_FILE_MACHINE_AMD64 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if ((flags & CONTEXT_DEBUG_REGISTERS) && (ret == STATUS_UNSUCCESSFUL))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- WARN_(seh)( "Setting debug registers is not supported under Rosetta\n" );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* CW HACK 22131 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ WARN_(seh)( "Setting debug registers is not supported under Rosetta, faking success\n" );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ret = STATUS_SUCCESS;
</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;'>+ if (ret || !self) return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (flags & CONTEXT_DEBUG_REGISTERS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1216,6 +1220,14 @@ NTSTATUS set_thread_wow64_context( HANDLE handle, const void *ctx, ULONG size )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!self)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ NTSTATUS ret = set_thread_context( handle, context, &self, IMAGE_FILE_MACHINE_I386 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if ((flags & CONTEXT_DEBUG_REGISTERS) && (ret == STATUS_UNSUCCESSFUL))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* CW HACK 22131 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ WARN_(seh)( "Setting debug registers is not supported under Rosetta, faking success\n" );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ret = STATUS_SUCCESS;
</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;'>+ if (ret || !self) return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (flags & CONTEXT_I386_DEBUG_REGISTERS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1711,6 +1723,135 @@ NTSTATUS WINAPI NtCallbackReturn( void *ret_ptr, ULONG ret_len, NTSTATUS status
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ user_mode_callback_return( ret_ptr, ret_len, status, NtCurrentTeb() );
</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 __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/***********************************************************************
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * handle_cet_nop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Check if the fault location is an Intel CET instruction that should be treated as a NOP.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Rosetta on Big Sur throws an exception for this, but is fixed in Monterey.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * CW HACK 20186
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static inline BOOL handle_cet_nop( ucontext_t *sigcontext, CONTEXT *context )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ BYTE instr[16];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ unsigned int i, prefix_count = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ unsigned int len = virtual_uninterrupted_read_memory( (BYTE *)context->Rip, instr, sizeof(instr) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ for (i = 0; i < len; i++) switch (instr[i])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* instruction prefixes */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x2e: /* %cs: */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x36: /* %ss: */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x3e: /* %ds: */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x26: /* %es: */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x40: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x41: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x42: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x43: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x44: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x45: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x46: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x47: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x48: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x49: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x4a: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x4b: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x4c: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x4d: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x4e: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x4f: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x64: /* %fs: */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x65: /* %gs: */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x66: /* opcode size */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x67: /* addr size */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0xf0: /* lock */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0xf2: /* repne */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0xf3: /* repe */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (++prefix_count >= 15) return FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ continue;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x0f: /* extended instruction */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (i == len - 1) return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ switch (instr[i + 1])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x1E:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* RDSSPD/RDSSPQ: (prefixes) 0F 1E (modrm) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ RIP_sig(sigcontext) += prefix_count + 3;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ TRACE_(seh)( "skipped RDSSPD/RDSSPQ instruction\n" );
</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;'>++ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ default:
</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 FALSE;
</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;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/***********************************************************************
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * handle_fndisi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Check if the fault location is an x87 FNDISI instruction that should be treated as a NOP.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static inline BOOL handle_fndisi( ucontext_t *sigcontext, CONTEXT *context )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ BYTE instr[16];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ unsigned int i, prefix_count = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ unsigned int len = virtual_uninterrupted_read_memory( (BYTE *)context->Rip, instr, sizeof(instr) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ for (i = 0; i < len; i++) switch (instr[i])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* instruction prefixes */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x2e: /* %cs: */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x36: /* %ss: */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x3e: /* %ds: */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x26: /* %es: */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x40: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x41: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x42: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x43: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x44: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x45: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x46: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x47: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x48: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x49: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x4a: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x4b: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x4c: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x4d: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x4e: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x4f: /* rex */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x64: /* %fs: */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x65: /* %gs: */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x66: /* opcode size */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0x67: /* addr size */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0xf0: /* lock */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0xf2: /* repne */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0xf3: /* repe */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (++prefix_count >= 15) return FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ continue;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0xdb:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (i == len - 1) return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ switch (instr[i + 1])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case 0xe1:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* RDSSPD/RDSSPQ: (prefixes) DB E1 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ RIP_sig(sigcontext) += prefix_count + 2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ TRACE_(seh)( "skipped FNDISI instruction\n" );
</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;'>++ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ default:
</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 FALSE;
</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;'>+ /***********************************************************************
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * is_privileged_instr
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1952,7 +2093,14 @@ static void segv_handler( int signal, siginfo_t *siginfo, void *sigcontext )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rec.ExceptionCode = EXCEPTION_ARRAY_BOUNDS_EXCEEDED;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case TRAP_x86_PRIVINFLT: /* Invalid opcode exception */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* CW HACK 20186 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (handle_cet_nop( ucontext, &context.c )) return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rec.ExceptionCode = EXCEPTION_ILLEGAL_INSTRUCTION;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (handle_fndisi( ucontext, &context.c )) return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case TRAP_x86_STKFLT: /* Stack fault */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rec.ExceptionCode = EXCEPTION_STACK_OVERFLOW;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2530,6 +2678,8 @@ void call_init_thunk( LPTHREAD_START_ROUTINE entry, void *arg, BOOL suspend, TEB
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ volatile (".byte 0x65\n\tmovq %0,%c1" :: "r" (teb->Tib.Self), "n" (FIELD_OFFSET(TEB, Tib.Self)));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ volatile (".byte 0x65\n\tmovq %0,%c1" :: "r" (teb->ThreadLocalStoragePointer), "n" (FIELD_OFFSET(TEB, ThreadLocalStoragePointer)));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ thread_data->pthread_teb = mac_thread_gsbase();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __asm__ volatile (".byte 0x65\n\tmovq %0,%c1" :: "r" (teb->Peb), "n" (FIELD_OFFSET(TEB, Peb)));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ amd64_thread_data()->pthread_teb = mac_thread_gsbase();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* alloc_tls_slot() needs to poke a value to an address relative to each
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ thread's gsbase. Have each thread record its gsbase pointer into its
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEB so alloc_tls_slot() can find it. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/dlls/ntdll/unix/thread.c b/dlls/ntdll/unix/thread.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 3d151e7b2b8..03d1516fc03 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/dlls/ntdll/unix/thread.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/dlls/ntdll/unix/thread.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1096,6 +1096,16 @@ static DECLSPEC_NORETURN void pthread_exit_wrapper( int status )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ close( ntdll_get_thread_data()->wait_fd[1] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ close( ntdll_get_thread_data()->reply_fd );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ close( ntdll_get_thread_data()->request_fd );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__APPLE__) && defined(__x86_64__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* Remove the PEB from the localtime field in %gs, or MacOS might try
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * to free() the pointer and crash. That happens for processes that are
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * using the alt loader for dock integration. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __asm__ volatile (".byte 0x65\n\tmovq %q0,%c1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ :
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ : "r" (NULL), "n" (FIELD_OFFSET(TEB, Peb)));
</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;'>+ pthread_exit( UIntToPtr(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;'>+diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 4b23d9954df..9e59ee46785 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/dlls/ntdll/unix/virtual.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/dlls/ntdll/unix/virtual.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -5924,6 +5924,56 @@ NTSTATUS WINAPI NtReadVirtualMemory( HANDLE process, const void *addr, void *buf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 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;'>++#ifdef __APPLE__
</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;'>++/* CW HACK 18947
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * If mach_vm_write() is used to modify code cross-process (which is how we implement
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * NtWriteVirtualMemory), Rosetta won't notice the change and will execute the "old" code.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * To work around this, after the write completes,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * toggle the executable bit (from inside the target process) on/off for any executable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * pages that were modified, to force Rosetta to re-translate it.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static void toggle_executable_pages_for_rosetta( HANDLE process, void *addr, SIZE_T size )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ MEMORY_BASIC_INFORMATION info;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ NTSTATUS status;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ SIZE_T ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!is_apple_silicon())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ status = NtQueryVirtualMemory( process, addr, MemoryBasicInformation, &info, sizeof(info), &ret );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!status && (info.AllocationProtect & 0xf0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ DWORD origprot, noexec;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ noexec = info.AllocationProtect & ~0xf0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!noexec) noexec = PAGE_NOACCESS;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ NtProtectVirtualMemory( process, &addr, &size, noexec, &origprot );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ NtProtectVirtualMemory( process, &addr, &size, origprot, &noexec );
</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;'>++#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;'>+ * NtWriteVirtualMemory (NTDLL.@)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -5944,6 +5994,10 @@ NTSTATUS WINAPI NtWriteVirtualMemory( HANDLE process, void *addr, const void *bu
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if ((status = wine_server_call( req ))) size = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ SERVER_END_REQ;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ toggle_executable_pages_for_rosetta( process, addr, size );
</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;'>+ else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/dlls/wow64cpu/cpu.c b/dlls/wow64cpu/cpu.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index c574315ec7d..a13df489733 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/dlls/wow64cpu/cpu.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/dlls/wow64cpu/cpu.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -39,6 +39,15 @@ struct thunk_32to64
</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><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ BYTE add;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ BYTE add_modrm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ BYTE add_op;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ BYTE jmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ BYTE jmp_modrm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ DWORD jmp_op;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ULONG64 jmp_addr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct thunk_opcodes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -211,7 +220,18 @@ __ASM_GLOBAL_FUNC( syscall_32to64,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl %edx,4(%rsp)\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl 0xc4(%r13),%r14d\n\t" /* context->Esp */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xchgq %r14,%rsp\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "ljmp *(%r14)\n"
</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;'>++ * Use lretq rather than ljmp to work around a Rosetta SIGUSR1 race condition.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "subq $0x10,%rsp\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "movl 4(%r14),%ebx\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "movq %rbx,0x8(%rsp)\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "movl 0(%r14),%ebx\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "movq %rbx,(%rsp)\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "movl 0xa4(%r13),%ebx\n\t" /* context->Ebx */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "lretq\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ".Lsyscall_32to64_return:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movq %rsp,%r14\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl 0xa8(%r13),%edx\n\t" /* context->Edx */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -268,7 +288,16 @@ __ASM_GLOBAL_FUNC( unix_call_32to64,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl %edx,4(%rsp)\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl 0xc4(%r13),%r14d\n\t" /* context->Esp */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xchgq %r14,%rsp\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "ljmp *(%r14)" )
</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;'>++ * Use lretq rather than ljmp to work around a Rosetta SIGUSR1 race condition.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "subq $0x10,%rsp\n\t"
</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><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "lretq" )
</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;'>+@@ -322,22 +351,53 @@ NTSTATUS WINAPI BTCpuProcessInit(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ds64_sel = context.SegDs;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fs32_sel = context.SegFs;
</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;'>++ /* CW HACK 20760:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Use lcall rather than ljmp to work around a Rosetta SIGUSR1 race condition.
</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; /* call far, absolute indirect */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk.modrm = 0x1d; /* address=disp32, opcode=3 */
</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.addr = PtrToUlong( &thunk->syscall_thunk.add );
</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;'>++ /* 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.add = 0x83;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk.add_modrm = 0xc4;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk.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.jmp = 0xff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk.jmp_modrm = 0x25;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk.jmp_op = 0x00;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->syscall_thunk.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;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* CW HACK 20760:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Use lcall rather than ljmp to work around a Rosetta SIGUSR1 race condition.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ thunk->unix_thunk.pushl = 0x68;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ thunk->unix_thunk.dispatcher_high = (ULONG_PTR)*p__wine_unix_call_dispatcher >> 32;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ thunk->unix_thunk.pushl2 = 0x68;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ thunk->unix_thunk.dispatcher_low = (ULONG_PTR)*p__wine_unix_call_dispatcher;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- thunk->unix_thunk.t.ljmp = 0xff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- thunk->unix_thunk.t.modrm = 0x2d;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk.t.ljmp = 0xff; /* call far, absolute indirect */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk.t.modrm = 0x1d; /* address=disp32, opcode=3 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ thunk->unix_thunk.t.op = PtrToUlong( &thunk->unix_thunk.t.addr );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- thunk->unix_thunk.t.addr = PtrToUlong( unix_call_32to64 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk.t.addr = PtrToUlong( &thunk->unix_thunk.t.add );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ thunk->unix_thunk.t.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.t.add = 0x83;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk.t.add_modrm = 0xc4;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk.t.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.t.jmp = 0xff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk.t.jmp_modrm = 0x25;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk.t.jmp_op = 0x00;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ thunk->unix_thunk.t.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;'>+ NtProtectVirtualMemory( GetCurrentProcess(), (void **)&thunk, &size, PAGE_EXECUTE_READ, &old_prot );
</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;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 e1c1ffbfed3..35c087575e5 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;'>@@ -10,7 +10,7 @@ PortGroup muniversal 1.1
</span> github.setup wine-mirror wine 9.0 wine-
github.tarball_from archive
name wine-stable
<span style='display:block; white-space:pre;background:#ffe0e0;'>-conflicts wine-devel wine-crossover
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+conflicts wine-devel wine-staging wine-crossover
</span> set my_name wine
revision 0
platforms {darwin >= 19}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/wine-devel/Portfile b/x11/wine-devel/Portfile
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 858c5340797..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/x11/wine-devel/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,389 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PortSystem 1.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PortGroup muniversal 1.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PortGroup compiler_blacklist_versions 1.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Please keep the wine, wine-devel and wine-crossover ports as similar as possible.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-name wine-devel
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-conflicts wine wine-crossover
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set my_name wine
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-version 4.9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-revision 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set branch [lindex [split ${version} .] 0].x
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-license LGPL-2.1+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-categories x11
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-maintainers {ryandesign @ryandesign} openmaintainer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-homepage https://www.winehq.org
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-platforms darwin
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-use_xz yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-distname ${my_name}-${version}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-dist_subdir ${my_name}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set wine_distfile ${distname}${extract.suffix}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set wine_gecko_version 2.47
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set wine_gecko_distfile wine_gecko-${wine_gecko_version}-x86.msi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set wine_gecko64_distfile wine_gecko-${wine_gecko_version}-x86_64.msi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set wine_mono_version 4.8.3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set wine_mono_distfile wine-mono-${wine_mono_version}.msi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-use_parallel_build yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-description A Windows API implementation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-long_description Wine is a compatibility layer capable of running \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Windows applications. \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Instead of simulating internal Windows logic like \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- a virtual machine or emulator, Wine translates \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Windows API calls into POSIX calls on-the-fly, \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- eliminating the performance and memory penalties \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- of other methods and allowing you to cleanly \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- integrate Windows applications into your desktop.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-master_sites http://mirrors.ibiblio.org/wine/source/${branch}/:winesource \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- http://dl.winehq.org/wine/source/${branch}/:winesource \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sourceforge:project/wine/Source/:winesource \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- http://dl.winehq.org/wine/wine-gecko/${wine_gecko_version}/:winegecko \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sourceforge:project/wine/Wine%20Gecko/${wine_gecko_version}/:winegecko \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- http://dl.winehq.org/wine/wine-mono/${wine_mono_version}/:winemono \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sourceforge:project/wine/Wine%20Mono/${wine_mono_version}/:winemono
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extract.only ${wine_distfile}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-distfiles ${wine_distfile}:winesource \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ${wine_gecko_distfile}:winegecko \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ${wine_gecko64_distfile}:winegecko \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ${wine_mono_distfile}:winemono
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums ${wine_distfile} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rmd160 bdad0bc09d02352c6ea54a02b40b5fba7bbe0649 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 91848e22fff3cb17db7fe7d727d714d21c5d4229dd460b5d1506753021fc799b \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 22077528 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ${wine_gecko_distfile} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rmd160 abf7cc78b49dd0623bc8fe87ae0e32bb8694e13d \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 3b8a361f5d63952d21caafd74e849a774994822fb96c5922b01d554f1677643a \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 49266176 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ${wine_gecko64_distfile} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rmd160 254da21cb2503f20d065167b385b3e83ea3ab327 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 c565ea25e50ea953937d4ab01299e4306da4a556946327d253ea9b28357e4a7d \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 50806272 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ${wine_mono_distfile} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rmd160 e42fa8c06fcd727d5c2cd635ee1bbe0bbe40ebfb \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 d6fa1f019bfa3c572438e4a2473ce25af1e937ed4cdcbe46554164ce25db0a76 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 116183552
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Note: Most of the X11 libs are dlopen()'d
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-depends_lib port:fontconfig \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:freetype \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:gstreamer1 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:gstreamer1-gst-plugins-base \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- path:include/turbojpeg.h:libjpeg-turbo \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:lcms2 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:libiconv \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:libpcap \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:libpng \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:libxml2 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:libxslt \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:ncurses \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- path:lib/pkgconfig/gnutls.pc:gnutls \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:openal-soft \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:tiff \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:zlib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-depends_build port:bison \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:flex \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:pkgconfig
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-post-extract {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set fp [open ${worksrcpath}/dlls/appwiz.cpl/addons.c r]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set file_contents [read ${fp}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- close ${fp}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach addon {gecko mono} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set addon_version_var wine_${addon}_version
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set addon_version_in_port [set ${addon_version_var}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[regexp -lineanchor "^#define [string toupper $addon]_VERSION \"(\[^\"\]+)\"$" ${file_contents} -> addon_version_in_file] == 1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${addon_version_in_port} ne ${addon_version_in_file}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_error "${addon_version_var} should be ${addon_version_in_file} not ${addon_version_in_port}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_error "Could not determine what ${addon_version_var} should be"
</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;'>- if {!${ok}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -code error
</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;'>-patchfiles BOOL.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cups_headers.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fix-flicker.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- mach_machine.patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-pre-configure {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[variant_exists universal] && [variant_isset universal]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach arch ${universal_archs_to_use} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- file mkdir ${worksrcpath}-${arch}
</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;'>- configure.cmd ${worksrcpath}/configure
</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;'>-# Wine requires the program specified in INSTALL to create intermediate
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# directories; /usr/bin/install doesn't.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# http://bugs.winehq.org/show_bug.cgi?id=35310
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-configure.install ${worksrcpath}/tools/install-sh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-configure.args --without-alsa \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-capi \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-cms \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-coreaudio \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-cups \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-curses \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-dbus \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-fontconfig \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-freetype \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-gettext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-gettextpo \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-gphoto \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-glu \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-gnutls \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-gsm \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-gstreamer \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-hal \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-jpeg \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-ldap \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-mpg123 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-netapi \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-openal \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-opencl \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-opengl \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-osmesa \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-oss \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-pcap \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-png \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-pthread \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-pulse \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-sane \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-tiff \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-udev \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-v4l \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xcomposite \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xcursor \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xinerama \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xinput \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xinput2 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-xml \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xrandr \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xrender \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xshape \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xshm \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-xslt \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xxf86vm \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-zlib \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-x
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Wine has a native macOS driver since 1.5.26 so X11 is optional
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variant x11 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_lib-append port:libGLU \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:mesa \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:xorg-libX11 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:xorg-libXcomposite \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:xorg-libXcursor \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:xorg-libXext \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:xorg-libXi \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:xorg-libXinerama \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:xorg-libXrandr \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:xorg-libXxf86vm \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:xorg-libsm \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:xorg-xorgproto \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port:xrender
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- configure.args-delete --without-osmesa \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xcomposite \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xcursor \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xinerama \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xinput \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xrandr \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xrender \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xshape \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-xxf86vm \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --without-x
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- configure.args-append --with-osmesa \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-xcomposite \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-xcursor \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-xinerama \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-xinput \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-xrandr \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-xrender \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-xshape \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-xxf86vm \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --with-x \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --x-include=${prefix}/include \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --x-lib=${prefix}/lib
</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;'>-if {${os.platform} ne "darwin" || (${os.major} >= 9 && ${os.major} <= 17)} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- default_variants +x11
</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;'>-configure.universal_args
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set merger_build_args(x86_64) "dlldir=\\\\\${libdir}/wine64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set merger_destroot_args(x86_64) "dlldir=\\\\\${libdir}/wine64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set merger_configure_args(x86_64) "--enable-win64 --libdir=${prefix}/lib"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set merger_configure_args(i386) --with-wine64=${workpath}/${worksrcdir}-x86_64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {${build_arch} eq "x86_64" && ${os.major} < 18} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- default_variants +universal
</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;'>-if {${universal_possible} && [variant_isset universal]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- supported_archs i386 x86_64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- supported_archs i386
</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;'>-# error: Xcode 3.x cannot build 16-bit code correctly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-compiler.blacklist-append {gcc-4.2 < 5600}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# llvm-gcc-4.2 doesn't respect force_align_arg_pointer; wine builds but fails to run
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# http://bugs.winehq.org/show_bug.cgi?id=28030
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-compiler.blacklist-append *llvm-gcc-4.2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# clang < 3.1 fails to build wine with "error: invalid operand for instruction lretw"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# http://bugs.winehq.org/show_bug.cgi?id=32872
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# clang < 3.2 have code generation problems:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# http://llvm.org/bugs/show_bug.cgi?id=9707
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-compiler.blacklist-append {clang < 500}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# FSF GCC cannot compile code using Apple's "blocks" language extensions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-compiler.blacklist-append macports-gcc-*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {${universal_possible} && [variant_isset universal]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # wine for 64-bit requires clang >= 3.8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- compiler.blacklist-append {clang < 800} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gcc-4.0 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gcc-4.2 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- apple-gcc-4.2 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- macports-clang-3.3 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- macports-clang-3.4 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- macports-clang-3.7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- compiler.fallback-append macports-clang-5.0
</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;'>-platform darwin {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # On macOS, Core Text is used instead of fontconfig since Wine 1.5.10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_lib-delete port:fontconfig
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- configure.args-delete --with-fontconfig
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- configure.args-append --without-fontconfig
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Wine uses the native Security framework on macOS since Wine 1.3.16
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_lib-delete path:lib/pkgconfig/gnutls.pc:gnutls
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- configure.args-delete --with-gnutls
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- configure.args-append --without-gnutls
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Vulkan is supported on macOS through MoltenVK since Wine 3.13, but because
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # it uses Metal it only works on 64-bit, and because it only builds with
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Xcode 9 or later it requires Sierra or later.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${os.major} >= 16 && ${universal_possible} && [variant_isset universal]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_lib-append port:MoltenVK
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_skip_archcheck-append MoltenVK
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend merger_configure_args(x86_64) --with-vulkan
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend merger_configure_args(i386) --without-vulkan
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- configure.args-append --without-vulkan
</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;'>- if {${os.major} < 10} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- configure.args-delete --with-opencl
</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;'>- notes {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- When using the Mac Driver, it might be useful to enable RetinaMode\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- when you're using a high DPI monitor. To do that, open up Wine's\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Registry Editor:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- wine regedit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- and then navigate to:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- [HKEY_CURRENT_USER\Software\Wine\Mac Driver]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- and then set "RetinaMode" to "y". You may also want to adjust your\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- DPI under the Graphics tab in winecfg.}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${os.major} < 9} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- known_fail yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- archive_sites
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- distfiles
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_build
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pre-fetch {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_error "${name} @${version} requires Mac OS X 10.5 or later."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -code error "incompatible Mac OS X version"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } elseif {${os.major} > 17} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- known_fail yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- archive_sites
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- distfiles
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_build
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pre-fetch {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_error "${name} cannot be built on macOS 10.14 or later."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -code error "incompatible macOS version"
</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;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {${os.endian} eq "big"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- known_fail yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- archive_sites
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- distfiles
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_build
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pre-fetch {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_error "${name} can only be used on an Intel Mac or other computer with a little-endian processor."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -code error "incompatible processor"
</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;'>-post-destroot {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -d ${destroot}${prefix}/share/wine/gecko
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 0644 -W ${distpath} ${wine_gecko_distfile} ${wine_gecko64_distfile} ${destroot}${prefix}/share/wine/gecko
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -d ${destroot}${prefix}/share/wine/mono
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 0644 ${distpath}/${wine_mono_distfile} ${destroot}${prefix}/share/wine/mono
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set docdir ${prefix}/share/doc/${my_name}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -d ${destroot}${docdir}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 0644 -W ${worksrcpath} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ANNOUNCE \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- AUTHORS \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- COPYING.LIB \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- LICENSE \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- README \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ${destroot}${docdir}
</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;'>-if {${universal_possible} && [variant_isset universal]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- notes-append "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- \n
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Wine supports both 32-bit and 64-bit now. It is compatible with your\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- existing 32-bit wine prefix, but it will now default to 64-bit when you\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- create a new wine prefix. The architecture can be selected using the\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- WINEARCH environment variable which can be set to either \"win32\" or\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- \"win64\".
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- To create a new pure 32-bit prefix, you can run:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- \$ WINEARCH=win32 WINEPREFIX=~/.wine32 winecfg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- See the Wine FAQ for details: https://wiki.winehq.org/FAQ#Wineprefixes
</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;'>-livecheck.type regex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-livecheck.regex {"/announce/([^"]+)"}
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/wine-devel/files/BOOL.patch b/x11/wine-devel/files/BOOL.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 8fa1b42113e..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/x11/wine-devel/files/BOOL.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,126 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dlls/gdi32/freetype.c.orig 2012-02-12 23:04:21.000000000 -0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dlls/gdi32/freetype.c 2012-02-12 23:04:58.000000000 -0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -40,6 +40,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <assert.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifdef HAVE_CARBON_CARBON_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define BOOL __carbon_BOOL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define LoadResource __carbon_LoadResource
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define CompareString __carbon_CompareString
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define GetCurrentThread __carbon_GetCurrentThread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -57,6 +58,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define ResizePalette __carbon_ResizePalette
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define SetRectRgn __carbon_SetRectRgn
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <Carbon/Carbon.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#undef BOOL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef LoadResource
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef CompareString
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef GetCurrentThread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dlls/windowscodecs/icnsformat.c.orig 2012-02-12 23:54:58.000000000 -0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dlls/windowscodecs/icnsformat.c 2012-02-12 23:55:20.000000000 -0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -22,6 +22,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <stdarg.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifdef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define BOOL BOOL_Mac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define GetCurrentProcess GetCurrentProcess_Mac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define GetCurrentThread GetCurrentThread_Mac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define LoadResource LoadResource_Mac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -49,6 +50,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define ShowCursor ShowCursor_Mac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define UnionRect UnionRect_Mac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <ApplicationServices/ApplicationServices.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#undef BOOL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef GetCurrentProcess
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef GetCurrentThread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef LoadResource
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dlls/wineqtdecoder/qtdatahandler.c.orig 2012-02-13 00:04:58.000000000 -0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dlls/wineqtdecoder/qtdatahandler.c 2012-02-13 00:05:24.000000000 -0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -23,6 +23,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define ULONG CoreFoundation_ULONG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define HRESULT CoreFoundation_HRESULT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define BOOL __carbon_BOOL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define LoadResource __carbon_LoadResource
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define CompareString __carbon_CompareString
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define GetCurrentThread __carbon_GetCurrentThread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -62,6 +63,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <QuickTime/QuickTimeComponents.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#undef BOOL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef LoadResource
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef CompareString
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef GetCurrentThread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dlls/wineqtdecoder/qtsplitter.c.orig 2012-02-13 00:19:05.000000000 -0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dlls/wineqtdecoder/qtsplitter.c 2012-02-13 00:19:26.000000000 -0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -23,6 +23,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define ULONG CoreFoundation_ULONG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define HRESULT CoreFoundation_HRESULT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define BOOL __carbon_BOOL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define LoadResource __carbon_LoadResource
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define CompareString __carbon_CompareString
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define GetCurrentThread __carbon_GetCurrentThread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -63,6 +64,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <QuickTime/Movies.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <QuickTime/QuickTimeComponents.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#undef BOOL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef LoadResource
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef CompareString
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef GetCurrentThread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dlls/wineqtdecoder/qtutils.c.orig 2012-02-13 00:31:37.000000000 -0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dlls/wineqtdecoder/qtutils.c 2012-02-13 00:32:14.000000000 -0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -23,6 +23,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define ULONG CoreFoundation_ULONG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define HRESULT CoreFoundation_HRESULT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define BOOL __carbon_BOOL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define LoadResource __carbon_LoadResource
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define CompareString __carbon_CompareString
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define GetCurrentThread __carbon_GetCurrentThread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -62,6 +63,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <CoreVideo/CVPixelBuffer.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#undef BOOL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef LoadResource
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef CompareString
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef GetCurrentThread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dlls/wineqtdecoder/qtvdecoder.c.orig 2012-02-13 00:31:42.000000000 -0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dlls/wineqtdecoder/qtvdecoder.c 2012-02-13 00:32:30.000000000 -0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -23,6 +23,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define ULONG CoreFoundation_ULONG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define HRESULT CoreFoundation_HRESULT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define BOOL __carbon_BOOL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define LoadResource __carbon_LoadResource
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define CompareString __carbon_CompareString
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define GetCurrentThread __carbon_GetCurrentThread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -63,6 +64,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <QuickTime/ImageCompression.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <CoreVideo/CVPixelBuffer.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#undef BOOL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef LoadResource
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef CompareString
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef GetCurrentThread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dlls/dinput/joystick_osx.c.orig 2013-05-25 11:13:00.000000000 +0300
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dlls/dinput/joystick_osx.c 2013-05-25 11:13:00.000000000 +0300
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -29,6 +29,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define LONG SInt32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define LPLONG SInt32*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define E_PENDING __carbon_E_PENDING
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define BOOL __carbon_BOOL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define ULONG __carbon_ULONG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define E_INVALIDARG __carbon_E_INVALIDARG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define E_OUTOFMEMORY __carbon_E_OUTOFMEMORY
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -52,6 +53,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <IOKit/IOKitLib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <IOKit/hid/IOHIDLib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <ForceFeedback/ForceFeedback.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#undef BOOL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef ULONG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef E_INVALIDARG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #undef E_OUTOFMEMORY
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/wine-devel/files/cups_headers.patch b/x11/wine-devel/files/cups_headers.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 56ec901cda4..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/x11/wine-devel/files/cups_headers.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,10 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dlls/winspool.drv/info.c.orig 2017-08-03 12:38:53.000000000 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dlls/winspool.drv/info.c 2017-08-05 02:53:44.000000000 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -43,6 +43,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <signal.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifdef HAVE_CUPS_CUPS_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # include <cups/cups.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# include <cups/ppd.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifdef HAVE_CUPS_PPD_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # include <cups/ppd.h>
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/wine-devel/files/fix-flicker.patch b/x11/wine-devel/files/fix-flicker.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index c1df2213e5a..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/x11/wine-devel/files/fix-flicker.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,102 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Patch to fix flickering in full screen. Patch updated from
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# https://raw.githubusercontent.com/Homebrew/formula-patches/74c2566/wine/2.14.patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# See: https://bugs.winehq.org/show_bug.cgi?id=34166
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- dlls/wined3d/context.c.orig 2019-05-10 10:43:42.000000000 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ dlls/wined3d/context.c 2020-04-25 02:38:49.000000000 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1674,7 +1674,7 @@
</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;'>- /* This function takes care of wined3d pixel format selection. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--static int context_choose_pixel_format(const struct wined3d_device *device, HDC hdc,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static int context_choose_pixel_format(const struct wined3d_device *device, const struct wined3d_swapchain *swapchain, HDC hdc,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const struct wined3d_format *color_format, const struct wined3d_format *ds_format,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- BOOL auxBuffers)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1682,12 +1682,16 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- unsigned int current_value;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- PIXELFORMATDESCRIPTOR pfd;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int iPixelFormat = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ BOOL double_buffer = TRUE;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- unsigned int i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- TRACE("device %p, dc %p, color_format %s, ds_format %s, aux_buffers %#x.\n",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- device, hdc, debug_d3dformat(color_format->id), debug_d3dformat(ds_format->id),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- auxBuffers);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (wined3d_settings.offscreen_rendering_mode == ORM_FBO && !swapchain->desc.backbuffer_count)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ double_buffer = FALSE;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- current_value = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for (i = 0; i < cfg_count; ++i)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1699,7 +1703,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (cfg->iPixelType != WGL_TYPE_RGBA_ARB)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- continue;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* In window mode we need a window drawable format and double buffering. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- if (!(cfg->windowDrawable && cfg->doubleBuffer))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (!cfg->windowDrawable || (double_buffer && !cfg->doubleBuffer))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- continue;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (cfg->redSize < color_format->red_size)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- continue;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1722,17 +1726,19 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * depth it is no problem to emulate 16-bit using e.g. 24-bit, so accept that. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (cfg->depthSize == ds_format->depth_size)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- value += 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- if (cfg->stencilSize == ds_format->stencil_size)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (!cfg->doubleBuffer == !double_buffer)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- value += 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- if (cfg->alphaSize == color_format->alpha_size)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (cfg->stencilSize == ds_format->stencil_size)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- value += 4;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (cfg->alphaSize == color_format->alpha_size)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ value += 8;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* We like to have aux buffers in backbuffer mode */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (auxBuffers && cfg->auxBuffers)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- value += 8;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ value += 16;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (cfg->redSize == color_format->red_size
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- && cfg->greenSize == color_format->green_size
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- && cfg->blueSize == color_format->blue_size)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- value += 16;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ value += 32;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (value > current_value)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1748,7 +1754,9 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- memset(&pfd, 0, sizeof(pfd));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pfd.nSize = sizeof(pfd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pfd.nVersion = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER | PFD_DRAW_TO_WINDOW;/*PFD_GENERIC_ACCELERATED*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW;/*PFD_GENERIC_ACCELERATED*/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (double_buffer)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ pfd.dwFlags |= PFD_DOUBLEBUFFER;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pfd.iPixelType = PFD_TYPE_RGBA;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pfd.cAlphaBits = color_format->alpha_size;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pfd.cColorBits = color_format->red_size + color_format->green_size
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2070,7 +2078,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for (i = 0; i < ARRAY_SIZE(ds_formats); ++i)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ds_format = wined3d_get_format(device->adapter, ds_formats[i], WINED3D_BIND_DEPTH_STENCIL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- if ((context->pixel_format = context_choose_pixel_format(device,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if ((context->pixel_format = context_choose_pixel_format(device, swapchain,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- context->hdc, color_format, ds_format, TRUE)))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- swapchain->ds_format = ds_format;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2083,7 +2091,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- context->pixel_format = context_choose_pixel_format(device,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ context->pixel_format = context_choose_pixel_format(device, swapchain,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- context->hdc, color_format, swapchain->ds_format, TRUE);
</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;'>-@@ -2099,7 +2107,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * conflicting pixel formats. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- color_format = wined3d_get_format(device->adapter, WINED3DFMT_B8G8R8A8_UNORM, target_bind_flags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ds_format = wined3d_get_format(device->adapter, WINED3DFMT_UNKNOWN, WINED3D_BIND_DEPTH_STENCIL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- context->pixel_format = context_choose_pixel_format(device,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ context->pixel_format = context_choose_pixel_format(device, swapchain,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- context->hdc, color_format, ds_format, FALSE);
</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;color:#808080;'>diff --git a/x11/wine-devel/files/mach_machine.patch b/x11/wine-devel/files/mach_machine.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 49f4a0e8dff..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/x11/wine-devel/files/mach_machine.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,12 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- ./dlls/ntdll/nt.c.orig 2012-04-21 23:03:51.000000000 -0700
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./dlls/ntdll/nt.c 2012-04-21 23:04:14.000000000 -0700
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -34,7 +34,9 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # include <machine/cpu.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifdef HAVE_MACH_MACHINE_H
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+# define cpu_type_t mach_cpu_type_t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # include <mach/machine.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#undef cpu_type_t
</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;'>- #include <ctype.h>
</span></pre><pre style='margin:0'>
</pre>