Commit 448217d4b2e11b11ae5addd1d1f752ce194d6af0

Authored by Zhong Hongbo
Committed by Albert ARIBAUD
1 parent 3ec81d758c

arm: Fix to mistake clean the memory space

In currently, when __bss_start is equal to __bss_end__,
The bss loop will clear all the things in memory space.

But just only when __bss_end__ greater than __bss_start__,
we do the clear bss section operation.

Signed-off-by: Zhong Hongbo <bocui107@gmail.com>
Acked-by: Andreas Bießmann <andreas.devel@googlemail.com>

Showing 13 changed files with 65 additions and 40 deletions Side-by-side Diff

arch/arm/cpu/arm1136/start.S
... ... @@ -251,10 +251,12 @@
251 251 add r1, r1, r4
252 252 mov r2, #0x00000000 /* clear */
253 253  
254   -clbss_l:str r2, [r0] /* clear loop... */
  254 +clbss_l:cmp r0, r1 /* clear loop... */
  255 + bhs clbss_e /* if reached end of bss, exit */
  256 + str r2, [r0]
255 257 add r0, r0, #4
256   - cmp r0, r1
257   - bne clbss_l
  258 + b clbss_l
  259 +clbss_e:
258 260 #endif /* #ifndef CONFIG_SPL_BUILD */
259 261  
260 262 /*
arch/arm/cpu/arm1176/start.S
... ... @@ -351,11 +351,12 @@
351 351 add r1, r1, r4
352 352 mov r2, #0x00000000 /* clear */
353 353  
354   -clbss_l:str r2, [r0] /* clear loop... */
  354 +clbss_l:cmp r0, r1 /* clear loop... */
  355 + bhs clbss_e /* if reached end of bss, exit */
  356 + str r2, [r0]
355 357 add r0, r0, #4
356   - cmp r0, r1
357   - bne clbss_l
358   -
  358 + b clbss_l
  359 +clbss_e:
359 360 #ifndef CONFIG_NAND_SPL
360 361 bl coloured_LED_init
361 362 bl red_led_on
arch/arm/cpu/arm720t/start.S
... ... @@ -228,10 +228,12 @@
228 228 add r1, r1, r4
229 229 mov r2, #0x00000000 /* clear */
230 230  
231   -clbss_l:str r2, [r0] /* clear loop... */
  231 +clbss_l:cmp r0, r1 /* clear loop... */
  232 + bhs clbss_e /* if reached end of bss, exit */
  233 + str r2, [r0]
232 234 add r0, r0, #4
233   - cmp r0, r1
234   - bne clbss_l
  235 + b clbss_l
  236 +clbss_e:
235 237  
236 238 bl coloured_LED_init
237 239 bl red_led_on
arch/arm/cpu/arm920t/start.S
... ... @@ -271,10 +271,12 @@
271 271 add r1, r1, r4
272 272 mov r2, #0x00000000 /* clear */
273 273  
274   -clbss_l:str r2, [r0] /* clear loop... */
  274 +clbss_l:cmp r0, r1 /* clear loop... */
  275 + bhs clbss_e /* if reached end of bss, exit */
  276 + str r2, [r0]
275 277 add r0, r0, #4
276   - cmp r0, r1
277   - bne clbss_l
  278 + b clbss_l
  279 +clbss_e:
278 280  
279 281 bl coloured_LED_init
280 282 bl red_led_on
arch/arm/cpu/arm925t/start.S
... ... @@ -265,10 +265,12 @@
265 265 add r1, r1, r4
266 266 mov r2, #0x00000000 /* clear */
267 267  
268   -clbss_l:str r2, [r0] /* clear loop... */
  268 +clbss_l:cmp r0, r1 /* clear loop... */
  269 + bhs clbss_e /* if reached end of bss, exit */
  270 + str r2, [r0]
269 271 add r0, r0, #4
270   - cmp r0, r1
271   - bne clbss_l
  272 + b clbss_l
  273 +clbss_e:
272 274  
273 275 bl coloured_LED_init
274 276 bl red_led_on
arch/arm/cpu/arm946es/start.S
... ... @@ -236,10 +236,12 @@
236 236 add r1, r1, r4
237 237 mov r2, #0x00000000 /* clear */
238 238  
239   -clbss_l:str r2, [r0] /* clear loop... */
  239 +clbss_l:cmp r0, r1 /* clear loop... */
  240 + bhs clbss_e /* if reached end of bss, exit */
  241 + str r2, [r0]
240 242 add r0, r0, #4
241   - cmp r0, r1
242   - blo clbss_l
  243 + b clbss_l
  244 +clbss_e:
243 245 #endif
244 246  
245 247 /*
arch/arm/cpu/arm_intcm/start.S
... ... @@ -232,10 +232,12 @@
232 232 add r1, r1, r4
233 233 mov r2, #0x00000000 /* clear */
234 234  
235   -clbss_l:str r2, [r0] /* clear loop... */
  235 +clbss_l:cmp r0, r1 /* clear loop... */
  236 + bhs clbss_e /* if reached end of bss, exit */
  237 + str r2, [r0]
236 238 add r0, r0, #4
237   - cmp r0, r1
238   - bne clbss_l
  239 + b clbss_l
  240 +clbss_e:
239 241  
240 242 bl coloured_LED_init
241 243 bl red_led_on
arch/arm/cpu/armv7/start.S
... ... @@ -259,10 +259,12 @@
259 259 #endif
260 260 mov r2, #0x00000000 /* clear */
261 261  
262   -clbss_l:str r2, [r0] /* clear loop... */
  262 +clbss_l:cmp r0, r1 /* clear loop... */
  263 + bhs clbss_e /* if reached end of bss, exit */
  264 + str r2, [r0]
263 265 add r0, r0, #4
264   - cmp r0, r1
265   - bne clbss_l
  266 + b clbss_l
  267 +clbss_e:
266 268  
267 269 /*
268 270 * We are done. Do not return, instead branch to second part of board
arch/arm/cpu/ixp/start.S
... ... @@ -334,10 +334,12 @@
334 334 add r1, r1, r4
335 335 mov r2, #0x00000000 /* clear */
336 336  
337   -clbss_l:str r2, [r0] /* clear loop... */
  337 +clbss_l:cmp r0, r1 /* clear loop... */
  338 + bhs clbss_e /* if reached end of bss, exit */
  339 + str r2, [r0]
338 340 add r0, r0, #4
339   - cmp r0, r1
340   - bne clbss_l
  341 + b clbss_l
  342 +clbss_e:
341 343  
342 344 bl coloured_LED_init
343 345 bl red_led_on
arch/arm/cpu/lh7a40x/start.S
... ... @@ -245,10 +245,12 @@
245 245 add r1, r1, r4
246 246 mov r2, #0x00000000 /* clear */
247 247  
248   -clbss_l:str r2, [r0] /* clear loop... */
  248 +clbss_l:cmp r0, r1 /* clear loop... */
  249 + bhs clbss_e /* if reached end of bss, exit */
  250 + str r2, [r0]
249 251 add r0, r0, #4
250   - cmp r0, r1
251   - bne clbss_l
  252 + b clbss_l
  253 +clbss_e:
252 254 #endif
253 255  
254 256 /*
arch/arm/cpu/pxa/start.S
... ... @@ -258,10 +258,12 @@
258 258 add r1, r1, r4
259 259 mov r2, #0x00000000 /* clear */
260 260  
261   -clbss_l:str r2, [r0] /* clear loop... */
  261 +clbss_l:cmp r0, r1 /* clear loop... */
  262 + bhs clbss_e /* if reached end of bss, exit */
  263 + str r2, [r0]
262 264 add r0, r0, #4
263   - cmp r0, r1
264   - bne clbss_l
  265 + b clbss_l
  266 +clbss_e:
265 267 #endif /* #ifndef CONFIG_SPL_BUILD */
266 268  
267 269 /*
arch/arm/cpu/s3c44b0/start.S
... ... @@ -217,10 +217,12 @@
217 217 add r1, r1, r4
218 218 mov r2, #0x00000000 /* clear */
219 219  
220   -clbss_l:str r2, [r0] /* clear loop... */
  220 +clbss_l:cmp r0, r1 /* clear loop... */
  221 + bhs clbss_e /* if reached end of bss, exit */
  222 + str r2, [r0]
221 223 add r0, r0, #4
222   - cmp r0, r1
223   - bne clbss_l
  224 + b clbss_l
  225 +clbss_e:
224 226  
225 227 bl coloured_LED_init
226 228 bl red_led_on
arch/arm/cpu/sa1100/start.S
... ... @@ -221,10 +221,12 @@
221 221 add r1, r1, r4
222 222 mov r2, #0x00000000 /* clear */
223 223  
224   -clbss_l:str r2, [r0] /* clear loop... */
  224 +clbss_l:cmp r0, r1 /* clear loop... */
  225 + bhs clbss_e /* if reached end of bss, exit */
  226 + str r2, [r0]
225 227 add r0, r0, #4
226   - cmp r0, r1
227   - bne clbss_l
  228 + b clbss_l
  229 +clbss_e:
228 230 #endif
229 231  
230 232 /*