From 1954000798df4fa1571ee51994105b75f31959d1 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Tue, 25 Nov 2008 15:53:27 +0000 Subject: bfd: * elf32-arm.c (elf32_arm_final_link_relocate): Do not turn branches to undefine weak symbols into branches to the next instruction if creating PLT entries for those symbols. ld/testsuite: * ld-arm/thumb2-bl-undefweak.d, ld-arm/thumb2-bl-undefweak.s: New. * ld-arm/arm-elf.exp: Run thumb2-bl-undefweak test. --- bfd/ChangeLog | 6 ++++++ bfd/elf32-arm.c | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'bfd') diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 8f01ddf..ea17423 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2008-11-25 Joseph Myers + + * elf32-arm.c (elf32_arm_final_link_relocate): Do not turn + branches to undefine weak symbols into branches to the next + instruction if creating PLT entries for those symbols. + 2008-11-25 Nick Clifton * elflink.c (is_reloc_section): New function. Returns true if the diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 5b78dc3..cd5a9bf 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -6360,8 +6360,9 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, int thumb2 = using_thumb2 (globals); /* A branch to an undefined weak symbol is turned into a jump to - the next instruction. */ - if (h && h->root.type == bfd_link_hash_undefweak) + the next instruction unless a PLT entry will be created. */ + if (h && h->root.type == bfd_link_hash_undefweak + && !(splt != NULL && h->plt.offset != (bfd_vma) -1)) { bfd_put_16 (input_bfd, 0xe000, hit_data); bfd_put_16 (input_bfd, 0xbf00, hit_data + 2); -- cgit v1.1