VirtualBox

Changeset 20947 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Jun 25, 2009 3:37:20 PM (16 years ago)
Author:
vboxsync
Message:

PGMR3DbgScanVirtual: Chop the range so we don't end up above 4GB on a 32-bit guest.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/PGMDbg.cpp

    r19334 r20947  
    487487     * bother to match across ranges.
    488488     */
     489    pgmLock(pVM);
    489490    for (PPGMRAMRANGE pRam = pVM->pgm.s.CTX_SUFF(pRamRanges);
    490491         pRam;
     
    534535                        {
    535536                            *pGCPhysHit = (GCPhys & ~(RTGCPHYS)PAGE_OFFSET_MASK) + offPage;
     537                            pgmUnlock(pVM);
    536538                            return VINF_SUCCESS;
    537539                        }
     
    546548                GCPhys |= PAGE_OFFSET_MASK;
    547549                if (GCPhys++ >= GCPhysLast)
     550                {
     551                    pgmUnlock(pVM);
    548552                    return VERR_DBGF_MEM_NOT_FOUND;
     553                }
    549554            }
    550555        }
    551556    }
     557    pgmUnlock(pVM);
    552558    return VERR_DBGF_MEM_NOT_FOUND;
    553559}
     
    597603     * Search the memory - ignore MMIO, zero and not-present pages.
    598604     */
     605    PGMMODE         enmMode   = PGMGetGuestMode(pVCpu);
     606    RTGCPTR         GCPtrMask = PGMMODE_IS_LONG_MODE(enmMode) ? UINT64_MAX : UINT32_MAX;
    599607    uint8_t         abPrev[MAX_NEEDLE_SIZE];
    600     size_t          cbPrev = 0;
     608    size_t          cbPrev    = 0;
    601609    const RTGCPTR   GCPtrLast = GCPtr + cbRange - 1 >= GCPtr
    602                               ? GCPtr + cbRange - 1
    603                               : ~(RTGCPTR)0;
    604     RTGCPTR         cPages = (((GCPtrLast - GCPtr) + (GCPtr & PAGE_OFFSET_MASK)) >> PAGE_SHIFT) + 1;
     610                              ? (GCPtr + cbRange - 1) & GCPtrMask
     611                              : GCPtrMask;
     612    RTGCPTR         cPages    = (((GCPtrLast - GCPtr) + (GCPtr & PAGE_OFFSET_MASK)) >> PAGE_SHIFT) + 1;
    605613    while (cPages-- > 0)
    606614    {
     
    611619            PPGMPAGE pPage = pgmPhysGetPage(&pVM->pgm.s, GCPhys);
    612620            if (    pPage
    613 ///@todo                 &&  !PGM_PAGE_IS_ZERO(pPage)
     621                &&  !PGM_PAGE_IS_ZERO(pPage) /** @todo handle all zero needle. */
    614622                &&  !PGM_PAGE_IS_MMIO(pPage))
    615623            {
     
    644652        GCPtr |= PAGE_OFFSET_MASK;
    645653        GCPtr++;
     654        GCPtr &= GCPtrMask;
    646655    }
    647656    return VERR_DBGF_MEM_NOT_FOUND;
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