Index: /trunk/source/lisp-kernel/lisp-debug.c
===================================================================
--- /trunk/source/lisp-kernel/lisp-debug.c	(revision 13765)
+++ /trunk/source/lisp-kernel/lisp-debug.c	(revision 13766)
@@ -300,4 +300,36 @@
 	  dsisr & (1<<27) ? "protected" : "unmapped",
 	  addr);
+#else
+  fprintf(dbgout, "received signal %d; faulting address: %p\n",
+	  info->si_signo, info->si_addr);
+  if (info->si_code > 0) {
+    if (info->si_signo == SIGSEGV) {
+      switch (info->si_code) {
+      case SEGV_MAPERR:
+	fprintf(dbgout, "address not mapped to object\n");
+	break;
+      case SEGV_ACCERR:
+	fprintf(dbgout, "invalid permissions for mapped object\n");
+	break;
+      default:
+	fprintf(dbgout, "unexpected si_code value: %d\n", info->si_code);
+	break;
+      }
+    } else if (info->si_signo == SIGBUS) {
+      switch (info->si_code) {
+      case BUS_ADRALN:
+	fprintf(dbgout, "invalid address alignment\n");
+	break;
+      case BUS_ADRERR:
+	fprintf(dbgout, "non-existent physical address");
+	break;
+      case BUS_OBJERR:
+	fprintf(dbgout, "object-specific hardware error");
+	break;
+      default:
+	fprintf(dbgout, "unexpected si_code value: %d\n", info->si_code);
+      }
+    }
+  }
 #endif
 }
@@ -645,4 +677,13 @@
     break;
   }
+#else
+  switch (arg) {
+  case SIGSEGV:
+  case SIGBUS:
+    describe_memfault(xp, info);
+    break;
+  default:
+    break;
+  }
 #endif
   return debug_continue;
@@ -1034,4 +1075,5 @@
    NULL,
    'A'},
+#endif
   {debug_identify_exception,
    "Describe the current exception in greater detail",
@@ -1040,5 +1082,4 @@
    NULL,
    'D'},
-#endif
   {debug_show_registers, 
    "Show raw GPR/SPR register values", 
@@ -1235,4 +1276,5 @@
       debug_show_fpu(xp, info, 0);
     }
+    debug_memory_areas(xp, info, 0);
     debug_backtrace(xp, info, 0);
 
