sp                 15 exec.c           uint argc, sz, sp, ustack[3+MAXARG+1];
sp                 69 exec.c           sp = sz;
sp                 75 exec.c             sp = (sp - (strlen(argv[argc]) + 1)) & ~3;
sp                 76 exec.c             if(copyout(pgdir, sp, argv[argc], strlen(argv[argc]) + 1) < 0)
sp                 78 exec.c             ustack[3+argc] = sp;
sp                 84 exec.c           ustack[2] = sp - (argc+1)*4;  // argv pointer
sp                 86 exec.c           sp -= (3+argc+1) * 4;
sp                 87 exec.c           if(copyout(pgdir, sp, ustack, (3+argc+1)*4) < 0)
sp                101 exec.c           curproc->tf->esp = sp;
sp                 77 proc.c           char *sp;
sp                 99 proc.c           sp = p->kstack + KSTACKSIZE;
sp                102 proc.c           sp -= sizeof *p->tf;
sp                103 proc.c           p->tf = (struct trapframe*)sp;
sp                107 proc.c           sp -= 4;
sp                108 proc.c           *(uint*)sp = (uint)trapret;
sp                110 proc.c           sp -= sizeof *p->context;
sp                111 proc.c           p->context = (struct context*)sp;