From: J. William Campbell <jwilliamcampbell@comcast.net>
To: u-boot@lists.denx.de
Subject: [U-Boot] Relocation size penalty calculation
Date: Tue, 13 Oct 2009 16:48:52 -0700 [thread overview]
Message-ID: <4AD511E4.9090204@comcast.net> (raw)
In-Reply-To: <OF32A18F38.511FF11C-ONC125764E.00750716-C125764E.007534EE@transmode.se>
Joakim Tjernlund wrote:
> Graeme Russ <graeme.russ@gmail.com> wrote on 13/10/2009 22:06:56:
>
>
>> On Tue, Oct 13, 2009 at 10:53 PM, Joakim Tjernlund
>> <joakim.tjernlund@transmode.se> wrote:
>>
>>> Graeme Russ <graeme.russ@gmail.com> wrote on 13/10/2009 13:21:05:
>>>
>>>> On Sun, Oct 11, 2009 at 11:51 PM, Joakim Tjernlund
>>>> <joakim.tjernlund@transmode.se> wrote:
>>>>
>>>>> Graeme Russ <graeme.russ@gmail.com> wrote on 11/10/2009 12:47:19:
>>>>>
>>>> [Massive Snip :)]
>>>>
>>>>
>>>>>> So, all that is left are .dynsym and .dynamic ...
>>>>>> .dynsym
>>>>>> - Contains 70 entries (16 bytes each, 1120 bytes)
>>>>>> - 44 entries mimic those entries in .got which are not relocated
>>>>>> - 21 entries are the remaining symbols exported from the linker
>>>>>> script
>>>>>> - 4 entries are labels defined in inline asm and used in C
>>>>>>
>>>>> Try adding proper asm declarations. Look at what gcc
>>>>> generates for a function/variable and mimic these.
>>>>>
>>>> Thanks - Now .dynsym contains only exports from the linker script
>>>>
>>> :)
>>>
>>>>>> - 1 entry is a NULL entry
>>>>>>
>>>>>> .dynamic
>>>>>> - 88 bytes
>>>>>> - Array of Elf32_Dyn
>>>>>> - typedef struct {
>>>>>> Elf32_Sword d_tag;
>>>>>> union {
>>>>>> Elf32_Word d_val;
>>>>>> Elf32_Addr d_ptr;
>>>>>> } d_un;
>>>>>> } Elf32_Dyn;
>>>>>> - 0x11 entries
>>>>>> [00] 0x00000010, 0x00000000 DT_SYMBOLIC, (ignored)
>>>>>> [01] 0x00000004, 0x38059994 DT_HASH, points to .hash
>>>>>> [02] 0x00000005, 0x380595AB DT_STRTAB, points to .dynstr
>>>>>> [03] 0x00000006, 0x3805BDCC DT_SYMTAB, points to .dynsym
>>>>>> [04] 0x0000000A, 0x000003E6 DT_STRSZ, size of .dynstr
>>>>>> [05] 0x0000000B, 0x00000010 DT_SYMENT, ???
>>>>>> [06] 0x00000015, 0x00000000 DT_DEBUG, ???
>>>>>> [07] 0x00000011, 0x3805A8F4 DT_REL, points to .rel.text
>>>>>> [08] 0x00000012, 0x000014D8 DT_RELSZ, ???
>>>>>>
>>>>> How big DT_REL is
>>>>>
>>>>>> [09] 0x00000013, 0x00000008 DT_RELENT, ???
>>>>>>
>>>>> hmm, cannot remeber :)
>>>>>
>>>> How big an entry in DT_REL is
>>>>
>>> Right, how could I forget :)
>>>
>>>>>> [0a] 0x00000016, 0x00000000 DT_TEXTREL, ???
>>>>>>
>>>>> Oops, you got text relocations. This is generally a bad thing.
>>>>> TEXTREL is commonly caused by asm code that arent truly pic so it needs
>>>>> to modify the .text segment to adjust for relocation.
>>>>> You should get rid of this one. Look for DT_TEXTREL in .o files to find
>>>>> the culprit.
>>>>>
>>>>>
>>>> Alas I cannot - The relocations are a result of loading a register with a
>>>> return address when calling show_boot_progress in the very early stages of
>>>> initialisation prior to the stack becoming available. The x86 does not
>>>> allow direct access to the IP so the only way to find the 'current
>>>> execution address' is to 'call' to the next instruction and pop the return
>>>> address off the stack
>>>>
>>> hmm, same as ppc but that in it self should not cause a TEXREL, should it?
>>> Ahh, the 'call' is absolute, not relative? I guess there is some way around it
>>> but it is not important ATM I guess.
>>>
>>> Evil idea, skip -fpic et. all and add the full reloc procedure
>>> to relocate by rewriting directly in TEXT segment. Then you save space
>>> but you need more relocation code. Something like dl_do_reloc from
>>> uClibc. Wonder how much extra code that would be? Not too much I think.
>>>
>>>
>> With the following flags
>>
>> PLATFORM_RELFLAGS += -fvisibility=hidden
>> PLATFORM_CPPFLAGS += -fno-dwarf2-cfi-asm
>> PLATFORM_LDFLAGS += -pic --emit-relocs -Bsymbolic -Bsymbolic-functions
>>
>> I get no .got, but a lot of R_386_PC32 and R_386_32 relocations. I think
>> this might mean I need the symbol table in the binary in order to resolve
>> them
>>
>
> Possibly, but I think you only need to add an offset to all those
> relocs.
>
Almost right. The relocations specify a symbol value that needs to be
added to the data in memory to relocate the reference. The symbol values
involved should be the start of the text section for program references,
the start of the uninitialized data section for bss references, and the
start of the data section for initialized data and constants. So there
are about four symbols whose value you need to keep. Take a look at
http://refspecs.freestandards.org/elf/elf.pdf (which you have probably
already looked at) and it tells you what to do with R_386_PC32 ad
R_386_32 relocations. Hopefully the objcopy with the --strip-unneeded
will remove all the symbols you don't actually need, but I don't know
that for sure. Note also that you can change the section flags of a
section marked noload to load.
Best Regards,
Bill Campbell
> Jokce
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>
>
>
next prev parent reply other threads:[~2009-10-13 23:48 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-08 11:54 [U-Boot] Relocation size penalty calculation Graeme Russ
2009-10-08 14:14 ` Peter Tyser
2009-10-08 15:53 ` J. William Campbell
2009-10-08 16:15 ` Peter Tyser
2009-10-08 16:50 ` J. William Campbell
2009-10-08 15:58 ` J. William Campbell
2009-10-08 20:58 ` Graeme Russ
2009-10-08 21:23 ` Wolfgang Denk
2009-10-08 22:02 ` Graeme Russ
2009-10-08 22:20 ` Peter Tyser
2009-10-09 1:25 ` Mike Frysinger
2009-10-09 1:43 ` Graeme Russ
2009-10-08 22:27 ` J. William Campbell
2009-10-08 22:39 ` Graeme Russ
2009-10-08 23:12 ` Joakim Tjernlund
2009-10-09 0:09 ` J. William Campbell
2009-10-10 4:43 ` Graeme Russ
2009-10-10 8:07 ` Joakim Tjernlund
2009-10-10 8:46 ` Graeme Russ
2009-10-10 9:27 ` Joakim Tjernlund
2009-10-10 10:38 ` Graeme Russ
2009-10-10 10:47 ` Joakim Tjernlund
2009-10-10 11:21 ` Graeme Russ
2009-10-10 15:38 ` Joakim Tjernlund
2009-10-11 10:47 ` Graeme Russ
[not found] ` <OF83D1271F.04B67606-ONC125764C.0045BFF2-C125764C.0046AC45@transmode.se>
2009-10-13 11:21 ` Graeme Russ
2009-10-13 11:53 ` Joakim Tjernlund
2009-10-13 16:30 ` J. William Campbell
2009-10-13 16:55 ` Joakim Tjernlund
2009-10-13 20:06 ` Graeme Russ
[not found] ` <OF32A18F38.511FF11C-ONC125764E.00750716-C125764E.007534EE@ <4AD511E4.9090204@comcast.net>
2009-10-13 21:20 ` Joakim Tjernlund
2009-10-13 23:48 ` J. William Campbell [this message]
2009-10-14 7:25 ` Joakim Tjernlund
2009-10-14 11:48 ` Graeme Russ
2009-10-14 12:38 ` Joakim Tjernlund
2009-10-14 16:45 ` J. William Campbell
2009-10-17 5:17 ` Graeme Russ
2009-10-17 12:32 ` Joakim Tjernlund
2009-10-17 12:59 ` J. William Campbell
2009-10-17 21:29 ` Graeme Russ
2009-10-14 15:35 ` J. William Campbell
2009-10-14 16:05 ` Joakim Tjernlund
2009-10-14 16:49 ` J. William Campbell
[not found] ` <4AD0B3D7.7020900@comcast.net>
2009-10-11 1:31 ` Graeme Russ
2009-10-10 16:52 ` Mike Frysinger
2009-10-10 17:45 ` Joakim Tjernlund
2009-10-11 0:43 ` Graeme Russ
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4AD511E4.9090204@comcast.net \
--to=jwilliamcampbell@comcast.net \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox