userspace/target/architecture/x86_64/syscall/
syscall6.rs

1use super::result::*;
2
3#[inline(always)]
4#[rustfmt::skip]
5pub fn syscall6(n: usize, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize, a6: usize)-> crate::Result {
6    let syscall_return: usize;
7
8    unsafe {
9        core::arch::asm!(
10            "syscall",
11            inlateout("rax") n => syscall_return,
12            in("rdi") a1,
13            in("rsi") a2,
14            in("rdx") a3,
15            in("r10") a4,
16            in("r8") a5,
17            in("r9") a6,
18            out("rcx") _,
19            out("r11") _,
20        );
21    }
22
23    handle_result(syscall_return)
24}
25
26pub mod ok {
27    ample::result!(
28        Ok;
29        "Human Ok";
30        usize;
31        [
32            [0; X86_64_SYSCALL1_OK; Default; usize; "ZE"; "Entry to ze"],
33        ]
34    );
35
36    impl Ok {
37        pub fn from_no(no: usize) -> Self {
38            Ok::Default(no)
39        }
40    }
41}
42
43pub mod error {
44    ample::result!(
45        Error;
46        "Human error";
47        usize;
48        [
49            [0; X86_64_SYSCALL1_ERROR; Default; usize; "ZE"; "Entry to ze"],
50        ]
51    );
52
53    impl Error {
54        pub fn from_no(no: usize) -> Self {
55            Error::Default(no)
56        }
57    }
58}
59
60pub use error::Error;
61pub use ok::Ok;
62
63pub type Result = core::result::Result<Ok, Error>;
64
65pub fn handle_result(result: usize) -> crate::Result {
66    if (result as isize) < 0 {
67        core::result::Result::Err(crate::Error::Target(crate::target::Error::Arch(
68            crate::target::arch::Error::X86_64Syscall(
69                crate::target::arch::syscall::Error::X86_64Syscall6(Error::Default(result)),
70            ),
71        )))
72    } else {
73        core::result::Result::Ok(crate::Ok::Target(crate::target::Ok::Arch(
74            crate::target::arch::Ok::X86_64Syscall(
75                crate::target::arch::syscall::Ok::X86_64Syscall6(Ok::Default(result)),
76            ),
77        )))
78    }
79}