提交 2ea6c764 创建 作者: Robert Morris's avatar Robert Morris

even more fabulous exec

上级 06feabec
...@@ -81,30 +81,19 @@ exec(char *path, char **argv) ...@@ -81,30 +81,19 @@ exec(char *path, char **argv)
copyout(pgdir, sp, argv[i], strlen(argv[i]) + 1); copyout(pgdir, sp, argv[i], strlen(argv[i]) + 1);
} }
// push 0 for argv[argc] #define PUSH(x) { int xx = (int)(x); sp -= 4; copyout(pgdir, sp, &xx, 4); }
sp -= 4;
int zero = 0; PUSH(0); // argv[argc] is zero
copyout(pgdir, sp, &zero, 4);
// push argv[] elements // push argv[] elements
for(i = argc - 1; i >= 0; --i){ for(i = argc - 1; i >= 0; --i)
sp -= 4; PUSH(strings[i]);
copyout(pgdir, sp, &strings[i], 4);
}
// push argv PUSH(sp); // argv
uint argvaddr = sp;
sp -= 4;
copyout(pgdir, sp, &argvaddr, 4);
// push argc PUSH(argc);
sp -= 4;
copyout(pgdir, sp, &argc, 4);
// push 0 in case main returns PUSH(0xffffffff); // in case main tries to return
sp -= 4;
uint ffffffff = 0xffffffff;
copyout(pgdir, sp, &ffffffff, 4);
if(sp < sz - PGSIZE) if(sp < sz - PGSIZE)
goto bad; goto bad;
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论