From d36487d9fd2c19b54a3b97bdf3562a17184711fe Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Tue, 29 Nov 2022 11:55:47 +0100 Subject: kernel panic --- kernel/src/sys/syscall.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'kernel/src/sys/syscall.c') 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 #include +#include +#include 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); } -- cgit v1.2.3