summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAustin Clements <[email protected]>2011-09-02 15:27:41 -0400
committerAustin Clements <[email protected]>2011-09-02 15:27:41 -0400
commit5a97613bab27b3bf5f94d1ebc815be92f1e1a7c2 (patch)
tree251feeb2b1615c3cf9e6ced9fd0d086835f978bf
parent4e015d81aabb19d319fa73f2da11cd6b7ca5c2c3 (diff)
downloadxv6-labs-5a97613bab27b3bf5f94d1ebc815be92f1e1a7c2.tar.gz
xv6-labs-5a97613bab27b3bf5f94d1ebc815be92f1e1a7c2.tar.bz2
xv6-labs-5a97613bab27b3bf5f94d1ebc815be92f1e1a7c2.zip
Fit exec on a page. Again
-rw-r--r--exec.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/exec.c b/exec.c
index 4be65a4..629c433 100644
--- a/exec.c
+++ b/exec.c
@@ -50,8 +50,7 @@ exec(char *path, char **argv)
ip = 0;
// Allocate two pages at the next page boundary.
- // Make the first inaccessible.
- // Use the second as the user stack.
+ // Make the first inaccessible. Use the second as the user stack.
sz = PGROUNDUP(sz);
if((sz = allocuvm(pgdir, sz, sz + 2*PGSIZE)) == 0)
goto bad;
@@ -62,8 +61,7 @@ exec(char *path, char **argv)
for(argc = 0; argv[argc]; argc++) {
if(argc >= MAXARG)
goto bad;
- sp -= strlen(argv[argc]) + 1;
- sp &= ~3;
+ sp = (sp - strlen(argv[argc]) + 1) & ~3;
if(copyout(pgdir, sp, argv[argc], strlen(argv[argc]) + 1) < 0)
goto bad;
ustack[3+argc] = sp;
@@ -92,7 +90,6 @@ exec(char *path, char **argv)
proc->tf->esp = sp;
switchuvm(proc);
freevm(oldpgdir);
-
return 0;
bad: