From 74b08499dd5b951c06846bda4767f5f456912576 Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Wed, 1 Nov 2006 20:00:25 +0000 Subject: [PATCH] * elf32-arm.c (bfd_elf32_arm_process_before_allocation): Correct check for PLT usage. --- bfd/ChangeLog | 5 +++++ bfd/elf32-arm.c | 16 +++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b3ad7d6fb7f..2b3394a91ba 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2006-11-01 Alan Modra + + * elf32-arm.c (bfd_elf32_arm_process_before_allocation): Correct + check for PLT usage. + 2006-11-01 Daniel Jacobowitz * elfxx-mips.c (mips_elf_merge_gots): Always use maxcnt. diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 06adaeff7d1..2faac89db55 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -2934,9 +2934,19 @@ bfd_elf32_arm_process_before_allocation (bfd *abfd, if (h == NULL) continue; - /* If the call will go through a PLT entry then we do not need - glue. */ - if (globals->splt != NULL && h->plt.offset != (bfd_vma) -1) + /* If the call will go through a PLT entry then we do not + need glue. We have to do a fairly complicated check + here, since we don't determine this finally (by setting + plt.offset) until later; this test should be kept in sync + with elf32_arm_adjust_dynamic_symbol. */ + if (globals->splt != NULL + && h->plt.refcount > 0 + && (h->type == STT_FUNC + || h->type == STT_ARM_TFUNC + || h->needs_plt) + && !SYMBOL_CALLS_LOCAL (link_info, h) + && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT + && h->root.type == bfd_link_hash_undefweak)) continue; switch (r_type) -- 2.30.2