* 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.
This commit is contained in:
Alan Modra
2010-12-13 01:06:16 +00:00
parent 8d4f41361d
commit 0e144ba71e
9 changed files with 146 additions and 98 deletions

View File

@@ -244,8 +244,8 @@ coff_link_check_ar_symbols (bfd *abfd,
if (h != (struct bfd_link_hash_entry *) NULL
&& h->type == bfd_link_hash_undefined)
{
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;
@@ -269,29 +269,38 @@ coff_link_check_archive_element (bfd *abfd,
struct bfd_link_info *info,
bfd_boolean *pneeded)
{
bfd *subsbfd = NULL;
bfd *oldbfd;
bfd_boolean needed;
if (! _bfd_coff_get_external_symbols (abfd))
if (!_bfd_coff_get_external_symbols (abfd))
return FALSE;
if (! coff_link_check_ar_symbols (abfd, info, pneeded, &subsbfd))
oldbfd = abfd;
if (!coff_link_check_ar_symbols (abfd, info, pneeded, &abfd))
return FALSE;
/* Potentially, the add_archive_element hook may have set a
substitute BFD for us. */
if (*pneeded
&& subsbfd
&& ! _bfd_coff_get_external_symbols (subsbfd))
return FALSE;
if (*pneeded
&& ! coff_link_add_symbols (subsbfd ? subsbfd : abfd, info))
return FALSE;
if ((! info->keep_memory || ! *pneeded)
&& ! _bfd_coff_free_symbols (abfd))
return FALSE;
needed = *pneeded;
if (needed)
{
/* Potentially, the add_archive_element hook may have set a
substitute BFD for us. */
if (abfd != oldbfd)
{
if (!info->keep_memory
&& !_bfd_coff_free_symbols (oldbfd))
return FALSE;
if (!_bfd_coff_get_external_symbols (abfd))
return FALSE;
}
if (!coff_link_add_symbols (abfd, info))
return FALSE;
}
if (!info->keep_memory || !needed)
{
if (!_bfd_coff_free_symbols (abfd))
return FALSE;
}
return TRUE;
}