diff --git a/src/core/libraries/kernel/memory.cpp b/src/core/libraries/kernel/memory.cpp index 92280308d..9eb792adf 100644 --- a/src/core/libraries/kernel/memory.cpp +++ b/src/core/libraries/kernel/memory.cpp @@ -668,9 +668,14 @@ void* PS4_SYSV_ABI posix_mmap(void* addr, u64 len, s32 prot, s32 flags, s32 fd, } s32 result = ORBIS_OK; - if (fd == -1) { + if (True(mem_flags & Core::MemoryMapFlags::Anon) || + True(mem_flags & Core::MemoryMapFlags::Stack)) { result = memory->MapMemory(&addr_out, aligned_addr, aligned_size, mem_prot, mem_flags, Core::VMAType::Flexible, "anon", false); + } else if (True(mem_flags & Core::MemoryMapFlags::Void)) { + result = + memory->MapMemory(&addr_out, aligned_addr, aligned_size, Core::MemoryProt::NoAccess, + mem_flags, Core::VMAType::Reserved, "anon", false); } else { result = memory->MapFile(&addr_out, aligned_addr, aligned_size, mem_prot, mem_flags, fd, phys_addr); diff --git a/src/core/memory.h b/src/core/memory.h index db988c305..32832e03c 100644 --- a/src/core/memory.h +++ b/src/core/memory.h @@ -44,8 +44,11 @@ enum class MemoryMapFlags : u32 { Shared = 1, Private = 2, Fixed = 0x10, + Void = 0x100, NoOverwrite = 0x80, + Stack = 0x400, NoSync = 0x800, + Anon = 0x1000, NoCore = 0x20000, NoCoalesce = 0x400000, };