summaryrefslogtreecommitdiff
path: root/src/kernel/syscalls.c
diff options
context:
space:
mode:
authordzwdz2021-07-21 21:35:20 +0200
committerdzwdz2021-07-21 21:35:20 +0200
commit8a168f2be5d90f972975abf0b40145a75c0231b7 (patch)
treecdfcd84a132a6a9864b01b626cc670e9caf7c4ef /src/kernel/syscalls.c
parent36089d20ca1f7c57f36c4172759a5084bdf87a3a (diff)
syscall parameter & return value passing
Sadly, sysenter on i386 limits me to only 4 arguments (so, 1 for the syscall id + 3 real args). If that turns out to be an issue I'll either just switch to interrupts, or switch to x64.
Diffstat (limited to 'src/kernel/syscalls.c')
-rw-r--r--src/kernel/syscalls.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/kernel/syscalls.c b/src/kernel/syscalls.c
index 25b8eb5..a42dc44 100644
--- a/src/kernel/syscalls.c
+++ b/src/kernel/syscalls.c
@@ -1,6 +1,15 @@
#include <kernel/arch/generic.h>
#include <kernel/panic.h>
-void syscall_handler() {
+int syscall_handler(int a, int b, int c, int d) {
+ // verify that the parameters get passed correctly
+ if (a != 1) panic();
+ if (b != 2) panic();
+ if (c != 3) panic();
+ if (d != 4) panic();
+
log_const("in a syscall!");
+
+ // used to check if the return value gets passed correctly
+ return 0x4e;
}