devela/sys/os/linux/fns/syscalls/
x86_64.rs

1// devela::io::linux::fns::syscalls:x86_64
2//
3//!
4//
5// - https://arm64.syscall.sh/
6
7use super::shared_docs::*;
8use crate::{asm, c_int, c_uint, c_ulong, LinuxSigaction, LinuxTimespec, LINUX_SYS_X86_64 as SYS};
9
10#[doc = SYS_EXIT!()]
11pub unsafe fn linux_sys_exit(status: c_int) -> ! {
12    unsafe {
13        asm!(
14            "mov rax, {EXIT}",
15            "syscall",
16            EXIT = const SYS::EXIT,
17            in("rdi") status,
18            options(noreturn)
19        );
20    }
21}
22
23#[doc = SYS_READ!()]
24#[must_use]
25pub unsafe fn linux_sys_read(fd: c_int, buf: *mut u8, count: usize) -> isize {
26    let result;
27    unsafe {
28        asm!(
29            "mov rax, {READ}",
30            "syscall",
31            READ = const SYS::READ,
32            in("rdi") fd,
33            in("rsi") buf,
34            in("rdx") count,
35            lateout("rax") result,
36            lateout("rcx") _,
37            lateout("r11") _,
38            options(nostack)
39        );
40    }
41    result
42}
43
44#[doc = SYS_WRITE!()]
45#[must_use]
46pub unsafe fn linux_sys_write(fd: c_int, buf: *const u8, count: usize) -> isize {
47    let result;
48    unsafe {
49        asm!(
50            "mov rax, {WRITE}",
51            "syscall",
52            WRITE = const SYS::WRITE,
53            in("rdi") fd,
54            in("rsi") buf,
55            in("rdx") count,
56            lateout("rax") result,
57            lateout("rcx") _,
58            lateout("r11") _,
59            options(nostack)
60        );
61    }
62    result
63}
64
65#[doc = SYS_NANOSLEEP!()]
66#[must_use]
67pub unsafe fn linux_sys_nanosleep(req: *const LinuxTimespec, rem: *mut LinuxTimespec) -> isize {
68    let result;
69    unsafe {
70        asm!(
71            "mov rax, {NANOSLEEP}",
72            "syscall",
73            NANOSLEEP = const SYS::NANOSLEEP,
74            in("rdi") req,
75            in("rsi") rem,
76            lateout("rax") result,
77            lateout("rcx") _,
78            lateout("r11") _,
79            options(nostack)
80        );
81    }
82    result
83}
84
85#[doc = SYS_IOCTL!()]
86#[must_use]
87pub unsafe fn linux_sys_ioctl(fd: c_int, request: c_ulong, argp: *mut u8) -> isize {
88    let result;
89    unsafe {
90        asm!(
91            "mov rax, {IOCTL}",
92            "syscall",
93            IOCTL = const SYS::IOCTL,
94            in("rdi") fd,
95            in("rsi") request,
96            in("rdx") argp,
97            lateout("rax") result,
98            lateout("rcx") _,
99            lateout("r11") _,
100            options(nostack)
101        );
102    }
103    result
104}
105
106#[doc = SYS_GETRANDOM!()]
107#[must_use]
108pub unsafe fn linux_sys_getrandom(buffer: *mut u8, size: usize, flags: c_uint) -> isize {
109    let result;
110    unsafe {
111        asm!(
112            "mov rax, {GETRANDOM}",
113            "syscall",
114            GETRANDOM = const SYS::GETRANDOM,
115            in("rdi") buffer,
116            in("rsi") size,
117            in("rdx") flags,
118            lateout("rax") result,
119            lateout("rcx") _,
120            lateout("r11") _,
121            options(nostack)
122        );
123    }
124    result
125}
126
127#[doc = SYS_GETPID!()]
128#[must_use]
129pub unsafe fn linux_sys_getpid() -> i32 {
130    let result: isize;
131    unsafe {
132        asm!(
133            "mov rax, {GETPID}",
134            "syscall",
135            GETPID = const SYS::GETPID,
136            lateout("rax") result,
137            options(nostack)
138        );
139    }
140    result as i32
141}
142
143#[doc = SYS_RT_SIGACTION!()]
144#[must_use]
145pub unsafe fn linux_sys_rt_sigaction(
146    sig: c_int,
147    act: *const LinuxSigaction,
148    oact: *mut LinuxSigaction,
149    sigsetsize: usize,
150) -> isize {
151    let result;
152    unsafe {
153        asm!(
154            "mov rax, {RT_SIGACTION}",
155            "syscall",
156            RT_SIGACTION = const SYS::RT_SIGACTION,
157            in("rdi") sig,
158            in("rsi") act,
159            in("rdx") oact,
160            in("r10") sigsetsize,
161            lateout("rax") result,
162            lateout("rcx") _,
163            lateout("r11") _,
164            options(nostack)
165        );
166    }
167    result
168}