Explorar el Código

tlb now randomly kickes entries, code segments are read only

tarfeef101 hace 6 años
padre
commit
e22dd1c049
Se han modificado 47 ficheros con 1549 adiciones y 74 borrados
  1. BIN
      build/install/hostbin/host-dumpsfs
  2. BIN
      build/install/hostbin/host-hash
  3. BIN
      build/install/hostbin/host-mksfs
  4. BIN
      build/install/hostbin/host-sfsck
  5. BIN
      build/user/sbin/dumpsfs/dumpsfs.ho
  6. BIN
      build/user/sbin/dumpsfs/host-dumpsfs
  7. BIN
      build/user/sbin/mksfs/host-mksfs
  8. BIN
      build/user/sbin/mksfs/mksfs.ho
  9. BIN
      build/user/sbin/sfsck/host-sfsck
  10. BIN
      build/user/sbin/sfsck/sfsck.ho
  11. BIN
      build/user/testbin/hash/hash.ho
  12. BIN
      build/user/testbin/hash/host-hash
  13. 41 37
      kern/arch/mips/locore/trap.c
  14. 34 23
      kern/arch/mips/vm/dumbvm.c
  15. BIN
      kern/compile/ASST2/kernel
  16. 1 1
      kern/compile/ASST2/vers.c
  17. 1 1
      kern/compile/ASST2/version
  18. 804 0
      kern/compile/ASST3/.depend
  19. 15 0
      kern/compile/ASST3/Makefile
  20. 410 0
      kern/compile/ASST3/autoconf.c
  21. 43 0
      kern/compile/ASST3/autoconf.h
  22. 114 0
      kern/compile/ASST3/files.mk
  23. 1 0
      kern/compile/ASST3/includelinks/kern/machine
  24. 1 0
      kern/compile/ASST3/includelinks/kern/mips
  25. 1 0
      kern/compile/ASST3/includelinks/machine
  26. 1 0
      kern/compile/ASST3/includelinks/mips
  27. 1 0
      kern/compile/ASST3/includelinks/platform
  28. 1 0
      kern/compile/ASST3/includelinks/sys161
  29. BIN
      kern/compile/ASST3/kernel
  30. 5 0
      kern/compile/ASST3/opt-A0.h
  31. 5 0
      kern/compile/ASST3/opt-A1.h
  32. 5 0
      kern/compile/ASST3/opt-A2.h
  33. 5 0
      kern/compile/ASST3/opt-A3.h
  34. 5 0
      kern/compile/ASST3/opt-A4.h
  35. 5 0
      kern/compile/ASST3/opt-A5.h
  36. 5 0
      kern/compile/ASST3/opt-dumbvm.h
  37. 5 0
      kern/compile/ASST3/opt-net.h
  38. 5 0
      kern/compile/ASST3/opt-netfs.h
  39. 5 0
      kern/compile/ASST3/opt-noasserts.h
  40. 5 0
      kern/compile/ASST3/opt-sfs.h
  41. 5 0
      kern/compile/ASST3/opt-synchprobs.h
  42. 3 0
      kern/compile/ASST3/vers.c
  43. 1 0
      kern/compile/ASST3/version
  44. 1 0
      kern/include/addrspace.h
  45. 9 7
      kern/syscall/loadelf.c
  46. 2 1
      kern/syscall/proc_syscalls.c
  47. 4 4
      user/testbin/badcall/bad_lseek.c

BIN
build/install/hostbin/host-dumpsfs


BIN
build/install/hostbin/host-hash


BIN
build/install/hostbin/host-mksfs


BIN
build/install/hostbin/host-sfsck


BIN
build/user/sbin/dumpsfs/dumpsfs.ho


BIN
build/user/sbin/dumpsfs/host-dumpsfs


BIN
build/user/sbin/mksfs/host-mksfs


BIN
build/user/sbin/mksfs/mksfs.ho


BIN
build/user/sbin/sfsck/host-sfsck


BIN
build/user/sbin/sfsck/sfsck.ho


BIN
build/user/testbin/hash/hash.ho


BIN
build/user/testbin/hash/host-hash


+ 41 - 37
kern/arch/mips/locore/trap.c

@@ -76,36 +76,40 @@ kill_curthread(vaddr_t epc, unsigned code, vaddr_t vaddr)
 	int sig = 0;
 
 	KASSERT(code < NTRAPCODES);
-	switch (code) {
-	    case EX_IRQ:
-	    case EX_IBE:
-	    case EX_DBE:
-	    case EX_SYS:
-		/* should not be seen */
-		KASSERT(0);
-		sig = SIGABRT;
-		break;
-	    case EX_MOD:
-	    case EX_TLBL:
-	    case EX_TLBS:
-		sig = SIGSEGV;
-		break;
-	    case EX_ADEL:
-	    case EX_ADES:
-		sig = SIGBUS;
-		break;
-	    case EX_BP:
-		sig = SIGTRAP;
-		break;
-	    case EX_RI:
-		sig = SIGILL;
-		break;
-	    case EX_CPU:
-		sig = SIGSEGV;
-		break;
-	    case EX_OVF:
-		sig = SIGFPE;
-		break;
+	switch (code)
+	{
+    case EX_IRQ:
+    case EX_IBE:
+    case EX_DBE:
+    case EX_SYS:
+		  /* should not be seen */
+		  KASSERT(0);
+		  sig = SIGABRT;
+		  break;
+    case EX_MOD:
+      sig = SIGSEGV;
+      sys__exit(-2);
+      break;
+    case EX_TLBL:
+    case EX_TLBS:
+		  sig = SIGSEGV;
+		  break;
+    case EX_ADEL:
+    case EX_ADES:
+      sig = SIGBUS;
+      break;
+    case EX_BP:
+		  sig = SIGTRAP;
+		  break;
+    case EX_RI:
+		  sig = SIGILL;
+		  break;
+	  case EX_CPU:
+		  sig = SIGSEGV;
+	  	break;
+	  case EX_OVF:
+		  sig = SIGFPE;
+		  break;
 	}
 
 	/*
@@ -217,7 +221,7 @@ mips_trap(struct trapframe *tf)
 		KASSERT(curthread->t_curspl == 0);
 		KASSERT(curthread->t_iplhigh_count == 0);
 
-		DEBUG(DB_SYSCALL, "syscall: #%d, args %x %x %x %x\n", 
+		DEBUG(DB_SYSCALL, "syscall: #%d, args %x %x %x %x\n",
 		      tf->tf_v0, tf->tf_a0, tf->tf_a1, tf->tf_a2, tf->tf_a3);
 
 		syscall(tf);
@@ -248,11 +252,11 @@ mips_trap(struct trapframe *tf)
 	case EX_IBE:
 	case EX_DBE:
 		/*
-		 * This means you loaded invalid TLB entries, or 
-		 * touched invalid parts of the direct-mapped 
+		 * This means you loaded invalid TLB entries, or
+		 * touched invalid parts of the direct-mapped
 		 * segments. These are serious kernel errors, so
 		 * panic.
-		 * 
+		 *
 		 * The MIPS won't even tell you what invalid address
 		 * caused the bus error.
 		 */
@@ -282,8 +286,8 @@ mips_trap(struct trapframe *tf)
 	 * set by copyin/copyout and related functions to signify that
 	 * the addresses they're accessing are userlevel-supplied and
 	 * not trustable. What we actually want to do is resume
-	 * execution at the function pointed to by badfaultfunc. That's 
-	 * going to be "copyfail" (see copyinout.c), which longjmps 
+	 * execution at the function pointed to by badfaultfunc. That's
+	 * going to be "copyfail" (see copyinout.c), which longjmps
 	 * back to copyin/copyout or wherever and returns EFAULT.
 	 *
 	 * Note that we do not just *call* this function, because that
@@ -308,7 +312,7 @@ mips_trap(struct trapframe *tf)
 
 	kprintf("panic: Fatal exception %u (%s) in kernel mode\n", code,
 		trapcodenames[code]);
-	kprintf("panic: EPC 0x%x, exception vaddr 0x%x\n", 
+	kprintf("panic: EPC 0x%x, exception vaddr 0x%x\n",
 		tf->tf_epc, tf->tf_vaddr);
 
 	panic("I can't handle this... I think I'll just die now...\n");

+ 34 - 23
kern/arch/mips/vm/dumbvm.c

@@ -72,7 +72,7 @@ getppages(unsigned long npages)
 }
 
 /* Allocate/free some kernel-space virtual pages */
-vaddr_t 
+vaddr_t
 alloc_kpages(int npages)
 {
 	paddr_t pa;
@@ -83,7 +83,7 @@ alloc_kpages(int npages)
 	return PADDR_TO_KVADDR(pa);
 }
 
-void 
+void
 free_kpages(vaddr_t addr)
 {
 	/* nothing - leak the memory. */
@@ -104,8 +104,7 @@ vm_tlbshootdown(const struct tlbshootdown *ts)
 	panic("dumbvm tried to do tlb shootdown?!\n");
 }
 
-int
-vm_fault(int faulttype, vaddr_t faultaddress)
+int vm_fault(int faulttype, vaddr_t faultaddress)
 {
 	vaddr_t vbase1, vtop1, vbase2, vtop2, stackbase, stacktop;
 	paddr_t paddr;
@@ -113,17 +112,18 @@ vm_fault(int faulttype, vaddr_t faultaddress)
 	uint32_t ehi, elo;
 	struct addrspace *as;
 	int spl;
+	bool readonly = false;
 
 	faultaddress &= PAGE_FRAME;
 
 	DEBUG(DB_VM, "dumbvm: fault: 0x%x\n", faultaddress);
 
-	switch (faulttype) {
-	    case VM_FAULT_READONLY:
-		/* We always create pages read-write, so we can't get this */
-		panic("dumbvm: got VM_FAULT_READONLY\n");
-	    case VM_FAULT_READ:
-	    case VM_FAULT_WRITE:
+	switch (faulttype)
+	{
+	  case VM_FAULT_READONLY:
+	    return EINVAL;
+	 case VM_FAULT_READ:
+	 case VM_FAULT_WRITE:
 		break;
 	    default:
 		return EINVAL;
@@ -168,18 +168,23 @@ vm_fault(int faulttype, vaddr_t faultaddress)
 	stackbase = USERSTACK - DUMBVM_STACKPAGES * PAGE_SIZE;
 	stacktop = USERSTACK;
 
-	if (faultaddress >= vbase1 && faultaddress < vtop1) {
+  // text
+	if (faultaddress >= vbase1 && faultaddress < vtop1)
+	{
 		paddr = (faultaddress - vbase1) + as->as_pbase1;
+		readonly = true;
 	}
-	else if (faultaddress >= vbase2 && faultaddress < vtop2) {
+	// heap
+	else if (faultaddress >= vbase2 && faultaddress < vtop2)
+	{
 		paddr = (faultaddress - vbase2) + as->as_pbase2;
 	}
-	else if (faultaddress >= stackbase && faultaddress < stacktop) {
+	// stack
+	else if (faultaddress >= stackbase && faultaddress < stacktop)
+	{
 		paddr = (faultaddress - stackbase) + as->as_stackpbase;
 	}
-	else {
-		return EFAULT;
-	}
+	else return EFAULT;
 
 	/* make sure it's page-aligned */
 	KASSERT((paddr & PAGE_FRAME) == paddr);
@@ -187,26 +192,31 @@ vm_fault(int faulttype, vaddr_t faultaddress)
 	/* Disable interrupts on this CPU while frobbing the TLB. */
 	spl = splhigh();
 
-	for (i=0; i<NUM_TLB; i++) {
+	for (i = 0; i < NUM_TLB; ++i)
+	{
 		tlb_read(&ehi, &elo, i);
-		if (elo & TLBLO_VALID) {
+		if (elo & TLBLO_VALID)
+		{
 			continue;
 		}
 		ehi = faultaddress;
 		elo = paddr | TLBLO_DIRTY | TLBLO_VALID;
+		if (readonly && !(as->loading)) elo &= ~TLBLO_DIRTY;
 		DEBUG(DB_VM, "dumbvm: 0x%x -> 0x%x\n", faultaddress, paddr);
 		tlb_write(ehi, elo, i);
 		splx(spl);
 		return 0;
 	}
 
-	kprintf("dumbvm: Ran out of TLB entries - cannot handle page fault\n");
+  ehi = faultaddress;
+	elo = paddr | TLBLO_DIRTY | TLBLO_VALID;
+	if (readonly && !(as->loading)) elo &= ~TLBLO_DIRTY;
+	tlb_random(ehi, elo);
 	splx(spl);
-	return EFAULT;
+	return 0;
 }
 
-struct addrspace *
-as_create(void)
+struct addrspace * as_create(void)
 {
 	struct addrspace *as = kmalloc(sizeof(struct addrspace));
 	if (as==NULL) {
@@ -220,6 +230,7 @@ as_create(void)
 	as->as_pbase2 = 0;
 	as->as_npages2 = 0;
 	as->as_stackpbase = 0;
+	as->loading = true;
 
 	return as;
 }
@@ -264,7 +275,7 @@ int
 as_define_region(struct addrspace *as, vaddr_t vaddr, size_t sz,
 		 int readable, int writeable, int executable)
 {
-	size_t npages; 
+	size_t npages;
 
 	/* Align the region. First, the base... */
 	sz += vaddr & ~(vaddr_t)PAGE_FRAME;

BIN
kern/compile/ASST2/kernel


+ 1 - 1
kern/compile/ASST2/vers.c

@@ -1,3 +1,3 @@
 /* This file is automatically generated. Edits will be lost.*/
-const int buildversion = 249;
+const int buildversion = 258;
 const char buildconfig[] = "ASST2";

+ 1 - 1
kern/compile/ASST2/version

@@ -1 +1 @@
-249
+258

+ 804 - 0
kern/compile/ASST3/.depend

@@ -0,0 +1,804 @@
+__printf.o: ../../../common/libc/printf/__printf.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/stdarg.h
+snprintf.o: ../../../common/libc/printf/snprintf.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/stdarg.h
+atoi.o: ../../../common/libc/stdlib/atoi.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h
+bzero.o: ../../../common/libc/string/bzero.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h
+memcpy.o: ../../../common/libc/string/memcpy.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h
+memmove.o: ../../../common/libc/string/memmove.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h
+strcat.o: ../../../common/libc/string/strcat.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h
+strchr.o: ../../../common/libc/string/strchr.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h
+strcmp.o: ../../../common/libc/string/strcmp.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h
+strcpy.o: ../../../common/libc/string/strcpy.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h
+strlen.o: ../../../common/libc/string/strlen.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h
+strrchr.o: ../../../common/libc/string/strrchr.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h
+strtok_r.o: ../../../common/libc/string/strtok_r.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h
+autoconf.o: ../../compile/ASST3/autoconf.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../compile/ASST3/autoconf.h
+beep.o: ../../dev/generic/beep.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../dev/generic/beep.h autoconf.h
+console.o: ../../dev/generic/console.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/uio.h ../../include/kern/iovec.h ../../include/thread.h \
+  ../../include/array.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/threadlist.h \
+  includelinks/machine/thread.h ../../include/setjmp.h \
+  includelinks/kern/machine/setjmp.h ../../include/current.h \
+  includelinks/machine/current.h ../../include/synch.h \
+  ../../dev/generic/console.h ../../include/vfs.h ../../include/device.h \
+  autoconf.h
+random.o: ../../dev/generic/random.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/kern/fcntl.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/uio.h ../../include/kern/iovec.h \
+  ../../include/vfs.h ../../include/array.h ../../dev/generic/random.h \
+  ../../include/device.h autoconf.h
+rtclock.o: ../../dev/generic/rtclock.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/clock.h opt-synchprobs.h ../../dev/generic/rtclock.h \
+  autoconf.h
+beep_ltimer.o: ../../dev/lamebus/beep_ltimer.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../dev/generic/beep.h ../../dev/lamebus/ltimer.h \
+  autoconf.h
+con_lser.o: ../../dev/lamebus/con_lser.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../dev/generic/console.h ../../dev/lamebus/lser.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h autoconf.h
+emu_att.o: ../../dev/lamebus/emu_att.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../dev/lamebus/lamebus.h ../../include/cpu.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/threadlist.h includelinks/machine/vm.h \
+  ../../dev/lamebus/emu.h autoconf.h
+emu.o: ../../dev/lamebus/emu.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/kern/fcntl.h ../../include/stat.h \
+  ../../include/kern/stat.h ../../include/kern/stattypes.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/array.h ../../include/uio.h ../../include/kern/iovec.h \
+  ../../include/synch.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../dev/lamebus/emu.h \
+  includelinks/platform/bus.h includelinks/machine/vm.h \
+  ../../dev/lamebus/lamebus.h ../../include/cpu.h \
+  ../../include/threadlist.h ../../include/vfs.h ../../include/emufs.h \
+  ../../include/fs.h ../../include/vnode.h autoconf.h
+lamebus.o: ../../dev/lamebus/lamebus.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/cpu.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/threadlist.h \
+  includelinks/machine/vm.h ../../include/current.h \
+  includelinks/machine/current.h ../../include/thread.h \
+  ../../include/array.h includelinks/machine/thread.h \
+  ../../include/setjmp.h includelinks/kern/machine/setjmp.h \
+  ../../dev/lamebus/lamebus.h
+lhd_att.o: ../../dev/lamebus/lhd_att.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../dev/lamebus/lamebus.h ../../include/cpu.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/threadlist.h includelinks/machine/vm.h \
+  ../../dev/lamebus/lhd.h ../../include/device.h autoconf.h
+lhd.o: ../../dev/lamebus/lhd.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/uio.h ../../include/kern/iovec.h ../../include/synch.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  includelinks/platform/bus.h includelinks/machine/vm.h \
+  ../../dev/lamebus/lamebus.h ../../include/cpu.h \
+  ../../include/threadlist.h ../../include/vfs.h ../../include/array.h \
+  ../../dev/lamebus/lhd.h ../../include/device.h autoconf.h
+lrandom_att.o: ../../dev/lamebus/lrandom_att.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../dev/lamebus/lamebus.h ../../include/cpu.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/threadlist.h includelinks/machine/vm.h \
+  ../../dev/lamebus/lrandom.h autoconf.h
+lrandom.o: ../../dev/lamebus/lrandom.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/uio.h ../../include/kern/iovec.h \
+  includelinks/platform/bus.h includelinks/machine/vm.h \
+  ../../dev/lamebus/lamebus.h ../../include/cpu.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/threadlist.h ../../dev/lamebus/lrandom.h autoconf.h
+lser_att.o: ../../dev/lamebus/lser_att.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../dev/lamebus/lamebus.h ../../include/cpu.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/threadlist.h includelinks/machine/vm.h \
+  ../../dev/lamebus/lser.h autoconf.h
+lser.o: ../../dev/lamebus/lser.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h includelinks/platform/bus.h \
+  includelinks/machine/vm.h ../../dev/lamebus/lamebus.h \
+  ../../include/cpu.h ../../include/threadlist.h ../../dev/lamebus/lser.h \
+  autoconf.h
+ltimer_att.o: ../../dev/lamebus/ltimer_att.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../dev/lamebus/lamebus.h ../../include/cpu.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/threadlist.h includelinks/machine/vm.h \
+  ../../dev/lamebus/ltimer.h autoconf.h
+ltimer.o: ../../dev/lamebus/ltimer.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/spl.h ../../include/clock.h \
+  opt-synchprobs.h includelinks/platform/bus.h includelinks/machine/vm.h \
+  ../../dev/lamebus/lamebus.h ../../include/cpu.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/threadlist.h ../../dev/lamebus/ltimer.h autoconf.h
+ltrace_att.o: ../../dev/lamebus/ltrace_att.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../dev/lamebus/lamebus.h ../../include/cpu.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/threadlist.h includelinks/machine/vm.h \
+  ../../dev/lamebus/ltrace.h autoconf.h
+ltrace.o: ../../dev/lamebus/ltrace.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h includelinks/platform/bus.h includelinks/machine/vm.h \
+  ../../dev/lamebus/lamebus.h ../../include/cpu.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/threadlist.h ../../dev/lamebus/ltrace.h autoconf.h
+random_lrandom.o: ../../dev/lamebus/random_lrandom.c \
+  ../../include/types.h ../../include/kern/types.h \
+  includelinks/kern/machine/types.h includelinks/machine/types.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../dev/generic/random.h ../../include/device.h \
+  ../../dev/lamebus/lrandom.h autoconf.h
+rtclock_ltimer.o: ../../dev/lamebus/rtclock_ltimer.c \
+  ../../include/types.h ../../include/kern/types.h \
+  includelinks/kern/machine/types.h includelinks/machine/types.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../dev/generic/rtclock.h ../../dev/lamebus/ltimer.h autoconf.h
+sfs_fs.o: ../../fs/sfs/sfs_fs.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/array.h ../../include/bitmap.h ../../include/uio.h \
+  ../../include/kern/iovec.h ../../include/vfs.h ../../include/device.h \
+  ../../include/sfs.h ../../include/fs.h ../../include/vnode.h \
+  ../../include/kern/sfs.h
+sfs_io.o: ../../fs/sfs/sfs_io.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/uio.h ../../include/kern/iovec.h ../../include/vfs.h \
+  ../../include/array.h ../../include/device.h ../../include/sfs.h \
+  ../../include/fs.h ../../include/vnode.h ../../include/kern/sfs.h
+sfs_vnode.o: ../../fs/sfs/sfs_vnode.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/kern/fcntl.h ../../include/stat.h \
+  ../../include/kern/stat.h ../../include/kern/stattypes.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/array.h ../../include/bitmap.h ../../include/uio.h \
+  ../../include/kern/iovec.h ../../include/synch.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/vfs.h ../../include/device.h ../../include/sfs.h \
+  ../../include/fs.h ../../include/vnode.h ../../include/kern/sfs.h
+array.o: ../../lib/array.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/array.h
+bitmap.o: ../../lib/bitmap.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/bitmap.h
+bswap.o: ../../lib/bswap.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h
+kgets.o: ../../lib/kgets.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h
+kprintf.o: ../../lib/kprintf.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/unistd.h \
+  ../../include/stdarg.h ../../include/cdefs.h ../../include/lib.h \
+  opt-noasserts.h ../../include/spl.h ../../include/thread.h \
+  ../../include/array.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/threadlist.h \
+  includelinks/machine/thread.h ../../include/setjmp.h \
+  includelinks/kern/machine/setjmp.h ../../include/current.h \
+  includelinks/machine/current.h ../../include/synch.h \
+  ../../include/mainbus.h ../../include/vfs.h
+list.o: ../../lib/list.c ../../include/types.h ../../include/kern/types.h \
+  includelinks/kern/machine/types.h includelinks/machine/types.h \
+  ../../include/kern/errno.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/list.h
+misc.o: ../../lib/misc.c ../../include/types.h ../../include/kern/types.h \
+  includelinks/kern/machine/types.h includelinks/machine/types.h \
+  ../../include/kern/errmsg.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h
+queue.o: ../../lib/queue.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/queue.h
+uio.o: ../../lib/uio.c ../../include/types.h ../../include/kern/types.h \
+  includelinks/kern/machine/types.h includelinks/machine/types.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/uio.h ../../include/kern/iovec.h ../../include/proc.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/thread.h ../../include/array.h ../../include/threadlist.h \
+  includelinks/machine/thread.h ../../include/setjmp.h \
+  includelinks/kern/machine/setjmp.h ../../include/limits.h \
+  ../../include/kern/limits.h ../../include/synch.h ../../include/list.h \
+  ../../include/current.h includelinks/machine/current.h \
+  ../../include/copyinout.h
+proc.o: ../../proc/proc.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/proc.h \
+  ../../include/spinlock.h ../../include/cdefs.h \
+  includelinks/machine/spinlock.h ../../include/thread.h \
+  ../../include/array.h ../../include/lib.h opt-noasserts.h \
+  ../../include/threadlist.h includelinks/machine/thread.h \
+  ../../include/setjmp.h includelinks/kern/machine/setjmp.h \
+  ../../include/limits.h ../../include/kern/limits.h \
+  ../../include/synch.h ../../include/list.h ../../include/current.h \
+  includelinks/machine/current.h ../../include/addrspace.h \
+  ../../include/vm.h includelinks/machine/vm.h ../../include/vnode.h \
+  ../../include/vfs.h ../../include/kern/fcntl.h \
+  ../../include/kern/errno.h
+main.o: ../../startup/main.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/kern/reboot.h ../../include/kern/unistd.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/spl.h ../../include/clock.h opt-synchprobs.h \
+  ../../include/thread.h ../../include/array.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/threadlist.h \
+  includelinks/machine/thread.h ../../include/setjmp.h \
+  includelinks/kern/machine/setjmp.h ../../include/proc.h \
+  ../../include/limits.h ../../include/kern/limits.h \
+  ../../include/synch.h ../../include/list.h ../../include/current.h \
+  includelinks/machine/current.h ../../include/vm.h \
+  includelinks/machine/vm.h ../../include/mainbus.h ../../include/vfs.h \
+  ../../include/device.h ../../include/syscall.h ../../include/test.h \
+  ../../include/version.h autoconf.h
+menu.o: ../../startup/menu.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/kern/reboot.h ../../include/kern/unistd.h \
+  ../../include/limits.h ../../include/kern/limits.h ../../include/lib.h \
+  ../../include/cdefs.h opt-noasserts.h ../../include/uio.h \
+  ../../include/kern/iovec.h ../../include/clock.h opt-synchprobs.h \
+  ../../include/thread.h ../../include/array.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/threadlist.h \
+  includelinks/machine/thread.h ../../include/setjmp.h \
+  includelinks/kern/machine/setjmp.h ../../include/proc.h \
+  ../../include/synch.h ../../include/list.h ../../include/vfs.h \
+  ../../include/sfs.h ../../include/fs.h ../../include/vnode.h \
+  ../../include/kern/sfs.h ../../include/syscall.h ../../include/test.h \
+  opt-synchprobs.h opt-sfs.h opt-net.h
+file_syscalls.o: ../../syscall/file_syscalls.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/kern/unistd.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/uio.h ../../include/kern/iovec.h \
+  ../../include/syscall.h ../../include/vnode.h ../../include/vfs.h \
+  ../../include/array.h ../../include/current.h \
+  includelinks/machine/current.h ../../include/thread.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/threadlist.h includelinks/machine/thread.h \
+  ../../include/setjmp.h includelinks/kern/machine/setjmp.h \
+  ../../include/proc.h ../../include/limits.h ../../include/kern/limits.h \
+  ../../include/synch.h ../../include/list.h
+loadelf.o: ../../syscall/loadelf.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/uio.h ../../include/kern/iovec.h ../../include/proc.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/thread.h ../../include/array.h ../../include/threadlist.h \
+  includelinks/machine/thread.h ../../include/setjmp.h \
+  includelinks/kern/machine/setjmp.h ../../include/limits.h \
+  ../../include/kern/limits.h ../../include/synch.h ../../include/list.h \
+  ../../include/current.h includelinks/machine/current.h \
+  ../../include/addrspace.h ../../include/vm.h includelinks/machine/vm.h \
+  ../../include/vnode.h ../../include/elf.h includelinks/machine/elf.h
+proc_syscalls.o: ../../syscall/proc_syscalls.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/kern/unistd.h ../../include/kern/wait.h \
+  includelinks/mips/trapframe.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/vfs.h ../../include/array.h \
+  ../../include/vnode.h ../../include/syscall.h ../../include/current.h \
+  includelinks/machine/current.h ../../include/thread.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/threadlist.h includelinks/machine/thread.h \
+  ../../include/setjmp.h includelinks/kern/machine/setjmp.h \
+  ../../include/proc.h ../../include/limits.h ../../include/kern/limits.h \
+  ../../include/synch.h ../../include/list.h ../../include/addrspace.h \
+  ../../include/vm.h includelinks/machine/vm.h ../../include/copyinout.h \
+  ../../include/kern/fcntl.h
+runprogram.o: ../../syscall/runprogram.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/kern/fcntl.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/proc.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/thread.h \
+  ../../include/array.h ../../include/threadlist.h \
+  includelinks/machine/thread.h ../../include/setjmp.h \
+  includelinks/kern/machine/setjmp.h ../../include/limits.h \
+  ../../include/kern/limits.h ../../include/synch.h ../../include/list.h \
+  ../../include/current.h includelinks/machine/current.h \
+  ../../include/addrspace.h ../../include/vm.h includelinks/machine/vm.h \
+  ../../include/vfs.h ../../include/syscall.h ../../include/test.h
+time_syscalls.o: ../../syscall/time_syscalls.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/clock.h opt-synchprobs.h \
+  ../../include/copyinout.h ../../include/syscall.h
+arraytest.o: ../../test/arraytest.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/array.h ../../include/test.h
+bitmaptest.o: ../../test/bitmaptest.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/bitmap.h ../../include/test.h
+fstest.o: ../../test/fstest.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/kern/fcntl.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/uio.h ../../include/kern/iovec.h \
+  ../../include/thread.h ../../include/array.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/threadlist.h \
+  includelinks/machine/thread.h ../../include/setjmp.h \
+  includelinks/kern/machine/setjmp.h ../../include/synch.h \
+  ../../include/vfs.h ../../include/fs.h ../../include/vnode.h \
+  ../../include/test.h
+malloctest.o: ../../test/malloctest.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/thread.h ../../include/array.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/threadlist.h includelinks/machine/thread.h \
+  ../../include/setjmp.h includelinks/kern/machine/setjmp.h \
+  ../../include/synch.h ../../include/test.h
+synchtest.o: ../../test/synchtest.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/clock.h opt-synchprobs.h \
+  ../../include/thread.h ../../include/array.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/threadlist.h \
+  includelinks/machine/thread.h ../../include/setjmp.h \
+  includelinks/kern/machine/setjmp.h ../../include/synch.h \
+  ../../include/test.h
+threadtest.o: ../../test/threadtest.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/thread.h ../../include/array.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/threadlist.h includelinks/machine/thread.h \
+  ../../include/setjmp.h includelinks/kern/machine/setjmp.h \
+  ../../include/synch.h ../../include/test.h
+tt3.o: ../../test/tt3.c ../../include/types.h ../../include/kern/types.h \
+  includelinks/kern/machine/types.h includelinks/machine/types.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/wchan.h ../../include/thread.h ../../include/array.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/threadlist.h includelinks/machine/thread.h \
+  ../../include/setjmp.h includelinks/kern/machine/setjmp.h \
+  ../../include/synch.h ../../include/test.h opt-synchprobs.h
+uw-tests.o: ../../test/uw-tests.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/synch.h \
+  ../../include/spinlock.h ../../include/cdefs.h \
+  includelinks/machine/spinlock.h ../../include/thread.h \
+  ../../include/array.h ../../include/lib.h opt-noasserts.h \
+  ../../include/threadlist.h includelinks/machine/thread.h \
+  ../../include/setjmp.h includelinks/kern/machine/setjmp.h \
+  ../../include/test.h ../../include/uw-vmstats.h
+clock.o: ../../thread/clock.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/cpu.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/threadlist.h \
+  includelinks/machine/vm.h ../../include/wchan.h ../../include/clock.h \
+  opt-synchprobs.h ../../include/thread.h ../../include/array.h \
+  includelinks/machine/thread.h ../../include/setjmp.h \
+  includelinks/kern/machine/setjmp.h ../../dev/lamebus/ltimer.h \
+  ../../include/current.h includelinks/machine/current.h
+spinlock.o: ../../thread/spinlock.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/cpu.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/threadlist.h \
+  includelinks/machine/vm.h ../../include/spl.h ../../include/current.h \
+  includelinks/machine/current.h ../../include/thread.h \
+  ../../include/array.h includelinks/machine/thread.h \
+  ../../include/setjmp.h includelinks/kern/machine/setjmp.h
+spl.o: ../../thread/spl.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/cpu.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/threadlist.h \
+  includelinks/machine/vm.h ../../include/spl.h ../../include/thread.h \
+  ../../include/array.h includelinks/machine/thread.h \
+  ../../include/setjmp.h includelinks/kern/machine/setjmp.h \
+  ../../include/current.h includelinks/machine/current.h
+synch.o: ../../thread/synch.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/wchan.h \
+  ../../include/thread.h ../../include/array.h ../../include/threadlist.h \
+  includelinks/machine/thread.h ../../include/setjmp.h \
+  includelinks/kern/machine/setjmp.h ../../include/current.h \
+  includelinks/machine/current.h ../../include/synch.h
+thread.o: ../../thread/thread.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/array.h ../../include/cpu.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/threadlist.h \
+  includelinks/machine/vm.h ../../include/spl.h ../../include/wchan.h \
+  ../../include/thread.h includelinks/machine/thread.h \
+  ../../include/setjmp.h includelinks/kern/machine/setjmp.h \
+  ../../include/threadprivate.h ../../include/proc.h \
+  ../../include/limits.h ../../include/kern/limits.h \
+  ../../include/synch.h ../../include/list.h ../../include/current.h \
+  includelinks/machine/current.h ../../include/addrspace.h \
+  ../../include/vm.h ../../include/mainbus.h ../../include/vnode.h \
+  opt-synchprobs.h
+threadlist.o: ../../thread/threadlist.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/thread.h ../../include/array.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/threadlist.h includelinks/machine/thread.h \
+  ../../include/setjmp.h includelinks/kern/machine/setjmp.h
+device.o: ../../vfs/device.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/kern/fcntl.h ../../include/stat.h \
+  ../../include/kern/stat.h ../../include/kern/stattypes.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/uio.h ../../include/kern/iovec.h ../../include/synch.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/vnode.h ../../include/device.h
+devnull.o: ../../vfs/devnull.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/uio.h ../../include/kern/iovec.h ../../include/vfs.h \
+  ../../include/array.h ../../include/device.h
+vfscwd.o: ../../vfs/vfscwd.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/stat.h ../../include/kern/stat.h \
+  ../../include/kern/stattypes.h ../../include/lib.h \
+  ../../include/cdefs.h opt-noasserts.h ../../include/uio.h \
+  ../../include/kern/iovec.h ../../include/proc.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/thread.h ../../include/array.h ../../include/threadlist.h \
+  includelinks/machine/thread.h ../../include/setjmp.h \
+  includelinks/kern/machine/setjmp.h ../../include/limits.h \
+  ../../include/kern/limits.h ../../include/synch.h ../../include/list.h \
+  ../../include/current.h includelinks/machine/current.h \
+  ../../include/vfs.h ../../include/fs.h ../../include/vnode.h
+vfslist.o: ../../vfs/vfslist.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/array.h ../../include/synch.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/vfs.h ../../include/fs.h \
+  ../../include/vnode.h ../../include/device.h
+vfslookup.o: ../../vfs/vfslookup.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/limits.h ../../include/kern/limits.h ../../include/lib.h \
+  ../../include/cdefs.h opt-noasserts.h ../../include/synch.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/vfs.h ../../include/array.h ../../include/fs.h \
+  ../../include/vnode.h
+vfspath.o: ../../vfs/vfspath.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/kern/fcntl.h ../../include/limits.h \
+  ../../include/kern/limits.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/vfs.h ../../include/array.h \
+  ../../include/vnode.h
+vnode.o: ../../vfs/vnode.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/synch.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/vfs.h \
+  ../../include/array.h ../../include/vnode.h
+kmalloc.o: ../../vm/kmalloc.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/vm.h \
+  includelinks/machine/vm.h
+uw-vmstats.o: ../../vm/uw-vmstats.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/synch.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/spl.h \
+  ../../include/uw-vmstats.h
+trap.o: ../../arch/mips/locore/trap.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/signal.h \
+  includelinks/kern/machine/signal.h ../../include/kern/signal.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  includelinks/mips/specialreg.h includelinks/mips/trapframe.h \
+  ../../include/cpu.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/threadlist.h \
+  includelinks/machine/vm.h ../../include/spl.h ../../include/thread.h \
+  ../../include/array.h includelinks/machine/thread.h \
+  ../../include/setjmp.h includelinks/kern/machine/setjmp.h \
+  ../../include/current.h includelinks/machine/current.h \
+  ../../include/vm.h ../../include/mainbus.h ../../include/syscall.h
+syscall.o: ../../arch/mips/syscall/syscall.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/kern/syscall.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h includelinks/mips/trapframe.h ../../include/thread.h \
+  ../../include/array.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/threadlist.h \
+  includelinks/machine/thread.h ../../include/setjmp.h \
+  includelinks/kern/machine/setjmp.h ../../include/current.h \
+  includelinks/machine/current.h ../../include/syscall.h
+cpu.o: ../../arch/mips/thread/cpu.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h includelinks/mips/specialreg.h \
+  includelinks/mips/trapframe.h includelinks/platform/maxcpus.h \
+  ../../include/cpu.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/threadlist.h \
+  includelinks/machine/vm.h ../../include/thread.h ../../include/array.h \
+  includelinks/machine/thread.h ../../include/setjmp.h \
+  includelinks/kern/machine/setjmp.h
+switchframe.o: ../../arch/mips/thread/switchframe.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/thread.h ../../include/array.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/threadlist.h includelinks/machine/thread.h \
+  ../../include/setjmp.h includelinks/kern/machine/setjmp.h \
+  ../../include/threadprivate.h ../../arch/mips/thread/switchframe.h
+switch.o: ../../arch/mips/thread/switch.S \
+  includelinks/kern/mips/regdefs.h
+thread_machdep.o: ../../arch/mips/thread/thread_machdep.c \
+  ../../include/types.h ../../include/kern/types.h \
+  includelinks/kern/machine/types.h includelinks/machine/types.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/thread.h ../../include/array.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/threadlist.h \
+  includelinks/machine/thread.h ../../include/setjmp.h \
+  includelinks/kern/machine/setjmp.h ../../include/threadprivate.h
+threadstart.o: ../../arch/mips/thread/threadstart.S \
+  includelinks/kern/mips/regdefs.h
+dumbvm.o: ../../arch/mips/vm/dumbvm.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/spl.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/proc.h \
+  ../../include/thread.h ../../include/array.h ../../include/threadlist.h \
+  includelinks/machine/thread.h ../../include/setjmp.h \
+  includelinks/kern/machine/setjmp.h ../../include/limits.h \
+  ../../include/kern/limits.h ../../include/synch.h ../../include/list.h \
+  ../../include/current.h includelinks/machine/current.h \
+  includelinks/mips/tlb.h ../../include/addrspace.h ../../include/vm.h \
+  includelinks/machine/vm.h
+ram.o: ../../arch/mips/vm/ram.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h ../../include/vm.h includelinks/machine/vm.h \
+  ../../include/mainbus.h
+adddi3.o: ../../../common/gcc-millicode/adddi3.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+anddi3.o: ../../../common/gcc-millicode/anddi3.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+ashldi3.o: ../../../common/gcc-millicode/ashldi3.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+ashrdi3.o: ../../../common/gcc-millicode/ashrdi3.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+cmpdi2.o: ../../../common/gcc-millicode/cmpdi2.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+divdi3.o: ../../../common/gcc-millicode/divdi3.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+iordi3.o: ../../../common/gcc-millicode/iordi3.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+lshldi3.o: ../../../common/gcc-millicode/lshldi3.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+lshrdi3.o: ../../../common/gcc-millicode/lshrdi3.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+moddi3.o: ../../../common/gcc-millicode/moddi3.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+muldi3.o: ../../../common/gcc-millicode/muldi3.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+negdi2.o: ../../../common/gcc-millicode/negdi2.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+notdi2.o: ../../../common/gcc-millicode/notdi2.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+qdivrem.o: ../../../common/gcc-millicode/qdivrem.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+subdi3.o: ../../../common/gcc-millicode/subdi3.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+ucmpdi2.o: ../../../common/gcc-millicode/ucmpdi2.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+udivdi3.o: ../../../common/gcc-millicode/udivdi3.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+umoddi3.o: ../../../common/gcc-millicode/umoddi3.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+xordi3.o: ../../../common/gcc-millicode/xordi3.c \
+  ../../../common/gcc-millicode/longlong.h ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/endian.h \
+  ../../include/kern/endian.h includelinks/kern/machine/endian.h \
+  ../../include/limits.h ../../include/kern/limits.h
+setjmp.o: ../../../common/libc/arch/mips/setjmp.S \
+  includelinks/kern/mips/regdefs.h
+copyinout.o: ../../vm/copyinout.c ../../include/types.h \
+  ../../include/kern/types.h includelinks/kern/machine/types.h \
+  includelinks/machine/types.h ../../include/kern/errno.h \
+  ../../include/lib.h ../../include/cdefs.h opt-noasserts.h \
+  ../../include/setjmp.h includelinks/kern/machine/setjmp.h \
+  ../../include/thread.h ../../include/array.h ../../include/spinlock.h \
+  includelinks/machine/spinlock.h ../../include/threadlist.h \
+  includelinks/machine/thread.h ../../include/current.h \
+  includelinks/machine/current.h ../../include/vm.h \
+  includelinks/machine/vm.h ../../include/copyinout.h
+cache-mips161.o: ../../arch/mips/locore/cache-mips161.S \
+  includelinks/kern/mips/regdefs.h
+exception-mips1.o: ../../arch/mips/locore/exception-mips1.S \
+  includelinks/kern/mips/regdefs.h includelinks/mips/specialreg.h
+tlb-mips1.o: ../../arch/mips/vm/tlb-mips1.S \
+  includelinks/kern/mips/regdefs.h includelinks/mips/specialreg.h
+lamebus_machdep.o: ../../arch/sys161/dev/lamebus_machdep.c \
+  ../../include/types.h ../../include/kern/types.h \
+  includelinks/kern/machine/types.h includelinks/machine/types.h \
+  ../../include/kern/unistd.h ../../include/lib.h ../../include/cdefs.h \
+  opt-noasserts.h includelinks/mips/trapframe.h ../../include/cpu.h \
+  ../../include/spinlock.h includelinks/machine/spinlock.h \
+  ../../include/threadlist.h includelinks/machine/vm.h \
+  ../../include/spl.h ../../include/clock.h opt-synchprobs.h \
+  ../../include/thread.h ../../include/array.h \
+  includelinks/machine/thread.h ../../include/setjmp.h \
+  includelinks/kern/machine/setjmp.h ../../include/current.h \
+  includelinks/machine/current.h ../../include/synch.h \
+  ../../include/mainbus.h includelinks/sys161/bus.h \
+  ../../dev/lamebus/lamebus.h autoconf.h
+start.o: ../../arch/sys161/startup/start.S \
+  includelinks/kern/mips/regdefs.h includelinks/mips/specialreg.h

+ 15 - 0
kern/compile/ASST3/Makefile

@@ -0,0 +1,15 @@
+# Automatically generated by config; do not edit.
+#
+
+# Top of the kernel tree
+KTOP=../..
+# Top of the whole tree
+TOP=$(KTOP)/..
+# Debug vs. optimize
+KDEBUG=-g
+# Name of the kernel config file
+CONFNAME=ASST3
+
+.include "$(TOP)/mk/os161.config.mk"
+.include "files.mk"
+.include "$(TOP)/mk/os161.kernel.mk"

+ 410 - 0
kern/compile/ASST3/autoconf.c

@@ -0,0 +1,410 @@
+/* Automatically generated; do not edit */
+#include <types.h>
+#include <lib.h>
+#include "autoconf.h"
+
+static void autoconf_beep(struct beep_softc *, int);
+static void autoconf_con(struct con_softc *, int);
+static void autoconf_emu(struct emu_softc *, int);
+static void autoconf_lhd(struct lhd_softc *, int);
+static void autoconf_lrandom(struct lrandom_softc *, int);
+static void autoconf_lser(struct lser_softc *, int);
+static void autoconf_ltimer(struct ltimer_softc *, int);
+static void autoconf_ltrace(struct ltrace_softc *, int);
+static void autoconf_random(struct random_softc *, int);
+static void autoconf_rtclock(struct rtclock_softc *, int);
+static int nextunit_beep;
+static int nextunit_con;
+static int nextunit_emu;
+static int nextunit_lhd;
+static int nextunit_lrandom;
+static int nextunit_lser;
+static int nextunit_ltimer;
+static int nextunit_ltrace;
+static int nextunit_random;
+static int nextunit_rtclock;
+
+static
+int
+tryattach_emu_to_lamebus(int devunit, struct lamebus_softc *bus, int busunit)
+{
+	struct emu_softc *dev;
+	int result;
+
+	dev = attach_emu_to_lamebus(devunit, bus);
+	if (dev==NULL) {
+		return -1;
+	}
+	kprintf("emu%d at lamebus%d", devunit, busunit);
+	result = config_emu(dev, devunit);
+	if (result != 0) {
+		kprintf(": %s\n", strerror(result));
+		/* should really clean up dev */
+		return result;
+	}
+	kprintf("\n");
+	nextunit_emu = devunit+1;
+	autoconf_emu(dev, devunit);
+	return 0;
+}
+
+static
+int
+tryattach_ltrace_to_lamebus(int devunit, struct lamebus_softc *bus, int busunit)
+{
+	struct ltrace_softc *dev;
+	int result;
+
+	dev = attach_ltrace_to_lamebus(devunit, bus);
+	if (dev==NULL) {
+		return -1;
+	}
+	kprintf("ltrace%d at lamebus%d", devunit, busunit);
+	result = config_ltrace(dev, devunit);
+	if (result != 0) {
+		kprintf(": %s\n", strerror(result));
+		/* should really clean up dev */
+		return result;
+	}
+	kprintf("\n");
+	nextunit_ltrace = devunit+1;
+	autoconf_ltrace(dev, devunit);
+	return 0;
+}
+
+static
+int
+tryattach_ltimer_to_lamebus(int devunit, struct lamebus_softc *bus, int busunit)
+{
+	struct ltimer_softc *dev;
+	int result;
+
+	dev = attach_ltimer_to_lamebus(devunit, bus);
+	if (dev==NULL) {
+		return -1;
+	}
+	kprintf("ltimer%d at lamebus%d", devunit, busunit);
+	result = config_ltimer(dev, devunit);
+	if (result != 0) {
+		kprintf(": %s\n", strerror(result));
+		/* should really clean up dev */
+		return result;
+	}
+	kprintf("\n");
+	nextunit_ltimer = devunit+1;
+	autoconf_ltimer(dev, devunit);
+	return 0;
+}
+
+static
+int
+tryattach_lrandom_to_lamebus(int devunit, struct lamebus_softc *bus, int busunit)
+{
+	struct lrandom_softc *dev;
+	int result;
+
+	dev = attach_lrandom_to_lamebus(devunit, bus);
+	if (dev==NULL) {
+		return -1;
+	}
+	kprintf("lrandom%d at lamebus%d", devunit, busunit);
+	result = config_lrandom(dev, devunit);
+	if (result != 0) {
+		kprintf(": %s\n", strerror(result));
+		/* should really clean up dev */
+		return result;
+	}
+	kprintf("\n");
+	nextunit_lrandom = devunit+1;
+	autoconf_lrandom(dev, devunit);
+	return 0;
+}
+
+static
+int
+tryattach_lhd_to_lamebus(int devunit, struct lamebus_softc *bus, int busunit)
+{
+	struct lhd_softc *dev;
+	int result;
+
+	dev = attach_lhd_to_lamebus(devunit, bus);
+	if (dev==NULL) {
+		return -1;
+	}
+	kprintf("lhd%d at lamebus%d", devunit, busunit);
+	result = config_lhd(dev, devunit);
+	if (result != 0) {
+		kprintf(": %s\n", strerror(result));
+		/* should really clean up dev */
+		return result;
+	}
+	kprintf("\n");
+	nextunit_lhd = devunit+1;
+	autoconf_lhd(dev, devunit);
+	return 0;
+}
+
+static
+int
+tryattach_lser_to_lamebus(int devunit, struct lamebus_softc *bus, int busunit)
+{
+	struct lser_softc *dev;
+	int result;
+
+	dev = attach_lser_to_lamebus(devunit, bus);
+	if (dev==NULL) {
+		return -1;
+	}
+	kprintf("lser%d at lamebus%d", devunit, busunit);
+	result = config_lser(dev, devunit);
+	if (result != 0) {
+		kprintf(": %s\n", strerror(result));
+		/* should really clean up dev */
+		return result;
+	}
+	kprintf("\n");
+	nextunit_lser = devunit+1;
+	autoconf_lser(dev, devunit);
+	return 0;
+}
+
+static
+int
+tryattach_beep_to_ltimer(int devunit, struct ltimer_softc *bus, int busunit)
+{
+	struct beep_softc *dev;
+	int result;
+
+	dev = attach_beep_to_ltimer(devunit, bus);
+	if (dev==NULL) {
+		return -1;
+	}
+	kprintf("beep%d at ltimer%d", devunit, busunit);
+	result = config_beep(dev, devunit);
+	if (result != 0) {
+		kprintf(": %s\n", strerror(result));
+		/* should really clean up dev */
+		return result;
+	}
+	kprintf("\n");
+	nextunit_beep = devunit+1;
+	autoconf_beep(dev, devunit);
+	return 0;
+}
+
+static
+int
+tryattach_con_to_lser(int devunit, struct lser_softc *bus, int busunit)
+{
+	struct con_softc *dev;
+	int result;
+
+	dev = attach_con_to_lser(devunit, bus);
+	if (dev==NULL) {
+		return -1;
+	}
+	kprintf("con%d at lser%d", devunit, busunit);
+	result = config_con(dev, devunit);
+	if (result != 0) {
+		kprintf(": %s\n", strerror(result));
+		/* should really clean up dev */
+		return result;
+	}
+	kprintf("\n");
+	nextunit_con = devunit+1;
+	autoconf_con(dev, devunit);
+	return 0;
+}
+
+static
+int
+tryattach_rtclock_to_ltimer(int devunit, struct ltimer_softc *bus, int busunit)
+{
+	struct rtclock_softc *dev;
+	int result;
+
+	dev = attach_rtclock_to_ltimer(devunit, bus);
+	if (dev==NULL) {
+		return -1;
+	}
+	kprintf("rtclock%d at ltimer%d", devunit, busunit);
+	result = config_rtclock(dev, devunit);
+	if (result != 0) {
+		kprintf(": %s\n", strerror(result));
+		/* should really clean up dev */
+		return result;
+	}
+	kprintf("\n");
+	nextunit_rtclock = devunit+1;
+	autoconf_rtclock(dev, devunit);
+	return 0;
+}
+
+static
+int
+tryattach_random_to_lrandom(int devunit, struct lrandom_softc *bus, int busunit)
+{
+	struct random_softc *dev;
+	int result;
+
+	dev = attach_random_to_lrandom(devunit, bus);
+	if (dev==NULL) {
+		return -1;
+	}
+	kprintf("random%d at lrandom%d", devunit, busunit);
+	result = config_random(dev, devunit);
+	if (result != 0) {
+		kprintf(": %s\n", strerror(result));
+		/* should really clean up dev */
+		return result;
+	}
+	kprintf("\n");
+	nextunit_random = devunit+1;
+	autoconf_random(dev, devunit);
+	return 0;
+}
+
+
+static
+void
+autoconf_con(struct con_softc *bus, int busunit)
+{
+	(void)bus; (void)busunit;
+}
+
+static
+void
+autoconf_lser(struct lser_softc *bus, int busunit)
+{
+	(void)bus; (void)busunit;
+	{
+		if (nextunit_con <= 0) {
+			tryattach_con_to_lser(0, bus, busunit);
+		}
+	}
+}
+
+static
+void
+autoconf_lhd(struct lhd_softc *bus, int busunit)
+{
+	(void)bus; (void)busunit;
+}
+
+static
+void
+autoconf_emu(struct emu_softc *bus, int busunit)
+{
+	(void)bus; (void)busunit;
+}
+
+static
+void
+autoconf_random(struct random_softc *bus, int busunit)
+{
+	(void)bus; (void)busunit;
+}
+
+static
+void
+autoconf_ltimer(struct ltimer_softc *bus, int busunit)
+{
+	(void)bus; (void)busunit;
+	{
+		if (nextunit_beep <= 0) {
+			tryattach_beep_to_ltimer(0, bus, busunit);
+		}
+	}
+	{
+		if (nextunit_rtclock <= 0) {
+			tryattach_rtclock_to_ltimer(0, bus, busunit);
+		}
+	}
+}
+
+void
+autoconf_lamebus(struct lamebus_softc *bus, int busunit)
+{
+	(void)bus; (void)busunit;
+	{
+		int result, devunit=nextunit_emu;
+		do {
+			result = tryattach_emu_to_lamebus(devunit, bus, busunit);
+			devunit++;
+		} while (result==0);
+	}
+	{
+		int result, devunit=nextunit_ltrace;
+		do {
+			result = tryattach_ltrace_to_lamebus(devunit, bus, busunit);
+			devunit++;
+		} while (result==0);
+	}
+	{
+		int result, devunit=nextunit_ltimer;
+		do {
+			result = tryattach_ltimer_to_lamebus(devunit, bus, busunit);
+			devunit++;
+		} while (result==0);
+	}
+	{
+		int result, devunit=nextunit_lrandom;
+		do {
+			result = tryattach_lrandom_to_lamebus(devunit, bus, busunit);
+			devunit++;
+		} while (result==0);
+	}
+	{
+		int result, devunit=nextunit_lhd;
+		do {
+			result = tryattach_lhd_to_lamebus(devunit, bus, busunit);
+			devunit++;
+		} while (result==0);
+	}
+	{
+		int result, devunit=nextunit_lser;
+		do {
+			result = tryattach_lser_to_lamebus(devunit, bus, busunit);
+			devunit++;
+		} while (result==0);
+	}
+}
+
+static
+void
+autoconf_beep(struct beep_softc *bus, int busunit)
+{
+	(void)bus; (void)busunit;
+}
+
+static
+void
+autoconf_lrandom(struct lrandom_softc *bus, int busunit)
+{
+	(void)bus; (void)busunit;
+	{
+		if (nextunit_random <= 0) {
+			tryattach_random_to_lrandom(0, bus, busunit);
+		}
+	}
+}
+
+static
+void
+autoconf_rtclock(struct rtclock_softc *bus, int busunit)
+{
+	(void)bus; (void)busunit;
+}
+
+static
+void
+autoconf_ltrace(struct ltrace_softc *bus, int busunit)
+{
+	(void)bus; (void)busunit;
+}
+
+void
+pseudoconfig(void)
+{
+}
+

+ 43 - 0
kern/compile/ASST3/autoconf.h

@@ -0,0 +1,43 @@
+/* Automatically generated; do not edit */
+#ifndef _AUTOCONF_H_
+#define _AUTOCONF_H_
+
+struct lamebus_softc;
+struct emu_softc;
+struct ltrace_softc;
+struct ltimer_softc;
+struct lrandom_softc;
+struct lhd_softc;
+struct lser_softc;
+struct beep_softc;
+struct con_softc;
+struct rtclock_softc;
+struct random_softc;
+
+void autoconf_lamebus(struct lamebus_softc *dev, int unit);
+
+struct emu_softc *attach_emu_to_lamebus(int devunit, struct lamebus_softc *bus);
+struct ltrace_softc *attach_ltrace_to_lamebus(int devunit, struct lamebus_softc *bus);
+struct ltimer_softc *attach_ltimer_to_lamebus(int devunit, struct lamebus_softc *bus);
+struct lrandom_softc *attach_lrandom_to_lamebus(int devunit, struct lamebus_softc *bus);
+struct lhd_softc *attach_lhd_to_lamebus(int devunit, struct lamebus_softc *bus);
+struct lser_softc *attach_lser_to_lamebus(int devunit, struct lamebus_softc *bus);
+struct beep_softc *attach_beep_to_ltimer(int devunit, struct ltimer_softc *bus);
+struct con_softc *attach_con_to_lser(int devunit, struct lser_softc *bus);
+struct rtclock_softc *attach_rtclock_to_ltimer(int devunit, struct ltimer_softc *bus);
+struct random_softc *attach_random_to_lrandom(int devunit, struct lrandom_softc *bus);
+
+int config_emu(struct emu_softc *dev, int unit);
+int config_ltrace(struct ltrace_softc *dev, int unit);
+int config_ltimer(struct ltimer_softc *dev, int unit);
+int config_lrandom(struct lrandom_softc *dev, int unit);
+int config_lhd(struct lhd_softc *dev, int unit);
+int config_lser(struct lser_softc *dev, int unit);
+int config_beep(struct beep_softc *dev, int unit);
+int config_con(struct con_softc *dev, int unit);
+int config_rtclock(struct rtclock_softc *dev, int unit);
+int config_random(struct random_softc *dev, int unit);
+
+void pseudoconfig(void);
+
+#endif /* _AUTOCONF_H_ */

+ 114 - 0
kern/compile/ASST3/files.mk

@@ -0,0 +1,114 @@
+# Automatically generated by config; do not edit
+SRCS+=$(TOP)/common/libc/printf/__printf.c
+SRCS+=$(TOP)/common/libc/printf/snprintf.c
+SRCS+=$(TOP)/common/libc/stdlib/atoi.c
+SRCS+=$(TOP)/common/libc/string/bzero.c
+SRCS+=$(TOP)/common/libc/string/memcpy.c
+SRCS+=$(TOP)/common/libc/string/memmove.c
+SRCS+=$(TOP)/common/libc/string/strcat.c
+SRCS+=$(TOP)/common/libc/string/strchr.c
+SRCS+=$(TOP)/common/libc/string/strcmp.c
+SRCS+=$(TOP)/common/libc/string/strcpy.c
+SRCS+=$(TOP)/common/libc/string/strlen.c
+SRCS+=$(TOP)/common/libc/string/strrchr.c
+SRCS+=$(TOP)/common/libc/string/strtok_r.c
+SRCS+=$(KTOP)/compile/ASST3/autoconf.c
+SRCS+=$(KTOP)/dev/generic/beep.c
+SRCS+=$(KTOP)/dev/generic/console.c
+SRCS+=$(KTOP)/dev/generic/random.c
+SRCS+=$(KTOP)/dev/generic/rtclock.c
+SRCS+=$(KTOP)/dev/lamebus/beep_ltimer.c
+SRCS+=$(KTOP)/dev/lamebus/con_lser.c
+SRCS+=$(KTOP)/dev/lamebus/emu_att.c
+SRCS+=$(KTOP)/dev/lamebus/emu.c
+SRCS+=$(KTOP)/dev/lamebus/lamebus.c
+SRCS+=$(KTOP)/dev/lamebus/lhd_att.c
+SRCS+=$(KTOP)/dev/lamebus/lhd.c
+SRCS+=$(KTOP)/dev/lamebus/lrandom_att.c
+SRCS+=$(KTOP)/dev/lamebus/lrandom.c
+SRCS+=$(KTOP)/dev/lamebus/lser_att.c
+SRCS+=$(KTOP)/dev/lamebus/lser.c
+SRCS+=$(KTOP)/dev/lamebus/ltimer_att.c
+SRCS+=$(KTOP)/dev/lamebus/ltimer.c
+SRCS+=$(KTOP)/dev/lamebus/ltrace_att.c
+SRCS+=$(KTOP)/dev/lamebus/ltrace.c
+SRCS+=$(KTOP)/dev/lamebus/random_lrandom.c
+SRCS+=$(KTOP)/dev/lamebus/rtclock_ltimer.c
+SRCS+=$(KTOP)/fs/sfs/sfs_fs.c
+SRCS+=$(KTOP)/fs/sfs/sfs_io.c
+SRCS+=$(KTOP)/fs/sfs/sfs_vnode.c
+SRCS+=$(KTOP)/lib/array.c
+SRCS+=$(KTOP)/lib/bitmap.c
+SRCS+=$(KTOP)/lib/bswap.c
+SRCS+=$(KTOP)/lib/kgets.c
+SRCS+=$(KTOP)/lib/kprintf.c
+SRCS+=$(KTOP)/lib/list.c
+SRCS+=$(KTOP)/lib/misc.c
+SRCS+=$(KTOP)/lib/queue.c
+SRCS+=$(KTOP)/lib/uio.c
+SRCS.MACHINE.mips+=$(KTOP)/arch/mips/locore/trap.c
+SRCS.MACHINE.mips+=$(KTOP)/arch/mips/syscall/syscall.c
+SRCS.MACHINE.mips+=$(KTOP)/arch/mips/thread/cpu.c
+SRCS.MACHINE.mips+=$(KTOP)/arch/mips/thread/switchframe.c
+SRCS.MACHINE.mips+=$(KTOP)/arch/mips/thread/switch.S
+SRCS.MACHINE.mips+=$(KTOP)/arch/mips/thread/thread_machdep.c
+SRCS.MACHINE.mips+=$(KTOP)/arch/mips/thread/threadstart.S
+SRCS.MACHINE.mips+=$(KTOP)/arch/mips/vm/dumbvm.c
+SRCS.MACHINE.mips+=$(KTOP)/arch/mips/vm/ram.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/adddi3.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/anddi3.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/ashldi3.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/ashrdi3.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/cmpdi2.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/divdi3.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/iordi3.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/lshldi3.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/lshrdi3.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/moddi3.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/muldi3.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/negdi2.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/notdi2.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/qdivrem.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/subdi3.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/ucmpdi2.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/udivdi3.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/umoddi3.c
+SRCS.MACHINE.mips+=$(TOP)/common/gcc-millicode/xordi3.c
+SRCS.MACHINE.mips+=$(TOP)/common/libc/arch/mips/setjmp.S
+SRCS.MACHINE.mips+=$(KTOP)/vm/copyinout.c
+SRCS+=$(KTOP)/proc/proc.c
+SRCS+=$(KTOP)/startup/main.c
+SRCS+=$(KTOP)/startup/menu.c
+SRCS.PLATFORM.sys161+=$(KTOP)/arch/mips/locore/cache-mips161.S
+SRCS.PLATFORM.sys161+=$(KTOP)/arch/mips/locore/exception-mips1.S
+SRCS.PLATFORM.sys161+=$(KTOP)/arch/mips/vm/tlb-mips1.S
+SRCS.PLATFORM.sys161+=$(KTOP)/arch/sys161/dev/lamebus_machdep.c
+SRCS.PLATFORM.sys161+=$(KTOP)/arch/sys161/startup/start.S
+SRCS+=$(KTOP)/syscall/file_syscalls.c
+SRCS+=$(KTOP)/syscall/loadelf.c
+SRCS+=$(KTOP)/syscall/proc_syscalls.c
+SRCS+=$(KTOP)/syscall/runprogram.c
+SRCS+=$(KTOP)/syscall/time_syscalls.c
+SRCS+=$(KTOP)/test/arraytest.c
+SRCS+=$(KTOP)/test/bitmaptest.c
+SRCS+=$(KTOP)/test/fstest.c
+SRCS+=$(KTOP)/test/malloctest.c
+SRCS+=$(KTOP)/test/synchtest.c
+SRCS+=$(KTOP)/test/threadtest.c
+SRCS+=$(KTOP)/test/tt3.c
+SRCS+=$(KTOP)/test/uw-tests.c
+SRCS+=$(KTOP)/thread/clock.c
+SRCS+=$(KTOP)/thread/spinlock.c
+SRCS+=$(KTOP)/thread/spl.c
+SRCS+=$(KTOP)/thread/synch.c
+SRCS+=$(KTOP)/thread/thread.c
+SRCS+=$(KTOP)/thread/threadlist.c
+SRCS+=$(KTOP)/vfs/device.c
+SRCS+=$(KTOP)/vfs/devnull.c
+SRCS+=$(KTOP)/vfs/vfscwd.c
+SRCS+=$(KTOP)/vfs/vfslist.c
+SRCS+=$(KTOP)/vfs/vfslookup.c
+SRCS+=$(KTOP)/vfs/vfspath.c
+SRCS+=$(KTOP)/vfs/vnode.c
+SRCS+=$(KTOP)/vm/kmalloc.c
+SRCS+=$(KTOP)/vm/uw-vmstats.c

+ 1 - 0
kern/compile/ASST3/includelinks/kern/machine

@@ -0,0 +1 @@
+mips

+ 1 - 0
kern/compile/ASST3/includelinks/kern/mips

@@ -0,0 +1 @@
+../../../../arch/mips/include/kern

+ 1 - 0
kern/compile/ASST3/includelinks/machine

@@ -0,0 +1 @@
+mips

+ 1 - 0
kern/compile/ASST3/includelinks/mips

@@ -0,0 +1 @@
+../../../arch/mips/include

+ 1 - 0
kern/compile/ASST3/includelinks/platform

@@ -0,0 +1 @@
+sys161

+ 1 - 0
kern/compile/ASST3/includelinks/sys161

@@ -0,0 +1 @@
+../../../arch/sys161/include

BIN
kern/compile/ASST3/kernel


+ 5 - 0
kern/compile/ASST3/opt-A0.h

@@ -0,0 +1,5 @@
+/* Automatically generated; do not edit */
+#ifndef _OPT_A0_H_
+#define _OPT_A0_H_
+#define OPT_A0 0
+#endif /* _OPT_A0_H_ */

+ 5 - 0
kern/compile/ASST3/opt-A1.h

@@ -0,0 +1,5 @@
+/* Automatically generated; do not edit */
+#ifndef _OPT_A1_H_
+#define _OPT_A1_H_
+#define OPT_A1 1
+#endif /* _OPT_A1_H_ */

+ 5 - 0
kern/compile/ASST3/opt-A2.h

@@ -0,0 +1,5 @@
+/* Automatically generated; do not edit */
+#ifndef _OPT_A2_H_
+#define _OPT_A2_H_
+#define OPT_A2 1
+#endif /* _OPT_A2_H_ */

+ 5 - 0
kern/compile/ASST3/opt-A3.h

@@ -0,0 +1,5 @@
+/* Automatically generated; do not edit */
+#ifndef _OPT_A3_H_
+#define _OPT_A3_H_
+#define OPT_A3 1
+#endif /* _OPT_A3_H_ */

+ 5 - 0
kern/compile/ASST3/opt-A4.h

@@ -0,0 +1,5 @@
+/* Automatically generated; do not edit */
+#ifndef _OPT_A4_H_
+#define _OPT_A4_H_
+#define OPT_A4 0
+#endif /* _OPT_A4_H_ */

+ 5 - 0
kern/compile/ASST3/opt-A5.h

@@ -0,0 +1,5 @@
+/* Automatically generated; do not edit */
+#ifndef _OPT_A5_H_
+#define _OPT_A5_H_
+#define OPT_A5 0
+#endif /* _OPT_A5_H_ */

+ 5 - 0
kern/compile/ASST3/opt-dumbvm.h

@@ -0,0 +1,5 @@
+/* Automatically generated; do not edit */
+#ifndef _OPT_DUMBVM_H_
+#define _OPT_DUMBVM_H_
+#define OPT_DUMBVM 1
+#endif /* _OPT_DUMBVM_H_ */

+ 5 - 0
kern/compile/ASST3/opt-net.h

@@ -0,0 +1,5 @@
+/* Automatically generated; do not edit */
+#ifndef _OPT_NET_H_
+#define _OPT_NET_H_
+#define OPT_NET 0
+#endif /* _OPT_NET_H_ */

+ 5 - 0
kern/compile/ASST3/opt-netfs.h

@@ -0,0 +1,5 @@
+/* Automatically generated; do not edit */
+#ifndef _OPT_NETFS_H_
+#define _OPT_NETFS_H_
+#define OPT_NETFS 0
+#endif /* _OPT_NETFS_H_ */

+ 5 - 0
kern/compile/ASST3/opt-noasserts.h

@@ -0,0 +1,5 @@
+/* Automatically generated; do not edit */
+#ifndef _OPT_NOASSERTS_H_
+#define _OPT_NOASSERTS_H_
+#define OPT_NOASSERTS 0
+#endif /* _OPT_NOASSERTS_H_ */

+ 5 - 0
kern/compile/ASST3/opt-sfs.h

@@ -0,0 +1,5 @@
+/* Automatically generated; do not edit */
+#ifndef _OPT_SFS_H_
+#define _OPT_SFS_H_
+#define OPT_SFS 1
+#endif /* _OPT_SFS_H_ */

+ 5 - 0
kern/compile/ASST3/opt-synchprobs.h

@@ -0,0 +1,5 @@
+/* Automatically generated; do not edit */
+#ifndef _OPT_SYNCHPROBS_H_
+#define _OPT_SYNCHPROBS_H_
+#define OPT_SYNCHPROBS 0
+#endif /* _OPT_SYNCHPROBS_H_ */

+ 3 - 0
kern/compile/ASST3/vers.c

@@ -0,0 +1,3 @@
+/* This file is automatically generated. Edits will be lost.*/
+const int buildversion = 1;
+const char buildconfig[] = "ASST3";

+ 1 - 0
kern/compile/ASST3/version

@@ -0,0 +1 @@
+1

+ 1 - 0
kern/include/addrspace.h

@@ -56,6 +56,7 @@ struct addrspace
   paddr_t as_pbase2;
   size_t as_npages2;
   paddr_t as_stackpbase;
+  bool loading;
 };
 
 /*

+ 9 - 7
kern/syscall/loadelf.c

@@ -77,7 +77,7 @@
 static
 int
 load_segment(struct addrspace *as, struct vnode *v,
-	     off_t offset, vaddr_t vaddr, 
+	     off_t offset, vaddr_t vaddr,
 	     size_t memsize, size_t filesize,
 	     int is_executable)
 {
@@ -90,7 +90,7 @@ load_segment(struct addrspace *as, struct vnode *v,
 		filesize = memsize;
 	}
 
-	DEBUG(DB_EXEC, "ELF: Loading %lu bytes to 0x%lx\n", 
+	DEBUG(DB_EXEC, "ELF: Loading %lu bytes to 0x%lx\n",
 	      (unsigned long) filesize, (unsigned long) vaddr);
 
 	iov.iov_ubase = (userptr_t)vaddr;
@@ -134,7 +134,7 @@ load_segment(struct addrspace *as, struct vnode *v,
 
 		fillamt = memsize - filesize;
 		if (fillamt > 0) {
-			DEBUG(DB_EXEC, "ELF: Zero-filling %lu more bytes\n", 
+			DEBUG(DB_EXEC, "ELF: Zero-filling %lu more bytes\n",
 			      (unsigned long) fillamt);
 			u.uio_resid += fillamt;
 			result = uiomovezeros(fillamt, &u);
@@ -210,7 +210,7 @@ load_elf(struct vnode *v, vaddr_t *entrypoint)
 	 * conceivably be more. You don't need to support such files
 	 * if it's unduly awkward to do so.
 	 *
-	 * Note that the expression eh.e_phoff + i*eh.e_phentsize is 
+	 * Note that the expression eh.e_phoff + i*eh.e_phentsize is
 	 * mandated by the ELF standard - we use sizeof(ph) to load,
 	 * because that's the structure we know, but the file on disk
 	 * might have a larger structure, so we must use e_phentsize
@@ -238,7 +238,7 @@ load_elf(struct vnode *v, vaddr_t *entrypoint)
 		    case PT_MIPS_REGINFO: /* skip */ continue;
 		    case PT_LOAD: break;
 		    default:
-			kprintf("loadelf: unknown segment type %d\n", 
+			kprintf("loadelf: unknown segment type %d\n",
 				ph.p_type);
 			return ENOEXEC;
 		}
@@ -283,12 +283,12 @@ load_elf(struct vnode *v, vaddr_t *entrypoint)
 		    case PT_MIPS_REGINFO: /* skip */ continue;
 		    case PT_LOAD: break;
 		    default:
-			kprintf("loadelf: unknown segment type %d\n", 
+			kprintf("loadelf: unknown segment type %d\n",
 				ph.p_type);
 			return ENOEXEC;
 		}
 
-		result = load_segment(as, v, ph.p_offset, ph.p_vaddr, 
+		result = load_segment(as, v, ph.p_offset, ph.p_vaddr,
 				      ph.p_memsz, ph.p_filesz,
 				      ph.p_flags & PF_X);
 		if (result) {
@@ -302,6 +302,8 @@ load_elf(struct vnode *v, vaddr_t *entrypoint)
 	}
 
 	*entrypoint = eh.e_entry;
+  as->loading = false;
+  as_activate();
 
 	return 0;
 }

+ 2 - 1
kern/syscall/proc_syscalls.c

@@ -20,7 +20,8 @@ void sys__exit(int exitcode)
 {
   struct addrspace * as;
   struct proc * p = curproc;
-  p->exitcode = _MKWAIT_EXIT(exitcode);
+  if (exitcode == -2) p->exitcode = _MKWAIT_SIG(129); // not sure what error code is normally, but this is unix std
+  else p->exitcode = _MKWAIT_EXIT(exitcode);
   DEBUG(DB_SYSCALL,"Syscall: _exit(%d)\n",exitcode);
   KASSERT(curproc->p_addrspace != NULL);
   

+ 4 - 4
user/testbin/badcall/bad_lseek.c

@@ -1,4 +1,4 @@
-/*
+exticode/*
  * Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009
  *	The President and Fellows of Harvard College.
  *
@@ -100,7 +100,7 @@ lseek_file_stdin(void)
 		_exit(0);
 	}
 
-	/* 
+	/*
 	 * Move file to stdin.
 	 * Use stdin (rather than stdout or stderr) to maximize the
 	 * chances of detecting any special-case handling of fds 0-2.
@@ -202,7 +202,7 @@ lseek_loc_pasteof(void)
 	}
 	if (pos != 5340) {
 		warnx("FAILURE: lseek to 5340 got offset %ld", (long) pos);
-		goto out;
+		exticode out;
 	}
 
 	pos = lseek(fd, -50, SEEK_CUR);
@@ -222,7 +222,7 @@ lseek_loc_pasteof(void)
 	}
 
 	if (pos != (off_t) strlen(message)) {
-		warnx("FAILURE: seek to EOF got %ld (should be %d)", 
+		warnx("FAILURE: seek to EOF got %ld (should be %d)",
 		      (long) pos, strlen(message));
 		goto out;
 	}