]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gold/yyscript.y
* options.cc (General_options::parse_dynamic_list): New function.
[thirdparty/binutils-gdb.git] / gold / yyscript.y
index 683273bf0660edb4e7f6ce01845eb821b69e16fd..5ce03c5727aa089d5bec5aa51c59e67c9d5a6109 100644 (file)
 %token PARSING_LINKER_SCRIPT
 %token PARSING_VERSION_SCRIPT
 %token PARSING_DEFSYM
+%token PARSING_DYNAMIC_LIST
 
 /* Non-terminal types, where needed.  */
 
@@ -222,6 +223,7 @@ top:
          PARSING_LINKER_SCRIPT linker_script
        | PARSING_VERSION_SCRIPT version_script
        | PARSING_DEFSYM defsym_expr
+        | PARSING_DYNAMIC_LIST dynamic_list_expr
        ;
 
 /* A file contains a list of commands.  */
@@ -836,6 +838,24 @@ defsym_expr:
            { script_set_symbol(closure, $1.value, $1.length, $3, 0, 0); }
        ;
 
+/* Handle the --dynamic-list option.  A dynamic list has the format
+   { sym1; sym2; extern "C++" { namespace::sym3 }; };
+   We store the symbol we see in the "local" list; that is where
+   Command_line::in_dynamic_list() will look to do its check.
+   TODO(csilvers): More than one of these brace-lists can appear, and
+   should just be merged and treated as a single list.  */
+dynamic_list_expr: dynamic_list_nodes ;
+
+dynamic_list_nodes:
+         dynamic_list_node
+       | dynamic_list_nodes dynamic_list_node
+        ;
+
+dynamic_list_node:
+          '{' vers_defns ';' '}' ';'
+            { script_new_vers_node (closure, NULL, $2); }
+        ;
+
 /* A version script.  */
 version_script:
          vers_nodes