Index: kernel/arch/sparc64/include/trap/exception.h
===================================================================
--- kernel/arch/sparc64/include/trap/exception.h	(revision ed166f71740001c3b594706d223312aeb0e52fb0)
+++ kernel/arch/sparc64/include/trap/exception.h	(revision 6767c1d6f97a2bd70e8a35df4f084d7410aa0238)
@@ -43,8 +43,12 @@
 
 #ifndef __ASM__
-extern void do_instruction_access_exc(void);
-extern void do_mem_address_not_aligned(void);
-extern void do_data_access_error(void);
-extern void do_illegal_instruction(void);
+
+#include <typedefs.h>
+
+extern void do_instruction_access_exc(int n, istate_t *istate);
+extern void do_mem_address_not_aligned(int n, istate_t *istate);
+extern void do_data_access_error(int n, istate_t *istate);
+extern void do_illegal_instruction(int n, istate_t *istate);
+
 #endif /* !__ASM__ */
 
@@ -53,3 +57,2 @@
 /** @}
  */
-
Index: kernel/arch/sparc64/include/trap/interrupt.h
===================================================================
--- kernel/arch/sparc64/include/trap/interrupt.h	(revision ed166f71740001c3b594706d223312aeb0e52fb0)
+++ kernel/arch/sparc64/include/trap/interrupt.h	(revision 6767c1d6f97a2bd70e8a35df4f084d7410aa0238)
@@ -90,5 +90,5 @@
 
 #ifndef __ASM__
-extern void interrupt(void);
+extern void interrupt(int n, istate_t *istate);
 #endif /* !def __ASM__ */
 
Index: kernel/arch/sparc64/include/trap/mmu.h
===================================================================
--- kernel/arch/sparc64/include/trap/mmu.h	(revision ed166f71740001c3b594706d223312aeb0e52fb0)
+++ kernel/arch/sparc64/include/trap/mmu.h	(revision 6767c1d6f97a2bd70e8a35df4f084d7410aa0238)
@@ -54,7 +54,7 @@
 
 .macro FAST_INSTRUCTION_ACCESS_MMU_MISS_HANDLER
-	!
-	! First, try to refill TLB from TSB.
-	!
+	/*
+	 * First, try to refill TLB from TSB.
+	 */
 	! TODO
 
Index: kernel/arch/sparc64/include/trap/trap_table.h
===================================================================
--- kernel/arch/sparc64/include/trap/trap_table.h	(revision ed166f71740001c3b594706d223312aeb0e52fb0)
+++ kernel/arch/sparc64/include/trap/trap_table.h	(revision 6767c1d6f97a2bd70e8a35df4f084d7410aa0238)
@@ -101,8 +101,4 @@
 .endm
 
-.macro SIMPLE_HANDLER f
-	call \f
-	nop
-.endm
 #endif /* __ASM__ */
 
Index: kernel/arch/sparc64/src/trap/exception.c
===================================================================
--- kernel/arch/sparc64/src/trap/exception.c	(revision ed166f71740001c3b594706d223312aeb0e52fb0)
+++ kernel/arch/sparc64/src/trap/exception.c	(revision 6767c1d6f97a2bd70e8a35df4f084d7410aa0238)
@@ -35,29 +35,31 @@
 
 #include <arch/trap/exception.h>
+#include <arch/interrupt.h>
 #include <arch/asm.h>
 #include <debug.h>
+#include <typedefs.h>
 
 /** Handle instruction_access_exception. */
-void do_instruction_access_exc(void)
+void do_instruction_access_exc(int n, istate_t *istate)
 {
-	panic("Instruction Access Exception\n");
+	panic("Instruction Access Exception at %p.\n", istate->tpc);
 }
 
 /** Handle mem_address_not_aligned. */
-void do_mem_address_not_aligned(void)
+void do_mem_address_not_aligned(int n, istate_t *istate)
 {
-	panic("Memory Address Not Aligned\n");
+	panic("Memory Address Not Aligned from %p.\n", istate->tpc);
 }
 
 /** Handle data_access_error. */
-void do_data_access_error(void)
+void do_data_access_error(int n, istate_t *istate)
 {
-	panic("Data Access Error: %p\n", tpc_read());
+	panic("Data Access Error from %p.\n", istate->tpc);
 }
 
 /** Handle mem_address_not_aligned. */
-void do_illegal_instruction(void)
+void do_illegal_instruction(int n, istate_t *istate)
 {
-	panic("Illegal Instruction: %p\n", tpc_read());
+	panic("Illegal Instruction at %p.\n", istate->tpc);
 }
 
Index: kernel/arch/sparc64/src/trap/interrupt.c
===================================================================
--- kernel/arch/sparc64/src/trap/interrupt.c	(revision ed166f71740001c3b594706d223312aeb0e52fb0)
+++ kernel/arch/sparc64/src/trap/interrupt.c	(revision 6767c1d6f97a2bd70e8a35df4f084d7410aa0238)
@@ -37,4 +37,5 @@
 #include <interrupt.h>
 #include <arch/drivers/fhc.h>
+#include <typedefs.h>
 #include <arch/types.h>
 #include <debug.h>
@@ -65,5 +66,5 @@
 }
 
-void interrupt(void)
+void interrupt(int n, istate_t *istate)
 {
 	uint64_t intrcv;
Index: kernel/arch/sparc64/src/trap/trap_table.S
===================================================================
--- kernel/arch/sparc64/src/trap/trap_table.S	(revision ed166f71740001c3b594706d223312aeb0e52fb0)
+++ kernel/arch/sparc64/src/trap/trap_table.S	(revision 6767c1d6f97a2bd70e8a35df4f084d7410aa0238)
@@ -60,5 +60,5 @@
 .global instruction_access_exception
 instruction_access_exception:
-	SIMPLE_HANDLER do_instruction_access_exc
+	PREEMPTIBLE_HANDLER do_instruction_access_exc
 
 /* TT = 0x10, TL = 0, illegal_instruction */
@@ -66,5 +66,5 @@
 .global illegal_instruction
 illegal_instruction:
-	SIMPLE_HANDLER do_illegal_instruction
+	PREEMPTIBLE_HANDLER do_illegal_instruction
 
 /* TT = 0x24, TL = 0, clean_window handler */
@@ -78,5 +78,5 @@
 .global data_access_error
 data_access_error:
-	SIMPLE_HANDLER do_data_access_error
+	PREEMPTIBLE_HANDLER do_data_access_error
 
 /* TT = 0x34, TL = 0, mem_address_not_aligned */
@@ -84,5 +84,5 @@
 .global mem_address_not_aligned
 mem_address_not_aligned:
-	SIMPLE_HANDLER do_mem_address_not_aligned
+	PREEMPTIBLE_HANDLER do_mem_address_not_aligned
 
 /* TT = 0x41, TL = 0, interrupt_level_1 handler */
@@ -238,5 +238,5 @@
 .global instruction_access_exception_high
 instruction_access_exception_high:
-	SIMPLE_HANDLER do_instruction_access_exc
+	PREEMPTIBLE_HANDLER do_instruction_access_exc
 
 /* TT = 0x10, TL > 0, illegal_instruction */
@@ -244,5 +244,5 @@
 .global illegal_instruction_high
 illegal_instruction_high:
-	SIMPLE_HANDLER do_illegal_instruction
+	PREEMPTIBLE_HANDLER do_illegal_instruction
 
 /* TT = 0x24, TL > 0, clean_window handler */
@@ -256,5 +256,5 @@
 .global data_access_error_high
 data_access_error_high:
-	SIMPLE_HANDLER do_data_access_error
+	PREEMPTIBLE_HANDLER do_data_access_error
 
 /* TT = 0x34, TL > 0, mem_address_not_aligned */
@@ -262,5 +262,5 @@
 .global mem_address_not_aligned_high
 mem_address_not_aligned_high:
-	SIMPLE_HANDLER do_mem_address_not_aligned
+	PREEMPTIBLE_HANDLER do_mem_address_not_aligned
 
 /* TT = 0x64, TL > 0, fast_instruction_access_MMU_miss */
