summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/sparc/leon3/startup/spurious.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-11-25 17:48:11 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-11-27 17:03:40 +0100
commit815994fd17c2f732aacaf273a1e476a62de5f4a6 (patch)
tree17fffb992fcf3e025462215ee3c7515919d2ced4 /c/src/lib/libbsp/sparc/leon3/startup/spurious.c
parentpowerpc: Add CPU_Exception_frame (diff)
downloadrtems-815994fd17c2f732aacaf273a1e476a62de5f4a6.tar.bz2
score: Add CPU_Exception_frame
Add CPU port type CPU_Exception_frame and function _CPU_Exception_frame_print(). The CPU ports of avr, bfin, h8300, lm32, m32c, m32r, m68k, nios2, sh, sparc64, and v850 use an empty default implementation of _CPU_Exception_frame_print(). Add rtems_exception_frame and rtems_exception_frame_print(). Add RTEMS_FATAL_SOURCE_EXCEPTION for CPU exceptions. Use rtems_fatal() with source RTEMS_FATAL_SOURCE_EXCEPTION in CPU ports of i386, powerpc, and sparc for unexpected exceptions. Add third parameter to RTEMS_BSP_CLEANUP_OPTIONS() which controls the BSP_PRINT_EXCEPTION_CONTEXT define used in the default bsp_fatal_extension(). Add test sptests/spfatal26.
Diffstat (limited to 'c/src/lib/libbsp/sparc/leon3/startup/spurious.c')
-rw-r--r--c/src/lib/libbsp/sparc/leon3/startup/spurious.c38
1 files changed, 21 insertions, 17 deletions
diff --git a/c/src/lib/libbsp/sparc/leon3/startup/spurious.c b/c/src/lib/libbsp/sparc/leon3/startup/spurious.c
index f060e284ca..e12ac018a6 100644
--- a/c/src/lib/libbsp/sparc/leon3/startup/spurious.c
+++ b/c/src/lib/libbsp/sparc/leon3/startup/spurious.c
@@ -18,23 +18,17 @@
*/
#include <bsp.h>
-
#include <rtems/bspIo.h>
-/*
- * bsp_spurious_handler
- *
- * Print a message on the debug console and then die
- */
-
-rtems_isr bsp_spurious_handler(
- rtems_vector_number trap,
- CPU_Interrupt_frame *isf
-)
+void _BSP_Exception_frame_print( const CPU_Exception_frame *frame )
{
- uint32_t real_trap;
+ uint32_t trap;
+ uint32_t real_trap;
+ const CPU_Interrupt_frame *isf;
+ 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);
@@ -113,12 +107,22 @@ rtems_isr bsp_spurious_handler(
default:
break;
}
+}
- /*
- * What else can we do but stop ...
- */
-
- __asm__ volatile( "mov 1, %g1; ta 0x0" );
+rtems_isr bsp_spurious_handler(
+ rtems_vector_number trap,
+ CPU_Interrupt_frame *isf
+)
+{
+ CPU_Exception_frame frame = {
+ .trap = trap,
+ .isf = isf
+ };
+
+ rtems_fatal(
+ RTEMS_FATAL_SOURCE_EXCEPTION,
+ (rtems_fatal_code) &frame
+ );
}
/*