preserve original VMCBPTR after SVM VMLOAD/VMSAVE instructions (#128)
Co-authored-by: Stanislav Shwartsman <sshwarts@users.sourceforge.net>
This commit is contained in:
parent
154896d923
commit
f85c633d3d
@ -1077,6 +1077,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::VMLOAD(bxInstruction_c *i)
|
||||
BX_ERROR(("VMLOAD: invalid or not page aligned VMCB physical address !"));
|
||||
exception(BX_GP_EXCEPTION, 0);
|
||||
}
|
||||
bx_phy_address vmcbPtr = BX_CPU_THIS_PTR vmcbptr;
|
||||
set_VMCBPTR(pAddr);
|
||||
|
||||
BX_DEBUG(("VMLOAD VMCB ptr: 0x" FMT_ADDRX64, BX_CPU_THIS_PTR vmcbptr));
|
||||
@ -1102,6 +1103,8 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::VMLOAD(bxInstruction_c *i)
|
||||
BX_CPU_THIS_PTR msr.sysenter_cs_msr = vmcb_read64(SVM_GUEST_SYSENTER_CS_MSR);
|
||||
BX_CPU_THIS_PTR msr.sysenter_eip_msr = CanonicalizeAddress(vmcb_read64(SVM_GUEST_SYSENTER_EIP_MSR));
|
||||
BX_CPU_THIS_PTR msr.sysenter_esp_msr = CanonicalizeAddress(vmcb_read64(SVM_GUEST_SYSENTER_ESP_MSR));
|
||||
|
||||
set_VMCBPTR(vmcbPtr);
|
||||
#endif
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -1127,6 +1130,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::VMSAVE(bxInstruction_c *i)
|
||||
BX_ERROR(("VMSAVE: invalid or not page aligned VMCB physical address !"));
|
||||
exception(BX_GP_EXCEPTION, 0);
|
||||
}
|
||||
bx_phy_address vmcbPtr = BX_CPU_THIS_PTR vmcbptr;
|
||||
set_VMCBPTR(pAddr);
|
||||
|
||||
BX_DEBUG(("VMSAVE VMCB ptr: 0x" FMT_ADDRX64, BX_CPU_THIS_PTR vmcbptr));
|
||||
@ -1145,6 +1149,8 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::VMSAVE(bxInstruction_c *i)
|
||||
vmcb_write64(SVM_GUEST_SYSENTER_CS_MSR, BX_CPU_THIS_PTR msr.sysenter_cs_msr);
|
||||
vmcb_write64(SVM_GUEST_SYSENTER_ESP_MSR, BX_CPU_THIS_PTR msr.sysenter_esp_msr);
|
||||
vmcb_write64(SVM_GUEST_SYSENTER_EIP_MSR, BX_CPU_THIS_PTR msr.sysenter_eip_msr);
|
||||
|
||||
set_VMCBPTR(vmcbPtr);
|
||||
#endif
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
|
Loading…
x
Reference in New Issue
Block a user