This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH 2_20 2/3] * 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.
- From: Kirill Smelkov <kirr at landau dot phys dot spbu dot ru>
- To: binutils at sourceware dot org
- Cc: Roland McGrath <roland at frob dot com>, Nick Clifton <nickc at redhat dot com>, 591405 at bugs dot debian dot org
- Date: Sat, 7 Aug 2010 18:32:41 +0400
- Subject: [PATCH 2_20 2/3] * 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.
- References: <cover.1281189992.git.kirr@landau.phys.spbu.ru>
- References: <cover.1281189992.git.kirr@landau.phys.spbu.ru>
From: Nick Clifton <nickc@redhat.com>
commit f332f7169a8ffc0252aac24ddc1db5662642e763 on trunk
---
bfd/ChangeLog | 10 ++++++++++
bfd/elflink.c | 22 ++++++++++++++++++++--
2 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 202f4ad..3755cad 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,6 +1,16 @@
2010-08-07 Kirill Smelkov <kirr@landau.phys.spbu.ru>
Backport from mainline:
+ 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.
+
+2010-08-07 Kirill Smelkov <kirr@landau.phys.spbu.ru>
+
+ Backport from mainline:
2009-10-12 Roland McGrath <roland@frob.com>
* elflink.c (elf_link_add_object_symbols, _bfd_elf_merge_symbol):
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 4a348de..10eee8c 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -3866,6 +3866,7 @@ error_free_dyn:
bfd_boolean common;
unsigned int old_alignment;
bfd *old_bfd;
+ bfd * undef_bfd = NULL;
override = FALSE;
@@ -4097,6 +4098,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,
@@ -4437,9 +4452,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;
}
--
1.7.2.1.44.g721e7