Author: dim
Date: Tue Dec  2 01:30:53 2014
New Revision: 275386
URL: https://svnweb.freebsd.org/changeset/base/275386

Log:
  Let GNU ld be less obscure about missing symbols and DSOs.  If the BFD
  object looks like a typical shared library, suggest adding '-l<foo>',
  where <foo> has the 'lib' prefix and '.so<bar>' or '.a' suffix removed.
  
  Otherwise, suggest adding '-l:<foo>', where <foo> is the full DT_SONAME.
  
  Submitted by: Conrad Meyer <conrad.me...@isilon.com>
  Sponsored by: EMC / Isilon storage division
  Reviewed by:  emaste
  PR:           194296
  MFC after:    1 week
  Differential Revision: https://reviews.freebsd.org/D1152

Modified:
  head/contrib/binutils/bfd/elflink.c
  head/contrib/binutils/bfd/po/bfd.pot

Modified: head/contrib/binutils/bfd/elflink.c
==============================================================================
--- head/contrib/binutils/bfd/elflink.c Tue Dec  2 00:23:26 2014        
(r275385)
+++ head/contrib/binutils/bfd/elflink.c Tue Dec  2 01:30:53 2014        
(r275386)
@@ -4356,9 +4356,38 @@ elf_link_add_object_symbols (bfd *abfd, 
                 --no-add-needed is used.  */
              if ((elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0)
                {
+                 bfd_boolean looks_soish;
+                 const char *print_name;
+                 int print_len;
+                 size_t len, lend = 0;
+
+                 looks_soish = FALSE;
+                 print_name = soname;
+                 print_len = strlen(soname);
+                 if (strncmp(soname, "lib", 3) == 0)
+                   {
+                     len = print_len;
+                     if (len > 5 && strcmp(soname + len - 2, ".a") == 0)
+                       lend = len - 5;
+                     else
+                       {
+                         while (len > 6 && (ISDIGIT(soname[len - 1]) ||
+                                            soname[len - 1] == '.'))
+                           len--;
+                         if (strncmp(soname + len - 3, ".so", 3) == 0)
+                           lend = len - 6;
+                       }
+                     if (lend != 0)
+                       {
+                         print_name = soname + 3;
+                         print_len = lend;
+                         looks_soish = TRUE;
+                       }
+                   }
+
                  (*_bfd_error_handler)
-                   (_("%B: invalid DSO for symbol `%s' definition"),
-                   abfd, name);
+                   (_("undefined reference to symbol `%s' (try adding 
-l%s%.*s)"),
+                   name, looks_soish? "" : ":", print_len, print_name);
                  bfd_set_error (bfd_error_bad_value);
                  goto error_free_vers;
                }

Modified: head/contrib/binutils/bfd/po/bfd.pot
==============================================================================
--- head/contrib/binutils/bfd/po/bfd.pot        Tue Dec  2 00:23:26 2014        
(r275385)
+++ head/contrib/binutils/bfd/po/bfd.pot        Tue Dec  2 01:30:53 2014        
(r275386)
@@ -2438,9 +2438,9 @@ msgstr ""
 msgid "Warning: size of symbol `%s' changed from %lu in %B to %lu in %B"
 msgstr ""
 
-#: elflink.c:4309
+#: elflink.c:4389
 #, c-format
-msgid "%B: invalid DSO for symbol `%s' definition"
+msgid "undefined reference to symbol `%s' (try adding -l%s%.*s)"
 msgstr ""
 
 #: elflink.c:5535
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to