summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2015-06-04 17:24:21 +0800
committerBernard Xiong <[email protected]>2015-06-04 17:24:21 +0800
commitebe21c47602a4e070794e1f7d6641108db4b4073 (patch)
tree0f1f96b19f68d185f4d25b674acc2b67bb457987
parent0ac07f9ffb76320f54f82bf14c1c71c28c3c9150 (diff)
parent314379cc776756283d6e62259f59bfe91b1e8870 (diff)
Merge pull request #493 from aozima/pulls
update libcpu:arm926
-rw-r--r--libcpu/arm/arm926/start_gcc.S12
-rw-r--r--libcpu/arm/arm926/start_iar.S12
-rw-r--r--libcpu/arm/arm926/start_rvds.S46
3 files changed, 54 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..1c1e48c07e 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,38 +61,44 @@ 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
Stack_Top
+__initial_sp
+
+__heap_base
+Heap_Mem SPACE Heap_Size
+__heap_limit
+
PRESERVE8
;--------------Jump vector table------------------------------------------------
EXPORT Entry_Point
@@ -291,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