aboutsummaryrefslogtreecommitdiff
path: root/bfd/pdp11.c
diff options
context:
space:
mode:
Diffstat (limited to 'bfd/pdp11.c')
-rw-r--r--bfd/pdp11.c35
1 files changed, 22 insertions, 13 deletions
diff --git a/bfd/pdp11.c b/bfd/pdp11.c
index 08aab37..3821037 100644
--- a/bfd/pdp11.c
+++ b/bfd/pdp11.c
@@ -2601,8 +2601,8 @@ aout_link_check_ar_symbols (bfd *abfd,
but not if it is defined in the .text section. That
seems a bit crazy to me, and I haven't implemented it.
However, it might be correct. */
- if (! (*info->callbacks->add_archive_element)
- (info, abfd, name, subsbfd))
+ if (!(*info->callbacks
+ ->add_archive_element) (info, abfd, name, subsbfd))
return FALSE;
*pneeded = TRUE;
return TRUE;
@@ -2629,8 +2629,8 @@ aout_link_check_ar_symbols (bfd *abfd,
outside BFD. We assume that we should link
in the object file. This is done for the -u
option in the linker. */
- if (! (*info->callbacks->add_archive_element)
- (info, abfd, name, subsbfd))
+ if (!(*info->callbacks
+ ->add_archive_element) (info, abfd, name, subsbfd))
return FALSE;
*pneeded = TRUE;
return TRUE;
@@ -2682,27 +2682,36 @@ aout_link_check_archive_element (bfd *abfd,
struct bfd_link_info *info,
bfd_boolean *pneeded)
{
- bfd *subsbfd = NULL;
+ bfd *oldbfd;
+ bfd_boolean needed;
- if (! aout_get_external_symbols (abfd))
+ if (!aout_get_external_symbols (abfd))
return FALSE;
- if (! aout_link_check_ar_symbols (abfd, info, pneeded, &subsbfd))
+ oldbfd = abfd;
+ if (!aout_link_check_ar_symbols (abfd, info, pneeded, &abfd))
return FALSE;
- if (*pneeded)
+ needed = *pneeded;
+ if (needed)
{
/* Potentially, the add_archive_element hook may have set a
substitute BFD for us. */
- if (subsbfd && ! aout_get_external_symbols (subsbfd))
- return FALSE;
- if (! aout_link_add_symbols (subsbfd ? subsbfd : abfd, info))
+ if (abfd != oldbfd)
+ {
+ if (!info->keep_memory
+ && !aout_link_free_symbols (oldbfd))
+ return FALSE;
+ if (!aout_get_external_symbols (abfd))
+ return FALSE;
+ }
+ if (!aout_link_add_symbols (abfd, info))
return FALSE;
}
- if (! info->keep_memory || ! *pneeded)
+ if (!info->keep_memory || !needed)
{
- if (! aout_link_free_symbols (abfd))
+ if (!aout_link_free_symbols (abfd))
return FALSE;
}