diff options
Diffstat (limited to 'kernel/src/sys/syscall.c')
| -rw-r--r-- | kernel/src/sys/syscall.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/kernel/src/sys/syscall.c b/kernel/src/sys/syscall.c index 7f0e492..c526e39 100644 --- a/kernel/src/sys/syscall.c +++ b/kernel/src/sys/syscall.c @@ -1,9 +1,35 @@ #include <libk/stdio.h> #include <syscall.h> +#include <libk/string.h> +#include <heap.h> void syscall_handler() { uint64_t rax; + uint64_t rdi; + uint64_t rsi; __asm__ volatile ("mov %%rax, %0;" : "=r"(rax) : :); - printf("syscall invoked with rax=0x%x\n", rax); + __asm__ volatile ("mov %%rdi, %0;" : "=r"(rdi) : :); + __asm__ volatile ("mov %%rsi, %0;" : "=r"(rsi) : :); + switch(rax) { + case SYSCALL_READ: + syscall_read(); + break; + case SYSCALL_WRITE: + syscall_write((char*)rdi, rsi); + break; + default: + printf("invalid syscall (%d)\n", rax); + } +} + +void syscall_read() +{ + printf("syscall_read()\n"); +} + +void syscall_write(char* buff, size_t count) +{ + printf("syscall_write()\n"); + printf("buff = 0x%x, count = %d\n", buff, count); } |
