[U-Boot] [PATCH 0/5] Optimize ARM relocation

Albert ARIBAUD albert.u.boot at aribaud.net
Tue May 14 22:16:01 CEST 2013


On Tue, 14 May 2013 22:02:55 +0200, Albert ARIBAUD
<albert.u.boot at aribaud.net> wrote:

> *** NOTE: this series applies over the 'Factorize
> ARM relocate_code instances' series.
> 
> This series optimizes relocation by ensuring ARM
> binaries only use one type of relocation record,
> R_ARM_RELATIVE., then optimizing relocation code
> accordingly.
> 
> The only known case where relocation records other
> than R_ARM_RELATIVE are generated is when a reference
> is made to a symbol defined in the linker script, e.g.
> __image_copy_start, __image_copy_end, __rel_dyn_start,
> __rel_dyn_end, and __dynsym_start.
> 
> Moving the definition of these symbols from the linker
> scripts into a C module causes their references' types
> to become R_ARM_RELATIVE.
> 
> First, arch/arm/lib/bss.c is replaced by a more generic
> arch/arm/lib/sections.c where all section symbols will
> be defined.
> 
> Second, __image_copy_start and __image_copy_end symbols
> are moved from linker scripts to arch/arm/lib/sections.c
> 
> Third, __rel_dyn_start, __rel_dyn_end and __synsym_start
> are moved from linker scripts into arch/arm/lib/sections.c
> 
> Fourth, a check is added to the build system to ensure
> that ELF U-Boot binaries only use R_ARM_RELATIVE records.
> 
> Last, relocate_code is optimized

Hmm, it seems I need to see my work posted on the list to discover how
I could have done it better... I just noticed that if ARM binaries only
have R_ARM_RELATIVE record types, then all the .dynsym sections can
actually be dropped from the binaries. So, if I reorder the series and
put patch 5/5 first, then I can eliminate patch 3/5, or more to the
point, replace it with one which eliminates all dynsym stuff from linker
scripts, further reducing code size. That'll go in V2...

Amicalement,
-- 
Albert.


More information about the U-Boot mailing list