Changeset 64773 in vbox
- Timestamp:
- Dec 1, 2016 3:17:33 PM (8 years ago)
- File:
-
- 1 edited
-
trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
r64771 r64773 307 307 static FNSVMEXITHANDLER hmR0SvmExitXcptDB; 308 308 static FNSVMEXITHANDLER hmR0SvmExitXcptAC; 309 static FNSVMEXITHANDLER hmR0SvmExitXcptBP; 309 310 /** @} */ 310 311 … … 3572 3573 return hmR0SvmExitXcptAC(pVCpu, pCtx, pSvmTransient); 3573 3574 3575 case SVM_EXIT_EXCEPTION_3: /* X86_XCPT_BP */ 3576 return hmR0SvmExitXcptBP(pVCpu, pCtx, pSvmTransient); 3577 3574 3578 case SVM_EXIT_MONITOR: 3575 3579 return hmR0SvmExitMonitor(pVCpu, pCtx, pSvmTransient); … … 3675 3679 /* SVM_EXIT_EXCEPTION_1: */ /* X86_XCPT_DB - Handled above. */ 3676 3680 case SVM_EXIT_EXCEPTION_2: /* X86_XCPT_NMI */ 3677 case SVM_EXIT_EXCEPTION_3: /* X86_XCPT_BP*/3681 /* case SVM_EXIT_EXCEPTION_3: */ /* X86_XCPT_BP - Handled above. */ 3678 3682 case SVM_EXIT_EXCEPTION_4: /* X86_XCPT_OF */ 3679 3683 case SVM_EXIT_EXCEPTION_5: /* X86_XCPT_BR */ … … 3708 3712 case X86_XCPT_DE: 3709 3713 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitGuestDE); 3710 break;3711 3712 case X86_XCPT_BP:3713 /** Saves the wrong EIP on the stack (pointing to the int3) instead of the3714 * next instruction. */3715 /** @todo Investigate this later. */3716 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitGuestBP);3717 3714 break; 3718 3715 … … 5643 5640 } 5644 5641 5642 5643 /** 5644 * \#VMEXIT handler for breakpoint exceptions (SVM_EXIT_EXCEPTION_3). 5645 * Conditional \#VMEXIT. 5646 */ 5647 HMSVM_EXIT_DECL hmR0SvmExitXcptBP(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient) 5648 { 5649 HMSVM_VALIDATE_EXIT_HANDLER_PARAMS(); 5650 5651 HMSVM_CHECK_EXIT_DUE_TO_EVENT_DELIVERY(); 5652 5653 int rc = DBGFRZTrap03Handler(pVCpu->CTX_SUFF(pVM), pVCpu, CPUMCTX2CORE(pCtx)); 5654 if (rc == VINF_EM_RAW_GUEST_TRAP) 5655 { 5656 SVMEVENT Event; 5657 Event.u = 0; 5658 Event.n.u1Valid = 1; 5659 Event.n.u3Type = SVM_EVENT_EXCEPTION; 5660 Event.n.u8Vector = X86_XCPT_BP; 5661 Event.n.u1ErrorCodeValid = 0; 5662 hmR0SvmSetPendingEvent(pVCpu, &Event, 0 /* GCPtrFaultAddress */); 5663 } 5664 5665 Assert(rc == VINF_SUCCESS || rc == VINF_EM_RAW_GUEST_TRAP || rc == VINF_EM_DBG_BREAKPOINT); 5666 return rc; 5667 } 5668 5645 5669 /** @} */ 5646 5670
Note:
See TracChangeset
for help on using the changeset viewer.

