[U-Boot] ARM relocation, question to Heiko

Albert ARIBAUD albert.aribaud at free.fr
Mon Oct 4 09:44:24 CEST 2010


Le 04/10/2010 08:40, Albert ARIBAUD a écrit :

> Right now I can build (not run, mind you) u-boot for edminiv2 without
> -fPIC/-fPIE, with -pie and a modified u-boot.lds and start.S. Almost all
> of the .rel.dyn fixup entries are type 23, that is, relative to the base
> address, which is good. However, here are about ten at the end which are
> type 2 -- symbol-relative -- and I am studying them in order to see if
> they are needed.

Those type 2 relocations correspond to symbols which are defined in the 
linker file (e.g. __got_start and __got_end) and thus are absolute, not 
relative.

> If type 23 relocations are all that is needed, then a first ARM ELF
> relocation implementation should 'simply' trade GOT vs .rel.dyn
> relocation in start.S (I am almost there) and remove fixups in
> board_init_r. Start.S would apply type 23 fixups only and ignore the
> rest. Later on we could add a build stage to rewrite the .rel.dyn
> section as suggested, by filtering out non-type-23 relocs and keeping
> only the address part of type-23 ones, reducing the .rel.dyn table
> roughly by half.

Al right, so type 2 are needed too, and of course they need a different 
processing than type 23, but the good news is, one should easily make 
the linker provide relative values for type 2 fixups by telling it to 
base the executable at offset 0. The interest of doing so is that all 
fixups in .rel.dyn could be processed homogeneously by adding the actual 
base address of the code to each fixup location.

Amicalement,
-- 
Albert.


More information about the U-Boot mailing list