diff options
author | Nick Clifton <nickc@redhat.com> | 2020-06-19 10:25:43 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2020-06-19 10:25:43 +0100 |
commit | 13aa5ceb01cc94a0e617f397c0c5434fc22bb1e5 (patch) | |
tree | 61e0caac198832bef13da17ce3ba1ff35e71ffcf | |
parent | e443398846ee51d66b3df2524f7e0ddcb26cdae3 (diff) | |
download | gdb-13aa5ceb01cc94a0e617f397c0c5434fc22bb1e5.zip gdb-13aa5ceb01cc94a0e617f397c0c5434fc22bb1e5.tar.gz gdb-13aa5ceb01cc94a0e617f397c0c5434fc22bb1e5.tar.bz2 |
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.
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/plugin.c | 36 |
2 files changed, 27 insertions, 15 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 52b2df6..6996d04 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 97f1c9c..5ed8757 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; } |