|
Nick Clifton |
58ff63 |
diff -rup binutils-2.25.1.orig/bfd/plugin.c binutils-2.25.1/bfd/plugin.c
|
|
Nick Clifton |
58ff63 |
--- binutils-2.25.1.orig/bfd/plugin.c 2015-11-05 11:40:58.400941923 +0000
|
|
Nick Clifton |
58ff63 |
+++ binutils-2.25.1/bfd/plugin.c 2015-11-05 15:50:37.046908541 +0000
|
|
Nick Clifton |
58ff63 |
@@ -135,8 +135,9 @@ static asection bfd_plugin_fake_common_s
|
|
Nick Clifton |
58ff63 |
= BFD_FAKE_SECTION (bfd_plugin_fake_common_section, SEC_IS_COMMON, 0,
|
|
Nick Clifton |
58ff63 |
NULL, 0);
|
|
Nick Clifton |
58ff63 |
|
|
Nick Clifton |
58ff63 |
-/* Get symbols from object only section. */
|
|
Nick Clifton |
58ff63 |
+static bfd_boolean in_get_symbols = FALSE;
|
|
Nick Clifton |
58ff63 |
|
|
Nick Clifton |
58ff63 |
+/* Get symbols from object only section. */
|
|
Nick Clifton |
58ff63 |
static void
|
|
Nick Clifton |
58ff63 |
bfd_plugin_get_symbols_in_object_only (bfd *abfd)
|
|
Nick Clifton |
58ff63 |
{
|
|
Nick Clifton |
58ff63 |
@@ -153,7 +154,8 @@ bfd_plugin_get_symbols_in_object_only (b
|
|
Nick Clifton |
58ff63 |
if (abfd->sections == NULL && abfd->my_archive == NULL)
|
|
Nick Clifton |
58ff63 |
{
|
|
Nick Clifton |
58ff63 |
nbfd = bfd_openr (abfd->filename, NULL);
|
|
Nick Clifton |
58ff63 |
- if (nbfd == NULL || !bfd_check_format (nbfd, bfd_object))
|
|
Nick Clifton |
58ff63 |
+
|
|
Nick Clifton |
58ff63 |
+ if (nbfd == NULL)
|
|
Nick Clifton |
58ff63 |
{
|
|
Nick Clifton |
58ff63 |
(*_bfd_error_handler)
|
|
Nick Clifton |
58ff63 |
(_("%s: failed to open to extract object only section: %s"),
|
|
Nick Clifton |
58ff63 |
@@ -161,6 +163,22 @@ bfd_plugin_get_symbols_in_object_only (b
|
|
Nick Clifton |
58ff63 |
bfd_close (nbfd);
|
|
Nick Clifton |
58ff63 |
return;
|
|
Nick Clifton |
58ff63 |
}
|
|
Nick Clifton |
58ff63 |
+ else
|
|
Nick Clifton |
58ff63 |
+ {
|
|
Nick Clifton |
58ff63 |
+ /* Note that we are calling bfd_check_format from inside
|
|
Nick Clifton |
58ff63 |
+ bfd_plugin_get_symbols_in_object_only. bfd_check_format
|
|
Nick Clifton |
58ff63 |
+ will iterate through the known list of formats, including
|
|
Nick Clifton |
58ff63 |
+ the "plugin" format, and we do not want to end up in a
|
|
Nick Clifton |
58ff63 |
+ recursive loop. */
|
|
Nick Clifton |
58ff63 |
+ in_get_symbols = TRUE;
|
|
Nick Clifton |
58ff63 |
+ if (!bfd_check_format (nbfd, bfd_object))
|
|
Nick Clifton |
58ff63 |
+ {
|
|
Nick Clifton |
58ff63 |
+ in_get_symbols = FALSE;
|
|
Nick Clifton |
58ff63 |
+ bfd_close (nbfd);
|
|
Nick Clifton |
58ff63 |
+ return;
|
|
Nick Clifton |
58ff63 |
+ }
|
|
Nick Clifton |
58ff63 |
+ in_get_symbols = FALSE;
|
|
Nick Clifton |
58ff63 |
+ }
|
|
Nick Clifton |
58ff63 |
}
|
|
Nick Clifton |
58ff63 |
else
|
|
Nick Clifton |
58ff63 |
{
|
|
Nick Clifton |
e37b50 |
@@ -515,6 +515,12 @@ load_plugin (bfd *abfd)
|
|
Nick Clifton |
58ff63 |
static const bfd_target *
|
|
Nick Clifton |
58ff63 |
bfd_plugin_object_p (bfd *abfd)
|
|
Nick Clifton |
58ff63 |
{
|
|
Nick Clifton |
58ff63 |
+ /* If in_get_symbols is TRUE then this function is being called from
|
|
Nick Clifton |
58ff63 |
+ bfd_check_format. We do not want to iterate again - we will just
|
|
Nick Clifton |
58ff63 |
+ end up in an infinite loop. So return NULL here. */
|
|
Nick Clifton |
58ff63 |
+ if (in_get_symbols)
|
|
Nick Clifton |
58ff63 |
+ return NULL;
|
|
Nick Clifton |
58ff63 |
+
|
|
Nick Clifton |
e37b50 |
if (ld_plugin_object_p)
|
|
Nick Clifton |
e37b50 |
return ld_plugin_object_p (abfd);
|
|
Nick Clifton |
58ff63 |
|