diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-07-28 14:41:32 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-07-28 21:04:20 +0200 |
commit | 8b65b57472d5086f2c035a09fdb07a40285beb4a (patch) | |
tree | a59df32bffd218107602471a541c10d66e1b509a /cpukit/score/cpu/m68k/cpu.c | |
parent | score: Move per-CPU jobs support (diff) | |
download | rtems-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 'cpukit/score/cpu/m68k/cpu.c')
-rw-r--r-- | cpukit/score/cpu/m68k/cpu.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/cpukit/score/cpu/m68k/cpu.c b/cpukit/score/cpu/m68k/cpu.c index be63351e9c..e6a5c9dbf3 100644 --- a/cpukit/score/cpu/m68k/cpu.c +++ b/cpukit/score/cpu/m68k/cpu.c @@ -17,6 +17,7 @@ #include "config.h" #endif +#include <rtems/score/cpuimpl.h> #include <rtems/score/isr.h> #include <rtems/score/percpu.h> #include <rtems/score/tls.h> @@ -88,6 +89,29 @@ void _CPU_Initialize(void) m68k_install_interrupt_stack(); } +void _CPU_Fatal_halt( uint32_t source, CPU_Uint32ptr error ) +{ +#if ( defined(__mcoldfire__) ) + __asm__ volatile( "move.w %%sr,%%d0\n\t" + "or.l %2,%%d0\n\t" + "move.w %%d0,%%sr\n\t" + "move.l %1,%%d0\n\t" + "move.l #0xDEADBEEF,%%d1\n\t" + "halt" + : "=g" (error) + : "0" (error), "d"(0x0700) + : "d0", "d1" ); + +#else + __asm__ volatile( "movl %0,%%d0; " + "orw #0x0700,%%sr; " + "stop #0x2700" : "=d" ((error)) : "0" ((error)) ); + +#endif + +/* end of Fatal Error manager macros */ +} + uint32_t _CPU_ISR_Get_level( void ) { uint32_t level; |