Trace syscall complete, kernel interface and userspace demo program
This commit is contained in:
parent
641ebb302a
commit
ca76d0772b
7 changed files with 33 additions and 1 deletions
|
@ -127,6 +127,7 @@ exec(char *path, char **argv)
|
|||
p->sz = sz;
|
||||
p->trapframe->epc = elf.entry; // initial program counter = main
|
||||
p->trapframe->sp = sp; // initial stack pointer
|
||||
p->mask = 0;
|
||||
proc_freepagetable(oldpagetable, oldsz);
|
||||
|
||||
return argc; // this ends up in a0, the first argument to main(argc, argv)
|
||||
|
|
|
@ -112,6 +112,7 @@ allocproc(void)
|
|||
struct proc *p;
|
||||
|
||||
for(p = proc; p < &proc[NPROC]; p++) {
|
||||
p->mask = 0;
|
||||
acquire(&p->lock);
|
||||
if(p->state == UNUSED) {
|
||||
goto found;
|
||||
|
@ -304,6 +305,7 @@ fork(void)
|
|||
safestrcpy(np->name, p->name, sizeof(p->name));
|
||||
|
||||
pid = np->pid;
|
||||
np->mask = 0;
|
||||
|
||||
release(&np->lock);
|
||||
|
||||
|
|
|
@ -124,6 +124,10 @@ syscall(void)
|
|||
|
||||
num = p->trapframe->a7;
|
||||
if(num > 0 && num < NELEM(syscalls) && syscalls[num]) {
|
||||
if(p->mask & (1 << num)) {
|
||||
printf("%d %s: Trace: syscall #%d\n", p->pid, p->name, 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]();
|
||||
|
|
|
@ -93,7 +93,10 @@ sys_uptime(void)
|
|||
u64
|
||||
sys_trace(void)
|
||||
{
|
||||
/* TODO: Implement sys_trace */
|
||||
int mask;
|
||||
argint(0, &mask);
|
||||
|
||||
myproc()->mask = mask;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue