aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ld/ChangeLog9
-rw-r--r--ld/ld.texinfo9
-rw-r--r--ld/ldgram.y4
-rw-r--r--ld/ldlang.c6
-rw-r--r--ld/ldlang.h2
-rw-r--r--ld/ldlex.l2
6 files changed, 22 insertions, 10 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 112f73b..2e3e9f4 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,12 @@
+2002-02-14 Phil Edwards <pme@gcc.gnu.org>
+
+ * ld.texinfo (VERSION scripts): Symbol names are globbing patterns.
+ * ldgram.y (lang_new_vers_regex): Rename to lang_new_vers_pattern;
+ the pattern in question is not a regexp.
+ * ldlang.c: Likewise.
+ * ldlang.h: Likewise.
+ * ldlex.l (V_IDENTIFIER): Allow '[', ']', '-', '!', and '^' also.
+
2002-02-10 Daniel Jacobowitz <drow@mvista.com>
* lexsup.c: Remove strtoul declaration.
diff --git a/ld/ld.texinfo b/ld/ld.texinfo
index 78afbbe..8737126 100644
--- a/ld/ld.texinfo
+++ b/ld/ld.texinfo
@@ -1,7 +1,7 @@
\input texinfo
@setfilename ld.info
@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-@c 2001 Free Software Foundation, Inc.
+@c 2001, 2002 Free Software Foundation, Inc.
@syncodeindex ky cp
@include configdoc.texi
@c (configdoc.texi is generated by the Makefile)
@@ -58,7 +58,7 @@ END-INFO-DIR-ENTRY
This file documents the @sc{gnu} linker LD version @value{VERSION}.
Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000,
-2001 Free Software Foundation, Inc.
+2001, 2002 Free Software Foundation, Inc.
@ignore
@@ -3672,7 +3672,10 @@ This example version script defines three version nodes. The first
version node defined is @samp{VERS_1.1}; it has no other dependencies.
The script binds the symbol @samp{foo1} to @samp{VERS_1.1}. It reduces
a number of symbols to local scope so that they are not visible outside
-of the shared library.
+of the shared library; this is done using wildcard patterns, so that any
+symbol whose name begins with @samp{old}, @samp{original}, or @samp{new}
+is matched. The wildcard patterns available are the same as those used
+in the shell when matching filenames (also known as ``globbing'').
Next, the version script defines node @samp{VERS_1.2}. This node
depends upon @samp{VERS_1.1}. The script binds the symbol @samp{foo2}
diff --git a/ld/ldgram.y b/ld/ldgram.y
index f1924a0..22dc1a8 100644
--- a/ld/ldgram.y
+++ b/ld/ldgram.y
@@ -1112,11 +1112,11 @@ vers_tag:
vers_defns:
VERS_IDENTIFIER
{
- $$ = lang_new_vers_regex (NULL, $1, ldgram_vers_current_lang);
+ $$ = lang_new_vers_pattern (NULL, $1, ldgram_vers_current_lang);
}
| vers_defns ';' VERS_IDENTIFIER
{
- $$ = lang_new_vers_regex ($1, $3, ldgram_vers_current_lang);
+ $$ = lang_new_vers_pattern ($1, $3, ldgram_vers_current_lang);
}
| EXTERN NAME '{'
{
diff --git a/ld/ldlang.c b/ld/ldlang.c
index bc705ad..a5b1dd7 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -4981,7 +4981,7 @@ lang_vers_match_lang_java (expr, sym)
/* This is called for each variable name or match expression. */
struct bfd_elf_version_expr *
-lang_new_vers_regex (orig, new, lang)
+lang_new_vers_pattern (orig, new, lang)
struct bfd_elf_version_expr *orig;
const char *new;
const char *lang;
@@ -5154,7 +5154,7 @@ lang_do_version_exports_section ()
p = contents;
while (p < contents + len)
{
- greg = lang_new_vers_regex (greg, p, NULL);
+ greg = lang_new_vers_pattern (greg, p, NULL);
p = strchr (p, '\0') + 1;
}
@@ -5165,7 +5165,7 @@ lang_do_version_exports_section ()
bfd_get_section_flags (is->the_bfd, sec) | SEC_EXCLUDE);
}
- lreg = lang_new_vers_regex (NULL, "*", NULL);
+ lreg = lang_new_vers_pattern (NULL, "*", NULL);
lang_register_vers_node (command_line.version_exports_section,
lang_new_vers_node (greg, lreg), NULL);
}
diff --git a/ld/ldlang.h b/ld/ldlang.h
index 5e50c5c..2089591 100644
--- a/ld/ldlang.h
+++ b/ld/ldlang.h
@@ -463,7 +463,7 @@ extern void lang_leave_overlay
extern struct bfd_elf_version_tree *lang_elf_version_info;
-extern struct bfd_elf_version_expr *lang_new_vers_regex
+extern struct bfd_elf_version_expr *lang_new_vers_pattern
PARAMS ((struct bfd_elf_version_expr *, const char *, const char *));
extern struct bfd_elf_version_tree *lang_new_vers_node
PARAMS ((struct bfd_elf_version_expr *, struct bfd_elf_version_expr *));
diff --git a/ld/ldlex.l b/ld/ldlex.l
index 0b15ca2..5b97f13 100644
--- a/ld/ldlex.l
+++ b/ld/ldlex.l
@@ -116,7 +116,7 @@ WHITE [ \t\n\r]+
NOCFILENAMECHAR [_a-zA-Z0-9\/\.\-\_\+\$\:\[\]\\\~]
V_TAG [.$_a-zA-Z][._a-zA-Z0-9]*
-V_IDENTIFIER [*?.$_a-zA-Z]([*?.$_a-zA-Z0-9]|::)*
+V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^]([*?.$_a-zA-Z0-9\[\]\-\!\^]|::)*
%s SCRIPT
%s EXPRESSION