summaryrefslogtreecommitdiff
path: root/firmware/target/arm/crt0.S
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/crt0.S')
-rw-r--r--firmware/target/arm/crt0.S32
1 files changed, 27 insertions, 5 deletions
diff --git a/firmware/target/arm/crt0.S b/firmware/target/arm/crt0.S
index 829004193f..35d0aecccb 100644
--- a/firmware/target/arm/crt0.S
+++ b/firmware/target/arm/crt0.S
@@ -50,22 +50,43 @@ start:
50.word irq_handler 50.word irq_handler
51.word fiq_handler 51.word fiq_handler
52 52
53vectors_end: 53_vectorsend:
54 54
55 .text 55 .text
56 56
57newstart: 57newstart:
58 msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */ 58 msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */
59 59
60#if CONFIG_CPU==AS3525 && !defined(BOOTLOADER) /* relocate vectors */ 60#if CONFIG_CPU==AS3525 && !defined(BOOTLOADER)
61
62 /* relocate vectors */
61 mov r1, #0 @ destination 63 mov r1, #0 @ destination
62 ldr r2, =start @ source 64 ldr r2, =_vectorscopy @ source
63 ldr r3, =vectors_end @ end 65 ldr r3, =_vectorsend @ end
64 66
651: ldr r0, [r2], #4 671: ldr r0, [r2], #4
66 str r0, [r1], #4 68 str r0, [r1], #4
67 cmp r3, r2 69 cmp r1, r3
68 bne 1b 70 bne 1b
71
72 /* Zero out IBSS */
73 ldr r2, =_iedata
74 ldr r3, =_iend
75 mov r4, #0
761:
77 cmp r3, r2
78 strhi r4, [r2], #4
79 bhi 1b
80
81 /* Copy the IRAM */
82 ldr r2, =_iramcopy
83 ldr r3, =_iramstart
84 ldr r4, =_iramend
851:
86 cmp r4, r3
87 ldrhi r5, [r2], #4
88 strhi r5, [r3], #4
89 bhi 1b
69#endif 90#endif
70 91
71 /* Initialise bss section to zero */ 92 /* Initialise bss section to zero */
@@ -102,6 +123,7 @@ newstart:
102 123
103 /* Switch back to supervisor mode */ 124 /* Switch back to supervisor mode */
104 msr cpsr_c, #0xd3 125 msr cpsr_c, #0xd3
126
105 bl main 127 bl main
106 128
107 129