Browse Source

Align thread stack to 8 byte.

aozima 10 years ago
parent
commit
9fe3cbf76f
1 changed files with 18 additions and 14 deletions
  1. 18 14
      libcpu/arm/arm926/stack.c

+ 18 - 14
libcpu/arm/arm926/stack.c

@@ -50,21 +50,25 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
 {
     rt_uint32_t *stk;
 
-    stk      = (rt_uint32_t*)stack_addr;
-    *(stk)   = (rt_uint32_t)tentry;         /* entry point */
+    //stk      = (rt_uint32_t*)stack_addr;
+    stack_addr += sizeof(rt_uint32_t);
+    stack_addr  = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
+    stk  = (rt_uint32_t *)stack_addr;
+
+    *(--stk) = (rt_uint32_t)tentry;         /* entry point */
     *(--stk) = (rt_uint32_t)texit;          /* lr */
-    *(--stk) = 0;                           /* r12 */
-    *(--stk) = 0;                           /* r11 */
-    *(--stk) = 0;                           /* r10 */
-    *(--stk) = 0;                           /* r9 */
-    *(--stk) = 0;                           /* r8 */
-    *(--stk) = 0;                           /* r7 */
-    *(--stk) = 0;                           /* r6 */
-    *(--stk) = 0;                           /* r5 */
-    *(--stk) = 0;                           /* r4 */
-    *(--stk) = 0;                           /* r3 */
-    *(--stk) = 0;                           /* r2 */
-    *(--stk) = 0;                           /* r1 */
+    *(--stk) = 0xdeadbeef;                  /* r12 */
+    *(--stk) = 0xdeadbeef;                  /* r11 */
+    *(--stk) = 0xdeadbeef;                  /* r10 */
+    *(--stk) = 0xdeadbeef;                  /* r9 */
+    *(--stk) = 0xdeadbeef;                  /* r8 */
+    *(--stk) = 0xdeadbeef;                  /* r7 */
+    *(--stk) = 0xdeadbeef;                  /* r6 */
+    *(--stk) = 0xdeadbeef;                  /* r5 */
+    *(--stk) = 0xdeadbeef;                  /* r4 */
+    *(--stk) = 0xdeadbeef;                  /* r3 */
+    *(--stk) = 0xdeadbeef;                  /* r2 */
+    *(--stk) = 0xdeadbeef;                  /* r1 */
     *(--stk) = (rt_uint32_t)parameter;      /* r0 : argument */
 	/* cpsr */
 	if ((rt_uint32_t)tentry & 0x01)