Explorar el Código

Kernel: Zero-fill shared memory blocks when mapping

This works around crashes related to GSP/HID/etc. shared memory blocks
having garbage values. The proper fix requires proper management of
mapped memory blocks in the process.
Yuri Kunde Schlesner hace 11 años
padre
commit
774eea8374
Se han modificado 1 ficheros con 8 adiciones y 0 borrados
  1. 8 0
      src/core/hle/kernel/shared_memory.cpp

+ 8 - 0
src/core/hle/kernel/shared_memory.cpp

@@ -2,6 +2,8 @@
 // Licensed under GPLv2 or any later version
 // Refer to the license.txt file included.
 
+#include <cstring>
+
 #include "common/logging/log.h"
 
 #include "core/mem_map.h"
@@ -38,6 +40,12 @@ ResultCode SharedMemory::Map(VAddr address, MemoryPermission permissions,
 
     // TODO: Test permissions
 
+    // HACK: Since there's no way to write to the memory block without mapping it onto the game
+    // process yet, at least initialize memory the first time it's mapped.
+    if (address != this->base_address) {
+        std::memset(Memory::GetPointer(address), 0, size);
+    }
+
     this->base_address = address;
 
     return RESULT_SUCCESS;