diff options
-rw-r--r-- | firmware/app.lds | 4 | ||||
-rw-r--r-- | firmware/crt0.S | 19 |
2 files changed, 23 insertions, 0 deletions
diff --git a/firmware/app.lds b/firmware/app.lds index 83a09a81d0..bacc645044 100644 --- a/firmware/app.lds +++ b/firmware/app.lds | |||
@@ -117,6 +117,10 @@ SECTIONS | |||
117 | .data : | 117 | .data : |
118 | { | 118 | { |
119 | *(.data) | 119 | *(.data) |
120 | . = ALIGN(0x4); | ||
121 | _datacopy = .; /* dummy here, only for ROM based */ | ||
122 | _datastart = .; | ||
123 | _dataend = .; | ||
120 | } > DRAM | 124 | } > DRAM |
121 | 125 | ||
122 | .rodata : | 126 | .rodata : |
diff --git a/firmware/crt0.S b/firmware/crt0.S index 99aab83867..088ea0aff4 100644 --- a/firmware/crt0.S +++ b/firmware/crt0.S | |||
@@ -112,6 +112,19 @@ copy_l: | |||
112 | bf copy_l | 112 | bf copy_l |
113 | nop | 113 | nop |
114 | 114 | ||
115 | /* copy the .data section, for rombased execution */ | ||
116 | mov.l datacopy_k,r0 | ||
117 | mov.l data_k,r1 | ||
118 | mov.l dataend_k,r2 | ||
119 | copy_l2: | ||
120 | mov.l @r0,r3 | ||
121 | mov.l r3,@r1 | ||
122 | add #4,r0 | ||
123 | add #4,r1 | ||
124 | cmp/ge r2,r1 | ||
125 | bf copy_l2 | ||
126 | nop | ||
127 | |||
115 | /* Munge the main thread stack */ | 128 | /* Munge the main thread stack */ |
116 | mov.l stack_k,r2 | 129 | mov.l stack_k,r2 |
117 | mov.l deadbeef_k,r0 | 130 | mov.l deadbeef_k,r0 |
@@ -150,6 +163,12 @@ iram_k: | |||
150 | .long _iramstart | 163 | .long _iramstart |
151 | iramend_k: | 164 | iramend_k: |
152 | .long _iramend | 165 | .long _iramend |
166 | datacopy_k: | ||
167 | .long _datacopy | ||
168 | data_k: | ||
169 | .long _datastart | ||
170 | dataend_k: | ||
171 | .long _dataend | ||
153 | main_k: | 172 | main_k: |
154 | .long _main | 173 | .long _main |
155 | vbr_k: | 174 | vbr_k: |