This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFC: Should AArch64 *_NC relocs complain on overflow ?




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





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]