mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-03-07 13:39:43 +08:00
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.
This commit is contained in:
parent
e443398846
commit
13aa5ceb01
@ -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.
|
||||
|
36
bfd/plugin.c
36
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;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user