[U-Boot] [PATCH v1 6/7] MIPS: u-boot.lds: add relocation specific sections

Daniel Schwierzeck daniel.schwierzeck at gmail.com
Mon Feb 11 14:32:16 CET 2013


2013/2/11 Gabor Juhos <juhosg at openwrt.org>:
> 2013.02.09. 21:33 keltezéssel, daniel.schwierzeck at gmail.com írta:
>> From: Gabor Juhos <juhosg at openwrt.org>
>>
>> This section contain the table needed for dynamic
>> relocation. Also provide symbols for the relocation
>> code to access the table.
>>
>> Discard all sections which are not needed in the final
>> ELF binary and U-Boot image. Section .dynsym cannot be
>> discarded or GNU ld crashes otherwise. This section
>> will be stripped by GNU objcpy in a later patch.
>>
>> Signed-off-by: Gabor Juhos <juhosg at openwrt.org>
>> Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck at gmail.com>
>> ---
>>  arch/mips/cpu/u-boot.lds | 24 +++++++++++++++++++++++-
>>  1 file changed, 23 insertions(+), 1 deletion(-)
>>
>> diff --git a/arch/mips/cpu/u-boot.lds b/arch/mips/cpu/u-boot.lds
>> index 4cd983a..cea9533 100644
>> --- a/arch/mips/cpu/u-boot.lds
>> +++ b/arch/mips/cpu/u-boot.lds
>> @@ -70,7 +70,17 @@ SECTIONS
>>       . = ALIGN(4);
>>       __image_copy_end = .;
>>
>> -     .bss : {
>> +     .rel.dyn : {
>> +             __rel_dyn_start = .;
>> +             *(.rel.dyn)
>> +             __rel_dyn_end = .;
>> +     }
>> +
>> +     .dynsym : {
>> +             *(.dynsym)
>> +     }
>
> This is not enough to avoid the binutils issue I have mentioned in the original
> patch. The issue is present after applying this series.
>
> The following example comes from the qemu_mips target compiled with the ELDK 5.3
> toolchain:
>
>> $ mips-linux-objdump --disassemble u-boot | grep bfc005[67]
>> bfc00560:       00000000        nop
>> bfc00564:       bfc31f74        cache   0x3,8052(s8)    <--- __rel_dyn_end
>
> The offset of __rel_dyn_end:
> 0x0bfc31f74 - 0xbfc00000 = 0x31f74 = 204660
>
>> bfc00568:       bfc30804        cache   0x3,2052(s8)
>> bfc0056c:       bfc30804        cache   0x3,2052(s8)
>> bfc00570:       bfc2fa70        cache   0x2,-1424(s8)
>> bfc00574:       000001df        0x1df
>> bfc00578 <in_ram>:
>> bfc00578:       8d0bfffc        lw      t3,-4(t0)
>> bfc0057c:       8d0cfff8        lw      t4,-8(t0)
>
>> $ ls -l u-boot.bin
>> -rw-r--r-- 1 juhosg root 204284 Feb 11 11:29 u-boot.bin
>
> 204660 - 204284 = 376 bytes are missing from the final u-boot.bin.
>
> -Gabor
>

that's weird. Actually I checked after each patch if the *_end symbols
match the U-Boot binary size. Now I checked again with different
toolchains (gcc-4.[5,6,7], binutils-2.[21.53,22] and I have again that
binutils issue.

But all toolchains have one in common (tested with qemu_mips):
__rel_dyn_end - __rel_dyn_start = 0x1770
size from readelf = 0x15f8

Another problem is that your .deadcode workaround does not work
anymore for me. It does not matter how I arrange or drop the unneeded
sections, the size of .rel.dyn remains at 0x1770. I'll try to find
another solution.
-- 
Best regards,
Daniel


More information about the U-Boot mailing list