Index: c/src/aclocal/bsp-bspcleanup-options.m4
===================================================================
--- c/src/aclocal/bsp-bspcleanup-options.m4	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ c/src/aclocal/bsp-bspcleanup-options.m4	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -10,8 +10,9 @@
 
 dnl USAGE:
-dnl    RTEMS_BSP_CLEANUP_OPTIONS([0|1], [0|1]) 
+dnl    RTEMS_BSP_CLEANUP_OPTIONS([0|1], [0|1], [0|1])
 dnl WHERE:
 dnl    argument 1 indicates the default value for BSP_PRESS_KEY_FOR_RESET
 dnl    argument 2 indicates the default value for BSP_RESET_BOARD_AT_EXIT
+dnl    argument 3 indicates the default value for BSP_PRINT_EXCEPTION_CONTEXT
 
 AC_DEFUN([RTEMS_BSP_CLEANUP_OPTIONS],[
@@ -24,3 +25,7 @@
 RTEMS_BSPOPTS_HELP([BSP_RESET_BOARD_AT_EXIT],
 [If defined, reset the board when the application exits.])
+
+RTEMS_BSPOPTS_SET([BSP_PRINT_EXCEPTION_CONTEXT],[*],[$3])
+RTEMS_BSPOPTS_HELP([BSP_PRINT_EXCEPTION_CONTEXT],
+[If defined, prints the exception context when an unexpected exception occurs.])
 ])
Index: c/src/lib/libbsp/mips/shared/irq/vectorexceptions.c
===================================================================
--- c/src/lib/libbsp/mips/shared/irq/vectorexceptions.c	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ c/src/lib/libbsp/mips/shared/irq/vectorexceptions.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -25,7 +25,5 @@
 #include <bsp/irq-generic.h>
 
-void mips_vector_exceptions( CPU_Interrupt_frame *frame );
-
-static const char *cause_strings[32] =
+static const char *const cause_strings[32] =
 {
   /*  0 */ "Int",
@@ -80,5 +78,5 @@
 };
 
-static void mips_dump_exception_frame( CPU_Interrupt_frame *frame )
+void _BSP_Exception_frame_print( const CPU_Exception_frame *frame )
 {
   uint32_t *frame_u32;
Index: c/src/lib/libbsp/powerpc/psim/configure.ac
===================================================================
--- c/src/lib/libbsp/powerpc/psim/configure.ac	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ c/src/lib/libbsp/powerpc/psim/configure.ac	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -46,5 +46,5 @@
 and a little memory is saved.])
 
-RTEMS_BSP_CLEANUP_OPTIONS(0, 1)
+RTEMS_BSP_CLEANUP_OPTIONS(0, 1, 1)
 
 # Explicitly list all Makefiles here
Index: c/src/lib/libbsp/shared/bspclean.c
===================================================================
--- c/src/lib/libbsp/shared/bspclean.c	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ c/src/lib/libbsp/shared/bspclean.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -17,5 +17,5 @@
   rtems_fatal_source source,
   bool is_internal,
-  rtems_fatal_code error
+  rtems_fatal_code code
 )
 {
@@ -30,4 +30,10 @@
 
     printk("\n");
+  #endif
+
+  #if (BSP_PRINT_EXCEPTION_CONTEXT)
+    if ( source == RTEMS_FATAL_SOURCE_EXCEPTION ) {
+      rtems_exception_frame_print( (const rtems_exception_frame *) code );
+    }
   #endif
 
Index: c/src/lib/libbsp/sparc/erc32/configure.ac
===================================================================
--- c/src/lib/libbsp/sparc/erc32/configure.ac	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ c/src/lib/libbsp/sparc/erc32/configure.ac	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -43,5 +43,5 @@
  initialization not used on real ERC32 hardware.])
 
-RTEMS_BSP_CLEANUP_OPTIONS(0,1)
+RTEMS_BSP_CLEANUP_OPTIONS(0,1,1)
 
 # Explicitly list all Makefiles here
Index: c/src/lib/libbsp/sparc/erc32/startup/spurious.c
===================================================================
--- c/src/lib/libbsp/sparc/erc32/startup/spurious.c	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ c/src/lib/libbsp/sparc/erc32/startup/spurious.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -17,18 +17,13 @@
 #include <rtems/bspIo.h>
 
-/*
- *  bsp_spurious_handler
- *
- *  Print a message on the debug console and then die
- */
+void _BSP_Exception_frame_print( const CPU_Exception_frame *frame )
+{
+  uint32_t                   trap;
+  uint32_t                   real_trap;
+  const CPU_Interrupt_frame *isf;
 
-rtems_isr bsp_spurious_handler(
-   rtems_vector_number trap,
-   CPU_Interrupt_frame *isf
-)
-{
-  uint32_t         real_trap;
-
+  trap = frame->trap;
   real_trap = SPARC_REAL_TRAP_NUMBER(trap);
+  isf = frame->isf;
 
   printk( "Unexpected trap (%2d) at address 0x%08x\n", real_trap, isf->tpc);
@@ -122,10 +117,20 @@
       break;
   }
+}
 
-  /*
-   *  What else can we do but stop ...
-   */
+rtems_isr bsp_spurious_handler(
+   rtems_vector_number trap,
+   CPU_Interrupt_frame *isf
+)
+{
+  CPU_Exception_frame frame = {
+    .trap = trap,
+    .isf = isf
+  };
 
-  __asm__ volatile( "mov 1, %g1; ta 0x0" );
+  rtems_fatal(
+    RTEMS_FATAL_SOURCE_EXCEPTION,
+    (rtems_fatal_code) &frame
+  );
 }
 
Index: c/src/lib/libbsp/sparc/leon2/startup/spurious.c
===================================================================
--- c/src/lib/libbsp/sparc/leon2/startup/spurious.c	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ c/src/lib/libbsp/sparc/leon2/startup/spurious.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -17,18 +17,13 @@
 #include <rtems/bspIo.h>
 
-/*
- *  bsp_spurious_handler
- *
- *  Print a message on the debug console and then die
- */
+void _BSP_Exception_frame_print( const CPU_Exception_frame *frame )
+{
+  uint32_t                   trap;
+  uint32_t                   real_trap;
+  const CPU_Interrupt_frame *isf;
 
-rtems_isr bsp_spurious_handler(
-   rtems_vector_number trap,
-   CPU_Interrupt_frame *isf
-)
-{
-  uint32_t real_trap;
-
+  trap = frame->trap;
   real_trap = SPARC_REAL_TRAP_NUMBER(trap);
+  isf = frame->isf;
 
   printk( "Unexpected trap (%2d) at address 0x%08x\n", real_trap, isf->tpc);
@@ -103,10 +98,20 @@
       break;
   }
+}
 
-  /*
-   *  What else can we do but stop ...
-   */
+rtems_isr bsp_spurious_handler(
+   rtems_vector_number trap,
+   CPU_Interrupt_frame *isf
+)
+{
+  CPU_Exception_frame frame = {
+    .trap = trap,
+    .isf = isf
+  };
 
-  __asm__ volatile( "mov 1, %g1; ta 0x0" );
+  rtems_fatal(
+    RTEMS_FATAL_SOURCE_EXCEPTION,
+    (rtems_fatal_code) &frame
+  );
 }
 
Index: c/src/lib/libbsp/sparc/leon3/startup/spurious.c
===================================================================
--- c/src/lib/libbsp/sparc/leon3/startup/spurious.c	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ c/src/lib/libbsp/sparc/leon3/startup/spurious.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -19,21 +19,15 @@
 
 #include <bsp.h>
-
 #include <rtems/bspIo.h>
 
-/*
- *  bsp_spurious_handler
- *
- *  Print a message on the debug console and then die
- */
+void _BSP_Exception_frame_print( const CPU_Exception_frame *frame )
+{
+  uint32_t                   trap;
+  uint32_t                   real_trap;
+  const CPU_Interrupt_frame *isf;
 
-rtems_isr bsp_spurious_handler(
-   rtems_vector_number trap,
-   CPU_Interrupt_frame *isf
-)
-{
-  uint32_t real_trap;
-
+  trap = frame->trap;
   real_trap = SPARC_REAL_TRAP_NUMBER(trap);
+  isf = frame->isf;
 
   printk( "Unexpected trap (0x%02x) at address 0x%08x\n", real_trap, isf->tpc);
@@ -114,10 +108,20 @@
       break;
   }
+}
 
-  /*
-   *  What else can we do but stop ...
-   */
+rtems_isr bsp_spurious_handler(
+   rtems_vector_number trap,
+   CPU_Interrupt_frame *isf
+)
+{
+  CPU_Exception_frame frame = {
+    .trap = trap,
+    .isf = isf
+  };
 
-  __asm__ volatile( "mov 1, %g1; ta 0x0" );
+  rtems_fatal(
+    RTEMS_FATAL_SOURCE_EXCEPTION,
+    (rtems_fatal_code) &frame
+  );
 }
 
Index: c/src/lib/libcpu/powerpc/Makefile.am
===================================================================
--- c/src/lib/libcpu/powerpc/Makefile.am	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ c/src/lib/libcpu/powerpc/Makefile.am	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -189,5 +189,6 @@
 
 noinst_PROGRAMS += mpc5xx/vectors.rel
-mpc5xx_vectors_rel_SOURCES = mpc5xx/vectors/vectors_init.c mpc5xx/vectors/vectors.S
+mpc5xx_vectors_rel_SOURCES = mpc5xx/vectors/vectors_init.c mpc5xx/vectors/vectors.S \
+    new-exceptions/bspsupport/ppc_exc_print.c
 mpc5xx_vectors_rel_CPPFLAGS = $(AM_CPPFLAGS)
 mpc5xx_vectors_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
Index: c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_global_handler.c
===================================================================
--- c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_global_handler.c	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_global_handler.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -25,5 +25,5 @@
 {
   rtems_fatal(
-    RTEMS_FATAL_SOURCE_POWERPC_EXCEPTION,
+    RTEMS_FATAL_SOURCE_EXCEPTION,
     (rtems_fatal_code) excPtr
   );
Index: c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_print.c
===================================================================
--- c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_print.c	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -86,5 +86,5 @@
 }
 
-void ppc_exc_print_frame_and_context(const BSP_Exception_frame *excPtr)
+void _BSP_Exception_frame_print(const CPU_Exception_frame *excPtr)
 {
   const Thread_Control *executing = _Thread_Executing;
Index: c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/vectors.h
===================================================================
--- c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/vectors.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/vectors.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -272,6 +272,4 @@
 void C_exception_handler(BSP_Exception_frame* excPtr);
 
-void ppc_exc_print_frame_and_context(const BSP_Exception_frame *excPtr);
-
 void BSP_printStackTrace(const BSP_Exception_frame *excPtr);
 
Index: cpukit/sapi/include/rtems/fatal.h
===================================================================
--- cpukit/sapi/include/rtems/fatal.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/sapi/include/rtems/fatal.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -36,4 +36,21 @@
  * @{
  */
+
+/**
+ * @brief Exception frame.
+ */
+typedef CPU_Exception_frame rtems_exception_frame;
+
+/**
+ *  @brief Prints the exception frame via printk().
+ *
+ *  @see rtems_fatal() and RTEMS_FATAL_SOURCE_EXCEPTION.
+ */
+static inline void rtems_exception_frame_print(
+  const rtems_exception_frame *frame
+)
+{
+  _CPU_Exception_frame_print( frame );
+}
 
 /**
Index: cpukit/score/cpu/arm/Makefile.am
===================================================================
--- cpukit/score/cpu/arm/Makefile.am	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/arm/Makefile.am	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -19,7 +19,9 @@
 libscorecpu_a_SOURCES += arm_exc_handler_low.S
 libscorecpu_a_SOURCES += arm_exc_handler_high.c
+libscorecpu_a_SOURCES += arm-exception-frame-print.c
 libscorecpu_a_SOURCES += armv7m-context-initialize.c
 libscorecpu_a_SOURCES += armv7m-context-restore.c
 libscorecpu_a_SOURCES += armv7m-context-switch.c
+libscorecpu_a_SOURCES += armv7m-exception-frame-print.c
 libscorecpu_a_SOURCES += armv7m-exception-handler-get.c
 libscorecpu_a_SOURCES += armv7m-exception-handler-set.c
Index: cpukit/score/cpu/arm/arm-exception-frame-print.c
===================================================================
--- cpukit/score/cpu/arm/arm-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
+++ cpukit/score/cpu/arm/arm-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Obere Lagerstr. 30
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+  #include "config.h"
+#endif
+
+#include <rtems/score/cpu.h>
+
+#ifdef ARM_MULTILIB_ARCH_V4
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame )
+{
+  /* TODO */
+}
+
+#endif /* ARM_MULTILIB_ARCH_V4 */
Index: cpukit/score/cpu/arm/armv7m-exception-frame-print.c
===================================================================
--- cpukit/score/cpu/arm/armv7m-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
+++ cpukit/score/cpu/arm/armv7m-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Obere Lagerstr. 30
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+  #include "config.h"
+#endif
+
+#include <rtems/score/cpu.h>
+
+#ifdef ARM_MULTILIB_ARCH_V7M
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame )
+{
+  /* TODO */
+}
+
+#endif /* ARM_MULTILIB_ARCH_V7M */
Index: cpukit/score/cpu/arm/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/arm/rtems/score/cpu.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/arm/rtems/score/cpu.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -583,6 +583,11 @@
 typedef void CPU_Interrupt_frame;
 
+/* FIXME */
+typedef CPU_Interrupt_frame CPU_Exception_frame;
+
 #endif /* !defined(ARM_MULTILIB_ARCH_V4) */
 
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame );
+
 #ifdef __cplusplus
 }
Index: cpukit/score/cpu/avr/Makefile.am
===================================================================
--- cpukit/score/cpu/avr/Makefile.am	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/avr/Makefile.am	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -162,4 +162,5 @@
 noinst_LIBRARIES = libscorecpu.a
 libscorecpu_a_SOURCES = cpu.c cpu_asm.S
+libscorecpu_a_SOURCES += avr-exception-frame-print.c
 libscorecpu_a_CPPFLAGS = $(AM_CPPFLAGS)
 
Index: cpukit/score/cpu/avr/avr-exception-frame-print.c
===================================================================
--- cpukit/score/cpu/avr/avr-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
+++ cpukit/score/cpu/avr/avr-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Obere Lagerstr. 30
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+  #include "config.h"
+#endif
+
+#include <rtems/score/cpu.h>
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame )
+{
+  /* TODO */
+}
Index: cpukit/score/cpu/avr/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/avr/rtems/score/cpu.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/avr/rtems/score/cpu.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -1113,4 +1113,9 @@
 );
 
+/* FIXME */
+typedef CPU_Interrupt_frame CPU_Exception_frame;
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame );
+
 /*  The following routine swaps the endian format of an unsigned int.
  *  It must be static because it is referenced indirectly.
Index: cpukit/score/cpu/bfin/Makefile.am
===================================================================
--- cpukit/score/cpu/bfin/Makefile.am	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/bfin/Makefile.am	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -17,4 +17,5 @@
 noinst_LIBRARIES = libscorecpu.a
 libscorecpu_a_SOURCES = cpu.c cpu_asm.S
+libscorecpu_a_SOURCES += bfin-exception-frame-print.c
 libscorecpu_a_CPPFLAGS = $(AM_CPPFLAGS)
 
Index: cpukit/score/cpu/bfin/bfin-exception-frame-print.c
===================================================================
--- cpukit/score/cpu/bfin/bfin-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
+++ cpukit/score/cpu/bfin/bfin-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Obere Lagerstr. 30
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+  #include "config.h"
+#endif
+
+#include <rtems/score/cpu.h>
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame )
+{
+  /* TODO */
+}
Index: cpukit/score/cpu/bfin/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/bfin/rtems/score/cpu.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/bfin/rtems/score/cpu.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -1205,4 +1205,9 @@
 );
 
+/* FIXME */
+typedef CPU_Interrupt_frame CPU_Exception_frame;
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame );
+
 /**
  *  @ingroup CPUEndian
Index: cpukit/score/cpu/h8300/Makefile.am
===================================================================
--- cpukit/score/cpu/h8300/Makefile.am	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/h8300/Makefile.am	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -11,4 +11,5 @@
 noinst_LIBRARIES = libscorecpu.a
 libscorecpu_a_SOURCES = cpu.c cpu_asm.S
+libscorecpu_a_SOURCES += h8300-exception-frame-print.c
 libscorecpu_a_CPPFLAGS = $(AM_CPPFLAGS)
 
Index: cpukit/score/cpu/h8300/h8300-exception-frame-print.c
===================================================================
--- cpukit/score/cpu/h8300/h8300-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
+++ cpukit/score/cpu/h8300/h8300-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Obere Lagerstr. 30
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+  #include "config.h"
+#endif
+
+#include <rtems/score/cpu.h>
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame )
+{
+  /* TODO */
+}
Index: cpukit/score/cpu/h8300/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/h8300/rtems/score/cpu.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/h8300/rtems/score/cpu.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -1096,4 +1096,9 @@
 );
 
+/* FIXME */
+typedef CPU_Interrupt_frame CPU_Exception_frame;
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame );
+
 /*  The following routine swaps the endian format of an unsigned int.
  *  It must be static because it is referenced indirectly.
Index: cpukit/score/cpu/i386/cpu.c
===================================================================
--- cpukit/score/cpu/i386/cpu.c	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/i386/cpu.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -118,5 +118,5 @@
 };
 
-static void _defaultExcHandler (CPU_Exception_frame *ctx)
+void _CPU_Exception_frame_print (const CPU_Exception_frame *ctx)
 {
   unsigned int faultAddr = 0;
@@ -149,5 +149,4 @@
      */
     printk("Exception while executing ISR!!!. System locked\n");
-    _CPU_Fatal_halt(faultAddr);
   }
   else {
@@ -172,6 +171,13 @@
     rtems_task_suspend(_Thread_Executing->Object.id);
 #endif
-    bsp_reset();
-  }
+  }
+}
+
+static void _defaultExcHandler (CPU_Exception_frame *ctx)
+{
+  rtems_fatal(
+    RTEMS_FATAL_SOURCE_EXCEPTION,
+    (rtems_fatal_code) ctx
+  );
 }
 
Index: cpukit/score/cpu/i386/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/i386/rtems/score/cpu.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/i386/rtems/score/cpu.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -666,4 +666,6 @@
 #endif
 
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame );
+
 #endif /* ASM */
 
Index: cpukit/score/cpu/lm32/Makefile.am
===================================================================
--- cpukit/score/cpu/lm32/Makefile.am	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/lm32/Makefile.am	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -12,4 +12,5 @@
 noinst_LIBRARIES = libscorecpu.a
 libscorecpu_a_SOURCES = cpu.c cpu_asm.S irq.c
+libscorecpu_a_SOURCES += lm32-exception-frame-print.c
 libscorecpu_a_CPPFLAGS = $(AM_CPPFLAGS)
 
Index: cpukit/score/cpu/lm32/lm32-exception-frame-print.c
===================================================================
--- cpukit/score/cpu/lm32/lm32-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
+++ cpukit/score/cpu/lm32/lm32-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Obere Lagerstr. 30
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+  #include "config.h"
+#endif
+
+#include <rtems/score/cpu.h>
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame )
+{
+  /* TODO */
+}
Index: cpukit/score/cpu/lm32/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/lm32/rtems/score/cpu.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/lm32/rtems/score/cpu.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -1196,4 +1196,9 @@
 );
 
+/* FIXME */
+typedef CPU_Interrupt_frame CPU_Exception_frame;
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame );
+
 /**
  *  @ingroup CPUEndian
Index: cpukit/score/cpu/m32c/Makefile.am
===================================================================
--- cpukit/score/cpu/m32c/Makefile.am	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/m32c/Makefile.am	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -15,4 +15,5 @@
 libscorecpu_a_SOURCES = cpu.c cpu_asm.c context_switch.S context_init.c \
     varvects.S
+libscorecpu_a_SOURCES += m32c-exception-frame-print.c
 libscorecpu_a_CPPFLAGS = $(AM_CPPFLAGS)
 
Index: cpukit/score/cpu/m32c/m32c-exception-frame-print.c
===================================================================
--- cpukit/score/cpu/m32c/m32c-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
+++ cpukit/score/cpu/m32c/m32c-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Obere Lagerstr. 30
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+  #include "config.h"
+#endif
+
+#include <rtems/score/cpu.h>
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame )
+{
+  /* TODO */
+}
Index: cpukit/score/cpu/m32c/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/m32c/rtems/score/cpu.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/m32c/rtems/score/cpu.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -1132,4 +1132,9 @@
 ) RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
 
+/* FIXME */
+typedef CPU_Interrupt_frame CPU_Exception_frame;
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame );
+
 /**
  *  @ingroup CPUEndian
Index: cpukit/score/cpu/m32r/Makefile.am
===================================================================
--- cpukit/score/cpu/m32r/Makefile.am	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/m32r/Makefile.am	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -14,4 +14,5 @@
 noinst_LIBRARIES = libscorecpu.a
 libscorecpu_a_SOURCES = cpu.c cpu_asm.c context_switch.S context_init.c
+libscorecpu_a_SOURCES += m32r-exception-frame-print.c
 libscorecpu_a_CPPFLAGS = $(AM_CPPFLAGS)
 
Index: cpukit/score/cpu/m32r/m32r-exception-frame-print.c
===================================================================
--- cpukit/score/cpu/m32r/m32r-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
+++ cpukit/score/cpu/m32r/m32r-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Obere Lagerstr. 30
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+  #include "config.h"
+#endif
+
+#include <rtems/score/cpu.h>
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame )
+{
+  /* TODO */
+}
Index: cpukit/score/cpu/m32r/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/m32r/rtems/score/cpu.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/m32r/rtems/score/cpu.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -1190,4 +1190,9 @@
 );
 
+/* FIXME */
+typedef CPU_Interrupt_frame CPU_Exception_frame;
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame );
+
 /**
  *  @ingroup CPUEndian
Index: cpukit/score/cpu/m68k/Makefile.am
===================================================================
--- cpukit/score/cpu/m68k/Makefile.am	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/m68k/Makefile.am	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -19,4 +19,5 @@
 
 libscorecpu_a_SOURCES = cpu.c cpu_asm.S
+libscorecpu_a_SOURCES += m68k-exception-frame-print.c
 
 include $(srcdir)/preinstall.am
Index: cpukit/score/cpu/m68k/m68k-exception-frame-print.c
===================================================================
--- cpukit/score/cpu/m68k/m68k-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
+++ cpukit/score/cpu/m68k/m68k-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Obere Lagerstr. 30
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+  #include "config.h"
+#endif
+
+#include <rtems/score/cpu.h>
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame )
+{
+  /* TODO */
+}
Index: cpukit/score/cpu/m68k/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/m68k/rtems/score/cpu.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/m68k/rtems/score/cpu.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -710,4 +710,6 @@
 );
 
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame );
+
 #if (M68K_HAS_FPSP_PACKAGE == 1)
 /*
Index: cpukit/score/cpu/mips/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/mips/rtems/score/cpu.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/mips/rtems/score/cpu.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -610,4 +610,6 @@
 } CPU_Interrupt_frame;
 
+typedef CPU_Interrupt_frame CPU_Exception_frame;
+
 /*
  *  This variable is optional.  It is used on CPUs on which it is difficult
@@ -703,4 +705,6 @@
 
 #define CPU_STACK_ALIGNMENT        CPU_ALIGNMENT
+
+void mips_vector_exceptions( CPU_Interrupt_frame *frame );
 
 /*
@@ -1113,4 +1117,13 @@
 );
 
+void _BSP_Exception_frame_print( const CPU_Exception_frame *frame );
+
+static inline void _CPU_Exception_frame_print(
+  const CPU_Exception_frame *frame
+)
+{
+  _BSP_Exception_frame_print( frame );
+}
+
 /*  The following routine swaps the endian format of an unsigned int.
  *  It must be static because it is referenced indirectly.
Index: cpukit/score/cpu/nios2/Makefile.am
===================================================================
--- cpukit/score/cpu/nios2/Makefile.am	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/nios2/Makefile.am	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -25,4 +25,5 @@
 libscorecpu_a_SOURCES += nios2-eic-il-low-level.S
 libscorecpu_a_SOURCES += nios2-eic-rsie-low-level.S
+libscorecpu_a_SOURCES += nios2-exception-frame-print.c
 libscorecpu_a_SOURCES += nios2-fatal-halt.c
 libscorecpu_a_SOURCES += nios2-iic-low-level.S
Index: cpukit/score/cpu/nios2/nios2-exception-frame-print.c
===================================================================
--- cpukit/score/cpu/nios2/nios2-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
+++ cpukit/score/cpu/nios2/nios2-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Obere Lagerstr. 30
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+  #include "config.h"
+#endif
+
+#include <rtems/score/cpu.h>
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame )
+{
+  /* TODO */
+}
Index: cpukit/score/cpu/nios2/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/nios2/rtems/score/cpu.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/nios2/rtems/score/cpu.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -339,4 +339,6 @@
 ) RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
 
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame );
+
 static inline uint32_t CPU_swap_u32( uint32_t value )
 {
Index: cpukit/score/cpu/no_cpu/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/no_cpu/rtems/score/cpu.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/no_cpu/rtems/score/cpu.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -1265,4 +1265,26 @@
 
 /**
+ *  @brief The set of registers that specifies the complete processor state.
+ *
+ *  The CPU exception frame may be available in fatal error conditions like for
+ *  example illegal opcodes, instruction fetch errors, or data access errors.
+ *
+ *  @see rtems_fatal(), RTEMS_FATAL_SOURCE_EXCEPTION, and
+ *  rtems_exception_frame_print().
+ */
+typedef struct {
+  uint32_t processor_state_register;
+  uint32_t integer_registers [1];
+  double float_registers [1];
+} CPU_Exception_frame;
+
+/**
+ *  @brief Prints the exception frame via printk().
+ *
+ *  @see rtems_fatal() and RTEMS_FATAL_SOURCE_EXCEPTION.
+ */
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame );
+
+/**
  *  @ingroup CPUEndian
  *  The following routine swaps the endian format of an unsigned int.
Index: cpukit/score/cpu/powerpc/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/powerpc/rtems/score/cpu.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/powerpc/rtems/score/cpu.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -1037,4 +1037,13 @@
 } CPU_Exception_frame;
 
+void _BSP_Exception_frame_print( const CPU_Exception_frame *frame );
+
+static inline void _CPU_Exception_frame_print(
+  const CPU_Exception_frame *frame
+)
+{
+  _BSP_Exception_frame_print( frame );
+}
+
 /*
  * _CPU_Initialize_altivec()
Index: cpukit/score/cpu/sh/Makefile.am
===================================================================
--- cpukit/score/cpu/sh/Makefile.am	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/sh/Makefile.am	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -12,4 +12,5 @@
 noinst_LIBRARIES = libscorecpu.a
 libscorecpu_a_SOURCES = cpu.c context.c
+libscorecpu_a_SOURCES += sh-exception-frame-print.c
 libscorecpu_a_CPPFLAGS = $(AM_CPPFLAGS)
 
Index: cpukit/score/cpu/sh/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/sh/rtems/score/cpu.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/sh/rtems/score/cpu.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -886,4 +886,8 @@
 );
 
+/* FIXME */
+typedef CPU_Interrupt_frame CPU_Exception_frame;
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame );
 
 #ifdef __cplusplus
Index: cpukit/score/cpu/sh/sh-exception-frame-print.c
===================================================================
--- cpukit/score/cpu/sh/sh-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
+++ cpukit/score/cpu/sh/sh-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Obere Lagerstr. 30
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+  #include "config.h"
+#endif
+
+#include <rtems/score/cpu.h>
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame )
+{
+  /* TODO */
+}
Index: cpukit/score/cpu/sparc/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/sparc/rtems/score/cpu.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/sparc/rtems/score/cpu.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -1222,4 +1222,18 @@
 );
 
+typedef struct {
+  uint32_t trap;
+  CPU_Interrupt_frame *isf;
+} CPU_Exception_frame;
+
+void _BSP_Exception_frame_print( const CPU_Exception_frame *frame );
+
+static inline void _CPU_Exception_frame_print(
+  const CPU_Exception_frame *frame
+)
+{
+  _BSP_Exception_frame_print( frame );
+}
+
 /**
  *  @brief SPARC Specific Method to Endian Swap an uint32_t 
Index: cpukit/score/cpu/sparc64/Makefile.am
===================================================================
--- cpukit/score/cpu/sparc64/Makefile.am	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/sparc64/Makefile.am	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -14,4 +14,5 @@
 noinst_LIBRARIES = libscorecpu.a
 libscorecpu_a_SOURCES = context.S cpu.c
+libscorecpu_a_SOURCES += sparc64-exception-frame-print.c
 libscorecpu_a_CPPFLAGS = $(AM_CPPFLAGS)
 
Index: cpukit/score/cpu/sparc64/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/sparc64/rtems/score/cpu.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/sparc64/rtems/score/cpu.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -1025,4 +1025,9 @@
 );
 
+/* FIXME */
+typedef CPU_Interrupt_frame CPU_Exception_frame;
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame );
+
 /*
  *  CPU_swap_u32
Index: cpukit/score/cpu/sparc64/sparc64-exception-frame-print.c
===================================================================
--- cpukit/score/cpu/sparc64/sparc64-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
+++ cpukit/score/cpu/sparc64/sparc64-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Obere Lagerstr. 30
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+  #include "config.h"
+#endif
+
+#include <rtems/score/cpu.h>
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame )
+{
+  /* TODO */
+}
Index: cpukit/score/cpu/v850/Makefile.am
===================================================================
--- cpukit/score/cpu/v850/Makefile.am	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/v850/Makefile.am	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -12,4 +12,5 @@
 libscorecpu_a_SOURCES  = cpu.c
 libscorecpu_a_SOURCES += cpu_asm.S
+libscorecpu_a_SOURCES += v850-exception-frame-print.c
 libscorecpu_a_CPPFLAGS = $(AM_CPPFLAGS)
 
Index: cpukit/score/cpu/v850/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/v850/rtems/score/cpu.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/cpu/v850/rtems/score/cpu.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -1125,4 +1125,9 @@
 #endif
 
+/* FIXME */
+typedef CPU_Interrupt_frame CPU_Exception_frame;
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame );
+
 /**
  *  @ingroup CPUEndian
Index: cpukit/score/cpu/v850/v850-exception-frame-print.c
===================================================================
--- cpukit/score/cpu/v850/v850-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
+++ cpukit/score/cpu/v850/v850-exception-frame-print.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Obere Lagerstr. 30
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+  #include "config.h"
+#endif
+
+#include <rtems/score/cpu.h>
+
+void _CPU_Exception_frame_print( const CPU_Exception_frame *frame )
+{
+  /* TODO */
+}
Index: cpukit/score/include/rtems/score/interr.h
===================================================================
--- cpukit/score/include/rtems/score/interr.h	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ cpukit/score/include/rtems/score/interr.h	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -99,11 +99,11 @@
 
   /**
-   * @brief Fatal source of the PowerPC exceptions.
+   * @brief Fatal source of the exceptions.
    *
    * The fatal code is the pointer value of the exception frame pointer.
    *
-   * @see BSP_Exception_frame.
-   */
-  RTEMS_FATAL_SOURCE_POWERPC_EXCEPTION,
+   * @see rtems_exception_frame and rtems_exception_frame_print().
+   */
+  RTEMS_FATAL_SOURCE_EXCEPTION,
 
   /**
Index: doc/user/fatal.t
===================================================================
--- doc/user/fatal.t	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ doc/user/fatal.t	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -204,4 +204,31 @@
 @c
 @page
+@subsection EXCEPTION_FRAME_PRINT - Prints the exception frame
+
+@cindex exception frame
+
+@subheading CALLING SEQUENCE:
+
+@ifset is-C
+@findex rtems_exception_frame_print
+@example
+void rtems_exception_frame_print(
+  const rtems_exception_frame *frame
+);
+@end example
+@end ifset
+
+@subheading DIRECTIVE STATUS CODES
+
+NONE
+
+@subheading DESCRIPTION:
+
+Prints the exception frame via printk().
+
+@c
+@c
+@c
+@page
 @subsection INTERNAL_ERROR_DESCRIPTION - Returns a description for an internal error code
 
Index: testsuites/sptests/Makefile.am
===================================================================
--- testsuites/sptests/Makefile.am	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ testsuites/sptests/Makefile.am	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -29,4 +29,5 @@
     spedfsched01 spedfsched02 spedfsched03 \
     spcbssched01 spcbssched02 spcbssched03 spqreslib sptimespec01
+SUBDIRS += spfatal26
 SUBDIRS += speventtransient01
 SUBDIRS += speventsystem01
Index: testsuites/sptests/configure.ac
===================================================================
--- testsuites/sptests/configure.ac	(revision d2202ac56d6edc94a813257b1bdf97d6e7c543e2)
+++ testsuites/sptests/configure.ac	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -28,4 +28,5 @@
 # Explicitly list all Makefiles here
 AC_CONFIG_FILES([Makefile
+spfatal26/Makefile
 spinternalerror02/Makefile
 spinternalerror01/Makefile
Index: testsuites/sptests/spfatal26/Makefile.am
===================================================================
--- testsuites/sptests/spfatal26/Makefile.am	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
+++ testsuites/sptests/spfatal26/Makefile.am	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -0,0 +1,19 @@
+rtems_tests_PROGRAMS = spfatal26
+spfatal26_SOURCES = init.c
+
+dist_rtems_tests_DATA = spfatal26.scn spfatal26.doc
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
+include $(top_srcdir)/../automake/compile.am
+include $(top_srcdir)/../automake/leaf.am
+
+AM_CPPFLAGS += -I$(top_srcdir)/../support/include
+
+LINK_OBJS = $(spfatal26_OBJECTS)
+LINK_LIBS = $(spfatal26_LDLIBS)
+
+spfatal26$(EXEEXT): $(spfatal26_OBJECTS) $(spfatal26_DEPENDENCIES)
+	@rm -f spfatal26$(EXEEXT)
+	$(make-exe)
+
+include $(top_srcdir)/../automake/local.am
Index: testsuites/sptests/spfatal26/init.c
===================================================================
--- testsuites/sptests/spfatal26/init.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
+++ testsuites/sptests/spfatal26/init.c	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Obere Lagerstr. 30
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+  #include "config.h"
+#endif
+
+#include "tmacros.h"
+
+#include <limits.h>
+
+#include <rtems.h>
+
+static void provoke_aligment_or_data_access_exception( void )
+{
+  uintptr_t one = 1;
+  int i = sizeof(void *) * CHAR_BIT;
+  uintptr_t n = 1;
+  uintptr_t base = 0;
+  uintptr_t inc;
+
+  *(volatile uint64_t *) base;
+
+  do {
+    int j;
+
+    --i;
+    base = one << i;
+    inc = base << 1;
+
+    for (j = 0; j < n; ++j, base += inc) {
+      *(volatile uint64_t *) base;
+    }
+
+    n <<= 1;
+  } while (i > 0);
+}
+
+static void Init( rtems_task_argument arg )
+{
+  printk( "\n\n*** TEST SPFATAL 26 ***\n" );
+
+  provoke_aligment_or_data_access_exception();
+
+  rtems_test_assert( 0 );
+}
+
+static void fatal_extension(
+  rtems_fatal_source source,
+  bool is_internal,
+  rtems_fatal_code code
+)
+{
+  rtems_test_assert( source == RTEMS_FATAL_SOURCE_EXCEPTION );
+  rtems_test_assert( !is_internal );
+
+  rtems_exception_frame_print( (const rtems_exception_frame *) code );
+
+  printk( "*** END OF TEST SPFATAL 26 ***\n" );
+}
+
+#define CONFIGURE_INITIAL_EXTENSIONS { .fatal = fatal_extension }
+
+#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+
+#define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
+
+#define CONFIGURE_MAXIMUM_TASKS 1
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
Index: testsuites/sptests/spfatal26/spfatal26.scn
===================================================================
--- testsuites/sptests/spfatal26/spfatal26.scn	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
+++ testsuites/sptests/spfatal26/spfatal26.scn	(revision 815994fd17c2f732aacaf273a1e476a62de5f4a6)
@@ -0,0 +1,2 @@
+*** TEST SPFATAL 26 ***
+*** END OF TEST SPFATAL 26 ***
