* ldgram.y: Add support for REGION_ALIAS operator.
[platform/upstream/binutils.git] / ld / ldgram.y
index f481f54..4d06725 100644 (file)
@@ -1,6 +1,6 @@
 /* A YACC grammar to parse a superset of the AT&T linker scripting language.
    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
    Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com).
 
    This file is part of the GNU Binutils.
@@ -131,6 +131,7 @@ static int error_index;
 %token SEGMENT_START
 %token INCLUDE
 %token MEMORY
+%token REGION_ALIAS
 %token NOLOAD DSECT COPY INFO OVERLAY
 %token DEFINED TARGET_K SEARCH_DIR MAP ENTRY
 %token <integer> NEXT
@@ -352,6 +353,8 @@ ifile_p1:
                { lang_add_insert ($3, 0); }
        |       INSERT_K BEFORE NAME
                { lang_add_insert ($3, 1); }
+       |       REGION_ALIAS '(' NAME ',' NAME ')'
+               { lang_memory_region_alias ($3, $5); }
        ;
 
 input_list:
@@ -577,6 +580,10 @@ statement:
        | ASSERT_K  {ldlex_expression ();} '(' exp ',' NAME ')' end
                        { ldlex_popstate ();
                          lang_add_assignment (exp_assert ($4, $6)); }
+       | INCLUDE filename
+               { ldlex_script (); ldfile_open_command_file($2); }
+               statement_list_opt END
+               { ldlex_popstate (); }
        ;
 
 statement_list:
@@ -668,13 +675,14 @@ opt_comma:
 
 
 memory:
-               MEMORY '{' memory_spec memory_spec_list '}'
+               MEMORY '{' memory_spec_list_opt '}'
        ;
 
+memory_spec_list_opt: memory_spec_list | ;
+
 memory_spec_list:
-               memory_spec_list memory_spec
-       |       memory_spec_list ',' memory_spec
-       |
+               memory_spec_list opt_comma memory_spec
+       |       memory_spec
        ;
 
 
@@ -683,6 +691,10 @@ memory_spec:       NAME
                attributes_opt ':'
                origin_spec opt_comma length_spec
                {}
+       |       INCLUDE filename
+               { ldlex_script (); ldfile_open_command_file($2); }
+               memory_spec_list_opt END
+               { ldlex_popstate (); }
        ;
 
 origin_spec:
@@ -966,6 +978,10 @@ section:   NAME            { ldlex_expression(); }
                  lang_add_assignment (exp_assop ('=', ".", $3));
                }
                '{' sec_or_group_p1 '}'
+       |       INCLUDE filename
+               { ldlex_script (); ldfile_open_command_file($2); }
+               sec_or_group_p1 END
+               { ldlex_popstate (); }
        ;
 
 type: