From f593574a4cdfbde858364bb6d982eec788a92b24 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 14 Feb 2002 04:25:55 +0000 Subject: [PATCH] * 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. --- ld/ChangeLog | 9 +++++++++ ld/ld.texinfo | 9 ++++++--- ld/ldgram.y | 4 ++-- ld/ldlang.c | 6 +++--- ld/ldlang.h | 2 +- ld/ldlex.l | 2 +- 6 files changed, 22 insertions(+), 10 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index 112f73bdb35..2e3e9f43832 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2002-02-14 Phil Edwards + + * 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 * lexsup.c: Remove strtoul declaration. diff --git a/ld/ld.texinfo b/ld/ld.texinfo index 78afbbe95c6..87371261619 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 f1924a0069e..22dc1a85e53 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 bc705adcc0e..a5b1dd7e7e6 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 5e50c5cde1b..20895917ea7 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 0b15ca2fab6..5b97f138eb0 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 -- 2.47.2