VirtualBox

Changeset 14943 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Dec 3, 2008 1:58:36 PM (16 years ago)
Author:
vboxsync
Message:

Disassemble ins/outs manually to deal with segment prefixes.

Location:
trunk/src/VBox/VMM/VMMR0
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/HWSVMR0.cpp

    r14875 r14943  
    18411841        if (IoExitInfo.n.u1STR)
    18421842        {
     1843            uint32_t cbSize;
     1844
    18431845            /* ins/outs */
    1844             uint32_t prefix = 0;
    1845             if (IoExitInfo.n.u1REP)
    1846                 prefix |= PREFIX_REP;
    1847 
    18481846            if (IoExitInfo.n.u1Type == 0)
    18491847            {
     1848                STAM_COUNTER_INC(&pVCpu->hwaccm.s.StatExitIOStringWrite);
    18501849                Log2(("IOMInterpretOUTSEx %RGv %x size=%d\n", (RTGCPTR)pCtx->rip, IoExitInfo.n.u16Port, uIOSize));
    1851                 STAM_COUNTER_INC(&pVCpu->hwaccm.s.StatExitIOStringWrite);
    1852                 rc = IOMInterpretOUTSEx(pVM, CPUMCTX2CORE(pCtx), IoExitInfo.n.u16Port, prefix, uIOSize);
    18531850            }
    18541851            else
     
    18561853                Log2(("IOMInterpretINSEx  %RGv %x size=%d\n", (RTGCPTR)pCtx->rip, IoExitInfo.n.u16Port, uIOSize));
    18571854                STAM_COUNTER_INC(&pVCpu->hwaccm.s.StatExitIOStringRead);
    1858                 rc = IOMInterpretINSEx(pVM, CPUMCTX2CORE(pCtx), IoExitInfo.n.u16Port, prefix, uIOSize);
    18591855            }
     1856
     1857            /* Disassemble manually, because we don't have any information about segment prefixes. */
     1858            rc = EMInterpretInstruction(pVM, CPUMCTX2CORE(pCtx), 0, &cbSize);
    18601859        }
    18611860        else
  • trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp

    r14897 r14943  
    27712771        }
    27722772
    2773         uint32_t cbSize = g_aIOSize[uIOWidth];
    2774 
    27752773        if (VMX_EXIT_QUALIFICATION_IO_STRING(exitQualification))
    27762774        {
     2775            uint32_t cbSize;
     2776
    27772777            /* ins/outs */
    2778             uint32_t prefix = 0;
    2779             if (VMX_EXIT_QUALIFICATION_IO_REP(exitQualification))
    2780                 prefix |= PREFIX_REP;
    2781 
    27822778            if (fIOWrite)
    27832779            {
    2784                 Log2(("IOMInterpretOUTSEx %RGv %x size=%d\n", (RTGCPTR)pCtx->rip, uPort, cbSize));
    27852780                STAM_COUNTER_INC(&pVCpu->hwaccm.s.StatExitIOStringWrite);
    2786                 rc = IOMInterpretOUTSEx(pVM, CPUMCTX2CORE(pCtx), uPort, prefix, cbSize);
     2781                Log2(("IOMInterpretOUTSEx %RGv %x size=%d\n", (RTGCPTR)pCtx->rip, uPort, g_aIOSize[uIOWidth]));
    27872782            }
    27882783            else
    27892784            {
    2790                 Log2(("IOMInterpretINSEx  %RGv %x size=%d\n", (RTGCPTR)pCtx->rip, uPort, cbSize));
     2785                Log2(("IOMInterpretINSEx  %RGv %x size=%d\n", (RTGCPTR)pCtx->rip, uPort, g_aIOSize[uIOWidth]));
    27912786                STAM_COUNTER_INC(&pVCpu->hwaccm.s.StatExitIOStringRead);
    2792                 rc = IOMInterpretINSEx(pVM, CPUMCTX2CORE(pCtx), uPort, prefix, cbSize);
    27932787            }
     2788
     2789            /* Disassemble manually, because we don't have any information about segment prefixes. */
     2790            rc = EMInterpretInstruction(pVM, CPUMCTX2CORE(pCtx), 0, &cbSize);
    27942791        }
    27952792        else
    27962793        {
    27972794            /* normal in/out */
     2795            uint32_t cbSize  = g_aIOSize[uIOWidth];
    27982796            uint32_t uAndVal = g_aIOOpAnd[uIOWidth];
    27992797
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