From a4c03dea09b7b5f2463147e979d20b035b81de96 Mon Sep 17 00:00:00 2001 From: rtm Date: Thu, 15 Jun 2006 16:02:20 +0000 Subject: primitive fork and exit system calls --- syscall.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 syscall.c (limited to 'syscall.c') diff --git a/syscall.c b/syscall.c new file mode 100644 index 0000000..9cb20dc --- /dev/null +++ b/syscall.c @@ -0,0 +1,50 @@ +#include "types.h" +#include "param.h" +#include "mmu.h" +#include "proc.h" +#include "defs.h" +#include "x86.h" +#include "traps.h" +#include "syscall.h" + +/* + * User code makes a system call with INT T_SYSCALL. + * System call number in %eax. + * Arguments on the stack. + * + * Return value? Error indication? Errno? + */ + +void +sys_fork() +{ + newproc(); +} + +void +sys_exit() +{ + curproc->state = UNUSED; + // XXX free resources. notify parent. abandon children. + swtch(); +} + +void +syscall() +{ + int num = curproc->tf->tf_regs.reg_eax; + + cprintf("%x sys %d\n", curproc, num); + switch(num){ + case SYS_fork: + sys_fork(); + break; + case SYS_exit: + sys_exit(); + break; + default: + cprintf("unknown sys call %d\n", num); + // XXX fault + break; + } +} -- cgit v1.2.3