Author: jcatena Date: Thu Feb 4 17:35:49 2010 New Revision: 45421
URL: http://svn.reactos.org/svn/reactos?rev=45421&view=rev Log: [ntos] traps, work in progress
Modified: branches/jcatena-branch/include/ndk/i386/ketypes.h branches/jcatena-branch/ntoskrnl/include/internal/i386/asmmacro.S branches/jcatena-branch/ntoskrnl/include/internal/i386/ke.h branches/jcatena-branch/ntoskrnl/include/internal/trap_x.h branches/jcatena-branch/ntoskrnl/ke/i386/kiinit.c branches/jcatena-branch/ntoskrnl/ke/i386/traphdlr.c branches/jcatena-branch/ntoskrnl/ntoskrnl.sln branches/jcatena-branch/ntoskrnl/ntoskrnl.vcproj branches/jcatena-branch/ntoskrnl/trap/i386/TrapStub.h branches/jcatena-branch/ntoskrnl/trap/i386/trap_asm.h branches/jcatena-branch/ntoskrnl/trap/trap.c branches/jcatena-branch/ntoskrnl/trap/trap.h branches/jcatena-branch/ntoskrnl/trap/trap.vcproj
Modified: branches/jcatena-branch/include/ndk/i386/ketypes.h URL: http://svn.reactos.org/svn/reactos/branches/jcatena-branch/include/ndk/i386/... ============================================================================== --- branches/jcatena-branch/include/ndk/i386/ketypes.h [iso-8859-1] (original) +++ branches/jcatena-branch/include/ndk/i386/ketypes.h [iso-8859-1] Thu Feb 4 17:35:49 2010 @@ -179,52 +179,52 @@ // typedef struct _KTRAP_FRAME { - ULONG DbgEbp; - ULONG DbgEip; - ULONG DbgArgMark; - ULONG DbgArgPointer; - USHORT TempSegCs; - USHORT RsvTempSegCs; - ULONG TempEsp; - ULONG Dr0; - ULONG Dr1; - ULONG Dr2; - ULONG Dr3; - ULONG Dr6; - ULONG Dr7; - USHORT SegGs; - USHORT RsvSegGs; - USHORT SegEs; - USHORT RsvSegEs; - USHORT SegDs; - USHORT RsvSegDs; - ULONG Edx; - ULONG Ecx; - ULONG Eax; - ULONG PreviousPreviousMode; - struct _EXCEPTION_REGISTRATION_RECORD FAR *ExceptionList; - USHORT SegFs; - USHORT RsvSegFs; - ULONG Edi; - ULONG Esi; - ULONG Ebx; - ULONG Ebp; - ULONG ErrCode; - ULONG Eip; - USHORT SegCs; - USHORT RsvSegCs; - ULONG EFlags; - ULONG HardwareEsp; - ULONG HardwareSegSs; - USHORT V86Es; - USHORT RsvV86Es; - SHORT V86Ds; - USHORT RsvV86Ds; - USHORT V86Fs; - USHORT RsvV86Fs; - USHORT V86Gs; - USHORT RsvV86Gs; -} KTRAP_FRAME, *PKTRAP_FRAME; + ULONG DbgEbp; // 00 + ULONG DbgEip; // 04 + ULONG DbgArgMark; // 08 + ULONG DbgArgPointer; // 0c + USHORT TempSegCs; // 10 + USHORT RsvTempSegCs; // 12 + ULONG TempEsp; // 14 + ULONG Dr0; // 18 + ULONG Dr1; // 1c + ULONG Dr2; // 20 + ULONG Dr3; // 24 + ULONG Dr6; // 28 + ULONG Dr7; // 2c + USHORT SegGs; // 30 + USHORT RsvSegGs; // 32 + USHORT SegEs; // 34 + USHORT RsvSegEs; // 36 + USHORT SegDs; // 38 + USHORT RsvSegDs; // 3a + ULONG Edx; // 3c + ULONG Ecx; // 40 + ULONG Eax; // 44 + ULONG PreviousPreviousMode; // 48 + struct _EXCEPTION_REGISTRATION_RECORD FAR *ExceptionList; // 4c + USHORT SegFs; // 50 + USHORT RsvSegFs; // 52 + ULONG Edi; // 54 + ULONG Esi; // 58 + ULONG Ebx; // 5c + ULONG Ebp; // 60 + ULONG ErrCode; // 64 + ULONG Eip; // 68 + USHORT SegCs; // 6c + USHORT RsvSegCs; // 6e + ULONG EFlags; // 70 + ULONG HardwareEsp; // 74 + ULONG HardwareSegSs; // 78 + USHORT V86Es; // 7c + USHORT RsvV86Es; // 7e + SHORT V86Ds; // 80 + USHORT RsvV86Ds; // 82 + USHORT V86Fs; // 84 + USHORT RsvV86Fs; // 86 + USHORT V86Gs; // 88 + USHORT RsvV86Gs; // 8a +} KTRAP_FRAME, *PKTRAP_FRAME; // 8c
// // Defines the Callback Stack Layout for User Mode Callbacks
Modified: branches/jcatena-branch/ntoskrnl/include/internal/i386/asmmacro.S URL: http://svn.reactos.org/svn/reactos/branches/jcatena-branch/ntoskrnl/include/... ============================================================================== --- branches/jcatena-branch/ntoskrnl/include/internal/i386/asmmacro.S [iso-8859-1] (original) +++ branches/jcatena-branch/ntoskrnl/include/internal/i386/asmmacro.S [iso-8859-1] Thu Feb 4 17:35:49 2010 @@ -67,7 +67,7 @@ .macro idt Handler, Bits .long \Handler .short \Bits -// .short KGDT_R0_CODE + .short KGDT_R0_CODE .endm
//
Modified: branches/jcatena-branch/ntoskrnl/include/internal/i386/ke.h URL: http://svn.reactos.org/svn/reactos/branches/jcatena-branch/ntoskrnl/include/... ============================================================================== --- branches/jcatena-branch/ntoskrnl/include/internal/i386/ke.h [iso-8859-1] (original) +++ branches/jcatena-branch/ntoskrnl/include/internal/i386/ke.h [iso-8859-1] Thu Feb 4 17:35:49 2010 @@ -458,12 +458,13 @@ extern UCHAR KiDebugRegisterTrapOffsets[9]; extern UCHAR KiDebugRegisterContextOffsets[9];
+// !!! // extern VOID __cdecl KiTrap02(VOID); -VOID DECLSPEC_NORETURN KiTrap02(VOID); - +// VOID DECLSPEC_NORETURN KiTrap02(VOID); // extern VOID __cdecl KiTrap08(VOID); // extern VOID __cdecl KiTrap13(VOID); // extern VOID __cdecl KiFastCallEntry(VOID); + extern VOID NTAPI ExpInterlockedPopEntrySListFault(VOID); extern VOID __cdecl CopyParams(VOID); extern VOID __cdecl ReadBatch(VOID); @@ -475,6 +476,7 @@ // // Trap Macros // +#include "trap.h" #include "trap_x.h"
//
Modified: branches/jcatena-branch/ntoskrnl/include/internal/trap_x.h URL: http://svn.reactos.org/svn/reactos/branches/jcatena-branch/ntoskrnl/include/... ============================================================================== --- branches/jcatena-branch/ntoskrnl/include/internal/trap_x.h [iso-8859-1] (original) +++ branches/jcatena-branch/ntoskrnl/include/internal/trap_x.h [iso-8859-1] Thu Feb 4 17:35:49 2010 @@ -17,6 +17,10 @@ #define _TRAP_X_
#include <debug.h> +#define DBGTRAP DPRINT1 +// #define DBGTRAPENTRY DPRINT1("\n"); DbgDumpCpu(7|DBG_DUMPCPU_TSS); DPRINT1("TrapFrame=%p:\n", TrapFrame); DbgDumpMem(TrapFrame, 0x80) +// #define DBGTRAPENTRY DPRINT1("\n"); +
// !!! temp for testing extern KINTERRUPT *TrapStubInterrupt; @@ -104,6 +108,7 @@ TrapFrame->DbgEbp = TrapFrame->Ebp; }
+#if 0 VOID FORCEINLINE KiExitTrapDebugChecks(IN PKTRAP_FRAME TrapFrame, @@ -152,6 +157,8 @@ while (TRUE); } } +#endif +
VOID FORCEINLINE @@ -304,6 +311,7 @@ #endif UNREACHABLE; } +
VOID FORCEINLINE @@ -356,6 +364,7 @@ UNREACHABLE; }
+#if 0 VOID FORCEINLINE DECLSPEC_NORETURN @@ -405,6 +414,7 @@ #endif UNREACHABLE; } +#endif
VOID FORCEINLINE @@ -648,6 +658,7 @@ #endif }
+#if 0 // // Generic Exit Routine // @@ -659,11 +670,14 @@ // KTRAP_EXIT_SKIP_BITS SkipBits = { .Bits = Skip }; KTRAP_EXIT_SKIP_BITS SkipBits; PULONG ReturnStack; - + + DPRINTT("\n"); + SkipBits.Bits = Skip;
/* Debugging checks */ KiExitTrapDebugChecks(TrapFrame, SkipBits); + DPRINTT("DebugChecks r\n");
/* Restore the SEH handler chain */ KeGetPcr()->Tib.ExceptionList = TrapFrame->ExceptionList; @@ -684,7 +698,9 @@ while (TRUE); }
- /* Check if this was a V8086 trap */ + DPRINTT("100\n"); + + /* Check if this was a V8086 trap */ if (__builtin_expect(TrapFrame->EFlags & EFLAGS_V86_MASK, 0)) KiTrapReturn(TrapFrame);
/* Check if the trap frame was edited */ @@ -710,7 +726,7 @@ * wanted stack, and it uses IRET which allows a new CS to be inputted. * */ - + DPRINTT("edited\n"); /* Set CS that is requested */ TrapFrame->SegCs = TrapFrame->TempSegCs;
@@ -730,7 +746,8 @@ /* Check if this is a user trap */ if (__builtin_expect(KiUserTrap(TrapFrame), 1)) /* Ring 3 is where we spend time */ { - /* Check if segments should be restored */ + DPRINTT("user\n"); + /* Check if segments should be restored */ if (!SkipBits.SkipSegments) { /* Restore segments */ @@ -747,7 +764,8 @@ /* Check for system call -- a system call skips volatiles! */ if (__builtin_expect(SkipBits.SkipVolatiles, 0)) /* More INTs than SYSCALLs */ { - /* User or kernel call? */ + DPRINTT("skip vol\n"); + /* User or kernel call? */ KiUserSystemCall(TrapFrame);
/* Restore EFLags */ @@ -775,8 +793,11 @@ }
/* Return from interrupt */ + DPRINTT("KiTrapReturn"); KiTrapReturn(TrapFrame); -} + DPRINTT("r\n"); +} +#endif
// // Virtual 8086 Mode Optimized Trap Exit @@ -912,6 +933,7 @@ KiFillTrapFrameDebug(TrapFrame); }
+#if 0 // // Generic Trap Entry // @@ -971,6 +993,7 @@ /* Set debug header */ KiFillTrapFrameDebug(TrapFrame); } +#endif
// // Generates a Trap Prolog Stub for the given name
Modified: branches/jcatena-branch/ntoskrnl/ke/i386/kiinit.c URL: http://svn.reactos.org/svn/reactos/branches/jcatena-branch/ntoskrnl/ke/i386/... ============================================================================== --- branches/jcatena-branch/ntoskrnl/ke/i386/kiinit.c [iso-8859-1] (original) +++ branches/jcatena-branch/ntoskrnl/ke/i386/kiinit.c [iso-8859-1] Thu Feb 4 17:35:49 2010 @@ -11,7 +11,6 @@ #include <ntoskrnl.h> #define NDEBUG #include <debug.h> -// #include "trap_x.h"
/* GLOBALS *******************************************************************/
Modified: branches/jcatena-branch/ntoskrnl/ke/i386/traphdlr.c URL: http://svn.reactos.org/svn/reactos/branches/jcatena-branch/ntoskrnl/ke/i386/... ============================================================================== --- branches/jcatena-branch/ntoskrnl/ke/i386/traphdlr.c [iso-8859-1] (original) +++ branches/jcatena-branch/ntoskrnl/ke/i386/traphdlr.c [iso-8859-1] Thu Feb 4 17:35:49 2010 @@ -9,7 +9,7 @@ /* INCLUDES *******************************************************************/
#include <ntoskrnl.h> -#define NDEBUG +// #define NDEBUG #include <debug.h>
/* GLOBALS ********************************************************************/ @@ -295,6 +295,8 @@ FASTCALL KiTrap00Handler(IN PKTRAP_FRAME TrapFrame) { + DBGTRAPENTRY + /* Save trap frame */ KiEnterTrap(TrapFrame);
@@ -315,7 +317,9 @@ FASTCALL KiTrap01Handler(IN PKTRAP_FRAME TrapFrame) { - /* Save trap frame */ + DBGTRAPENTRY + + /* Save trap frame */ KiEnterTrap(TrapFrame);
/* Check for VDM trap */ @@ -331,16 +335,15 @@ TrapFrame); }
-VOID -DECLSPEC_NORETURN -KiTrap02(VOID) +VOID FASTCALL KiTrap02Handler(KTRAP_FRAME *TrapFrame) { PKTSS Tss, NmiTss; PKTHREAD Thread; PKPROCESS Process; PKGDTENTRY TssGdt; - KTRAP_FRAME TrapFrame; KIRQL OldIrql; + + DBGTRAPENTRY
// // In some sort of strange recursion case, we might end up here with the IF @@ -395,31 +398,31 @@ // We just have to go get the values... // RtlZeroMemory(&TrapFrame, sizeof(KTRAP_FRAME)); - TrapFrame.HardwareSegSs = Tss->Ss0; - TrapFrame.HardwareEsp = Tss->Esp0; - TrapFrame.EFlags = Tss->EFlags; - TrapFrame.SegCs = Tss->Cs; - TrapFrame.Eip = Tss->Eip; - TrapFrame.Ebp = Tss->Ebp; - TrapFrame.Ebx = Tss->Ebx; - TrapFrame.Esi = Tss->Esi; - TrapFrame.Edi = Tss->Edi; - TrapFrame.SegFs = Tss->Fs; - TrapFrame.ExceptionList = PCR->Tib.ExceptionList; - TrapFrame.PreviousPreviousMode = -1; - TrapFrame.Eax = Tss->Eax; - TrapFrame.Ecx = Tss->Ecx; - TrapFrame.Edx = Tss->Edx; - TrapFrame.SegDs = Tss->Ds; - TrapFrame.SegEs = Tss->Es; - TrapFrame.SegGs = Tss->Gs; - TrapFrame.DbgEip = Tss->Eip; - TrapFrame.DbgEbp = Tss->Ebp; + TrapFrame->HardwareSegSs = Tss->Ss0; + TrapFrame->HardwareEsp = Tss->Esp0; + TrapFrame->EFlags = Tss->EFlags; + TrapFrame->SegCs = Tss->Cs; + TrapFrame->Eip = Tss->Eip; + TrapFrame->Ebp = Tss->Ebp; + TrapFrame->Ebx = Tss->Ebx; + TrapFrame->Esi = Tss->Esi; + TrapFrame->Edi = Tss->Edi; + TrapFrame->SegFs = Tss->Fs; + TrapFrame->ExceptionList = PCR->Tib.ExceptionList; + TrapFrame->PreviousPreviousMode = -1; + TrapFrame->Eax = Tss->Eax; + TrapFrame->Ecx = Tss->Ecx; + TrapFrame->Edx = Tss->Edx; + TrapFrame->SegDs = Tss->Ds; + TrapFrame->SegEs = Tss->Es; + TrapFrame->SegGs = Tss->Gs; + TrapFrame->DbgEip = Tss->Eip; + TrapFrame->DbgEbp = Tss->Ebp;
// // Store the trap frame in the KPRCB // - KiSaveProcessorState(&TrapFrame, NULL); + KiSaveProcessorState(TrapFrame, NULL);
// // Call any registered NMI handlers and see if they handled it or not @@ -482,6 +485,8 @@ FASTCALL KiTrap03Handler(IN PKTRAP_FRAME TrapFrame) { + DBGTRAPENTRY + /* Save trap frame */ KiEnterTrap(TrapFrame);
@@ -494,6 +499,8 @@ FASTCALL KiTrap04Handler(IN PKTRAP_FRAME TrapFrame) { + DBGTRAPENTRY + /* Save trap frame */ KiEnterTrap(TrapFrame);
@@ -514,6 +521,8 @@ FASTCALL KiTrap05Handler(IN PKTRAP_FRAME TrapFrame) { + DBGTRAPENTRY + /* Save trap frame */ KiEnterTrap(TrapFrame);
@@ -540,6 +549,8 @@ PUCHAR Instruction; ULONG i; KIRQL OldIrql; + + DBGTRAPENTRY
/* Check for V86 GPF */ if (__builtin_expect(KiIsV8086TrapSafe(TrapFrame), 1)) @@ -626,6 +637,8 @@ PFX_SAVE_AREA SaveArea, NpxSaveArea; ULONG Cr0;
+ DBGTRAPENTRY + /* Save trap frame */ KiEnterTrap(TrapFrame);
@@ -732,6 +745,8 @@ FASTCALL KiTrap08Handler(IN PKTRAP_FRAME TrapFrame) { + DBGTRAPENTRY + /* FIXME: Not handled */ KiSystemFatalException(EXCEPTION_DOUBLE_FAULT, TrapFrame); } @@ -741,6 +756,8 @@ FASTCALL KiTrap09Handler(IN PKTRAP_FRAME TrapFrame) { + DBGTRAPENTRY + /* Save trap frame */ KiEnterTrap(TrapFrame);
@@ -754,6 +771,8 @@ FASTCALL KiTrap0AHandler(IN PKTRAP_FRAME TrapFrame) { + DBGTRAPENTRY + /* Save trap frame */ KiEnterTrap(TrapFrame);
@@ -769,6 +788,8 @@ FASTCALL KiTrap0BHandler(IN PKTRAP_FRAME TrapFrame) { + DBGTRAPENTRY + /* Save trap frame */ KiEnterTrap(TrapFrame);
@@ -782,6 +803,8 @@ FASTCALL KiTrap0CHandler(IN PKTRAP_FRAME TrapFrame) { + DBGTRAPENTRY + /* Save trap frame */ KiEnterTrap(TrapFrame);
@@ -800,6 +823,8 @@ PUCHAR Instructions; UCHAR Instruction = 0; KIRQL OldIrql; + + DBGTRAPENTRY
/* Check for V86 GPF */ if (__builtin_expect(KiIsV8086TrapSafe(TrapFrame), 1)) @@ -1075,6 +1100,8 @@ ULONG_PTR Cr2; NTSTATUS Status;
+ DBGTRAPENTRY + /* Save trap frame */ KiEnterTrap(TrapFrame);
@@ -1127,8 +1154,14 @@ (PVOID)Cr2, TrapFrame->SegCs & MODE_MASK, TrapFrame); - if (Status == STATUS_SUCCESS) KiEoiHelper(TrapFrame); - + DPRINTT("MmAccessFault()=%x\n", Status); + if (Status == STATUS_SUCCESS) + { + // return; // !!! + KiEoiHelper(TrapFrame); + } + DPRINTT("KiEoiHelper r\n"); + /* Check for S-LIST fault */ if (TrapFrame->Eip == (ULONG_PTR)ExpInterlockedPopEntrySListFault) { @@ -1186,6 +1219,8 @@ FASTCALL KiTrap0FHandler(IN PKTRAP_FRAME TrapFrame) { + DBGTRAPENTRY + /* Save trap frame */ KiEnterTrap(TrapFrame);
@@ -1201,6 +1236,8 @@ { PKTHREAD Thread; PFX_SAVE_AREA SaveArea; + + DBGTRAPENTRY
/* Save trap frame */ KiEnterTrap(TrapFrame); @@ -1227,6 +1264,8 @@ FASTCALL KiTrap11Handler(IN PKTRAP_FRAME TrapFrame) { + DBGTRAPENTRY + /* Save trap frame */ KiEnterTrap(TrapFrame);
@@ -1243,6 +1282,8 @@ PKTHREAD Thread; PFX_SAVE_AREA SaveArea; ULONG Cr0, MxCsrMask, Error; + + DBGTRAPENTRY
/* Save trap frame */ KiEnterTrap(TrapFrame); @@ -1326,6 +1367,8 @@ FASTCALL KiGetTickCountHandler(IN PKTRAP_FRAME TrapFrame) { + DBGTRAPENTRY + UNIMPLEMENTED; while (TRUE); } @@ -1334,6 +1377,8 @@ FASTCALL KiCallbackReturnHandler(IN PKTRAP_FRAME TrapFrame) { + DBGTRAPENTRY + UNIMPLEMENTED; while (TRUE); } @@ -1343,6 +1388,8 @@ FASTCALL KiRaiseAssertionHandler(IN PKTRAP_FRAME TrapFrame) { + DBGTRAPENTRY + /* Save trap frame */ KiEnterTrap(TrapFrame);
@@ -1381,6 +1428,8 @@ PKSERVICE_TABLE_DESCRIPTOR DescriptorTable; ULONG Id, Offset, StackBytes, Result; PVOID Handler; + + DBGTRAPENTRY
/* Loop because we might need to try this twice in case of a GUI call */ while (TRUE) @@ -1472,6 +1521,8 @@ IN KPROCESSOR_MODE PreviousPreviousMode, IN USHORT SegFs) { + DBGTRAPENTRY + /* No error code */ TrapFrame->ErrCode = 0;
@@ -1513,6 +1564,8 @@ ULONG ServiceNumber = TrapFrame->Eax; PKTHREAD Thread;
+ DBGTRAPENTRY + /* Fixup segments */ Ke386SetFs(KGDT_R0_PCR); Ke386SetDs(KGDT_R3_DATA | RPL_MASK); @@ -1553,6 +1606,8 @@ USHORT SegFs; PKTHREAD Thread;
+ DBGTRAPENTRY + /* Save and fixup FS */ SegFs = Ke386GetFs(); Ke386SetFs(KGDT_R0_PCR); @@ -1578,6 +1633,7 @@
/* CPU AND SOFTWARE TRAPS *****************************************************/
+#if 0 KiTrap(KiTrap00, KI_PUSH_FAKE_ERROR_CODE); KiTrap(KiTrap01, KI_PUSH_FAKE_ERROR_CODE); KiTrap(KiTrap03, KI_PUSH_FAKE_ERROR_CODE); @@ -1602,6 +1658,7 @@ KiTrap(KiDebugService, KI_PUSH_FAKE_ERROR_CODE); KiTrap(KiSystemService, KI_PUSH_FAKE_ERROR_CODE | KI_NONVOLATILES_ONLY); KiTrap(KiFastCallEntry, KI_FAST_SYSTEM_CALL); +#endif
/* * @implemented
Modified: branches/jcatena-branch/ntoskrnl/ntoskrnl.sln URL: http://svn.reactos.org/svn/reactos/branches/jcatena-branch/ntoskrnl/ntoskrnl... ============================================================================== --- branches/jcatena-branch/ntoskrnl/ntoskrnl.sln [iso-8859-1] (original) +++ branches/jcatena-branch/ntoskrnl/ntoskrnl.sln [iso-8859-1] Thu Feb 4 17:35:49 2010 @@ -3,6 +3,7 @@ # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ntoskrnl", "ntoskrnl.vcproj", "{E432D40C-7443-4449-9182-8932E0AEAE99}" ProjectSection(ProjectDependencies) = postProject + {E2A7291E-515F-4BAD-8E82-F77AA0815B47} = {E2A7291E-515F-4BAD-8E82-F77AA0815B47} {33A96973-0632-4142-A411-36B937663234} = {33A96973-0632-4142-A411-36B937663234} {45C60178-D657-45EC-9A99-EEE39C9845BF} = {45C60178-D657-45EC-9A99-EEE39C9845BF} {53C05779-2821-431C-93CC-CDFE6942DE3C} = {53C05779-2821-431C-93CC-CDFE6942DE3C} @@ -70,186 +71,97 @@ Global GlobalSection(SolutionConfigurationPlatforms) = preSolution d|Win32 = d|Win32 - Debug|Win32 = Debug|Win32 r|Win32 = r|Win32 - Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E432D40C-7443-4449-9182-8932E0AEAE99}.d|Win32.ActiveCfg = d|Win32 {E432D40C-7443-4449-9182-8932E0AEAE99}.d|Win32.Build.0 = d|Win32 - {E432D40C-7443-4449-9182-8932E0AEAE99}.Debug|Win32.ActiveCfg = d|Win32 - {E432D40C-7443-4449-9182-8932E0AEAE99}.Debug|Win32.Build.0 = d|Win32 {E432D40C-7443-4449-9182-8932E0AEAE99}.r|Win32.ActiveCfg = r|Win32 {E432D40C-7443-4449-9182-8932E0AEAE99}.r|Win32.Build.0 = r|Win32 - {E432D40C-7443-4449-9182-8932E0AEAE99}.Release|Win32.ActiveCfg = r|Win32 - {E432D40C-7443-4449-9182-8932E0AEAE99}.Release|Win32.Build.0 = r|Win32 {A4D48188-969A-48AD-A7A8-9A0985EE7A7B}.d|Win32.ActiveCfg = d|Win32 {A4D48188-969A-48AD-A7A8-9A0985EE7A7B}.d|Win32.Build.0 = d|Win32 - {A4D48188-969A-48AD-A7A8-9A0985EE7A7B}.Debug|Win32.ActiveCfg = d|Win32 - {A4D48188-969A-48AD-A7A8-9A0985EE7A7B}.Debug|Win32.Build.0 = d|Win32 {A4D48188-969A-48AD-A7A8-9A0985EE7A7B}.r|Win32.ActiveCfg = r|Win32 {A4D48188-969A-48AD-A7A8-9A0985EE7A7B}.r|Win32.Build.0 = r|Win32 - {A4D48188-969A-48AD-A7A8-9A0985EE7A7B}.Release|Win32.ActiveCfg = r|Win32 - {A4D48188-969A-48AD-A7A8-9A0985EE7A7B}.Release|Win32.Build.0 = r|Win32 {32B0B2D6-5612-40E8-90F5-FB5CB4D76C6E}.d|Win32.ActiveCfg = d|Win32 {32B0B2D6-5612-40E8-90F5-FB5CB4D76C6E}.d|Win32.Build.0 = d|Win32 - {32B0B2D6-5612-40E8-90F5-FB5CB4D76C6E}.Debug|Win32.ActiveCfg = d|Win32 - {32B0B2D6-5612-40E8-90F5-FB5CB4D76C6E}.Debug|Win32.Build.0 = d|Win32 {32B0B2D6-5612-40E8-90F5-FB5CB4D76C6E}.r|Win32.ActiveCfg = r|Win32 {32B0B2D6-5612-40E8-90F5-FB5CB4D76C6E}.r|Win32.Build.0 = r|Win32 - {32B0B2D6-5612-40E8-90F5-FB5CB4D76C6E}.Release|Win32.ActiveCfg = r|Win32 - {32B0B2D6-5612-40E8-90F5-FB5CB4D76C6E}.Release|Win32.Build.0 = r|Win32 {590171C3-2DD0-4790-9BB7-A3601BD548A1}.d|Win32.ActiveCfg = d|Win32 {590171C3-2DD0-4790-9BB7-A3601BD548A1}.d|Win32.Build.0 = d|Win32 - {590171C3-2DD0-4790-9BB7-A3601BD548A1}.Debug|Win32.ActiveCfg = d|Win32 - {590171C3-2DD0-4790-9BB7-A3601BD548A1}.Debug|Win32.Build.0 = d|Win32 {590171C3-2DD0-4790-9BB7-A3601BD548A1}.r|Win32.ActiveCfg = r|Win32 {590171C3-2DD0-4790-9BB7-A3601BD548A1}.r|Win32.Build.0 = r|Win32 - {590171C3-2DD0-4790-9BB7-A3601BD548A1}.Release|Win32.ActiveCfg = r|Win32 - {590171C3-2DD0-4790-9BB7-A3601BD548A1}.Release|Win32.Build.0 = r|Win32 {33A96973-0632-4142-A411-36B937663234}.d|Win32.ActiveCfg = d|Win32 {33A96973-0632-4142-A411-36B937663234}.d|Win32.Build.0 = d|Win32 - {33A96973-0632-4142-A411-36B937663234}.Debug|Win32.ActiveCfg = d|Win32 - {33A96973-0632-4142-A411-36B937663234}.Debug|Win32.Build.0 = d|Win32 {33A96973-0632-4142-A411-36B937663234}.r|Win32.ActiveCfg = r|Win32 {33A96973-0632-4142-A411-36B937663234}.r|Win32.Build.0 = r|Win32 - {33A96973-0632-4142-A411-36B937663234}.Release|Win32.ActiveCfg = r|Win32 - {33A96973-0632-4142-A411-36B937663234}.Release|Win32.Build.0 = r|Win32 {93A5CAA3-5B14-41C4-961A-1D1A93FD9818}.d|Win32.ActiveCfg = d|Win32 {93A5CAA3-5B14-41C4-961A-1D1A93FD9818}.d|Win32.Build.0 = d|Win32 - {93A5CAA3-5B14-41C4-961A-1D1A93FD9818}.Debug|Win32.ActiveCfg = d|Win32 - {93A5CAA3-5B14-41C4-961A-1D1A93FD9818}.Debug|Win32.Build.0 = d|Win32 {93A5CAA3-5B14-41C4-961A-1D1A93FD9818}.r|Win32.ActiveCfg = r|Win32 {93A5CAA3-5B14-41C4-961A-1D1A93FD9818}.r|Win32.Build.0 = r|Win32 - {93A5CAA3-5B14-41C4-961A-1D1A93FD9818}.Release|Win32.ActiveCfg = r|Win32 - {93A5CAA3-5B14-41C4-961A-1D1A93FD9818}.Release|Win32.Build.0 = r|Win32 {A4C0117F-DBB0-4631-A408-D6E4D964E07C}.d|Win32.ActiveCfg = d|Win32 {A4C0117F-DBB0-4631-A408-D6E4D964E07C}.d|Win32.Build.0 = d|Win32 - {A4C0117F-DBB0-4631-A408-D6E4D964E07C}.Debug|Win32.ActiveCfg = d|Win32 - {A4C0117F-DBB0-4631-A408-D6E4D964E07C}.Debug|Win32.Build.0 = d|Win32 {A4C0117F-DBB0-4631-A408-D6E4D964E07C}.r|Win32.ActiveCfg = r|Win32 {A4C0117F-DBB0-4631-A408-D6E4D964E07C}.r|Win32.Build.0 = r|Win32 - {A4C0117F-DBB0-4631-A408-D6E4D964E07C}.Release|Win32.ActiveCfg = r|Win32 - {A4C0117F-DBB0-4631-A408-D6E4D964E07C}.Release|Win32.Build.0 = r|Win32 {8035D0FD-0157-4F0D-845B-DE9CCB48490D}.d|Win32.ActiveCfg = d|Win32 {8035D0FD-0157-4F0D-845B-DE9CCB48490D}.d|Win32.Build.0 = d|Win32 - {8035D0FD-0157-4F0D-845B-DE9CCB48490D}.Debug|Win32.ActiveCfg = d|Win32 - {8035D0FD-0157-4F0D-845B-DE9CCB48490D}.Debug|Win32.Build.0 = d|Win32 {8035D0FD-0157-4F0D-845B-DE9CCB48490D}.r|Win32.ActiveCfg = r|Win32 {8035D0FD-0157-4F0D-845B-DE9CCB48490D}.r|Win32.Build.0 = r|Win32 - {8035D0FD-0157-4F0D-845B-DE9CCB48490D}.Release|Win32.ActiveCfg = r|Win32 - {8035D0FD-0157-4F0D-845B-DE9CCB48490D}.Release|Win32.Build.0 = r|Win32 {7CCF80F4-FCA6-4ED7-8C52-E92B7A1B7116}.d|Win32.ActiveCfg = d|Win32 {7CCF80F4-FCA6-4ED7-8C52-E92B7A1B7116}.d|Win32.Build.0 = d|Win32 - {7CCF80F4-FCA6-4ED7-8C52-E92B7A1B7116}.Debug|Win32.ActiveCfg = d|Win32 - {7CCF80F4-FCA6-4ED7-8C52-E92B7A1B7116}.Debug|Win32.Build.0 = d|Win32 {7CCF80F4-FCA6-4ED7-8C52-E92B7A1B7116}.r|Win32.ActiveCfg = r|Win32 {7CCF80F4-FCA6-4ED7-8C52-E92B7A1B7116}.r|Win32.Build.0 = r|Win32 - {7CCF80F4-FCA6-4ED7-8C52-E92B7A1B7116}.Release|Win32.ActiveCfg = r|Win32 - {7CCF80F4-FCA6-4ED7-8C52-E92B7A1B7116}.Release|Win32.Build.0 = r|Win32 {D4F03490-B3A7-4389-AB68-1DF9EF82D51F}.d|Win32.ActiveCfg = d|Win32 {D4F03490-B3A7-4389-AB68-1DF9EF82D51F}.d|Win32.Build.0 = d|Win32 - {D4F03490-B3A7-4389-AB68-1DF9EF82D51F}.Debug|Win32.ActiveCfg = d|Win32 - {D4F03490-B3A7-4389-AB68-1DF9EF82D51F}.Debug|Win32.Build.0 = d|Win32 {D4F03490-B3A7-4389-AB68-1DF9EF82D51F}.r|Win32.ActiveCfg = r|Win32 {D4F03490-B3A7-4389-AB68-1DF9EF82D51F}.r|Win32.Build.0 = r|Win32 - {D4F03490-B3A7-4389-AB68-1DF9EF82D51F}.Release|Win32.ActiveCfg = r|Win32 - {D4F03490-B3A7-4389-AB68-1DF9EF82D51F}.Release|Win32.Build.0 = r|Win32 {E3324A8B-EE25-43F7-9895-44E3A8083EA3}.d|Win32.ActiveCfg = d|Win32 {E3324A8B-EE25-43F7-9895-44E3A8083EA3}.d|Win32.Build.0 = d|Win32 - {E3324A8B-EE25-43F7-9895-44E3A8083EA3}.Debug|Win32.ActiveCfg = d|Win32 - {E3324A8B-EE25-43F7-9895-44E3A8083EA3}.Debug|Win32.Build.0 = d|Win32 {E3324A8B-EE25-43F7-9895-44E3A8083EA3}.r|Win32.ActiveCfg = r|Win32 {E3324A8B-EE25-43F7-9895-44E3A8083EA3}.r|Win32.Build.0 = r|Win32 - {E3324A8B-EE25-43F7-9895-44E3A8083EA3}.Release|Win32.ActiveCfg = r|Win32 - {E3324A8B-EE25-43F7-9895-44E3A8083EA3}.Release|Win32.Build.0 = r|Win32 {17C7F7C1-6315-4856-9375-39F0B329FA09}.d|Win32.ActiveCfg = d|Win32 {17C7F7C1-6315-4856-9375-39F0B329FA09}.d|Win32.Build.0 = d|Win32 - {17C7F7C1-6315-4856-9375-39F0B329FA09}.Debug|Win32.ActiveCfg = d|Win32 - {17C7F7C1-6315-4856-9375-39F0B329FA09}.Debug|Win32.Build.0 = d|Win32 {17C7F7C1-6315-4856-9375-39F0B329FA09}.r|Win32.ActiveCfg = r|Win32 {17C7F7C1-6315-4856-9375-39F0B329FA09}.r|Win32.Build.0 = r|Win32 - {17C7F7C1-6315-4856-9375-39F0B329FA09}.Release|Win32.ActiveCfg = r|Win32 - {17C7F7C1-6315-4856-9375-39F0B329FA09}.Release|Win32.Build.0 = r|Win32 {F61DDEF4-A045-4AFD-AA0A-FAF6F6F97A21}.d|Win32.ActiveCfg = d|Win32 {F61DDEF4-A045-4AFD-AA0A-FAF6F6F97A21}.d|Win32.Build.0 = d|Win32 - {F61DDEF4-A045-4AFD-AA0A-FAF6F6F97A21}.Debug|Win32.ActiveCfg = d|Win32 - {F61DDEF4-A045-4AFD-AA0A-FAF6F6F97A21}.Debug|Win32.Build.0 = d|Win32 {F61DDEF4-A045-4AFD-AA0A-FAF6F6F97A21}.r|Win32.ActiveCfg = r|Win32 {F61DDEF4-A045-4AFD-AA0A-FAF6F6F97A21}.r|Win32.Build.0 = r|Win32 - {F61DDEF4-A045-4AFD-AA0A-FAF6F6F97A21}.Release|Win32.ActiveCfg = r|Win32 - {F61DDEF4-A045-4AFD-AA0A-FAF6F6F97A21}.Release|Win32.Build.0 = r|Win32 {431D55CC-8FCA-4298-919C-F3214EFDDA60}.d|Win32.ActiveCfg = d|Win32 {431D55CC-8FCA-4298-919C-F3214EFDDA60}.d|Win32.Build.0 = d|Win32 - {431D55CC-8FCA-4298-919C-F3214EFDDA60}.Debug|Win32.ActiveCfg = d|Win32 - {431D55CC-8FCA-4298-919C-F3214EFDDA60}.Debug|Win32.Build.0 = d|Win32 {431D55CC-8FCA-4298-919C-F3214EFDDA60}.r|Win32.ActiveCfg = r|Win32 {431D55CC-8FCA-4298-919C-F3214EFDDA60}.r|Win32.Build.0 = r|Win32 - {431D55CC-8FCA-4298-919C-F3214EFDDA60}.Release|Win32.ActiveCfg = r|Win32 - {431D55CC-8FCA-4298-919C-F3214EFDDA60}.Release|Win32.Build.0 = r|Win32 {45C60178-D657-45EC-9A99-EEE39C9845BF}.d|Win32.ActiveCfg = d|Win32 {45C60178-D657-45EC-9A99-EEE39C9845BF}.d|Win32.Build.0 = d|Win32 - {45C60178-D657-45EC-9A99-EEE39C9845BF}.Debug|Win32.ActiveCfg = d|Win32 - {45C60178-D657-45EC-9A99-EEE39C9845BF}.Debug|Win32.Build.0 = d|Win32 {45C60178-D657-45EC-9A99-EEE39C9845BF}.r|Win32.ActiveCfg = r|Win32 {45C60178-D657-45EC-9A99-EEE39C9845BF}.r|Win32.Build.0 = r|Win32 - {45C60178-D657-45EC-9A99-EEE39C9845BF}.Release|Win32.ActiveCfg = r|Win32 - {45C60178-D657-45EC-9A99-EEE39C9845BF}.Release|Win32.Build.0 = r|Win32 {45E70482-84C8-4846-A1BF-3C7A1BC94335}.d|Win32.ActiveCfg = d|Win32 {45E70482-84C8-4846-A1BF-3C7A1BC94335}.d|Win32.Build.0 = d|Win32 - {45E70482-84C8-4846-A1BF-3C7A1BC94335}.Debug|Win32.ActiveCfg = d|Win32 - {45E70482-84C8-4846-A1BF-3C7A1BC94335}.Debug|Win32.Build.0 = d|Win32 {45E70482-84C8-4846-A1BF-3C7A1BC94335}.r|Win32.ActiveCfg = r|Win32 {45E70482-84C8-4846-A1BF-3C7A1BC94335}.r|Win32.Build.0 = r|Win32 - {45E70482-84C8-4846-A1BF-3C7A1BC94335}.Release|Win32.ActiveCfg = r|Win32 - {45E70482-84C8-4846-A1BF-3C7A1BC94335}.Release|Win32.Build.0 = r|Win32 {33EB04DB-6651-4F5C-9035-807FF1E38842}.d|Win32.ActiveCfg = d|Win32 {33EB04DB-6651-4F5C-9035-807FF1E38842}.d|Win32.Build.0 = d|Win32 - {33EB04DB-6651-4F5C-9035-807FF1E38842}.Debug|Win32.ActiveCfg = d|Win32 - {33EB04DB-6651-4F5C-9035-807FF1E38842}.Debug|Win32.Build.0 = d|Win32 {33EB04DB-6651-4F5C-9035-807FF1E38842}.r|Win32.ActiveCfg = r|Win32 {33EB04DB-6651-4F5C-9035-807FF1E38842}.r|Win32.Build.0 = r|Win32 - {33EB04DB-6651-4F5C-9035-807FF1E38842}.Release|Win32.ActiveCfg = r|Win32 - {33EB04DB-6651-4F5C-9035-807FF1E38842}.Release|Win32.Build.0 = r|Win32 {AEADDBC1-092C-4180-8D34-12CA97CFB497}.d|Win32.ActiveCfg = d|Win32 {AEADDBC1-092C-4180-8D34-12CA97CFB497}.d|Win32.Build.0 = d|Win32 - {AEADDBC1-092C-4180-8D34-12CA97CFB497}.Debug|Win32.ActiveCfg = d|Win32 - {AEADDBC1-092C-4180-8D34-12CA97CFB497}.Debug|Win32.Build.0 = d|Win32 {AEADDBC1-092C-4180-8D34-12CA97CFB497}.r|Win32.ActiveCfg = r|Win32 {AEADDBC1-092C-4180-8D34-12CA97CFB497}.r|Win32.Build.0 = r|Win32 - {AEADDBC1-092C-4180-8D34-12CA97CFB497}.Release|Win32.ActiveCfg = r|Win32 - {AEADDBC1-092C-4180-8D34-12CA97CFB497}.Release|Win32.Build.0 = r|Win32 {53C05779-2821-431C-93CC-CDFE6942DE3C}.d|Win32.ActiveCfg = d|Win32 {53C05779-2821-431C-93CC-CDFE6942DE3C}.d|Win32.Build.0 = d|Win32 - {53C05779-2821-431C-93CC-CDFE6942DE3C}.Debug|Win32.ActiveCfg = d|Win32 - {53C05779-2821-431C-93CC-CDFE6942DE3C}.Debug|Win32.Build.0 = d|Win32 {53C05779-2821-431C-93CC-CDFE6942DE3C}.r|Win32.ActiveCfg = r|Win32 {53C05779-2821-431C-93CC-CDFE6942DE3C}.r|Win32.Build.0 = r|Win32 - {53C05779-2821-431C-93CC-CDFE6942DE3C}.Release|Win32.ActiveCfg = r|Win32 - {53C05779-2821-431C-93CC-CDFE6942DE3C}.Release|Win32.Build.0 = r|Win32 {3D9AC5B7-C29C-46F5-B3D8-C4388F37DB5C}.d|Win32.ActiveCfg = d|Win32 {3D9AC5B7-C29C-46F5-B3D8-C4388F37DB5C}.d|Win32.Build.0 = d|Win32 - {3D9AC5B7-C29C-46F5-B3D8-C4388F37DB5C}.Debug|Win32.ActiveCfg = d|Win32 - {3D9AC5B7-C29C-46F5-B3D8-C4388F37DB5C}.Debug|Win32.Build.0 = d|Win32 {3D9AC5B7-C29C-46F5-B3D8-C4388F37DB5C}.r|Win32.ActiveCfg = r|Win32 {3D9AC5B7-C29C-46F5-B3D8-C4388F37DB5C}.r|Win32.Build.0 = r|Win32 - {3D9AC5B7-C29C-46F5-B3D8-C4388F37DB5C}.Release|Win32.ActiveCfg = r|Win32 - {3D9AC5B7-C29C-46F5-B3D8-C4388F37DB5C}.Release|Win32.Build.0 = r|Win32 {97021AF5-ED87-4AA8-B116-2D53E5D6D528}.d|Win32.ActiveCfg = d|Win32 {97021AF5-ED87-4AA8-B116-2D53E5D6D528}.d|Win32.Build.0 = d|Win32 - {97021AF5-ED87-4AA8-B116-2D53E5D6D528}.Debug|Win32.ActiveCfg = d|Win32 - {97021AF5-ED87-4AA8-B116-2D53E5D6D528}.Debug|Win32.Build.0 = d|Win32 {97021AF5-ED87-4AA8-B116-2D53E5D6D528}.r|Win32.ActiveCfg = r|Win32 {97021AF5-ED87-4AA8-B116-2D53E5D6D528}.r|Win32.Build.0 = r|Win32 - {97021AF5-ED87-4AA8-B116-2D53E5D6D528}.Release|Win32.ActiveCfg = r|Win32 - {97021AF5-ED87-4AA8-B116-2D53E5D6D528}.Release|Win32.Build.0 = r|Win32 {E2A7291E-515F-4BAD-8E82-F77AA0815B47}.d|Win32.ActiveCfg = d|Win32 {E2A7291E-515F-4BAD-8E82-F77AA0815B47}.d|Win32.Build.0 = d|Win32 - {E2A7291E-515F-4BAD-8E82-F77AA0815B47}.Debug|Win32.ActiveCfg = d|Win32 {E2A7291E-515F-4BAD-8E82-F77AA0815B47}.r|Win32.ActiveCfg = r|Win32 {E2A7291E-515F-4BAD-8E82-F77AA0815B47}.r|Win32.Build.0 = r|Win32 - {E2A7291E-515F-4BAD-8E82-F77AA0815B47}.Release|Win32.ActiveCfg = r|Win32 - {E2A7291E-515F-4BAD-8E82-F77AA0815B47}.Release|Win32.Build.0 = r|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE
Modified: branches/jcatena-branch/ntoskrnl/ntoskrnl.vcproj URL: http://svn.reactos.org/svn/reactos/branches/jcatena-branch/ntoskrnl/ntoskrnl... ============================================================================== --- branches/jcatena-branch/ntoskrnl/ntoskrnl.vcproj [iso-8859-1] (original) +++ branches/jcatena-branch/ntoskrnl/ntoskrnl.vcproj [iso-8859-1] Thu Feb 4 17:35:49 2010 @@ -63,7 +63,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="mma3.lib mm.lib ke.lib ex.lib se.lib ob.lib ps.lib cm.lib io.lib pnp.lib cc.lib csq.lib cmlib.lib fs.lib rossym.lib wdmguid.lib rt.lib rtl.lib crtnt.lib cpu-i386.lib dbgp.lib kdw.lib hal.lib bootvid.lib kdcom.lib" + AdditionalDependencies="mma3.lib mm.lib $(trapx).lib ke.lib ex.lib se.lib ob.lib ps.lib cm.lib io.lib pnp.lib cc.lib csq.lib cmlib.lib fs.lib rossym.lib wdmguid.lib rt.lib rtl.lib crtnt.lib cpu-i386.lib dbgp.lib kdw.lib hal.lib bootvid.lib kdcom.lib" OutputFile="$(OutDir)/ntoskrnl.exe" AdditionalLibraryDirectories="" IgnoreAllDefaultLibraries="true" @@ -139,7 +139,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="mma3.lib mm.lib ke.lib ex.lib se.lib ob.lib ps.lib cm.lib io.lib pnp.lib cc.lib csq.lib cmlib.lib fs.lib rossym.lib wdmguid.lib rt.lib rtl.lib crtnt.lib cpu-i386.lib dbgp.lib kdw.lib hal.lib bootvid.lib kdcom.lib" + AdditionalDependencies="mma3.lib mm.lib $(trapx).lib ke.lib ex.lib se.lib ob.lib ps.lib cm.lib io.lib pnp.lib cc.lib csq.lib cmlib.lib fs.lib rossym.lib wdmguid.lib rt.lib rtl.lib crtnt.lib cpu-i386.lib dbgp.lib kdw.lib hal.lib bootvid.lib kdcom.lib" OutputFile="$(OutDir)/ntoskrnl.exe" AdditionalLibraryDirectories="" IgnoreAllDefaultLibraries="true"
Modified: branches/jcatena-branch/ntoskrnl/trap/i386/TrapStub.h URL: http://svn.reactos.org/svn/reactos/branches/jcatena-branch/ntoskrnl/trap/i38... ============================================================================== --- branches/jcatena-branch/ntoskrnl/trap/i386/TrapStub.h [iso-8859-1] (original) +++ branches/jcatena-branch/ntoskrnl/trap/i386/TrapStub.h [iso-8859-1] Thu Feb 4 17:35:49 2010 @@ -47,7 +47,7 @@ #if !(TRAP_STUB_FLAGS & TRAPF_NOSAVESEG) mov KTRAP_FRAME.SegDs[esp], ds mov KTRAP_FRAME.SegEs[esp], es -#if (TRAP_STUB_FLAGS & TRAPF_SAVEFS) +#if !(TRAP_STUB_FLAGS & TRAPF_NOSAVEFS) mov KTRAP_FRAME.SegFs[esp], fs #endif #if !(TRAP_STUB_FLAGS & TRAPF_NOLOADDS) @@ -88,7 +88,7 @@ #if !(TRAP_STUB_FLAGS & TRAPF_NOSAVESEG) mov ds, KTRAP_FRAME.SegDs[esp] mov es, KTRAP_FRAME.SegEs[esp] -#if (TRAP_STUB_FLAGS & TRAPF_SAVEFS) +#if !(TRAP_STUB_FLAGS & TRAPF_NOSAVEFS) mov fs, KTRAP_FRAME.SegFs[esp] #endif #endif @@ -101,10 +101,12 @@ mov edx, KTRAP_FRAME.Eip[esp] add esp, dword ptr offset KTRAP_FRAME.V86Es sti - sysexit + CpuSysExit #endif mov ecx, KTRAP_FRAME.Ecx[esp] mov edx, KTRAP_FRAME.Edx[esp] + + add esp, KTRAP_FRAME_EIP iretd
_ASM_END
Modified: branches/jcatena-branch/ntoskrnl/trap/i386/trap_asm.h URL: http://svn.reactos.org/svn/reactos/branches/jcatena-branch/ntoskrnl/trap/i38... ============================================================================== --- branches/jcatena-branch/ntoskrnl/trap/i386/trap_asm.h [iso-8859-1] (original) +++ branches/jcatena-branch/ntoskrnl/trap/i386/trap_asm.h [iso-8859-1] Thu Feb 4 17:35:49 2010 @@ -1,57 +1,5 @@ -#if 0 -_INLINEF KiTrapStub(HandlerName, Flags) -{ - // alloc stack frame - if (Flags & TRAPF_ERRORCODE) - _ASM sub esp, KTRAP_FRAME.ErrCode - else - _ASM sub esp, KTRAP_FRAME.Eip - // save volatile regs - _ASM mov KTRAP_FRAME.Eax[esp], eax - _ASM mov KTRAP_FRAME.Ecx[esp], ecx - _ASM mov KTRAP_FRAME.Edx[esp], edx - // save ds & es - if (Flags & TRAPF_NOSAVEDSES) - { - _ASM mov KTRAP_FRAME.SegDs[esp], ds - _ASM mov KTRAP_FRAME.SegEs[esp], es - } - // save fs - if (Flags & TRAPF_NOSAVEFS) - _ASM mov KTRAP_FRAME.SegFs[esp], fs - // save non volatile regs - if (Flags & TRAPF_SAVENOVOL) - { - _ASM mov KTRAP_FRAME.Esi[esp], ebp - _ASM mov KTRAP_FRAME.Ebx[esp], ebx - _ASM mov KTRAP_FRAME.Esi[esp], esi - _ASM mov KTRAP_FRAME.Esi[esp], edi - } +_ONCE
- // call handler - _ASM mov ecx, esp - _ASM call HandlerName +VOID _NORETURN +KiTrapReturn(IN PKTRAP_FRAME TrapFrame);
- // return - if (Flags & TRAPF_NOSAVEDSES) - { - _ASM mov ds, KTRAP_FRAME.SegDs[esp] - _ASM mov es, KTRAP_FRAME.SegEs[esp] - } - if (Flags & TRAPF_NOSAVEFS) - _ASM mov fs, KTRAP_FRAME.SegFs[esp] - if (Flags & TRAPF_SAVENOVOL) - { - _ASM mov KTRAP_FRAME.Esi[esp], ebp - _ASM mov KTRAP_FRAME.Ebx[esp], ebx - _ASM mov KTRAP_FRAME.Esi[esp], esi - _ASM mov KTRAP_FRAME.Esi[esp], edi - } - _ASM mov eax, KTRAP_FRAME.Eax[esp] - _ASM mov ecx, KTRAP_FRAME.Ecx[esp] - _ASM mov edx, KTRAP_FRAME.Edx[esp] - _ASM add esp, KTRAP_FRAME.Eip - _ASM iretd -} -#endif -
Modified: branches/jcatena-branch/ntoskrnl/trap/trap.c URL: http://svn.reactos.org/svn/reactos/branches/jcatena-branch/ntoskrnl/trap/tra... ============================================================================== --- branches/jcatena-branch/ntoskrnl/trap/trap.c [iso-8859-1] (original) +++ branches/jcatena-branch/ntoskrnl/trap/trap.c [iso-8859-1] Thu Feb 4 17:35:49 2010 @@ -93,10 +93,12 @@ #define TRAP_STUB_FLAGS TRAPF_ERRORCODE #include <TrapStub.h>
+#if 0 // 12 MC machine check #define TRAP_STUB_NAME KiTrap12 #define TRAP_STUB_FLAGS 0 #include <TrapStub.h> +#endif
// 13 XM simd exception #define TRAP_STUB_NAME KiTrap13 @@ -115,7 +117,7 @@ #define TRAP_STUB_FLAGS 0 #include <TrapStub.h>
-#define TRAP_STUB_NAME KiDebugServiceVOID +#define TRAP_STUB_NAME KiDebugService #define TRAP_STUB_FLAGS 0 #include <TrapStub.h>
@@ -128,182 +130,12 @@ #define TRAP_STUB_FLAGS TRAPF_FASTSYSCALL #include <TrapStub.h>
+#if 0 #define TRAP_STUB_NAME KiInterruptTemplate #define TRAP_STUB_FLAGS TRAPF_VECTOR #include <TrapStub.h> +#endif
_NOWARN_POP
-/* TRAP EXIT CODE *************************************************************/ -// -// Generic Exit Routine -//
-VOID -FASTCALL -KiExitTrap(IN PKTRAP_FRAME TrapFrame, IN UCHAR Skip) -{ - KTRAP_EXIT_SKIP_BITS SkipBits; - PULONG ReturnStack; - - SkipBits.Bits = Skip; - - /* Debugging checks */ - // DPRINTT("DebugChecks\n"); - // KiExitTrapDebugChecks(TrapFrame, SkipBits); - - /* Restore the SEH handler chain */ - KeGetPcr()->Tib.ExceptionList = TrapFrame->ExceptionList; - - /* Check if the previous mode must be restored */ - if (__builtin_expect(!SkipBits.SkipPreviousMode, 0)) /* More INTS than SYSCALLs */ - { - /* Restore it */ - KeGetCurrentThread()->PreviousMode = TrapFrame->PreviousPreviousMode; - } - - /* Check if there are active debug registers */ - if (__builtin_expect(TrapFrame->Dr7 & ~DR7_RESERVED_MASK, 0)) - { - /* Not handled yet */ - DbgPrint("Need Hardware Breakpoint Support!\n"); - DbgBreakPoint(); - while (TRUE); - } - - /* Check if this was a V8086 trap */ - // DPRINTT("V8086\n"); - if (__builtin_expect(TrapFrame->EFlags & EFLAGS_V86_MASK, 0)) - { - // DPRINTT("V8086 r\n"); - // KiTrapReturn(TrapFrame); - return; - } - - /* Check if the trap frame was edited */ - if (__builtin_expect(!(TrapFrame->SegCs & FRAME_EDITED), 0)) - { - /* - * An edited trap frame happens when we need to modify CS and/or ESP but - * don't actually have a ring transition. This happens when a kernelmode - * caller wants to perform an NtContinue to another kernel address, such - * as in the case of SEH (basically, a longjmp), or to a user address. - * - * Therefore, the CPU never saved CS/ESP on the stack because we did not - * get a trap frame due to a ring transition (there was no interrupt). - * Even if we didn't want to restore CS to a new value, a problem occurs - * due to the fact a normal RET would not work if we restored ESP since - * RET would then try to read the result off the stack. - * - * The NT kernel solves this by adding 12 bytes of stack to the exiting - * trap frame, in which EFLAGS, CS, and EIP are stored, and then saving - * the ESP that's being requested into the ErrorCode field. It will then - * exit with an IRET. This fixes both issues, because it gives the stack - * some space where to hold the return address and then end up with the - * wanted stack, and it uses IRET which allows a new CS to be inputted. - * - */ - // DPRINTT("edited\n"); - /* Set CS that is requested */ - TrapFrame->SegCs = TrapFrame->TempSegCs; - - /* First make space on requested stack */ - ReturnStack = (PULONG)(TrapFrame->TempEsp - 12); - TrapFrame->ErrCode = (ULONG_PTR)ReturnStack; - - /* Now copy IRET frame */ - ReturnStack[0] = TrapFrame->Eip; - ReturnStack[1] = TrapFrame->SegCs; - ReturnStack[2] = TrapFrame->EFlags; - - /* Do special edited return */ - // DPRINTT("KiEditedTrapReturn\n"); - // KiEditedTrapReturn(TrapFrame); - return; - } - - /* Check if this is a user trap */ - if (__builtin_expect(KiUserTrap(TrapFrame), 1)) /* Ring 3 is where we spend time */ - { - // DPRINTT("user\n"); - /* Check if segments should be restored */ - if (!SkipBits.SkipSegments) - { - /* Restore segments */ - CpuSetGs(TrapFrame->SegGs); - CpuSetEs(TrapFrame->SegEs); - CpuSetDs(TrapFrame->SegDs); - CpuSetFs(TrapFrame->SegFs); - } - - /* Always restore FS since it goes from KPCR to TEB */ - CpuSetFs(TrapFrame->SegFs); - } - - /* Check for system call -- a system call skips volatiles! */ - if (__builtin_expect(SkipBits.SkipVolatiles, 0)) /* More INTs than SYSCALLs */ - { - // DPRINTT("syscall\n"); - /* Kernel call or user call? */ - if (__builtin_expect(KiUserTrap(TrapFrame), 1)) /* More Ring 3 than 0 */ - { - /* Is SYSENTER supported and/or enabled, or are we stepping code? */ - if (__builtin_expect((KiFastSystemCallDisable) || - (TrapFrame->EFlags & EFLAGS_TF), 0)) - { - /* Exit normally */ - // DPRINTT("normally KiSystemCallTrapReturn\n"); - KiSystemCallTrapReturn(TrapFrame); - } - else - { - /* Restore user FS */ - CpuSetFs(KGDT_R3_TEB | RPL_MASK); - - /* Remove interrupt flag */ - TrapFrame->EFlags &= ~EFLAGS_INTERRUPT_MASK; - __writeeflags(TrapFrame->EFlags); - - /* Exit through SYSEXIT */ - // DPRINTT("sysexit KiSystemCallSysExitReturn\n"); - // KiSystemCallSysExitReturn(TrapFrame); - } - } - else - { - /* Restore EFLags */ - __writeeflags(TrapFrame->EFlags); - - /* Call is kernel, so do a jump back since this wasn't a real INT */ - // DPRINTT("kernel KiSystemCallReturn\n"); - // KiSystemCallReturn(TrapFrame); - } - } - else - { - // DPRINTT("int KiTrapReturn\n"); - /* Return from interrupt */ - // KiTrapReturn(TrapFrame); - } -} - - - -VOID _FASTCALL -KiEoiHelper(IN PKTRAP_FRAME TrapFrame) -{ - // DPRINTT("\n"); - /* Disable interrupts until we return */ - CpuIntDisable(); - - /* Check for APC delivery */ - KiCheckForApcDelivery(TrapFrame); - - /* Now exit the trap for real */ - // DPRINTT("KiExitTrap\n"); - KiExitTrap(TrapFrame, KTE_SKIP_PM_BIT); - UNREACHABLE; -} - - -
Modified: branches/jcatena-branch/ntoskrnl/trap/trap.h URL: http://svn.reactos.org/svn/reactos/branches/jcatena-branch/ntoskrnl/trap/tra... ============================================================================== --- branches/jcatena-branch/ntoskrnl/trap/trap.h [iso-8859-1] (original) +++ branches/jcatena-branch/ntoskrnl/trap/trap.h [iso-8859-1] Thu Feb 4 17:35:49 2010 @@ -1,6 +1,8 @@ _ONCE
-#define DBGTRAPENTRY +#define DBGTRAP DPRINT1 +// #define DBGTRAPENTRY DPRINT1("\n"); DbgDumpCpu(7|DBG_DUMPCPU_TSS); DPRINT1("TrapFrame=%p:\n", TrapFrame); DbgDumpMem(TrapFrame, 0x80) +#define DBGTRAPENTRY DPRINT1("\n"); DbgDumpCpu(7); DPRINT1("TrapFrame=%p:\n", TrapFrame); DbgDumpMem(TrapFrame, sizeof(KTRAP_FRAME));
// TRAP_STUB_FLAGS TrapStub x-macro flags // trap type @@ -9,8 +11,15 @@ #define TRAPF_FASTSYSCALL 4 // options #define TRAPF_NOSAVESEG 0x100 -#define TRAPF_SAVEFS 0x200 +#define TRAPF_NOSAVEFS 0x200 #define TRAPF_SAVENOVOL 0x400 #define TRAPF_NOLOADDS 0x800
#include <trap_asm.h> + +VOID KiTrap02(VOID); + +// temporary +VOID KiExitTrapDebugChecks(IN PKTRAP_FRAME TrapFrame, IN KTRAP_EXIT_SKIP_BITS SkipBits); +VOID KiEnterTrap(IN PKTRAP_FRAME TrapFrame); +VOID KiExitTrap(IN PKTRAP_FRAME TrapFrame, IN UCHAR Skip);
Modified: branches/jcatena-branch/ntoskrnl/trap/trap.vcproj URL: http://svn.reactos.org/svn/reactos/branches/jcatena-branch/ntoskrnl/trap/tra... ============================================================================== --- branches/jcatena-branch/ntoskrnl/trap/trap.vcproj [iso-8859-1] (original) +++ branches/jcatena-branch/ntoskrnl/trap/trap.vcproj [iso-8859-1] Thu Feb 4 17:35:49 2010 @@ -157,9 +157,17 @@ RelativePath=".\trap.c" > </File> + <File + RelativePath=".\TrapExit.c" + > + </File> <Filter Name="i386" > + <File + RelativePath=".\i386\trap_asm.c" + > + </File> </Filter> </Filter> <Filter