mittos65/src/kernel/lib/musl-glue.c

95 lines
2.3 KiB
C

#include <musl-glue.h>
#include <debug.h>
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;
}