From 01eb84ca136d223f8c291ba4d969938cf6468e70 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Fri, 1 Nov 2013 16:06:43 -0600 Subject: Fixing typos from previous check-ins. Also, missed the ARMv7 IDLE stack coloration --- nuttx/arch/arm/src/arm/up_nommuhead.S | 73 ++++++++++++++++++++++++---------- nuttx/arch/arm/src/stm32/stm32_start.c | 2 +- 2 files changed, 52 insertions(+), 23 deletions(-) diff --git a/nuttx/arch/arm/src/arm/up_nommuhead.S b/nuttx/arch/arm/src/arm/up_nommuhead.S index e3f5a94e6..618b4e9d9 100644 --- a/nuttx/arch/arm/src/arm/up_nommuhead.S +++ b/nuttx/arch/arm/src/arm/up_nommuhead.S @@ -74,22 +74,22 @@ __start: /* First, setup initial processor mode */ - mov r0, #(SVC_MODE | PSR_I_BIT | PSR_F_BIT ) - msr cpsr, r0 + mov r0, #(SVC_MODE | PSR_I_BIT | PSR_F_BIT ) + msr cpsr, r0 showprogress 'A' /* Setup system stack (and get the BSS range) */ - adr r0, LC0 - ldmia r0, {r4, r5, sp} + adr r0, .Lbssinit + ldmia r0, {r4, r5, sp} /* Clear system BSS section */ - mov r0, #0 -1: cmp r4, r5 + mov r0, #0 +1: cmp r4, r5 strcc r0, [r4], #4 - bcc 1b + bcc 1b showprogress 'B' @@ -97,38 +97,57 @@ __start: #ifdef CONFIG_BOOT_RUNFROMFLASH - adr r3, LC2 + adr r3, .Ldatainit ldmia r3, {r0, r1, r2} 1: ldmia r0!, {r3 - r10} stmia r1!, {r3 - r10} - cmp r1, r2 - blt 1b + cmp r1, r2 + blt 1b #endif /* Perform early serial initialization */ - mov fp, #0 + mov fp, #0 + #ifdef USE_EARLYSERIALINIT - bl up_earlyserialinit + bl up_earlyserialinit #endif #ifdef CONFIG_DEBUG - mov r0, #'C' - bl up_putc - mov r0, #'\n' - bl up_putc + mov r0, #'C' + bl up_putc + mov r0, #'\n' + bl up_putc #endif + /* Initialize onboard LEDs */ #ifdef CONFIG_ARCH_LEDS - bl up_ledinit + bl up_ledinit #endif - /* Then jump to OS entry */ +#ifdef CONFIG_DEBUG_STACK + /* Write a known value to the IDLE thread stack to support stack + * monitoring logic + */ + + adr r3, .Lstkinit + ldmia r3, {r0, r1, r2} /* R0 = start of IDLE stack; R1 = Size of tack; R2 = coloration */ + +2: /* Top of the loop */ + sub r1, r1, #1 /* R1 = Number of words remaining */ + cmp r1, #0 /* Check (nwords == 0) */ + str r2, [r0], #4 /* Save stack color word, increment stack address */ + bne 2b /* Bottom of the loop */ - b os_start +#endif + + /* Finally branch to the OS entry point */ + + mov lr, #0 /* LR = return address (none) */ + b os_start /* Branch to os_start */ /* Variables: * _sbss is the start of the BSS region (see ld.script) @@ -139,15 +158,26 @@ __start: * below. */ -LC0: .long _sbss +.Lbssinit: + .long _sbss .long _ebss .long _ebss+CONFIG_IDLETHREAD_STACKSIZE-4 #ifdef CONFIG_BOOT_RUNFROMFLASH -LC2: .long _eronly /* Where .data defaults are stored in FLASH */ +.Ldatainit: + .long _eronly /* Where .data defaults are stored in FLASH */ .long _sdata /* Where .data needs to reside in SDRAM */ .long _edata #endif + +#ifdef CONFIG_DEBUG_STACK + .type .Lstkinit, %object +.Lstkinit: + .long _ebss /* Beginning of the IDLE stack, then words of IDLE stack */ + .long (CONFIG_IDLETHREAD_STACKSIZE >> 2) + .long STACK_COLOR /* Stack coloration word */ + .size .Lstkinit, . -.Lstkinit +#endif .size __start, .-__start /* This global variable is unsigned long g_idle_topstack and is @@ -164,4 +194,3 @@ g_idle_topstack: .size g_idle_topstack, .-g_idle_topstack .end - diff --git a/nuttx/arch/arm/src/stm32/stm32_start.c b/nuttx/arch/arm/src/stm32/stm32_start.c index 418421e31..95c1b0145 100644 --- a/nuttx/arch/arm/src/stm32/stm32_start.c +++ b/nuttx/arch/arm/src/stm32/stm32_start.c @@ -298,7 +298,7 @@ void __start(void) #ifdef CONFIG_DEBUG_STACK /* Set the IDLE stack to the coloration value and jump into os_start() */ - go_os_start((FAR void *)&_ebss, CONFIG_ARCH_INTERRUPTSTACK); + go_os_start((FAR void *)&_ebss, CONFIG_IDLETHREAD_STACKSIZE); #else /* Call os_start() */ -- cgit v1.2.3