Changeset 76695 in vbox
- Timestamp:
- Jan 8, 2019 8:24:14 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/CPUM.cpp
r76685 r76695 3343 3343 3344 3344 /** 3345 * Displays a VMXVMCS.3345 * Displays a virtual-VMCS. 3346 3346 * 3347 3347 * @param pHlp The info helper functions. 3348 * @param pVmcs Pointer to a VMXVMCS.3348 * @param pVmcs Pointer to a virtual VMCS. 3349 3349 * @param pszPrefix Caller specified string prefix. 3350 3350 */ … … 3359 3359 (a_pHlp)->pfnPrintf((a_pHlp), " %s%-4s = {base=%016RX64}\n", \ 3360 3360 (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); \ 3361 3367 } while (0) 3362 3368 … … 3405 3411 pHlp->pfnPrintf(pHlp, " %sVM-entry MSR load count = %#RX32\n", pszPrefix, pVmcs->u32EntryMsrLoadCount); 3406 3412 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 } 3407 3422 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); 3409 3424 pHlp->pfnPrintf(pHlp, " %sTPR threshold = %#RX32\n", pszPrefix, pVmcs->u32TprThreshold); 3410 3425 pHlp->pfnPrintf(pHlp, " %sPLE gap = %#RX32\n", pszPrefix, pVmcs->u32PleGap); … … 3506 3521 3507 3522 /* 16-bit. */ 3508 pHlp->pfnPrintf(pHlp, " %scs = %#RX 32\n", pszPrefix, pVmcs->HostCs);3509 pHlp->pfnPrintf(pHlp, " %sss = %#RX 32\n", pszPrefix, pVmcs->HostSs);3510 pHlp->pfnPrintf(pHlp, " %sds = %#RX 32\n", pszPrefix, pVmcs->HostDs);3511 pHlp->pfnPrintf(pHlp, " %ses = %#RX 32\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); 3515 3530 CPUMVMX_DUMP_HOST_XDTR(pHlp, pVmcs, Gdtr, "gdtr", pszPrefix); 3516 3531 CPUMVMX_DUMP_HOST_XDTR(pHlp, pVmcs, Idtr, "idtr", pszPrefix); … … 3525 3540 3526 3541 /* Natural width. */ 3527 pHlp->pfnPrintf(pHlp, " %sEFER = %#RX64\n", pszPrefix, pVmcs->u64HostEferMsr.u);3528 pHlp->pfnPrintf(pHlp, " %sEFER = %#RX64\n", pszPrefix, pVmcs->u64HostEferMsr.u);3529 3542 pHlp->pfnPrintf(pHlp, " %sCR0 = %#RX64\n", pszPrefix, pVmcs->u64HostCr0.u); 3530 3543 pHlp->pfnPrintf(pHlp, " %sCR3 = %#RX64\n", pszPrefix, pVmcs->u64HostCr3.u); … … 3541 3554 3542 3555 /* 16-bit (none currently). */ 3556 3543 3557 /* 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); 3544 3560 pHlp->pfnPrintf(pHlp, " %sVM-instruction error = %#RX32\n", pszPrefix, pVmcs->u32RoVmInstrError); 3545 pHlp->pfnPrintf(pHlp, " %sExit reason = %#RX32\n", pszPrefix, pVmcs->u32RoExitReason);3546 3561 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 } 3547 3571 pHlp->pfnPrintf(pHlp, " %sVM-exit intr error-code = %#RX32\n", pszPrefix, pVmcs->u32RoExitIntErrCode); 3548 3572 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 } 3549 3581 pHlp->pfnPrintf(pHlp, " %sIDT-vectoring error-code = %#RX32\n", pszPrefix, pVmcs->u32RoIdtVectoringErrCode); 3550 3582 pHlp->pfnPrintf(pHlp, " %sVM-exit instruction length = %u bytes\n", pszPrefix, pVmcs->u32RoExitInstrLen); 3551 3583 pHlp->pfnPrintf(pHlp, " %sVM-exit instruction info = %#RX64\n", pszPrefix, pVmcs->u32RoExitInstrInfo); 3584 3552 3585 /* 64-bit. */ 3553 3586 pHlp->pfnPrintf(pHlp, " %sGuest-physical addr = %#RX64\n", pszPrefix, pVmcs->u64RoGuestPhysAddr.u); 3587 3554 3588 /* Natural width. */ 3555 pHlp->pfnPrintf(pHlp, " %sExit qualification = %#RX64\n", pszPrefix, pVmcs->u64RoExitQual.u);3556 3589 pHlp->pfnPrintf(pHlp, " %sI/O RCX = %#RX64\n", pszPrefix, pVmcs->u64RoIoRcx.u); 3557 3590 pHlp->pfnPrintf(pHlp, " %sI/O RSI = %#RX64\n", pszPrefix, pVmcs->u64RoIoRsi.u); … … 3562 3595 3563 3596 #undef CPUMVMX_DUMP_HOST_XDTR 3597 #undef CPUMVMX_DUMP_HOST_FS_GS_TR 3564 3598 #undef CPUMVMX_DUMP_GUEST_SEGREG 3565 3599 #undef CPUMVMX_DUMP_GUEST_XDTR … … 3679 3713 pHlp->pfnPrintf(pHlp, " uVmentryTick = %RX64\n", pCtx->hwvirt.vmx.uVmentryTick); 3680 3714 pHlp->pfnPrintf(pHlp, " offVirtApicWrite = %#RX16\n", pCtx->hwvirt.vmx.offVirtApicWrite); 3681 pHlp->pfnPrintf(pHlp, " Current VMCS \n");3682 cpumR3InfoVmxVmcs(pHlp, pCtx->hwvirt.vmx.pVmcsR3, " 3715 pHlp->pfnPrintf(pHlp, " Current VMCS:\n"); 3716 cpumR3InfoVmxVmcs(pHlp, pCtx->hwvirt.vmx.pVmcsR3, " " /* pszPrefix */); 3683 3717 } 3684 3718
Note:
See TracChangeset
for help on using the changeset viewer.