#include #include syscall_handler syscall_handlers[440] = { [SYSCALL_BRK] = k_brk, [SYSCALL_IOCTL] = k_ioctl, [SYSCALL_WRITEV] = k_writev, [SYSCALL_SCHED_YIELD] = k_sched_yield, [SYSCALL_MMAP] = k_mmap, }; syscall_handler set_syscall_handler(long num, syscall_handler handler) { syscall_handler old = syscall_handlers[num]; syscall_handlers[num] = handler; return old; } long syscall0(long num) { long retval = 0; if(syscall_handlers[num]) retval = syscall_handlers[num](0, 0, 0, 0, 0, 0); else PANIC("Unknown syscall: %d()\n", num); return retval; } long syscall1(long num, long a1) { long retval = 0; if(syscall_handlers[num]) retval = syscall_handlers[num](a1, 0, 0, 0, 0, 0); else PANIC("Unknown syscall: %d(%x)\n", num, a1); return retval; } long syscall2(long num, long a1, long a2) { long retval = 0; if(syscall_handlers[num]) retval = syscall_handlers[num](a1, a2, 0, 0, 0, 0); else PANIC("Unknown syscall: %d(%x, %x)\n", num, a1, a2); return retval; } long syscall3(long num, long a1, long a2, long a3) { long retval = 0; if(syscall_handlers[num]) retval = syscall_handlers[num](a1, a2, a3, 0, 0, 0); else PANIC("Unknown syscall: %d(%x, %x, %x)\n", num, a1, a2, a3); return retval; } long syscall4(long num, long a1, long a2, long a3, long a4) { long retval = 0; if(syscall_handlers[num]) retval = syscall_handlers[num](a1, a2, a3, a4, 0, 0); else PANIC("Unknown syscall: %d(%x, %x, %x, %x)\n", num, a1, a2, a3, a4); return retval; } long syscall5(long num, long a1, long a2, long a3, long a4, long a5) { long retval = 0; if(syscall_handlers[num]) retval = syscall_handlers[num](a1, a2, a3, a4, a5, 0); else PANIC("Unknown syscall: %d(%x, %x, %x, %x, %x)\n", num, a1, a2, a3, a4, a5); return retval; } long syscall6(long num, long a1, long a2, long a3, long a4, long a5, long a6) { long retval = 0; if(syscall_handlers[num]) retval = syscall_handlers[num](a1, a2, a3, a4, a5, a6); else PANIC("Unknown syscall: %d(%x, %x, %x, %x, %x, %x)\n", num, a1, a2, a3, a4, a5, a6); return retval; } size_t auxv[] = {0}; void musl_init() { __libc.auxv = auxv; }