Remove "collect" forms of generic linker add symbols functions
Nothing calls them and they were in the way of a bug fix. * linker.c (generic_link_add_symbols): Delete. Merge into.. (_bfd_generic_link_add_symbols): ..here. (generic_link_check_archive_element_no_collect): Delete. (generic_link_check_archive_element_collect): Likewise. (generic_link_add_object_symbols): Remove "collect" param. Update callers. (generic_link_add_symbol_list): Likewise. (generic_link_check_archive_element): Likewise. Call bfd_link_add_symbols rather than generic_link_add_object_symbols. * libbfd-in.h (_bfd_generic_link_add_symbols_collect): Delete. * libbfd.h: Regenerate.
This commit is contained in:
parent
865422fafa
commit
b9fc2576a1
|
@ -1,3 +1,17 @@
|
||||||
|
2016-12-23 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* linker.c (generic_link_add_symbols): Delete. Merge into..
|
||||||
|
(_bfd_generic_link_add_symbols): ..here.
|
||||||
|
(generic_link_check_archive_element_no_collect): Delete.
|
||||||
|
(generic_link_check_archive_element_collect): Likewise.
|
||||||
|
(generic_link_add_object_symbols): Remove "collect" param. Update
|
||||||
|
callers.
|
||||||
|
(generic_link_add_symbol_list): Likewise.
|
||||||
|
(generic_link_check_archive_element): Likewise. Call
|
||||||
|
bfd_link_add_symbols rather than generic_link_add_object_symbols.
|
||||||
|
* libbfd-in.h (_bfd_generic_link_add_symbols_collect): Delete.
|
||||||
|
* libbfd.h: Regenerate.
|
||||||
|
|
||||||
2016-12-23 Alan Modra <amodra@gmail.com>
|
2016-12-23 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR binutils/20464
|
PR binutils/20464
|
||||||
|
|
|
@ -613,12 +613,6 @@ extern void _bfd_generic_link_hash_table_free
|
||||||
extern bfd_boolean _bfd_generic_link_add_symbols
|
extern bfd_boolean _bfd_generic_link_add_symbols
|
||||||
(bfd *, struct bfd_link_info *);
|
(bfd *, struct bfd_link_info *);
|
||||||
|
|
||||||
/* Generic add symbol routine. This version is used by targets for
|
|
||||||
which the linker must collect constructors and destructors by name,
|
|
||||||
as the collect2 program does. */
|
|
||||||
extern bfd_boolean _bfd_generic_link_add_symbols_collect
|
|
||||||
(bfd *, struct bfd_link_info *);
|
|
||||||
|
|
||||||
/* Generic archive add symbol routine. */
|
/* Generic archive add symbol routine. */
|
||||||
extern bfd_boolean _bfd_generic_link_add_archive_symbols
|
extern bfd_boolean _bfd_generic_link_add_archive_symbols
|
||||||
(bfd *, struct bfd_link_info *,
|
(bfd *, struct bfd_link_info *,
|
||||||
|
|
|
@ -618,12 +618,6 @@ extern void _bfd_generic_link_hash_table_free
|
||||||
extern bfd_boolean _bfd_generic_link_add_symbols
|
extern bfd_boolean _bfd_generic_link_add_symbols
|
||||||
(bfd *, struct bfd_link_info *);
|
(bfd *, struct bfd_link_info *);
|
||||||
|
|
||||||
/* Generic add symbol routine. This version is used by targets for
|
|
||||||
which the linker must collect constructors and destructors by name,
|
|
||||||
as the collect2 program does. */
|
|
||||||
extern bfd_boolean _bfd_generic_link_add_symbols_collect
|
|
||||||
(bfd *, struct bfd_link_info *);
|
|
||||||
|
|
||||||
/* Generic archive add symbol routine. */
|
/* Generic archive add symbol routine. */
|
||||||
extern bfd_boolean _bfd_generic_link_add_archive_symbols
|
extern bfd_boolean _bfd_generic_link_add_archive_symbols
|
||||||
(bfd *, struct bfd_link_info *,
|
(bfd *, struct bfd_link_info *,
|
||||||
|
|
107
bfd/linker.c
107
bfd/linker.c
|
@ -403,21 +403,12 @@ SUBSUBSECTION
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static bfd_boolean generic_link_add_object_symbols
|
static bfd_boolean generic_link_add_object_symbols
|
||||||
(bfd *, struct bfd_link_info *, bfd_boolean collect);
|
(bfd *, struct bfd_link_info *);
|
||||||
static bfd_boolean generic_link_add_symbols
|
|
||||||
(bfd *, struct bfd_link_info *, bfd_boolean);
|
|
||||||
static bfd_boolean generic_link_check_archive_element_no_collect
|
|
||||||
(bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
|
|
||||||
bfd_boolean *);
|
|
||||||
static bfd_boolean generic_link_check_archive_element_collect
|
|
||||||
(bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
|
|
||||||
bfd_boolean *);
|
|
||||||
static bfd_boolean generic_link_check_archive_element
|
static bfd_boolean generic_link_check_archive_element
|
||||||
(bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
|
(bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
|
||||||
bfd_boolean *, bfd_boolean);
|
bfd_boolean *);
|
||||||
static bfd_boolean generic_link_add_symbol_list
|
static bfd_boolean generic_link_add_symbol_list
|
||||||
(bfd *, struct bfd_link_info *, bfd_size_type count, asymbol **,
|
(bfd *, struct bfd_link_info *, bfd_size_type count, asymbol **);
|
||||||
bfd_boolean);
|
|
||||||
static bfd_boolean generic_add_output_symbol
|
static bfd_boolean generic_add_output_symbol
|
||||||
(bfd *, size_t *psymalloc, asymbol *);
|
(bfd *, size_t *psymalloc, asymbol *);
|
||||||
static bfd_boolean default_data_link_order
|
static bfd_boolean default_data_link_order
|
||||||
|
@ -816,29 +807,6 @@ bfd_generic_link_read_symbols (bfd *abfd)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Generic function to add symbols to from an object file to the
|
|
||||||
global hash table. This version does not automatically collect
|
|
||||||
constructors by name. */
|
|
||||||
|
|
||||||
bfd_boolean
|
|
||||||
_bfd_generic_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
|
|
||||||
{
|
|
||||||
return generic_link_add_symbols (abfd, info, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Generic function to add symbols from an object file to the global
|
|
||||||
hash table. This version automatically collects constructors by
|
|
||||||
name, as the collect2 program does. It should be used for any
|
|
||||||
target which does not provide some other mechanism for setting up
|
|
||||||
constructors and destructors; these are approximately those targets
|
|
||||||
for which gcc uses collect2 and do not support stabs. */
|
|
||||||
|
|
||||||
bfd_boolean
|
|
||||||
_bfd_generic_link_add_symbols_collect (bfd *abfd, struct bfd_link_info *info)
|
|
||||||
{
|
|
||||||
return generic_link_add_symbols (abfd, info, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Indicate that we are only retrieving symbol values from this
|
/* Indicate that we are only retrieving symbol values from this
|
||||||
section. We want the symbols to act as though the values in the
|
section. We want the symbols to act as though the values in the
|
||||||
file are absolute. */
|
file are absolute. */
|
||||||
|
@ -862,26 +830,22 @@ _bfd_generic_copy_link_hash_symbol_type (bfd *abfd ATTRIBUTE_UNUSED,
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add symbols from an object file to the global hash table. */
|
/* Generic function to add symbols from an object file to the
|
||||||
|
global hash table. */
|
||||||
|
|
||||||
static bfd_boolean
|
bfd_boolean
|
||||||
generic_link_add_symbols (bfd *abfd,
|
_bfd_generic_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
|
||||||
struct bfd_link_info *info,
|
|
||||||
bfd_boolean collect)
|
|
||||||
{
|
{
|
||||||
bfd_boolean ret;
|
bfd_boolean ret;
|
||||||
|
|
||||||
switch (bfd_get_format (abfd))
|
switch (bfd_get_format (abfd))
|
||||||
{
|
{
|
||||||
case bfd_object:
|
case bfd_object:
|
||||||
ret = generic_link_add_object_symbols (abfd, info, collect);
|
ret = generic_link_add_object_symbols (abfd, info);
|
||||||
break;
|
break;
|
||||||
case bfd_archive:
|
case bfd_archive:
|
||||||
ret = (_bfd_generic_link_add_archive_symbols
|
ret = (_bfd_generic_link_add_archive_symbols
|
||||||
(abfd, info,
|
(abfd, info, generic_link_check_archive_element));
|
||||||
(collect
|
|
||||||
? generic_link_check_archive_element_collect
|
|
||||||
: generic_link_check_archive_element_no_collect)));
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
bfd_set_error (bfd_error_wrong_format);
|
bfd_set_error (bfd_error_wrong_format);
|
||||||
|
@ -895,8 +859,7 @@ generic_link_add_symbols (bfd *abfd,
|
||||||
|
|
||||||
static bfd_boolean
|
static bfd_boolean
|
||||||
generic_link_add_object_symbols (bfd *abfd,
|
generic_link_add_object_symbols (bfd *abfd,
|
||||||
struct bfd_link_info *info,
|
struct bfd_link_info *info)
|
||||||
bfd_boolean collect)
|
|
||||||
{
|
{
|
||||||
bfd_size_type symcount;
|
bfd_size_type symcount;
|
||||||
struct bfd_symbol **outsyms;
|
struct bfd_symbol **outsyms;
|
||||||
|
@ -905,7 +868,7 @@ generic_link_add_object_symbols (bfd *abfd,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
symcount = _bfd_generic_link_get_symcount (abfd);
|
symcount = _bfd_generic_link_get_symcount (abfd);
|
||||||
outsyms = _bfd_generic_link_get_symbols (abfd);
|
outsyms = _bfd_generic_link_get_symbols (abfd);
|
||||||
return generic_link_add_symbol_list (abfd, info, symcount, outsyms, collect);
|
return generic_link_add_symbol_list (abfd, info, symcount, outsyms);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Generic function to add symbols from an archive file to the global
|
/* Generic function to add symbols from an archive file to the global
|
||||||
|
@ -1044,47 +1007,14 @@ _bfd_generic_link_add_archive_symbols
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* See if we should include an archive element. This version is used
|
/* See if we should include an archive element. */
|
||||||
when we do not want to automatically collect constructors based on
|
|
||||||
the symbol name, presumably because we have some other mechanism
|
|
||||||
for finding them. */
|
|
||||||
|
|
||||||
static bfd_boolean
|
|
||||||
generic_link_check_archive_element_no_collect (bfd *abfd,
|
|
||||||
struct bfd_link_info *info,
|
|
||||||
struct bfd_link_hash_entry *h,
|
|
||||||
const char *name,
|
|
||||||
bfd_boolean *pneeded)
|
|
||||||
{
|
|
||||||
return generic_link_check_archive_element (abfd, info, h, name, pneeded,
|
|
||||||
FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* See if we should include an archive element. This version is used
|
|
||||||
when we want to automatically collect constructors based on the
|
|
||||||
symbol name, as collect2 does. */
|
|
||||||
|
|
||||||
static bfd_boolean
|
|
||||||
generic_link_check_archive_element_collect (bfd *abfd,
|
|
||||||
struct bfd_link_info *info,
|
|
||||||
struct bfd_link_hash_entry *h,
|
|
||||||
const char *name,
|
|
||||||
bfd_boolean *pneeded)
|
|
||||||
{
|
|
||||||
return generic_link_check_archive_element (abfd, info, h, name, pneeded,
|
|
||||||
TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* See if we should include an archive element. Optionally collect
|
|
||||||
constructors. */
|
|
||||||
|
|
||||||
static bfd_boolean
|
static bfd_boolean
|
||||||
generic_link_check_archive_element (bfd *abfd,
|
generic_link_check_archive_element (bfd *abfd,
|
||||||
struct bfd_link_info *info,
|
struct bfd_link_info *info,
|
||||||
struct bfd_link_hash_entry *h,
|
struct bfd_link_hash_entry *h,
|
||||||
const char *name ATTRIBUTE_UNUSED,
|
const char *name ATTRIBUTE_UNUSED,
|
||||||
bfd_boolean *pneeded,
|
bfd_boolean *pneeded)
|
||||||
bfd_boolean collect)
|
|
||||||
{
|
{
|
||||||
asymbol **pp, **ppend;
|
asymbol **pp, **ppend;
|
||||||
|
|
||||||
|
@ -1134,7 +1064,7 @@ generic_link_check_archive_element (bfd *abfd,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
/* Potentially, the add_archive_element hook may have set a
|
/* Potentially, the add_archive_element hook may have set a
|
||||||
substitute BFD for us. */
|
substitute BFD for us. */
|
||||||
return generic_link_add_object_symbols (abfd, info, collect);
|
return generic_link_add_object_symbols (abfd, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* P is a common symbol. */
|
/* P is a common symbol. */
|
||||||
|
@ -1192,16 +1122,13 @@ generic_link_check_archive_element (bfd *abfd,
|
||||||
|
|
||||||
/* Add the symbols from an object file to the global hash table. ABFD
|
/* Add the symbols from an object file to the global hash table. ABFD
|
||||||
is the object file. INFO is the linker information. SYMBOL_COUNT
|
is the object file. INFO is the linker information. SYMBOL_COUNT
|
||||||
is the number of symbols. SYMBOLS is the list of symbols. COLLECT
|
is the number of symbols. SYMBOLS is the list of symbols. */
|
||||||
is TRUE if constructors should be automatically collected by name
|
|
||||||
as is done by collect2. */
|
|
||||||
|
|
||||||
static bfd_boolean
|
static bfd_boolean
|
||||||
generic_link_add_symbol_list (bfd *abfd,
|
generic_link_add_symbol_list (bfd *abfd,
|
||||||
struct bfd_link_info *info,
|
struct bfd_link_info *info,
|
||||||
bfd_size_type symbol_count,
|
bfd_size_type symbol_count,
|
||||||
asymbol **symbols,
|
asymbol **symbols)
|
||||||
bfd_boolean collect)
|
|
||||||
{
|
{
|
||||||
asymbol **pp, **ppend;
|
asymbol **pp, **ppend;
|
||||||
|
|
||||||
|
@ -1247,7 +1174,7 @@ generic_link_add_symbol_list (bfd *abfd,
|
||||||
bh = NULL;
|
bh = NULL;
|
||||||
if (! (_bfd_generic_link_add_one_symbol
|
if (! (_bfd_generic_link_add_one_symbol
|
||||||
(info, abfd, name, p->flags, bfd_get_section (p),
|
(info, abfd, name, p->flags, bfd_get_section (p),
|
||||||
p->value, string, FALSE, collect, &bh)))
|
p->value, string, FALSE, FALSE, &bh)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
h = (struct generic_link_hash_entry *) bh;
|
h = (struct generic_link_hash_entry *) bh;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue