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/…
==============================================================================
--- 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?…
==============================================================================
--- 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);