aboutsummaryrefslogtreecommitdiff
path: root/src/kernel/syscall/syscall.c
diff options
context:
space:
mode:
authorMarvin Borner2019-12-04 22:15:27 +0100
committerMarvin Borner2019-12-04 22:15:27 +0100
commit3e14c632b3b9c39d27693f2538f377fb52de193a (patch)
tree688b7e365560ca61485a54a4576a61982c8c5f29 /src/kernel/syscall/syscall.c
parented3da12bb378d82878fff1d50e5e9e7af3d7265d (diff)
Fully working syscall interface
Diffstat (limited to 'src/kernel/syscall/syscall.c')
-rw-r--r--src/kernel/syscall/syscall.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/kernel/syscall/syscall.c b/src/kernel/syscall/syscall.c
index 08b4d49..0eac619 100644
--- a/src/kernel/syscall/syscall.c
+++ b/src/kernel/syscall/syscall.c
@@ -5,13 +5,20 @@
typedef uint32_t (*syscall_func)(unsigned int, ...);
+uint32_t (*syscalls[])() = {
+ [1] = sys_write
+};
+
void syscall_handler(struct regs *r)
{
+ if (r->eax >= sizeof(syscalls) / sizeof(*syscalls))
+ return;
+
+ syscall_func location = (syscall_func) syscalls[r->eax];
+ if (!location)
+ return;
+
serial_write("Received syscall!\n");
- serial_write_dec(r->eax);
- serial_write("\n");
- serial_write_dec(r->ecx);
- syscall_func location = (syscall_func) sys_write;
location(r->ebx, r->ecx, r->edx, r->esi, r->edi);
}