diff --git a/src/VBox/VMM/VMMR0/HMVMXR0.cpp b/src/VBox/VMM/VMMR0/HMVMXR0.cpp
index 976873e8..6936a792 100644
|
a
|
b
|
static VBOXSTRICTRC hmR0VmxRunGuestCodeNormal(PVM pVM, PVMCPU pVCpu, PCPUMCTX pC
|
| 9290 | 9290 | Assert(!HMR0SuspendPending()); |
| 9291 | 9291 | HMVMX_ASSERT_CPU_SAFE(); |
| 9292 | 9292 | |
| | 9293 | #if HC_ARCH_BITS == 64 |
| | 9294 | uint64_t tCheck = 0; |
| | 9295 | int trc = VMXReadVmcs64(VMX_VMCS_GUEST_PENDING_DEBUG_EXCEPTIONS, &tCheck); |
| | 9296 | #else |
| | 9297 | uint32_t tCheck = 0; |
| | 9298 | int trc = VMXReadVmcs32(VMX_VMCS_GUEST_PENDING_DEBUG_EXCEPTIONS, &tCheck); |
| | 9299 | #endif |
| | 9300 | AssertRCBreak(trc); |
| | 9301 | if((tCheck & VMX_VMCS_GUEST_DEBUG_EXCEPTIONS_BS) && !pVCpu->hm.s.Event.fPending) { |
| | 9302 | int rc = hmR0VmxReadExitIntInfoVmcs(&VmxTransient); |
| | 9303 | rc |= hmR0VmxReadExitInstrLenVmcs(&VmxTransient); |
| | 9304 | rc |= hmR0VmxReadExitIntErrorCodeVmcs(&VmxTransient); |
| | 9305 | AssertRCReturn(rc, rc); |
| | 9306 | uint32_t u32IntInfo = X86_XCPT_DB | VMX_EXIT_INTERRUPTION_INFO_VALID; |
| | 9307 | u32IntInfo |= (VMX_EXIT_INTERRUPTION_INFO_TYPE_HW_XCPT << VMX_EXIT_INTERRUPTION_INFO_TYPE_SHIFT); |
| | 9308 | hmR0VmxSetPendingEvent(pVCpu, u32IntInfo, VmxTransient.cbInstr, 0, 0); |
| | 9309 | #if HC_ARCH_BITS == 64 |
| | 9310 | trc = VMXWriteVmcs64(VMX_VMCS_GUEST_PENDING_DEBUG_EXCEPTIONS, tCheck &= ~VMX_VMCS_GUEST_DEBUG_EXCEPTIONS_BS); |
| | 9311 | #else |
| | 9312 | trc = VMXWriteVmcs32(VMX_VMCS_GUEST_PENDING_DEBUG_EXCEPTIONS, tCheck &= ~VMX_VMCS_GUEST_DEBUG_EXCEPTIONS_BS); |
| | 9313 | #endif |
| | 9314 | AssertRCBreak(trc); |
| | 9315 | } |
| | 9316 | |
| 9293 | 9317 | /* Preparatory work for running guest code, this may force us to return |
| 9294 | 9318 | to ring-3. This bugger disables interrupts on VINF_SUCCESS! */ |
| 9295 | 9319 | STAM_PROFILE_ADV_START(&pVCpu->hm.s.StatEntry, x); |