From 7bab7a181a0eedcfe4f803ca775a4817fe6f9f41 Mon Sep 17 00:00:00 2001 From: lizzie Date: Mon, 1 Dec 2025 10:58:26 +0000 Subject: [PATCH] (likely) fixes for virtual dmem? --- src/common/host_memory.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/common/host_memory.cpp b/src/common/host_memory.cpp index c281eea395..2b81295ff9 100644 --- a/src/common/host_memory.cpp +++ b/src/common/host_memory.cpp @@ -34,15 +34,19 @@ // FreeBSD #ifndef MAP_NORESERVE -#define MAP_NORESERVE 0 +# define MAP_NORESERVE 0 #endif // Solaris 11 and illumos #ifndef MAP_ALIGNED_SUPER -#define MAP_ALIGNED_SUPER 0 +# define MAP_ALIGNED_SUPER 0 #endif // macOS #ifndef MAP_ANONYMOUS -#define MAP_ANONYMOUS MAP_ANON +# define MAP_ANONYMOUS MAP_ANON +#endif +// PlayStation 4 +#ifndef MAP_SYSTEM +# define MAP_SYSTEM 0 #endif #endif // ^^^ POSIX ^^^ @@ -439,8 +443,8 @@ static void* ChooseVirtualBase(size_t virtual_size) { #else static void* ChooseVirtualBase(size_t virtual_size) { -#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) || defined(__sun__) || defined(__HAIKU__) || defined(__managarm__) || defined(__AIX__) - void* virtual_base = mmap(nullptr, virtual_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE | MAP_ALIGNED_SUPER, -1, 0); +#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) || defined(__sun__) || defined(__HAIKU__) || defined(__managarm__) || defined(__AIX__) || defined(__OPENORBIS__) + void* virtual_base = mmap(nullptr, virtual_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE | MAP_ALIGNED_SUPER | MAP_SYSTEM, -1, 0); if (virtual_base != MAP_FAILED) return virtual_base; #endif @@ -539,13 +543,13 @@ public: } if (use_anon) { LOG_WARNING(Common_Memory, "Using private mappings instead of shared ones"); - backing_base = static_cast(mmap(nullptr, backing_size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0)); + backing_base = static_cast(mmap(nullptr, backing_size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE | MAP_SYSTEM, -1, 0)); if (fd > 0) { fd = -1; close(fd); } } else { - backing_base = static_cast(mmap(nullptr, backing_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)); + backing_base = static_cast(mmap(nullptr, backing_size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_SYSTEM, fd, 0)); } ASSERT_MSG(backing_base != MAP_FAILED, "mmap failed: {}", strerror(errno));