sp                 15 exec.c           uint argc, sz, sp, ustack[3+MAXARG+1];
sp                 62 exec.c           sp = sz;
sp                 68 exec.c             sp = (sp - (strlen(argv[argc]) + 1)) & ~3;
sp                 69 exec.c             if(copyout(pgdir, sp, argv[argc], strlen(argv[argc]) + 1) < 0)
sp                 71 exec.c             ustack[3+argc] = sp;
sp                 77 exec.c           ustack[2] = sp - (argc+1)*4;  // argv pointer
sp                 79 exec.c           sp -= (3+argc+1) * 4;
sp                 80 exec.c           if(copyout(pgdir, sp, ustack, (3+argc+1)*4) < 0)
sp                 94 exec.c           proc->tf->esp = sp;
sp                 38 proc.c           char *sp;
sp                 57 proc.c           sp = p->kstack + KSTACKSIZE;
sp                 60 proc.c           sp -= sizeof *p->tf;
sp                 61 proc.c           p->tf = (struct trapframe*)sp;
sp                 65 proc.c           sp -= 4;
sp                 66 proc.c           *(uint*)sp = (uint)trapret;
sp                 68 proc.c           sp -= sizeof *p->context;
sp                 69 proc.c           p->context = (struct context*)sp;