VirtualBox

Changeset 91307 in vbox


Ignore:
Timestamp:
Sep 17, 2021 9:24:12 PM (3 years ago)
Author:
vboxsync
Message:

VMM/CPUM: Comment and compile time assertion upates for CPUMCTX. bugref:10093

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/cpumctx.h

    r91306 r91307  
    555555                /** 0xe000 - The MSR permission bitmap. */
    556556                uint8_t                 abMsrBitmap[VMX_V_MSR_BITMAP_SIZE];
    557                 /** 0x10000 - The I/O permission bitmap. */
     557                /** 0xf000 - The I/O permission bitmap. */
    558558                uint8_t                 abIoBitmap[VMX_V_IO_BITMAP_A_SIZE + VMX_V_IO_BITMAP_B_SIZE];
    559                 /** 0x12000 - The virtual-APIC page.
     559                /** 0x11000 - The virtual-APIC page.
    560560                 * @note This is used by VT-x hardware... */
    561561                uint8_t                 abVirtApicPage[VMX_V_VIRT_APIC_SIZE];
    562562
    563                 /** 0x300 - Guest physical address of the VMXON region. */
     563                /** 0x12000 - Guest physical address of the VMXON region. */
    564564                RTGCPHYS                GCPhysVmxon;
    565                 /** 0x308 - Guest physical address of the current VMCS pointer. */
     565                /** 0x12008 - Guest physical address of the current VMCS pointer. */
    566566                RTGCPHYS                GCPhysVmcs;
    567                 /** 0x310 - Guest physical address of the shadow VMCS pointer. */
     567                /** 0x12010 - Guest physical address of the shadow VMCS pointer. */
    568568                RTGCPHYS                GCPhysShadowVmcs;
    569                 /** 0x318 - Last emulated VMX instruction/VM-exit diagnostic. */
     569                /** 0x12018 - Last emulated VMX instruction/VM-exit diagnostic. */
    570570                VMXVDIAG                enmDiag;
    571                 /** 0x31c - VMX abort reason. */
     571                /** 0x1201c - VMX abort reason. */
    572572                VMXABORT                enmAbort;
    573                 /** 0x320 - Last emulated VMX instruction/VM-exit diagnostic auxiliary info. (mainly
    574                  *  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). */
    575575                uint64_t                uDiagAux;
    576                 /** 0x328 - VMX abort auxiliary info. */
     576                /** 0x12028 - VMX abort auxiliary info. */
    577577                uint32_t                uAbortAux;
    578                 /** 0x32c - Whether the guest is in VMX root mode. */
     578                /** 0x1202c - Whether the guest is in VMX root mode. */
    579579                bool                    fInVmxRootMode;
    580                 /** 0x32d - Whether the guest is in VMX non-root mode. */
     580                /** 0x1202d - Whether the guest is in VMX non-root mode. */
    581581                bool                    fInVmxNonRootMode;
    582                 /** 0x32e - Whether the injected events are subjected to event intercepts.  */
     582                /** 0x1202e - Whether the injected events are subjected to event intercepts.  */
    583583                bool                    fInterceptEvents;
    584                 /** 0x32f - Whether blocking of NMI (or virtual-NMIs) was in effect in VMX non-root
    585                  *  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. */
    586586                bool                    fNmiUnblockingIret;
    587                 /** 0x3d0 - Guest TSC timestamp of the first PAUSE instruction that is considered to
    588                  *  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. */
    589589                uint64_t                uFirstPauseLoopTick;
    590                 /** 0x3d8 - Guest TSC timestamp of the previous PAUSE instruction. */
     590                /** 0x12038 - Guest TSC timestamp of the previous PAUSE instruction. */
    591591                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). */
    593594                uint64_t                uEntryTick;
    594                 /** 0x3e8 - Virtual-APIC write offset (until trap-like VM-exit). */
     595                /** 0x12048 - Virtual-APIC write offset (until trap-like VM-exit). */
    595596                uint16_t                offVirtApicWrite;
    596                 /** 0x3ea - Whether virtual-NMI blocking is in effect. */
     597                /** 0x1204a - Whether virtual-NMI blocking is in effect. */
    597598                bool                    fVirtNmiBlocking;
    598                 /** 0x3eb - Padding. */
     599                /** 0x1204b - Padding. */
    599600                uint8_t                 abPadding0[5];
    600                 /** 0x3f0 - Guest VMX MSRs. */
     601                /** 0x12050 - Guest VMX MSRs. */
    601602                VMXMSRS                 Msrs;
    602603            } vmx;
    603604        } CPUM_UNION_NM(s);
    604605
    605         /** 0x520 - Hardware virtualization type currently in use. */
     606        /** 0x12130 - Hardware virtualization type currently in use. */
    606607        CPUMHWVIRT              enmHwvirt;
    607         /** 0x524 - Global interrupt flag - AMD only (always true on Intel). */
     608        /** 0x12134 - Global interrupt flag - AMD only (always true on Intel). */
    608609        bool                    fGif;
    609610        bool                    afPadding1[3];
    610         /** 0x528 - A subset of guest force flags that are saved while running the
     611        /** 0x12138 - A subset of guest force flags that are saved while running the
    611612         *  nested-guest. */
    612613#ifdef VMCPU_WITH_64_BIT_FFS
     
    617618#endif
    618619#if 0
    619         /** 0x530 - Pad to 64 byte boundary. */
     620        /** 0x12140 - Pad to 64 byte boundary. */
    620621        uint8_t                 abPadding0[8+16+32];
    621622#endif
     
    625626
    626627#ifndef VBOX_FOR_DTRACE_LIB
     628AssertCompileSizeAlignment(CPUMCTX, 64);
     629AssertCompileSizeAlignment(CPUMCTX, 32);
     630AssertCompileSizeAlignment(CPUMCTX, 16);
    627631AssertCompileSizeAlignment(CPUMCTX, 8);
    628 AssertCompileSizeAlignment(CPUMCTX, 16);
    629 AssertCompileSizeAlignment(CPUMCTX, 32);
    630 AssertCompileSizeAlignment(CPUMCTX, 64);
    631632AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NM(g.) CPUM_STRUCT_NM(qw.) rax,   0);
    632633AssertCompileMemberOffset(CPUMCTX, CPUM_UNION_NM(g.) CPUM_STRUCT_NM(qw.) rcx,   8);
     
    677678AssertCompileMemberOffset(CPUMCTX,   CPUM_UNION_NM(u.) abXState, 0x300);
    678679AssertCompileMemberAlignment(CPUMCTX, CPUM_UNION_NM(u.) XState, 0x100);
     680/* Only do spot checks for hwvirt */
    679681AssertCompileMemberAlignment(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
     682AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.Vmcb,                  X86_PAGE_SIZE);
     683AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.abMsrBitmap,           X86_PAGE_SIZE);
     684AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.abIoBitmap,            X86_PAGE_SIZE);
     685AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.Vmcs,                  X86_PAGE_SIZE);
     686AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.ShadowVmcs,            X86_PAGE_SIZE);
     687AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.abVmreadBitmap,        X86_PAGE_SIZE);
     688AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.abVmwriteBitmap,       X86_PAGE_SIZE);
     689AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.aEntryMsrLoadArea,     X86_PAGE_SIZE);
     690AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.aExitMsrStoreArea,     X86_PAGE_SIZE);
     691AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.aExitMsrLoadArea,      X86_PAGE_SIZE);
     692AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.abMsrBitmap,           X86_PAGE_SIZE);
     693AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.abIoBitmap,            X86_PAGE_SIZE);
     694AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.abVirtApicPage,        X86_PAGE_SIZE);
     695AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) vmx.Msrs,                  8);
     696AssertCompileMemberOffset(CPUMCTX,    hwvirt.CPUM_UNION_NM(s.) svm.abIoBitmap,            0x7000);
     697AssertCompileMemberOffset(CPUMCTX,    hwvirt.CPUM_UNION_NM(s.) svm.fInterceptEvents,      0xa0d4);
     698AssertCompileMemberOffset(CPUMCTX,    hwvirt.CPUM_UNION_NM(s.) vmx.abIoBitmap,            0xf000);
     699AssertCompileMemberOffset(CPUMCTX,    hwvirt.CPUM_UNION_NM(s.) vmx.fVirtNmiBlocking,      0x1204a);
     700AssertCompileMemberOffset(CPUMCTX,    hwvirt.enmHwvirt,                                   0x12130);
     701AssertCompileMemberOffset(CPUMCTX,    hwvirt.fGif,                                        0x12134);
     702AssertCompileMemberOffset(CPUMCTX,    hwvirt.fLocalForcedActions,                         0x12138);
    745703AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_STRUCT_NM(g,qw.) rax, CPUMCTX, CPUM_UNION_NM(g.) aGRegs);
    746704AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_STRUCT_NM(g,qw.) rax, CPUMCTX, CPUM_UNION_STRUCT_NM(g,qw2.)  r0);
     
    825783AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_STRUCT_NM(s,n.) gs,   CPUMCTX, CPUM_UNION_NM(s.) aSRegs[X86_SREG_GS]);
    826784# 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
    841786
    842787/**
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