Skip to content

Commit

Permalink
* aoutx.h (aout_link_check_ar_symbols): Formatting.
Browse files Browse the repository at this point in the history
	* 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.
  • Loading branch information
amodra committed Dec 13, 2010
1 parent 8d4f413 commit 0e144ba
Show file tree
Hide file tree
Showing 9 changed files with 146 additions and 98 deletions.
25 changes: 25 additions & 0 deletions bfd/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,28 @@
2010-12-13 Alan Modra <[email protected]>

* 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.

2010-12-13 Alan Modra <[email protected]>

* plugin.c (bfd_plugin_mkobject): Delete.
Expand Down
43 changes: 26 additions & 17 deletions bfd/aoutx.h
Original file line number Diff line number Diff line change
Expand Up @@ -3305,8 +3305,8 @@ aout_link_check_ar_symbols (bfd *abfd,
continue;
}

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;
Expand All @@ -3333,8 +3333,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;
Expand All @@ -3343,8 +3343,8 @@ aout_link_check_ar_symbols (bfd *abfd,
symbol. It is already on the undefs list. */
h->type = bfd_link_hash_common;
h->u.c.p = (struct bfd_link_hash_common_entry *)
bfd_hash_allocate (&info->hash->table,
sizeof (struct bfd_link_hash_common_entry));
bfd_hash_allocate (&info->hash->table,
sizeof (struct bfd_link_hash_common_entry));
if (h->u.c.p == NULL)
return FALSE;

Expand Down Expand Up @@ -3382,8 +3382,8 @@ aout_link_check_ar_symbols (bfd *abfd,
it if the current link symbol is common. */
if (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;
Expand All @@ -3404,27 +3404,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;
}

Expand Down
47 changes: 28 additions & 19 deletions bfd/cofflink.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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))
return FALSE;

if (! coff_link_check_ar_symbols (abfd, info, pneeded, &subsbfd))
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))
if (!_bfd_coff_get_external_symbols (abfd))
return FALSE;

if (*pneeded
&& ! coff_link_add_symbols (subsbfd ? subsbfd : abfd, info))
oldbfd = abfd;
if (!coff_link_check_ar_symbols (abfd, info, pneeded, &abfd))
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;
}

Expand Down
25 changes: 10 additions & 15 deletions bfd/ecoff.c
Original file line number Diff line number Diff line change
Expand Up @@ -3600,7 +3600,7 @@ ecoff_link_check_archive_element (bfd *abfd,
EXTR esym;
bfd_boolean def;
const char *name;
bfd *subsbfd;
bfd *oldbfd;
struct bfd_link_hash_entry *h;

(*swap_ext_in) (abfd, (void *) ext_ptr, &esym);
Expand Down Expand Up @@ -3645,18 +3645,17 @@ ecoff_link_check_archive_element (bfd *abfd,
continue;

/* Include this element. */
subsbfd = NULL;
if (! (*info->callbacks->add_archive_element)
(info, abfd, name, &subsbfd))
oldbfd = abfd;
if (!(*info->callbacks
->add_archive_element) (info, abfd, name, &abfd))
goto error_return;
/* Potentially, the add_archive_element hook may have set a
substitute BFD for us. */
if (subsbfd
if (abfd != oldbfd
&& !reread_ext_syms_and_strs (&symhdr, &external_ext_size, &esize,
&external_ext, &ssext, subsbfd, backend))
&external_ext, &ssext, abfd, backend))
goto error_return;
if (! ecoff_link_add_externals (subsbfd ? subsbfd : abfd, info,
external_ext, ssext))
if (! ecoff_link_add_externals (abfd, info, external_ext, ssext))
goto error_return;

*pneeded = TRUE;
Expand Down Expand Up @@ -3733,7 +3732,6 @@ ecoff_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
unsigned int file_offset;
const char *name;
bfd *element;
bfd *subsbfd;

h = *pundef;

Expand Down Expand Up @@ -3820,13 +3818,10 @@ ecoff_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
/* Unlike the generic linker, we know that this element provides
a definition for an undefined symbol and we know that we want
to include it. We don't need to check anything. */
subsbfd = NULL;
if (! (*info->callbacks->add_archive_element)
(info, element, name, &subsbfd))
if (!(*info->callbacks
->add_archive_element) (info, element, name, &element))
return FALSE;
/* Potentially, the add_archive_element hook may have set a
substitute BFD for us. */
if (! ecoff_link_add_object_symbols (subsbfd ? subsbfd : element, info))
if (! ecoff_link_add_object_symbols (element, info))
return FALSE;

pundef = &(*pundef)->u.undef.next;
Expand Down
6 changes: 3 additions & 3 deletions bfd/elflink.c
Original file line number Diff line number Diff line change
Expand Up @@ -5073,10 +5073,10 @@ elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)

undefs_tail = info->hash->undefs_tail;

if (! (*info->callbacks->add_archive_element)
(info, element, symdef->name, &element))
if (!(*info->callbacks
->add_archive_element) (info, element, symdef->name, &element))
goto error_return;
if (! bfd_link_add_symbols (element, info))
if (!bfd_link_add_symbols (element, info))
goto error_return;

/* If there are any new undefined symbols, we need to make
Expand Down
22 changes: 10 additions & 12 deletions bfd/linker.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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
Expand Down
35 changes: 22 additions & 13 deletions bfd/pdp11.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
}

Expand Down
11 changes: 3 additions & 8 deletions bfd/vms-alpha.c
Original file line number Diff line number Diff line change
Expand Up @@ -8220,7 +8220,6 @@ alpha_vms_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
symindex symidx;
bfd *element;
bfd *orig_element;
bfd *subsbfd;

h = *pundef;
next_pundef = &(*pundef)->u.undef.next;
Expand Down Expand Up @@ -8278,14 +8277,10 @@ alpha_vms_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
/* Unlike the generic linker, we know that this element provides
a definition for an undefined symbol and we know that we want
to include it. We don't need to check anything. */
subsbfd = NULL;
if (! (*info->callbacks->add_archive_element)
(info, element, h->root.string, &subsbfd))
if (!(*info->callbacks
->add_archive_element) (info, element, h->root.string, &element))
return FALSE;
/* Potentially, the add_archive_element hook may have set a
substitute BFD for us. */
if (! alpha_vms_link_add_object_symbols (subsbfd ? subsbfd : element,
info))
if (!alpha_vms_link_add_object_symbols (element, info))
return FALSE;

orig_element->archive_pass = pass;
Expand Down
Loading

0 comments on commit 0e144ba

Please sign in to comment.