[U-Boot] Relocation size penalty calculation

Peter Tyser
2009-10-08T14:14:19Z

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

For fun:
3) #2 but with s/-mrelocatable/-fpic/ (probably doesn't boot):
text data bss dec hex filename
303704 24472 33156 361332 58374 u-boot

There may be some other changes that affect the size between mainline
and "reloc", but their sizes are in the same general ballpark.

Best,
Peter