mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-27 14:39:09 +08:00
[PR ld/22269] aarch64: Handle local undefined weak symbols
With static pie linking undefined weak symbols are forced to resolve locally to 0, so no GOT setup is needed in elfNN_aarch64_finish_dynamic_symbol, which previously failed for these symbols. The failure caused the unhelpful error message: "ld: final link failed: Nonrepresentable section on output" bfd/ PR ld/22269 * elfnn-aarch64.c (elfNN_aarch64_finish_dynamic_symbol): Use UNDEFWEAK_NO_DYNAMIC_RELOC to avoid dynamic GOT relocs. (elfNN_aarch64_allocate_dynrelocs): Likewise.
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
2017-11-27 Szabolcs Nagy <szabolcs.nagy@arm.com>
|
||||||
|
|
||||||
|
PR ld/22269
|
||||||
|
* elfnn-aarch64.c (elfNN_aarch64_finish_dynamic_symbol): Use
|
||||||
|
UNDEFWEAK_NO_DYNAMIC_RELOC to avoid dynamic GOT relocs.
|
||||||
|
(elfNN_aarch64_allocate_dynrelocs): Likewise.
|
||||||
|
|
||||||
2017-11-24 H.J. Lu <hongjiu.lu@intel.com>
|
2017-11-24 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR binutils/22444
|
PR binutils/22444
|
||||||
|
@ -8022,7 +8022,10 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
|||||||
if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||||
|| h->root.type != bfd_link_hash_undefweak)
|
|| h->root.type != bfd_link_hash_undefweak)
|
||||||
&& (bfd_link_pic (info)
|
&& (bfd_link_pic (info)
|
||||||
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)))
|
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
|
||||||
|
/* Undefined weak symbol in static PIE resolves to 0 without
|
||||||
|
any dynamic relocations. */
|
||||||
|
&& !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
|
||||||
{
|
{
|
||||||
htab->root.srelgot->size += RELOC_SIZE (htab);
|
htab->root.srelgot->size += RELOC_SIZE (htab);
|
||||||
}
|
}
|
||||||
@ -8824,7 +8827,10 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (h->got.offset != (bfd_vma) - 1
|
if (h->got.offset != (bfd_vma) - 1
|
||||||
&& elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL)
|
&& elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL
|
||||||
|
/* Undefined weak symbol in static PIE resolves to 0 without
|
||||||
|
any dynamic relocations. */
|
||||||
|
&& !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
|
||||||
{
|
{
|
||||||
Elf_Internal_Rela rela;
|
Elf_Internal_Rela rela;
|
||||||
bfd_byte *loc;
|
bfd_byte *loc;
|
||||||
|
Reference in New Issue
Block a user