[U-Boot] [RFC] [PATCH] arm: arm926ejs: use ELF relocations

Graeme Russ
2010-10-04T23:21:43Z

On Tue, Oct 5, 2010 at 9:57 AM, Albert ARIBAUD <albert.aribaud@free.fr> wrote:
> Le 05/10/2010 00:22, Graeme Russ a ?crit :
>>
>> On Tue, Oct 5, 2010 at 9:01 AM, Albert Aribaud<albert.aribaud@free.fr>
>> wrote:
>>>

> The output from MAKEALL is curiously calculated... If I look at objdumps of
> the GOT and ELF binaries, I find that:
>
> - the GOT .text section is 118960 bytes and the ELF .text section only
> 108112. This is due to the fact that GOT relocation requires additional
> instruction for GOT indirection whereas ELF relocations work by patching the
> code.

It would be interesting to compare against the basline non-relocatable
version

>
> - the .rodata section is 22416 for GOT, 22698 for ELF, whereas the .data
> section is 2908 for GOT, 2627 for ELF. Some initialized data apparently
> moved from non-const ton const for some reason, but basically, initialized
> data remains constant.
>
> - the .bss section remains constant too, 16640 for GOT vs. 16636 for ELF.
> I'm not going to track what causes the 4 byte difference. :)
>
> Many sections are output in the ELF file which do not appear in the GOT
> file, such as .interp, .dynamic, .dynstr etc. They probably pollute
> MAKEALL's figures.

I now discard a few sections:

/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) }
/DISCARD/ : { *(.interp*) }
/DISCARD/ : { *(.gnu*) }

Not that it makes a huge difference - most of these are trivially small

>
> So actually the code (.text+.rodata+.data) is smaller for ELF than for GOT
> (which is normal as GOT causes adding indirection instructions whereas ELF
> does not alter the code size) but the .rel.dyn is way bigger than the .got
> (which is also normal as GOT does not relocate all that ELF does).
>
>> As I have mentioned before, x86 has an in-RAM increase of only 284 bytes
>> (0.3 %) with an additional 22424 bytes in .rel.dyn
>
> That's roughly consistent with the numbers I get: about 19 KB of .rel.dyn
> plus .dynsym, which we will be able to cut by half if we preprocess it.
>

Which is not copied to RAM, so not as nasty as the .got related increase

I'm also looking at moving the low-level intialisation and relocation code
into a seperate section (outside .text) so I even less to relocate to RAM

Then I could even compress the relocatable section, but that is just being
silly ;)

Regards,

Graeme