RFC: Should AArch64 *_NC relocs complain on overflow ?

Jiong Wang jiong.wang@foss.arm.com
Mon Feb 8 17:58:00 GMT 2016
On 08/02/16 16:53, Nick Clifton wrote:
> Hi Jiong,
>
>> +		  /* FIXME: Are we testing all of the appropriate reloc
>> +		     types here ?  */
>> +		  && (real_r_type == BFD_RELOC_AARCH64_LDST16_LO12
>> +		      || real_r_type == BFD_RELOC_AARCH64_LDST32_LO12
>> +		      || real_r_type == BFD_RELOC_AARCH64_LDST64_LO12
>> +		      || real_r_type == BFD_RELOC_AARCH64_LDST128_LO12))
>>
>>     Some GOT relocation types will cause the same error.
> Do you have a testcase that can demonstrate this ?

This can only be triggered when the .o file is postprocessed by tools 
like objcopy, where
the user might use options like --keep-global-symbol to turn a global 
symbol into local after
compilation stage that gcc was generating PIC sequences instead of 
pc-relative addressing sequences,
thus trigger this bug.

A simple testcase which contains three initialized global varibles, then 
a function simply return the middle one of them, and
compile/link with the following steps can reproduce this bug.

gcc -fpic -c 1.c
objcopy -L gb 1.o 1.modified.o
ld -shared -o lib1.so 1.modified.o
1.modified.o: In function `foo':
1.c:(.text+0x4): relocation truncated to fit: R_AARCH64_LD64_GOT_LO12_NC 
against `gb'

>
>>     Therefore, I think relocation against unaligned value can origin from
>>     various reasons.
> True - that is why I used "Possibly" at the start of the warning message.
> Ie the message is only a suggestion, not a guarantee.
>
>>   IMHO, the safest way is, in
>>     "_bfd_aarch64_elf_put_addend", we return something like
>>     "bfd_reloc_unaligned" which is an general warning,
> That means make changes to the generic parts of the BFD library, which I would
> prefer to avoid unless really necessary.  But if
>
>> something like
>>     "relocation against unaligned value warning."
> But that will not help ordinary programmers who will not understand why
> there is an alignment mismatch.  Given that the overflown relocation error
> has turned up more than once in real production code, and confused the
> programmers who then report bugs against the linker, I think that it is
> in our interests to be as helpful as possible.
>
> How about this rewording instead:
>
>    One possible cause of this error is that the symbol is being
>    referenced in the indicated code as if it had a larger
>    alignment than was declared where it was defined.
>
>
> Cheers
>    Nick
>
>
>



More information about the Binutils mailing list