summaryrefslogtreecommitdiff
path: root/firmware/target/sh/crt0.S
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2009-02-20 02:33:40 +0000
committerMichael Sevakis <jethead71@rockbox.org>2009-02-20 02:33:40 +0000
commitec67912b638e0fae3cae7b4182d23db6d36c5135 (patch)
tree8101f45d02947a828d20174a45d1a6d19fafa3b2 /firmware/target/sh/crt0.S
parent07ae1e4fb9a1fd9d6ce9c48c5300b53e87303937 (diff)
downloadrockbox-ec67912b638e0fae3cae7b4182d23db6d36c5135.tar.gz
rockbox-ec67912b638e0fae3cae7b4182d23db6d36c5135.zip
Reclaim .iram areas in DRAM by overlapping their load addresses with the uninitialized data sections. I did what I could test out-- not any flash image linker scripts or other target processors. Move any .iram copies in crt0.S's to be the first operation even if not _strictly_ necessary to be emphatic (aka. 'beware').
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20061 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/sh/crt0.S')
-rw-r--r--firmware/target/sh/crt0.S23
1 files changed, 13 insertions, 10 deletions
diff --git a/firmware/target/sh/crt0.S b/firmware/target/sh/crt0.S
index a87bee899f..0e8bbfdd68 100644
--- a/firmware/target/sh/crt0.S
+++ b/firmware/target/sh/crt0.S
@@ -98,16 +98,8 @@ start:
98 mov #0,r0 98 mov #0,r0
99 ldc r0,gbr 99 ldc r0,gbr
100 100
101 /* zero out .ibss */ 101 /* .iram copy is done first since it is reclaimed for other
102 mov.l .iedata_k,r0 102 * uninitialized sections */
103 mov.l .iend_k,r1
104 bra .iedatastart
105 mov #0,r2
106.iedataloop: /* backwards is faster and shorter */
107 mov.l r2,@-r1
108.iedatastart:
109 cmp/hi r0,r1
110 bt .iedataloop
111 103
112 /* copy the .iram section */ 104 /* copy the .iram section */
113 mov.l .iramcopy_k,r0 105 mov.l .iramcopy_k,r0
@@ -127,6 +119,17 @@ start:
127 bt .iramloop 119 bt .iramloop
128.noiramcopy: 120.noiramcopy:
129 121
122 /* zero out .ibss */
123 mov.l .iedata_k,r0
124 mov.l .iend_k,r1
125 bra .iedatastart
126 mov #0,r2
127.iedataloop: /* backwards is faster and shorter */
128 mov.l r2,@-r1
129.iedatastart:
130 cmp/hi r0,r1
131 bt .iedataloop
132
130 /* zero out bss */ 133 /* zero out bss */
131 mov.l .edata_k,r0 134 mov.l .edata_k,r0
132 mov.l .end_k,r1 135 mov.l .end_k,r1