* elf32-m68k.c (elf_m68k_adjust_dynamic_symbol): Use

SYMBOL_CALLS_LOCAL and check for undefweak symbols with
	non-default visibility.
This commit is contained in:
Andreas Schwab 2004-11-07 10:51:45 +00:00
parent 66aa377dce
commit 9dfe873851
2 changed files with 13 additions and 14 deletions

View file

@ -1,3 +1,9 @@
2004-11-07 Andreas Schwab <schwab@suse.de>
* elf32-m68k.c (elf_m68k_adjust_dynamic_symbol): Use
SYMBOL_CALLS_LOCAL and check for undefweak symbols with
non-default visibility.
2004-11-01 Mark Mitchell <mark@codesourcery.com> 2004-11-01 Mark Mitchell <mark@codesourcery.com>
* elf32-arm.c (elf32_arm_symbian_begin_write_processing): Clear * elf32-arm.c (elf32_arm_symbian_begin_write_processing): Clear

View file

@ -936,9 +936,10 @@ elf_m68k_adjust_dynamic_symbol (info, h)
if (h->type == STT_FUNC if (h->type == STT_FUNC
|| h->needs_plt) || h->needs_plt)
{ {
if (! info->shared if ((h->plt.refcount <= 0
&& !h->def_dynamic || SYMBOL_CALLS_LOCAL (info, h)
&& !h->ref_dynamic || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
&& h->root.type == bfd_link_hash_undefweak))
/* We must always create the plt entry if it was referenced /* We must always create the plt entry if it was referenced
by a PLTxxO relocation. In this case we already recorded by a PLTxxO relocation. In this case we already recorded
it as a dynamic symbol. */ it as a dynamic symbol. */
@ -946,19 +947,11 @@ elf_m68k_adjust_dynamic_symbol (info, h)
{ {
/* This case can occur if we saw a PLTxx reloc in an input /* This case can occur if we saw a PLTxx reloc in an input
file, but the symbol was never referred to by a dynamic file, but the symbol was never referred to by a dynamic
object. In such a case, we don't actually need to build object, or if all references were garbage collected. In
a procedure linkage table, and we can just do a PCxx such a case, we don't actually need to build a procedure
reloc instead. */ linkage table, and we can just do a PCxx reloc instead. */
BFD_ASSERT (h->needs_plt);
h->plt.offset = (bfd_vma) -1; h->plt.offset = (bfd_vma) -1;
return TRUE;
}
/* GC may have rendered this entry unused. */
if (h->plt.refcount <= 0)
{
h->needs_plt = 0; h->needs_plt = 0;
h->plt.offset = (bfd_vma) -1;
return TRUE; return TRUE;
} }