[ros-diffs] [tkreuzer] 45062: [NTOS] KiExitV86Mode is supposed to return a pointer to the protected mode KTRAP_FRAME. Instead it was returning the value of TrapFrame->Edi, which would be identical to PmTrapFrame->Ebp, which doesn't have any particular meaning. Fix it by returning PmTrapFrame directly. Fixes 2nd stage boot.

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Wed Jan 13 22:31:56 CET 2010


Author: tkreuzer
Date: Wed Jan 13 22:31:55 2010
New Revision: 45062

URL: http://svn.reactos.org/svn/reactos?rev=45062&view=rev
Log:
[NTOS]
KiExitV86Mode is supposed to return a pointer to the protected mode KTRAP_FRAME. Instead it was returning the value of TrapFrame->Edi, which would be identical to PmTrapFrame->Ebp, which doesn't have any particular meaning. Fix it by returning PmTrapFrame directly. Fixes 2nd stage boot.

Modified:
    trunk/reactos/ntoskrnl/ke/i386/v86vdm.c

Modified: trunk/reactos/ntoskrnl/ke/i386/v86vdm.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/i386/v86vdm.c?rev=45062&r1=45061&r2=45062&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ke/i386/v86vdm.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ke/i386/v86vdm.c [iso-8859-1] Wed Jan 13 22:31:55 2010
@@ -478,9 +478,9 @@
     GdtEntry->HighWord.Bytes.BaseMid = (UCHAR)((ULONG_PTR)Thread->Teb >> 16);
     GdtEntry->HighWord.Bytes.BaseHi = (UCHAR)((ULONG_PTR)Thread->Teb >> 24);
 
-    /* Enable interrupts and get back to protected mode */
+    /* Enable interrupts and return a pointer to the trap frame */
     _enable();
-    return TrapFrame->Edi;
+    return (ULONG)PmTrapFrame;
 }
 
 VOID




More information about the Ros-diffs mailing list