Added patch to implement stubs for Ke{Aquire,Release}InStackQueuedSpinLock functions.

This commit is contained in:
Sebastian Lackner 2017-03-05 19:31:03 +01:00
parent c97e444da2
commit 734b40739a
4 changed files with 182 additions and 0 deletions

View File

@ -0,0 +1,99 @@
From d41ae9a2e8182b9a57a9b110905a4ffb0dd81e8f Mon Sep 17 00:00:00 2001
From: Austin English <austinenglish@gmail.com>
Date: Thu, 9 Feb 2017 16:51:25 -0600
Subject: ntoskrnl.exe: add KeAcquireInStackQueuedSpinLock stub (try 2)
Signed-off-by: Austin English <austinenglish@gmail.com>
---
dlls/hal/hal.spec | 2 +-
dlls/ntoskrnl.exe/ntoskrnl.c | 13 +++++++++++++
dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 1 +
include/ddk/wdm.h | 10 ++++++++++
tools/make_specfiles | 4 ++++
5 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/dlls/hal/hal.spec b/dlls/hal/hal.spec
index bd6bc35736a..f441ac5271f 100644
--- a/dlls/hal/hal.spec
+++ b/dlls/hal/hal.spec
@@ -4,7 +4,7 @@
@ stub HalClearSoftwareInterrupt
@ stub HalRequestSoftwareInterrupt
@ stub HalSystemVectorDispatchEntry
-@ stub KeAcquireInStackQueuedSpinLock
+@ stdcall -norelay KeAcquireInStackQueuedSpinLock(ptr ptr) ntoskrnl.exe.KeAcquireInStackQueuedSpinLock
@ stub KeAcquireInStackQueuedSpinLockRaiseToSynch
@ stub KeAcquireQueuedSpinLock
@ stub KeAcquireQueuedSpinLockRaiseToSynch
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index 06320d03cc9..b8f6a25714a 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -3188,3 +3188,16 @@ VOID WINAPI KeClearEvent(PRKEVENT event)
{
FIXME("stub: %p\n", event);
}
+
+/***********************************************************************
+ * KeAcquireInStackQueuedSpinLock (NTOSKRNL.EXE.@)
+ */
+#ifdef DEFINE_FASTCALL2_ENTRYPOINT
+DEFINE_FASTCALL2_ENTRYPOINT( KeAcquireInStackQueuedSpinLock )
+void WINAPI __regs_KeAcquireInStackQueuedSpinLock(KSPIN_LOCK *spinlock, KLOCK_QUEUE_HANDLE *handle)
+#else
+void WINAPI KeAcquireInStackQueuedSpinLock(KSPIN_LOCK *spinlock, KLOCK_QUEUE_HANDLE *handle)
+#endif
+{
+ FIXME( "stub: %p %p\n", spinlock, handle);
+}
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index 62c7fb496cf..ba18200c503 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -41,6 +41,7 @@
@ stub IoWritePartitionTable
@ stdcall -norelay IofCallDriver(ptr ptr)
@ stdcall -norelay IofCompleteRequest(ptr long)
+@ stdcall -norelay KeAcquireInStackQueuedSpinLock(ptr ptr)
@ stub KeAcquireInStackQueuedSpinLockAtDpcLevel
@ stub KeReleaseInStackQueuedSpinLockFromDpcLevel
@ stub KeSetTimeUpdateNotifyRoutine
diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h
index 4c696f776dd..61374a7ed43 100644
--- a/include/ddk/wdm.h
+++ b/include/ddk/wdm.h
@@ -1210,6 +1210,16 @@ typedef struct _CALLBACK_OBJECT
UCHAR reserved[3];
} CALLBACK_OBJECT, *PCALLBACK_OBJECT;
+typedef struct _KSPIN_LOCK_QUEUE {
+ struct _KSPIN_LOCK_QUEUE * volatile Next;
+ volatile PKSPIN_LOCK Lock;
+} KSPIN_LOCK_QUEUE, *PKSPIN_LOCK_QUEUE;
+
+typedef struct _KLOCK_QUEUE_HANDLE {
+ KSPIN_LOCK_QUEUE LockQueue;
+ KIRQL OldIrql;
+} KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE;
+
typedef NTSTATUS (NTAPI EX_CALLBACK_FUNCTION)(void *CallbackContext, void *Argument1, void *Argument2);
typedef EX_CALLBACK_FUNCTION *PEX_CALLBACK_FUNCTION;
diff --git a/tools/make_specfiles b/tools/make_specfiles
index 1e2400e4c7f..505bdf1e791 100755
--- a/tools/make_specfiles
+++ b/tools/make_specfiles
@@ -338,6 +338,10 @@ my @dll_groups =
"bcrypt",
"ncrypt",
],
+ [
+ "ntoskrnl.exe",
+ "hal",
+ ]
);
my $update_flags = 0;
--
2.11.0

View File

@ -0,0 +1,60 @@
From 15bd72533dd2d899e18c2201dd73ccfd2fb495c0 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sun, 5 Mar 2017 19:28:08 +0100
Subject: ntoskrnl.exe: Add KeReleaseInStackQueuedSpinLock stub.
---
dlls/hal/hal.spec | 2 +-
dlls/ntoskrnl.exe/ntoskrnl.c | 13 +++++++++++++
dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 1 +
3 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/dlls/hal/hal.spec b/dlls/hal/hal.spec
index f441ac5271f..414e49bfec9 100644
--- a/dlls/hal/hal.spec
+++ b/dlls/hal/hal.spec
@@ -9,7 +9,7 @@
@ stub KeAcquireQueuedSpinLock
@ stub KeAcquireQueuedSpinLockRaiseToSynch
@ stub KeAcquireSpinLockRaiseToSynch
-@ stub KeReleaseInStackQueuedSpinLock
+@ stdcall -norelay KeReleaseInStackQueuedSpinLock(ptr) ntoskrnl.exe.KeReleaseInStackQueuedSpinLock
@ stub KeReleaseQueuedSpinLock
@ stub KeTryToAcquireQueuedSpinLock
@ stub KeTryToAcquireQueuedSpinLockRaiseToSynch
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index b8f6a25714a..8cda7b70388 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -3201,3 +3201,16 @@ void WINAPI KeAcquireInStackQueuedSpinLock(KSPIN_LOCK *spinlock, KLOCK_QUEUE_HAN
{
FIXME( "stub: %p %p\n", spinlock, handle);
}
+
+/***********************************************************************
+ * KeReleaseInStackQueuedSpinLock (NTOSKRNL.EXE.@)
+ */
+#ifdef DEFINE_FASTCALL2_ENTRYPOINT
+DEFINE_FASTCALL2_ENTRYPOINT( KeReleaseInStackQueuedSpinLock )
+void WINAPI __regs_KeReleaseInStackQueuedSpinLock(KLOCK_QUEUE_HANDLE *handle)
+#else
+void WINAPI KeReleaseInStackQueuedSpinLock(KLOCK_QUEUE_HANDLE *handle)
+#endif
+{
+ FIXME( "stub: %p\n", handle);
+}
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index ba18200c503..e223eadc1a8 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -43,6 +43,7 @@
@ stdcall -norelay IofCompleteRequest(ptr long)
@ stdcall -norelay KeAcquireInStackQueuedSpinLock(ptr ptr)
@ stub KeAcquireInStackQueuedSpinLockAtDpcLevel
+@ stdcall -norelay KeReleaseInStackQueuedSpinLock(ptr)
@ stub KeReleaseInStackQueuedSpinLockFromDpcLevel
@ stub KeSetTimeUpdateNotifyRoutine
@ stub KefAcquireSpinLockAtDpcLevel
--
2.11.0

View File

@ -0,0 +1 @@
Fixes: [41472] Add stubs for Ke{Aquire,Release}InStackQueuedSpinLock functions

View File

@ -271,6 +271,7 @@ patch_enable_all ()
enable_ntdll_call_thread_func_wrapper="$1"
enable_ntdll_raise_func_trampoline="$1"
enable_ntoskrnl_DriverTest="$1"
enable_ntoskrnl_InStackQueuedSpinLock="$1"
enable_ntoskrnl_Stubs="$1"
enable_nvapi_Stub_DLL="$1"
enable_nvcuda_CUDA_Support="$1"
@ -1031,6 +1032,9 @@ patch_enable ()
ntoskrnl-DriverTest)
enable_ntoskrnl_DriverTest="$2"
;;
ntoskrnl-InStackQueuedSpinLock)
enable_ntoskrnl_InStackQueuedSpinLock="$2"
;;
ntoskrnl-Stubs)
enable_ntoskrnl_Stubs="$2"
;;
@ -5974,6 +5978,24 @@ if test "$enable_ntoskrnl_DriverTest" -eq 1; then
) >> "$patchlist"
fi
# Patchset ntoskrnl-InStackQueuedSpinLock
# |
# | This patchset fixes the following Wine bugs:
# | * [#41472] Add stubs for Ke{Aquire,Release}InStackQueuedSpinLock functions
# |
# | Modified files:
# | * dlls/hal/hal.spec, dlls/ntoskrnl.exe/ntoskrnl.c, dlls/ntoskrnl.exe/ntoskrnl.exe.spec, include/ddk/wdm.h,
# | tools/make_specfiles
# |
if test "$enable_ntoskrnl_InStackQueuedSpinLock" -eq 1; then
patch_apply ntoskrnl-InStackQueuedSpinLock/0001-ntoskrnl.exe-add-KeAcquireInStackQueuedSpinLock-stub.patch
patch_apply ntoskrnl-InStackQueuedSpinLock/0002-ntoskrnl.exe-Add-KeReleaseInStackQueuedSpinLock-stub.patch
(
printf '%s\n' '+ { "Austin English", "ntoskrnl.exe: Add KeAcquireInStackQueuedSpinLock stub.", 2 },';
printf '%s\n' '+ { "Sebastian Lackner", "ntoskrnl.exe: Add KeReleaseInStackQueuedSpinLock stub.", 1 },';
) >> "$patchlist"
fi
# Patchset ntoskrnl-Stubs
# |
# | This patchset fixes the following Wine bugs: