VirtualBox

Changeset 23765 in vbox


Ignore:
Timestamp:
Oct 14, 2009 2:48:30 PM (15 years ago)
Author:
vboxsync
Message:

CSAM: Use SSMR3GetStructEx instead of SSMR3GetMem in an attempt to restore states saved by the other bitness. (Mixing gcc/msc/32: todo)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/PATM/CSAM.cpp

    r23016 r23765  
    102102#endif
    103103
     104/**
     105 * SSM descriptor table for the CSAM structure.
     106 */
     107static const SSMFIELD g_aCsamFields[] =
     108{
     109    SSMFIELD_ENTRY_IGNORE(      CSAM, offVM),
     110    SSMFIELD_ENTRY_PAD_HC64(    CSAM, Alignment0, sizeof(uint32_t)),
     111    SSMFIELD_ENTRY_HCPTR(       CSAM, pPageTree),
     112    SSMFIELD_ENTRY(             CSAM, aDangerousInstr),
     113    SSMFIELD_ENTRY(             CSAM, cDangerousInstr),
     114    SSMFIELD_ENTRY(             CSAM, iDangerousInstr),
     115    SSMFIELD_ENTRY_RCPTR(       CSAM, pPDBitmapGC),
     116    SSMFIELD_ENTRY_RCPTR(       CSAM, pPDHCBitmapGC),
     117    SSMFIELD_ENTRY_HCPTR(       CSAM, pPDBitmapHC),
     118    SSMFIELD_ENTRY_HCPTR(       CSAM, pPDGCBitmapHC),
     119    SSMFIELD_ENTRY_HCPTR(       CSAM, savedstate.pSSM),
     120    SSMFIELD_ENTRY(             CSAM, savedstate.cPageRecords),
     121    SSMFIELD_ENTRY(             CSAM, savedstate.cPatchPageRecords),
     122    SSMFIELD_ENTRY(             CSAM, cDirtyPages),
     123    SSMFIELD_ENTRY_RCPTR_ARRAY( CSAM, pvDirtyBasePage),
     124    SSMFIELD_ENTRY_RCPTR_ARRAY( CSAM, pvDirtyFaultPage),
     125    SSMFIELD_ENTRY(             CSAM, cPossibleCodePages),
     126    SSMFIELD_ENTRY_RCPTR_ARRAY( CSAM, pvPossibleCodePage),
     127    SSMFIELD_ENTRY_RCPTR_ARRAY( CSAM, pvCallInstruction),
     128    SSMFIELD_ENTRY(             CSAM, iCallInstruction),
     129    SSMFIELD_ENTRY(             CSAM, fScanningStarted),
     130    SSMFIELD_ENTRY(             CSAM, fGatesChecked),
     131    SSMFIELD_ENTRY_PAD_HC(      CSAM, Alignment1, 4, 2),
     132    SSMFIELD_ENTRY_IGNORE(      CSAM, StatNrTraps),
     133    SSMFIELD_ENTRY_IGNORE(      CSAM, StatNrPages),
     134    SSMFIELD_ENTRY_IGNORE(      CSAM, StatNrPagesInv),
     135    SSMFIELD_ENTRY_IGNORE(      CSAM, StatNrRemovedPages),
     136    SSMFIELD_ENTRY_IGNORE(      CSAM, StatNrPatchPages),
     137    SSMFIELD_ENTRY_IGNORE(      CSAM, StatNrPageNPHC),
     138    SSMFIELD_ENTRY_IGNORE(      CSAM, StatNrPageNPGC),
     139    SSMFIELD_ENTRY_IGNORE(      CSAM, StatNrFlushes),
     140    SSMFIELD_ENTRY_IGNORE(      CSAM, StatNrFlushesSkipped),
     141    SSMFIELD_ENTRY_IGNORE(      CSAM, StatNrKnownPagesHC),
     142    SSMFIELD_ENTRY_IGNORE(      CSAM, StatNrKnownPagesGC),
     143    SSMFIELD_ENTRY_IGNORE(      CSAM, StatNrInstr),
     144    SSMFIELD_ENTRY_IGNORE(      CSAM, StatNrBytesRead),
     145    SSMFIELD_ENTRY_IGNORE(      CSAM, StatNrOpcodeRead),
     146    SSMFIELD_ENTRY_IGNORE(      CSAM, StatTime),
     147    SSMFIELD_ENTRY_IGNORE(      CSAM, StatTimeCheckAddr),
     148    SSMFIELD_ENTRY_IGNORE(      CSAM, StatTimeAddrConv),
     149    SSMFIELD_ENTRY_IGNORE(      CSAM, StatTimeFlushPage),
     150    SSMFIELD_ENTRY_IGNORE(      CSAM, StatTimeDisasm),
     151    SSMFIELD_ENTRY_IGNORE(      CSAM, StatFlushDirtyPages),
     152    SSMFIELD_ENTRY_IGNORE(      CSAM, StatCheckGates),
     153    SSMFIELD_ENTRY_IGNORE(      CSAM, StatCodePageModified),
     154    SSMFIELD_ENTRY_IGNORE(      CSAM, StatDangerousWrite),
     155    SSMFIELD_ENTRY_IGNORE(      CSAM, StatInstrCacheHit),
     156    SSMFIELD_ENTRY_IGNORE(      CSAM, StatInstrCacheMiss),
     157    SSMFIELD_ENTRY_IGNORE(      CSAM, StatPagePATM),
     158    SSMFIELD_ENTRY_IGNORE(      CSAM, StatPageCSAM),
     159    SSMFIELD_ENTRY_IGNORE(      CSAM, StatPageREM),
     160    SSMFIELD_ENTRY_IGNORE(      CSAM, StatNrUserPages),
     161    SSMFIELD_ENTRY_IGNORE(      CSAM, StatPageMonitor),
     162    SSMFIELD_ENTRY_IGNORE(      CSAM, StatPageRemoveREMFlush),
     163    SSMFIELD_ENTRY_IGNORE(      CSAM, StatBitmapAlloc),
     164    SSMFIELD_ENTRY_IGNORE(      CSAM, StatScanNextFunction),
     165    SSMFIELD_ENTRY_IGNORE(      CSAM, StatScanNextFunctionFailed),
     166    SSMFIELD_ENTRY_TERM()
     167};
     168
     169/** Fake type to simplify g_aCsamPDBitmapArray construction. */
     170typedef struct
     171{
     172    uint8_t *a[CSAM_PGDIRBMP_CHUNKS];
     173} CSAMPDBITMAPARRAY;
     174
     175/**
     176 * SSM descriptor table for the CSAM::pPDBitmapHC array.
     177 */
     178static SSMFIELD const g_aCsamPDBitmapArray[] =
     179{
     180    SSMFIELD_ENTRY_HCPTR_NI_ARRAY(CSAMPDBITMAPARRAY, a),
     181    SSMFIELD_ENTRY_TERM()
     182};
     183
     184/**
     185 * SSM descriptor table for the CSAMPAGEREC structure.
     186 */
     187static const SSMFIELD g_aCsamPageRecFields[] =
     188{
     189    SSMFIELD_ENTRY_HCPTR(       CSAMPAGEREC, Core.Key),
     190    SSMFIELD_ENTRY_HCPTR(       CSAMPAGEREC, Core.pLeft),
     191    SSMFIELD_ENTRY_HCPTR(       CSAMPAGEREC, Core.pRight),
     192    SSMFIELD_ENTRY_IGNORE(      CSAMPAGEREC, Core.uchHeight),
     193    SSMFIELD_ENTRY_PAD_HC_AUTO( 3, 7),
     194    SSMFIELD_ENTRY_RCPTR(       CSAMPAGEREC, page.pPageGC),
     195#ifdef _MSC_VER /** @todo check/fix this! */
     196    SSMFIELD_ENTRY_PAD_HC_AUTO( 4, 4),
     197#else
     198    SSMFIELD_ENTRY_PAD_HC_AUTO( 0, 4),
     199#endif
     200    SSMFIELD_ENTRY_GCPHYS(      CSAMPAGEREC, page.GCPhys),
     201    SSMFIELD_ENTRY(             CSAMPAGEREC, page.fFlags),
     202    SSMFIELD_ENTRY(             CSAMPAGEREC, page.uSize),
     203    SSMFIELD_ENTRY_PAD_HC_AUTO( 0, 4),
     204    SSMFIELD_ENTRY_HCPTR_NI(    CSAMPAGEREC, page.pBitmap),
     205    SSMFIELD_ENTRY(             CSAMPAGEREC, page.fCode32),
     206    SSMFIELD_ENTRY(             CSAMPAGEREC, page.fMonitorActive),
     207    SSMFIELD_ENTRY(             CSAMPAGEREC, page.fMonitorInvalidation),
     208    SSMFIELD_ENTRY_PAD_HC_AUTO( 1, 1),
     209    SSMFIELD_ENTRY(             CSAMPAGEREC, page.enmTag),
     210    SSMFIELD_ENTRY(             CSAMPAGEREC, page.u64Hash),
     211    SSMFIELD_ENTRY_TERM()
     212};
     213
    104214
    105215/**
     
    461571     * Restore CSAM structure
    462572     */
     573#if 0
    463574    rc = SSMR3GetMem(pSSM, &csamInfo, sizeof(csamInfo));
     575#else
     576    RT_ZERO(csamInfo);
     577    rc = SSMR3GetStructEx(pSSM, &csamInfo, sizeof(csamInfo), SSMSTRUCT_FLAGS_MEM_BAND_AID, &g_aCsamFields[0], NULL);
     578#endif
    464579    AssertRCReturn(rc, rc);
    465580
     
    477592
    478593    /* Restore pgdir bitmap (we'll change the pointers next). */
     594#if 0
    479595    rc = SSMR3GetMem(pSSM, pVM->csam.s.pPDBitmapHC, CSAM_PGDIRBMP_CHUNKS*sizeof(RTHCPTR));
     596#else
     597    rc = SSMR3GetStructEx(pSSM, pVM->csam.s.pPDBitmapHC, sizeof(uint8_t *) * CSAM_PGDIRBMP_CHUNKS,
     598                          SSMSTRUCT_FLAGS_MEM_BAND_AID, &g_aCsamPDBitmapArray[0], NULL);
     599#endif
    480600    AssertRCReturn(rc, rc);
    481601
     
    516636        PCSAMPAGE    pPage;
    517637
     638#if 0
    518639        rc = SSMR3GetMem(pSSM, &page, sizeof(page));
     640#else
     641        RT_ZERO(page);
     642        rc = SSMR3GetStructEx(pSSM, &page, sizeof(page), SSMSTRUCT_FLAGS_MEM_BAND_AID, &g_aCsamPageRecFields[0], NULL);
     643#endif
    519644        AssertRCReturn(rc, rc);
    520645
     
    541666    }
    542667
    543     /** @note we don't restore aDangerousInstr; it will be recreated automatically. */
     668    /* Note: we don't restore aDangerousInstr; it will be recreated automatically. */
    544669    memset(&pVM->csam.s.aDangerousInstr, 0, sizeof(pVM->csam.s.aDangerousInstr));
    545670    pVM->csam.s.cDangerousInstr = 0;
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