From 2401d86f68ee2100445ea8cd252197ca42b3cc9a Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Mon, 4 Feb 2019 17:23:35 +0100 Subject: [PATCH] ntoskrnl.exe: Properly export *SList functions on win64. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45820 Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- dlls/ntoskrnl.exe/ntoskrnl.c | 57 --------------------------------- dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 11 ++++--- dlls/ntoskrnl.exe/sync.c | 63 +++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 61 deletions(-) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index f21d6f74323..c52736fcb56 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -1977,63 +1977,6 @@ LONG WINAPI NTOSKRNL_InterlockedIncrement( LONG volatile *dest ) /*********************************************************************** - * InterlockedPopEntrySList (NTOSKRNL.EXE.@) - */ -#ifdef DEFINE_FASTCALL1_ENTRYPOINT -DEFINE_FASTCALL1_ENTRYPOINT( NTOSKRNL_InterlockedPopEntrySList ) -PSLIST_ENTRY WINAPI DECLSPEC_HIDDEN __regs_NTOSKRNL_InterlockedPopEntrySList( PSLIST_HEADER list ) -#else -PSLIST_ENTRY WINAPI NTOSKRNL_InterlockedPopEntrySList( PSLIST_HEADER list ) -#endif -{ - return InterlockedPopEntrySList( list ); -} - - -/*********************************************************************** - * ExInterlockedPopEntrySList (NTOSKRNL.EXE.@) - */ -#ifdef DEFINE_FASTCALL2_ENTRYPOINT -DEFINE_FASTCALL2_ENTRYPOINT( NTOSKRNL_ExInterlockedPopEntrySList ) -PSLIST_ENTRY WINAPI __regs_NTOSKRNL_ExInterlockedPopEntrySList( PSLIST_HEADER list, PKSPIN_LOCK lock ) -#else -PSLIST_ENTRY WINAPI NTOSKRNL_ExInterlockedPopEntrySList( PSLIST_HEADER list, PKSPIN_LOCK lock ) -#endif -{ - return InterlockedPopEntrySList( list ); -} - - -/*********************************************************************** - * InterlockedPushEntrySList (NTOSKRNL.EXE.@) - */ -#ifdef DEFINE_FASTCALL2_ENTRYPOINT -DEFINE_FASTCALL2_ENTRYPOINT( NTOSKRNL_InterlockedPushEntrySList ) -PSLIST_ENTRY WINAPI DECLSPEC_HIDDEN __regs_NTOSKRNL_InterlockedPushEntrySList( PSLIST_HEADER list, - PSLIST_ENTRY entry ) -#else -PSLIST_ENTRY WINAPI NTOSKRNL_InterlockedPushEntrySList( PSLIST_HEADER list, PSLIST_ENTRY entry ) -#endif -{ - return InterlockedPushEntrySList( list, entry ); -} - -/*********************************************************************** - * ExInterlockedPushEntrySList (NTOSKRNL.EXE.@) - */ -#ifdef DEFINE_FASTCALL3_ENTRYPOINT -DEFINE_FASTCALL3_ENTRYPOINT( NTOSKRNL_ExInterlockedPushEntrySList ) -PSLIST_ENTRY WINAPI DECLSPEC_HIDDEN __regs_NTOSKRNL_ExInterlockedPushEntrySList( PSLIST_HEADER list, - PSLIST_ENTRY entry, - PKSPIN_LOCK lock ) -#else -PSLIST_ENTRY WINAPI NTOSKRNL_ExInterlockedPushEntrySList( PSLIST_HEADER list, PSLIST_ENTRY entry, PKSPIN_LOCK lock ) -#endif -{ - return InterlockedPushEntrySList( list, entry ); -} - -/*********************************************************************** * ExAllocatePool (NTOSKRNL.EXE.@) */ PVOID WINAPI ExAllocatePool( POOL_TYPE type, SIZE_T size ) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index 40f5b275dfd..0fe0da36d8e 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -5,8 +5,8 @@ @ stub ExInterlockedAddLargeStatistic @ stub ExInterlockedCompareExchange64 @ stub ExInterlockedFlushSList -@ stdcall -norelay ExInterlockedPopEntrySList(ptr ptr) NTOSKRNL_ExInterlockedPopEntrySList -@ stdcall -norelay ExInterlockedPushEntrySList (ptr ptr ptr) NTOSKRNL_ExInterlockedPushEntrySList +@ stdcall -arch=i386 -norelay ExInterlockedPopEntrySList(ptr ptr) NTOSKRNL_ExInterlockedPopEntrySList +@ stdcall -arch=i386 -norelay ExInterlockedPushEntrySList (ptr ptr ptr) NTOSKRNL_ExInterlockedPushEntrySList @ stub ExReInitializeRundownProtection @ stdcall -norelay ExReleaseFastMutexUnsafe(ptr) @ stdcall ExReleaseResourceLite(ptr) @@ -27,14 +27,17 @@ @ stub Exfi386InterlockedDecrementLong @ stub Exfi386InterlockedExchangeUlong @ stub Exfi386InterlockedIncrementLong +@ stdcall -arch=win64 ExpInterlockedPopEntrySList(ptr) RtlInterlockedPopEntrySList +@ stdcall -arch=win64 ExpInterlockedPushEntrySList(ptr ptr) RtlInterlockedPushEntrySList @ stub HalExamineMBR @ stdcall -norelay InterlockedCompareExchange(ptr long long) NTOSKRNL_InterlockedCompareExchange @ stdcall -norelay InterlockedDecrement(ptr) NTOSKRNL_InterlockedDecrement @ stdcall -norelay InterlockedExchange(ptr long) NTOSKRNL_InterlockedExchange @ stdcall -norelay InterlockedExchangeAdd(ptr long) NTOSKRNL_InterlockedExchangeAdd @ stdcall -norelay InterlockedIncrement(ptr) NTOSKRNL_InterlockedIncrement -@ stdcall -norelay InterlockedPopEntrySList(ptr) NTOSKRNL_InterlockedPopEntrySList -@ stdcall -norelay InterlockedPushEntrySList(ptr ptr) NTOSKRNL_InterlockedPushEntrySList +@ stdcall -arch=win32 -norelay InterlockedPopEntrySList(ptr) NTOSKRNL_InterlockedPopEntrySList +@ stdcall -arch=win32 -norelay InterlockedPushEntrySList(ptr ptr) NTOSKRNL_InterlockedPushEntrySList +@ stdcall -arch=win64 ExQueryDepthSList(ptr) RtlQueryDepthSList @ stub IoAssignDriveLetters @ stub IoReadPartitionTable @ stub IoSetPartitionInformation diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c index 065609117c7..98b3f9d91a2 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -563,6 +563,69 @@ LIST_ENTRY * WINAPI ExInterlockedRemoveHeadList( LIST_ENTRY *list, KSPIN_LOCK *l return ret; } +#ifndef _WIN64 + +/*********************************************************************** + * InterlockedPopEntrySList (NTOSKRNL.EXE.@) + */ +#ifdef DEFINE_FASTCALL1_ENTRYPOINT +DEFINE_FASTCALL1_ENTRYPOINT( NTOSKRNL_InterlockedPopEntrySList ) +PSLIST_ENTRY WINAPI DECLSPEC_HIDDEN __regs_NTOSKRNL_InterlockedPopEntrySList( PSLIST_HEADER list ) +#else +PSLIST_ENTRY WINAPI NTOSKRNL_InterlockedPopEntrySList( PSLIST_HEADER list ) +#endif +{ + return RtlInterlockedPopEntrySList( list ); +} + + +/*********************************************************************** + * InterlockedPushEntrySList (NTOSKRNL.EXE.@) + */ +#ifdef DEFINE_FASTCALL2_ENTRYPOINT +DEFINE_FASTCALL2_ENTRYPOINT( NTOSKRNL_InterlockedPushEntrySList ) +PSLIST_ENTRY WINAPI DECLSPEC_HIDDEN __regs_NTOSKRNL_InterlockedPushEntrySList( PSLIST_HEADER list, + PSLIST_ENTRY entry ) +#else +PSLIST_ENTRY WINAPI NTOSKRNL_InterlockedPushEntrySList( PSLIST_HEADER list, PSLIST_ENTRY entry ) +#endif +{ + return RtlInterlockedPushEntrySList( list, entry ); +} + +#ifdef __i386__ + +/*********************************************************************** + * ExInterlockedPopEntrySList (NTOSKRNL.EXE.@) + */ +#ifdef DEFINE_FASTCALL2_ENTRYPOINT +DEFINE_FASTCALL2_ENTRYPOINT( NTOSKRNL_ExInterlockedPopEntrySList ) +PSLIST_ENTRY WINAPI __regs_NTOSKRNL_ExInterlockedPopEntrySList( PSLIST_HEADER list, PKSPIN_LOCK lock ) +#else +PSLIST_ENTRY WINAPI NTOSKRNL_ExInterlockedPopEntrySList( PSLIST_HEADER list, PKSPIN_LOCK lock ) +#endif +{ + return RtlInterlockedPopEntrySList( list ); +} + +/*********************************************************************** + * ExInterlockedPushEntrySList (NTOSKRNL.EXE.@) + */ +#ifdef DEFINE_FASTCALL3_ENTRYPOINT +DEFINE_FASTCALL3_ENTRYPOINT( NTOSKRNL_ExInterlockedPushEntrySList ) +PSLIST_ENTRY WINAPI DECLSPEC_HIDDEN __regs_NTOSKRNL_ExInterlockedPushEntrySList( PSLIST_HEADER list, + PSLIST_ENTRY entry, + PKSPIN_LOCK lock ) +#else +PSLIST_ENTRY WINAPI NTOSKRNL_ExInterlockedPushEntrySList( PSLIST_HEADER list, PSLIST_ENTRY entry, PKSPIN_LOCK lock ) +#endif +{ + return RtlInterlockedPushEntrySList( list, entry ); +} + +#endif /* __i386__ */ +#endif /* _WIN64 */ + /*********************************************************************** * ExAcquireFastMutexUnsafe (NTOSKRNL.EXE.@) */ -- 2.11.4.GIT