From 86942b3ba86bbff20485d3c2a3bbc44c83353a02 Mon Sep 17 00:00:00 2001 From: DH Date: Sun, 17 Nov 2024 15:07:53 +0300 Subject: [PATCH] linker: fix map flags --- rpcsx/linker.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/rpcsx/linker.cpp b/rpcsx/linker.cpp index c9dd11077..7d71b24d6 100644 --- a/rpcsx/linker.cpp +++ b/rpcsx/linker.cpp @@ -862,8 +862,19 @@ Ref rx::linker::loadModule(std::span image, phdr.p_flags |= vm::kMapProtCpuWrite; // TODO: reprotect on relocations } - vm::protect(imageBase + segmentBegin, segmentSize, - phdr.p_flags & (vm::kMapProtCpuAll | vm::kMapProtGpuAll)); + int mapFlags = 0; + + if (phdr.p_flags & PF_X) { + mapFlags |= vm::kMapProtCpuExec; + } + if (phdr.p_flags & PF_W) { + mapFlags |= vm::kMapProtCpuWrite; + } + if (phdr.p_flags & PF_R) { + mapFlags |= vm::kMapProtCpuRead; + } + + vm::protect(imageBase + segmentBegin, segmentSize, mapFlags); if (phdr.p_type == kElfProgramTypeLoad) { if (result->segmentCount >= std::size(result->segments)) {