summaryrefslogtreecommitdiff
path: root/exec.c
diff options
context:
space:
mode:
authorFrans Kaashoek <[email protected]>2010-08-26 08:03:18 -0400
committerFrans Kaashoek <[email protected]>2010-08-26 08:03:18 -0400
commitd55b2fac074ac23e30c337014f40ae2156b31b60 (patch)
treebb9885972bf8929e7957f9ea512a8befaf06b11c /exec.c
parentd87f51c5a1c5e7a2a3ba111b1052a297f4f96fb0 (diff)
parent789b508d538e6faf635e49f268a4f1f9e9b65f05 (diff)
downloadxv6-labs-d55b2fac074ac23e30c337014f40ae2156b31b60.tar.gz
xv6-labs-d55b2fac074ac23e30c337014f40ae2156b31b60.tar.bz2
xv6-labs-d55b2fac074ac23e30c337014f40ae2156b31b60.zip
Merge commit 'origin/page' into page
Diffstat (limited to 'exec.c')
-rw-r--r--exec.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/exec.c b/exec.c
index 8a92e99..4f11695 100644
--- a/exec.c
+++ b/exec.c
@@ -43,13 +43,16 @@ exec(char *path, char **argv)
goto bad;
if (!allocuvm(pgdir, (char *)ph.va, ph.memsz))
goto bad;
- sz += PGROUNDUP(ph.memsz);
+ if(ph.va + ph.memsz > sz)
+ sz = ph.va + ph.memsz;
if (!loaduvm(pgdir, (char *)ph.va, ip, ph.offset, ph.filesz))
goto bad;
}
iunlockput(ip);
// Allocate and initialize stack at sz
+ sz = PGROUNDUP(sz);
+ sz += PGSIZE; // leave an invalid page
if (!allocuvm(pgdir, (char *)sz, PGSIZE))
goto bad;
mem = uva2ka(pgdir, (char *)sz);
@@ -95,7 +98,7 @@ exec(char *path, char **argv)
proc->tf->eip = elf.entry; // main
proc->tf->esp = sp;
- loadvm(proc);
+ switchuvm(proc);
freevm(oldpgdir);