gdb: fix vfork with multiple threads
[deliverable/binutils-gdb.git] / ld / ldgram.y
index 81ed85e9a02c62ec7e167b628d21215ff1b4d306..dd911f461693292042f798a86fd5b3d8b1feee19 100644 (file)
@@ -1,5 +1,5 @@
 /* A YACC grammar to parse a superset of the AT&T linker scripting language.
-   Copyright (C) 1991-2018 Free Software Foundation, Inc.
+   Copyright (C) 1991-2021 Free Software Foundation, Inc.
    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 "ctf-api.h"
 #include "ld.h"
 #include "ldexp.h"
 #include "ldver.h"
@@ -48,7 +49,7 @@
 static enum section_type sectype;
 static lang_memory_region_type *region;
 
-static bfd_boolean ldgram_had_keep = FALSE;
+static bool ldgram_had_keep = false;
 static char *ldgram_vers_current_lang = NULL;
 
 #define ERROR_NAME_MAX 20
@@ -76,8 +77,8 @@ static int error_index;
   union etree_union *etree;
   struct phdr_info
     {
-      bfd_boolean filehdr;
-      bfd_boolean phdrs;
+      bool filehdr;
+      bool phdrs;
       union etree_union *at;
       union etree_union *flags;
     } phdr;
@@ -175,12 +176,9 @@ filename:  NAME;
 
 
 defsym_expr:
-               { ldlex_defsym(); }
-               NAME '=' exp
-               {
-                 ldlex_popstate();
-                 lang_add_assignment (exp_defsym ($2, $4));
-               }
+               { ldlex_expression(); }
+               assignment
+               { ldlex_popstate(); }
        ;
 
 /* SYNTAX WITHIN AN MRI SCRIPT FILE */
@@ -254,7 +252,7 @@ mri_script_command:
                mri_script_lines END
                { ldlex_popstate (); }
        |       START NAME
-               { lang_add_entry ($2, FALSE); }
+               { lang_add_entry ($2, false); }
        |
        ;
 
@@ -291,11 +289,11 @@ extern_name_list:
 
 extern_name_list_body:
          NAME
-                       { ldlang_add_undef ($1, FALSE); }
+                       { ldlang_add_undef ($1, false); }
        | extern_name_list_body NAME
-                       { ldlang_add_undef ($2, FALSE); }
+                       { ldlang_add_undef ($2, false); }
        | extern_name_list_body ',' NAME
-                       { ldlang_add_undef ($3, FALSE); }
+                       { ldlang_add_undef ($3, false); }
        ;
 
 script_file:
@@ -324,7 +322,7 @@ ifile_p1:
        |       TARGET_K '(' NAME ')'
                { lang_add_target($3); }
        |       SEARCH_DIR '(' filename ')'
-               { ldfile_add_library_path ($3, FALSE); }
+               { ldfile_add_library_path ($3, false); }
        |       OUTPUT '(' filename ')'
                { lang_add_output($3, 1); }
        |       OUTPUT_FORMAT '(' NAME ')'
@@ -335,11 +333,11 @@ ifile_p1:
        |       OUTPUT_ARCH '(' NAME ')'
                  { ldfile_set_output_arch ($3, bfd_arch_unknown); }
        |       FORCE_COMMON_ALLOCATION
-               { command_line.force_common_definition = TRUE ; }
+               { command_line.force_common_definition = true ; }
        |       FORCE_GROUP_ALLOCATION
-               { command_line.force_group_allocation = TRUE ; }
+               { command_line.force_group_allocation = true ; }
        |       INHIBIT_COMMON_ALLOCATION
-               { link_info.inhibit_common_definition = TRUE ; }
+               { link_info.inhibit_common_definition = true ; }
        |       INPUT '(' input_list ')'
        |       GROUP
                  { lang_enter_group (); }
@@ -396,17 +394,17 @@ input_list1:
                                 (char *)NULL); }
        |       AS_NEEDED '('
                  { $<integer>$ = input_flags.add_DT_NEEDED_for_regular;
-                   input_flags.add_DT_NEEDED_for_regular = TRUE; }
+                   input_flags.add_DT_NEEDED_for_regular = true; }
                     input_list1 ')'
                  { input_flags.add_DT_NEEDED_for_regular = $<integer>3; }
        |       input_list1 ',' AS_NEEDED '('
                  { $<integer>$ = input_flags.add_DT_NEEDED_for_regular;
-                   input_flags.add_DT_NEEDED_for_regular = TRUE; }
+                   input_flags.add_DT_NEEDED_for_regular = true; }
                     input_list1 ')'
                  { input_flags.add_DT_NEEDED_for_regular = $<integer>5; }
        |       input_list1 AS_NEEDED '('
                  { $<integer>$ = input_flags.add_DT_NEEDED_for_regular;
-                   input_flags.add_DT_NEEDED_for_regular = TRUE; }
+                   input_flags.add_DT_NEEDED_for_regular = true; }
                     input_list1 ')'
                  { input_flags.add_DT_NEEDED_for_regular = $<integer>4; }
        ;
@@ -423,7 +421,7 @@ sec_or_group_p1:
 
 statement_anywhere:
                ENTRY '(' NAME ')'
-               { lang_add_entry ($3, FALSE); }
+               { lang_add_entry ($3, false); }
        |       assignment end
        |       ASSERT_K  {ldlex_expression ();} '(' exp ',' NAME ')'
                { ldlex_popstate ();
@@ -536,7 +534,7 @@ sect_flag_list:     NAME
                              n->with = with_flags;
                              n->name = $1;
                            }
-                         n->valid = FALSE;
+                         n->valid = false;
                          n->next = NULL;
                          $$ = n;
                        }
@@ -554,7 +552,7 @@ sect_flag_list:     NAME
                              n->with = with_flags;
                              n->name = $3;
                            }
-                         n->valid = FALSE;
+                         n->valid = false;
                          n->next = $1;
                          $$ = n;
                        }
@@ -566,7 +564,7 @@ sect_flags:
                          struct flag_info *n;
                          n = ((struct flag_info *) xmalloc (sizeof *n));
                          n->flag_list = $3;
-                         n->flags_initialized = FALSE;
+                         n->flags_initialized = false;
                          n->not_with_flags = 0;
                          n->only_with_flags = 0;
                          $$ = n;
@@ -659,9 +657,9 @@ input_section_spec_no_keep:
 input_section_spec:
                input_section_spec_no_keep
        |       KEEP '('
-                       { ldgram_had_keep = TRUE; }
+                       { ldgram_had_keep = true; }
                input_section_spec_no_keep ')'
-                       { ldgram_had_keep = FALSE; }
+                       { ldgram_had_keep = false; }
        ;
 
 statement:
@@ -678,7 +676,7 @@ statement:
                }
        | SORT_BY_NAME '(' CONSTRUCTORS ')'
                {
-                 constructors_sorted = TRUE;
+                 constructors_sorted = true;
                  lang_add_attribute (lang_constructors_statement_enum);
                }
        | input_section_spec
@@ -763,7 +761,7 @@ end:        ';' | ','
 assignment:
                NAME '=' mustbe_exp
                {
-                 lang_add_assignment (exp_assign ($1, $3, FALSE));
+                 lang_add_assignment (exp_assign ($1, $3, false));
                }
        |       NAME assign_op mustbe_exp
                {
@@ -771,19 +769,19 @@ assignment:
                                                   exp_binop ($2,
                                                              exp_nameop (NAME,
                                                                          $1),
-                                                             $3), FALSE));
+                                                             $3), false));
                }
        |       HIDDEN '(' NAME '=' mustbe_exp ')'
                {
-                 lang_add_assignment (exp_assign ($3, $5, TRUE));
+                 lang_add_assignment (exp_assign ($3, $5, true));
                }
        |       PROVIDE '(' NAME '=' mustbe_exp ')'
                {
-                 lang_add_assignment (exp_provide ($3, $5, FALSE));
+                 lang_add_assignment (exp_provide ($3, $5, false));
                }
        |       PROVIDE_HIDDEN '(' NAME '=' mustbe_exp ')'
                {
-                 lang_add_assignment (exp_provide ($3, $5, TRUE));
+                 lang_add_assignment (exp_provide ($3, $5, true));
                }
        ;
 
@@ -805,7 +803,7 @@ memory_spec_list:
 
 
 memory_spec:   NAME
-               { region = lang_memory_region_lookup ($1, TRUE); }
+               { region = lang_memory_region_lookup ($1, true); }
                attributes_opt ':'
                origin_spec opt_comma length_spec
                {}
@@ -863,12 +861,13 @@ high_level_library_NAME_list:
                        { ldemul_hll($3); }
        |       filename
                        { ldemul_hll($1); }
-
        ;
 
 low_level_library:
        SYSLIB '(' low_level_library_NAME_list ')'
-       ; low_level_library_NAME_list:
+       ;
+
+low_level_library_NAME_list:
                low_level_library_NAME_list opt_comma filename
                        { ldemul_syslib($3); }
        |
@@ -876,9 +875,9 @@ low_level_library:
 
 floating_point_support:
                FLOAT
-                       { lang_float(TRUE); }
+                       { lang_float(true); }
        |       NOFLOAT
-                       { lang_float(FALSE); }
+                       { lang_float(false); }
        ;
 
 nocrossref_list:
@@ -1069,11 +1068,15 @@ section:        NAME            { ldlex_expression(); }
                '}' { ldlex_popstate (); ldlex_expression (); }
                memspec_opt memspec_at_opt phdr_opt fill_opt
                {
+                 if (yychar == NAME)
+                   {
+                     yyclearin;
+                     ldlex_backup ();
+                   }
                  ldlex_popstate ();
                  lang_leave_output_section_statement ($18, $15, $17, $16);
                }
                opt_comma
-               {}
        |       OVERLAY
                        { ldlex_expression (); }
                opt_exp_without_type opt_nocrossrefs opt_at opt_subalign
@@ -1087,6 +1090,11 @@ section: NAME            { ldlex_expression(); }
                        { ldlex_popstate (); ldlex_expression (); }
                memspec_opt memspec_at_opt phdr_opt fill_opt
                        {
+                         if (yychar == NAME)
+                           {
+                             yyclearin;
+                             ldlex_backup ();
+                           }
                          ldlex_popstate ();
                          lang_leave_overlay ($5, (int) $4,
                                              $16, $13, $15, $14);
@@ -1100,7 +1108,7 @@ section:  NAME            { ldlex_expression(); }
                opt_exp_with_type
                {
                  ldlex_popstate ();
-                 lang_add_assignment (exp_assign (".", $3, FALSE));
+                 lang_add_assignment (exp_assign (".", $3, false));
                }
                '{' sec_or_group_p1 '}'
        |       INCLUDE filename
@@ -1165,7 +1173,7 @@ phdr_opt:
                  n = ((struct lang_output_section_phdr_list *)
                       xmalloc (sizeof *n));
                  n->name = $3;
-                 n->used = FALSE;
+                 n->used = false;
                  n->next = $1;
                  $$ = n;
                }
@@ -1261,9 +1269,9 @@ phdr_qualifiers:
                {
                  $$ = $3;
                  if (strcmp ($1, "FILEHDR") == 0 && $2 == NULL)
-                   $$.filehdr = TRUE;
+                   $$.filehdr = true;
                  else if (strcmp ($1, "PHDRS") == 0 && $2 == NULL)
-                   $$.phdrs = TRUE;
+                   $$.phdrs = true;
                  else if (strcmp ($1, "FLAGS") == 0 && $2 != NULL)
                    $$.flags = $2;
                  else
@@ -1312,7 +1320,7 @@ dynamic_list_node:
 dynamic_list_tag:
                vers_defns ';'
                {
-                 lang_append_dynamic_list ($1);
+                 lang_append_dynamic_list (current_dynamic_list_p, $1);
                }
        ;
 
@@ -1399,19 +1407,19 @@ vers_tag:
 vers_defns:
                VERS_IDENTIFIER
                {
-                 $$ = lang_new_vers_pattern (NULL, $1, ldgram_vers_current_lang, FALSE);
+                 $$ = lang_new_vers_pattern (NULL, $1, ldgram_vers_current_lang, false);
                }
        |       NAME
                {
-                 $$ = lang_new_vers_pattern (NULL, $1, ldgram_vers_current_lang, TRUE);
+                 $$ = lang_new_vers_pattern (NULL, $1, ldgram_vers_current_lang, true);
                }
        |       vers_defns ';' VERS_IDENTIFIER
                {
-                 $$ = lang_new_vers_pattern ($1, $3, ldgram_vers_current_lang, FALSE);
+                 $$ = lang_new_vers_pattern ($1, $3, ldgram_vers_current_lang, false);
                }
        |       vers_defns ';' NAME
                {
-                 $$ = lang_new_vers_pattern ($1, $3, ldgram_vers_current_lang, TRUE);
+                 $$ = lang_new_vers_pattern ($1, $3, ldgram_vers_current_lang, true);
                }
        |       vers_defns ';' EXTERN NAME '{'
                        {
@@ -1438,27 +1446,27 @@ vers_defns:
                        }
        |       GLOBAL
                {
-                 $$ = lang_new_vers_pattern (NULL, "global", ldgram_vers_current_lang, FALSE);
+                 $$ = lang_new_vers_pattern (NULL, "global", ldgram_vers_current_lang, false);
                }
        |       vers_defns ';' GLOBAL
                {
-                 $$ = lang_new_vers_pattern ($1, "global", ldgram_vers_current_lang, FALSE);
+                 $$ = lang_new_vers_pattern ($1, "global", ldgram_vers_current_lang, false);
                }
        |       LOCAL
                {
-                 $$ = lang_new_vers_pattern (NULL, "local", ldgram_vers_current_lang, FALSE);
+                 $$ = lang_new_vers_pattern (NULL, "local", ldgram_vers_current_lang, false);
                }
        |       vers_defns ';' LOCAL
                {
-                 $$ = lang_new_vers_pattern ($1, "local", ldgram_vers_current_lang, FALSE);
+                 $$ = lang_new_vers_pattern ($1, "local", ldgram_vers_current_lang, false);
                }
        |       EXTERN
                {
-                 $$ = lang_new_vers_pattern (NULL, "extern", ldgram_vers_current_lang, FALSE);
+                 $$ = lang_new_vers_pattern (NULL, "extern", ldgram_vers_current_lang, false);
                }
        |       vers_defns ';' EXTERN
                {
-                 $$ = lang_new_vers_pattern ($1, "extern", ldgram_vers_current_lang, FALSE);
+                 $$ = lang_new_vers_pattern ($1, "extern", ldgram_vers_current_lang, false);
                }
        ;
 
This page took 0.029112 seconds and 4 git commands to generate.