diff options
author | Ian Lance Taylor <ian@airs.com> | 2009-03-24 19:08:37 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 2009-03-24 19:08:37 +0000 |
commit | afc06bb8287c9a5c81be4810fd0384e952dd19ea (patch) | |
tree | c3a8c77b95478d08bd7a76537647b7cea712cae9 /gold/yyscript.y | |
parent | f6060a4d43e06a6ca5dd201b069ab9f29aae1b81 (diff) | |
download | fsf-binutils-gdb-afc06bb8287c9a5c81be4810fd0384e952dd19ea.zip fsf-binutils-gdb-afc06bb8287c9a5c81be4810fd0384e952dd19ea.tar.gz fsf-binutils-gdb-afc06bb8287c9a5c81be4810fd0384e952dd19ea.tar.bz2 |
* yyscript.y (file_cmd): Recognize EXTERN.
(extern_name_list, extern_name_list_body): New nonterminals.
* script.cc (script_add_extern): Define.
* script-c.h (script_add_extern): Declare.
Diffstat (limited to 'gold/yyscript.y')
-rw-r--r-- | gold/yyscript.y | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/gold/yyscript.y b/gold/yyscript.y index b018005..34b8b55 100644 --- a/gold/yyscript.y +++ b/gold/yyscript.y @@ -234,7 +234,8 @@ linker_script: /* A command which may appear at top level of a linker script. */ file_cmd: - FORCE_COMMON_ALLOCATION + EXTERN '(' extern_name_list ')' + | FORCE_COMMON_ALLOCATION { script_set_common_allocation(closure, 1); } | GROUP { script_start_group(closure); } @@ -282,6 +283,25 @@ ignore_cmd: OUTPUT_ARCH '(' string ')' ; +/* A list of external undefined symbols. We put the lexer into + expression mode so that commas separate names; this is what the GNU + linker does. */ + +extern_name_list: + { script_push_lex_into_expression_mode(closure); } + extern_name_list_body + { script_pop_lex_mode(closure); } + ; + +extern_name_list_body: + string + { script_add_extern(closure, $1.value, $1.length); } + | extern_name_list_body string + { script_add_extern(closure, $2.value, $2.length); } + | extern_name_list_body ',' string + { script_add_extern(closure, $3.value, $3.length); } + ; + /* A list of input file names. */ input_list: input_list_element |