[U-Boot-Users] Changing u-boot relocation scheme

Wolfgang Denk wd at denx.de
Thu Jul 24 05:18:26 CEST 2008


In message <f608b67d0807231546t44ef5a6ak68d98b26beb5d8fc at mail.gmail.com> you wrote:
> 
> > What is a module?
> 
> for the purposes of this discussion any .o file or any library of .o files.

Neither of these is executable - you either have to link these with
the U-Boot code or into a standalone application - and in both cases
none of the problems you describe happens.

> > How does a it relate to u-boot?
> 
> I need to extend u-boot with certain functionality available from those modules.

OK - as mentioned: either statically linked or as standalone app.

> > Why does it need to be relocated?
> 
> because the  modules are now part of u-boot, they need to be relocated
> along with the rest of the image.

U-Boot does this (if statically linked) the very same way like all
other U-Boot code gets relocated.

> > Why isn't it written in position independent manner?
> 
> because they come from different sources, not concerned with u-boot,
> and just work and need to be ported as is.

If you want to link against U-Boot, you have to use at least
compatible compiler options and the U-Boot linker script.

> > How is your relocation methodology going to fixup a module's data
> > structures?
> 
> The relocation will adjust only pointers to absolute addresses stored
> in text/data segments.

No.

> > What pointers are in your data structures?  Why do they need to be
> > relocated?
> 
> in some cases data structures include pointers to other data
> structures, etc. (This is called  'tree' btw, sorry couldn't resist
> :-)

This should get sorted out correctly when linking.

> > Gcc supports "proper" relocation, if only we knew how to make it work for
> > all "reasonable" versions of gcc (and Grant's conclusion is that many
> > versions of gcc in use today do *not* support the relocation).
> >  <http://article.gmane.org/gmane.comp.boot-loaders.u-boot/36343/>
> 
> well, if there is a pointer to a data element or to a function stored
> in a data structure, the .bin image is built and fixed using actual
> addresses set by the linker. How can gcc help here?

By adding the respective entries to the GOT.

> I am sure it is doable, I am just trying to understand if this would
> be accepted in general, because it can be done differently depending
> if one needs to push it upstream or not.

If you invest time in solving such problems, than your time willbe
much better iinvested if you try to help solving the remaining issues
with  Grant's code.

What Grant suggests is the way to go. I do not think your approach has
chances for mainline.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Nothing in progression can rest on its original plan. We may as  well
think  of  rocking  a grown man in the cradle of an infant.
- Edmund Burke




More information about the U-Boot mailing list