diff options
| author | rsc <rsc> | 2007-08-08 08:38:11 +0000 | 
|---|---|---|
| committer | rsc <rsc> | 2007-08-08 08:38:11 +0000 | 
| commit | 7366e042d9a7a21397115ca49c0d9344a9365ada (patch) | |
| tree | b7012b4ddb0dfbb292fe62c23bdaecb1f2616b83 | |
| parent | 7e89fb90bd0beb91e5d67af362d6a8a3a1b4c626 (diff) | |
| download | xv6-labs-7366e042d9a7a21397115ca49c0d9344a9365ada.tar.gz xv6-labs-7366e042d9a7a21397115ca49c0d9344a9365ada.tar.bz2 xv6-labs-7366e042d9a7a21397115ca49c0d9344a9365ada.zip | |
save process name for debugging
| -rw-r--r-- | proc.h | 1 | ||||
| -rw-r--r-- | sysfile.c | 10 | ||||
| -rw-r--r-- | trap.c | 6 | 
3 files changed, 12 insertions, 5 deletions
| @@ -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: @@ -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); @@ -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();      } | 
