95 lines
2.3 KiB
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;
|
|
} |