summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/core/hle/service/ldr/ldr.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/core/hle/service/ldr/ldr.cpp b/src/core/hle/service/ldr/ldr.cpp
index 157aeec88..647943020 100644
--- a/src/core/hle/service/ldr/ldr.cpp
+++ b/src/core/hle/service/ldr/ldr.cpp
@@ -342,17 +342,27 @@ public:
342 return; 342 return;
343 } 343 }
344 344
345 ASSERT( 345 // Mark text and read-only region as ModuleCode
346 vm_manager 346 ASSERT(vm_manager
347 .MirrorMemory(*map_address, nro_address, nro_size, Kernel::MemoryState::ModuleCode) 347 .MirrorMemory(*map_address, nro_address, header.text_size + header.ro_size,
348 .IsSuccess()); 348 Kernel::MemoryState::ModuleCode)
349 .IsSuccess());
350 // Mark read/write region as ModuleCodeData, which is necessary if this region is used for
351 // TransferMemory (e.g. Final Fantasy VIII Remastered does this)
352 ASSERT(vm_manager
353 .MirrorMemory(*map_address + header.rw_offset, nro_address + header.rw_offset,
354 header.rw_size, Kernel::MemoryState::ModuleCodeData)
355 .IsSuccess());
356 // Revoke permissions from the old memory region
349 ASSERT(vm_manager.ReprotectRange(nro_address, nro_size, Kernel::VMAPermission::None) 357 ASSERT(vm_manager.ReprotectRange(nro_address, nro_size, Kernel::VMAPermission::None)
350 .IsSuccess()); 358 .IsSuccess());
351 359
352 if (bss_size > 0) { 360 if (bss_size > 0) {
361 // Mark BSS region as ModuleCodeData, which is necessary if this region is used for
362 // TransferMemory (e.g. Final Fantasy VIII Remastered does this)
353 ASSERT(vm_manager 363 ASSERT(vm_manager
354 .MirrorMemory(*map_address + nro_size, bss_address, bss_size, 364 .MirrorMemory(*map_address + nro_size, bss_address, bss_size,
355 Kernel::MemoryState::ModuleCode) 365 Kernel::MemoryState::ModuleCodeData)
356 .IsSuccess()); 366 .IsSuccess());
357 ASSERT(vm_manager.ReprotectRange(bss_address, bss_size, Kernel::VMAPermission::None) 367 ASSERT(vm_manager.ReprotectRange(bss_address, bss_size, Kernel::VMAPermission::None)
358 .IsSuccess()); 368 .IsSuccess());