Browse Source

Merge pull request #2489 from jesven/fix_qemu_none_align

fix the problem of double in sprintf
Bernard Xiong 6 years ago
parent
commit
0b3c99d650
1 changed files with 29 additions and 27 deletions
  1. 29 27
      bsp/qemu-vexpress-a9/cpu/stack.c

+ 29 - 27
bsp/qemu-vexpress-a9/cpu/stack.c

@@ -31,39 +31,41 @@
  * @return stack address
  */
 rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
-	rt_uint8_t *stack_addr, void *texit)
+        rt_uint8_t *stack_addr, void *texit)
 {
-	rt_uint32_t *stk;
+    rt_uint32_t *stk;
 
-	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) = (rt_uint32_t)parameter;		/* r0 : argument */
-	/* cpsr */
-	if ((rt_uint32_t)tentry & 0x01)
-		*(--stk) = SVCMODE | 0x20;			/* thumb mode */
-	else
-		*(--stk) = SVCMODE;					/* arm mode   */
+    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) = (rt_uint32_t)parameter;		/* r0 : argument */
+    /* cpsr */
+    if ((rt_uint32_t)tentry & 0x01)
+        *(--stk) = SVCMODE | 0x20;			/* thumb mode */
+    else
+        *(--stk) = SVCMODE;					/* arm mode   */
 
 #ifdef RT_USING_LWP
-	*(--stk) = 0;		/* user lr */
-	*(--stk) = 0;		/* user sp*/
+    *(--stk) = 0;		/* user lr */
+    *(--stk) = 0;		/* user sp*/
 #endif
 
-	/* return task's current stack address */
-	return (rt_uint8_t *)stk;
+    /* return task's current stack address */
+    return (rt_uint8_t *)stk;
 }
 
 /*@}*/