[binutils-gdb] Silence warnings about incompatible plugins.

Nick Clifton nickc@sourceware.org
Fri Jun 19 09:26:42 GMT 2020


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=13aa5ceb01cc94a0e617f397c0c5434fc22bb1e5

commit 13aa5ceb01cc94a0e617f397c0c5434fc22bb1e5
Author: Nick Clifton <nickc@redhat.com>
Date:   Fri Jun 19 10:25:43 2020 +0100

    Silence warnings about incompatible plugins.
    
    I have been looking at a Fedora bug report[1] from a user who was
    receiving warning messages from the BFD library about incompatible
    plugins.  It turns out that they had both 32-bit and 64-bit versions
    of the same plugin installed, and the BFD library was attempting to
    load all of them.
    
    After thinking about it for a while, it seemed to me that the simplest
    solution was to not warn about incompatible plugins whilst attempting
    to create a list of viable plugins.
    
    [1]: https://bugzilla.redhat.com/show_bug.cgi?id=1836618
    
            * plugin.c (try_load_plugin): Suppress the error message about
            being unable to open a plugin if creating a list of viable
            plugins.

Diff:
---
 bfd/ChangeLog |  6 ++++++
 bfd/plugin.c  | 36 +++++++++++++++++++++---------------
 2 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 52b2df63649..6996d040f90 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2020-06-19  Nick Clifton  <nickc@redhat.com>
+
+	* plugin.c (try_load_plugin): Suppress the error message about
+	being unable to open a plugin if creating a list of viable
+	plugins.
+
 2020-06-16  Alan Modra  <amodra@gmail.com>
 
 	* aout-tic30.c: Delete file.
diff --git a/bfd/plugin.c b/bfd/plugin.c
index 97f1c9c7731..5ed87578091 100644
--- a/bfd/plugin.c
+++ b/bfd/plugin.c
@@ -249,17 +249,18 @@ try_claim (bfd *abfd)
   return claimed;
 }
 
-static int
-try_load_plugin (const char *pname,
-		 struct plugin_list_entry *plugin_list_iter,
-		 bfd *abfd, bfd_boolean build_list_p)
+static bfd_boolean
+try_load_plugin (const char *                pname,
+		 struct plugin_list_entry *  plugin_list_iter,
+		 bfd *                       abfd,
+		 bfd_boolean                 build_list_p)
 {
   void *plugin_handle;
   struct ld_plugin_tv tv[5];
   int i;
   ld_plugin_onload onload;
   enum ld_plugin_status status;
-  int result = 0;
+  bfd_boolean result = FALSE;
 
   /* NB: Each object is independent.  Reuse the previous plugin from
      the last run will lead to wrong result.  */
@@ -273,15 +274,20 @@ try_load_plugin (const char *pname,
   plugin_handle = dlopen (pname, RTLD_NOW);
   if (!plugin_handle)
     {
-      _bfd_error_handler ("Failed to load plugin '%s', reason: %s\n",
-			  pname, dlerror ());
-      return 0;
+      /* If we are building a list of viable plugins, then
+	 we do not bother the user with the details of any
+	 plugins that cannot be loaded.  */
+      if (! build_list_p)
+	_bfd_error_handler ("Failed to load plugin '%s', reason: %s\n",
+			    pname, dlerror ());
+      return FALSE;
     }
 
   if (plugin_list_iter == NULL)
     {
       size_t length_plugin_name = strlen (pname) + 1;
       char *plugin_name = bfd_malloc (length_plugin_name);
+
       if (plugin_name == NULL)
 	goto short_circuit;
       plugin_list_iter = bfd_malloc (sizeof *plugin_list_iter);
@@ -342,7 +348,7 @@ try_load_plugin (const char *pname,
     goto short_circuit;
 
   abfd->plugin_format = bfd_plugin_yes;
-  result = 1;
+  result = TRUE;
 
  short_circuit:
   dlclose (plugin_handle);
@@ -446,7 +452,7 @@ build_plugin_list (bfd *abfd)
 
 		  full_name = concat (plugin_dir, "/", ent->d_name, NULL);
 		  if (stat (full_name, &st) == 0 && S_ISREG (st.st_mode))
-		    try_load_plugin (full_name, NULL, abfd, TRUE);
+		    (void) try_load_plugin (full_name, NULL, abfd, TRUE);
 		  free (full_name);
 		}
 	      closedir (d);
@@ -458,7 +464,7 @@ build_plugin_list (bfd *abfd)
   has_plugin_list = plugin_list != NULL;
 }
 
-static int
+static bfd_boolean
 load_plugin (bfd *abfd)
 {
   struct plugin_list_entry *plugin_list_iter;
@@ -467,17 +473,17 @@ load_plugin (bfd *abfd)
     return try_load_plugin (plugin_name, plugin_list, abfd, FALSE);
 
   if (plugin_program_name == NULL)
-    return 0;
+    return FALSE;
 
   build_plugin_list (abfd);
 
   for (plugin_list_iter = plugin_list;
        plugin_list_iter;
        plugin_list_iter = plugin_list_iter->next)
-    if (try_load_plugin (NULL, plugin_list_iter, abfd, FALSE))
-      return 1;
+    if (try_load_plugin (NULL, plugin_list_iter, abfd,FALSE))
+      return TRUE;
 
-  return 0;
+  return FALSE;
 }


More information about the Binutils-cvs mailing list