Fix crash when command arg is missing in faas/taas/tfaas commands.
[deliverable/binutils-gdb.git] / ld / ldgram.y
index 771d990a5c29efde02c9ab548411459f2aad64cf..595b89f0ba3d46a60ef4446f15f099a9b12716c6 100644 (file)
@@ -1,5 +1,5 @@
 /* A YACC grammar to parse a superset of the AT&T linker scripting language.
 /* A YACC grammar to parse a superset of the AT&T linker scripting language.
-   Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   Copyright (C) 1991-2019 Free Software Foundation, Inc.
    Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com).
 
    This file is part of the GNU Binutils.
    Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com).
 
    This file is part of the GNU Binutils.
@@ -29,6 +29,7 @@
 #include "sysdep.h"
 #include "bfd.h"
 #include "bfdlink.h"
 #include "sysdep.h"
 #include "bfd.h"
 #include "bfdlink.h"
+#include "ctf-api.h"
 #include "ld.h"
 #include "ldexp.h"
 #include "ldver.h"
 #include "ld.h"
 #include "ldexp.h"
 #include "ldver.h"
@@ -199,27 +200,27 @@ mri_script_file:
 
 mri_script_lines:
                mri_script_lines mri_script_command NEWLINE
 
 mri_script_lines:
                mri_script_lines mri_script_command NEWLINE
-          |
+       |
        ;
 
 mri_script_command:
                CHIP  exp
        |       CHIP  exp ',' exp
        ;
 
 mri_script_command:
                CHIP  exp
        |       CHIP  exp ',' exp
-       |       NAME    {
-                       einfo(_("%P%F: unrecognised keyword in MRI style script '%s'\n"),$1);
+       |       NAME    {
+                       einfo(_("%F%P: unrecognised keyword in MRI style script '%s'\n"),$1);
                        }
                        }
-       |       LIST    {
+       |       LIST    {
                        config.map_filename = "-";
                        }
                        config.map_filename = "-";
                        }
-        |       ORDER ordernamelist
-       |       ENDWORD
-        |       PUBLIC NAME '=' exp
-                       { mri_public($2, $4); }
-        |       PUBLIC NAME ',' exp
-                       { mri_public($2, $4); }
-        |       PUBLIC NAME  exp
-                       { mri_public($2, $3); }
-       |       FORMAT NAME
+       |       ORDER ordernamelist
+       |       ENDWORD
+       |       PUBLIC NAME '=' exp
+                       { mri_public($2, $4); }
+       |       PUBLIC NAME ',' exp
+                       { mri_public($2, $4); }
+       |       PUBLIC NAME  exp
+                       { mri_public($2, $3); }
+       |       FORMAT NAME
                        { mri_format($2); }
        |       SECT NAME ',' exp
                        { mri_output_section($2, $4);}
                        { mri_format($2); }
        |       SECT NAME ',' exp
                        { mri_output_section($2, $4);}
@@ -237,13 +238,13 @@ mri_script_command:
                        { mri_alignmod($2,$4); }
        |       ABSOLUTE mri_abs_name_list
        |       LOAD     mri_load_name_list
                        { mri_alignmod($2,$4); }
        |       ABSOLUTE mri_abs_name_list
        |       LOAD     mri_load_name_list
-       |       NAMEWORD NAME
+       |       NAMEWORD NAME
                        { mri_name($2); }
        |       ALIAS NAME ',' NAME
                        { mri_alias($2,$4,0);}
        |       ALIAS NAME ',' INT
                        { mri_alias ($2, 0, (int) $4.integer); }
                        { mri_name($2); }
        |       ALIAS NAME ',' NAME
                        { mri_alias($2,$4,0);}
        |       ALIAS NAME ',' INT
                        { mri_alias ($2, 0, (int) $4.integer); }
-       |       BASE     exp
+       |       BASE     exp
                        { mri_base($2); }
        |       TRUNCATE INT
                { mri_truncate ((unsigned int) $2.integer); }
                        { mri_base($2); }
        |       TRUNCATE INT
                { mri_truncate ((unsigned int) $2.integer); }
@@ -255,13 +256,13 @@ mri_script_command:
                { ldlex_popstate (); }
        |       START NAME
                { lang_add_entry ($2, FALSE); }
                { ldlex_popstate (); }
        |       START NAME
                { lang_add_entry ($2, FALSE); }
-        |
+       |
        ;
 
 ordernamelist:
        ;
 
 ordernamelist:
-             ordernamelist ',' NAME         { mri_order($3); }
-       |     ordernamelist  NAME         { mri_order($2); }
-       |
+             ordernamelist ',' NAME         { mri_order($3); }
+       |     ordernamelist  NAME         { mri_order($2); }
+       |
        ;
 
 mri_load_name_list:
        ;
 
 mri_load_name_list:
@@ -271,10 +272,10 @@ mri_load_name_list:
        ;
 
 mri_abs_name_list:
        ;
 
 mri_abs_name_list:
-               NAME
-                       { mri_only_load($1); }
+               NAME
+                       { mri_only_load($1); }
        |       mri_abs_name_list ','  NAME
        |       mri_abs_name_list ','  NAME
-                       { mri_only_load($3); }
+                       { mri_only_load($3); }
        ;
 
 casesymlist:
        ;
 
 casesymlist:
@@ -302,11 +303,11 @@ script_file:
        { ldlex_both(); }
        ifile_list
        { ldlex_popstate(); }
        { ldlex_both(); }
        ifile_list
        { ldlex_popstate(); }
-        ;
+       ;
 
 ifile_list:
        ifile_list ifile_p1
 
 ifile_list:
        ifile_list ifile_p1
-        |
+       |
        ;
 
 
        ;
 
 
@@ -320,32 +321,32 @@ ifile_p1:
        |       floating_point_support
        |       statement_anywhere
        |       version
        |       floating_point_support
        |       statement_anywhere
        |       version
-        |       ';'
+              ';'
        |       TARGET_K '(' NAME ')'
                { lang_add_target($3); }
        |       SEARCH_DIR '(' filename ')'
                { ldfile_add_library_path ($3, FALSE); }
        |       OUTPUT '(' filename ')'
                { lang_add_output($3, 1); }
        |       TARGET_K '(' NAME ')'
                { lang_add_target($3); }
        |       SEARCH_DIR '(' filename ')'
                { ldfile_add_library_path ($3, FALSE); }
        |       OUTPUT '(' filename ')'
                { lang_add_output($3, 1); }
-        |      OUTPUT_FORMAT '(' NAME ')'
+             OUTPUT_FORMAT '(' NAME ')'
                  { lang_add_output_format ($3, (char *) NULL,
                                            (char *) NULL, 1); }
        |       OUTPUT_FORMAT '(' NAME ',' NAME ',' NAME ')'
                  { lang_add_output_format ($3, $5, $7, 1); }
                  { lang_add_output_format ($3, (char *) NULL,
                                            (char *) NULL, 1); }
        |       OUTPUT_FORMAT '(' NAME ',' NAME ',' NAME ')'
                  { lang_add_output_format ($3, $5, $7, 1); }
-        |      OUTPUT_ARCH '(' NAME ')'
+             OUTPUT_ARCH '(' NAME ')'
                  { ldfile_set_output_arch ($3, bfd_arch_unknown); }
        |       FORCE_COMMON_ALLOCATION
                { command_line.force_common_definition = TRUE ; }
        |       FORCE_GROUP_ALLOCATION
                { command_line.force_group_allocation = TRUE ; }
        |       INHIBIT_COMMON_ALLOCATION
                  { ldfile_set_output_arch ($3, bfd_arch_unknown); }
        |       FORCE_COMMON_ALLOCATION
                { command_line.force_common_definition = TRUE ; }
        |       FORCE_GROUP_ALLOCATION
                { command_line.force_group_allocation = TRUE ; }
        |       INHIBIT_COMMON_ALLOCATION
-               { command_line.inhibit_common_definition = TRUE ; }
+               { link_info.inhibit_common_definition = TRUE ; }
        |       INPUT '(' input_list ')'
        |       GROUP
                  { lang_enter_group (); }
                    '(' input_list ')'
                  { lang_leave_group (); }
        |       INPUT '(' input_list ')'
        |       GROUP
                  { lang_enter_group (); }
                    '(' input_list ')'
                  { lang_leave_group (); }
-       |       MAP '(' filename ')'
+       |       MAP '(' filename ')'
                { lang_add_map($3); }
        |       INCLUDE filename
                { ldlex_script (); ldfile_open_command_file($2); }
                { lang_add_map($3); }
        |       INCLUDE filename
                { ldlex_script (); ldfile_open_command_file($2); }
@@ -455,7 +456,7 @@ wildcard_maybe_exclude:
                          $$.exclude_name_list = NULL;
                          $$.section_flag_list = NULL;
                        }
                          $$.exclude_name_list = NULL;
                          $$.section_flag_list = NULL;
                        }
-       |       EXCLUDE_FILE '(' exclude_name_list ')' wildcard_name
+       |       EXCLUDE_FILE '(' exclude_name_list ')' wildcard_name
                        {
                          $$.name = $5;
                          $$.sorted = none;
                        {
                          $$.name = $5;
                          $$.sorted = none;
@@ -632,11 +633,11 @@ input_section_spec_no_keep:
                          tmp.section_flag_list = $1;
                          lang_add_wild (&tmp, NULL, ldgram_had_keep);
                        }
                          tmp.section_flag_list = $1;
                          lang_add_wild (&tmp, NULL, ldgram_had_keep);
                        }
-        |      '[' section_name_list ']'
+             '[' section_name_list ']'
                        {
                          lang_add_wild (NULL, $2, ldgram_had_keep);
                        }
                        {
                          lang_add_wild (NULL, $2, ldgram_had_keep);
                        }
-        |      sect_flags '[' section_name_list ']'
+             sect_flags '[' section_name_list ']'
                        {
                          struct wildcard_spec tmp;
                          tmp.name = NULL;
                        {
                          struct wildcard_spec tmp;
                          tmp.name = NULL;
@@ -665,13 +666,13 @@ input_section_spec:
        ;
 
 statement:
        ;
 
 statement:
-               assignment end
+               assignment end
        |       CREATE_OBJECT_SYMBOLS
                {
        |       CREATE_OBJECT_SYMBOLS
                {
-               lang_add_attribute(lang_object_symbols_statement_enum);
-               }
-        |      ';'
-        |      CONSTRUCTORS
+               lang_add_attribute(lang_object_symbols_statement_enum);
+               }
+             ';'
+             CONSTRUCTORS
                {
 
                  lang_add_attribute(lang_constructors_statement_enum);
                {
 
                  lang_add_attribute(lang_constructors_statement_enum);
@@ -682,15 +683,15 @@ statement:
                  lang_add_attribute (lang_constructors_statement_enum);
                }
        | input_section_spec
                  lang_add_attribute (lang_constructors_statement_enum);
                }
        | input_section_spec
-        | length '(' mustbe_exp ')'
-                       {
-                         lang_add_data ((int) $1, $3);
-                       }
+       | length '(' mustbe_exp ')'
+               {
+                 lang_add_data ((int) $1, $3);
+               }
 
        | FILL '(' fill_exp ')'
 
        | FILL '(' fill_exp ')'
-                       {
-                         lang_add_fill ($3);
-                       }
+               {
+                 lang_add_fill ($3);
+               }
        | ASSERT_K  {ldlex_expression ();} '(' exp ',' NAME ')' end
                        { ldlex_popstate ();
                          lang_add_assignment (exp_assert ($4, $6)); }
        | ASSERT_K  {ldlex_expression ();} '(' exp ',' NAME ')' end
                        { ldlex_popstate ();
                          lang_add_assignment (exp_assert ($4, $6)); }
@@ -702,7 +703,7 @@ statement:
 
 statement_list:
                statement_list statement
 
 statement_list:
                statement_list statement
-       |       statement
+       |       statement
        ;
 
 statement_list_opt:
        ;
 
 statement_list_opt:
@@ -717,7 +718,7 @@ length:
                        { $$ = $1; }
        |       LONG
                        { $$ = $1; }
                        { $$ = $1; }
        |       LONG
                        { $$ = $1; }
-       |       SHORT
+       |       SHORT
                        { $$ = $1; }
        |       BYTE
                        { $$ = $1; }
                        { $$ = $1; }
        |       BYTE
                        { $$ = $1; }
@@ -733,7 +734,7 @@ fill_exp:
 fill_opt:
          '=' fill_exp
                { $$ = $2; }
 fill_opt:
          '=' fill_exp
                { $$ = $2; }
-       |       { $$ = (fill_type *) 0; }
+       |       { $$ = (fill_type *) 0; }
        ;
 
 assign_op:
        ;
 
 assign_op:
@@ -741,17 +742,17 @@ assign_op:
                        { $$ = '+'; }
        |       MINUSEQ
                        { $$ = '-'; }
                        { $$ = '+'; }
        |       MINUSEQ
                        { $$ = '-'; }
-       |       MULTEQ
+       |       MULTEQ
                        { $$ = '*'; }
                        { $$ = '*'; }
-       |       DIVEQ
+       |       DIVEQ
                        { $$ = '/'; }
                        { $$ = '/'; }
-       |       LSHIFTEQ
+       |       LSHIFTEQ
                        { $$ = LSHIFT; }
                        { $$ = LSHIFT; }
-       |       RSHIFTEQ
+       |       RSHIFTEQ
                        { $$ = RSHIFT; }
                        { $$ = RSHIFT; }
-       |       ANDEQ
+       |       ANDEQ
                        { $$ = '&'; }
                        { $$ = '&'; }
-       |       OREQ
+       |       OREQ
                        { $$ = '|'; }
 
        ;
                        { $$ = '|'; }
 
        ;
@@ -804,7 +805,7 @@ memory_spec_list:
        ;
 
 
        ;
 
 
-memory_spec:   NAME
+memory_spec:   NAME
                { region = lang_memory_region_lookup ($1, TRUE); }
                attributes_opt ':'
                origin_spec opt_comma length_spec
                { region = lang_memory_region_lookup ($1, TRUE); }
                attributes_opt ':'
                origin_spec opt_comma length_spec
@@ -819,12 +820,11 @@ origin_spec:
        ORIGIN '=' mustbe_exp
                {
                  region->origin_exp = $3;
        ORIGIN '=' mustbe_exp
                {
                  region->origin_exp = $3;
-                 region->current = region->origin;
                }
        ;
 
 length_spec:
                }
        ;
 
 length_spec:
-             LENGTH '=' mustbe_exp
+            LENGTH '=' mustbe_exp
                {
                  region->length_exp = $3;
                }
                {
                  region->length_exp = $3;
                }
@@ -946,7 +946,7 @@ exp :
                        { $$ = exp_binop (NE , $1, $3); }
        |       exp LE exp
                        { $$ = exp_binop (LE , $1, $3); }
                        { $$ = exp_binop (NE , $1, $3); }
        |       exp LE exp
                        { $$ = exp_binop (LE , $1, $3); }
-       |       exp GE exp
+       |       exp GE exp
                        { $$ = exp_binop (GE , $1, $3); }
        |       exp '<' exp
                        { $$ = exp_binop ('<' , $1, $3); }
                        { $$ = exp_binop (GE , $1, $3); }
        |       exp '<' exp
                        { $$ = exp_binop ('<' , $1, $3); }
@@ -968,7 +968,7 @@ exp :
                        { $$ = exp_nameop (DEFINED, $3); }
        |       INT
                        { $$ = exp_bigintop ($1.integer, $1.str); }
                        { $$ = exp_nameop (DEFINED, $3); }
        |       INT
                        { $$ = exp_bigintop ($1.integer, $1.str); }
-        |      SIZEOF_HEADERS
+             SIZEOF_HEADERS
                        { $$ = exp_nameop (SIZEOF_HEADERS,0); }
 
        |       ALIGNOF '(' NAME ')'
                        { $$ = exp_nameop (SIZEOF_HEADERS,0); }
 
        |       ALIGNOF '(' NAME ')'
@@ -993,8 +993,8 @@ exp :
                        { $$ = exp_binop (DATA_SEGMENT_RELRO_END, $5, $3); }
        |       DATA_SEGMENT_END '(' exp ')'
                        { $$ = exp_unop (DATA_SEGMENT_END, $3); }
                        { $$ = 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
+       |       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
                             placed in the opposite order from the way
                             in which they appear in the script as
                             that allows us to reuse more code in
@@ -1022,9 +1022,9 @@ exp       :
 
 
 memspec_at_opt:
 
 
 memspec_at_opt:
-                AT '>' NAME { $$ = $3; }
-        |       { $$ = 0; }
-        ;
+               AT '>' NAME { $$ = $3; }
+       |       { $$ = 0; }
+       ;
 
 opt_at:
                AT '(' exp ')' { $$ = $3; }
 
 opt_at:
                AT '(' exp ')' { $$ = $3; }
@@ -1053,7 +1053,7 @@ sect_constraint:
        |       { $$ = 0; }
        ;
 
        |       { $$ = 0; }
        ;
 
-section:       NAME            { ldlex_expression(); }
+section:       NAME            { ldlex_expression(); }
                opt_exp_with_type
                opt_at
                opt_align
                opt_exp_with_type
                opt_at
                opt_align
@@ -1067,7 +1067,7 @@ section:  NAME            { ldlex_expression(); }
                                                              $5, $7, $4, $9, $6);
                        }
                statement_list_opt
                                                              $5, $7, $4, $9, $6);
                        }
                statement_list_opt
-               '}' { ldlex_popstate (); ldlex_expression (); }
+               '}' { ldlex_popstate (); ldlex_expression (); }
                memspec_opt memspec_at_opt phdr_opt fill_opt
                {
                  ldlex_popstate ();
                memspec_opt memspec_at_opt phdr_opt fill_opt
                {
                  ldlex_popstate ();
@@ -1119,9 +1119,9 @@ type:
        ;
 
 atype:
        ;
 
 atype:
-               '(' type ')'
-       |       /* EMPTY */ { sectype = normal_section; }
-       |       '(' ')' { sectype = normal_section; }
+               '(' type ')'
+       |       /* EMPTY */ { sectype = normal_section; }
+       |       '(' ')' { sectype = normal_section; }
        ;
 
 opt_exp_with_type:
        ;
 
 opt_exp_with_type:
@@ -1244,7 +1244,7 @@ phdr_type:
                          else
                            {
                              einfo (_("\
                          else
                            {
                              einfo (_("\
-%X%P:%S: unknown phdr type `%s' (try integer literal)\n"),
+%X%P:%pS: unknown phdr type `%s' (try integer literal)\n"),
                                     NULL, s);
                              $$ = exp_intop (0);
                            }
                                     NULL, s);
                              $$ = exp_intop (0);
                            }
@@ -1268,7 +1268,7 @@ phdr_qualifiers:
                  else if (strcmp ($1, "FLAGS") == 0 && $2 != NULL)
                    $$.flags = $2;
                  else
                  else if (strcmp ($1, "FLAGS") == 0 && $2 != NULL)
                    $$.flags = $2;
                  else
-                   einfo (_("%X%P:%S: PHDRS syntax error at `%s'\n"),
+                   einfo (_("%X%P:%pS: PHDRS syntax error at `%s'\n"),
                           NULL, $1);
                }
        |       AT '(' exp ')' phdr_qualifiers
                           NULL, $1);
                }
        |       AT '(' exp ')' phdr_qualifiers
@@ -1402,7 +1402,7 @@ vers_defns:
                {
                  $$ = lang_new_vers_pattern (NULL, $1, ldgram_vers_current_lang, FALSE);
                }
                {
                  $$ = lang_new_vers_pattern (NULL, $1, ldgram_vers_current_lang, FALSE);
                }
-        |       NAME
+       |       NAME
                {
                  $$ = lang_new_vers_pattern (NULL, $1, ldgram_vers_current_lang, TRUE);
                }
                {
                  $$ = lang_new_vers_pattern (NULL, $1, ldgram_vers_current_lang, TRUE);
                }
@@ -1477,7 +1477,7 @@ yyerror(arg)
     einfo (_("%P:%s: file format not recognized; treating as linker script\n"),
           ldlex_filename ());
   if (error_index > 0 && error_index < ERROR_NAME_MAX)
     einfo (_("%P:%s: file format not recognized; treating as linker script\n"),
           ldlex_filename ());
   if (error_index > 0 && error_index < ERROR_NAME_MAX)
-    einfo ("%P%F:%S: %s in %s\n", NULL, arg, error_names[error_index - 1]);
+    einfo ("%F%P:%pS: %s in %s\n", NULL, arg, error_names[error_index - 1]);
   else
   else
-    einfo ("%P%F:%S: %s\n", NULL, arg);
+    einfo ("%F%P:%pS: %s\n", NULL, arg);
 }
 }
This page took 0.038571 seconds and 4 git commands to generate.