[U-Boot-Users] Relocation of symbols?

Andreas Block andreas.block at esd-electronics.com
Tue Jun 28 14:50:08 CEST 2005

Hello Wolfgang,

thanks for your quick reply.

27.06.2005 15:40:25, Wolfgang Denk <wd at denx.de> wrote:

>Dear Andreas,
> [cut...]
>It's just that not many people really understand all the details  how
>the relocation works.
>> The u-boot boots from flash and relocates itself into RAM. After relocation the
>> array is relocated into RAM and so is its content (the pointers to strings). But the 
>> actual strings are still located in flash. "walter" is a global symbol located in 
>> ".data" section of the compiled object. Is this the behaviour I should expect, or is
>> it a problem with u-boots relocation code?
>If you look at the code, then you  will  find  that  the  same  thing
>happens  to  all  pointers with static initialization. If you think a
>bit about it you will probably be not  surprised  -  how  should  the
>compiler  know  that  the addresses of your strings might change? and
>after the compiler generated code with a  static  initializer  -  who
>should  then know that the contents of this variable might need to be
>See for example how we manually adjust (= relocate) the command table
>and other pointer constants in board_init_r().
>I guess you can probably tell  GCC  to  add  GOT  entries  for  these
>pointers,  but  I have to admit that I don't know off-hand what's the
>most efficient way.

I'm not quite sure, if I understood you.
Just to summerize:
1. Absolute symbols are always relocated (my mail: "Does u-boot relocate absolute 
symbols?", 14.06.2005).
2. Statically initialized pointers are never relocated.

I do understand the second point (and can live with this behaviour), but I'd like to 
know, where you loose the required information to relocate the pointers as well.
The first point is more important to me. As I understand, absolute symbols shouldn't be 
relocated at all. But I guess, you've a similar reason as for the statically 
initialized pointers. Anyway: Is it possible in any way to locate the array at the 
position I want it to be? Or the other way round: Is it as difficult to prevent 
absolute symbols from being added to the GOT as adding something?


>Best regards,
>Wolfgang Denk
>Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
>Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
>He had quite a powerful intellect, but it  was  as  powerful  like  a
>locomotive,  and  ran on rails and was therefore almost impossible to
>steer.                          - Terry Pratchett, _Lords and Ladies_

More information about the U-Boot mailing list