aboutsummaryrefslogtreecommitdiff
path: root/bfd/linker.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2010-12-13 01:06:16 +0000
committerAlan Modra <amodra@gmail.com>2010-12-13 01:06:16 +0000
commit0e144ba71eacb7e00bff43fc66b707bd7f029c44 (patch)
tree4621646a912052f57c9a89b413e6d3c0f37c857d /bfd/linker.c
parent8d4f41361d6fff0e879d97f2583dbcbec8bf50c0 (diff)
downloadgdb-0e144ba71eacb7e00bff43fc66b707bd7f029c44.zip
gdb-0e144ba71eacb7e00bff43fc66b707bd7f029c44.tar.gz
gdb-0e144ba71eacb7e00bff43fc66b707bd7f029c44.tar.bz2
* aoutx.h (aout_link_check_ar_symbols): Formatting.
* cofflink.c (coff_link_check_ar_symbols): Likewise. * elflink.c (elf_link_add_archive_symbols): Likewise. * pdp11.c (aout_link_check_ar_symbols): Likewise. * xcofflink.c (xcoff_link_check_dynamic_ar_symbols, xcoff_link_check_dynamic_ar_symbols): Likewise. * aoutx.h (aout_link_check_archive_element): Simplify code dealing with add_archive_element substitute BFD. * cofflink.c (coff_link_check_archive_element): Likewise. * ecoff.c (ecoff_link_check_archive_element): Likewise. (ecoff_link_add_archive_symbols): Likewise. * linker.c (generic_link_check_archive_element): Likewise. * pdp11.c (aout_link_check_archive_element): Likewise. * vms-alpha.c (alpha_vms_link_add_archive_symbols): Likewise. * xcofflink.c (xcoff_link_check_archive_element): Likewise. * aoutx.h (aout_link_check_archive_element): Free symbols from old bfd if !keep_memory. * cofflink.c (coff_link_check_archive_element): Likewise. * pdp11.c (aout_link_check_archive_element): Likewise. * xcofflink.c (xcoff_link_check_archive_element): Likewise.
Diffstat (limited to 'bfd/linker.c')
-rw-r--r--bfd/linker.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/bfd/linker.c b/bfd/linker.c
index fc52b51..2b52ba9 100644
--- a/bfd/linker.c
+++ b/bfd/linker.c
@@ -1223,20 +1223,18 @@ generic_link_check_archive_element (bfd *abfd,
{
bfd_size_type symcount;
asymbol **symbols;
- bfd *subsbfd = NULL;
+ bfd *oldbfd = abfd;
/* This object file defines this symbol, so pull it in. */
- if (! (*info->callbacks->add_archive_element)
- (info, abfd, bfd_asymbol_name (p), &subsbfd))
+ if (!(*info->callbacks
+ ->add_archive_element) (info, abfd, bfd_asymbol_name (p),
+ &abfd))
return FALSE;
/* Potentially, the add_archive_element hook may have set a
substitute BFD for us. */
- if (subsbfd)
- {
- abfd = subsbfd;
- if (!bfd_generic_link_read_symbols (abfd))
- return FALSE;
- }
+ if (abfd != oldbfd
+ && !bfd_generic_link_read_symbols (abfd))
+ return FALSE;
symcount = _bfd_generic_link_get_symcount (abfd);
symbols = _bfd_generic_link_get_symbols (abfd);
if (! generic_link_add_symbol_list (abfd, info, symcount,
@@ -1257,12 +1255,12 @@ generic_link_check_archive_element (bfd *abfd,
symbfd = h->u.undef.abfd;
if (symbfd == NULL)
{
- bfd *subsbfd = NULL;
/* This symbol was created as undefined from outside
BFD. We assume that we should link in the object
file. This is for the -u option in the linker. */
- if (! (*info->callbacks->add_archive_element)
- (info, abfd, bfd_asymbol_name (p), &subsbfd))
+ if (!(*info->callbacks
+ ->add_archive_element) (info, abfd, bfd_asymbol_name (p),
+ &abfd))
return FALSE;
/* Potentially, the add_archive_element hook may have set a
substitute BFD for us. But no symbols are going to get