[U-Boot] Relocation size penalty calculation

Peter Tyser ptyser at xes-inc.com
Thu Oct 8 18:15:00 CEST 2009


On Thu, 2009-10-08 at 08:53 -0700, J. William Campbell wrote:
> Peter Tyser wrote:
> > On Thu, 2009-10-08 at 22:54 +1100, Graeme Russ wrote:
> >   
> >> Out of curiosity, I wanted to see just how much of a size penalty I am
> >> incurring by using gcc -fpic / ld -pic on my x86 u-boot build. Here are
> >> the results (fixed width font will help - its space, not tab, formatted):
> >>
> >> Section             non-reloc     reloc
> >> ---------------------------------------
> >> .text                000118c4  000137fc <- 0x1f38 bytes (~8kB) bigger
> >> .rodata              00005bad  000059d0
> >> .interp              n/a       00000013
> >> .dynstr              n/a       00000648
> >> .hash                n/a       00000428
> >> .eh_frame            00003268  000034fc
> >> .data                00000a6c  000001dc
> >> .data.rel            n/a       00000098
> >> .data.rel.ro.local   n/a       00000178
> >> .data.rel.local      n/a       000007e4
> >> .got                 00000000  000001f0
> >> .got.plt             n/a       0000000c
> >> .rel.got             n/a       000003e0
> >> .rel.dyn             n/a       00001228
> >> .dynsym              n/a       00000850
> >> .dynamic             n/a       00000080
> >> .u_boot_cmd          000003c0  000003c0
> >> .bss                 00001a34  00001a34
> >> .realmode            00000166  00000166
> >> .bios                0000053e  0000053e
> >> =======================================
> >> Total                0001d5dd  00022287 <- 0x4caa bytes (~19kB) bigger
> >>
> >> Its more than a 16% increase in size!!!
> >>
> >> .text accounts for a little under half of the total bloat, and of that,
> >> the crude dynamic loader accounts for only 341 bytes
> >>
> >> Have any metrics been done for PPC?
> >>     
> >
> > Things actually improve a little bit when we use -mrelocatable and get
> > rid of all the manual "+= gd->reloc_off" fixups:
> >
> > 1) Top of mainline on XPedite5370:
> >    text	   data	    bss	    dec	    hex	filename
> >  308612	  24488	  33172	 366272	  596c0	u-boot
> >
> > 2) Top of "reloc" branch on XPedite5370 (ie -mrelocatable):
> >    text	   data	    bss	    dec	    hex	filename
> >  303704	  28644	  33156	 365504	  593c0	u-boot
> >
> >   
> Hi Peter,
>      Just to be clear, the total text+data length of u-boot with the 
> "manual" relocations (#1)  is LARGER than the text+data length of u-boot 
> with the "manual" relocations removed and the necessary centralized 
> relocation code added, along with any additional data sections required 
> by -mrelocateable (#2), by 768 (dec) bytes?

Hi Bill,
Doah, looks like I chose a bad board as an example.  The XPedite5370
already had -mrelocatable defined in its own
board/xes/xpedite5370/config.mk in mainline, so the above comparison
should be ignored as both builds used -mrelocatable.

Here's some *real* results from the MPC8548CDS:
1) Top of mainline:
   text	   data	    bss	    dec	    hex	filename
 219968	  17052	  22992	 260012	  3f7ac	u-boot

2) Top of "reloc" branch (ie -mrelocatable)
   text	   data	    bss	    dec	    hex	filename
 219192	  20640	  22980	 262812	  4029c	u-boot

So the reloc branch is 2.7K bigger for the MPC8548CDS.

Best,
Peter



More information about the U-Boot mailing list