forked from Mirror/Ryujinx
Stop memory modification check when a invalid address is found
This commit is contained in:
parent
a718b60d06
commit
6cf9a04d98
1 changed files with 20 additions and 19 deletions
|
@ -268,33 +268,34 @@ namespace ARMeilleure.Memory
|
||||||
|
|
||||||
while (address < endAddress)
|
while (address < endAddress)
|
||||||
{
|
{
|
||||||
if (IsValidPosition((long)address))
|
// If the address is invalid, we stop and consider all the remaining memory
|
||||||
|
// as not modified (since the address is invalid, we can't check, and technically
|
||||||
|
// the memory doesn't exist).
|
||||||
|
if (!IsValidPosition((long)address))
|
||||||
{
|
{
|
||||||
byte* ptr = ((byte**)_pageTable)[address >> PageBits];
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
ulong ptrUlong = (ulong)ptr;
|
byte* ptr = ((byte**)_pageTable)[address >> PageBits];
|
||||||
|
|
||||||
if ((ptrUlong & idMask) == 0)
|
ulong ptrUlong = (ulong)ptr;
|
||||||
{
|
|
||||||
// Modified.
|
|
||||||
currSize += PageSize;
|
|
||||||
|
|
||||||
SetPtEntryFlag((long)address, (long)idMask);
|
if ((ptrUlong & idMask) == 0)
|
||||||
}
|
{
|
||||||
else
|
// Modified.
|
||||||
{
|
currSize += PageSize;
|
||||||
if (currSize != 0)
|
|
||||||
{
|
|
||||||
ranges.Add((currAddr, currSize));
|
|
||||||
}
|
|
||||||
|
|
||||||
currAddr = address + PageSize;
|
SetPtEntryFlag((long)address, (long)idMask);
|
||||||
currSize = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
currSize += PageSize;
|
if (currSize != 0)
|
||||||
|
{
|
||||||
|
ranges.Add((currAddr, currSize));
|
||||||
|
}
|
||||||
|
|
||||||
|
currAddr = address + PageSize;
|
||||||
|
currSize = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
address += PageSize;
|
address += PageSize;
|
||||||
|
|
Loading…
Reference in a new issue