(elf32_arm_adjust_dynamic_symbol): Update ELF_LINK_HASH_NEEDS_PLT logic.

This commit is contained in:
Nick Clifton 2002-09-19 14:59:51 +00:00
parent 4f2a7c9e31
commit 9d7404b762
2 changed files with 17 additions and 6 deletions

View File

@ -1,3 +1,8 @@
2002-09-19 Daniel Jacobowitz <drow@mvista.com>
* elf32-arm.h (elf32_arm_adjust_dynamic_symbol): Update
ELF_LINK_HASH_NEEDS_PLT logic.
2002-09-18 Daniel Jacobowitz <drow@mvista.com> 2002-09-18 Daniel Jacobowitz <drow@mvista.com>
* elfcode.h (elf_slurp_reloc_table_from_section): Check * elfcode.h (elf_slurp_reloc_table_from_section): Check

View File

@ -2966,16 +2966,22 @@ elf32_arm_adjust_dynamic_symbol (info, h)
if (h->type == STT_FUNC if (h->type == STT_FUNC
|| (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0) || (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
{ {
/* If we link a program (not a DSO), we'll get rid of unnecessary
PLT entries; we point to the actual symbols -- even for pic
relocs, because a program built with -fpic should have the same
result as one built without -fpic, specifically considering weak
symbols.
FIXME: m68k and i386 differ here, for unclear reasons. */
if (! info->shared if (! info->shared
&& (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0)
&& (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) == 0)
{ {
/* This case can occur if we saw a PLT32 reloc in an input /* This case can occur if we saw a PLT32 reloc in an input
file, but the symbol was never referred to by a dynamic file, but the symbol was not defined by a dynamic object.
object. In such a case, we don't actually need to build In such a case, we don't actually need to build a
a procedure linkage table, and we can just do a PC32 procedure linkage table, and we can just do a PC32 reloc
reloc instead. */ instead. */
BFD_ASSERT ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0); BFD_ASSERT ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0);
h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
return true; return true;
} }