VirtualBox

Changeset 68906 in vbox


Ignore:
Timestamp:
Sep 28, 2017 12:24:51 PM (7 years ago)
Author:
vboxsync
Message:

VMM/IEM/IEMAllCImplSvmInstr.cpp.h: Fix swapped DR6, DR7 on SVM #VMEXIT handler.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllCImplSvmInstr.cpp.h

    r68784 r68906  
    6060DECLINLINE(VBOXSTRICTRC) iemSvmWorldSwitch(PVMCPU pVCpu, PCPUMCTX pCtx)
    6161{
    62     /* Flush the TLB with new CR3. */
     62    /*
     63     * Flush the TLB with new CR3. This is required in case the PGM mode change
     64     * below doesn't actually change anything.
     65     */
    6366    PGMFlushTLB(pVCpu, pCtx->cr3, true);
    6467
     
    137140        pVmcbNstGstState->u64RSP        = pCtx->rsp;
    138141        pVmcbNstGstState->u64RAX        = pCtx->rax;
    139         pVmcbNstGstState->u64DR7        = pCtx->dr[6];
    140         pVmcbNstGstState->u64DR6        = pCtx->dr[7];
     142        pVmcbNstGstState->u64DR7        = pCtx->dr[7];
     143        pVmcbNstGstState->u64DR6        = pCtx->dr[6];
    141144        pVmcbNstGstState->u8CPL         = pCtx->ss.Attr.n.u2Dpl;   /* See comment in CPUMGetGuestCPL(). */
    142145        Assert(CPUMGetGuestCPL(pVCpu) == pCtx->ss.Attr.n.u2Dpl);
     
    533536        pCtx->idtr.cbIdt = pVmcbNstGst->IDTR.u32Limit;
    534537        pCtx->idtr.pIdt  = pVmcbNstGst->IDTR.u64Base;
    535         pCtx->cr0        = pVmcbNstGst->u64CR0;   /** @todo What about informing PGM about CR0.WP? */
    536         pCtx->cr4        = pVmcbNstGst->u64CR4;
     538        CPUMSetGuestCR0(pVCpu, pVmcbNstGst->u64CR0);
     539        CPUMSetGuestCR4(pVCpu, pVmcbNstGst->u64CR4);
    537540        pCtx->cr3        = pVmcbNstGst->u64CR3;
    538541        pCtx->cr2        = pVmcbNstGst->u64CR2;
     
    624627             *        below. */
    625628            LogFlow(("iemSvmVmrun: Injecting event: %04x:%08RX64 uVector=%#x enmType=%d uErrorCode=%u cr2=%#RX64\n",
    626                      pCtx->cs.Sel, pCtx->rip, uVector, enmType,uErrorCode, pCtx->cr2));
     629                     pCtx->cs.Sel, pCtx->rip, uVector, enmType, uErrorCode, pCtx->cr2));
    627630            rcStrict = IEMInjectTrap(pVCpu, uVector, enmType, uErrorCode, pCtx->cr2, 0 /* cbInstr */);
    628631        }
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette