[BACK]Return to ldgram.y CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / external / gpl3 / binutils.old / dist / ld

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/external/gpl3/binutils.old/dist/ld/ldgram.y between version 1.5 and 1.6

version 1.5, 2018/04/14 15:49:44 version 1.6, 2020/04/03 17:51:14
Line 1 
Line 1 
 /* 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-2016 Free Software Foundation, Inc.     Copyright (C) 1991-2018 Free Software Foundation, Inc.
    Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com).     Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com).
   
    This file is part of the GNU Binutils.     This file is part of the GNU Binutils.
Line 48 
Line 48 
 static enum section_type sectype;  static enum section_type sectype;
 static lang_memory_region_type *region;  static lang_memory_region_type *region;
   
 bfd_boolean ldgram_had_keep = FALSE;  static bfd_boolean ldgram_had_keep = FALSE;
 char *ldgram_vers_current_lang = NULL;  static char *ldgram_vers_current_lang = NULL;
   
 #define ERROR_NAME_MAX 20  #define ERROR_NAME_MAX 20
 static char *error_names[ERROR_NAME_MAX];  static char *error_names[ERROR_NAME_MAX];
Line 92  static int error_index;
Line 92  static int error_index;
 %type <etree> opt_exp_without_type opt_subalign opt_align  %type <etree> opt_exp_without_type opt_subalign opt_align
 %type <fill> fill_opt fill_exp  %type <fill> fill_opt fill_exp
 %type <name_list> exclude_name_list  %type <name_list> exclude_name_list
 %type <wildcard_list> file_NAME_list  %type <wildcard_list> section_name_list
 %type <flag_info_list> sect_flag_list  %type <flag_info_list> sect_flag_list
 %type <flag_info> sect_flags  %type <flag_info> sect_flags
 %type <name> memspec_opt casesymlist  %type <name> memspec_opt casesymlist
 %type <name> memspec_at_opt  %type <name> memspec_at_opt
 %type <cname> wildcard_name  %type <cname> wildcard_name
 %type <wildcard> wildcard_spec  %type <wildcard> section_name_spec filename_spec wildcard_maybe_exclude
 %token <bigint> INT  %token <bigint> INT
 %token <name> NAME LNAME  %token <name> NAME LNAME
 %type <integer> length  %type <integer> length
Line 131  static int error_index;
Line 131  static int error_index;
 %token SORT_BY_INIT_PRIORITY  %token SORT_BY_INIT_PRIORITY
 %token '{' '}'  %token '{' '}'
 %token SIZEOF_HEADERS OUTPUT_FORMAT FORCE_COMMON_ALLOCATION OUTPUT_ARCH  %token SIZEOF_HEADERS OUTPUT_FORMAT FORCE_COMMON_ALLOCATION OUTPUT_ARCH
 %token INHIBIT_COMMON_ALLOCATION  %token INHIBIT_COMMON_ALLOCATION FORCE_GROUP_ALLOCATION
 %token SEGMENT_START  %token SEGMENT_START
 %token INCLUDE  %token INCLUDE
 %token MEMORY  %token MEMORY
Line 199  mri_script_file:
Line 199  mri_script_file:
   
 mri_script_lines:  mri_script_lines:
                 mri_script_lines mri_script_command NEWLINE                  mri_script_lines mri_script_command NEWLINE
           |          |
         ;          ;
   
 mri_script_command:  mri_script_command:
                 CHIP  exp                  CHIP  exp
         |       CHIP  exp ',' exp          |       CHIP  exp ',' exp
         |       NAME    {          |       NAME    {
                         einfo(_("%P%F: unrecognised keyword in MRI style script '%s'\n"),$1);                          einfo(_("%F%P: unrecognised keyword in MRI style script '%s'\n"),$1);
                         }                          }
         |       LIST    {          |       LIST    {
                         config.map_filename = "-";                          config.map_filename = "-";
                         }                          }
         |       ORDER ordernamelist          |       ORDER ordernamelist
         |       ENDWORD          |       ENDWORD
         |       PUBLIC NAME '=' exp          |       PUBLIC NAME '=' exp
                         { mri_public($2, $4); }                          { mri_public($2, $4); }
         |       PUBLIC NAME ',' exp          |       PUBLIC NAME ',' exp
                         { mri_public($2, $4); }                          { mri_public($2, $4); }
         |       PUBLIC NAME  exp          |       PUBLIC NAME  exp
                         { mri_public($2, $3); }                          { mri_public($2, $3); }
         |       FORMAT NAME          |       FORMAT NAME
                         { mri_format($2); }                          { mri_format($2); }
         |       SECT NAME ',' exp          |       SECT NAME ',' exp
                         { mri_output_section($2, $4);}                          { mri_output_section($2, $4);}
Line 237  mri_script_command:
Line 237  mri_script_command:
                         { mri_alignmod($2,$4); }                          { mri_alignmod($2,$4); }
         |       ABSOLUTE mri_abs_name_list          |       ABSOLUTE mri_abs_name_list
         |       LOAD     mri_load_name_list          |       LOAD     mri_load_name_list
         |       NAMEWORD NAME          |       NAMEWORD NAME
                         { mri_name($2); }                          { mri_name($2); }
         |       ALIAS NAME ',' NAME          |       ALIAS NAME ',' NAME
                         { mri_alias($2,$4,0);}                          { mri_alias($2,$4,0);}
         |       ALIAS NAME ',' INT          |       ALIAS NAME ',' INT
                         { mri_alias ($2, 0, (int) $4.integer); }                          { mri_alias ($2, 0, (int) $4.integer); }
         |       BASE     exp          |       BASE     exp
                         { mri_base($2); }                          { mri_base($2); }
         |       TRUNCATE INT          |       TRUNCATE INT
                 { mri_truncate ((unsigned int) $2.integer); }                  { mri_truncate ((unsigned int) $2.integer); }
Line 255  mri_script_command:
Line 255  mri_script_command:
                 { ldlex_popstate (); }                  { ldlex_popstate (); }
         |       START NAME          |       START NAME
                 { lang_add_entry ($2, FALSE); }                  { lang_add_entry ($2, FALSE); }
         |          |
         ;          ;
   
 ordernamelist:  ordernamelist:
               ordernamelist ',' NAME         { mri_order($3); }                ordernamelist ',' NAME         { mri_order($3); }
         |     ordernamelist  NAME         { mri_order($2); }          |     ordernamelist  NAME         { mri_order($2); }
         |          |
         ;          ;
   
 mri_load_name_list:  mri_load_name_list:
Line 271  mri_load_name_list:
Line 271  mri_load_name_list:
         ;          ;
   
 mri_abs_name_list:  mri_abs_name_list:
                 NAME                  NAME
                         { mri_only_load($1); }                          { mri_only_load($1); }
         |       mri_abs_name_list ','  NAME          |       mri_abs_name_list ','  NAME
                         { mri_only_load($3); }                          { mri_only_load($3); }
         ;          ;
   
 casesymlist:  casesymlist:
Line 302  script_file:
Line 302  script_file:
         { ldlex_both(); }          { ldlex_both(); }
         ifile_list          ifile_list
         { ldlex_popstate(); }          { ldlex_popstate(); }
         ;          ;
   
 ifile_list:  ifile_list:
         ifile_list ifile_p1          ifile_list ifile_p1
         |          |
         ;          ;
   
   
Line 320  ifile_p1:
Line 320  ifile_p1:
         |       floating_point_support          |       floating_point_support
         |       statement_anywhere          |       statement_anywhere
         |       version          |       version
         |        ';'          |        ';'
         |       TARGET_K '(' NAME ')'          |       TARGET_K '(' NAME ')'
                 { lang_add_target($3); }                  { lang_add_target($3); }
         |       SEARCH_DIR '(' filename ')'          |       SEARCH_DIR '(' filename ')'
                 { ldfile_add_library_path ($3, FALSE); }                  { ldfile_add_library_path ($3, FALSE); }
         |       OUTPUT '(' filename ')'          |       OUTPUT '(' filename ')'
                 { lang_add_output($3, 1); }                  { lang_add_output($3, 1); }
         |       OUTPUT_FORMAT '(' NAME ')'          |       OUTPUT_FORMAT '(' NAME ')'
                   { lang_add_output_format ($3, (char *) NULL,                    { lang_add_output_format ($3, (char *) NULL,
                                             (char *) NULL, 1); }                                              (char *) NULL, 1); }
         |       OUTPUT_FORMAT '(' NAME ',' NAME ',' NAME ')'          |       OUTPUT_FORMAT '(' NAME ',' NAME ',' NAME ')'
                   { lang_add_output_format ($3, $5, $7, 1); }                    { lang_add_output_format ($3, $5, $7, 1); }
         |       OUTPUT_ARCH '(' NAME ')'          |       OUTPUT_ARCH '(' NAME ')'
                   { ldfile_set_output_arch ($3, bfd_arch_unknown); }                    { ldfile_set_output_arch ($3, bfd_arch_unknown); }
         |       FORCE_COMMON_ALLOCATION          |       FORCE_COMMON_ALLOCATION
                 { command_line.force_common_definition = TRUE ; }                  { command_line.force_common_definition = TRUE ; }
           |       FORCE_GROUP_ALLOCATION
                   { command_line.force_group_allocation = TRUE ; }
         |       INHIBIT_COMMON_ALLOCATION          |       INHIBIT_COMMON_ALLOCATION
                 { command_line.inhibit_common_definition = TRUE ; }                  { link_info.inhibit_common_definition = TRUE ; }
         |       INPUT '(' input_list ')'          |       INPUT '(' input_list ')'
         |       GROUP          |       GROUP
                   { lang_enter_group (); }                    { lang_enter_group (); }
                     '(' input_list ')'                      '(' input_list ')'
                   { lang_leave_group (); }                    { lang_leave_group (); }
         |       MAP '(' filename ')'          |       MAP '(' filename ')'
                 { lang_add_map($3); }                  { lang_add_map($3); }
         |       INCLUDE filename          |       INCLUDE filename
                 { ldlex_script (); ldfile_open_command_file($2); }                  { ldlex_script (); ldfile_open_command_file($2); }
Line 445  wildcard_name:
Line 447  wildcard_name:
                         }                          }
         ;          ;
   
 wildcard_spec:  wildcard_maybe_exclude:
                 wildcard_name                  wildcard_name
                         {                          {
                           $$.name = $1;                            $$.name = $1;
Line 453  wildcard_spec:
Line 455  wildcard_spec:
                           $$.exclude_name_list = NULL;                            $$.exclude_name_list = NULL;
                           $$.section_flag_list = NULL;                            $$.section_flag_list = NULL;
                         }                          }
         |       EXCLUDE_FILE '(' exclude_name_list ')' wildcard_name          |       EXCLUDE_FILE '(' exclude_name_list ')' wildcard_name
                         {                          {
                           $$.name = $5;                            $$.name = $5;
                           $$.sorted = none;                            $$.sorted = none;
                           $$.exclude_name_list = $3;                            $$.exclude_name_list = $3;
                           $$.section_flag_list = NULL;                            $$.section_flag_list = NULL;
                         }                          }
         |       SORT_BY_NAME '(' wildcard_name ')'          ;
   
   filename_spec:
                   wildcard_maybe_exclude
           |       SORT_BY_NAME '(' wildcard_maybe_exclude ')'
                         {                          {
                           $$.name = $3;                            $$ = $3;
                             $$.sorted = by_name;
                           }
           |       SORT_NONE '(' wildcard_maybe_exclude ')'
                           {
                             $$ = $3;
                             $$.sorted = by_none;
                           }
           ;
   
   section_name_spec:
                   wildcard_maybe_exclude
           |       SORT_BY_NAME '(' wildcard_maybe_exclude ')'
                           {
                             $$ = $3;
                           $$.sorted = by_name;                            $$.sorted = by_name;
                           $$.exclude_name_list = NULL;  
                           $$.section_flag_list = NULL;  
                         }                          }
         |       SORT_BY_ALIGNMENT '(' wildcard_name ')'          |       SORT_BY_ALIGNMENT '(' wildcard_maybe_exclude ')'
                         {                          {
                           $$.name = $3;                            $$ = $3;
                           $$.sorted = by_alignment;                            $$.sorted = by_alignment;
                           $$.exclude_name_list = NULL;  
                           $$.section_flag_list = NULL;  
                         }                          }
         |       SORT_NONE '(' wildcard_name ')'          |       SORT_NONE '(' wildcard_maybe_exclude ')'
                         {                          {
                           $$.name = $3;                            $$ = $3;
                           $$.sorted = by_none;                            $$.sorted = by_none;
                           $$.exclude_name_list = NULL;  
                           $$.section_flag_list = NULL;  
                         }                          }
         |       SORT_BY_NAME '(' SORT_BY_ALIGNMENT '(' wildcard_name ')' ')'          |       SORT_BY_NAME '(' SORT_BY_ALIGNMENT '(' wildcard_maybe_exclude ')' ')'
                         {                          {
                           $$.name = $5;                            $$ = $5;
                           $$.sorted = by_name_alignment;                            $$.sorted = by_name_alignment;
                           $$.exclude_name_list = NULL;  
                           $$.section_flag_list = NULL;  
                         }                          }
         |       SORT_BY_NAME '(' SORT_BY_NAME '(' wildcard_name ')' ')'          |       SORT_BY_NAME '(' SORT_BY_NAME '(' wildcard_maybe_exclude ')' ')'
                         {                          {
                           $$.name = $5;                            $$ = $5;
                           $$.sorted = by_name;                            $$.sorted = by_name;
                           $$.exclude_name_list = NULL;  
                           $$.section_flag_list = NULL;  
                         }                          }
         |       SORT_BY_ALIGNMENT '(' SORT_BY_NAME '(' wildcard_name ')' ')'          |       SORT_BY_ALIGNMENT '(' SORT_BY_NAME '(' wildcard_maybe_exclude ')' ')'
                         {                          {
                           $$.name = $5;                            $$ = $5;
                           $$.sorted = by_alignment_name;                            $$.sorted = by_alignment_name;
                           $$.exclude_name_list = NULL;  
                           $$.section_flag_list = NULL;  
                         }                          }
         |       SORT_BY_ALIGNMENT '(' SORT_BY_ALIGNMENT '(' wildcard_name ')' ')'          |       SORT_BY_ALIGNMENT '(' SORT_BY_ALIGNMENT '(' wildcard_maybe_exclude ')' ')'
                         {                          {
                           $$.name = $5;                            $$ = $5;
                           $$.sorted = by_alignment;                            $$.sorted = by_alignment;
                           $$.exclude_name_list = NULL;  
                           $$.section_flag_list = NULL;  
                         }  
         |       SORT_BY_NAME '(' EXCLUDE_FILE '(' exclude_name_list ')' wildcard_name ')'  
                         {  
                           $$.name = $7;  
                           $$.sorted = by_name;  
                           $$.exclude_name_list = $5;  
                           $$.section_flag_list = NULL;  
                         }                          }
         |       SORT_BY_INIT_PRIORITY '(' wildcard_name ')'          |       SORT_BY_INIT_PRIORITY '(' wildcard_maybe_exclude ')'
                         {                          {
                           $$.name = $3;                            $$ = $3;
                           $$.sorted = by_init_priority;                            $$.sorted = by_init_priority;
                           $$.exclude_name_list = NULL;  
                           $$.section_flag_list = NULL;  
                         }                          }
         ;          ;
   
Line 596  exclude_name_list:
Line 593  exclude_name_list:
                         }                          }
         ;          ;
   
 file_NAME_list:  section_name_list:
                 file_NAME_list opt_comma wildcard_spec                  section_name_list opt_comma section_name_spec
                         {                          {
                           struct wildcard_list *tmp;                            struct wildcard_list *tmp;
                           tmp = (struct wildcard_list *) xmalloc (sizeof *tmp);                            tmp = (struct wildcard_list *) xmalloc (sizeof *tmp);
Line 606  file_NAME_list:
Line 603  file_NAME_list:
                           $$ = tmp;                            $$ = tmp;
                         }                          }
         |          |
                 wildcard_spec                  section_name_spec
                         {                          {
                           struct wildcard_list *tmp;                            struct wildcard_list *tmp;
                           tmp = (struct wildcard_list *) xmalloc (sizeof *tmp);                            tmp = (struct wildcard_list *) xmalloc (sizeof *tmp);
Line 635  input_section_spec_no_keep:
Line 632  input_section_spec_no_keep:
                           tmp.section_flag_list = $1;                            tmp.section_flag_list = $1;
                           lang_add_wild (&tmp, NULL, ldgram_had_keep);                            lang_add_wild (&tmp, NULL, ldgram_had_keep);
                         }                          }
         |       '[' file_NAME_list ']'          |       '[' section_name_list ']'
                         {                          {
                           lang_add_wild (NULL, $2, ldgram_had_keep);                            lang_add_wild (NULL, $2, ldgram_had_keep);
                         }                          }
         |       sect_flags '[' file_NAME_list ']'          |       sect_flags '[' section_name_list ']'
                         {                          {
                           struct wildcard_spec tmp;                            struct wildcard_spec tmp;
                           tmp.name = NULL;                            tmp.name = NULL;
Line 648  input_section_spec_no_keep:
Line 645  input_section_spec_no_keep:
                           tmp.section_flag_list = $1;                            tmp.section_flag_list = $1;
                           lang_add_wild (&tmp, $3, ldgram_had_keep);                            lang_add_wild (&tmp, $3, ldgram_had_keep);
                         }                          }
         |       wildcard_spec '(' file_NAME_list ')'          |       filename_spec '(' section_name_list ')'
                         {                          {
                           lang_add_wild (&$1, $3, ldgram_had_keep);                            lang_add_wild (&$1, $3, ldgram_had_keep);
                         }                          }
         |       sect_flags wildcard_spec '(' file_NAME_list ')'          |       sect_flags filename_spec '(' section_name_list ')'
                         {                          {
                           $2.section_flag_list = $1;                            $2.section_flag_list = $1;
                           lang_add_wild (&$2, $4, ldgram_had_keep);                            lang_add_wild (&$2, $4, ldgram_had_keep);
Line 668  input_section_spec:
Line 665  input_section_spec:
         ;          ;
   
 statement:  statement:
                 assignment end                  assignment end
         |       CREATE_OBJECT_SYMBOLS          |       CREATE_OBJECT_SYMBOLS
                 {                  {
                 lang_add_attribute(lang_object_symbols_statement_enum);                  lang_add_attribute(lang_object_symbols_statement_enum);
                 }                  }
         |       ';'          |       ';'
         |       CONSTRUCTORS          |       CONSTRUCTORS
                 {                  {
   
                   lang_add_attribute(lang_constructors_statement_enum);                    lang_add_attribute(lang_constructors_statement_enum);
Line 685  statement:
Line 682  statement:
                   lang_add_attribute (lang_constructors_statement_enum);                    lang_add_attribute (lang_constructors_statement_enum);
                 }                  }
         | input_section_spec          | input_section_spec
         | length '(' mustbe_exp ')'          | length '(' mustbe_exp ')'
                         {                  {
                           lang_add_data ((int) $1, $3);                    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          | ASSERT_K  {ldlex_expression ();} '(' exp ',' NAME ')' end
                         { ldlex_popstate ();                          { ldlex_popstate ();
                           lang_add_assignment (exp_assert ($4, $6)); }                            lang_add_assignment (exp_assert ($4, $6)); }
Line 705  statement:
Line 702  statement:
   
 statement_list:  statement_list:
                 statement_list statement                  statement_list statement
         |       statement          |       statement
         ;          ;
   
 statement_list_opt:  statement_list_opt:
Line 720  length:
Line 717  length:
                         { $$ = $1; }                          { $$ = $1; }
         |       LONG          |       LONG
                         { $$ = $1; }                          { $$ = $1; }
         |       SHORT          |       SHORT
                         { $$ = $1; }                          { $$ = $1; }
         |       BYTE          |       BYTE
                         { $$ = $1; }                          { $$ = $1; }
Line 736  fill_exp:
Line 733  fill_exp:
 fill_opt:  fill_opt:
           '=' fill_exp            '=' fill_exp
                 { $$ = $2; }                  { $$ = $2; }
         |       { $$ = (fill_type *) 0; }          |       { $$ = (fill_type *) 0; }
         ;          ;
   
 assign_op:  assign_op:
Line 744  assign_op:
Line 741  assign_op:
                         { $$ = '+'; }                          { $$ = '+'; }
         |       MINUSEQ          |       MINUSEQ
                         { $$ = '-'; }                          { $$ = '-'; }
         |       MULTEQ          |       MULTEQ
                         { $$ = '*'; }                          { $$ = '*'; }
         |       DIVEQ          |       DIVEQ
                         { $$ = '/'; }                          { $$ = '/'; }
         |       LSHIFTEQ          |       LSHIFTEQ
                         { $$ = LSHIFT; }                          { $$ = LSHIFT; }
         |       RSHIFTEQ          |       RSHIFTEQ
                         { $$ = RSHIFT; }                          { $$ = RSHIFT; }
         |       ANDEQ          |       ANDEQ
                         { $$ = '&'; }                          { $$ = '&'; }
         |       OREQ          |       OREQ
                         { $$ = '|'; }                          { $$ = '|'; }
   
         ;          ;
Line 807  memory_spec_list:
Line 804  memory_spec_list:
         ;          ;
   
   
 memory_spec:    NAME  memory_spec:    NAME
                 { region = lang_memory_region_lookup ($1, TRUE); }                  { region = lang_memory_region_lookup ($1, TRUE); }
                 attributes_opt ':'                  attributes_opt ':'
                 origin_spec opt_comma length_spec                  origin_spec opt_comma length_spec
Line 827  origin_spec:
Line 824  origin_spec:
         ;          ;
   
 length_spec:  length_spec:
              LENGTH '=' mustbe_exp               LENGTH '=' mustbe_exp
                 {                  {
                   region->length_exp = $3;                    region->length_exp = $3;
                 }                  }
Line 949  exp :
Line 946  exp :
                         { $$ = exp_binop (NE , $1, $3); }                          { $$ = exp_binop (NE , $1, $3); }
         |       exp LE exp          |       exp LE exp
                         { $$ = exp_binop (LE , $1, $3); }                          { $$ = exp_binop (LE , $1, $3); }
         |       exp GE exp          |       exp GE exp
                         { $$ = exp_binop (GE , $1, $3); }                          { $$ = exp_binop (GE , $1, $3); }
         |       exp '<' exp          |       exp '<' exp
                         { $$ = exp_binop ('<' , $1, $3); }                          { $$ = exp_binop ('<' , $1, $3); }
Line 971  exp :
Line 968  exp :
                         { $$ = exp_nameop (DEFINED, $3); }                          { $$ = exp_nameop (DEFINED, $3); }
         |       INT          |       INT
                         { $$ = exp_bigintop ($1.integer, $1.str); }                          { $$ = exp_bigintop ($1.integer, $1.str); }
         |       SIZEOF_HEADERS          |       SIZEOF_HEADERS
                         { $$ = exp_nameop (SIZEOF_HEADERS,0); }                          { $$ = exp_nameop (SIZEOF_HEADERS,0); }
   
         |       ALIGNOF '(' NAME ')'          |       ALIGNOF '(' NAME ')'
Line 996  exp :
Line 993  exp :
                         { $$ = exp_binop (DATA_SEGMENT_RELRO_END, $5, $3); }                          { $$ = exp_binop (DATA_SEGMENT_RELRO_END, $5, $3); }
         |       DATA_SEGMENT_END '(' exp ')'          |       DATA_SEGMENT_END '(' exp ')'
                         { $$ = exp_unop (DATA_SEGMENT_END, $3); }                          { $$ = exp_unop (DATA_SEGMENT_END, $3); }
         |       SEGMENT_START '(' NAME ',' exp ')'          |       SEGMENT_START '(' NAME ',' exp ')'
                         { /* The operands to the expression node are                          { /* The operands to the expression node are
                              placed in the opposite order from the way                               placed in the opposite order from the way
                              in which they appear in the script as                               in which they appear in the script as
                              that allows us to reuse more code in                               that allows us to reuse more code in
Line 1025  exp :
Line 1022  exp :
   
   
 memspec_at_opt:  memspec_at_opt:
                 AT '>' NAME { $$ = $3; }                  AT '>' NAME { $$ = $3; }
         |       { $$ = 0; }          |       { $$ = 0; }
         ;          ;
   
 opt_at:  opt_at:
                 AT '(' exp ')' { $$ = $3; }                  AT '(' exp ')' { $$ = $3; }
Line 1056  sect_constraint:
Line 1053  sect_constraint:
         |       { $$ = 0; }          |       { $$ = 0; }
         ;          ;
   
 section:        NAME            { ldlex_expression(); }  section:        NAME            { ldlex_expression(); }
                 opt_exp_with_type                  opt_exp_with_type
                 opt_at                  opt_at
                 opt_align                  opt_align
Line 1070  section: NAME   { ldlex_expression(); }
Line 1067  section: NAME   { ldlex_expression(); }
                                                               $5, $7, $4, $9, $6);                                                                $5, $7, $4, $9, $6);
                         }                          }
                 statement_list_opt                  statement_list_opt
                 '}' { ldlex_popstate (); ldlex_expression (); }                  '}' { ldlex_popstate (); ldlex_expression (); }
                 memspec_opt memspec_at_opt phdr_opt fill_opt                  memspec_opt memspec_at_opt phdr_opt fill_opt
                 {                  {
                   ldlex_popstate ();                    ldlex_popstate ();
Line 1122  type:
Line 1119  type:
         ;          ;
   
 atype:  atype:
                 '(' type ')'                  '(' type ')'
         |       /* EMPTY */ { sectype = normal_section; }          |       /* EMPTY */ { sectype = normal_section; }
         |       '(' ')' { sectype = normal_section; }          |       '(' ')' { sectype = normal_section; }
         ;          ;
   
 opt_exp_with_type:  opt_exp_with_type:
Line 1247  phdr_type:
Line 1244  phdr_type:
                           else                            else
                             {                              {
                               einfo (_("\                                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);                                       NULL, s);
                               $$ = exp_intop (0);                                $$ = exp_intop (0);
                             }                              }
Line 1271  phdr_qualifiers:
Line 1268  phdr_qualifiers:
                   else if (strcmp ($1, "FLAGS") == 0 && $2 != NULL)                    else if (strcmp ($1, "FLAGS") == 0 && $2 != NULL)
                     $$.flags = $2;                      $$.flags = $2;
                   else                    else
                     einfo (_("%X%P:%S: PHDRS syntax error at `%s'\n"),                      einfo (_("%X%P:%pS: PHDRS syntax error at `%s'\n"),
                            NULL, $1);                             NULL, $1);
                 }                  }
         |       AT '(' exp ')' phdr_qualifiers          |       AT '(' exp ')' phdr_qualifiers
Line 1405  vers_defns:
Line 1402  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);
                 }                  }
Line 1480  yyerror(arg)
Line 1477  yyerror(arg)
     einfo (_("%P:%s: file format not recognized; treating as linker script\n"),      einfo (_("%P:%s: file format not recognized; treating as linker script\n"),
            ldlex_filename ());             ldlex_filename ());
   if (error_index > 0 && error_index < ERROR_NAME_MAX)    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);
 }  }

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

CVSweb <webmaster@jp.NetBSD.org>