[NTOS]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Thu, 18 Mar 2010 16:30:54 +0000 (16:30 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Thu, 18 Mar 2010 16:30:54 +0000 (16:30 +0000)
Fix compilation with MSVC. Dedicated to Stefan.

svn path=/trunk/; revision=46264

reactos/ntoskrnl/include/internal/i386/ke.h
reactos/ntoskrnl/include/internal/ke.h
reactos/ntoskrnl/include/internal/trap_x.h

index ebe4748..701688e 100644 (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
 }
 
 //
index b1752af..c7aa303 100644 (file)
@@ -1092,9 +1092,9 @@ KiIdleLoop(
     VOID
 );
 
+DECLSPEC_NORETURN
 VOID
 FASTCALL
-DECLSPEC_NORETURN
 KiSystemFatalException(
     IN ULONG ExceptionCode,
     IN PKTRAP_FRAME TrapFrame
index 93c5d1f..3da6991 100644 (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;