+2018-07-06 Max Filippov <jcmvbkbc@gmail.com>
+
+ * elf32-xtensa.c (elf_xtensa_allocate_dynrelocs): Don't allocate
+ space for dynamic relocation for undefined weak symbol.
+ (elf_xtensa_relocate_section): Don't emit R_XTENSA_RELATIVE
+ relocation for undefined weak symbols.
+ (shrink_dynamic_reloc_sections): Don't shrink dynamic relocation
+ section for relocations against undefined weak symbols.
+
2018-07-06 Alan Hayward <alan.hayward@arm.com>
* elf.c (elfcore_grok_aarch_sve): New function.
if (! elf_xtensa_dynamic_symbol_p (h, info))
elf_xtensa_make_sym_local (info, h);
+ if (! elf_xtensa_dynamic_symbol_p (h, info)
+ && h->root.type == bfd_link_hash_undefweak)
+ return TRUE;
+
if (h->plt.refcount > 0)
htab->elf.srelplt->size += (h->plt.refcount * sizeof (Elf32_External_Rela));
}
unresolved_reloc = FALSE;
}
- else
+ else if (!is_weak_undef)
{
/* Generate a RELATIVE relocation. */
outrel.r_info = ELF32_R_INFO (0, R_XTENSA_RELATIVE);
outrel.r_addend = 0;
}
+ else
+ {
+ continue;
+ }
}
loc = (srel->contents
if ((r_type == R_XTENSA_32 || r_type == R_XTENSA_PLT)
&& (input_section->flags & SEC_ALLOC) != 0
- && (dynamic_symbol || bfd_link_pic (info)))
+ && (dynamic_symbol || bfd_link_pic (info))
+ && (!h || h->root.type != bfd_link_hash_undefweak))
{
asection *srel;
bfd_boolean is_plt = FALSE;