Check if a symbol is hidden by linker script.
bfd/ 2011-09-15 H.J. Lu <hongjiu.lu@intel.com> PR ld/12975 * bfd-in.h (bfd_elf_size_dynamic_sections): Remove pointer to struct bfd_elf_version_tree. * elflink.c (elf_info_failed): Remove verdefs. (_bfd_elf_export_symbol): Updated. _bfd_elf_link_assign_sym_version): Likewise. (bfd_elf_size_dynamic_sections): Remove pointer to struct bfd_elf_version_tree. Updated. (bfd_elf_gc_mark_dynamic_ref_symbol): Check if a symbol is hidden by linker script. * linker.c (bfd_hide_sym_by_version): New. * bfd-in2.h: Regenerated. include/ 2011-09-15 H.J. Lu <hongjiu.lu@intel.com> PR ld/12975 * bfdlink.h (bfd_link_info): Add version_info. ld/ 2011-09-15 H.J. Lu <hongjiu.lu@intel.com> PR ld/12975 * ldlang.c (lang_elf_version_info): Removed. (lang_register_vers_node): Replace lang_elf_version_info with link_info.version_info. (lang_add_vers_depend): Likewise. * pe-dll.c (process_def_file_and_drectve): Likewise. * emultempl/solaris2.em (elf_solaris2_before_allocation): Likewise. * ldlang.h (lang_elf_version_info): Removed. * plugin.c (is_visible_from_outside): Check if symbol is hidden by version script. * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Remove lang_elf_version_info. ld/testsuite/ 2011-09-15 H.J. Lu <hongjiu.lu@intel.com> PR ld/12975 * ld-elf/pr12975.d: New. * ld-elf/pr12975.s: Likewise. * ld-elf/pr12975.t: Likewise.
This commit is contained in:
parent
d0bc107f79
commit
fd91d41947
18 changed files with 148 additions and 53 deletions
18
ld/ldlang.c
18
ld/ldlang.c
|
@ -7458,10 +7458,6 @@ lang_leave_overlay (etree_type *lma_expr,
|
|||
|
||||
/* Version handling. This is only useful for ELF. */
|
||||
|
||||
/* This global variable holds the version tree that we build. */
|
||||
|
||||
struct bfd_elf_version_tree *lang_elf_version_info;
|
||||
|
||||
/* If PREV is NULL, return first version pattern matching particular symbol.
|
||||
If PREV is non-NULL, return first version pattern matching particular
|
||||
symbol after PREV (previously returned by lang_vers_match). */
|
||||
|
@ -7803,8 +7799,8 @@ lang_register_vers_node (const char *name,
|
|||
if (name == NULL)
|
||||
name = "";
|
||||
|
||||
if ((name[0] == '\0' && lang_elf_version_info != NULL)
|
||||
|| (lang_elf_version_info && lang_elf_version_info->name[0] == '\0'))
|
||||
if (link_info.version_info != NULL
|
||||
&& (name[0] == '\0' || link_info.version_info->name[0] == '\0'))
|
||||
{
|
||||
einfo (_("%X%P: anonymous version tag cannot be combined"
|
||||
" with other version tags\n"));
|
||||
|
@ -7813,7 +7809,7 @@ lang_register_vers_node (const char *name,
|
|||
}
|
||||
|
||||
/* Make sure this node has a unique name. */
|
||||
for (t = lang_elf_version_info; t != NULL; t = t->next)
|
||||
for (t = link_info.version_info; t != NULL; t = t->next)
|
||||
if (strcmp (t->name, name) == 0)
|
||||
einfo (_("%X%P: duplicate version tag `%s'\n"), name);
|
||||
|
||||
|
@ -7825,7 +7821,7 @@ lang_register_vers_node (const char *name,
|
|||
|
||||
for (e1 = version->globals.list; e1 != NULL; e1 = e1->next)
|
||||
{
|
||||
for (t = lang_elf_version_info; t != NULL; t = t->next)
|
||||
for (t = link_info.version_info; t != NULL; t = t->next)
|
||||
{
|
||||
struct bfd_elf_version_expr *e2;
|
||||
|
||||
|
@ -7852,7 +7848,7 @@ lang_register_vers_node (const char *name,
|
|||
|
||||
for (e1 = version->locals.list; e1 != NULL; e1 = e1->next)
|
||||
{
|
||||
for (t = lang_elf_version_info; t != NULL; t = t->next)
|
||||
for (t = link_info.version_info; t != NULL; t = t->next)
|
||||
{
|
||||
struct bfd_elf_version_expr *e2;
|
||||
|
||||
|
@ -7888,7 +7884,7 @@ lang_register_vers_node (const char *name,
|
|||
else
|
||||
version->vernum = 0;
|
||||
|
||||
for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next)
|
||||
for (pp = &link_info.version_info; *pp != NULL; pp = &(*pp)->next)
|
||||
;
|
||||
*pp = version;
|
||||
}
|
||||
|
@ -7904,7 +7900,7 @@ lang_add_vers_depend (struct bfd_elf_version_deps *list, const char *name)
|
|||
ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
|
||||
ret->next = list;
|
||||
|
||||
for (t = lang_elf_version_info; t != NULL; t = t->next)
|
||||
for (t = link_info.version_info; t != NULL; t = t->next)
|
||||
{
|
||||
if (strcmp (t->name, name) == 0)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue