mirror of
https://github.com/reactos/reactos.git
synced 2024-10-05 00:43:21 +00:00
[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
This commit is contained in:
parent
cdebe5691a
commit
30fad2a263
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue