Index: kernel/arch/ia64/include/interrupt.h
===================================================================
--- kernel/arch/ia64/include/interrupt.h	(revision 62baed17f97fa5cbf73d7c95444db3460ce28b36)
+++ kernel/arch/ia64/include/interrupt.h	(revision 38e5675bb48aaa4f2c1af529b78aae5fc11735db)
@@ -165,4 +165,6 @@
 extern void trap_virtual_enable_irqs(uint16_t irqmask);
 
+extern void decode_istate(istate_t *);
+
 #endif
 
Index: kernel/arch/ia64/src/interrupt.c
===================================================================
--- kernel/arch/ia64/src/interrupt.c	(revision 62baed17f97fa5cbf73d7c95444db3460ce28b36)
+++ kernel/arch/ia64/src/interrupt.c	(revision 38e5675bb48aaa4f2c1af529b78aae5fc11735db)
@@ -133,8 +133,6 @@
 }
 
-static void dump_interrupted_context(istate_t *istate)
-{
-	putchar('\n');
-	printf("Interrupted context dump:\n");
+void decode_istate(istate_t *istate)
+{
 	printf("ar.bsp=%p\tar.bspstore=%p\n", istate->ar_bsp,
 	    istate->ar_bspstore);
@@ -183,7 +181,5 @@
 	
 	fault_if_from_uspace(istate, "General Exception (%s).", desc);
-	
-	dump_interrupted_context(istate);
-	panic("General Exception (%s).", desc);
+	panic_badtrap(istate, vector, "General Exception (%s).", desc);
 }
 
@@ -195,7 +191,6 @@
 	fault_if_from_uspace(istate, "Interruption: %#hx (%s).",
 	    (uint16_t) vector, vector_to_string(vector));
-	dump_interrupted_context(istate);
-	panic("Interruption: %#hx (%s).", (uint16_t) vector,
-	    vector_to_string(vector));
+	panic_badtrap(istate, vector, "Interruption: %#hx (%s).",
+	    (uint16_t) vector, vector_to_string(vector));
 #endif
 }
@@ -226,7 +221,6 @@
 	fault_if_from_uspace(istate, "Interruption: %#hx (%s).",
 	    (uint16_t) vector, vector_to_string(vector));
-	dump_interrupted_context(istate);
-	panic("Interruption: %#hx (%s).", (uint16_t) vector,
-	    vector_to_string(vector));
+	panic_badtrap(istate, vector, "Interruption: %#hx (%s).",
+	    (uint16_t) vector, vector_to_string(vector));
 }
 
Index: kernel/arch/ia64/src/mm/tlb.c
===================================================================
--- kernel/arch/ia64/src/mm/tlb.c	(revision 62baed17f97fa5cbf73d7c95444db3460ce28b36)
+++ kernel/arch/ia64/src/mm/tlb.c	(revision 38e5675bb48aaa4f2c1af529b78aae5fc11735db)
@@ -500,6 +500,6 @@
 		if (as_page_fault(va, PF_ACCESS_EXEC, istate) == AS_PF_FAULT) {
 			fault_if_from_uspace(istate, "Page fault at %p.", va);
-			panic("%s: va=%p, rid=%d, iip=%p.", __func__, va, rid,
-			    istate->cr_iip);
+			panic_memtrap(istate, PF_ACCESS_EXEC, va,
+			    "Page fault.");
 		}
 	}
@@ -622,6 +622,6 @@
 		if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) {
 			fault_if_from_uspace(istate, "Page fault at %p.", va);
-			panic("%s: va=%p, rid=%d, iip=%p.", __func__, va, rid,
-			    istate->cr_iip);
+			panic_memtrap(istate, PF_ACCESS_READ, va,
+			    "Page fault.");
 		}
 	}
@@ -671,6 +671,6 @@
 		if (as_page_fault(va, PF_ACCESS_WRITE, istate) == AS_PF_FAULT) {
 			fault_if_from_uspace(istate, "Page fault at %p.", va);
-			panic("%s: va=%p, rid=%d, iip=%p.", __func__, va, rid,
-			    istate->cr_iip);
+			panic_memtrap(istate, PF_ACCESS_WRITE, va,
+			    "Page fault.");
 		}
 	}
@@ -708,6 +708,6 @@
 		if (as_page_fault(va, PF_ACCESS_EXEC, istate) == AS_PF_FAULT) {
 			fault_if_from_uspace(istate, "Page fault at %p.", va);
-			panic("%s: va=%p, rid=%d, iip=%p.", __func__, va, rid,
-			    istate->cr_iip);
+			panic_memtrap(istate, PF_ACCESS_EXEC, va,
+			    "Page fault.");
 		}
 	}
@@ -745,6 +745,6 @@
 		if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) {
 			fault_if_from_uspace(istate, "Page fault at %p.", va);
-			panic("%s: va=%p, rid=%d, iip=%p.", __func__, va, rid,
-			    istate->cr_iip);
+			panic_memtrap(istate, PF_ACCESS_READ, va,
+			    "Page fault.");
 		}
 	}
@@ -778,6 +778,5 @@
 	if (as_page_fault(va, PF_ACCESS_WRITE, istate) == AS_PF_FAULT) {
 		fault_if_from_uspace(istate, "Page fault at %p.", va);
-		panic("%s: va=%p, rid=%d, iip=%p.", __func__, va, rid,
-		    istate->cr_iip);
+		panic_memtrap(istate, PF_ACCESS_WRITE, va, "Page fault.");
 	}
 	page_table_unlock(AS, true);
@@ -819,5 +818,6 @@
 		if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) {
 			fault_if_from_uspace(istate, "Page fault at %p.", va);
-			panic("%s: va=%p, rid=%d.", __func__, va, rid);
+			panic_memtrap(istate, PF_ACCESS_READ, va,
+			    "Page fault.");
 		}
 	}
