From be76b10be6a01881259c2eaeeb2d375b9c72e216 Mon Sep 17 00:00:00 2001 From: aozima Date: Thu, 4 Jun 2015 11:59:18 +0800 Subject: [PATCH 1/2] Align stack address to 8 byte. --- libcpu/arm/arm926/start_gcc.S | 12 +++++++----- libcpu/arm/arm926/start_iar.S | 12 +++++++----- libcpu/arm/arm926/start_rvds.S | 13 +++++++------ 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/libcpu/arm/arm926/start_gcc.S b/libcpu/arm/arm926/start_gcc.S index aeeb37616b..4924583cb8 100644 --- a/libcpu/arm/arm926/start_gcc.S +++ b/libcpu/arm/arm926/start_gcc.S @@ -22,6 +22,7 @@ * 2011-01-13 weety first version * 2015-04-15 ArdaFu Split from AT91SAM9260 BSP * 2015-04-21 ArdaFu Remove remap code. Using mmu to map vector table + * 2015-06-04 aozima Align stack address to 8 byte. */ #define S_FRAME_SIZE (18*4) //72 @@ -61,31 +62,32 @@ .section .nobss, "w" .space UND_STK_SIZE + .align 3 .global UND_STACK_START UND_STACK_START: .space ABT_STK_SIZE - .align 2 + .align 3 .global ABT_STACK_START ABT_STACK_START: .space FIQ_STK_SIZE - .align 2 + .align 3 .global FIQ_STACK_START FIQ_STACK_START: .space IRQ_STK_SIZE - .align 2 + .align 3 .global IRQ_STACK_START IRQ_STACK_START: .skip SYS_STK_SIZE - .align 2 + .align 3 .global SYS_STACK_START SYS_STACK_START: .space SVC_STK_SIZE - .align 2 + .align 3 .global SVC_STACK_START SVC_STACK_START: diff --git a/libcpu/arm/arm926/start_iar.S b/libcpu/arm/arm926/start_iar.S index 4e689236a5..3494b108d7 100644 --- a/libcpu/arm/arm926/start_iar.S +++ b/libcpu/arm/arm926/start_iar.S @@ -22,6 +22,7 @@ ; * 2011-01-13 weety first version ; * 2015-04-15 ArdaFu Split from AT91SAM9260 BSP ; * 2015-04-21 ArdaFu Remove remap code. Using mmu to map vector table +; * 2015-06-04 aozima Align stack address to 8 byte. ; */ #define S_FRAME_SIZE (18*4) ;72 @@ -62,31 +63,32 @@ SECTION .noinit:DATA:NOROOT(3) DATA + ALIGNRAM 3 DS8 UND_STK_SIZE PUBLIC UND_STACK_START UND_STACK_START: - ALIGNRAM 2 + ALIGNRAM 3 DS8 ABT_STK_SIZE PUBLIC ABT_STACK_START ABT_STACK_START: - ALIGNRAM 2 + ALIGNRAM 3 DS8 FIQ_STK_SIZE PUBLIC FIQ_STACK_START FIQ_STACK_START: - ALIGNRAM 2 + ALIGNRAM 3 DS8 IRQ_STK_SIZE PUBLIC IRQ_STACK_START IRQ_STACK_START: - ALIGNRAM 2 + ALIGNRAM 3 DS8 SYS_STK_SIZE PUBLIC SYS_STACK_START SYS_STACK_START: - ALIGNRAM 2 + ALIGNRAM 3 DS8 SVC_STK_SIZE PUBLIC SVC_STACK_START SVC_STACK_START: diff --git a/libcpu/arm/arm926/start_rvds.S b/libcpu/arm/arm926/start_rvds.S index e086e394f1..68fd887d66 100644 --- a/libcpu/arm/arm926/start_rvds.S +++ b/libcpu/arm/arm926/start_rvds.S @@ -22,6 +22,7 @@ ; * 2011-08-14 weety first version ; * 2015-04-15 ArdaFu Split from AT91SAM9260 BSP ; * 2015-04-21 ArdaFu Remove remap code. Using mmu to map vector table +; * 2015-06-04 aozima Align stack address to 8 byte. ; */ S_FRAME_SIZE EQU (18*4) ;72 @@ -60,34 +61,34 @@ NOINT EQU 0xC0 GET rt_low_level_keil.inc ;----------------------- Stack and Heap Definitions ---------------------------- - AREA STACK, NOINIT, READWRITE, ALIGN=2 + AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE UND_STK_SIZE EXPORT UND_STACK_START UND_STACK_START - ALIGN 4 + ALIGN 8 SPACE ABT_STK_SIZE EXPORT ABT_STACK_START ABT_STACK_START - ALIGN 4 + ALIGN 8 SPACE FIQ_STK_SIZE EXPORT FIQ_STACK_START FIQ_STACK_START - ALIGN 4 + ALIGN 8 SPACE IRQ_STK_SIZE EXPORT IRQ_STACK_START IRQ_STACK_START - ALIGN 4 + ALIGN 8 SPACE SYS_STK_SIZE EXPORT SYS_STACK_START SYS_STACK_START - ALIGN 4 + ALIGN 8 SPACE SVC_STK_SIZE EXPORT SVC_STACK_START SVC_STACK_START From 314379cc776756283d6e62259f59bfe91b1e8870 Mon Sep 17 00:00:00 2001 From: aozima Date: Thu, 4 Jun 2015 12:23:24 +0800 Subject: [PATCH 2/2] implement __user_initial_stackheap --- libcpu/arm/arm926/start_rvds.S | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/libcpu/arm/arm926/start_rvds.S b/libcpu/arm/arm926/start_rvds.S index 68fd887d66..1c1e48c07e 100644 --- a/libcpu/arm/arm926/start_rvds.S +++ b/libcpu/arm/arm926/start_rvds.S @@ -93,6 +93,12 @@ SYS_STACK_START EXPORT SVC_STACK_START SVC_STACK_START Stack_Top +__initial_sp + +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + PRESERVE8 ;--------------Jump vector table------------------------------------------------ EXPORT Entry_Point @@ -292,4 +298,31 @@ rt_hw_context_switch_interrupt_do PROC LDMFD SP!, {R0-R12,LR,PC}^ ; pop new task's R0-R12,LR & PC SPSR to CPSR ENDP + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem ; heap base + LDR R1, = SVC_STACK_START ; stack base (top-address) + LDR R2, = (Heap_Mem + Heap_Size) ; heap limit + LDR R3, = (SVC_STACK_START - SVC_STK_SIZE) ; stack limit (low-address) + BX LR + + ALIGN + + ENDIF + END