From 8b65b57472d5086f2c035a09fdb07a40285beb4a Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 28 Jul 2021 14:41:32 +0200 Subject: score: Canonicalize _CPU_Fatal_halt() Move _CPU_Fatal_halt() declaration to and make sure it is a proper declaration of a function which does not return. Fix the type of the error code. If necessary, add the implementation to cpu.c. Implementing _CPU_Fatal_halt() as a function makes it possible to wrap this function for example to fully test _Terminate(). --- bsps/i386/pc386/start/bsp_fatal_halt.c | 8 +++----- bsps/riscv/griscv/start/bsp_fatal_halt.c | 3 ++- bsps/riscv/riscv/start/bsp_fatal_halt.c | 3 ++- bsps/sparc/leon3/start/bsp_fatal_halt.c | 23 +++++++++-------------- bsps/sparc/shared/start/bsp_fatal_halt.c | 23 +++++++++-------------- 5 files changed, 25 insertions(+), 35 deletions(-) (limited to 'bsps') diff --git a/bsps/i386/pc386/start/bsp_fatal_halt.c b/bsps/i386/pc386/start/bsp_fatal_halt.c index 07bbd793e0..954955dee1 100644 --- a/bsps/i386/pc386/start/bsp_fatal_halt.c +++ b/bsps/i386/pc386/start/bsp_fatal_halt.c @@ -7,9 +7,9 @@ * http://www.rtems.org/license/LICENSE. */ -#include +#include -void _CPU_Fatal_halt(uint32_t source, uint32_t error) +void _CPU_Fatal_halt( uint32_t source, CPU_Uint32ptr error ) { __asm__ volatile ( "cli\n\t" @@ -18,7 +18,5 @@ void _CPU_Fatal_halt(uint32_t source, uint32_t error) : "=r" ((error)) : "0" ((error)) ); - #ifdef __GNUC__ - __builtin_unreachable(); - #endif + RTEMS_UNREACHABLE(); } diff --git a/bsps/riscv/griscv/start/bsp_fatal_halt.c b/bsps/riscv/griscv/start/bsp_fatal_halt.c index ced328ea0f..5b1eed3e8f 100644 --- a/bsps/riscv/griscv/start/bsp_fatal_halt.c +++ b/bsps/riscv/griscv/start/bsp_fatal_halt.c @@ -27,8 +27,9 @@ */ #include +#include -void _CPU_Fatal_halt(uint32_t source, uint32_t error) +void _CPU_Fatal_halt( uint32_t source, CPU_Uint32ptr error ) { /* ecall is currently used to halt the griscv cpu */ asm ("ecall"); diff --git a/bsps/riscv/riscv/start/bsp_fatal_halt.c b/bsps/riscv/riscv/start/bsp_fatal_halt.c index 348fa4f8f4..d9708661a7 100644 --- a/bsps/riscv/riscv/start/bsp_fatal_halt.c +++ b/bsps/riscv/riscv/start/bsp_fatal_halt.c @@ -28,10 +28,11 @@ #include #include +#include #include -void _CPU_Fatal_halt(uint32_t source, uint32_t error) +void _CPU_Fatal_halt( uint32_t source, CPU_Uint32ptr error ) { const char *fdt; int node; diff --git a/bsps/sparc/leon3/start/bsp_fatal_halt.c b/bsps/sparc/leon3/start/bsp_fatal_halt.c index fa907a3363..5a6e3f490e 100644 --- a/bsps/sparc/leon3/start/bsp_fatal_halt.c +++ b/bsps/sparc/leon3/start/bsp_fatal_halt.c @@ -13,24 +13,19 @@ #include #include +#include -#ifdef BSP_POWER_DOWN_AT_FATAL_HALT - -/* Power down LEON CPU on fatal error exit */ -void _CPU_Fatal_halt(uint32_t source, uint32_t error) +void _CPU_Fatal_halt( uint32_t source, CPU_Uint32ptr error ) { +#ifdef BSP_POWER_DOWN_AT_FATAL_HALT + /* Power down LEON CPU on fatal error exit */ sparc_disable_interrupts(); leon3_power_down_loop(); -} - #else - -/* return to debugger, simulator, hypervisor or similar by exiting - * with an error code. g1=1, g2=FATAL_SOURCE, G3=error-code. - */ -void _CPU_Fatal_halt(uint32_t source, uint32_t error) -{ + /* + * Return to debugger, simulator, hypervisor or similar by exiting + * with an error code. g1=1, g2=FATAL_SOURCE, G3=error-code. + */ sparc_syscall_exit(source, error); -} - #endif +} diff --git a/bsps/sparc/shared/start/bsp_fatal_halt.c b/bsps/sparc/shared/start/bsp_fatal_halt.c index 3a82445ac1..f53275a073 100644 --- a/bsps/sparc/shared/start/bsp_fatal_halt.c +++ b/bsps/sparc/shared/start/bsp_fatal_halt.c @@ -12,27 +12,22 @@ */ #include +#include -#ifdef BSP_POWER_DOWN_AT_FATAL_HALT - -/* Spin CPU on fatal error exit */ -void _CPU_Fatal_halt(uint32_t source, uint32_t error) +void _CPU_Fatal_halt( uint32_t source, CPU_Uint32ptr error ) { +#ifdef BSP_POWER_DOWN_AT_FATAL_HALT + /* Spin CPU on fatal error exit */ uint32_t level = sparc_disable_interrupts(); __asm__ volatile ( "mov %0, %%g1 " : "=r" (level) : "0" (level) ); while (1) ; /* loop forever */ -} - #else - -/* return to debugger, simulator, hypervisor or similar by exiting - * with an error code. g1=1, g2=FATAL_SOURCE, G3=error-code. - */ -void _CPU_Fatal_halt(uint32_t source, uint32_t error) -{ + /* + * Return to debugger, simulator, hypervisor or similar by exiting + * with an error code. g1=1, g2=FATAL_SOURCE, G3=error-code. + */ sparc_syscall_exit(source, error); -} - #endif +} -- cgit v1.2.3