Fix compilation with MSVC. Dedicated to Stefan.

svn path=/trunk/; revision=46264
This commit is contained in:
Timo Kreuzer
2010-03-18 16:30:54 +00:00
parent 814940c42b
commit 5024944fa7
3 changed files with 58 additions and 13 deletions
+50 -5
View File
@@ -397,9 +397,9 @@ Ki386HandleOpcodeV86(
IN PKTRAP_FRAME TrapFrame
);
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiEoiHelper(
IN PKTRAP_FRAME TrapFrame
);
@@ -416,9 +416,9 @@ KiExitV86Mode(
IN PKTRAP_FRAME TrapFrame
);
DECLSPEC_NORETURN
VOID
NTAPI
DECLSPEC_NORETURN
KiDispatchExceptionFromTrapFrame(
IN NTSTATUS Code,
IN ULONG_PTR Address,
@@ -620,6 +620,7 @@ KiSystemCallTrampoline(IN PVOID Handler,
* later to function like this as well.
*
*/
#ifdef __GNUC__
__asm__ __volatile__
(
"subl %1, %%esp\n"
@@ -635,7 +636,23 @@ KiSystemCallTrampoline(IN PVOID Handler,
"r"(Handler)
: "%esp", "%esi", "%edi"
);
#elif defined(_MSC_VER)
__asm
{
mov ecx, StackBytes
mov edx, Arguments
sub esp, ecx
mov edi, esp
mov esi, edx
shr ecx, 2
rep movsd
call Handler
mov Result, eax
}
#else
#error Unknown Compiler
#endif
return Result;
}
@@ -702,6 +719,7 @@ KiConvertToGuiThread(VOID)
* on its merry way.
*
*/
#ifdef __GNUC__
__asm__ __volatile__
(
"movl %%ebp, %1\n"
@@ -714,7 +732,20 @@ KiConvertToGuiThread(VOID)
:
: "%esp", "%ecx", "%edx", "memory"
);
#elif defined(_MSC_VER)
NTSTATUS NTAPI PsConvertToGuiThread(VOID);
__asm
{
mov StackFrame, ebp
sub StackFrame, esp
call PsConvertToGuiThread
add StackFrame, esp
mov ebp, StackFrame
mov Result, eax
}
#else
#error Unknown Compiler
#endif
return Result;
}
@@ -726,7 +757,8 @@ FORCEINLINE
KiSwitchToBootStack(IN ULONG_PTR InitialStack)
{
/* We have to switch to a new stack before continuing kernel initialization */
__asm__ __volatile__
#ifdef __GNUC__
__asm__
(
"movl %0, %%esp\n"
"subl %1, %%esp\n"
@@ -738,6 +770,19 @@ KiSwitchToBootStack(IN ULONG_PTR InitialStack)
"i"(CR0_EM | CR0_TS | CR0_MP)
: "%esp"
);
#elif defined(_MSC_VER)
VOID NTAPI KiSystemStartupBootStack(VOID);
__asm
{
mov ecx, InitialStack
mov esp, ecx
sub esp, (NPX_FRAME_LENGTH + KTRAP_FRAME_ALIGN + KTRAP_FRAME_LENGTH)
push (CR0_EM | CR0_TS | CR0_MP)
jmp KiSystemStartupBootStack
}
#else
#error Unknown Compiler
#endif
}
//
+1 -1
View File
@@ -1092,9 +1092,9 @@ KiIdleLoop(
VOID
);
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiSystemFatalException(
IN ULONG ExceptionCode,
IN PKTRAP_FRAME TrapFrame
+7 -7
View File
@@ -192,17 +192,17 @@ KiExitSystemCallDebugChecks(IN ULONG SystemCall,
//
// Generic Exit Routine
//
VOID FASTCALL DECLSPEC_NORETURN KiSystemCallReturn(IN PKTRAP_FRAME TrapFrame);
VOID FASTCALL DECLSPEC_NORETURN KiSystemCallSysExitReturn(IN PKTRAP_FRAME TrapFrame);
VOID FASTCALL DECLSPEC_NORETURN KiSystemCallTrapReturn(IN PKTRAP_FRAME TrapFrame);
VOID FASTCALL DECLSPEC_NORETURN KiEditedTrapReturn(IN PKTRAP_FRAME TrapFrame);
VOID FASTCALL DECLSPEC_NORETURN KiTrapReturn(IN PKTRAP_FRAME TrapFrame);
VOID FASTCALL DECLSPEC_NORETURN KiTrapReturnNoSegments(IN PKTRAP_FRAME TrapFrame);
DECLSPEC_NORETURN VOID FASTCALL KiSystemCallReturn(IN PKTRAP_FRAME TrapFrame);
DECLSPEC_NORETURN VOID FASTCALL KiSystemCallSysExitReturn(IN PKTRAP_FRAME TrapFrame);
DECLSPEC_NORETURN VOID FASTCALL KiSystemCallTrapReturn(IN PKTRAP_FRAME TrapFrame);
DECLSPEC_NORETURN VOID FASTCALL KiEditedTrapReturn(IN PKTRAP_FRAME TrapFrame);
DECLSPEC_NORETURN VOID FASTCALL KiTrapReturn(IN PKTRAP_FRAME TrapFrame);
DECLSPEC_NORETURN VOID FASTCALL KiTrapReturnNoSegments(IN PKTRAP_FRAME TrapFrame);
typedef
VOID
(FASTCALL
*PFAST_SYSTEM_CALL_EXIT)(IN PKTRAP_FRAME TrapFrame) DECLSPEC_NORETURN;
*PFAST_SYSTEM_CALL_EXIT)(IN PKTRAP_FRAME TrapFrame);
extern PFAST_SYSTEM_CALL_EXIT KiFastCallExitHandler;