summaryrefslogtreecommitdiff
path: root/kernel/src/sys
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksav013@gmail.com>2022-11-29 11:55:47 +0100
committerAleksa Vuckovic <aleksav013@gmail.com>2022-11-29 11:57:20 +0100
commitd36487d9fd2c19b54a3b97bdf3562a17184711fe (patch)
tree63c6d641925e7a78a9cb9ff89562c26b77b2bf3b /kernel/src/sys
parent450b9160fdcdb0b770b316caf1d72ab893bc7aa5 (diff)
kernel panic
Diffstat (limited to 'kernel/src/sys')
-rw-r--r--kernel/src/sys/syscall.c28
-rw-r--r--kernel/src/sys/userspace.c8
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) {
}
}