[rtems commit] Let CPU/BSP Fatal handler have access to source
Hesham Moustafa
heshamelmatary at gmail.com
Wed Sep 10 13:10:05 UTC 2014
Hi,
This patch was generated before the addition of or1k architecture. I
have sent a new patch to follow this convention for or1k port.
Thanks,
Hesham
On Wed, Sep 10, 2014 at 2:13 PM, Sebastian Huber <sebh at rtems.org> wrote:
> 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);
>
> _______________________________________________
> vc mailing list
> vc at rtems.org
> http://lists.rtems.org/mailman/listinfo/vc
More information about the vc
mailing list