Alexandre Julliard : ntdll: Use a syscall thunk for NtQueryPerformanceCounter().
Alexandre Julliard
julliard at winehq.org
Tue Jul 21 15:40:21 CDT 2020
Module: wine
Branch: master
Commit: 78c772e9d802d13522855fa3c8e2257c4933214a
URL: https://source.winehq.org/git/wine.git/?a=commit;h=78c772e9d802d13522855fa3c8e2257c4933214a
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Jul 21 15:51:38 2020 +0200
ntdll: Use a syscall thunk for NtQueryPerformanceCounter().
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/ntdll.spec | 4 ++--
dlls/ntdll/time.c | 21 +--------------------
dlls/ntdll/unix/loader.c | 1 -
dlls/ntdll/unix/sync.c | 13 +++++++++++--
dlls/ntdll/unixlib.h | 3 +--
5 files changed, 15 insertions(+), 27 deletions(-)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index ff1433be40..aea9174068 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -307,7 +307,7 @@
@ stdcall -syscall NtQueryMutant(long long ptr long ptr)
@ stdcall -syscall NtQueryObject(long long ptr long ptr)
@ stub NtQueryOpenSubKeys
-@ stdcall NtQueryPerformanceCounter(ptr ptr)
+@ stdcall -syscall NtQueryPerformanceCounter(ptr ptr)
# @ stub NtQueryPortInformationProcess
# @ stub NtQueryQuotaInformationFile
@ stdcall -syscall NtQuerySection(long long ptr long ptr)
@@ -1295,7 +1295,7 @@
@ stdcall -private -syscall ZwQueryMutant(long long ptr long ptr) NtQueryMutant
@ stdcall -private -syscall ZwQueryObject(long long ptr long ptr) NtQueryObject
@ stub ZwQueryOpenSubKeys
-@ stdcall -private ZwQueryPerformanceCounter(ptr ptr) NtQueryPerformanceCounter
+@ stdcall -private -syscall ZwQueryPerformanceCounter(ptr ptr) NtQueryPerformanceCounter
# @ stub ZwQueryPortInformationProcess
# @ stub ZwQueryQuotaInformationFile
@ stdcall -private -syscall ZwQuerySection(long long ptr long ptr) NtQuerySection
diff --git a/dlls/ntdll/time.c b/dlls/ntdll/time.c
index 15d100d10e..f92443500d 100644
--- a/dlls/ntdll/time.c
+++ b/dlls/ntdll/time.c
@@ -375,31 +375,12 @@ LONGLONG WINAPI RtlGetSystemTimePrecise( void )
return unix_funcs->RtlGetSystemTimePrecise();
}
-/******************************************************************************
- * NtQueryPerformanceCounter [NTDLL.@]
- */
-NTSTATUS WINAPI NtQueryPerformanceCounter( LARGE_INTEGER *counter, LARGE_INTEGER *frequency )
-{
- NTSTATUS status;
-
- __TRY
- {
- status = unix_funcs->NtQueryPerformanceCounter( counter, frequency );
- }
- __EXCEPT_PAGE_FAULT
- {
- return STATUS_ACCESS_VIOLATION;
- }
- __ENDTRY
- return status;
-}
-
/******************************************************************************
* RtlQueryPerformanceCounter [NTDLL.@]
*/
BOOL WINAPI DECLSPEC_HOTPATCH RtlQueryPerformanceCounter( LARGE_INTEGER *counter )
{
- unix_funcs->NtQueryPerformanceCounter( counter, NULL );
+ NtQueryPerformanceCounter( counter, NULL );
return TRUE;
}
diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
index 99c70b400a..3f3a10155d 100644
--- a/dlls/ntdll/unix/loader.c
+++ b/dlls/ntdll/unix/loader.c
@@ -1362,7 +1362,6 @@ static struct unix_funcs unix_funcs =
{
NtCurrentTeb,
NtGetContextThread,
- NtQueryPerformanceCounter,
DbgUiIssueRemoteBreakin,
RtlGetSystemTimePrecise,
RtlWaitOnAddress,
diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c
index b7b9fa3443..2dc1a7c2aa 100644
--- a/dlls/ntdll/unix/sync.c
+++ b/dlls/ntdll/unix/sync.c
@@ -69,6 +69,7 @@
#include "winternl.h"
#include "ddk/wdm.h"
#include "wine/server.h"
+#include "wine/exception.h"
#include "wine/debug.h"
#include "unix_private.h"
@@ -1361,8 +1362,16 @@ NTSTATUS WINAPI NtDelayExecution( BOOLEAN alertable, const LARGE_INTEGER *timeou
*/
NTSTATUS WINAPI NtQueryPerformanceCounter( LARGE_INTEGER *counter, LARGE_INTEGER *frequency )
{
- counter->QuadPart = monotonic_counter();
- if (frequency) frequency->QuadPart = TICKSPERSEC;
+ __TRY
+ {
+ counter->QuadPart = monotonic_counter();
+ if (frequency) frequency->QuadPart = TICKSPERSEC;
+ }
+ __EXCEPT_PAGE_FAULT
+ {
+ return STATUS_ACCESS_VIOLATION;
+ }
+ __ENDTRY
return STATUS_SUCCESS;
}
diff --git a/dlls/ntdll/unixlib.h b/dlls/ntdll/unixlib.h
index d7487feafc..84e1a27977 100644
--- a/dlls/ntdll/unixlib.h
+++ b/dlls/ntdll/unixlib.h
@@ -28,14 +28,13 @@ struct msghdr;
struct _DISPATCHER_CONTEXT;
/* increment this when you change the function table */
-#define NTDLL_UNIXLIB_VERSION 89
+#define NTDLL_UNIXLIB_VERSION 90
struct unix_funcs
{
/* Nt* functions */
TEB * (WINAPI *NtCurrentTeb)(void);
NTSTATUS (WINAPI *NtGetContextThread)( HANDLE handle, CONTEXT *context );
- NTSTATUS (WINAPI *NtQueryPerformanceCounter)( LARGE_INTEGER *counter, LARGE_INTEGER *frequency );
/* other Win32 API functions */
NTSTATUS (WINAPI *DbgUiIssueRemoteBreakin)( HANDLE process );
More information about the wine-cvs
mailing list