[U-Boot-Users] BSS initialization wrong on ARM??
Paul Ruhland
pruhland at rochester.rr.com
Fri Jun 18 04:15:52 CEST 2004
To add what I discovered while doing the lpd7a40x port (the first part is a
recap of whats been discussed in this thread already...I leave it in for
context).
---
It seems the new compiler (gcc >= 3.3.3) does not place global variables in
the text/data segment if they are initialized to zero. Instead it places
them in the bss segment...assuming, I suppose, it will be initialized to zero
there. So, 'timer_load_val' is placed in the bss segment...and as things
turned out, its the first entry right at '__bss_start'.
Here is the bug...all of the 'start.S' files for arm9x processors begin
clearing the bss on relocation starting 4 bytes past the actual start of the
bss segment. So, in this case, 'timer_load_val' is never initialized to zero
but is instead 0xffffffff after relocation. That value is due to the
relocate code (copy_loop) actually copying 4 bytes past the end of text/data
(which is just erased flash). I verified this by viewing the ram value at
__bss_start (timer_load_val) before and after the copy_loop executed.
So there are really two bugs in the relocate code.
---
The copy_loop is solved by using a 'blt' instead of a 'ble' for the loop
compare. The 'start.S' in 'cpu/lh7a40x/' has both fixes incorporated.
On Tuesday 15 June 2004 15:27, Wolfgang Denk wrote:
> Dear Andrea,
>
> in message <001c01c452af$214b8b90$1800a8c0 at llandrews> you wrote:
> > > Actually _all_ ARM systems are affected - except s3c44b0 which
> > > doesn't clear BSS at all?
> > >
> > >
> > > Andrea, am I missing something, or is the clear_bss code missing in
> > > your port for the s3c44b0 processor?
> >
> > You're right Wolfgang: the clear_bss code is missing in my port for the
> > s3c44b0 port. This because I've used as reference another "ARM family"
> > code
>
> ...
>
> > I will soon fix this problem, probably when we will port the newer
> > version of u-boot to our platform.
>
> maybe we can use this as oppotrtunity to check if the s3c44b0 really
> needs a separate CPU directory; IMHO it could be merged ...
>
> Best regards,
>
> Wolfgang Denk
More information about the U-Boot
mailing list