VirtualBox

Changeset 7873 in vbox for trunk


Ignore:
Timestamp:
Apr 10, 2008 3:46:31 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
29497
Message:

AssertCR3: check the 4 PDPTs too in PAE legacy mode

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/PGMAllBth.h

    r7859 r7873  
    29862986                    ("Invalid GCPhysCR3=%VGp cr3=%VGp\n", pPGM->GCPhysCR3, (RTGCPHYS)cr3),
    29872987                    false);
    2988 # if PGM_GST_TYPE == PGM_TYPE_32BIT
     2988# ifndef IN_RING0
     2989#  if PGM_GST_TYPE == PGM_TYPE_32BIT
    29892990    rc = PGMShwGetPage(pVM, pPGM->pGuestPDGC, NULL, &HCPhysShw);
    2990 # else
     2991#  else
    29912992    rc = PGMShwGetPage(pVM, pPGM->pGstPaePDPTGC, NULL, &HCPhysShw);
    2992 # endif
     2993#  endif
    29932994    AssertRCReturn(rc, 1);
    29942995    HCPhys = NIL_RTHCPHYS;
    29952996    rc = pgmRamGCPhys2HCPhys(pPGM, cr3 & GST_CR3_PAGE_MASK, &HCPhys);
    29962997    AssertMsgReturn(HCPhys == HCPhysShw, ("HCPhys=%VHp HCPhyswShw=%VHp (cr3)\n", HCPhys, HCPhysShw), false);
    2997 # if PGM_GST_TYPE == PGM_TYPE_32BIT && defined(IN_RING3)
     2998#  if PGM_GST_TYPE == PGM_TYPE_32BIT && defined(IN_RING3)
    29982999    RTGCPHYS GCPhys;
    29993000    rc = PGMR3DbgHCPtr2GCPhys(pVM, pPGM->pGuestPDHC, &GCPhys);
    30003001    AssertRCReturn(rc, 1);
    30013002    AssertMsgReturn((cr3 & GST_CR3_PAGE_MASK) == GCPhys, ("GCPhys=%VGp cr3=%VGp\n", GCPhys, (RTGCPHYS)cr3), false);
    3002 # endif
     3003#  endif
     3004#endif /* !IN_RING0 */
    30033005
    30043006# if PGM_GST_TYPE == PGM_TYPE_32BIT
     
    30203022
    30213023/** @todo call the other two PGMAssert*() functions. */
     3024
     3025# if PGM_GST_TYPE == PGM_TYPE_PAE
     3026    /*
     3027     * Check the 4 PDPTs too.
     3028     */
     3029    for (unsigned i = 0; i < 4; i++)
     3030    {
     3031        RTHCPTR  HCPtr;
     3032        RTHCPHYS HCPhys;
     3033        RTGCPHYS GCPhys = pVM->pgm.s.CTXSUFF(pGstPaePDPT)->a[i].u & X86_PDPE_PG_MASK;
     3034        int rc2 = pgmRamGCPhys2HCPtrAndHCPhysWithFlags(&pVM->pgm.s, GCPhys, &HCPtr, &HCPhys);
     3035        if (VBOX_SUCCESS(rc2))
     3036        {
     3037            AssertMsg(   pVM->pgm.s.apGstPaePDsHC[i]    == (R3R0PTRTYPE(PX86PDPAE))HCPtr
     3038                      && pVM->pgm.s.apGstPaePDsGC[i]    == (GCPTRTYPE(PX86PDPAE))GCPtr
     3039                      && pVM->pgm.s.aGCPhysGstPaePDs[i] == GCPhys,
     3040                      ("idx %d apGstPaePDsHC %VHv vs %VHv apGstPaePDsGC %VGv vs %VGv aGCPhysGstPaePDs %VGp vs %VGp\n",
     3041                       i, pVM->pgm.s.apGstPaePDsHC[i], HCPtr, pVM->pgm.s.apGstPaePDsGC[i], GCPtr, pVM->pgm.s.aGCPhysGstPaePDs[i], GCPhys));
     3042        }
     3043    }
     3044# endif
    30223045
    30233046    /*
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette