From 815994fd17c2f732aacaf273a1e476a62de5f4a6 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Sun, 25 Nov 2012 17:48:11 +0100 Subject: 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. --- c/src/lib/libbsp/sparc/leon3/startup/spurious.c | 38 ++++++++++++++----------- 1 file changed, 21 insertions(+), 17 deletions(-) (limited to 'c/src/lib/libbsp/sparc/leon3/startup/spurious.c') 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 - #include -/* - * 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 + ); } /* -- cgit v1.2.3