Interface change between STM and VM/PE

When the VM/PE is started in 32 bit mode, the upper half the 64 bit
registers (RAX, RBX,,) are lost.

64-bit addresses are now split between two registers.

Signed-off-by: Eugene D Myers <cedarhouse@comcast.net>
This commit is contained in:
Eugene D Myers 2020-07-17 13:06:02 -04:00
parent 6d2d68bc37
commit c564234712
1 changed files with 4 additions and 4 deletions

View File

@ -109,11 +109,11 @@ void LaunchPeVm(UINT32 PeType, UINT32 CpuIndex)
// so that the PE module will access to those addresses
mGuestContextCommonSmm[PeType].GuestContextPerCpu[0].Register.Rbx =
(UINTN)PeVmData[PeType].UserModule.SharedPage;
(UINT64)PeVmData[PeType].UserModule.SharedPage & 0xFFFFFFFF;
mGuestContextCommonSmm[PeType].GuestContextPerCpu[0].Register.Rcx =
(UINT64)PeVmData[PeType].UserModule.Segment;
(UINT64)PeVmData[PeType].UserModule.SharedPage >> 32;
mGuestContextCommonSmm[PeType].GuestContextPerCpu[0].Register.Rdx =
(UINTN) PeVmData[PeType].UserModule.SharedStmPage;
(UINT32) PeVmData[PeType].UserModule.SharedStmPage;
// check and make aure that the heap is cleared as requested
@ -207,7 +207,7 @@ void LaunchPeVm(UINT32 PeType, UINT32 CpuIndex)
VmRead32(VMCS_32_CONTROL_PIN_BASED_VM_EXECUTION_INDEX)));
DEBUG((EFI_D_INFO,
"%ld LaunchPeVm- guest parameter regs:\n RBX: %p (shared page)\n RCX: %p (region list)\n RDX: %p (shared STM)\n",
"%ld LaunchPeVm- guest parameter regs:\n RBX: %p (shared page - low)\n RCX: %p (shared page - high)\n RDX: %p (shared STM)\n",
CpuIndex,
mGuestContextCommonSmm[PeType].GuestContextPerCpu[0].Register.Rbx,
mGuestContextCommonSmm[PeType].GuestContextPerCpu[0].Register.Rcx,