[U-Boot] [RFC] [PATCH] arm: arm926ejs: use ELF relocations
Graeme Russ
graeme.russ at gmail.com
Tue Oct 5 01:21:43 CEST 2010
On Tue, Oct 5, 2010 at 9:57 AM, Albert ARIBAUD <albert.aribaud at 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 at 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
More information about the U-Boot
mailing list