libc

my libc
git clone git://git.evenfri.xyz/libc.git
Log | Files | Refs | README

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 }