NDS32 build fixes
[binutils-gdb.git] / ld / ldgram.y
index 26cb6772995743224e17ae5601c332857ab77016..f46aa9ea21096914603c7045290fb0f27aa51ce3 100644 (file)
@@ -1,5 +1,5 @@
 /* A YACC grammar to parse a superset of the AT&T linker scripting language.
-   Copyright 1991-2013 Free Software Foundation, Inc.
+   Copyright (C) 1991-2015 Free Software Foundation, Inc.
    Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com).
 
    This file is part of the GNU Binutils.
@@ -148,7 +148,7 @@ static int error_index;
 %type <token> assign_op atype attributes_opt sect_constraint opt_align_with_input
 %type <name>  filename
 %token CHIP LIST SECT ABSOLUTE  LOAD NEWLINE ENDWORD ORDER NAMEWORD ASSERT_K
-%token FORMAT PUBLIC DEFSYMEND BASE ALIAS TRUNCATE REL
+%token LOG2CEIL FORMAT PUBLIC DEFSYMEND BASE ALIAS TRUNCATE REL
 %token INPUT_SCRIPT INPUT_MRI_SCRIPT INPUT_DEFSYM CASE EXTERN START
 %token <name> VERS_TAG VERS_IDENTIFIER
 %token GLOBAL LOCAL VERSIONK INPUT_VERSION_SCRIPT
@@ -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; }
        ;
 
@@ -812,7 +817,7 @@ memory_spec:        NAME
 origin_spec:
        ORIGIN '=' mustbe_exp
                {
-                 region->origin = exp_get_vma ($3, 0, "origin");
+                 region->origin_exp = $3;
                  region->current = region->origin;
                }
        ;
@@ -820,7 +825,7 @@ origin_spec:
 length_spec:
              LENGTH '=' mustbe_exp
                {
-                 region->length = exp_get_vma ($3, -1, "length");
+                 region->length_exp = $3;
                }
        ;
 
@@ -1010,6 +1015,8 @@ exp       :
                        { $$ = exp_nameop (ORIGIN, $3); }
        |       LENGTH '(' NAME ')'
                        { $$ = exp_nameop (LENGTH, $3); }
+       |       LOG2CEIL '(' exp ')'
+                       { $$ = exp_unop (LOG2CEIL, $3); }
        ;