diff options
Diffstat (limited to 'src/sys/arch/amd64/cpu/trap.c')
-rw-r--r-- | src/sys/arch/amd64/cpu/trap.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/sys/arch/amd64/cpu/trap.c b/src/sys/arch/amd64/cpu/trap.c index 046263b..6ddc079 100644 --- a/src/sys/arch/amd64/cpu/trap.c +++ b/src/sys/arch/amd64/cpu/trap.c @@ -36,6 +36,7 @@ #include <sys/cdefs.h> #include <sys/panic.h> #include <sys/syslog.h> +#include <sys/syscall.h> #include <machine/trap.h> /* @@ -146,6 +147,24 @@ trapframe_dump(struct trapframe *tf) } void +trap_syscall(struct trapframe *tf) +{ + struct syscall_args scargs = { + .arg[0] = tf->rdi, + .arg[1] = tf->rsi, + .arg[2] = tf->rdx, + .arg[3] = tf->r10, + .arg[4] = tf->r9, + .arg[5] = tf->r8, + .tf = tf + }; + + if (tf->rax < MAX_SYSCALLS && tf->rax > 0) { + tf->rax = g_sctab[tf->rax](&scargs); + } +} + +void trap_handler(struct trapframe *tf) { trapframe_dump(tf); |