#[cfg(not(any(
target_arch = "x86",
target_arch = "x86_64",
)))]
compile_error!("Target architecture not supported.");
pub mod x86;
pub mod x86_64;
#[cfg(doctest)]
pub mod native {
pub use super::x86_64::*;
}
#[cfg(all(not(doctest), target_arch = "x86"))]
pub mod native {
pub use super::x86::*;
}
#[cfg(all(not(doctest), target_arch = "x86_64"))]
pub mod native {
pub use super::x86_64::*;
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn native_check() {
assert_ne!(native::nr::EXIT, 0);
}
#[test]
fn arch_availability() {
assert_eq!(x86::nr::EXIT, 1);
assert_eq!(x86_64::nr::EXIT, 60);
}
#[test]
fn syscall_check() {
let s0: unsafe fn(
usize,
) -> usize = native::syscall::syscall0;
let s1: unsafe fn(
usize,
usize,
) -> usize = native::syscall::syscall1;
let s2: unsafe fn(
usize,
usize,
usize,
) -> usize = native::syscall::syscall2;
let s3: unsafe fn(
usize,
usize,
usize,
usize,
) -> usize = native::syscall::syscall3;
let s4: unsafe fn(
usize,
usize,
usize,
usize,
usize,
) -> usize = native::syscall::syscall4;
let s5: unsafe fn(
usize,
usize,
usize,
usize,
usize,
usize,
) -> usize = native::syscall::syscall5;
let s6: unsafe fn(
usize,
usize,
usize,
usize,
usize,
usize,
usize,
) -> usize = native::syscall::syscall6;
assert_ne!(s0 as *const () as usize, 0);
assert_ne!(s1 as *const () as usize, 0);
assert_ne!(s2 as *const () as usize, 0);
assert_ne!(s3 as *const () as usize, 0);
assert_ne!(s4 as *const () as usize, 0);
assert_ne!(s5 as *const () as usize, 0);
assert_ne!(s6 as *const () as usize, 0);
}
}