Index: arch/ia64/src/interrupt_handler.c
===================================================================
--- arch/ia64/src/interrupt_handler.c	(revision 84dd253c8c662703845d21109af33b9cc66c1854)
+++ arch/ia64/src/interrupt_handler.c	(revision 1e2aecca40050ab89248e07dfda8bd912f0e329d)
@@ -28,5 +28,4 @@
  */
 
-
 #include <panic.h>
 #include <print.h>
@@ -34,6 +33,83 @@
 #include <arch/asm.h>
 #include <symtab.h>
+#include <debug.h>
+
+#define VECTORS_64_BUNDLE	20
+#define VECTORS_16_BUNDLE	48
+#define VECTORS_16_BUNDLE_START	0x5000
+#define VECTOR_MAX		0x7f00
+
+#define BUNDLE_SIZE		16
 
 extern __u64 REG_DUMP;
+
+char *vector_names_64_bundle[VECTORS_64_BUNDLE] = {
+	"VHPT Translation vector",
+	"Instruction TLB vector",
+	"Data TLB vector",
+	"Alternate Instruction TLB vector",
+	"Alternate Data TLB vector",
+	"Data Nested TLB vector",
+	"Instruction Key Miss vector",
+	"Data Key Miss vector",
+	"Dirty-Bit vector",
+	"Instruction Access-Bit vector",
+	"Data Access-Bit vector"
+	"Break Instruction vector",
+	"External Interrupt vector"
+	"Reserved",
+	"Reserved",
+	"Reserved",
+	"Reserved",
+	"Reserved",
+	"Reserved",
+	"Reserved"
+};
+
+char *vector_names_16_bundle[VECTORS_16_BUNDLE] = {
+	"Page Not Present vector",
+	"Key Permission vector",
+	"Instruction Access rights vector",
+	"Data Access Rights vector",
+	"General Exception vector",
+	"Disabled FP-Register vector",
+	"NaT Consumption vector",
+	"Speculation vector",
+	"Reserved",
+	"Debug vector",
+	"Unaligned Reference vector",
+	"Unsupported Data Reference vector",
+	"Floating-point Fault vector",
+	"Floating-point Trap vector",
+	"Lower-Privilege Transfer Trap vector",
+	"Taken Branch Trap vector",
+	"Single STep Trap vector",
+	"Reserved",
+	"Reserved",
+	"Reserved",
+	"Reserved",
+	"Reserved",
+	"Reserved",
+	"Reserved",
+	"Reserved",
+	"IA-32 Exception vector",
+	"IA-32 Intercept vector",
+	"IA-32 Interrupt vector",
+	"Reserved",
+	"Reserved",
+	"Reserved"
+};
+
+static char *vector_to_string(__u16 vector);
+
+char *vector_to_string(__u16 vector)
+{
+	ASSERT(vector <= VECTOR_MAX);
+	
+	if (vector >= VECTORS_16_BUNDLE_START)
+		return vector_names_16_bundle[(vector-VECTORS_16_BUNDLE_START)/(16*BUNDLE_SIZE)];
+	else
+		return vector_names_64_bundle[vector/(64*BUNDLE_SIZE)];
+}
 
 
@@ -41,5 +117,5 @@
 void general_exception(void)
 {
-    panic("\nGeneral Exception\n");
+	panic("\nGeneral Exception\n");
 }
 
@@ -49,7 +125,6 @@
 void break_instruction(void)
 {
-    panic("\nBreak Instruction\n");
-}
-
+	panic("\nBreak Instruction\n");
+}
 
 #define cr_dump(r) {__u64 val; get_control_register(r,val); printf("\ncr"#r":%Q",val);}
@@ -64,12 +139,9 @@
 	char *sym;
 	
-	
 	get_shadow_register(16,vector);
 
-	
 	p=&REG_DUMP;
 
 	for(i=0;i<128;i+=2) printf("gr%d:%Q\tgr%d:%Q\n",i,p[i],i+1,p[i+1]);
-
 
 	cr_dump(0);	
@@ -132,6 +204,6 @@
 	printf("\nPSR:%Q\n",psr);
 	
-	panic("\nException:%Q\n",vector);
-}
-
-
+	panic("\nException:%W (%s)\n", (__u16) vector, vector_to_string(vector));
+}
+
+
