diff -urN 2.2.18pre23/arch/alpha/kernel/process.c adebug/arch/alpha/kernel/process.c
--- 2.2.18pre23/arch/alpha/kernel/process.c	Thu May  4 13:00:36 2000
+++ adebug/arch/alpha/kernel/process.c	Sun Nov 26 05:10:14 2000
@@ -249,8 +249,11 @@
 	alpha_mv.kill_arch(LINUX_REBOOT_CMD_POWER_OFF, NULL);
 }
 
-void show_regs(struct pt_regs * regs)
+void __show_regs(struct pt_regs * regs)
 {
+	extern void dik_show_trace(unsigned long *);
+
+	printk("\nCPU: %d", smp_processor_id());
 	printk("\nps: %04lx pc: [<%016lx>]\n", regs->ps, regs->pc);
 	printk("rp: [<%016lx>] sp: %p\n", regs->r26, regs+1);
 	printk(" r0: %016lx  r1: %016lx  r2: %016lx  r3: %016lx\n",
@@ -265,6 +268,15 @@
 	       regs->r23, regs->r24, regs->r25, regs->r26);
 	printk("r27: %016lx r28: %016lx r29: %016lx hae: %016lx\n",
 	       regs->r27, regs->r28, regs->gp, regs->hae);
+	dik_show_trace(regs+1);
+}
+
+void show_regs(struct pt_regs * regs)
+{
+	__show_regs(regs);
+#ifdef CONFIG_SMP
+	smp_show_regs();
+#endif
 }
 
 /*
diff -urN 2.2.18pre23/arch/alpha/kernel/smp.c adebug/arch/alpha/kernel/smp.c
--- 2.2.18pre23/arch/alpha/kernel/smp.c	Thu Nov 23 03:28:43 2000
+++ adebug/arch/alpha/kernel/smp.c	Sun Nov 26 05:09:18 2000
@@ -739,7 +739,14 @@
 
 			/* At this point the structure may be gone unless
 			   wait is true.  */
-			(*func)(info);
+			{
+			static void ipi_show_regs(void *);
+
+			if (func != ipi_show_regs)
+				(*func)(info);
+			else
+				(*func)((void *) regs);
+			}
 
 			/* Notify the sending CPU that the task is done.  */
 			mb();
@@ -853,6 +860,21 @@
 		printk(KERN_CRIT "smp_imb: timed out\n");
 
 	imb();
+}
+
+static void
+ipi_show_regs(void * param)
+{
+	struct pt_regs *regs = (struct pt_regs *) param;
+
+	__show_regs(regs);
+}
+
+void
+smp_show_regs(void)
+{
+	if (smp_call_function(ipi_show_regs, NULL, 1, 1))
+		printk(KERN_CRIT "smp_show_regs: timed out\n");
 }
 
 static void
diff -urN 2.2.18pre23/arch/alpha/kernel/traps.c adebug/arch/alpha/kernel/traps.c
--- 2.2.18pre23/arch/alpha/kernel/traps.c	Tue Jun 13 03:48:12 2000
+++ adebug/arch/alpha/kernel/traps.c	Sun Nov 26 05:09:18 2000
@@ -269,7 +269,7 @@
 	}
 }
 
-static void
+void
 dik_show_trace(unsigned long *sp)
 {
 	int i = 1;
diff -urN 2.2.18pre23/include/asm-alpha/ptrace.h adebug/include/asm-alpha/ptrace.h
--- 2.2.18pre23/include/asm-alpha/ptrace.h	Mon Jan 17 16:44:43 2000
+++ adebug/include/asm-alpha/ptrace.h	Sun Nov 26 05:09:18 2000
@@ -70,6 +70,7 @@
 #define user_mode(regs) (((regs)->ps & 8) != 0)
 #define instruction_pointer(regs) ((regs)->pc)
 extern void show_regs(struct pt_regs *);
+extern void __show_regs(struct pt_regs *);
 #endif
 
 #endif