Changeset 46004 in vbox
- Timestamp:
- May 13, 2013 9:20:43 AM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 85665
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/hm_vmx.h
r45964 r46004 51 51 # define VMX_VMCS_GUEST_GDTR_BASE_CACHE_IDX 8 52 52 # define VMX_VMCS_GUEST_IDTR_BASE_CACHE_IDX 9 53 # define VMX_VMCS_GUEST_DR7_CACHE_IDX 10 54 # define VMX_VMCS_GUEST_RSP_CACHE_IDX 11 55 # define VMX_VMCS_GUEST_RIP_CACHE_IDX 12 56 # define VMX_VMCS_GUEST_SYSENTER_ESP_CACHE_IDX 13 57 # define VMX_VMCS_GUEST_SYSENTER_EIP_CACHE_IDX 14 58 # define VMX_VMCS_RO_EXIT_QUALIFICATION_CACHE_IDX 15 53 # define VMX_VMCS_GUEST_RSP_CACHE_IDX 10 54 # define VMX_VMCS_GUEST_RIP_CACHE_IDX 11 55 # define VMX_VMCS_GUEST_SYSENTER_ESP_CACHE_IDX 12 56 # define VMX_VMCS_GUEST_SYSENTER_EIP_CACHE_IDX 13 57 # define VMX_VMCS_RO_EXIT_QUALIFICATION_CACHE_IDX 14 59 58 # define VMX_VMCS_MAX_CACHE_IDX (VMX_VMCS_RO_EXIT_QUALIFICATION_CACHE_IDX + 1) 60 # define VMX_VMCS_GUEST_CR3_CACHE_IDX 1 659 # define VMX_VMCS_GUEST_CR3_CACHE_IDX 15 61 60 # define VMX_VMCS_MAX_NESTED_PAGING_CACHE_IDX (VMX_VMCS_GUEST_CR3_CACHE_IDX + 1) 62 61 #else /* VBOX_WITH_OLD_VTX_CODE */ -
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r45978 r46004 3164 3164 AssertRCReturn(rc, rc); 3165 3165 3166 /* The guest's view of its DR7 is unblemished. */3167 rc = VMXWriteVmcs GstN(VMX_VMCS_GUEST_DR7,pMixedCtx->dr[7]);3166 /* The guest's view of its DR7 is unblemished. Use 32-bit write as upper 32-bits MBZ as asserted above. */ 3167 rc = VMXWriteVmcs32(VMX_VMCS_GUEST_DR7, (uint32_t)pMixedCtx->dr[7]); 3168 3168 AssertRCReturn(rc, rc); 3169 3169 … … 4036 4036 case VMX_VMCS_GUEST_RIP: 4037 4037 case VMX_VMCS_GUEST_RSP: 4038 case VMX_VMCS_GUEST_DR7:4039 4038 case VMX_VMCS_GUEST_SYSENTER_EIP: 4040 4039 case VMX_VMCS_GUEST_SYSENTER_ESP: … … 4266 4265 VMXLOCAL_INIT_READ_CACHE_FIELD(pCache, VMX_VMCS_GUEST_GDTR_BASE); 4267 4266 VMXLOCAL_INIT_READ_CACHE_FIELD(pCache, VMX_VMCS_GUEST_IDTR_BASE); 4268 VMXLOCAL_INIT_READ_CACHE_FIELD(pCache, VMX_VMCS_GUEST_DR7);4269 4267 VMXLOCAL_INIT_READ_CACHE_FIELD(pCache, VMX_VMCS_GUEST_RSP); 4270 4268 VMXLOCAL_INIT_READ_CACHE_FIELD(pCache, VMX_VMCS_GUEST_RIP); … … 4383 4381 case VMX_VMCS_GUEST_GDTR_BASE: 4384 4382 case VMX_VMCS_GUEST_IDTR_BASE: 4385 case VMX_VMCS_GUEST_DR7:4386 4383 case VMX_VMCS_GUEST_RSP: 4387 4384 case VMX_VMCS_GUEST_RIP: … … 5384 5381 if (!(pVCpu->hm.s.vmx.fUpdatedGuestState & HMVMX_UPDATED_GUEST_DEBUG)) 5385 5382 { 5386 RTGCUINTREG uVal; 5387 rc = VMXReadVmcsGstN(VMX_VMCS_GUEST_DR7, &uVal); AssertRCReturn(rc, rc); 5388 pMixedCtx->dr[7] = uVal; 5383 /* Upper 32-bits are always zero. See Intel spec. 2.7.3 "Loading and Storing Debug Registers". */ 5384 uint32_t u32Val; 5385 rc = VMXReadVmcs32(VMX_VMCS_GUEST_DR7, &u32Val); AssertRCReturn(rc, rc); 5386 pMixedCtx->dr[7] = u32Val; 5389 5387 5390 5388 pVCpu->hm.s.vmx.fUpdatedGuestState |= HMVMX_UPDATED_GUEST_DEBUG; … … 6620 6618 * interrupts and handle returning to ring-3 afterwards, but requires very careful state restoration. 6621 6619 */ 6622 /** @todo Rework event evaluation and injection to be complete separate. */6620 /** @todo Rework event evaluation and injection to be completely separate. */ 6623 6621 if (TRPMHasTrap(pVCpu)) 6624 6622 hmR0VmxTRPMTrapToPendingEvent(pVCpu); … … 8615 8613 8616 8614 /* Paranoia. */ 8617 pMixedCtx->dr[7] &= 0xffffffff; /* upper 32 bits reserved*/8615 pMixedCtx->dr[7] &= UINT32_C(0xffffffff); /* upper 32 bits MBZ. */ 8618 8616 pMixedCtx->dr[7] &= ~(RT_BIT(11) | RT_BIT(12) | RT_BIT(14) | RT_BIT(15)); /* must be zero */ 8619 8617 pMixedCtx->dr[7] |= 0x400; /* must be one */ 8620 8618 8621 rc |= VMXWriteVmcs GstN(VMX_VMCS_GUEST_DR7,pMixedCtx->dr[7]);8619 rc |= VMXWriteVmcs32(VMX_VMCS_GUEST_DR7, (uint32_t)pMixedCtx->dr[7]); 8622 8620 AssertRCReturn(rc,rc); 8623 8621
Note:
See TracChangeset
for help on using the changeset viewer.