From 3b95801add8122af978f9c071d96e3f58acfd0cc Mon Sep 17 00:00:00 2001 From: rtm Date: Tue, 29 Aug 2006 17:01:40 +0000 Subject: [PATCH] i broke sbrk, fix it --- defs.h | 2 +- proc.c | 6 +++--- syscall.c | 5 +++-- trap.c | 1 - usertests.c | 9 ++++++--- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/defs.h b/defs.h index fd154ac..1dd415c 100644 --- a/defs.h +++ b/defs.h @@ -16,7 +16,7 @@ struct jmpbuf; void setupsegs(struct proc *); struct proc * copyproc(struct proc*); struct spinlock; -int growproc(int); +uint growproc(int); void sleep(void *, struct spinlock *); void wakeup(void *); void scheduler(void); diff --git a/proc.c b/proc.c index 81149d7..1d0917f 100644 --- a/proc.c +++ b/proc.c @@ -138,7 +138,7 @@ copyproc(struct proc* p) return np; } -int +uint growproc(int n) { struct proc *cp = curproc[cpu()]; @@ -146,14 +146,14 @@ growproc(int n) newmem = kalloc(cp->sz + n); if(newmem == 0) - return -1; + return 0xffffffff; memmove(newmem, cp->mem, cp->sz); memset(newmem + cp->sz, 0, n); oldmem = cp->mem; cp->mem = newmem; kfree(oldmem, cp->sz); cp->sz += n; - return 0; + return cp->sz - n; } // Per-CPU process scheduler. diff --git a/syscall.c b/syscall.c index 0c4d654..eaf13c5 100644 --- a/syscall.c +++ b/syscall.c @@ -473,15 +473,16 @@ sys_getpid(void) int sys_sbrk(void) { + unsigned addr; int n; struct proc *cp = curproc[cpu()]; if(fetcharg(0, &n) < 0) return -1; - if(growproc(n) != 0) + if((addr = growproc(n)) == 0xffffffff) return -1; setupsegs(cp); - return 0; + return addr; } int diff --git a/trap.c b/trap.c index f9a9fc8..ef40f7e 100644 --- a/trap.c +++ b/trap.c @@ -37,7 +37,6 @@ trap(struct trapframe *tf) if(v == T_SYSCALL){ struct proc *cp = curproc[cpu()]; - int num = cp->tf->eax; if(cp->killed) proc_exit(); cp->tf = tf; diff --git a/usertests.c b/usertests.c index 2b8b64f..badaa1c 100644 --- a/usertests.c +++ b/usertests.c @@ -124,6 +124,7 @@ mem(void) m1 = 0; while ((m2 = malloc(1024)) != 0) { + printf(1, "malloc %x\n", m2); *(char **) m2 = m1; m1 = m2; } @@ -138,6 +139,8 @@ mem(void) exit(); } free(m1); + + printf(1, "mem ok\n"); } int @@ -145,10 +148,10 @@ main(int argc, char *argv[]) { puts("usertests starting\n"); - // pipe1(); - // preempt(); - // exitwait(); mem(); + pipe1(); + preempt(); + exitwait(); puts("usertests finished\n"); exit();