mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-27 04:25:12 +00:00
Attempt to handle MemoryMapFlags::NoOverwrite
Based on my interpretation of red_prig's descriptions. These changes are untested, as I'm not able to test right now.
This commit is contained in:
parent
dc25dd6835
commit
fbab952472
@ -376,11 +376,17 @@ int MemoryManager::MapMemory(void** out_addr, VAddr virtual_addr, size_t size, M
|
||||
// To account for this, unmap any reserved areas within this mapping range first.
|
||||
auto unmap_addr = mapped_addr;
|
||||
auto unmap_size = size;
|
||||
while (!vma.IsMapped() && unmap_addr < mapped_addr + size && remaining_size < size) {
|
||||
// If flag NoOverwrite is provided, allow overwriting mapped VMAs.
|
||||
// Otherwise, we can only overwrite unmapped or reserved VMAs.
|
||||
auto should_overwrite = False(flags & MemoryMapFlags::NoOverwrite) || !vma.IsMapped();
|
||||
while (should_overwrite && unmap_addr < mapped_addr + size && remaining_size < size) {
|
||||
auto unmapped = UnmapBytesFromEntry(unmap_addr, vma, unmap_size);
|
||||
unmap_addr += unmapped;
|
||||
unmap_size -= unmapped;
|
||||
// Unmap addr should be the address of the next VMA
|
||||
// if the previous VMA is fully unmapped.
|
||||
vma = FindVMA(unmap_addr)->second;
|
||||
should_overwrite = False(flags & MemoryMapFlags::NoOverwrite) || !vma.IsMapped();
|
||||
}
|
||||
|
||||
vma = FindVMA(mapped_addr)->second;
|
||||
|
Loading…
Reference in New Issue
Block a user