Disable correct usage of ESP0 since it seems the V86 code is still not ready to handle that. This should fix the V86 exceptions some people have been having. Modified: trunk/reactos/ntoskrnl/ke/i386/ctxswitch.S Modified: trunk/reactos/ntoskrnl/ke/i386/thread.c _____
Modified: trunk/reactos/ntoskrnl/ke/i386/ctxswitch.S --- trunk/reactos/ntoskrnl/ke/i386/ctxswitch.S 2006-01-16 16:45:27 UTC (rev 20913) +++ trunk/reactos/ntoskrnl/ke/i386/ctxswitch.S 2006-01-16 17:05:50 UTC (rev 20914) @@ -171,8 +171,11 @@
NoAdjust:
/* Set new ESP0 */ - mov [ebp+KTSS_ESP0], eax + //mov [ebp+KTSS_ESP0], eax
+ /* Save it */ + push [ebp+KTSS_ESP0] + /* Set TEB pointer */ mov eax, [esi+KTHREAD_TEB] mov [ebx+KPCR_TEB], eax @@ -257,6 +260,9 @@ mov cr0, eax 4:
+ /* Restore ESP0 */ + pop [ebp+KTSS_ESP0] + /* Restore exception list */ pop [ebx+KPCR_EXCEPTION_LIST]
_____
Modified: trunk/reactos/ntoskrnl/ke/i386/thread.c --- trunk/reactos/ntoskrnl/ke/i386/thread.c 2006-01-16 16:45:27 UTC (rev 20913) +++ trunk/reactos/ntoskrnl/ke/i386/thread.c 2006-01-16 17:05:50 UTC (rev 20914) @@ -14,6 +14,7 @@
typedef struct _KSHARED_CTXSWITCH_FRAME { + ULONG Esp0; PVOID ExceptionList; PVOID RetEip; } KSHARED_CTXSWITCH_FRAME, *PKSHARED_CTXSWITCH_FRAME; @@ -231,6 +232,9 @@
/* And set up the Context Switch Frame */ CtxSwitchFrame->RetEip = KiThreadStartup; + CtxSwitchFrame->Esp0 = (ULONG_PTR)Thread->InitialStack - + sizeof(FX_SAVE_AREA) - + 0x10; CtxSwitchFrame->ExceptionList = (PVOID)0xFFFFFFFF;
/* Save back the new value of the kernel stack. */