summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/target/arm/as3525/app.lds41
-rw-r--r--firmware/target/arm/crt0.S32
2 files changed, 56 insertions, 17 deletions
diff --git a/firmware/target/arm/as3525/app.lds b/firmware/target/arm/as3525/app.lds
index 08b119eb3f..c2d3ed83ee 100644
--- a/firmware/target/arm/as3525/app.lds
+++ b/firmware/target/arm/as3525/app.lds
@@ -38,20 +38,11 @@ SECTIONS
38{ 38{
39 loadaddress = 0x30000000; 39 loadaddress = 0x30000000;
40 40
41 .vectors DRAMORIG :
42 {
43 _vectorstart = .;
44 *(.vectors*);
45 *(.init.text)
46 . = ALIGN(0x4);
47 } > DRAM
48
49 .text : 41 .text :
50 { 42 {
51 _textstart = .; 43 _textstart = .;
52 *(.text) 44 *(.text)
53 *(.text*) 45 *(.text*)
54 *(.icode)
55 *(.glue_7) 46 *(.glue_7)
56 *(.glue_7t) 47 *(.glue_7t)
57 . = ALIGN(0x4); 48 . = ALIGN(0x4);
@@ -63,14 +54,12 @@ SECTIONS
63 *(.rodata*) 54 *(.rodata*)
64 *(.rodata.str1.1) 55 *(.rodata.str1.1)
65 *(.rodata.str1.4) 56 *(.rodata.str1.4)
66 *(.irodata*)
67 . = ALIGN(0x4); 57 . = ALIGN(0x4);
68 } > DRAM 58 } > DRAM
69 59
70 .data : 60 .data :
71 { 61 {
72 *(.data*) 62 *(.data*)
73 *(.idata*)
74 . = ALIGN(0x4); 63 . = ALIGN(0x4);
75 } > DRAM 64 } > DRAM
76 65
@@ -93,12 +82,40 @@ SECTIONS
93 { 82 {
94 _edata = .; 83 _edata = .;
95 *(.bss*) 84 *(.bss*)
96 *(.ibss*)
97 *(COMMON) 85 *(COMMON)
98 . = ALIGN(0x4); 86 . = ALIGN(0x4);
99 _end = .; 87 _end = .;
100 } > DRAM 88 } > DRAM
101 89
90 .vectors IRAMORIG:
91 {
92 _vectors_start = .;
93 *(.init.text)
94 } > IRAM AT > DRAM
95
96 _vectorscopy = LOADADDR(.vectors);
97
98 .ibss (NOLOAD) :
99 {
100 _iedata = .;
101 *(.qharray)
102 *(.ibss)
103 . = ALIGN(0x4);
104 _iend = .;
105 } > IRAM
106
107 .iram _iend :
108 {
109 _iramstart = .;
110 *(.icode)
111 *(.irodata)
112 *(.idata)
113 . = ALIGN(0x4);
114 _iramend = .;
115 } > IRAM AT> DRAM
116
117 _iramcopy = LOADADDR(.iram);
118
102 .audiobuf (NOLOAD) : 119 .audiobuf (NOLOAD) :
103 { 120 {
104 . = ALIGN(4); 121 . = ALIGN(4);
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