score: Fix ARM and PowerPC context initialization

Update #2751.
This commit is contained in:
Sebastian Huber
2016-12-02 13:10:31 +01:00
parent 7da78cf637
commit f65dcc712a
3 changed files with 6 additions and 0 deletions

View File

@@ -118,6 +118,7 @@ void _CPU_Context_Initialize(
the_ppc_context->gpr1 = sp; the_ppc_context->gpr1 = sp;
the_ppc_context->msr = msr_value; the_ppc_context->msr = msr_value;
the_ppc_context->lr = (uint32_t) entry_point; the_ppc_context->lr = (uint32_t) entry_point;
the_ppc_context->isr_dispatch_disable = 0;
#if defined(__ALTIVEC__) && !defined(PPC_MULTILIB_ALTIVEC) #if defined(__ALTIVEC__) && !defined(PPC_MULTILIB_ALTIVEC)
_CPU_Context_initialize_altivec( the_ppc_context ); _CPU_Context_initialize_altivec( the_ppc_context );

View File

@@ -109,6 +109,7 @@ void _CPU_Context_Initialize(
the_context->register_lr = (uint32_t) entry_point; the_context->register_lr = (uint32_t) entry_point;
the_context->register_cpsr = ( ( new_level != 0 ) ? ARM_PSR_I : 0 ) the_context->register_cpsr = ( ( new_level != 0 ) ? ARM_PSR_I : 0 )
| arm_cpu_mode; | arm_cpu_mode;
the_context->isr_dispatch_disable = 0;
#ifdef ARM_MULTILIB_HAS_THREAD_ID_REGISTER #ifdef ARM_MULTILIB_HAS_THREAD_ID_REGISTER
the_context->thread_id = (uint32_t) tls_area; the_context->thread_id = (uint32_t) tls_area;

View File

@@ -872,6 +872,10 @@ uint32_t _CPU_ISR_Get_level( void );
* in the context. The state of the "general data" registers is * in the context. The state of the "general data" registers is
* undefined at task start time. * undefined at task start time.
* *
* The ISR dispatch disable field of the context must be cleared to zero if it
* is used by the CPU port. Otherwise, a thread restart results in
* unpredictable behaviour.
*
* @param[in] _the_context is the context structure to be initialized * @param[in] _the_context is the context structure to be initialized
* @param[in] _stack_base is the lowest physical address of this task's stack * @param[in] _stack_base is the lowest physical address of this task's stack
* @param[in] _size is the size of this task's stack * @param[in] _size is the size of this task's stack