diff --git a/include/oaknut/code_block.hpp b/include/oaknut/code_block.hpp index 1c29ad0..bfa87d9 100644 --- a/include/oaknut/code_block.hpp +++ b/include/oaknut/code_block.hpp @@ -36,6 +36,10 @@ public: # else m_memory = (std::uint32_t*)mmap(nullptr, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE | MAP_JIT, -1, 0); # endif +#elif defined(__NetBSD__) + m_memory = (std::uint32_t*)mmap(nullptr, size, PROT_MPROTECT(PROT_READ | PROT_WRITE | PROT_EXEC), MAP_ANON | MAP_PRIVATE, -1, 0); +#elif defined(__OpenBSD__) + m_memory = (std::uint32_t*)mmap(nullptr, size, PROT_READ | PROT_EXEC, MAP_ANON | MAP_PRIVATE, -1, 0); #else m_memory = (std::uint32_t*)mmap(nullptr, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE, -1, 0); #endif @@ -68,23 +72,19 @@ public: void protect() { -#if defined(__APPLE__) -# if TARGET_OS_IPHONE - mprotect(m_memory, m_size, PROT_READ | PROT_EXEC); -# else +#if defined(__APPLE__) && !TARGET_OS_IPHONE pthread_jit_write_protect_np(1); -# endif +#elif defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__) + mprotect(m_memory, m_size, PROT_READ | PROT_EXEC); #endif } void unprotect() { -#if defined(__APPLE__) -# if TARGET_OS_IPHONE - mprotect(m_memory, m_size, PROT_READ | PROT_WRITE); -# else +#if defined(__APPLE__) && !TARGET_OS_IPHONE pthread_jit_write_protect_np(0); -# endif +#elif defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__) + mprotect(m_memory, m_size, PROT_READ | PROT_WRITE); #endif }