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.
This commit is contained in:
Sebastian Huber
2012-11-25 17:48:11 +01:00
parent d2202ac56d
commit 815994fd17
64 changed files with 702 additions and 65 deletions

View File

@@ -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 ...
*/
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
);
}
/*