diff options
Diffstat (limited to 'syscall.c')
-rw-r--r-- | syscall.c | 50 |
1 files changed, 50 insertions, 0 deletions
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; + } +} |