[rtems commit] powerpc: Fix TLS support
Sebastian Huber
sebh at rtems.org
Tue Jun 20 08:41:58 UTC 2017
Module: rtems
Branch: master
Commit: ae3e6af82aa07caa9584ac5f8078a721746efda5
Changeset: http://git.rtems.org/rtems/commit/?id=ae3e6af82aa07caa9584ac5f8078a721746efda5
Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
Date: Tue Jun 20 10:39:54 2017 +0200
powerpc: Fix TLS support
Do not zero the GPR2 in the thread context via dcbz instructions. Bug
was introduced by 32b4a0c42704f0076da8e2d5411290f55d1b2965.
---
cpukit/score/cpu/powerpc/rtems/score/cpu.h | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/cpukit/score/cpu/powerpc/rtems/score/cpu.h b/cpukit/score/cpu/powerpc/rtems/score/cpu.h
index f9a43b1..53b4bd2 100644
--- a/cpukit/score/cpu/powerpc/rtems/score/cpu.h
+++ b/cpukit/score/cpu/powerpc/rtems/score/cpu.h
@@ -222,8 +222,8 @@ typedef struct {
PPC_GPR_TYPE gpr29;
PPC_GPR_TYPE gpr30;
PPC_GPR_TYPE gpr31;
- uint32_t gpr2;
uint32_t isr_dispatch_disable;
+ uint32_t reserved_for_alignment;
#if defined(PPC_MULTILIB_ALTIVEC)
uint8_t v20[16];
uint8_t v21[16];
@@ -270,12 +270,13 @@ typedef struct {
double f30;
double f31;
#endif
+ /*
+ * The following items are at the structure end, so that we can use dcbz for
+ * the previous items to optimize the context switch. We must not set the
+ * following items to zero via the dcbz.
+ */
+ uint32_t gpr2;
#if defined(RTEMS_SMP)
- /*
- * This item is at the structure end, so that we can use dcbz for the
- * previous items to optimize the context switch. We must not set this
- * item to zero via the dcbz.
- */
volatile uint32_t is_executing;
#endif
} ppc_context;
@@ -347,9 +348,7 @@ static inline ppc_context *ppc_get_context( const Context_Control *context )
#define PPC_CONTEXT_OFFSET_GPR29 PPC_CONTEXT_GPR_OFFSET( 29 )
#define PPC_CONTEXT_OFFSET_GPR30 PPC_CONTEXT_GPR_OFFSET( 30 )
#define PPC_CONTEXT_OFFSET_GPR31 PPC_CONTEXT_GPR_OFFSET( 31 )
-#define PPC_CONTEXT_OFFSET_GPR2 PPC_CONTEXT_GPR_OFFSET( 32 )
-#define PPC_CONTEXT_OFFSET_ISR_DISPATCH_DISABLE \
- ( PPC_CONTEXT_GPR_OFFSET( 32 ) + 4 )
+#define PPC_CONTEXT_OFFSET_ISR_DISPATCH_DISABLE PPC_CONTEXT_GPR_OFFSET( 32 )
#ifdef PPC_MULTILIB_ALTIVEC
#define PPC_CONTEXT_OFFSET_V( v ) \
@@ -403,8 +402,10 @@ static inline ppc_context *ppc_get_context( const Context_Control *context )
#define PPC_CONTEXT_VOLATILE_SIZE (PPC_CONTEXT_GPR_OFFSET( 32 ) + 8)
#endif
+#define PPC_CONTEXT_OFFSET_GPR2 PPC_CONTEXT_VOLATILE_SIZE
+
#ifdef RTEMS_SMP
- #define PPC_CONTEXT_OFFSET_IS_EXECUTING PPC_CONTEXT_VOLATILE_SIZE
+ #define PPC_CONTEXT_OFFSET_IS_EXECUTING (PPC_CONTEXT_VOLATILE_SIZE + 4)
#endif
#ifndef ASM
More information about the vc
mailing list