Skip to main content

kolibrios_syscalls/
lib.rs

1#![no_std]
2#![cfg(any(target_arch = "x86", doc))]
3
4mod raw;
5pub use raw::*;
6
7///
8///
9///
10///
11///
12
13
14/// Runs a sysfunc (syscall). All arguments are u32: argument 1 is eax, 2 is ebx, 3 is ecx, etc.
15/// Returns (u32, u32) with (eax, ebx).
16///
17///
18/// Example:
19/// ```rust
20/// fn kolibrios_exit() -> ! {
21///     unsafe {
22///         syscall!(u32::MAX);
23///         unreachable!()
24///     }
25/// }
26/// ```
27///
28/// Using returned value(s):
29/// ```rust
30/// use core::ffi::c_void;
31/// unsafe fn malloc(size: u32) -> *mut c_void {
32///
33///     let eax; 
34///     unsafe {
35///         // Sysfunc 68.12, allocate memory block
36///         eax = syscall!(68, 12, size).0
37///     }
38///     eax as *mut c_void
39/// }
40/// ```
41#[macro_export]
42macro_rules! syscall {
43    ($eax:expr) => {
44        $crate::syscall1(
45            $eax as u32,
46        )
47    };
48
49
50    ($eax:expr, $ebx:expr) => {
51        $crate::syscall2(
52            $eax as u32,
53            $ebx as u32,
54        )
55    };
56
57    ($eax:expr, $ebx:expr, $ecx:expr) => {
58        $crate::syscall3(
59            $eax as u32,
60            $ebx as u32,
61            $ecx as u32,
62        )
63    };
64
65
66    ($eax:expr, $ebx:expr, $ecx:expr, $edx:expr) => {
67        $crate::syscall4(
68            $eax as u32,
69            $ebx as u32,
70            $ecx as u32,
71            $edx as u32,
72        )
73    };
74
75
76    ($eax:expr, $ebx:expr, $ecx:expr, $edx:expr, $esi:expr) => {
77
78        $crate::syscall5(
79            $eax as u32,
80            $ebx as u32,
81            $ecx as u32,
82            $edx as u32,
83            $esi as u32,
84        )
85    };
86
87    ($eax:expr, $ebx:expr, $ecx:expr, $edx:expr, $esi:expr, $edi:expr) => {
88        $crate::syscall6(
89            $eax as u32,
90            $ebx as u32,
91            $ecx as u32,
92            $edx as u32,
93            $esi as u32,
94            $edi as u32,
95        )
96    };
97
98    ($eax:expr, $ebx:expr, $ecx:expr, $edx:expr, $esi:expr, $edi:expr, $ebp:expr) => {
99        $crate::syscall7(
100            $eax as u32,
101            $ebx as u32,
102            $ecx as u32,
103            $edx as u32,
104            $esi as u32,
105            $edi as u32,
106            $ebp as u32,
107        )
108    };
109
110}