[rtems commit] Let CPU/BSP Fatal handler have access to source
Sebastian Huber
sebh at rtems.org
Wed Sep 10 12:13:33 UTC 2014
Module: rtems
Branch: master
Commit: f82752a474ee8157eafcb2f3192fb3ed8d3def9a
Changeset: http://git.rtems.org/rtems/commit/?id=f82752a474ee8157eafcb2f3192fb3ed8d3def9a
Author: Daniel Hellstrom <daniel at gaisler.com>
Date: Wed Jun 4 11:23:34 2014 +0200
Let CPU/BSP Fatal handler have access to source
Without the source the error code does not say that much.
Let it be up to the CPU/BSP to determine the error code
reported on fatal shutdown.
This patch does not change the current behaviour, just
adds the option to handle the source of the fatal halt.
---
cpukit/score/cpu/arm/rtems/score/cpu.h | 2 +-
cpukit/score/cpu/avr/rtems/score/cpu.h | 2 +-
cpukit/score/cpu/bfin/rtems/score/cpu.h | 2 +-
cpukit/score/cpu/h8300/rtems/score/cpu.h | 4 ++--
cpukit/score/cpu/i386/rtems/score/cpu.h | 2 +-
cpukit/score/cpu/lm32/rtems/score/cpu.h | 2 +-
cpukit/score/cpu/m32c/rtems/score/cpu.h | 2 +-
cpukit/score/cpu/m32r/rtems/score/cpu.h | 2 +-
cpukit/score/cpu/m68k/rtems/score/cpu.h | 4 ++--
cpukit/score/cpu/mips/rtems/score/cpu.h | 2 +-
cpukit/score/cpu/moxie/rtems/score/cpu.h | 4 ++--
cpukit/score/cpu/nios2/nios2-fatal-halt.c | 2 +-
cpukit/score/cpu/nios2/nios2-iic-irq.c | 2 +-
cpukit/score/cpu/nios2/rtems/score/cpu.h | 3 ++-
cpukit/score/cpu/no_cpu/rtems/score/cpu.h | 2 +-
cpukit/score/cpu/powerpc/rtems/score/cpu.h | 2 +-
cpukit/score/cpu/sh/rtems/score/cpu.h | 4 ++--
cpukit/score/cpu/sparc/rtems/score/cpu.h | 2 +-
cpukit/score/cpu/sparc64/rtems/score/cpu.h | 2 +-
cpukit/score/cpu/v850/rtems/score/cpu.h | 2 +-
cpukit/score/src/interr.c | 2 +-
21 files changed, 26 insertions(+), 25 deletions(-)
diff --git a/cpukit/score/cpu/arm/rtems/score/cpu.h b/cpukit/score/cpu/arm/rtems/score/cpu.h
index 089fc27..a032d4a 100644
--- a/cpukit/score/cpu/arm/rtems/score/cpu.h
+++ b/cpukit/score/cpu/arm/rtems/score/cpu.h
@@ -455,7 +455,7 @@ void _CPU_Context_Initialize(
*(*(_destination)) = _CPU_Null_fp_context; \
} while (0)
-#define _CPU_Fatal_halt( _err ) \
+#define _CPU_Fatal_halt( _source, _err ) \
do { \
uint32_t _level; \
uint32_t _error = _err; \
diff --git a/cpukit/score/cpu/avr/rtems/score/cpu.h b/cpukit/score/cpu/avr/rtems/score/cpu.h
index 70a0ddb..ba3bfb8 100644
--- a/cpukit/score/cpu/avr/rtems/score/cpu.h
+++ b/cpukit/score/cpu/avr/rtems/score/cpu.h
@@ -814,7 +814,7 @@ uint32_t _CPU_ISR_Get_level( void );
* XXX document implementation including references if appropriate
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ \
}
diff --git a/cpukit/score/cpu/bfin/rtems/score/cpu.h b/cpukit/score/cpu/bfin/rtems/score/cpu.h
index 306e4eb..0b728e7 100644
--- a/cpukit/score/cpu/bfin/rtems/score/cpu.h
+++ b/cpukit/score/cpu/bfin/rtems/score/cpu.h
@@ -912,7 +912,7 @@ void _CPU_Context_Initialize(
*
* XXX document implementation including references if appropriate
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ \
__asm__ volatile ( "cli R1; \
R1 = %0; \
diff --git a/cpukit/score/cpu/h8300/rtems/score/cpu.h b/cpukit/score/cpu/h8300/rtems/score/cpu.h
index 621b3f1..8170445 100644
--- a/cpukit/score/cpu/h8300/rtems/score/cpu.h
+++ b/cpukit/score/cpu/h8300/rtems/score/cpu.h
@@ -847,8 +847,8 @@ uint32_t _CPU_ISR_Get_level( void );
* XXX
*/
-#define _CPU_Fatal_halt( _error ) \
- printk("Fatal Error %d Halted\n",_error); \
+#define _CPU_Fatal_halt( _source, _error ) \
+ printk("Fatal Error %d.%d Halted\n",_source, _error); \
for(;;)
diff --git a/cpukit/score/cpu/i386/rtems/score/cpu.h b/cpukit/score/cpu/i386/rtems/score/cpu.h
index 2d1472d..e0ab037 100644
--- a/cpukit/score/cpu/i386/rtems/score/cpu.h
+++ b/cpukit/score/cpu/i386/rtems/score/cpu.h
@@ -525,7 +525,7 @@ uint32_t _CPU_ISR_Get_level( void );
* + disable interrupts and halt the CPU
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ \
uint32_t _error_lvalue = ( _error ); \
__asm__ volatile ( "cli ; \
diff --git a/cpukit/score/cpu/lm32/rtems/score/cpu.h b/cpukit/score/cpu/lm32/rtems/score/cpu.h
index 8e03245..17fa33c 100644
--- a/cpukit/score/cpu/lm32/rtems/score/cpu.h
+++ b/cpukit/score/cpu/lm32/rtems/score/cpu.h
@@ -915,7 +915,7 @@ extern char _gp[];
*
* XXX document implementation including references if appropriate
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ \
}
diff --git a/cpukit/score/cpu/m32c/rtems/score/cpu.h b/cpukit/score/cpu/m32c/rtems/score/cpu.h
index fa31d74..011fe48 100644
--- a/cpukit/score/cpu/m32c/rtems/score/cpu.h
+++ b/cpukit/score/cpu/m32c/rtems/score/cpu.h
@@ -906,7 +906,7 @@ void _CPU_Context_Restart_self(
*
* XXX document implementation including references if appropriate
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ \
}
diff --git a/cpukit/score/cpu/m32r/rtems/score/cpu.h b/cpukit/score/cpu/m32r/rtems/score/cpu.h
index bf1d3fc..d35bee8 100644
--- a/cpukit/score/cpu/m32r/rtems/score/cpu.h
+++ b/cpukit/score/cpu/m32r/rtems/score/cpu.h
@@ -924,7 +924,7 @@ void _CPU_Context_Restart_self(
*
* XXX document implementation including references if appropriate
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ \
}
diff --git a/cpukit/score/cpu/m68k/rtems/score/cpu.h b/cpukit/score/cpu/m68k/rtems/score/cpu.h
index fb0c60c..d222465 100644
--- a/cpukit/score/cpu/m68k/rtems/score/cpu.h
+++ b/cpukit/score/cpu/m68k/rtems/score/cpu.h
@@ -479,7 +479,7 @@ void *_CPU_Thread_Idle_body( uintptr_t ignored );
*/
#if ( defined(__mcoldfire__) )
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ __asm__ volatile( "move.w %%sr,%%d0\n\t" \
"or.l %2,%%d0\n\t" \
"move.w %%d0,%%sr\n\t" \
@@ -491,7 +491,7 @@ void *_CPU_Thread_Idle_body( uintptr_t ignored );
: "d0", "d1" ); \
}
#else
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ __asm__ volatile( "movl %0,%%d0; " \
"orw #0x0700,%%sr; " \
"stop #0x2700" : "=d" ((_error)) : "0" ((_error)) ); \
diff --git a/cpukit/score/cpu/mips/rtems/score/cpu.h b/cpukit/score/cpu/mips/rtems/score/cpu.h
index 392a995..7fc639b 100644
--- a/cpukit/score/cpu/mips/rtems/score/cpu.h
+++ b/cpukit/score/cpu/mips/rtems/score/cpu.h
@@ -913,7 +913,7 @@ void _CPU_Context_Initialize(
* halts/stops the CPU.
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
do { \
unsigned int _level; \
_CPU_ISR_Disable(_level); \
diff --git a/cpukit/score/cpu/moxie/rtems/score/cpu.h b/cpukit/score/cpu/moxie/rtems/score/cpu.h
index 2c72bf6..cf22601 100644
--- a/cpukit/score/cpu/moxie/rtems/score/cpu.h
+++ b/cpukit/score/cpu/moxie/rtems/score/cpu.h
@@ -733,8 +733,8 @@ uint32_t _CPU_ISR_Get_level( void );
*
* XXX
*/
-#define _CPU_Fatal_halt( _error ) \
- printk("Fatal Error %d Halted\n",_error); \
+#define _CPU_Fatal_halt( _source, _error ) \
+ printk("Fatal Error %d.%d Halted\n",_source,_error); \
for(;;)
/* end of Fatal Error manager macros */
diff --git a/cpukit/score/cpu/nios2/nios2-fatal-halt.c b/cpukit/score/cpu/nios2/nios2-fatal-halt.c
index 7632fa5..40cae87 100644
--- a/cpukit/score/cpu/nios2/nios2-fatal-halt.c
+++ b/cpukit/score/cpu/nios2/nios2-fatal-halt.c
@@ -14,7 +14,7 @@
#include <rtems/score/cpu.h>
#include <rtems/score/nios2-utility.h>
-void _CPU_Fatal_halt( uint32_t _error )
+void _CPU_Fatal_halt( uint32_t _source, uint32_t _error )
{
/* write 0 to status register (disable interrupts) */
__builtin_wrctl( NIOS2_CTLREG_INDEX_STATUS, 0 );
diff --git a/cpukit/score/cpu/nios2/nios2-iic-irq.c b/cpukit/score/cpu/nios2/nios2-iic-irq.c
index 8f3f3b9..f51bc2d 100644
--- a/cpukit/score/cpu/nios2/nios2-iic-irq.c
+++ b/cpukit/score/cpu/nios2/nios2-iic-irq.c
@@ -133,5 +133,5 @@ void __ISR_Handler(void)
void __Exception_Handler(CPU_Exception_frame *efr)
{
- _CPU_Fatal_halt(0xECC0);
+ _CPU_Fatal_halt(RTEMS_FATAL_SOURCE_EXCEPTION, 0xECC0); /* source ignored */
}
diff --git a/cpukit/score/cpu/nios2/rtems/score/cpu.h b/cpukit/score/cpu/nios2/rtems/score/cpu.h
index fcfef8d..a14392c 100644
--- a/cpukit/score/cpu/nios2/rtems/score/cpu.h
+++ b/cpukit/score/cpu/nios2/rtems/score/cpu.h
@@ -310,7 +310,8 @@ void _CPU_Context_Initialize(
#define _CPU_Context_Restart_self( _the_context ) \
_CPU_Context_restore( (_the_context) );
-void _CPU_Fatal_halt( uint32_t _error ) RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
+void _CPU_Fatal_halt( uint32_t _source, uint32_t _error )
+ RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
/**
* @brief CPU initialization.
diff --git a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h
index 0fcc6e7..0a0cc41 100644
--- a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h
+++ b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h
@@ -1071,7 +1071,7 @@ uint32_t _CPU_ISR_Get_level( void );
*
* XXX document implementation including references if appropriate
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ \
}
diff --git a/cpukit/score/cpu/powerpc/rtems/score/cpu.h b/cpukit/score/cpu/powerpc/rtems/score/cpu.h
index 13f50ad..52992f3 100644
--- a/cpukit/score/cpu/powerpc/rtems/score/cpu.h
+++ b/cpukit/score/cpu/powerpc/rtems/score/cpu.h
@@ -677,7 +677,7 @@ void _BSP_Fatal_error(unsigned int);
#endif /* ASM */
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
_BSP_Fatal_error(_error)
/* end of Fatal Error manager macros */
diff --git a/cpukit/score/cpu/sh/rtems/score/cpu.h b/cpukit/score/cpu/sh/rtems/score/cpu.h
index cb89953..217eb7d 100644
--- a/cpukit/score/cpu/sh/rtems/score/cpu.h
+++ b/cpukit/score/cpu/sh/rtems/score/cpu.h
@@ -675,9 +675,9 @@ SCORE_EXTERN void _CPU_Context_Initialize(
#ifdef BSP_FATAL_HALT
/* we manage the fatal error in the board support package */
void bsp_fatal_halt( uint32_t _error);
-#define _CPU_Fatal_halt( _error ) bsp_fatal_halt( _error)
+#define _CPU_Fatal_halt( _source, _error ) bsp_fatal_halt( _error)
#else
-#define _CPU_Fatal_halt( _error)\
+#define _CPU_Fatal_halt( _source, _error)\
{ \
__asm__ volatile("mov.l %0,r0"::"m" (_error)); \
__asm__ volatile("mov #1, r4"); \
diff --git a/cpukit/score/cpu/sparc/rtems/score/cpu.h b/cpukit/score/cpu/sparc/rtems/score/cpu.h
index e44ab71..1cf2e9a 100644
--- a/cpukit/score/cpu/sparc/rtems/score/cpu.h
+++ b/cpukit/score/cpu/sparc/rtems/score/cpu.h
@@ -1080,7 +1080,7 @@ void _CPU_Context_Initialize(
* location or a register, optionally disables interrupts, and
* halts/stops the CPU.
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
do { \
uint32_t level; \
\
diff --git a/cpukit/score/cpu/sparc64/rtems/score/cpu.h b/cpukit/score/cpu/sparc64/rtems/score/cpu.h
index bf7d4fb..dd5040a 100644
--- a/cpukit/score/cpu/sparc64/rtems/score/cpu.h
+++ b/cpukit/score/cpu/sparc64/rtems/score/cpu.h
@@ -905,7 +905,7 @@ void _CPU_Context_Initialize(
* halts/stops the CPU.
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
do { \
uint32_t level; \
\
diff --git a/cpukit/score/cpu/v850/rtems/score/cpu.h b/cpukit/score/cpu/v850/rtems/score/cpu.h
index 7234d67..e76a2a2 100644
--- a/cpukit/score/cpu/v850/rtems/score/cpu.h
+++ b/cpukit/score/cpu/v850/rtems/score/cpu.h
@@ -871,7 +871,7 @@ void _CPU_Context_Initialize(
*
* Move the error code into r10, disable interrupts and halt.
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
do { \
__asm__ __volatile__ ( "di" ); \
__asm__ __volatile__ ( "mov %0, r10; " : "=r" ((_error)) ); \
diff --git a/cpukit/score/src/interr.c b/cpukit/score/src/interr.c
index 97ca3c7..f7d6274 100644
--- a/cpukit/score/src/interr.c
+++ b/cpukit/score/src/interr.c
@@ -49,7 +49,7 @@ void _Terminate(
_System_state_Set( SYSTEM_STATE_TERMINATED );
- _CPU_Fatal_halt( the_error );
+ _CPU_Fatal_halt( the_source, the_error );
/* will not return from this routine */
while (true);
More information about the vc
mailing list