23 lines
541 B
Rust
23 lines
541 B
Rust
![]() |
#[naked]
|
||
|
pub unsafe extern fn syscall() {
|
||
|
extern {
|
||
|
fn syscall(a: usize, b: usize, c: usize, d: usize, e: usize, f: usize) -> usize;
|
||
|
}
|
||
|
|
||
|
let a;
|
||
|
let b;
|
||
|
let c;
|
||
|
let d;
|
||
|
let e;
|
||
|
let f;
|
||
|
asm!("" : "={rax}"(a), "={rbx}"(b), "={rcx}"(c), "={rdx}"(d), "={rsi}"(e), "={rdi}"(f)
|
||
|
: : : "intel", "volatile");
|
||
|
|
||
|
let a = syscall(a, b, c, d, e, f);
|
||
|
|
||
|
asm!("" : : "{rax}"(a) : : "intel", "volatile");
|
||
|
|
||
|
// Pop scratch registers, error code, and return
|
||
|
asm!("iretq" : : : : "intel", "volatile");
|
||
|
}
|