Skip to main content

luaur_code_gen/functions/
make_pages_executable_code_allocator.rs

1use crate::macros::codegen_assert::CODEGEN_ASSERT;
2use crate::records::code_allocator::CodeAllocator;
3use core::ffi::c_void;
4
5#[cfg(target_os = "windows")]
6use windows_sys::Win32::System::Memory::{VirtualProtect, PAGE_EXECUTE_READ};
7
8#[allow(non_snake_case)]
9pub fn make_pages_executable(mem: *mut u8, size: usize) -> bool {
10    CODEGEN_ASSERT!(CodeAllocator::align_to_page_size(mem as usize) == mem as usize);
11    CODEGEN_ASSERT!(size == CodeAllocator::align_to_page_size(size));
12
13    #[cfg(target_os = "windows")]
14    {
15        let mut old_protect: u32 = 0;
16        unsafe {
17            VirtualProtect(
18                mem as *const c_void,
19                size,
20                PAGE_EXECUTE_READ,
21                &mut old_protect,
22            ) != 0
23        }
24    }
25
26    #[cfg(not(target_os = "windows"))]
27    {
28        unsafe {
29            crate::functions::make_pages_executable_code_allocator_alt_b::make_pages_executable_mut(
30                mem, size,
31            )
32        }
33    }
34}