diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/memlayout.h | 13 | ||||
| -rw-r--r-- | kernel/proc.c | 6 | ||||
| -rw-r--r-- | kernel/proc.h | 6 | ||||
| -rw-r--r-- | kernel/trampoline.S | 2 | 
4 files changed, 16 insertions, 11 deletions
| diff --git a/kernel/memlayout.h b/kernel/memlayout.h index ef5c1e1..c15e398 100644 --- a/kernel/memlayout.h +++ b/kernel/memlayout.h @@ -53,4 +53,15 @@  // map the trampoline page to the highest address,  // in both user and kernel space.  #define TRAMPOLINE (MAXVA - PGSIZE) -#define KSTACK(p) (TRAMPOLINE - (p+1)* 2*PGSIZE) +#define KSTACK(p) (TRAMPOLINE - ((p)+1)* 2*PGSIZE) + +// User memory layout. +// Address zero first: +//   text +//   original data and bss +//   fixed-size stack +//   expandable heap +//   ... +//   TRAPFRAME (p->tf, used by the trampoline) +//   TRAMPOLINE (the same page as in the kernel) +#define TRAPFRAME (TRAMPOLINE - PGSIZE) diff --git a/kernel/proc.c b/kernel/proc.c index b9babed..d10c952 100644 --- a/kernel/proc.c +++ b/kernel/proc.c @@ -156,8 +156,8 @@ proc_pagetable(struct proc *p)    mappages(pagetable, TRAMPOLINE, PGSIZE,             (uint64)trampout, PTE_R | PTE_X); -  // map the trapframe, for trampoline.S. -  mappages(pagetable, (TRAMPOLINE - PGSIZE), PGSIZE, +  // map the trapframe just below TRAMPOLINE, for trampoline.S. +  mappages(pagetable, TRAPFRAME, PGSIZE,             (uint64)(p->tf), PTE_R | PTE_W);    return pagetable; @@ -169,7 +169,7 @@ void  proc_freepagetable(pagetable_t pagetable, uint64 sz)  {    unmappages(pagetable, TRAMPOLINE, PGSIZE, 0); -  unmappages(pagetable, TRAMPOLINE-PGSIZE, PGSIZE, 0); +  unmappages(pagetable, TRAPFRAME, PGSIZE, 0);    if(sz > 0)      uvmfree(pagetable, sz);  } diff --git a/kernel/proc.h b/kernel/proc.h index 1524c74..8f94d30 100644 --- a/kernel/proc.h +++ b/kernel/proc.h @@ -105,9 +105,3 @@ struct proc {    struct inode *cwd;           // Current directory    char name[16];               // Process name (debugging)  }; - -// Process memory is laid out contiguously, low addresses first: -//   text -//   original data and bss -//   fixed-size stack -//   expandable heap diff --git a/kernel/trampoline.S b/kernel/trampoline.S index 471a29c..1924de2 100644 --- a/kernel/trampoline.S +++ b/kernel/trampoline.S @@ -75,7 +75,7 @@ trampin:          # user page table.          #          # sscratch points to where the process's p->tf is -        # mapped into user space (TRAMPOLINE - 4096). +        # mapped into user space, at TRAPFRAME.          #  	# swap a0 and sscratch | 
