Changeset 91307 in vbox
- Timestamp:
- Sep 17, 2021 9:24:12 PM (3 years ago)
- File:
-
- 1 edited
-
trunk/include/VBox/vmm/cpumctx.h (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/cpumctx.h
r91306 r91307 555 555 /** 0xe000 - The MSR permission bitmap. */ 556 556 uint8_t abMsrBitmap[VMX_V_MSR_BITMAP_SIZE]; 557 /** 0x 10000 - The I/O permission bitmap. */557 /** 0xf000 - The I/O permission bitmap. */ 558 558 uint8_t abIoBitmap[VMX_V_IO_BITMAP_A_SIZE + VMX_V_IO_BITMAP_B_SIZE]; 559 /** 0x1 2000 - The virtual-APIC page.559 /** 0x11000 - The virtual-APIC page. 560 560 * @note This is used by VT-x hardware... */ 561 561 uint8_t abVirtApicPage[VMX_V_VIRT_APIC_SIZE]; 562 562 563 /** 0x 300 - Guest physical address of the VMXON region. */563 /** 0x12000 - Guest physical address of the VMXON region. */ 564 564 RTGCPHYS GCPhysVmxon; 565 /** 0x 308 - Guest physical address of the current VMCS pointer. */565 /** 0x12008 - Guest physical address of the current VMCS pointer. */ 566 566 RTGCPHYS GCPhysVmcs; 567 /** 0x 310 - Guest physical address of the shadow VMCS pointer. */567 /** 0x12010 - Guest physical address of the shadow VMCS pointer. */ 568 568 RTGCPHYS GCPhysShadowVmcs; 569 /** 0x 318 - Last emulated VMX instruction/VM-exit diagnostic. */569 /** 0x12018 - Last emulated VMX instruction/VM-exit diagnostic. */ 570 570 VMXVDIAG enmDiag; 571 /** 0x 31c - VMX abort reason. */571 /** 0x1201c - VMX abort reason. */ 572 572 VMXABORT enmAbort; 573 /** 0x 320 - Last emulated VMX instruction/VM-exit diagnostic auxiliary info. (mainly574 * used for info. that's not part of the VMCS). */573 /** 0x12020 - Last emulated VMX instruction/VM-exit diagnostic auxiliary info. 574 * (mainly used for info. that's not part of the VMCS). */ 575 575 uint64_t uDiagAux; 576 /** 0x 328 - VMX abort auxiliary info. */576 /** 0x12028 - VMX abort auxiliary info. */ 577 577 uint32_t uAbortAux; 578 /** 0x 32c - Whether the guest is in VMX root mode. */578 /** 0x1202c - Whether the guest is in VMX root mode. */ 579 579 bool fInVmxRootMode; 580 /** 0x 32d - Whether the guest is in VMX non-root mode. */580 /** 0x1202d - Whether the guest is in VMX non-root mode. */ 581 581 bool fInVmxNonRootMode; 582 /** 0x 32e - Whether the injected events are subjected to event intercepts. */582 /** 0x1202e - Whether the injected events are subjected to event intercepts. */ 583 583 bool fInterceptEvents; 584 /** 0x 32f - Whether blocking of NMI (or virtual-NMIs) was in effect in VMX non-root585 * mode before execution of IRET. */584 /** 0x1202f - Whether blocking of NMI (or virtual-NMIs) was in effect in VMX 585 * non-root mode before execution of IRET. */ 586 586 bool fNmiUnblockingIret; 587 /** 0x 3d0 - Guest TSC timestamp of the first PAUSE instruction that is considered to588 * be the first in a loop. */587 /** 0x12030 - Guest TSC timestamp of the first PAUSE instruction that is 588 * considered to be the first in a loop. */ 589 589 uint64_t uFirstPauseLoopTick; 590 /** 0x 3d8 - Guest TSC timestamp of the previous PAUSE instruction. */590 /** 0x12038 - Guest TSC timestamp of the previous PAUSE instruction. */ 591 591 uint64_t uPrevPauseTick; 592 /** 0x3e0 - Guest TSC timestamp of VM-entry (used for VMX-preemption timer). */ 592 /** 0x12040 - Guest TSC timestamp of VM-entry (used for VMX-preemption 593 * timer). */ 593 594 uint64_t uEntryTick; 594 /** 0x 3e8 - Virtual-APIC write offset (until trap-like VM-exit). */595 /** 0x12048 - Virtual-APIC write offset (until trap-like VM-exit). */ 595 596 uint16_t offVirtApicWrite; 596 /** 0x 3ea - Whether virtual-NMI blocking is in effect. */597 /** 0x1204a - Whether virtual-NMI blocking is in effect. */ 597 598 bool fVirtNmiBlocking; 598 /** 0x 3eb - Padding. */599 /** 0x1204b - Padding. */ 599 600 uint8_t abPadding0[5]; 600 /** 0x 3f0 - Guest VMX MSRs. */601 /** 0x12050 - Guest VMX MSRs. */ 601 602 VMXMSRS Msrs; 602 603 } vmx; 603 604 } CPUM_UNION_NM(s); 604 605 605 /** 0x 520 - Hardware virtualization type currently in use. */606 /** 0x12130 - Hardware virtualization type currently in use. */ 606 607 CPUMHWVIRT enmHwvirt; 607 /** 0x 524 - Global interrupt flag - AMD only (always true on Intel). */608 /** 0x12134 - Global interrupt flag - AMD only (always true on Intel). */ 608 609 bool fGif; 609 610 bool afPadding1[3]; 610 /** 0x 528 - A subset of guest force flags that are saved while running the611 /** 0x12138 - A subset of guest force flags that are saved while running the 611 612 * nested-guest. */ 612 613 #ifdef VMCPU_WITH_64_BIT_FFS … … 617 618 #endif 618 619 #if 0 619 /** 0x 530 - Pad to 64 byte boundary. */620 /** 0x12140 - Pad to 64 byte boundary. */ 620 621 uint8_t abPadding0[8+16+32]; 621 622 #endif … … 625 626 626 627 #ifndef VBOX_FOR_DTRACE_LIB 628 AssertCompileSizeAlignment(CPUMCTX, 64); 629 AssertCompileSizeAlignment(CPUMCTX, 32); 630 AssertCompileSizeAlignment(CPUMCTX, 16); 627 631 AssertCompileSizeAlignment(CPUMCTX, 8); 628 AssertCompileSizeAlignment(CPUMCTX, 16);629 AssertCompileSizeAlignment(CPUMCTX, 32);630 AssertCompileSizeAlignment(CPUMCTX, 64);631 632 AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NM(g.) CPUM_STRUCT_NM(qw.) rax, 0); 632 633 AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NM(g.) CPUM_STRUCT_NM(qw.) rcx, 8); … … 677 678 AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NM(u.) abXState, 0x300); 678 679 AssertCompileMemberAlignment(CPUMCTX, CPUM_UNION_NM(u.) XState, 0x100); 680 /* Only do spot checks for hwvirt */ 679 681 AssertCompileMemberAlignment(CPUMCTX, hwvirt, 0x1000); 680 #if 0 681 AssertCompileMemberOffset(CPUMCTX, hwvirt, 0x300); 682 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.uMsrHSavePa, 0x300); 683 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.GCPhysVmcb, 0x308); 684 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pVmcbR0, 0x310); 685 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pVmcbR3, 0x318); 686 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.HostState, 0x320); 687 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.uPrevPauseTick, 0x3d8); 688 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.cPauseFilter, 0x3e0); 689 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvMsrBitmapR0, 0x3e8); 690 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvMsrBitmapR3, 0x3f0); 691 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvIoBitmapR0, 0x3f8); 692 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvIoBitmapR3, 0x400); 693 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.HCPhysVmcb, 0x408); 694 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.GCPhysVmxon, 0x300); 695 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.GCPhysVmcs, 0x308); 696 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.GCPhysShadowVmcs, 0x310); 697 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.enmDiag, 0x318); 698 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.enmAbort, 0x31c); 699 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.uDiagAux, 0x320); 700 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.uAbortAux, 0x328); 701 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.fInVmxRootMode, 0x32c); 702 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.fInVmxNonRootMode, 0x32d); 703 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.fInterceptEvents, 0x32e); 704 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.fNmiUnblockingIret, 0x32f); 705 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pVmcsR0, 0x330); 706 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pVmcsR3, 0x338); 707 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pShadowVmcsR0, 0x340); 708 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pShadowVmcsR3, 0x348); 709 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvVirtApicPageR0, 0x350); 710 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvVirtApicPageR3, 0x358); 711 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvVmreadBitmapR0, 0x360); 712 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvVmreadBitmapR3, 0x368); 713 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvVmwriteBitmapR0, 0x370); 714 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvVmwriteBitmapR3, 0x378); 715 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pEntryMsrLoadAreaR0, 0x380); 716 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pEntryMsrLoadAreaR3, 0x388); 717 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pExitMsrStoreAreaR0, 0x390); 718 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pExitMsrStoreAreaR3, 0x398); 719 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pExitMsrLoadAreaR0, 0x3a0); 720 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pExitMsrLoadAreaR3, 0x3a8); 721 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvMsrBitmapR0, 0x3b0); 722 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvMsrBitmapR3, 0x3b8); 723 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvIoBitmapR0, 0x3c0); 724 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.pvIoBitmapR3, 0x3c8); 725 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.uFirstPauseLoopTick, 0x3d0); 726 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.uPrevPauseTick, 0x3d8); 727 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.uEntryTick, 0x3e0); 728 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.offVirtApicWrite, 0x3e8); 729 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.fVirtNmiBlocking, 0x3ea); 730 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.Msrs, 0x3f0); 731 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.HCPhysVmcs, 0x4d0); 732 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.HCPhysShadowVmcs, 0x4d8); 733 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.HCPhysVirtApicPage, 0x4e0); 734 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.HCPhysVmreadBitmap, 0x4e8); 735 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.HCPhysVmwriteBitmap, 0x4f0); 736 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.HCPhysEntryMsrLoadArea, 0x4f8); 737 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.HCPhysExitMsrStoreArea, 0x500); 738 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.HCPhysExitMsrLoadArea, 0x508); 739 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.HCPhysMsrBitmap, 0x510); 740 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.HCPhysIoBitmap, 0x518); 741 AssertCompileMemberOffset(CPUMCTX, hwvirt.enmHwvirt, 0x520); 742 AssertCompileMemberOffset(CPUMCTX, hwvirt.fGif, 0x524); 743 AssertCompileMemberOffset(CPUMCTX, hwvirt.fLocalForcedActions, 0x528); 744 #endif 682 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.Vmcb, X86_PAGE_SIZE); 683 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.abMsrBitmap, X86_PAGE_SIZE); 684 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.abIoBitmap, X86_PAGE_SIZE); 685 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.Vmcs, X86_PAGE_SIZE); 686 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.ShadowVmcs, X86_PAGE_SIZE); 687 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.abVmreadBitmap, X86_PAGE_SIZE); 688 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.abVmwriteBitmap, X86_PAGE_SIZE); 689 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.aEntryMsrLoadArea, X86_PAGE_SIZE); 690 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.aExitMsrStoreArea, X86_PAGE_SIZE); 691 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.aExitMsrLoadArea, X86_PAGE_SIZE); 692 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.abMsrBitmap, X86_PAGE_SIZE); 693 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.abIoBitmap, X86_PAGE_SIZE); 694 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.abVirtApicPage, X86_PAGE_SIZE); 695 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.Msrs, 8); 696 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.abIoBitmap, 0x7000); 697 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.fInterceptEvents, 0xa0d4); 698 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.abIoBitmap, 0xf000); 699 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.fVirtNmiBlocking, 0x1204a); 700 AssertCompileMemberOffset(CPUMCTX, hwvirt.enmHwvirt, 0x12130); 701 AssertCompileMemberOffset(CPUMCTX, hwvirt.fGif, 0x12134); 702 AssertCompileMemberOffset(CPUMCTX, hwvirt.fLocalForcedActions, 0x12138); 745 703 AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_STRUCT_NM(g,qw.) rax, CPUMCTX, CPUM_UNION_NM(g.) aGRegs); 746 704 AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_STRUCT_NM(g,qw.) rax, CPUMCTX, CPUM_UNION_STRUCT_NM(g,qw2.) r0); … … 825 783 AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_STRUCT_NM(s,n.) gs, CPUMCTX, CPUM_UNION_NM(s.) aSRegs[X86_SREG_GS]); 826 784 # endif 827 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.Vmcb, X86_PAGE_SIZE); 828 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.abMsrBitmap, X86_PAGE_SIZE); 829 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.abIoBitmap, X86_PAGE_SIZE); 830 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.Vmcs, X86_PAGE_SIZE); 831 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.ShadowVmcs, X86_PAGE_SIZE); 832 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.abVmreadBitmap, X86_PAGE_SIZE); 833 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.abVmwriteBitmap, X86_PAGE_SIZE); 834 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.aEntryMsrLoadArea, X86_PAGE_SIZE); 835 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.aExitMsrStoreArea, X86_PAGE_SIZE); 836 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.aExitMsrLoadArea, X86_PAGE_SIZE); 837 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.abMsrBitmap, X86_PAGE_SIZE); 838 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.abIoBitmap, X86_PAGE_SIZE); 839 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.abVirtApicPage, X86_PAGE_SIZE); 840 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.Msrs, 8); 785 841 786 842 787 /**
Note:
See TracChangeset
for help on using the changeset viewer.

