1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
//! System Call Operations
//! Wrappers for userspace-kernel communication
/// Invoke system call with up to 6 parameters
/// Always sets all 6 parameter registers (unused ones are zero)
pub inline fn invoke_syscall(
number: u64,
param0: u64,
param1: u64,
param2: u64,
param3: u64,
param4: u64,
param5: u64,
) u64 {
var result: u64 = undefined;
asm volatile ("syscall"
: [ret] "={rax}" (result),
: [num] "{rax}" (number),
[p0] "{rdi}" (param0),
[p1] "{rsi}" (param1),
[p2] "{rdx}" (param2),
[p3] "{r10}" (param3),
[p4] "{r8}" (param4),
[p5] "{r9}" (param5),
: .{ .rcx = true, .r11 = true, .memory = true });
return result;
}
|