PKGBUILDS/wine-tkg-git/wine-tkg-git/wine-tkg-patches/game-specific/mk11/legacy/mk11-548bc54.patch

77 lines
3.2 KiB
Diff

From e8f6ed261e213ced6c0c762988b6fc3446ef510a Mon Sep 17 00:00:00 2001
From: Derek Lesho <dlesho@codeweavers.com>
Date: Wed, 22 Apr 2020 10:45:46 -0500
Subject: [PATCH 1/8] mk11_base
---
dlls/ntdll/signal_x86_64.c | 11 +++++-
dlls/ws2_32/Makefile.in | 1 +
3 files changed, 20 insertions(+), 22 deletions(-)
diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c
index 89caca9f30f..6fb16333397 100644
--- a/dlls/ntdll/signal_x86_64.c
+++ b/dlls/ntdll/signal_x86_64.c
@@ -425,6 +425,8 @@ static NTSTATUS call_stack_handlers( EXCEPTION_RECORD *rec, CONTEXT *orig_contex
UNWIND_HISTORY_TABLE table;
DISPATCHER_CONTEXT dispatch;
CONTEXT context;
+ MEMORY_BASIC_INFORMATION wine_frame_stack_info, current_stack_info;
+ int is_teb_frame_in_current_stack = 1;
NTSTATUS status;
context = *orig_context;
@@ -433,6 +435,13 @@ static NTSTATUS call_stack_handlers( EXCEPTION_RECORD *rec, CONTEXT *orig_contex
dispatch.TargetIp = 0;
dispatch.ContextRecord = &context;
dispatch.HistoryTable = &table;
+
+ if ( !(NtQueryVirtualMemory(NtCurrentProcess(), teb_frame, MemoryBasicInformation, &wine_frame_stack_info, sizeof(MEMORY_BASIC_INFORMATION), NULL)) &&
+ !(NtQueryVirtualMemory(NtCurrentProcess(), (PVOID)context.Rsp, MemoryBasicInformation, &current_stack_info, sizeof(MEMORY_BASIC_INFORMATION), NULL)))
+ {
+ is_teb_frame_in_current_stack = wine_frame_stack_info.AllocationBase == current_stack_info.AllocationBase;
+ }
+
for (;;)
{
status = virtual_unwind( UNW_FLAG_EHANDLER, &dispatch, &context );
@@ -2482,7 +2491,7 @@ static NTSTATUS call_stack_handlers( EXCEPTION_RECORD *rec, CONTEXT *orig_contex
}
}
/* hack: call wine handlers registered in the tib list */
- else while ((ULONG64)teb_frame < context.Rsp)
+ else if (is_teb_frame_in_current_stack) while ((ULONG64)teb_frame < context.Rsp)
{
TRACE( "found wine frame %p rsp %lx handler %p\n",
teb_frame, context.Rsp, teb_frame->Handler );
diff --git a/dlls/ws2_32/Makefile.in b/dlls/ws2_32/Makefile.in
index 9d7dfafeb3c..c7f24168dac 100644
--- a/dlls/ws2_32/Makefile.in
+++ b/dlls/ws2_32/Makefile.in
@@ -1,5 +1,6 @@
MODULE = ws2_32.dll
IMPORTLIB = ws2_32
+IMPORTS = kernelbase
DELAYIMPORTS = dnsapi advapi32 iphlpapi user32
C_SRCS = \
diff --git a/dlls/winex11.drv/display.c b/dlls/winex11.drv/display.c
index b4b3981da0a..1ea738ce547 100644
--- a/dlls/winex11.drv/display.c
+++ b/dlls/winex11.drv/display.c
@@ -606,6 +797,14 @@ static BOOL X11DRV_InitMonitor(HDEVINFO devinfo, const struct x11drv_monitor *mo
hkey = SetupDiCreateDevRegKeyW(devinfo, &device_data, DICS_FLAG_GLOBAL, 0, DIREG_DRV, NULL, NULL);
RegCloseKey(hkey);
+ /* This is needed for MK11, but breaks Hitman 2, so we use a specific check for MK11 */
+ const char *sgi = getenv("SteamGameId");
+ if ((sgi && !strcmp(sgi, "976310"))) {
+ /* Create device key */
+ hkey = SetupDiCreateDevRegKeyW(devinfo, &device_data, DICS_FLAG_GLOBAL, 0, DIREG_DEV, NULL, NULL);
+ RegCloseKey(hkey);
+ }
+
/* FIXME:
* Following properties are Wine specific, see comments in X11DRV_InitAdapter for details */
/* StateFlags */