From: Timo Kreuzer Date: Thu, 16 Sep 2010 19:21:20 +0000 (+0000) Subject: [NTOS] X-Git-Tag: ReactOS-0.3.12~30 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=30fad2a263a48f290e011d489a2db6d1e929651f [NTOS] - More fixes to VDM PUSH/POPF code: - When doing a 32bit push, don't store the flags 2 bytes off - Recalculate HardwareEsp, by substracting the segment part, instead of truncating the flat pointer to 16 bit. svn path=/trunk/; revision=48781 --- diff --git a/reactos/ntoskrnl/ke/i386/v86vdm.c b/reactos/ntoskrnl/ke/i386/v86vdm.c index bcb4b16f520..503f4138423 100644 --- a/reactos/ntoskrnl/ke/i386/v86vdm.c +++ b/reactos/ntoskrnl/ke/i386/v86vdm.c @@ -76,17 +76,17 @@ KiVdmOpcodePUSHF(IN PKTRAP_FRAME TrapFrame, { /* Save EFlags */ Esp -= 4; - *(PULONG)(Esp - 2) = V86EFlags; + *(PULONG)Esp = V86EFlags; } else { - Esp -= 2; /* Save EFLags */ + Esp -= 2; *(PUSHORT)Esp = (USHORT)V86EFlags; } /* Set new ESP and EIP */ - TrapFrame->HardwareEsp = (USHORT)Esp; + TrapFrame->HardwareEsp = Esp - (TrapFrame->HardwareSegSs << 4); TrapFrame->Eip += KiVdmGetInstructionSize(Flags); /* We're done */ @@ -115,12 +115,10 @@ KiVdmOpcodePOPF(IN PKTRAP_FRAME TrapFrame, /* Read EFlags */ EFlags = *(PUSHORT)Esp; Esp += 2; - /* Read correct flags and use correct stack address */ - EFlags &= 0xFFFF; } /* Set new ESP */ - TrapFrame->HardwareEsp = (USHORT)Esp; + TrapFrame->HardwareEsp = Esp - (TrapFrame->HardwareSegSs << 4); /* Mask out IOPL from the flags */ EFlags &= ~EFLAGS_IOPL;