summaryrefslogtreecommitdiff
path: root/ld/ldgram.y
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2005-08-17 10:08:30 +0000
committerJakub Jelinek <jakub@redhat.com>2005-08-17 10:08:30 +0000
commit880a9b4d5f4cb6c40df6282d011191f9605c14e5 (patch)
tree5f143ac8cc2e964b0735014af51e1e922bb3d5d1 /ld/ldgram.y
parent3b0cfcd4be2dbedd8f7cdfb06307a5d1d92e8190 (diff)
downloadbinutils-redhat-880a9b4d5f4cb6c40df6282d011191f9605c14e5.tar.gz
* ldgram.y (vers_defns): Don't lose pattern list before
extern NAME {}. Handle global, local and extern symbol names. ld/testsuite/ * ld-elfvers/vers.exp: Add a new test, vers30. * ld-elfvers/vers30.c: New file. * ld-elfvers/vers30.map: New file. * ld-elfvers/vers30.ver: New file. * ld-elfvers/vers30.dsym: New file.
Diffstat (limited to 'ld/ldgram.y')
-rw-r--r--ld/ldgram.y27
1 files changed, 27 insertions, 0 deletions
diff --git a/ld/ldgram.y b/ld/ldgram.y
index 44896e1dd4..c8cf6c1d26 100644
--- a/ld/ldgram.y
+++ b/ld/ldgram.y
@@ -1226,6 +1226,9 @@ vers_defns:
}
vers_defns opt_semicolon '}'
{
+ struct bfd_elf_version_expr *pat;
+ for (pat = $7; pat->next != NULL; pat = pat->next);
+ pat->next = $1;
$$ = $7;
ldgram_vers_current_lang = $<name>6;
}
@@ -1239,6 +1242,30 @@ vers_defns:
$$ = $5;
ldgram_vers_current_lang = $<name>4;
}
+ | GLOBAL
+ {
+ $$ = lang_new_vers_pattern (NULL, "global", ldgram_vers_current_lang);
+ }
+ | vers_defns ';' GLOBAL
+ {
+ $$ = lang_new_vers_pattern ($1, "global", ldgram_vers_current_lang);
+ }
+ | LOCAL
+ {
+ $$ = lang_new_vers_pattern (NULL, "local", ldgram_vers_current_lang);
+ }
+ | vers_defns ';' LOCAL
+ {
+ $$ = lang_new_vers_pattern ($1, "local", ldgram_vers_current_lang);
+ }
+ | EXTERN
+ {
+ $$ = lang_new_vers_pattern (NULL, "extern", ldgram_vers_current_lang);
+ }
+ | vers_defns ';' EXTERN
+ {
+ $$ = lang_new_vers_pattern ($1, "extern", ldgram_vers_current_lang);
+ }
;
opt_semicolon: