mman: align and clear for 3ds also
authornotaz <notasas@gmail.com>
Mon, 18 Jul 2022 22:30:14 +0000 (01:30 +0300)
committernotaz <notasas@gmail.com>
Mon, 18 Jul 2022 22:31:49 +0000 (01:31 +0300)
callers expect cleared mem

frontend/3ds/sys/mman.h
frontend/switch/sys/mman.h

index 61dde6c..fdf5ac6 100644 (file)
@@ -7,6 +7,7 @@ extern "C" {
 
 #include <stdlib.h>
 #include <stdio.h>
+#include <string.h>
 #include <stdint.h>
 #include <malloc.h>
 
@@ -39,14 +40,18 @@ static inline void* mmap(void *addr, size_t len, int prot, int flags, int fd, of
          /* this hack works only for pcsx_rearmed */
          uint32_t currentHandle;
 
-         if(!dynarec_cache)
+         if (!dynarec_cache) {
             dynarec_cache = memalign(0x1000, len);
+            if (!dynarec_cache)
+               return MAP_FAILED;
+         }
 
          svcDuplicateHandle(&currentHandle, 0xFFFF8001);
          svcControlProcessMemory(currentHandle, addr, dynarec_cache,
                                  len, MEMOP_MAP, prot);
          svcCloseHandle(currentHandle);
          dynarec_cache_mapping = addr;
+         memset(addr, 0, len);
          return addr;
       }
       else
@@ -57,10 +62,11 @@ static inline void* mmap(void *addr, size_t len, int prot, int flags, int fd, of
 
    }
 
-   addr_out = malloc(len);
-   if(!addr_out)
+   addr_out = memalign(0x1000, len);
+   if (!addr_out)
       return MAP_FAILED;
 
+   memset(addr_out, 0, len);
    return addr_out;
 }
 
index 49fb445..2e084a6 100644 (file)
@@ -34,9 +34,9 @@ static inline void *mmap(void *addr, size_t len, int prot, int flags, int fd, of
         //printf("mmap failed\n");
         addr = aligned_alloc(ALIGNMENT, len);
     }
-
-    if (addr)
-        memset(addr, 0, len);
+    if (!addr)
+        return MAP_FAILED;
+    memset(addr, 0, len);
     return addr;
 }