* ldgram.y (vers_node): Support anonymous version tags.
* ldlang.c (lang_register_vers_node): Ensure anonymous version tag is not defined together with non-anonymous versions. * ld.texinfo: Document it. * elflink.h (size_dynamic_sections): Skip anonymous version tag. (elf_link_assign_sym_version): Don't count anonymous version tag.
This commit is contained in:
parent
b667df2e28
commit
6b9b879a02
6 changed files with 50 additions and 3 deletions
|
@ -1,3 +1,8 @@
|
|||
2001-12-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* elflink.h (size_dynamic_sections): Skip anonymous version tag.
|
||||
(elf_link_assign_sym_version): Don't count anonymous version tag.
|
||||
|
||||
2001-12-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* elf-eh-frame.c (struct cie): Add make_lsda_relative.
|
||||
|
|
|
@ -3246,6 +3246,10 @@ NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath,
|
|||
just linking a regular application. */
|
||||
verdefs = asvinfo.verdefs;
|
||||
|
||||
/* Skip anonymous version tag. */
|
||||
if (verdefs != NULL && verdefs->vernum == 0)
|
||||
verdefs = verdefs->next;
|
||||
|
||||
if (verdefs == NULL)
|
||||
_bfd_strip_section_from_output (info, s);
|
||||
else
|
||||
|
@ -4307,6 +4311,9 @@ elf_link_assign_sym_version (h, data)
|
|||
t->used = true;
|
||||
|
||||
version_index = 1;
|
||||
/* Don't count anonymous version tag. */
|
||||
if (sinfo->verdefs != NULL && sinfo->verdefs->vernum == 0)
|
||||
version_index = 0;
|
||||
for (pp = &sinfo->verdefs; *pp != NULL; pp = &(*pp)->next)
|
||||
++version_index;
|
||||
t->vernum = version_index;
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2001-12-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* ldgram.y (vers_node): Support anonymous version tags.
|
||||
* ldlang.c (lang_register_vers_node): Ensure anonymous version
|
||||
tag is not defined together with non-anonymous versions.
|
||||
* ld.texinfo: Document it.
|
||||
|
||||
2001-12-18 Nick Clifton <nickc@cambridge.redhat.com>
|
||||
|
||||
* po/tr.po: New file: Turkish translation.
|
||||
|
|
|
@ -3685,6 +3685,15 @@ they might suggest to the person reading them. The @samp{2.0} version
|
|||
could just as well have appeared in between @samp{1.1} and @samp{1.2}.
|
||||
However, this would be a confusing way to write a version script.
|
||||
|
||||
Node name can be omited, provided it is the only version node
|
||||
in the version script. Such version script doesn't assign any versions to
|
||||
symbols, only selects which symbols will be globally visible out and which
|
||||
won't.
|
||||
|
||||
@smallexample
|
||||
@{ global: foo; bar; local: *; @}
|
||||
#end smallexample
|
||||
|
||||
When you link an application against a shared library that has versioned
|
||||
symbols, the application itself knows which version of each symbol it
|
||||
requires, and it also knows which version nodes it needs from each
|
||||
|
|
|
@ -1061,7 +1061,11 @@ vers_nodes:
|
|||
;
|
||||
|
||||
vers_node:
|
||||
VERS_TAG '{' vers_tag '}' ';'
|
||||
'{' vers_tag '}' ';'
|
||||
{
|
||||
lang_register_vers_node (NULL, $2, NULL);
|
||||
}
|
||||
| VERS_TAG '{' vers_tag '}' ';'
|
||||
{
|
||||
lang_register_vers_node ($1, $3, NULL);
|
||||
}
|
||||
|
|
19
ld/ldlang.c
19
ld/ldlang.c
|
@ -5031,6 +5031,16 @@ lang_register_vers_node (name, version, deps)
|
|||
struct bfd_elf_version_tree *t, **pp;
|
||||
struct bfd_elf_version_expr *e1;
|
||||
|
||||
if (name == NULL)
|
||||
name = "";
|
||||
|
||||
if ((name[0] == '\0' && lang_elf_version_info != NULL)
|
||||
|| (lang_elf_version_info && lang_elf_version_info->name[0] == '\0'))
|
||||
{
|
||||
einfo (_("%X%P: anonymous version tag cannot be combined with other version tags\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
/* Make sure this node has a unique name. */
|
||||
for (t = lang_elf_version_info; t != NULL; t = t->next)
|
||||
if (strcmp (t->name, name) == 0)
|
||||
|
@ -5067,8 +5077,13 @@ lang_register_vers_node (name, version, deps)
|
|||
|
||||
version->deps = deps;
|
||||
version->name = name;
|
||||
++version_index;
|
||||
version->vernum = version_index;
|
||||
if (name[0] != '\0')
|
||||
{
|
||||
++version_index;
|
||||
version->vernum = version_index;
|
||||
}
|
||||
else
|
||||
version->vernum = 0;
|
||||
|
||||
for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next)
|
||||
;
|
||||
|
|
Loading…
Reference in a new issue