forked from Imagelibrary/rtems
@@ -55,8 +55,8 @@ void _CPU_Initialize(void)
|
|||||||
*/
|
*/
|
||||||
void _CPU_Context_Initialize(
|
void _CPU_Context_Initialize(
|
||||||
Context_Control *the_context,
|
Context_Control *the_context,
|
||||||
uint32_t *stack_base,
|
void *stack_base,
|
||||||
uint32_t size,
|
size_t size,
|
||||||
uint32_t new_level,
|
uint32_t new_level,
|
||||||
void *entry_point,
|
void *entry_point,
|
||||||
bool is_fp,
|
bool is_fp,
|
||||||
@@ -65,13 +65,15 @@ void _CPU_Context_Initialize(
|
|||||||
{
|
{
|
||||||
ppc_context *the_ppc_context;
|
ppc_context *the_ppc_context;
|
||||||
uint32_t msr_value;
|
uint32_t msr_value;
|
||||||
uint32_t sp;
|
uintptr_t sp;
|
||||||
|
uintptr_t stack_alignment;
|
||||||
|
|
||||||
sp = (uint32_t)stack_base + size - PPC_MINIMUM_STACK_FRAME_SIZE;
|
sp = (uintptr_t) stack_base + size - PPC_MINIMUM_STACK_FRAME_SIZE;
|
||||||
|
|
||||||
sp &= ~(CPU_STACK_ALIGNMENT-1);
|
stack_alignment = CPU_STACK_ALIGNMENT;
|
||||||
|
sp &= ~(stack_alignment - 1);
|
||||||
|
|
||||||
*((uint32_t*)sp) = 0;
|
sp = (uintptr_t) memset((void *) sp, 0, PPC_MINIMUM_STACK_FRAME_SIZE);
|
||||||
|
|
||||||
_CPU_MSR_GET( msr_value );
|
_CPU_MSR_GET( msr_value );
|
||||||
|
|
||||||
@@ -117,7 +119,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 = (uintptr_t) entry_point;
|
||||||
the_ppc_context->isr_dispatch_disable = 0;
|
the_ppc_context->isr_dispatch_disable = 0;
|
||||||
|
|
||||||
#if defined(__ALTIVEC__) && !defined(PPC_MULTILIB_ALTIVEC)
|
#if defined(__ALTIVEC__) && !defined(PPC_MULTILIB_ALTIVEC)
|
||||||
|
|||||||
@@ -631,7 +631,11 @@ extern "C" {
|
|||||||
|
|
||||||
#define PPC_MSR_DISABLE_MASK (PPC_MSR_ME|PPC_MSR_EE|PPC_MSR_CE)
|
#define PPC_MSR_DISABLE_MASK (PPC_MSR_ME|PPC_MSR_EE|PPC_MSR_CE)
|
||||||
|
|
||||||
|
#if defined(__powerpc64__)
|
||||||
|
#define PPC_MINIMUM_STACK_FRAME_SIZE 32
|
||||||
|
#else
|
||||||
#define PPC_MINIMUM_STACK_FRAME_SIZE PPC_STACK_ALIGNMENT
|
#define PPC_MINIMUM_STACK_FRAME_SIZE PPC_STACK_ALIGNMENT
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -818,8 +818,8 @@ static inline CPU_Counter_ticks _CPU_Counter_difference(
|
|||||||
|
|
||||||
void _CPU_Context_Initialize(
|
void _CPU_Context_Initialize(
|
||||||
Context_Control *the_context,
|
Context_Control *the_context,
|
||||||
uint32_t *stack_base,
|
void *stack_base,
|
||||||
uint32_t size,
|
size_t size,
|
||||||
uint32_t new_level,
|
uint32_t new_level,
|
||||||
void *entry_point,
|
void *entry_point,
|
||||||
bool is_fp,
|
bool is_fp,
|
||||||
|
|||||||
Reference in New Issue
Block a user