summaryrefslogtreecommitdiffstats
path: root/bsps
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-07-28 14:41:32 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-07-28 21:04:20 +0200
commit8b65b57472d5086f2c035a09fdb07a40285beb4a (patch)
treea59df32bffd218107602471a541c10d66e1b509a /bsps
parentscore: Move per-CPU jobs support (diff)
downloadrtems-8b65b57472d5086f2c035a09fdb07a40285beb4a.tar.bz2
score: Canonicalize _CPU_Fatal_halt()
Move _CPU_Fatal_halt() declaration to <rtems/score/cpuimpl.h> 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().
Diffstat (limited to 'bsps')
-rw-r--r--bsps/i386/pc386/start/bsp_fatal_halt.c8
-rw-r--r--bsps/riscv/griscv/start/bsp_fatal_halt.c3
-rw-r--r--bsps/riscv/riscv/start/bsp_fatal_halt.c3
-rw-r--r--bsps/sparc/leon3/start/bsp_fatal_halt.c23
-rw-r--r--bsps/sparc/shared/start/bsp_fatal_halt.c23
5 files changed, 25 insertions, 35 deletions
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 <bsp.h>
+#include <rtems/score/cpuimpl.h>
-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 <bsp.h>
+#include <rtems/score/cpuimpl.h>
-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 <bsp/riscv.h>
#include <bsp/fdt.h>
+#include <rtems/score/cpuimpl.h>
#include <libfdt.h>
-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 <bsp.h>
#include <leon.h>
+#include <rtems/score/cpuimpl.h>
-#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 <bsp.h>
+#include <rtems/score/cpuimpl.h>
-#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
+}