* elflink.h (elf_link_add_object_symbols): Don't issue a warning

about a symbol defined in a dynamic object if it has already been
	defined in a regular object.
This commit is contained in:
Ian Lance Taylor
1997-02-15 00:12:47 +00:00
parent f5ed78de1f
commit 54626f1aa4
2 changed files with 66 additions and 4 deletions

View File

@@ -272,6 +272,38 @@ elf_link_add_object_symbols (abfd, info)
char *msg;
bfd_size_type sz;
name += sizeof ".gnu.warning." - 1;
/* If this is a shared object, then look up the symbol
in the hash table. If it is there, and it is already
been defined, then we will not be using the entry
from this shared object, so we don't need to warn.
FIXME: If we see the definition in a regular object
later on, we will warn, but we shouldn't. The only
fix is to keep track of what warnings we are supposed
to emit, and then handle them all at the end of the
link. */
if ((abfd->flags & DYNAMIC) != 0
&& abfd->xvec == info->hash->creator)
{
struct elf_link_hash_entry *h;
h = elf_link_hash_lookup (elf_hash_table (info), name,
false, false, true);
/* FIXME: What about bfd_link_hash_common? */
if (h != NULL
&& (h->root.type == bfd_link_hash_defined
|| h->root.type == bfd_link_hash_defweak))
{
/* We don't want to issue this warning. Clobber
the section size so that the warning does not
get copied into the output file. */
s->_raw_size = 0;
continue;
}
}
sz = bfd_section_size (abfd, s);
msg = (char *) bfd_alloc (abfd, sz);
if (msg == NULL)
@@ -281,10 +313,8 @@ elf_link_add_object_symbols (abfd, info)
goto error_return;
if (! (_bfd_generic_link_add_one_symbol
(info, abfd,
name + sizeof ".gnu.warning." - 1,
BSF_WARNING, s, (bfd_vma) 0, msg, false, collect,
(struct bfd_link_hash_entry **) NULL)))
(info, abfd, name, BSF_WARNING, s, (bfd_vma) 0, msg,
false, collect, (struct bfd_link_hash_entry **) NULL)))
goto error_return;
if (! info->relocateable)