Powerpc stack initialization
David POUTY
david.pouty@com2gether.net
Mon Jan 12 14:56:00 GMT 2004
I think there's a bug in stack initialization for PowerPC plateform in
file vectors.S:
- During '_start' a stack frame is created at the stack base for calls
to C code.
- In function 'cyg_hal_default_exception_vsr' 2 stacks frame are created
(a null frame and one for C code) on the stack before calling the
interrupt handler.
If CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK is defined to use
the same stack for interrupt and threads then the stack is corrupted
because there is only one frame free at the stack base.
There's no problem if CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
is not defined because the 2 frames are created on the stack top.
So I propose the following patch:
Index: vectors.S
===================================================================
RCS file:
/cvs/ecos/ecos/packages/hal/powerpc/arch/current/src/vectors.S,v
retrieving revision 1.32
diff -u -r1.32 vectors.S
--- vectors.S 8 Dec 2003 14:26:03 -0000 1.32
+++ vectors.S 12 Jan 2004 14:20:33 -0000
@@ -371,7 +371,10 @@
stw r0,0(sp) # clear back chain
stw r0,8(sp) # zero return pc
stwu sp,-CYGARC_PPC_STACK_FRAME_SIZE(sp) # create new stack
frame
-
+#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
+ stwu sp,-CYGARC_PPC_STACK_FRAME_SIZE(sp) # create new stack
frame
+#endif
+
# Variant HALs may need to do something special before we
continue
bl hal_variant_init
____________________________
David POUTY
More information about the Ecos-patches
mailing list