use core::arch::asm;
pub mod eno;
pub mod nr;
const MACOS_SYSCALL_PREFIX: usize = 33554432;
#[inline(always)]
pub unsafe fn syscall0(n: usize) -> (usize, bool) {
let ret: usize;
let is_err: u8;
asm!(
"syscall",
"setc dl",
lateout("dl") is_err,
inout("rax") n + MACOS_SYSCALL_PREFIX => ret,
clobber_abi("C"),
);
(ret, is_err != 0)
}
#[inline(always)]
pub unsafe fn syscall1(n: usize, a1: usize) -> (usize, bool) {
let ret: usize;
let is_err: u8;
asm!(
"syscall",
"setc dl",
lateout("dl") is_err,
inout("rax") n + MACOS_SYSCALL_PREFIX => ret,
in("rdi") a1,
clobber_abi("C"),
);
(ret, is_err != 0)
}
#[inline(always)]
pub unsafe fn syscall2(n: usize, a1: usize, a2: usize) -> (usize, bool) {
let ret: usize;
let is_err: u8;
asm!(
"syscall",
"setc dl",
lateout("dl") is_err,
inout("rax") n + MACOS_SYSCALL_PREFIX => ret,
in("rdi") a1,
in("rsi") a2,
clobber_abi("C"),
);
(ret, is_err != 0)
}
#[inline(always)]
pub unsafe fn syscall3(n: usize, a1: usize, a2: usize, a3: usize) -> (usize, bool) {
let ret: usize;
let is_err: u8;
asm!(
"syscall",
"setc dl",
lateout("dl") is_err,
inout("rax") n + MACOS_SYSCALL_PREFIX => ret,
in("rdi") a1,
in("rsi") a2,
in("rdx") a3,
clobber_abi("C"),
);
(ret, is_err != 0)
}
#[inline(always)]
pub unsafe fn syscall4(n: usize, a1: usize, a2: usize, a3: usize, a4: usize) -> (usize, bool) {
let ret: usize;
let is_err: u8;
asm!(
"syscall",
"setc dl",
lateout("dl") is_err,
inout("rax") n + MACOS_SYSCALL_PREFIX => ret,
in("rdi") a1,
in("rsi") a2,
in("rdx") a3,
in("r10") a4,
clobber_abi("C"),
);
(ret, is_err != 0)
}
#[inline(always)]
pub unsafe fn syscall5(
n: usize,
a1: usize,
a2: usize,
a3: usize,
a4: usize,
a5: usize,
) -> (usize, bool) {
let ret: usize;
let is_err: u8;
asm!(
"syscall",
"setc dl",
lateout("dl") is_err,
inout("rax") n + MACOS_SYSCALL_PREFIX => ret,
in("rdi") a1,
in("rsi") a2,
in("rdx") a3,
in("r10") a4,
in("r8") a5,
clobber_abi("C"),
);
(ret, is_err != 0)
}
#[inline(always)]
pub unsafe fn syscall6(
n: usize,
a1: usize,
a2: usize,
a3: usize,
a4: usize,
a5: usize,
a6: usize,
) -> (usize, bool) {
let ret: usize;
let is_err: u8;
asm!(
"syscall",
"setc dl",
lateout("dl") is_err,
inout("rax") n + MACOS_SYSCALL_PREFIX => ret,
in("rdi") a1,
in("rsi") a2,
in("rdx") a3,
in("r10") a4,
in("r8") a5,
in("r9") a6,
clobber_abi("C"),
);
(ret, is_err != 0)
}
#[inline(always)]
pub unsafe fn syscall0_nofail(n: usize) -> usize {
let ret: usize;
asm!(
"syscall",
inout("rax") n + MACOS_SYSCALL_PREFIX => ret,
clobber_abi("C"),
);
ret
}
#[inline(always)]
pub unsafe fn syscall1_nofail(n: usize, a1: usize) -> usize {
let ret: usize;
asm!(
"syscall",
inout("rax") n + MACOS_SYSCALL_PREFIX => ret,
in("rdi") a1,
clobber_abi("C"),
);
ret
}
#[inline(always)]
pub unsafe fn syscall2_nofail(n: usize, a1: usize, a2: usize) -> usize {
let ret: usize;
asm!(
"syscall",
inout("rax") n + MACOS_SYSCALL_PREFIX => ret,
in("rdi") a1,
in("rsi") a2,
clobber_abi("C"),
);
ret
}
#[inline(always)]
pub unsafe fn syscall3_nofail(n: usize, a1: usize, a2: usize, a3: usize) -> usize {
let ret: usize;
asm!(
"syscall",
inout("rax") n + MACOS_SYSCALL_PREFIX => ret,
in("rdi") a1,
in("rsi") a2,
in("rdx") a3,
clobber_abi("C"),
);
ret
}
#[inline(always)]
pub unsafe fn syscall4_nofail(n: usize, a1: usize, a2: usize, a3: usize, a4: usize) -> usize {
let ret: usize;
asm!(
"syscall",
inout("rax") n + MACOS_SYSCALL_PREFIX => ret,
in("rdi") a1,
in("rsi") a2,
in("rdx") a3,
in("r10") a4,
clobber_abi("C"),
);
ret
}
#[inline(always)]
pub unsafe fn syscall5_nofail(
n: usize,
a1: usize,
a2: usize,
a3: usize,
a4: usize,
a5: usize,
) -> usize {
let ret: usize;
asm!(
"syscall",
inout("rax") n + MACOS_SYSCALL_PREFIX => ret,
in("rdi") a1,
in("rsi") a2,
in("rdx") a3,
in("r10") a4,
in("r8") a5,
clobber_abi("C"),
);
ret
}
#[inline(always)]
pub unsafe fn syscall6_nofail(
n: usize,
a1: usize,
a2: usize,
a3: usize,
a4: usize,
a5: usize,
a6: usize,
) -> usize {
let ret: usize;
asm!(
"syscall",
inout("rax") n + MACOS_SYSCALL_PREFIX => ret,
in("rdi") a1,
in("rsi") a2,
in("rdx") a3,
in("r10") a4,
in("r8") a5,
in("r9") a6,
clobber_abi("C"),
);
ret
}