From f82752a474ee8157eafcb2f3192fb3ed8d3def9a Mon Sep 17 00:00:00 2001 From: Daniel Hellstrom Date: Wed, 4 Jun 2014 11:23:34 +0200 Subject: 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 089fc27fbb..a032d4aff9 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 70a0ddb429..ba3bfb8015 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 306e4eb316..0b728e7a1c 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 621b3f131f..81704459c7 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 2d1472d4df..e0ab037938 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 8e03245eb1..17fa33c95f 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 fa31d74dd9..011fe48b7e 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 bf1d3fc9e8..d35bee889d 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 fb0c60c27a..d2224657eb 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 392a995917..7fc639b520 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 2c72bf616d..cf226011d4 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 7632fa52e0..40cae874c0 100644 --- a/cpukit/score/cpu/nios2/nios2-fatal-halt.c +++ b/cpukit/score/cpu/nios2/nios2-fatal-halt.c @@ -14,7 +14,7 @@ #include #include -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 8f3f3b9348..f51bc2d2ce 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 fcfef8d461..a14392c821 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 0fcc6e719c..0a0cc415ca 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 13f50ade77..52992f3d89 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 cb899539fb..217eb7da96 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 e44ab71f33..1cf2e9ac51 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 bf7d4fb42b..dd5040a6ac 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 7234d67a96..e76a2a2728 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 97ca3c7731..f7d62744ca 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); -- cgit v1.2.3