Sfoglia il codice sorgente

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 11 anni fa
parent
commit
774eea8374
1 ha cambiato i file con 8 aggiunte e 0 eliminazioni
  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
 // Licensed under GPLv2 or any later version
 // Refer to the license.txt file included.
 // Refer to the license.txt file included.
 
 
+#include <cstring>
+
 #include "common/logging/log.h"
 #include "common/logging/log.h"
 
 
 #include "core/mem_map.h"
 #include "core/mem_map.h"
@@ -38,6 +40,12 @@ ResultCode SharedMemory::Map(VAddr address, MemoryPermission permissions,
 
 
     // TODO: Test 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;
     this->base_address = address;
 
 
     return RESULT_SUCCESS;
     return RESULT_SUCCESS;