From 3b95801add8122af978f9c071d96e3f58acfd0cc Mon Sep 17 00:00:00 2001
From: rtm <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();
-- 
GitLab