aboutsummaryrefslogtreecommitdiff
path: root/ld/ldgram.y
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@bitrange.com>2014-10-15 03:10:25 +0200
committerHans-Peter Nilsson <hp@bitrange.com>2014-10-15 03:10:25 +0200
commiteeed9cc785ca447868967e5c84dae63e9ca8e6c2 (patch)
tree6e3b704c2f61b465b83ec2c5b2b5331b6c1e2b30 /ld/ldgram.y
parentbfa234344327776fb3b16e8bfd9c8de6ec73ae31 (diff)
downloadgdb-eeed9cc785ca447868967e5c84dae63e9ca8e6c2.zip
gdb-eeed9cc785ca447868967e5c84dae63e9ca8e6c2.tar.gz
gdb-eeed9cc785ca447868967e5c84dae63e9ca8e6c2.tar.bz2
Allow unquoted = as the first character in ldscript input_list names
* ldlex.l (INPUTLIST): New start condition. (comment pattern, ",", "(", ")", "AS_NEEDED") ({FILENAMECHAR1}{FILENAMECHAR}*, "-l"{FILENAMECHAR}+) (quoted string pattern, whitespace pattern): Add INPUTLIST to valid start conditions. (<INPUTLIST>"="{FILENAMECHAR1}{FILENAMECHAR}*): New NAME rule. (ldlex_inputlist): New start-condition-setter function. * ldgram.y (input_list1): Rename from input_list. All recursive use changed. (input_list): New wrapper rule for input_list1, setting INPUTLIST lexer state for the duration of parsing input_list1. All this to say INPUT(=/path/to/file) and not be forced to use INPUT("=/path/to/file") whenever there's a need to force a sysroot- prefix. Still, IMHO it seems better to make use of a previously invalid syntax and not only change the meaning of quoted =-prefixed paths (though arguably that's not very useful before this patchset). This got a little bit hairier than I'd expected: I had to add a new lexer state (aka. start condition) to avoid a first "=" being lexed as the token "=", despite that not making sense in constructs expecting file-names in the first place. (The grammar doesn't allow for expressions in any part of those lists.) I guess I *could* have made it work using that token anyway, but I didn't like the idea that you would be able to separate the "=" from the rest of the file-name with whitespace.
Diffstat (limited to 'ld/ldgram.y')
-rw-r--r--ld/ldgram.y23
1 files changed, 14 insertions, 9 deletions
diff --git a/ld/ldgram.y b/ld/ldgram.y
index 4875fa7..e76a0a3 100644
--- a/ld/ldgram.y
+++ b/ld/ldgram.y
@@ -365,38 +365,43 @@ ifile_p1:
;
input_list:
+ { ldlex_inputlist(); }
+ input_list1
+ { ldlex_popstate(); }
+
+input_list1:
NAME
{ lang_add_input_file($1,lang_input_file_is_search_file_enum,
(char *)NULL); }
- | input_list ',' NAME
+ | input_list1 ',' NAME
{ lang_add_input_file($3,lang_input_file_is_search_file_enum,
(char *)NULL); }
- | input_list NAME
+ | input_list1 NAME
{ lang_add_input_file($2,lang_input_file_is_search_file_enum,
(char *)NULL); }
| LNAME
{ lang_add_input_file($1,lang_input_file_is_l_enum,
(char *)NULL); }
- | input_list ',' LNAME
+ | input_list1 ',' LNAME
{ lang_add_input_file($3,lang_input_file_is_l_enum,
(char *)NULL); }
- | input_list LNAME
+ | input_list1 LNAME
{ lang_add_input_file($2,lang_input_file_is_l_enum,
(char *)NULL); }
| AS_NEEDED '('
{ $<integer>$ = input_flags.add_DT_NEEDED_for_regular;
input_flags.add_DT_NEEDED_for_regular = TRUE; }
- input_list ')'
+ input_list1 ')'
{ input_flags.add_DT_NEEDED_for_regular = $<integer>3; }
- | input_list ',' AS_NEEDED '('
+ | input_list1 ',' AS_NEEDED '('
{ $<integer>$ = input_flags.add_DT_NEEDED_for_regular;
input_flags.add_DT_NEEDED_for_regular = TRUE; }
- input_list ')'
+ input_list1 ')'
{ input_flags.add_DT_NEEDED_for_regular = $<integer>5; }
- | input_list AS_NEEDED '('
+ | input_list1 AS_NEEDED '('
{ $<integer>$ = input_flags.add_DT_NEEDED_for_regular;
input_flags.add_DT_NEEDED_for_regular = TRUE; }
- input_list ')'
+ input_list1 ')'
{ input_flags.add_DT_NEEDED_for_regular = $<integer>4; }
;