* elflink.c (elf_link_add_object_symbols): Improve error

message generated when a symbol is left unresolved because a
        --no-add-needed command line option has prevented the
        inclusion of the DSO defining it.
This commit is contained in:
Nick Clifton 2009-11-05 15:34:18 +00:00
parent cdcf946711
commit 3cbc5de02a
2 changed files with 27 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2009-11-05 Nick Clifton <nickc@redhat.com>
* elflink.c (elf_link_add_object_symbols): Improve error
message generated when a symbol is left unresolved because a
--no-add-needed command line option has prevented the
inclusion of the DSO defining it.
2009-11-03 Alan Modra <amodra@bigpond.net.au>
Ulrich Weigand <uweigand@de.ibm.com>

View File

@ -3877,6 +3877,7 @@ error_free_dyn:
bfd_boolean common;
unsigned int old_alignment;
bfd *old_bfd;
bfd * undef_bfd = NULL;
override = FALSE;
@ -4108,6 +4109,20 @@ error_free_dyn:
name = newname;
}
/* If this is a definition of a previously undefined symbol
make a note of the bfd that contained the reference in
case we need to refer to it later on in error messages. */
if (! bfd_is_und_section (sec))
{
h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
if (h != NULL
&& (h->root.type == bfd_link_hash_undefined
|| h->root.type == bfd_link_hash_undefweak)
&& h->root.u.undef.abfd)
undef_bfd = h->root.u.undef.abfd;
}
if (!_bfd_elf_merge_symbol (abfd, info, name, isym, &sec,
&value, &old_alignment,
sym_hash, &skip, &override,
@ -4447,9 +4462,12 @@ error_free_dyn:
if ((elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0)
{
(*_bfd_error_handler)
(_("%B: invalid DSO for symbol `%s' definition"),
(_("%B: undefined reference to symbol '%s'"),
undef_bfd == NULL ? info->output_bfd : undef_bfd, name);
(*_bfd_error_handler)
(_("note: '%s' is defined in DSO %B so try adding it to the linker command line"),
abfd, name);
bfd_set_error (bfd_error_bad_value);
bfd_set_error (bfd_error_invalid_operation);
goto error_free_vers;
}