dobby_hook_core/
options.rs1use core::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
2
3static NEAR_TRAMPOLINE: AtomicBool = AtomicBool::new(false);
4static ALLOC_NEAR_CODE_CB: AtomicUsize = AtomicUsize::new(0);
5
6pub type AllocNearCodeCallback = unsafe fn(size: u32, pos: usize, range: usize) -> usize;
7
8pub(crate) fn near_trampoline_enabled() -> bool {
9 NEAR_TRAMPOLINE.load(Ordering::Relaxed)
10}
11
12pub(crate) fn alloc_near_code_callback() -> Option<AllocNearCodeCallback> {
13 let p = ALLOC_NEAR_CODE_CB.load(Ordering::Relaxed);
14 if p == 0 {
15 None
16 } else {
17 Some(unsafe { core::mem::transmute::<usize, AllocNearCodeCallback>(p) })
18 }
19}
20
21pub fn set_near_trampoline(enable: bool) {
22 NEAR_TRAMPOLINE.store(enable, Ordering::Relaxed);
23}
24
25pub fn register_alloc_near_code_callback(handler: Option<AllocNearCodeCallback>) {
26 ALLOC_NEAR_CODE_CB.store(handler.map_or(0, |f| f as usize), Ordering::Relaxed);
27}
28
29pub fn set_options(
30 enable_near_trampoline: bool,
31 alloc_near_code_callback: Option<AllocNearCodeCallback>,
32) {
33 set_near_trampoline(enable_near_trampoline);
34 register_alloc_near_code_callback(alloc_near_code_callback);
35}