From 8de238adcda4e814502ddc53ba830fc1bd8e83c3 Mon Sep 17 00:00:00 2001 From: tevador Date: Mon, 30 Nov 2020 11:04:17 +0100 Subject: [PATCH] Faster W^X policy for apple silicon macs --- src/virtual_memory.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/virtual_memory.cpp b/src/virtual_memory.cpp index 2f3ee39..1a32f5f 100644 --- a/src/virtual_memory.cpp +++ b/src/virtual_memory.cpp @@ -35,6 +35,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #else #ifdef __APPLE__ #include +#include +#include #endif #include #include @@ -129,11 +131,19 @@ static inline void pageProtect(void* ptr, std::size_t bytes, int rules) { } void setPagesRW(void* ptr, std::size_t bytes) { +#if defined(__APPLE__) && defined(__aarch64__) && TARGET_OS_OSX + pthread_jit_write_protect_np(false); +#else pageProtect(ptr, bytes, PAGE_READWRITE); +#endif } void setPagesRX(void* ptr, std::size_t bytes) { +#if defined(__APPLE__) && defined(__aarch64__) && TARGET_OS_OSX + pthread_jit_write_protect_np(true); +#else pageProtect(ptr, bytes, PAGE_EXECUTE_READ); +#endif } void setPagesRWX(void* ptr, std::size_t bytes) {