mittos64-old/libc/syscalls.c

54 lines
1.2 KiB
C

#include <stdarg.h>
#include <stdio.h>
#include "syscalls.h"
long kernel_syscall(int num, ...)
{
va_list varg;
va_start(varg, num);
long a1 = va_arg(varg, long);
long a2 = va_arg(varg, long);
long a3 = va_arg(varg, long);
register long r10 __asm__("r10") = va_arg(varg, long);
register long r8 __asm__("r8") = va_arg(varg, long);
register long r9 __asm__("r9") = va_arg(varg, long);
va_end(varg);
long ret;
__asm__ __volatile__("syscall" : "=a" (ret) : "a" (num), "D" (a1), "S" (a2), "d" (a3), "r" (r10), "r" (r8), "r" (r9) : "rcx", "r11", "memory");
return ret;
}
char debug_buffer[256];
void kernel_debug(char *fmt, ...)
{
va_list varg;
va_start(varg, fmt);
vsprintf(debug_buffer, fmt, varg);
va_end(varg);
kernel_syscall(SYS_DEBUG, (long)debug_buffer);
}
long __syscall_common(long num, ...)
{
va_list varg;
va_start(varg, num);
long a1 = va_arg(varg, long);
long a2 = va_arg(varg, long);
long a3 = va_arg(varg, long);
long a4 = va_arg(varg, long);
long a5 = va_arg(varg, long);
long a6 = va_arg(varg, long);
va_end(varg);
kernel_debug("==> SYSCALL %ld (%lx, %lx, %lx, %lx, %lx, %lx)\n", num, a1, a2, a3, a4, a5, a6);
while(1);
return 0;
}
struct pthread *__pthread_self()
{
return 0;
}