summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2009-09-18 08:07:23 +0000
committerThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2009-09-18 08:07:23 +0000
commit5e61c80327325e9086b56235a46452d79968c58c (patch)
tree0b002d565eced9e2b905cb0af897111c0cbc18b4 /cpukit
parentRemoved symbols and renamed sections. (diff)
downloadrtems-5e61c80327325e9086b56235a46452d79968c58c.tar.bz2
* 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.
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/score/cpu/arm/ChangeLog6
-rw-r--r--cpukit/score/cpu/arm/arm_exc_handler_low.S24
-rw-r--r--cpukit/score/cpu/arm/cpu_asm.S22
-rw-r--r--cpukit/score/cpu/arm/rtems/asm.h9
-rw-r--r--cpukit/score/cpu/arm/rtems/score/cpu.h5
5 files changed, 23 insertions, 43 deletions
diff --git a/cpukit/score/cpu/arm/ChangeLog b/cpukit/score/cpu/arm/ChangeLog
index 591cb2b4ff..481089a0d5 100644
--- a/cpukit/score/cpu/arm/ChangeLog
+++ b/cpukit/score/cpu/arm/ChangeLog
@@ -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
diff --git a/cpukit/score/cpu/arm/arm_exc_handler_low.S b/cpukit/score/cpu/arm/arm_exc_handler_low.S
index b333ef5d6a..26b75cb435 100644
--- a/cpukit/score/cpu/arm/arm_exc_handler_low.S
+++ b/cpukit/score/cpu/arm/arm_exc_handler_low.S
@@ -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, ... */
diff --git a/cpukit/score/cpu/arm/cpu_asm.S b/cpukit/score/cpu/arm/cpu_asm.S
index 91654fa4bb..2c0ed16e79 100644
--- a/cpukit/score/cpu/arm/cpu_asm.S
+++ b/cpukit/score/cpu/arm/cpu_asm.S
@@ -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
diff --git a/cpukit/score/cpu/arm/rtems/asm.h b/cpukit/score/cpu/arm/rtems/asm.h
index bbb9760156..176ac064ee 100644
--- a/cpukit/score/cpu/arm/rtems/asm.h
+++ b/cpukit/score/cpu/arm/rtems/asm.h
@@ -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 */
diff --git a/cpukit/score/cpu/arm/rtems/score/cpu.h b/cpukit/score/cpu/arm/rtems/score/cpu.h
index 084b41a603..d7eca1527c 100644
--- a/cpukit/score/cpu/arm/rtems/score/cpu.h
+++ b/cpukit/score/cpu/arm/rtems/score/cpu.h
@@ -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) \