diff options
| author | rtm <rtm> | 2006-08-29 17:01:40 +0000 | 
|---|---|---|
| committer | rtm <rtm> | 2006-08-29 17:01:40 +0000 | 
| commit | 3b95801add8122af978f9c071d96e3f58acfd0cc (patch) | |
| tree | d420064b82d469094294160eae2ad5325c45e3a2 | |
| parent | 2b19190c13a12b276ac5cd3a69187d2ab504f36e (diff) | |
| download | xv6-labs-3b95801add8122af978f9c071d96e3f58acfd0cc.tar.gz xv6-labs-3b95801add8122af978f9c071d96e3f58acfd0cc.tar.bz2 xv6-labs-3b95801add8122af978f9c071d96e3f58acfd0cc.zip | |
i broke sbrk, fix it
| -rw-r--r-- | defs.h | 2 | ||||
| -rw-r--r-- | proc.c | 6 | ||||
| -rw-r--r-- | syscall.c | 5 | ||||
| -rw-r--r-- | trap.c | 1 | ||||
| -rw-r--r-- | usertests.c | 9 | 
5 files changed, 13 insertions, 10 deletions
| @@ -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); @@ -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.  @@ -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 @@ -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(); | 
