forked from Imagelibrary/rtems
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:
@@ -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
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user