* elf32-xtensa.c (ebb_propose_action): Fix argument order.
[deliverable/binutils-gdb.git] / ld / ldgram.y
index f4f4589327e8b252fd354a129dc12a770ddb0b71..13e4ca658860b61ec1ce9385144b65eef09041df 100644 (file)
@@ -128,11 +128,13 @@ static int error_index;
 %token END
 %left <token> '('
 %token <token> ALIGN_K BLOCK BIND QUAD SQUAD LONG SHORT BYTE
-%token SECTIONS PHDRS SORT DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END DATA_SEGMENT_END
+%token SECTIONS PHDRS DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END DATA_SEGMENT_END
+%token SORT_BY_NAME SORT_BY_ALIGNMENT
 %token '{' '}'
 %token SIZEOF_HEADERS OUTPUT_FORMAT FORCE_COMMON_ALLOCATION OUTPUT_ARCH
 %token INHIBIT_COMMON_ALLOCATION
 %token SIZEOF_HEADERS
+%token SEGMENT_START
 %token INCLUDE
 %token MEMORY DEFSYMEND
 %token NOLOAD DSECT COPY INFO OVERLAY
@@ -412,25 +414,55 @@ wildcard_spec:
                wildcard_name
                        {
                          $$.name = $1;
-                         $$.sorted = FALSE;
+                         $$.sorted = none;
                          $$.exclude_name_list = NULL;
                        }
        |       EXCLUDE_FILE '(' exclude_name_list ')' wildcard_name
                        {
                          $$.name = $5;
-                         $$.sorted = FALSE;
+                         $$.sorted = none;
                          $$.exclude_name_list = $3;
                        }
-       |       SORT '(' wildcard_name ')'
+       |       SORT_BY_NAME '(' wildcard_name ')'
                        {
                          $$.name = $3;
-                         $$.sorted = TRUE;
+                         $$.sorted = by_name;
                          $$.exclude_name_list = NULL;
                        }
-       |       SORT '(' EXCLUDE_FILE '(' exclude_name_list ')' wildcard_name ')'
+       |       SORT_BY_ALIGNMENT '(' wildcard_name ')'
+                       {
+                         $$.name = $3;
+                         $$.sorted = by_alignment;
+                         $$.exclude_name_list = NULL;
+                       }
+       |       SORT_BY_NAME '(' SORT_BY_ALIGNMENT '(' wildcard_name ')' ')'
+                       {
+                         $$.name = $5;
+                         $$.sorted = by_name_alignment;
+                         $$.exclude_name_list = NULL;
+                       }
+       |       SORT_BY_NAME '(' SORT_BY_NAME '(' wildcard_name ')' ')'
+                       {
+                         $$.name = $5;
+                         $$.sorted = by_name;
+                         $$.exclude_name_list = NULL;
+                       }
+       |       SORT_BY_ALIGNMENT '(' SORT_BY_NAME '(' wildcard_name ')' ')'
+                       {
+                         $$.name = $5;
+                         $$.sorted = by_alignment_name;
+                         $$.exclude_name_list = NULL;
+                       }
+       |       SORT_BY_ALIGNMENT '(' SORT_BY_ALIGNMENT '(' wildcard_name ')' ')'
+                       {
+                         $$.name = $5;
+                         $$.sorted = by_alignment;
+                         $$.exclude_name_list = NULL;
+                       }
+       |       SORT_BY_NAME '(' EXCLUDE_FILE '(' exclude_name_list ')' wildcard_name ')'
                        {
                          $$.name = $7;
-                         $$.sorted = TRUE;
+                         $$.sorted = by_name;
                          $$.exclude_name_list = $5;
                        }
        ;
@@ -481,7 +513,7 @@ input_section_spec_no_keep:
                          struct wildcard_spec tmp;
                          tmp.name = $1;
                          tmp.exclude_name_list = NULL;
-                         tmp.sorted = FALSE;
+                         tmp.sorted = none;
                          lang_add_wild (&tmp, NULL, ldgram_had_keep);
                        }
         |      '[' file_NAME_list ']'
@@ -514,7 +546,7 @@ statement:
 
                  lang_add_attribute(lang_constructors_statement_enum);
                }
-       | SORT '(' CONSTRUCTORS ')'
+       | SORT_BY_NAME '(' CONSTRUCTORS ')'
                {
                  constructors_sorted = TRUE;
                  lang_add_attribute (lang_constructors_statement_enum);
@@ -812,6 +844,15 @@ exp        :
                        { $$ = exp_binop (DATA_SEGMENT_RELRO_END, $5, $3); }
        |       DATA_SEGMENT_END '(' exp ')'
                        { $$ = exp_unop(DATA_SEGMENT_END, $3); }
+        |       SEGMENT_START '(' NAME ',' exp ')'
+                        { /* The operands to the expression node are
+                            placed in the opposite order from the way
+                            in which they appear in the script as
+                            that allows us to reuse more code in
+                            fold_binary.  */
+                         $$ = exp_binop (SEGMENT_START,
+                                         $5,
+                                         exp_nameop (NAME, $3)); }
        |       BLOCK '(' exp ')'
                        { $$ = exp_unop(ALIGN_K,$3); }
        |       NAME
This page took 0.024223 seconds and 4 git commands to generate.