From e0c83caeeec16b45e0b42314f4d3f92a442c82a4 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 20 Nov 2010 00:46:31 +0000 Subject: [PATCH] [NTDLL] - Convert dispatch.S to new asm syntax - Add exports for RtlAddVectoredContinueHandler and RtlRemoveVectoredContinueHandler svn path=/branches/cmake-bringup/; revision=49651 --- dll/ntdll/def/ntdll.spec | 5 ++- dll/ntdll/dispatch/i386/dispatch.S | 70 +++++++++++++++--------------- 2 files changed, 38 insertions(+), 37 deletions(-) diff --git a/dll/ntdll/def/ntdll.spec b/dll/ntdll/def/ntdll.spec index cb71a9a4635..233c50f4ed8 100644 --- a/dll/ntdll/def/ntdll.spec +++ b/dll/ntdll/def/ntdll.spec @@ -437,7 +437,7 @@ @ stdcall RtlAddMandatoryAce(ptr long long long long ptr) @ stdcall RtlAddRefActivationContext(ptr) ;@ stdcall RtlAddRefMemoryStream -;@ stdcall RtlAddVectoredContinueHandler +@ stdcall RtlAddVectoredContinueHandler(long ptr) @ stdcall RtlAddVectoredExceptionHandler(long ptr) ;@ stdcall RtlAddressInSectionTable @ stdcall RtlAdjustPrivilege(long long long ptr) @@ -723,6 +723,7 @@ @ stdcall RtlInt64ToUnicodeString(double long ptr) @ stdcall RtlIntegerToChar(long long long ptr) @ stdcall RtlIntegerToUnicodeString(long long ptr) +;@ stdcall RtlInterlockedCompareExchange64 @ stdcall -arch=i386,x86_64 RtlInterlockedFlushSList(ptr) @ stdcall -arch=i386,x86_64 RtlInterlockedPopEntrySList(ptr) @ stdcall -arch=i386,x86_64 RtlInterlockedPushEntrySList(ptr ptr) @@ -849,7 +850,7 @@ @ stdcall RtlReleaseSRWLockExclusive(ptr) @ stdcall RtlReleaseSRWLockShared(ptr) @ stdcall RtlRemoteCall(ptr ptr ptr long ptr long long) -;@ stdcall RtlRemoveVectoredContinueHandler +@ stdcall RtlRemoveVectoredContinueHandler(ptr) @ stdcall RtlRemoveVectoredExceptionHandler(ptr) @ stdcall RtlResetRtlTranslations(ptr) @ stdcall RtlRestoreLastWin32Error(long) RtlSetLastWin32Error diff --git a/dll/ntdll/dispatch/i386/dispatch.S b/dll/ntdll/dispatch/i386/dispatch.S index c17374e9ed1..25f7c34bcee 100644 --- a/dll/ntdll/dispatch/i386/dispatch.S +++ b/dll/ntdll/dispatch/i386/dispatch.S @@ -8,13 +8,22 @@ /* INCLUDES ******************************************************************/ -#include -.intel_syntax noprefix +#include +#include + +EXTERN _LdrpInit@12:PROC +EXTERN _NtTestAlert@0:PROC +EXTERN _RtlDispatchException@8:PROC +EXTERN _RtlRaiseException@4:PROC +EXTERN _RtlRaiseStatus@4:PROC +EXTERN _ZwCallbackReturn@12:PROC +EXTERN _ZwContinue@8:PROC +EXTERN _ZwRaiseException@12:PROC /* FUNCTIONS ****************************************************************/ +.code -.func LdrInitializeThunk@16 -.globl _LdrInitializeThunk@16 +PUBLIC _LdrInitializeThunk@16 _LdrInitializeThunk@16: /* Get the APC Context */ @@ -28,9 +37,8 @@ _LdrInitializeThunk@16: /* Jump into the C initialization routine */ jmp _LdrpInit@12 -.endfunc -.func KiUserApcExceptionHandler + _KiUserApcExceptionHandler: /* Put the exception record in ECX and check the Flags */ @@ -45,10 +53,9 @@ _KiUserApcExceptionHandler: /* We'll execute handler */ mov eax, EXCEPTION_EXECUTE_HANDLER ret 16 -.endfunc -.func KiUserApcDispatcher@16 -.globl _KiUserApcDispatcher@16 + +PUBLIC _KiUserApcDispatcher@16 _KiUserApcDispatcher@16: /* Setup SEH stack */ @@ -86,9 +93,8 @@ StatusRaiseApc: call _RtlRaiseStatus@4 jmp StatusRaiseApc ret 16 -.endfunc -.func KiUserCallbackExceptionHandler + _KiUserCallbackExceptionHandler: /* Put the exception record in ECX and check the Flags */ @@ -106,10 +112,9 @@ return: /* We'll execute the handler */ mov eax, EXCEPTION_EXECUTE_HANDLER ret 16 -.endfunc -.func KiUserCallbackDispatcher@12 -.globl _KiUserCallbackDispatcher@12 + +PUBLIC _KiUserCallbackDispatcher@12 _KiUserCallbackDispatcher@12: /* Setup SEH stack */ @@ -131,7 +136,7 @@ _KiUserCallbackDispatcher@12: mov eax, [eax+PEB_KERNEL_CALLBACK_TABLE] /* Call the routine */ - call [eax+edx*4] + call dword ptr [eax+edx*4] /* Return from callback */ push eax @@ -148,10 +153,9 @@ StatusRaise: call _RtlRaiseStatus@4 jmp StatusRaise ret 12 -.endfunc -.func KiRaiseUserExceptionDispatcher@0 -.globl _KiRaiseUserExceptionDispatcher@0 + +PUBLIC _KiRaiseUserExceptionDispatcher@0 _KiRaiseUserExceptionDispatcher@0: /* Setup stack for EXCEPTION_RECORD */ @@ -177,10 +181,9 @@ _KiRaiseUserExceptionDispatcher@0: mov esp, ebp pop ebp ret -.endfunc -.func KiUserExceptionDispatcher@8 -.globl _KiUserExceptionDispatcher@8 + +PUBLIC _KiUserExceptionDispatcher@8 _KiUserExceptionDispatcher@8: /* Clear direction flag */ @@ -236,39 +239,35 @@ Exit: push esp call _RtlRaiseException@4 ret 8 -.endfunc -.func KiIntSystemCall@0 -.globl _KiIntSystemCall@0 + +PUBLIC _KiIntSystemCall@0 _KiIntSystemCall@0: /* Set stack in EDX and do the interrupt */ lea edx, [esp+8] - int 0x2E + int HEX(2E) /* Return to caller */ ret -.endfunc -.func KiFastSystemCall@0 -.globl _KiFastSystemCall@0 + +PUBLIC _KiFastSystemCall@0 _KiFastSystemCall@0: /* Put ESP in EDX and do the SYSENTER */ mov edx, esp sysenter -.endfunc -.func KiFastSystemCallRet@0 -.globl _KiFastSystemCallRet@0 + +PUBLIC _KiFastSystemCallRet@0 _KiFastSystemCallRet@0: /* Just return to caller */ ret -.endfunc -.func RtlpGetStackLimits@8 -.globl _RtlpGetStackLimits@8 + +PUBLIC _RtlpGetStackLimits@8 _RtlpGetStackLimits@8: /* Get the stack limits */ @@ -283,4 +282,5 @@ _RtlpGetStackLimits@8: /* return */ ret 8 -.endfunc + +END