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

Jerry Van Baren gerald.vanbaren at ge.com
Fri Jul 25 21:03:43 CEST 2008


Haavard Skinnemoen wrote:
> On Fri, 25 Jul 2008 11:21:12 -0400
> Jerry Van Baren <gerald.vanbaren at ge.com> wrote:
> 
>> The relocation information is in the ELF file until and unless we remove 
>> it.  "Normal" ELF executables retain that relocation information... that 
>> is exactly what the "L" (it) is for.  The linux loader (elf loader) 
>> loads an executable into an arbitrary memory location and relocates it 
>> by fixing up addresses based on the relocation table.
> 
> You're mixing two different relocation tables. Statically linked
> executables (like u-boot) normally don't have any relocation
> information in them after they are fully linked. Dynamically linked
> executables, position-independent executables (PIE) and shared
> libraries have dynamic relocations which are not only in the ELF file,
> but in a loadable segment so that they can be accessed at run time.
> 
> The relocation information from the .o files are not preserved in the
> final executable unless you specify the --emit-relocs flags, which
> exists purely for debugging purposes. The relocations used by the
> dynamic loader come from an entirely different, simpler set of
> relocation types which are normally not found in .o files.
> 
> Why do you think objdump has two different options for dumping normal
> (-r) vs. dynamic (-R) relocations?
> 
> And no, Linux ELF executables can _not_ be loaded into an arbitrary
> memory location unless they are PIE. Shared libraries, however, can be
> loaded at arbitrary memory locations, though things like pre-linking
> might make it more optimal to try to place them at the same address
> everywhere.

Thanks for the explanation.  I have not worked at this level with 
executable formats in a long time.  My experience harks back to Z80 
formats (I forgot which, but post-CPM which loaded into a fixed address) 
  and .COM and .EXE formats which have rudimentary relocation fixup 
information so that they could be run at arbitrary addresses.  Those are 
non-virtual (or didn't use the MMU) formats, equivalent to your PIE 
reference.

> Ok, I'll stop the chest-beating now. But please stop trying to tell
> people that adding a powerpc-specific option (which nobody seems to
> know how really works) to the command line will work on any other
> architectures than powerpc.

Fair enough.

> Haavard

Discovering my banner is labeled "obsolete",
gvb




More information about the U-Boot mailing list