aboutsummaryrefslogtreecommitdiff
path: root/mirai.old/asm/syscall.zig
blob: 7c0ee1974b02767e3a47a4c4a3cfa73ee0552372 (plain)
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;
}