diff options
author | Robert Morris <[email protected]> | 2012-08-28 12:57:13 -0400 |
---|---|---|
committer | Robert Morris <[email protected]> | 2012-08-28 12:57:13 -0400 |
commit | c1ee7eb4d31bd17e48857479fec8f4c2065d4b7d (patch) | |
tree | e54d9304b6f5d90bdf7a926808fd7d5923d39526 | |
parent | 8960f60b30b69a1f45ffa9d8b2b204714725f1fa (diff) | |
parent | 951b77f7eced2165312d5c12d6256e874dba10f8 (diff) | |
download | xv6-labs-c1ee7eb4d31bd17e48857479fec8f4c2065d4b7d.tar.gz xv6-labs-c1ee7eb4d31bd17e48857479fec8f4c2065d4b7d.tar.bz2 xv6-labs-c1ee7eb4d31bd17e48857479fec8f4c2065d4b7d.zip |
Merge branch 'master' of git+ssh://amsterdam.csail.mit.edu/home/am0/6.828/xv6
-rw-r--r-- | defs.h | 4 | ||||
-rw-r--r-- | exec.c | 2 | ||||
-rw-r--r-- | lapic.c | 2 | ||||
-rw-r--r-- | main.c | 4 | ||||
-rwxr-xr-x | printpcs | 14 | ||||
-rw-r--r-- | proc.c | 2 | ||||
-rw-r--r-- | syscall.c | 4 | ||||
-rw-r--r-- | syscall.h | 1 | ||||
-rw-r--r-- | vm.c | 10 |
9 files changed, 27 insertions, 16 deletions
@@ -74,7 +74,7 @@ void kbdintr(void); int cpunum(void); extern volatile uint* lapic; void lapiceoi(void); -void lapicinit(int); +void lapicinit(void); void lapicstartap(uchar, uint); void microdelay(int); @@ -164,7 +164,7 @@ void uartputc(int); void seginit(void); void kvmalloc(void); void vmenable(void); -pde_t* setupkvm(); +pde_t* setupkvm(void); char* uva2ka(pde_t*, char*); int allocuvm(pde_t*, uint, uint); int deallocuvm(pde_t*, uint, uint); @@ -29,7 +29,7 @@ exec(char *path, char **argv) if(elf.magic != ELF_MAGIC) goto bad; - if((pgdir = setupkvm(kalloc)) == 0) + if((pgdir = setupkvm()) == 0) goto bad; // Load program into memory. @@ -50,7 +50,7 @@ lapicw(int index, int value) //PAGEBREAK! void -lapicinit(int c) +lapicinit(void) { if(!lapic) return; @@ -20,7 +20,7 @@ main(void) kinit1(end, P2V(4*1024*1024)); // phys page allocator kvmalloc(); // kernel page table mpinit(); // collect info about this machine - lapicinit(mpbcpu()); + lapicinit(); seginit(); // set up segments cprintf("\ncpu%d: starting xv6\n\n", cpu->id); picinit(); // interrupt controller @@ -48,7 +48,7 @@ mpenter(void) { switchkvm(); seginit(); - lapicinit(cpunum()); + lapicinit(); mpmain(); } diff --git a/printpcs b/printpcs new file mode 100755 index 0000000..81d039b --- /dev/null +++ b/printpcs @@ -0,0 +1,14 @@ +#!/bin/sh + +# Decode the symbols from a panic EIP list + +# Find a working addr2line +for p in i386-jos-elf-addr2line addr2line; do + if which $p 2>&1 >/dev/null && \ + $p -h 2>&1 | grep -q '\belf32-i386\b'; then + break + fi +done + +# Enable as much pretty-printing as this addr2line can do +$p $($p -h | grep ' -[aipsf] ' | awk '{print $1}') -e kernel "$@" @@ -83,7 +83,7 @@ userinit(void) p = allocproc(); initproc = p; - if((p->pgdir = setupkvm(kalloc)) == 0) + if((p->pgdir = setupkvm()) == 0) panic("userinit: out of memory?"); inituvm(p->pgdir, _binary_initcode_start, (int)_binary_initcode_size); p->sz = PGSIZE; @@ -129,9 +129,7 @@ syscall(void) int num; num = proc->tf->eax; - if(num >= 0 && num < SYS_open && syscalls[num]) { - proc->tf->eax = syscalls[num](); - } else if (num >= SYS_open && num < NELEM(syscalls) && syscalls[num]) { + if(num > 0 && num < NELEM(syscalls) && syscalls[num]) { proc->tf->eax = syscalls[num](); } else { cprintf("%d %s: unknown sys call %d\n", @@ -13,7 +13,6 @@ #define SYS_sbrk 12 #define SYS_sleep 13 #define SYS_uptime 14 - #define SYS_open 15 #define SYS_write 16 #define SYS_mknod 17 @@ -118,15 +118,15 @@ static struct kmap { uint phys_end; int perm; } kmap[] = { - { (void*) KERNBASE, 0, EXTMEM, PTE_W}, // I/O space - { (void*) KERNLINK, V2P(KERNLINK), V2P(data), 0}, // kernel text+rodata - { (void*) data, V2P(data), PHYSTOP, PTE_W}, // kernel data, memory - { (void*) DEVSPACE, DEVSPACE, 0, PTE_W}, // more devices + { (void*)KERNBASE, 0, EXTMEM, PTE_W}, // I/O space + { (void*)KERNLINK, V2P(KERNLINK), V2P(data), 0}, // kernel text+rodata + { (void*)data, V2P(data), PHYSTOP, PTE_W}, // kernel data+memory + { (void*)DEVSPACE, DEVSPACE, 0, PTE_W}, // more devices }; // Set up kernel part of a page table. pde_t* -setupkvm() +setupkvm(void) { pde_t *pgdir; struct kmap *k; |