From 7366e042d9a7a21397115ca49c0d9344a9365ada Mon Sep 17 00:00:00 2001 From: rsc Date: Wed, 8 Aug 2007 08:38:11 +0000 Subject: [PATCH] save process name for debugging --- proc.h | 1 + sysfile.c | 10 ++++++++-- trap.c | 6 +++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/proc.h b/proc.h index 3f0c006..2848ecd 100644 --- a/proc.h +++ b/proc.h @@ -40,6 +40,7 @@ struct proc { struct inode *cwd; // Current directory struct jmpbuf jmpbuf; // Jump here to run process struct trapframe *tf; // Trap frame for current interrupt + char name[16]; // Process name (debugging) }; // Process memory is laid out contiguously: diff --git a/sysfile.c b/sysfile.c index 45731f9..475c907 100644 --- a/sysfile.c +++ b/sysfile.c @@ -322,7 +322,7 @@ sys_exec(void) struct elfhdr elf; struct proghdr ph; char *mem = 0; - char *path, *s; + char *path, *s, *last; uint argv; if(argstr(0, &path) < 0 || argint(1, (int*)&argv) < 0) @@ -399,6 +399,12 @@ sys_exec(void) } *(uint*)(mem + p1) = 0; + // Save name for debugging. + for(last=s=path; *s; s++) + if(*s == '/') + last = s+1; + safestrcpy(cp->name, last, sizeof cp->name); + // commit to the new image. kfree(cp->mem, cp->sz); cp->sz = sz; @@ -419,7 +425,7 @@ sys_exec(void) } iput(ip); - + cp->tf->eip = elf.entry; cp->tf->esp = sp; setupsegs(cp); diff --git a/trap.c b/trap.c index aafaadf..0625e56 100644 --- a/trap.c +++ b/trap.c @@ -80,10 +80,10 @@ trap(struct trapframe *tf) break; default: - if(curproc[cpu()]) { + if(cp) { // Assume process divided by zero or dereferenced null, etc. - cprintf("pid %d: unhandled trap %d on cpu %d eip %x -- kill proc\n", - curproc[cpu()]->pid, v, cpu(), tf->eip); + cprintf("pid %d %s: unhandled trap %d on cpu %d eip %x -- kill proc\n", + cp->pid, cp->name, v, cpu(), tf->eip); proc_exit(); }