VirtualBox

Changeset 76695 in vbox


Ignore:
Timestamp:
Jan 8, 2019 8:24:14 AM (6 years ago)
Author:
vboxsync
Message:

VMM/CPUM: Nested VMX: bugref:9180 Enhanced VMCS dumping.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/CPUM.cpp

    r76685 r76695  
    33433343
    33443344/**
    3345  * Displays a VMX VMCS.
     3345 * Displays a virtual-VMCS.
    33463346 *
    33473347 * @param   pHlp        The info helper functions.
    3348  * @param   pVmcs       Pointer to a VMX VMCS.
     3348 * @param   pVmcs       Pointer to a virtual VMCS.
    33493349 * @param   pszPrefix   Caller specified string prefix.
    33503350 */
     
    33593359        (a_pHlp)->pfnPrintf((a_pHlp), "  %s%-4s                       = {base=%016RX64}\n", \
    33603360                            (a_pszPrefix), (a_SegName), (a_pVmcs)->u64Host##a_Seg##Base.u); \
     3361    } while (0)
     3362
     3363#define CPUMVMX_DUMP_HOST_FS_GS_TR(a_pHlp, a_pVmcs, a_Seg, a_SegName, a_pszPrefix) \
     3364    do { \
     3365        (a_pHlp)->pfnPrintf((a_pHlp), "  %s%-4s                       = {%04x base=%016RX64}\n", \
     3366                            (a_pszPrefix), (a_SegName), (a_pVmcs)->Host##a_Seg, (a_pVmcs)->u64Host##a_Seg##Base.u); \
    33613367    } while (0)
    33623368
     
    34053411        pHlp->pfnPrintf(pHlp, "  %sVM-entry MSR load count    = %#RX32\n",   pszPrefix, pVmcs->u32EntryMsrLoadCount);
    34063412        pHlp->pfnPrintf(pHlp, "  %sVM-Entry interruption info = %#RX32\n",   pszPrefix, pVmcs->u32EntryIntInfo);
     3413        {
     3414            uint32_t const fInfo = pVmcs->u32EntryIntInfo;
     3415            uint8_t  const uType = VMX_ENTRY_INT_INFO_TYPE(fInfo);
     3416            pHlp->pfnPrintf(pHlp, "    %sValid                      = %RTbool\n", pszPrefix, VMX_ENTRY_INT_INFO_IS_VALID(fInfo));
     3417            pHlp->pfnPrintf(pHlp, "    %sType                       = %#x\n",     pszPrefix, uType, HMVmxGetEntryIntInfoTypeDesc(uType));
     3418            pHlp->pfnPrintf(pHlp, "    %sVector                     = %#x\n",     pszPrefix, VMX_ENTRY_INT_INFO_VECTOR(fInfo));
     3419            pHlp->pfnPrintf(pHlp, "    %sNMI-unblocking-IRET        = %RTbool\n", pszPrefix, VMX_ENTRY_INT_INFO_IS_NMI_UNBLOCK_IRET(fInfo));
     3420            pHlp->pfnPrintf(pHlp, "    %sError-code valid           = %RTbool\n", pszPrefix, VMX_ENTRY_INT_INFO_IS_ERROR_CODE_VALID(fInfo));
     3421        }
    34073422        pHlp->pfnPrintf(pHlp, "  %sVM-Entry xcpt error-code   = %#RX32\n",   pszPrefix, pVmcs->u32EntryXcptErrCode);
    3408         pHlp->pfnPrintf(pHlp, "  %sVM-Entry instruction len   = %#RX32\n",  pszPrefix, pVmcs->u32EntryInstrLen);
     3423        pHlp->pfnPrintf(pHlp, "  %sVM-Entry instruction len   = %u bytes\n", pszPrefix, pVmcs->u32EntryInstrLen);
    34093424        pHlp->pfnPrintf(pHlp, "  %sTPR threshold              = %#RX32\n",   pszPrefix, pVmcs->u32TprThreshold);
    34103425        pHlp->pfnPrintf(pHlp, "  %sPLE gap                    = %#RX32\n",   pszPrefix, pVmcs->u32PleGap);
     
    35063521
    35073522        /* 16-bit. */
    3508         pHlp->pfnPrintf(pHlp, "  %scs                         = %#RX32\n",   pszPrefix, pVmcs->HostCs);
    3509         pHlp->pfnPrintf(pHlp, "  %sss                         = %#RX32\n",   pszPrefix, pVmcs->HostSs);
    3510         pHlp->pfnPrintf(pHlp, "  %sds                         = %#RX32\n",   pszPrefix, pVmcs->HostDs);
    3511         pHlp->pfnPrintf(pHlp, "  %ses                         = %#RX32\n",   pszPrefix, pVmcs->HostEs);
    3512         pHlp->pfnPrintf(pHlp, "  %sfs                         = %#RX32\n",   pszPrefix, pVmcs->HostFs);
    3513         pHlp->pfnPrintf(pHlp, "  %sgs                         = %#RX32\n",   pszPrefix, pVmcs->HostGs);
    3514         pHlp->pfnPrintf(pHlp, "  %str                         = %#RX32\n",   pszPrefix, pVmcs->HostTr);
     3523        pHlp->pfnPrintf(pHlp, "  %scs                         = %#RX16\n",   pszPrefix, pVmcs->HostCs);
     3524        pHlp->pfnPrintf(pHlp, "  %sss                         = %#RX16\n",   pszPrefix, pVmcs->HostSs);
     3525        pHlp->pfnPrintf(pHlp, "  %sds                         = %#RX16\n",   pszPrefix, pVmcs->HostDs);
     3526        pHlp->pfnPrintf(pHlp, "  %ses                         = %#RX16\n",   pszPrefix, pVmcs->HostEs);
     3527        CPUMVMX_DUMP_HOST_FS_GS_TR(pHlp, pVmcs, Fs, "fs", pszPrefix);
     3528        CPUMVMX_DUMP_HOST_FS_GS_TR(pHlp, pVmcs, Gs, "gs", pszPrefix);
     3529        CPUMVMX_DUMP_HOST_FS_GS_TR(pHlp, pVmcs, Tr, "tr", pszPrefix);
    35153530        CPUMVMX_DUMP_HOST_XDTR(pHlp,   pVmcs, Gdtr, "gdtr", pszPrefix);
    35163531        CPUMVMX_DUMP_HOST_XDTR(pHlp,   pVmcs, Idtr, "idtr", pszPrefix);
     
    35253540
    35263541        /* Natural width. */
    3527         pHlp->pfnPrintf(pHlp, "  %sEFER                       = %#RX64\n",   pszPrefix, pVmcs->u64HostEferMsr.u);
    3528         pHlp->pfnPrintf(pHlp, "  %sEFER                       = %#RX64\n",   pszPrefix, pVmcs->u64HostEferMsr.u);
    35293542        pHlp->pfnPrintf(pHlp, "  %sCR0                        = %#RX64\n",   pszPrefix, pVmcs->u64HostCr0.u);
    35303543        pHlp->pfnPrintf(pHlp, "  %sCR3                        = %#RX64\n",   pszPrefix, pVmcs->u64HostCr3.u);
     
    35413554
    35423555        /* 16-bit (none currently). */
     3556
    35433557        /* 32-bit. */
     3558        pHlp->pfnPrintf(pHlp, "  %sExit reason                = %#RX32\n",   pszPrefix, pVmcs->u32RoExitReason);
     3559        pHlp->pfnPrintf(pHlp, "  %sExit qualification         = %#RX64\n",   pszPrefix, pVmcs->u64RoExitQual.u);
    35443560        pHlp->pfnPrintf(pHlp, "  %sVM-instruction error       = %#RX32\n",   pszPrefix, pVmcs->u32RoVmInstrError);
    3545         pHlp->pfnPrintf(pHlp, "  %sExit reason                = %#RX32\n",   pszPrefix, pVmcs->u32RoExitReason);
    35463561        pHlp->pfnPrintf(pHlp, "  %sVM-exit intr info          = %#RX32\n",   pszPrefix, pVmcs->u32RoExitIntInfo);
     3562        {
     3563            uint32_t const fInfo = pVmcs->u32RoExitIntInfo;
     3564            uint8_t  const uType = VMX_EXIT_INT_INFO_TYPE(fInfo);
     3565            pHlp->pfnPrintf(pHlp, "    %sValid                      = %RTbool\n", pszPrefix, VMX_EXIT_INT_INFO_IS_VALID(fInfo));
     3566            pHlp->pfnPrintf(pHlp, "    %sType                       = %#x\n",     pszPrefix, uType, HMVmxGetExitIntInfoTypeDesc(uType));
     3567            pHlp->pfnPrintf(pHlp, "    %sVector                     = %#x\n",     pszPrefix, VMX_EXIT_INT_INFO_VECTOR(fInfo));
     3568            pHlp->pfnPrintf(pHlp, "    %sNMI-unblocking-IRET        = %RTbool\n", pszPrefix, VMX_EXIT_INT_INFO_IS_NMI_UNBLOCK_IRET(fInfo));
     3569            pHlp->pfnPrintf(pHlp, "    %sError-code valid           = %RTbool\n", pszPrefix, VMX_EXIT_INT_INFO_IS_ERROR_CODE_VALID(fInfo));
     3570        }
    35473571        pHlp->pfnPrintf(pHlp, "  %sVM-exit intr error-code    = %#RX32\n",   pszPrefix, pVmcs->u32RoExitIntErrCode);
    35483572        pHlp->pfnPrintf(pHlp, "  %sIDT-vectoring info         = %#RX32\n",   pszPrefix, pVmcs->u32RoIdtVectoringInfo);
     3573        {
     3574            uint32_t const fInfo = pVmcs->u32RoIdtVectoringInfo;
     3575            uint8_t  const uType = VMX_IDT_VECTORING_INFO_TYPE(fInfo);
     3576            pHlp->pfnPrintf(pHlp, "    %sValid                      = %RTbool\n", pszPrefix, VMX_IDT_VECTORING_INFO_IS_VALID(fInfo));
     3577            pHlp->pfnPrintf(pHlp, "    %sType                       = %#x\n",     pszPrefix, uType, HMVmxGetIdtVectoringInfoTypeDesc(uType));
     3578            pHlp->pfnPrintf(pHlp, "    %sVector                     = %#x\n",     pszPrefix, VMX_IDT_VECTORING_INFO_VECTOR(fInfo));
     3579            pHlp->pfnPrintf(pHlp, "    %sError-code valid           = %RTbool\n", pszPrefix, VMX_IDT_VECTORING_INFO_IS_ERROR_CODE_VALID(fInfo));
     3580        }
    35493581        pHlp->pfnPrintf(pHlp, "  %sIDT-vectoring error-code   = %#RX32\n",   pszPrefix, pVmcs->u32RoIdtVectoringErrCode);
    35503582        pHlp->pfnPrintf(pHlp, "  %sVM-exit instruction length = %u bytes\n", pszPrefix, pVmcs->u32RoExitInstrLen);
    35513583        pHlp->pfnPrintf(pHlp, "  %sVM-exit instruction info   = %#RX64\n",   pszPrefix, pVmcs->u32RoExitInstrInfo);
     3584
    35523585        /* 64-bit. */
    35533586        pHlp->pfnPrintf(pHlp, "  %sGuest-physical addr        = %#RX64\n",   pszPrefix, pVmcs->u64RoGuestPhysAddr.u);
     3587
    35543588        /* Natural width. */
    3555         pHlp->pfnPrintf(pHlp, "  %sExit qualification         = %#RX64\n",   pszPrefix, pVmcs->u64RoExitQual.u);
    35563589        pHlp->pfnPrintf(pHlp, "  %sI/O RCX                    = %#RX64\n",   pszPrefix, pVmcs->u64RoIoRcx.u);
    35573590        pHlp->pfnPrintf(pHlp, "  %sI/O RSI                    = %#RX64\n",   pszPrefix, pVmcs->u64RoIoRsi.u);
     
    35623595
    35633596#undef CPUMVMX_DUMP_HOST_XDTR
     3597#undef CPUMVMX_DUMP_HOST_FS_GS_TR
    35643598#undef CPUMVMX_DUMP_GUEST_SEGREG
    35653599#undef CPUMVMX_DUMP_GUEST_XDTR
     
    36793713        pHlp->pfnPrintf(pHlp, "  uVmentryTick               = %RX64\n",     pCtx->hwvirt.vmx.uVmentryTick);
    36803714        pHlp->pfnPrintf(pHlp, "  offVirtApicWrite           = %#RX16\n",    pCtx->hwvirt.vmx.offVirtApicWrite);
    3681         pHlp->pfnPrintf(pHlp, "  Current VMCS\n");
    3682         cpumR3InfoVmxVmcs(pHlp, pCtx->hwvirt.vmx.pVmcsR3, "    " /* pszPrefix */);
     3715        pHlp->pfnPrintf(pHlp, "  Current VMCS:\n");
     3716        cpumR3InfoVmxVmcs(pHlp, pCtx->hwvirt.vmx.pVmcsR3, "  " /* pszPrefix */);
    36833717    }
    36843718
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