* rtems/score/cpu.h: Fix for inline asm in _CPU_Fatal_halt().

* rtems/asm.h: Added macro to define ARM functions.
	* cpu_asm.S, arm_exc_handler_low.S: Use macro from above.
This commit is contained in:
Thomas Doerfler
2009-09-18 08:07:23 +00:00
parent 091705c07f
commit 5e61c80327
5 changed files with 23 additions and 43 deletions

View File

@@ -1,3 +1,9 @@
2009-09-15 Sebastian Huber <sebastian.huber@embedded-brains.de>
* rtems/score/cpu.h: Fix for inline asm in _CPU_Fatal_halt().
* rtems/asm.h: Added macro to define ARM functions.
* cpu_asm.S, arm_exc_handler_low.S: Use macro from above.
2009-08-19 Joel Sherrill <joel.sherrill@OARcorp.com>
* rtems/score/cpu.h: Mark _CPU_Context_restore() as noreturn so the

View File

@@ -27,28 +27,10 @@
#include <rtems/asm.h>
#include <rtems/score/cpu_asm.h>
/*
* function declaration macro (start body in ARM mode)
*/
#ifdef __thumb__
#define FUNC_START_ARM(_name_) \
.code 16 ;\
.thumb_func ;\
.globl _name_ ;\
_name_: ;\
bx pc ;\
.code 32 ;\
_name_ ## _ARM:
#else
#define FUNC_START_ARM(_name_) \
.globl _name_; \
_name_:
#endif
.text
/* FIXME: _Exception_Handler_Undef_Swi is untested */
FUNC_START_ARM(_Exception_Handler_Undef_Swi)
DEFINE_FUNCTION_ARM(_Exception_Handler_Undef_Swi)
/* FIXME: This should use load and store multiple instructions */
sub r13,r13,#SIZE_REGS
str r4, [r13, #REG_R4]
@@ -84,7 +66,7 @@ _go_back_1:
movs pc,r14 /* return */
/* FIXME: _Exception_Handler_Abort is untested */
FUNC_START_ARM(_Exception_Handler_Abort)
DEFINE_FUNCTION_ARM(_Exception_Handler_Abort)
/* FIXME: This should use load and store multiple instructions */
sub r13,r13,#SIZE_REGS
str r4, [r13, #REG_R4]
@@ -127,7 +109,7 @@ _go_back_2:
#define ABORT_REGS_OFFS 32-REG_R4
#define ABORT_SIZE_REGS SIZE_REGS+ABORT_REGS_OFFS
FUNC_START_ARM(_exc_data_abort)
DEFINE_FUNCTION_ARM(_exc_data_abort)
sub sp, sp, #ABORT_SIZE_REGS /* reserve register frame */
stmia sp, {r0-r11}
add sp, sp, #ABORT_REGS_OFFS /* the Context_Control structure starts by CPSR, R4, ... */

View File

@@ -22,24 +22,6 @@
#include <rtems/asm.h>
#include <rtems/score/cpu_asm.h>
/*
* function declaration macro (start body in ARM mode)
*/
#ifdef __thumb__
#define FUNC_START_ARM(_name_) \
.code 16 ;\
.thumb_func ;\
.globl _name_ ;\
_name_: ;\
bx pc ;\
.code 32 ;\
_name_ ## _ARM:
#else
#define FUNC_START_ARM(_name_) \
.globl _name_; \
_name_:
#endif
.text
/*
@@ -58,7 +40,7 @@ _name_:
*
*/
FUNC_START_ARM(_CPU_Context_switch)
DEFINE_FUNCTION_ARM(_CPU_Context_switch)
/* Start saving context */
mrs r2, cpsr
stmia r0, {r2, r4, r5, r6, r7, r8, r9, r10, r11, r13, r14}
@@ -81,6 +63,6 @@ _restore:
* It must match _CPU_Context_switch()
*
*/
FUNC_START_ARM(_CPU_Context_restore)
DEFINE_FUNCTION_ARM(_CPU_Context_restore)
mov r1, r0
b _restore

View File

@@ -132,4 +132,13 @@
#define PUBLIC(sym) .globl SYM (sym)
#define EXTERN(sym) .globl SYM (sym)
#ifdef __thumb__
#define DEFINE_FUNCTION_ARM(name) \
.thumb_func ; .globl name ; name: ; bx pc ; \
.arm ; .globl name ## _arm ; name ## _arm:
#else
#define DEFINE_FUNCTION_ARM(name) \
.globl name ; name: ; .globl name ## _arm ; name ## _arm:
#endif
#endif /* _RTEMS_ASM_H */

View File

@@ -336,9 +336,10 @@ void _CPU_Context_Initialize(
*(*(_destination)) = _CPU_Null_fp_context; \
} while (0)
#define _CPU_Fatal_halt( _error ) \
#define _CPU_Fatal_halt( _err ) \
do { \
int _level; \
uint32_t _level; \
uint32_t _error = _err; \
_CPU_ISR_Disable( _level ); \
asm volatile ("mov r0, %0\n" \
: "=r" (_error) \