devela/sys/os/linux/fns/syscalls/
x86_64.rs
1use 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}