summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrsc <rsc>2007-08-08 08:38:11 +0000
committerrsc <rsc>2007-08-08 08:38:11 +0000
commit7366e042d9a7a21397115ca49c0d9344a9365ada (patch)
treeb7012b4ddb0dfbb292fe62c23bdaecb1f2616b83
parent7e89fb90bd0beb91e5d67af362d6a8a3a1b4c626 (diff)
downloadxv6-labs-7366e042d9a7a21397115ca49c0d9344a9365ada.tar.gz
xv6-labs-7366e042d9a7a21397115ca49c0d9344a9365ada.tar.bz2
xv6-labs-7366e042d9a7a21397115ca49c0d9344a9365ada.zip
save process name for debugging
-rw-r--r--proc.h1
-rw-r--r--sysfile.c10
-rw-r--r--trap.c6
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();
}