diff options
Diffstat (limited to 'kernel/src/sys')
| -rw-r--r-- | kernel/src/sys/syscall.c | 28 | ||||
| -rw-r--r-- | kernel/src/sys/userspace.c | 8 |
2 files changed, 33 insertions, 3 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); } 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 <types.h> #include <userspace.h> +#include <libk/stdio.h> +#include <libk/string.h> 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) { } } |
