diff options
| -rw-r--r-- | kernel/syscall.c | 5 | 
1 files changed, 5 insertions, 0 deletions
| diff --git a/kernel/syscall.c b/kernel/syscall.c index ee94696..ed65409 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -79,6 +79,7 @@ argstr(int n, char *buf, int max)    return fetchstr(addr, buf, max);  } +// Prototypes for the functions that handle system calls.  extern uint64 sys_fork(void);  extern uint64 sys_exit(void);  extern uint64 sys_wait(void); @@ -101,6 +102,8 @@ extern uint64 sys_link(void);  extern uint64 sys_mkdir(void);  extern uint64 sys_close(void); +// An array mapping syscall numbers from syscall.h +// to the function that handles the system call.  static uint64 (*syscalls[])(void) = {  [SYS_fork]    sys_fork,  [SYS_exit]    sys_exit, @@ -133,6 +136,8 @@ syscall(void)    num = p->trapframe->a7;    if(num > 0 && num < NELEM(syscalls) && syscalls[num]) { +    // Use num to lookup the system call function for num, call it, +    // and store its return value in p->trapframe->a0      p->trapframe->a0 = syscalls[num]();    } else {      printf("%d %s: unknown sys call %d\n", | 
