Author: ion Date: Fri Aug 25 06:23:47 2006 New Revision: 23700
URL: http://svn.reactos.org/svn/reactos?rev=23700&view=rev Log: - We do not speak about the v86 hack. - This should fix the V86 GPF error.
Modified: trunk/reactos/ntoskrnl/include/internal/i386/ke.h trunk/reactos/ntoskrnl/ke/i386/ctxswitch.S trunk/reactos/ntoskrnl/ke/i386/thread.c
Modified: trunk/reactos/ntoskrnl/include/internal/i386/ke.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/i... ============================================================================== --- trunk/reactos/ntoskrnl/include/internal/i386/ke.h (original) +++ trunk/reactos/ntoskrnl/include/internal/i386/ke.h Fri Aug 25 06:23:47 2006 @@ -44,6 +44,8 @@
#define FRAME_EDITED 0xFFF8
+#define WE_DO_NOT_SPEAK_ABOUT_THE_V86_HACK 1 + #ifndef __ASM__
extern ULONG Ke386CacheAlignment;
Modified: trunk/reactos/ntoskrnl/ke/i386/ctxswitch.S URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/i386/ctxswitch.... ============================================================================== --- trunk/reactos/ntoskrnl/ke/i386/ctxswitch.S (original) +++ trunk/reactos/ntoskrnl/ke/i386/ctxswitch.S Fri Aug 25 06:23:47 2006 @@ -299,6 +299,11 @@ /* Save the Exception list */ push [ebx+KPCR_EXCEPTION_LIST]
+#if WE_DO_NOT_SPEAK_ABOUT_THE_V86_HACK // V86 HACK + mov ecx, [ebx+KPCR_TSS] + push [ecx+KTSS_ESP0] +#endif + /* DPC shouldn't be active */ cmp byte ptr [ebx+KPCR_PRCB_DPC_ROUTINE_ACTIVE], 0 jnz BugCheckDpc @@ -393,6 +398,11 @@ inc dword ptr [esi+KTHREAD_CONTEXT_SWITCHES] //inc dword ptr [esi+KPRC_PRCB_CONTEXT_SWITCHES]
+#if WE_DO_NOT_SPEAK_ABOUT_THE_V86_HACK + mov ebp, [ebx+KPCR_TSS] + pop [ebp+KTSS_ESP0] +#endif + /* Restore exception list */ pop [ebx+KPCR_EXCEPTION_LIST]
Modified: trunk/reactos/ntoskrnl/ke/i386/thread.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/i386/thread.c?r... ============================================================================== --- trunk/reactos/ntoskrnl/ke/i386/thread.c (original) +++ trunk/reactos/ntoskrnl/ke/i386/thread.c Fri Aug 25 06:23:47 2006 @@ -14,6 +14,9 @@
typedef struct _KSHARED_CTXSWITCH_FRAME { +#if WE_DO_NOT_SPEAK_ABOUT_THE_V86_HACK // V86 HACK + ULONG_PTR Esp0; +#endif PVOID ExceptionList; KIRQL WaitIrql; PVOID RetEip; @@ -233,6 +236,11 @@ CtxSwitchFrame->RetEip = KiThreadStartup; CtxSwitchFrame->WaitIrql = APC_LEVEL; CtxSwitchFrame->ExceptionList = (PVOID)0xFFFFFFFF; +#if WE_DO_NOT_SPEAK_ABOUT_THE_V86_HACK // V86 HACK + CtxSwitchFrame->Esp0 = (ULONG_PTR)Thread->InitialStack - + sizeof(FX_SAVE_AREA) - + 0x10; +#endif
/* Save back the new value of the kernel stack. */ DPRINT("Final Kernel Stack: %x \n", CtxSwitchFrame);