summaryrefslogtreecommitdiffstats
path: root/cpukit/score/cpu/arm/armv7m-multitasking-start-stop.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-02-12 16:05:35 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-02-19 09:59:39 +0100
commit514705d2f106375ff54d8a744dabeab97c71144d (patch)
tree9e361d26e18c6fe863e04051978d64241a0ac1a6 /cpukit/score/cpu/arm/armv7m-multitasking-start-stop.c
parentscore: Add SYSTEM_STATE_TERMINATED (diff)
downloadrtems-514705d2f106375ff54d8a744dabeab97c71144d.tar.bz2
score: Delete _Thread_BSP_context
Do not return to BSP context in the exit() shutdown path. This makes it possible to re-use the initialization stack. It can be used for the interrupt stack for example. On targets with a small RAM this is a considerable benefit. This change eliminates also some special cases and simplifies the code. Delete _Thread_Set_global_exit_status(), _Thread_Get_global_exit_status() and _Thread_Stop_multitasking().
Diffstat (limited to 'cpukit/score/cpu/arm/armv7m-multitasking-start-stop.c')
-rw-r--r--cpukit/score/cpu/arm/armv7m-multitasking-start-stop.c36
1 files changed, 5 insertions, 31 deletions
diff --git a/cpukit/score/cpu/arm/armv7m-multitasking-start-stop.c b/cpukit/score/cpu/arm/armv7m-multitasking-start-stop.c
index f3e96e343c..864bb53379 100644
--- a/cpukit/score/cpu/arm/armv7m-multitasking-start-stop.c
+++ b/cpukit/score/cpu/arm/armv7m-multitasking-start-stop.c
@@ -1,14 +1,14 @@
/**
* @file
*
- * @brief ARMV7M Start and Stop Multitasking
+ * @brief ARMV7M Start Multitasking
*/
/*
- * Copyright (c) 2011 Sebastian Huber. All rights reserved.
+ * Copyright (c) 2011-2014 Sebastian Huber. All rights reserved.
*
* embedded brains GmbH
- * Obere Lagerstr. 30
+ * Dornierstr. 4
* 82178 Puchheim
* Germany
* <rtems@embedded-brains.de>
@@ -27,18 +27,14 @@
#ifdef ARM_MULTILIB_ARCH_V7M
void __attribute__((naked)) _ARMV7M_Start_multitasking(
- Context_Control *bsp,
Context_Control *heir
)
{
__asm__ volatile (
- /* Store BSP context */
- "stm r0, {r4-r11, lr}\n"
- "str sp, [r0, %[spctxoff]]\n"
/* Restore heir context */
- "ldr r2, [r1, %[spctxoff]]\n"
+ "ldr r2, [r0, %[spctxoff]]\n"
"msr psp, r2\n"
- "ldm r1, {r4-r11, lr}\n"
+ "ldm r0, {r4-r11, lr}\n"
/* Enable process stack pointer (PSP) */
"mrs r2, control\n"
"orr r2, #0x2\n"
@@ -50,26 +46,4 @@ void __attribute__((naked)) _ARMV7M_Start_multitasking(
);
}
-void __attribute__((naked)) _ARMV7M_Stop_multitasking( Context_Control *bsp )
-{
- __asm__ volatile (
- /* Disable interrupts */
- "mov r2, #0x80\n"
- "msr basepri_max, r2\n"
- /* Restore BSP context */
- "ldr r2, [r0, %[spctxoff]]\n"
- "msr msp, r2\n"
- "ldm r0, {r4-r11, lr}\n"
- /* Disable process stack pointer (PSP) */
- "mrs r2, control\n"
- "bic r2, #0x2\n"
- "msr control, r2\n"
- /* Return to BSP */
- "bx lr\n"
- :
- : [spctxoff] "J" (offsetof(Context_Control, register_sp))
- );
- __builtin_unreachable();
-}
-
#endif /* ARM_MULTILIB_ARCH_V7M */