[U-Boot] arm: wrong Relocation and not cleared BSS

Alexander Holler holler at ahsoftware.de
Sat Oct 30 15:08:55 CEST 2010


Hello,

to give the topic a better meaning and to summarize what I think is 
currently happening along with some "pictures" for a better understanding:

We are starting with code (c) and data (d) somewhere in the memory:

----------
|cd      |
----------

The relocation in start.S should achieve this:

----------
|      cd|
----------

That means code and data should be moved upwards. What
currently is happening is the following:

----------
| d    c |
----------

The code is moved upwards, but that code still uses the data at d.
This results another problem: Some parts in the code are assuming that d 
is cleared (set to zero in start.S). But what start.S does it to clear
the new location (z in the picture below).

----------
| d    cz|
----------

Because the code (c) still uses the data (bss) in d and not in z, some 
hard to find errors might occur because the used data isn't set to zero 
as required.

I have almost no knowledge about how gcc and the binutils are handling 
relocation, therfore I can't help much further here. What I think is 
part of the problem, is that -fPIC was removed. Using -pie in LDFLAGS 
might be used to get relocatable code, but the data will not be 
relocated. And I would wonder if that is possible without instructing 
the compiler to build stuff for relocation (-fPIC).


I hope that brings some light into the problem.

Regards,

Alexander


More information about the U-Boot mailing list