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 +++++++++++++++++++++++++++- kernel/src/sys/userspace.c | 8 ++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) (limited to 'kernel/src/sys') 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); } diff --git a/kernel/src/sys/userspace.c b/kernel/src/sys/userspace.c index 111180a..fc89746 100644 --- a/kernel/src/sys/userspace.c +++ b/kernel/src/sys/userspace.c @@ -1,11 +1,15 @@ #include #include +#include +#include void begin_userspace() { + // read + __asm__ volatile ("mov $0x0, %rax; syscall;"); + // write __asm__ volatile ("mov $0x1, %rax; syscall;"); - __asm__ volatile ("mov $0x11, %rax; syscall;"); - __asm__ volatile ("mov $0x111, %rax; syscall;"); + while(true) { } } -- cgit v1.2.3