Index: kernel/Makefile
===================================================================
--- kernel/Makefile	(revision 1581708902331ee97e832b4c9189e7bbff9ec789)
+++ kernel/Makefile	(revision 711e1f32ff29817726bcac1317d5d28bdaabac90)
@@ -33,8 +33,7 @@
 all: ../version ../Makefile.config ../config.h ../config.defs
 	-[ -f $(DEPEND) ] && mv -f $(DEPEND) $(DEPEND_PREV)
-	$(MAKE) -f Makefile.build EXTRA_TOOL=$(EXTRA_TOOL)
+	$(MAKE) -f Makefile.build PRECHECK=$(PRECHECK)
 
 clean:
 	rm -f $(DEPEND) $(DEPEND_PREV) $(RAW) $(BIN) $(MAP) $(JOB) $(MAP_PREV) $(DISASM) $(DUMP) $(REAL_MAP).* $(ARCH_INCLUDE) $(GENARCH_INCLUDE) arch/*/_link.ld
 	find generic/src/ arch/*/src/ genarch/src/ test/ -name '*.o' -follow -exec rm \{\} \;
-	find generic/src/ arch/*/src/ genarch/src/ test/ -name '*.o.preproc' -follow -exec rm \{\} \;
Index: kernel/Makefile.build
===================================================================
--- kernel/Makefile.build	(revision 1581708902331ee97e832b4c9189e7bbff9ec789)
+++ kernel/Makefile.build	(revision 711e1f32ff29817726bcac1317d5d28bdaabac90)
@@ -376,7 +376,13 @@
 %.o: %.S $(DEPEND)
 	$(GCC) $(DEFS) $(GCC_CFLAGS) -D__ASM__ -c $< -o $@
+ifeq ($(PRECHECK),y)
+	$(JOBFILE) $(JOB) $< $@ as asm/preproc $(DEFS) $(GCC_CFLAGS) -D__ASM__
+endif
 
 %.o: %.s $(DEPEND)
 	$(AS) $(AFLAGS) $< -o $@
+ifeq ($(PRECHECK),y)
+	$(JOBFILE) $(JOB) $< $@ as asm $(DEFS) $(CFLAGS) $(EXTRA_FLAGS)
+endif
 
 #
@@ -386,6 +392,6 @@
 test/fpu/%.o: test/fpu/%.c $(DEPEND)
 	$(CC) $(DEFS) $(CFLAGS) $(EXTRA_FLAGS) -c $< -o $@
-ifeq ($(EXTRA_TOOL),stanse)
-	../tools/jobfile.py $(JOB) $< $@ $(DEFS) $(CFLAGS) $(EXTRA_FLAGS)
+ifeq ($(PRECHECK),y)
+	$(JOBFILE) $(JOB) $< $@ cc test $(DEFS) $(CFLAGS) $(EXTRA_FLAGS)
 endif
 
@@ -395,6 +401,6 @@
 %.o: %.c $(DEPEND)
 	$(CC) $(DEFS) $(CFLAGS) $(EXTRA_FLAGS) $(FPU_NO_CFLAGS) -c $< -o $@
-ifeq ($(EXTRA_TOOL),stanse)
-	../tools/jobfile.py $(JOB) $< $@ $(DEFS) $(CFLAGS) $(EXTRA_FLAGS) $(FPU_NO_CFLAGS)
+ifeq ($(PRECHECK),y)
+	$(JOBFILE) $(JOB) $< $@ cc core $(DEFS) $(CFLAGS) $(EXTRA_FLAGS) $(FPU_NO_CFLAGS)
 endif
 
@@ -406,5 +412,5 @@
 	$(LD) -T $(LINK) $(LFLAGS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(EXTRA_OBJECTS) $(EMPTY_MAP) -o $@ -Map $(MAP_PREV)
 	$(OBJDUMP) -t $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) > $(DUMP)
-	tools/genmap.py $(MAP_PREV) $(DUMP) $@
+	$(GENMAP) $(MAP_PREV) $(DUMP) $@
 	
 	# Do it once again, this time to get correct even the symbols
@@ -414,5 +420,5 @@
 	$(LD) -T $(LINK) $(LFLAGS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(EXTRA_OBJECTS) $(SIZEOK_MAP) -o $@ -Map $(MAP_PREV)
 	$(OBJDUMP) -t $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) > $(DUMP)
-	tools/genmap.py $(MAP_PREV) $(DUMP) $@
+	$(GENMAP) $(MAP_PREV) $(DUMP) $@
 
 $(DEPEND): $(ARCH_INCLUDE) $(GENARCH_INCLUDE)
Index: kernel/Makefile.common
===================================================================
--- kernel/Makefile.common	(revision 1581708902331ee97e832b4c9189e7bbff9ec789)
+++ kernel/Makefile.common	(revision 711e1f32ff29817726bcac1317d5d28bdaabac90)
@@ -44,2 +44,5 @@
 ARCH_INCLUDE = generic/include/arch
 GENARCH_INCLUDE = generic/include/genarch
+
+GENMAP = tools/genmap.py
+JOBFILE = ../tools/jobfile.py
Index: kernel/arch/amd64/_link.ld.in
===================================================================
--- kernel/arch/amd64/_link.ld.in	(revision 1581708902331ee97e832b4c9189e7bbff9ec789)
+++ kernel/arch/amd64/_link.ld.in	(revision 711e1f32ff29817726bcac1317d5d28bdaabac90)
@@ -44,4 +44,5 @@
 		*(COMMON);		/* global variables */
 
+		. = ALIGN(8);
 		symbol_table = .;
 		*(symtab.*);            /* Symbol table, must be LAST symbol!*/
Index: kernel/arch/amd64/src/amd64.c
===================================================================
--- kernel/arch/amd64/src/amd64.c	(revision 1581708902331ee97e832b4c9189e7bbff9ec789)
+++ kernel/arch/amd64/src/amd64.c	(revision 711e1f32ff29817726bcac1317d5d28bdaabac90)
@@ -212,4 +212,5 @@
 			i8042_wire(i8042_instance, kbrd);
 			trap_virtual_enable_irqs(1 << IRQ_KBD);
+			trap_virtual_enable_irqs(1 << IRQ_MOUSE);
 		}
 	}
@@ -219,9 +220,10 @@
 	 * self-sufficient.
 	 */
-	sysinfo_set_item_val("kbd", NULL, true);
-	sysinfo_set_item_val("kbd.inr", NULL, IRQ_KBD);
-	sysinfo_set_item_val("kbd.address.physical", NULL,
+	sysinfo_set_item_val("i8042", NULL, true);
+	sysinfo_set_item_val("i8042.inr_a", NULL, IRQ_KBD);
+	sysinfo_set_item_val("i8042.inr_b", NULL, IRQ_MOUSE);
+	sysinfo_set_item_val("i8042.address.physical", NULL,
 	    (uintptr_t) I8042_BASE);
-	sysinfo_set_item_val("kbd.address.kernel", NULL,
+	sysinfo_set_item_val("i8042.address.kernel", NULL,
 	    (uintptr_t) I8042_BASE);
 #endif
Index: kernel/arch/amd64/src/boot/boot.S
===================================================================
--- kernel/arch/amd64/src/boot/boot.S	(revision 1581708902331ee97e832b4c9189e7bbff9ec789)
+++ kernel/arch/amd64/src/boot/boot.S	(revision 711e1f32ff29817726bcac1317d5d28bdaabac90)
@@ -333,11 +333,11 @@
 
 extended_cpuid_msg:
-	.asciz "Extended CPUID not supported. System halted."
+	.asciz "Error: Extended CPUID not supported -- CPU is not 64-bit. System halted."
 long_mode_msg:
-	.asciz "64 bit long mode not supported. System halted."
+	.asciz "Error: 64-bit long mode not supported. System halted."
 noexecute_msg:
-	.asciz "No-execute pages not supported. System halted."
+	.asciz "Error: No-execute pages not supported. System halted."
 fx_msg:
-	.asciz "FXSAVE/FXRESTORE instructions not supported. System halted."
+	.asciz "Error: FXSAVE/FXRESTORE instructions not supported. System halted."
 sse2_msg:
-	.asciz "SSE2 instructions not supported. System halted."
+	.asciz "Error: SSE2 instructions not supported. System halted."
Index: kernel/arch/arm32/_link.ld.in
===================================================================
--- kernel/arch/arm32/_link.ld.in	(revision 1581708902331ee97e832b4c9189e7bbff9ec789)
+++ kernel/arch/arm32/_link.ld.in	(revision 711e1f32ff29817726bcac1317d5d28bdaabac90)
@@ -34,4 +34,5 @@
 		*(.sdata);
 		*(.reginfo);
+		. = ALIGN(8);
 		symbol_table = .;
 		*(symtab.*);
Index: kernel/arch/ia32/_link.ld.in
===================================================================
--- kernel/arch/ia32/_link.ld.in	(revision 1581708902331ee97e832b4c9189e7bbff9ec789)
+++ kernel/arch/ia32/_link.ld.in	(revision 711e1f32ff29817726bcac1317d5d28bdaabac90)
@@ -42,4 +42,5 @@
 		hardcoded_unmapped_kdata_size = .;
 		LONG(unmapped_kdata_end - unmapped_kdata_start);
+		. = ALIGN(8);
 		symbol_table = .;
 		*(symtab.*);            /* Symbol table, must be LAST symbol! */
Index: kernel/arch/ia32/src/ia32.c
===================================================================
--- kernel/arch/ia32/src/ia32.c	(revision 1581708902331ee97e832b4c9189e7bbff9ec789)
+++ kernel/arch/ia32/src/ia32.c	(revision 711e1f32ff29817726bcac1317d5d28bdaabac90)
@@ -170,4 +170,5 @@
 			i8042_wire(i8042_instance, kbrd);
 			trap_virtual_enable_irqs(1 << IRQ_KBD);
+			trap_virtual_enable_irqs(1 << IRQ_MOUSE);
 		}
 	}
@@ -177,9 +178,10 @@
 	 * self-sufficient.
 	 */
-	sysinfo_set_item_val("kbd", NULL, true);
-	sysinfo_set_item_val("kbd.inr", NULL, IRQ_KBD);
-	sysinfo_set_item_val("kbd.address.physical", NULL,
+	sysinfo_set_item_val("i8042", NULL, true);
+	sysinfo_set_item_val("i8042.inr_a", NULL, IRQ_KBD);
+	sysinfo_set_item_val("i8042.inr_b", NULL, IRQ_MOUSE);
+	sysinfo_set_item_val("i8042.address.physical", NULL,
 	    (uintptr_t) I8042_BASE);
-	sysinfo_set_item_val("kbd.address.kernel", NULL,
+	sysinfo_set_item_val("i8042.address.kernel", NULL,
 	    (uintptr_t) I8042_BASE);
 #endif
Index: kernel/arch/ia64/_link.ld.in
===================================================================
--- kernel/arch/ia64/_link.ld.in	(revision 1581708902331ee97e832b4c9189e7bbff9ec789)
+++ kernel/arch/ia64/_link.ld.in	(revision 711e1f32ff29817726bcac1317d5d28bdaabac90)
@@ -37,4 +37,5 @@
 		*(COMMON);
 
+		. = ALIGN(8);
                 symbol_table = .;
                 *(symtab.*);            /* Symbol table, must be LAST symbol!*/
Index: kernel/arch/ia64/include/mm/asid.h
===================================================================
--- kernel/arch/ia64/include/mm/asid.h	(revision 1581708902331ee97e832b4c9189e7bbff9ec789)
+++ kernel/arch/ia64/include/mm/asid.h	(revision 711e1f32ff29817726bcac1317d5d28bdaabac90)
@@ -50,14 +50,16 @@
  * but those extra bits are not used by the kernel. 
  */
-#define RIDS_PER_ASID		7
+#define RIDS_PER_ASID		8
 
 #define RID_MAX			262143		/* 2^18 - 1 */
-#define RID_KERNEL		0
-#define RID_INVALID		1
+#define RID_KERNEL7		7
 
-#define ASID2RID(asid, vrn)	(((asid)>RIDS_PER_ASID)?(((asid)*RIDS_PER_ASID)+(vrn)):(asid))
-#define RID2ASID(rid)		((rid)/RIDS_PER_ASID)
+#define ASID2RID(asid, vrn) \
+	((asid) * RIDS_PER_ASID + (vrn))
 
-#define ASID_MAX_ARCH		(RID_MAX/RIDS_PER_ASID)
+#define RID2ASID(rid) \
+	((rid) / RIDS_PER_ASID)
+
+#define ASID_MAX_ARCH		(RID_MAX / RIDS_PER_ASID)
 
 #endif
Index: kernel/arch/ia64/src/ia64.c
===================================================================
--- kernel/arch/ia64/src/ia64.c	(revision 1581708902331ee97e832b4c9189e7bbff9ec789)
+++ kernel/arch/ia64/src/ia64.c	(revision 711e1f32ff29817726bcac1317d5d28bdaabac90)
@@ -203,10 +203,10 @@
 	}
 	
-	sysinfo_set_item_val("kbd", NULL, true);
-	sysinfo_set_item_val("kbd.inr", NULL, IRQ_KBD);
-	sysinfo_set_item_val("kbd.type", NULL, KBD_LEGACY);
-	sysinfo_set_item_val("kbd.address.physical", NULL,
+	sysinfo_set_item_val("i8042", NULL, true);
+	sysinfo_set_item_val("i8042.inr_a", NULL, IRQ_KBD);
+	sysinfo_set_item_val("i8042.inr_b", NULL, IRQ_MOUSE);
+	sysinfo_set_item_val("i8042.address.physical", NULL,
 	    (uintptr_t) I8042_BASE);
-	sysinfo_set_item_val("kbd.address.kernel", NULL,
+	sysinfo_set_item_val("i8042.address.kernel", NULL,
 	    (uintptr_t) I8042_BASE);
 #endif
Index: kernel/arch/ia64/src/mm/page.c
===================================================================
--- kernel/arch/ia64/src/mm/page.c	(revision 1581708902331ee97e832b4c9189e7bbff9ec789)
+++ kernel/arch/ia64/src/mm/page.c	(revision 711e1f32ff29817726bcac1317d5d28bdaabac90)
@@ -71,26 +71,12 @@
 
 	/*
-	 * First set up kernel region register.
-	 * This is redundant (see start.S) but we keep it here just for sure.
-	 */
-	rr.word = rr_read(VRN_KERNEL);
-	rr.map.ve = 0;                  /* disable VHPT walker */
-	rr.map.ps = PAGE_WIDTH;
-	rr.map.rid = ASID2RID(ASID_KERNEL, VRN_KERNEL);
-	rr_write(VRN_KERNEL, rr.word);
-	srlz_i();
-	srlz_d();
-
-	/*
-	 * And setup the rest of region register.
+	 * Set up kernel region registers.
+	 * VRN_KERNEL has already been set in start.S.
+	 * For paranoia reasons, we set it again.
 	 */
 	for(i = 0; i < REGION_REGISTERS; i++) {
-		/* skip kernel rr */
-		if (i == VRN_KERNEL)
-			continue;
-	
 		rr.word = rr_read(i);
 		rr.map.ve = 0;		/* disable VHPT walker */
-		rr.map.rid = RID_KERNEL;
+		rr.map.rid = ASID2RID(ASID_KERNEL, i);
 		rr.map.ps = PAGE_WIDTH;
 		rr_write(i, rr.word);
Index: kernel/arch/ia64/src/start.S
===================================================================
--- kernel/arch/ia64/src/start.S	(revision 1581708902331ee97e832b4c9189e7bbff9ec789)
+++ kernel/arch/ia64/src/start.S	(revision 711e1f32ff29817726bcac1317d5d28bdaabac90)
@@ -74,5 +74,5 @@
 	movl r10 = (RR_MASK)
 	and r9 = r10, r9
-	movl r10 = ((RID_KERNEL << RID_SHIFT) | (KERNEL_PAGE_WIDTH << PS_SHIFT))
+	movl r10 = (((RID_KERNEL7) << RID_SHIFT) | (KERNEL_PAGE_WIDTH << PS_SHIFT))
 	or r9 = r10, r9
 	
Index: kernel/arch/mips32/_link.ld.in
===================================================================
--- kernel/arch/mips32/_link.ld.in	(revision 1581708902331ee97e832b4c9189e7bbff9ec789)
+++ kernel/arch/mips32/_link.ld.in	(revision 711e1f32ff29817726bcac1317d5d28bdaabac90)
@@ -38,4 +38,5 @@
 		*(.bss);                        /* uninitialized static variables */
 		*(COMMON);                      /* global variables */
+		. = ALIGN(8);
 		symbol_table = .;
 		*(symtab.*);
Index: kernel/arch/ppc32/_link.ld.in
===================================================================
--- kernel/arch/ppc32/_link.ld.in	(revision 1581708902331ee97e832b4c9189e7bbff9ec789)
+++ kernel/arch/ppc32/_link.ld.in	(revision 711e1f32ff29817726bcac1317d5d28bdaabac90)
@@ -51,4 +51,5 @@
 		*(COMMON);      /* global variables */
 		
+		. = ALIGN(8);
 		symbol_table = .;
 		*(symtab.*);    /* Symbol table, must be LAST symbol!*/
Index: kernel/arch/sparc64/_link.ld.in
===================================================================
--- kernel/arch/sparc64/_link.ld.in	(revision 1581708902331ee97e832b4c9189e7bbff9ec789)
+++ kernel/arch/sparc64/_link.ld.in	(revision 711e1f32ff29817726bcac1317d5d28bdaabac90)
@@ -36,4 +36,5 @@
 		*(COMMON);                  /* global variables */
 		
+		. = ALIGN(8);
 		symbol_table = .;
 		*(symtab.*);                /* Symbol table, must be LAST symbol!*/
