pagetable lab initialized
This commit is contained in:
@@ -7,11 +7,6 @@
|
||||
#include "syscall.h"
|
||||
#include "defs.h"
|
||||
|
||||
// 保留系统调用别名
|
||||
char* syscalls_name[25] = {"", "fork", "exit", "wait", "pipe", "read", "kill", "exec",
|
||||
"fstat", "chdir", "dup", "getpid", "sbrk", "sleep", "uptime",
|
||||
"open", "write", "mknod", "unlink", "link", "mkdir", "close", "trace", "sysinfo"};
|
||||
|
||||
// Fetch the uint64 at addr from the current process.
|
||||
int
|
||||
fetchaddr(uint64 addr, uint64 *ip)
|
||||
@@ -106,8 +101,17 @@ extern uint64 sys_unlink(void);
|
||||
extern uint64 sys_link(void);
|
||||
extern uint64 sys_mkdir(void);
|
||||
extern uint64 sys_close(void);
|
||||
extern uint64 sys_trace(void);
|
||||
extern uint64 sys_sysinfo(void);
|
||||
|
||||
#ifdef LAB_NET
|
||||
extern uint64 sys_bind(void);
|
||||
extern uint64 sys_unbind(void);
|
||||
extern uint64 sys_send(void);
|
||||
extern uint64 sys_recv(void);
|
||||
#endif
|
||||
#ifdef LAB_PGTBL
|
||||
extern uint64 sys_pgpte(void);
|
||||
extern uint64 sys_kpgtbl(void);
|
||||
#endif
|
||||
|
||||
// An array mapping syscall numbers from syscall.h
|
||||
// to the function that handles the system call.
|
||||
@@ -133,10 +137,20 @@ static uint64 (*syscalls[])(void) = {
|
||||
[SYS_link] sys_link,
|
||||
[SYS_mkdir] sys_mkdir,
|
||||
[SYS_close] sys_close,
|
||||
[SYS_trace] sys_trace,
|
||||
[SYS_sysinfo] sys_sysinfo,
|
||||
#ifdef LAB_NET
|
||||
[SYS_bind] sys_bind,
|
||||
[SYS_unbind] sys_unbind,
|
||||
[SYS_send] sys_send,
|
||||
[SYS_recv] sys_recv,
|
||||
#endif
|
||||
#ifdef LAB_PGTBL
|
||||
[SYS_pgpte] sys_pgpte,
|
||||
[SYS_kpgtbl] sys_kpgtbl,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
||||
void
|
||||
syscall(void)
|
||||
{
|
||||
@@ -148,12 +162,6 @@ syscall(void)
|
||||
// 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]();
|
||||
if (p->tracemask & (1 << num)) {
|
||||
p->syscall_counts[num]++;
|
||||
printf("%d: syscall %s(trace counts: %d) -> %d\n",
|
||||
p->pid, syscalls_name[num], p->syscall_counts[num], p->trapframe->a0);
|
||||
printf("a1:%d a2:%d a3:%d a4:%d a5:%d a6:%d a7:%d\n",p->trapframe->a1,p->trapframe->a2,p->trapframe->a3,p->trapframe->a4,p->trapframe->a5,p->trapframe->a6,p->trapframe->a7);
|
||||
}
|
||||
} else {
|
||||
printf("%d %s: unknown sys call %d\n",
|
||||
p->pid, p->name, num);
|
||||
|
||||
Reference in New Issue
Block a user