luaur_code_gen/functions/
make_pages_executable_code_allocator.rs1use 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}