syscall.c (792B)
1 /* 2 * syscall.c - syscalls wrapper 3 * Copyright (C) 2026. All rights reserved. 4 */ 5 6 #include <stdarg.h> 7 #include "libc.h" 8 9 static inline long call(long n, long a1, long a2, long a3, long a4, long a5, long a6) 10 { 11 unsigned long ret; 12 13 register long r10 __asm__("r10") = a4; 14 register long r8 __asm__("r8") = a5; 15 register long r9 __asm__("r9") = a6; 16 17 __asm__ __volatile__ ("syscall" : "=a"(ret) : "a"(n), "D"(a1), "S"(a2), 18 "d"(a3), "r"(r10), "r"(r8), "r"(r9) : "rcx", "r11", "memory"); 19 20 return ret; 21 } 22 23 long syscall(long num, ...) { 24 va_list valist; 25 long args[6] = {0, 0, 0, 0, 0, 0}; 26 27 va_start(valist, num); 28 for (int i = 0; i < 6; i++) { 29 args[i] = va_arg(valist, long); 30 } 31 va_end(valist); 32 33 return call(num, args[0], args[1], args[2], args[3], args[4], args[5]); 34 }