use super::thunk;
use crate::{error::Result, pic};
use std::mem;
pub const DETOUR_RANGE: usize = 0x8000_0000;
pub fn prolog_margin(_target: *const ()) -> usize {
mem::size_of::<thunk::x86::JumpRel>()
}
pub fn relay_builder(target: *const (), detour: *const ()) -> Result<Option<pic::CodeEmitter>> {
let displacement = (target as isize).wrapping_sub(detour as isize);
if cfg!(target_arch = "x86_64") && !crate::arch::is_within_range(displacement) {
let mut emitter = pic::CodeEmitter::new();
emitter.add_thunk(thunk::jmp(detour as usize));
Ok(Some(emitter))
} else {
Ok(None)
}
}