Home | History | Annotate | Line # | Download | only in ld
deffilep.c revision 1.10
      1 /* A Bison parser, made by GNU Bison 3.8.2.  */
      2 
      3 /* Bison implementation for Yacc-like parsers in C
      4 
      5    Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
      6    Inc.
      7 
      8    This program is free software: you can redistribute it and/or modify
      9    it under the terms of the GNU General Public License as published by
     10    the Free Software Foundation, either version 3 of the License, or
     11    (at your option) any later version.
     12 
     13    This program is distributed in the hope that it will be useful,
     14    but WITHOUT ANY WARRANTY; without even the implied warranty of
     15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16    GNU General Public License for more details.
     17 
     18    You should have received a copy of the GNU General Public License
     19    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
     20 
     21 /* As a special exception, you may create a larger work that contains
     22    part or all of the Bison parser skeleton and distribute that work
     23    under terms of your choice, so long as that work isn't itself a
     24    parser generator using the skeleton or a modified version thereof
     25    as a parser skeleton.  Alternatively, if you modify or redistribute
     26    the parser skeleton itself, you may (at your option) remove this
     27    special exception, which will cause the skeleton and the resulting
     28    Bison output files to be licensed under the GNU General Public
     29    License without this special exception.
     30 
     31    This special exception was added by the Free Software Foundation in
     32    version 2.2 of Bison.  */
     33 
     34 /* C LALR(1) parser skeleton written by Richard Stallman, by
     35    simplifying the original so-called "semantic" parser.  */
     36 
     37 /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
     38    especially those whose name start with YY_ or yy_.  They are
     39    private implementation details that can be changed or removed.  */
     40 
     41 /* All symbols defined below should begin with yy or YY, to avoid
     42    infringing on user name space.  This should be done even for local
     43    variables, as they might otherwise be expanded by user macros.
     44    There are some unavoidable exceptions within include files to
     45    define necessary library symbols; they are noted "INFRINGES ON
     46    USER NAME SPACE" below.  */
     47 
     48 /* Identify Bison output, and Bison version.  */
     49 #define YYBISON 30802
     50 
     51 /* Bison version string.  */
     52 #define YYBISON_VERSION "3.8.2"
     53 
     54 /* Skeleton name.  */
     55 #define YYSKELETON_NAME "yacc.c"
     56 
     57 /* Pure parsers.  */
     58 #define YYPURE 0
     59 
     60 /* Push parsers.  */
     61 #define YYPUSH 0
     62 
     63 /* Pull parsers.  */
     64 #define YYPULL 1
     65 
     66 
     67 
     68 
     69 /* First part of user prologue.  */
     70 #line 1 "deffilep.y"
     71  /* deffilep.y - parser for .def files */
     72 
     73 /*   Copyright (C) 1995-2025 Free Software Foundation, Inc.
     74 
     75      This file is part of GNU Binutils.
     76 
     77      This program is free software; you can redistribute it and/or modify
     78      it under the terms of the GNU General Public License as published by
     79      the Free Software Foundation; either version 3 of the License, or
     80      (at your option) any later version.
     81 
     82      This program is distributed in the hope that it will be useful,
     83      but WITHOUT ANY WARRANTY; without even the implied warranty of
     84      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     85      GNU General Public License for more details.
     86 
     87      You should have received a copy of the GNU General Public License
     88      along with this program; if not, write to the Free Software
     89      Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     90      MA 02110-1301, USA.  */
     91 
     92 #include "sysdep.h"
     93 #include "libiberty.h"
     94 #include "safe-ctype.h"
     95 #include "bfd.h"
     96 #include "bfdlink.h"
     97 #include "ld.h"
     98 #include "ldmisc.h"
     99 #include "deffile.h"
    100 
    101 #define TRACE 0
    102 
    103 #define ROUND_UP(a, b) (((a)+((b)-1))&~((b)-1))
    104 
    105 #define SYMBOL_LIST_ARRAY_GROW 64
    106 
    107 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
    108    as well as gratuitiously global symbol names, so we can have multiple
    109    yacc generated parsers in ld.  Note that these are only the variables
    110    produced by yacc.  If other parser generators (bison, byacc, etc) produce
    111    additional global names that conflict at link time, then those parser
    112    generators need to be fixed instead of adding those names to this list.  */
    113 
    114 #define	yymaxdepth def_maxdepth
    115 #define	yyparse	def_parse
    116 #define	yylex	def_lex
    117 #define	yyerror	def_error
    118 #define	yylval	def_lval
    119 #define	yychar	def_char
    120 #define	yydebug	def_debug
    121 #define	yypact	def_pact
    122 #define	yyr1	def_r1
    123 #define	yyr2	def_r2
    124 #define	yydef	def_def
    125 #define	yychk	def_chk
    126 #define	yypgo	def_pgo
    127 #define	yyact	def_act
    128 #define	yyexca	def_exca
    129 #define yyerrflag def_errflag
    130 #define yynerrs	def_nerrs
    131 #define	yyps	def_ps
    132 #define	yypv	def_pv
    133 #define	yys	def_s
    134 #define	yy_yys	def_yys
    135 #define	yystate	def_state
    136 #define	yytmp	def_tmp
    137 #define	yyv	def_v
    138 #define	yy_yyv	def_yyv
    139 #define	yyval	def_val
    140 #define	yylloc	def_lloc
    141 #define yyreds	def_reds		/* With YYDEBUG defined.  */
    142 #define yytoks	def_toks		/* With YYDEBUG defined.  */
    143 #define yylhs	def_yylhs
    144 #define yylen	def_yylen
    145 #define yydefred def_yydefred
    146 #define yydgoto	def_yydgoto
    147 #define yysindex def_yysindex
    148 #define yyrindex def_yyrindex
    149 #define yygindex def_yygindex
    150 #define yytable	 def_yytable
    151 #define yycheck	 def_yycheck
    152 
    153 typedef struct def_pool_str {
    154   struct def_pool_str *next;
    155   char data[1];
    156 } def_pool_str;
    157 
    158 static def_pool_str *pool_strs = NULL;
    159 
    160 static char *def_pool_alloc (size_t sz);
    161 static char *def_pool_strdup (const char *str);
    162 static void def_pool_free (void);
    163 
    164 static void def_description (const char *);
    165 static void def_exports (const char *, const char *, int, int, const char *);
    166 static void def_heapsize (int, int);
    167 static void def_import (const char *, const char *, const char *, const char *,
    168 			int, const char *);
    169 static void def_image_name (const char *, bfd_vma, int);
    170 static void def_section (const char *, int);
    171 static void def_section_alt (const char *, const char *);
    172 static void def_stacksize (int, int);
    173 static void def_version (int, int);
    174 static void def_directive (char *);
    175 static void def_aligncomm (char *str, int align);
    176 static void def_exclude_symbols (char *str);
    177 static int def_parse (void);
    178 static void def_error (const char *);
    179 static int def_lex (void);
    180 
    181 static int lex_forced_token = 0;
    182 static const char *lex_parse_string = 0;
    183 static const char *lex_parse_string_end = 0;
    184 
    185 
    186 #line 187 "deffilep.c"
    187 
    188 # ifndef YY_CAST
    189 #  ifdef __cplusplus
    190 #   define YY_CAST(Type, Val) static_cast<Type> (Val)
    191 #   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
    192 #  else
    193 #   define YY_CAST(Type, Val) ((Type) (Val))
    194 #   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
    195 #  endif
    196 # endif
    197 # ifndef YY_NULLPTR
    198 #  if defined __cplusplus
    199 #   if 201103L <= __cplusplus
    200 #    define YY_NULLPTR nullptr
    201 #   else
    202 #    define YY_NULLPTR 0
    203 #   endif
    204 #  else
    205 #   define YY_NULLPTR ((void*)0)
    206 #  endif
    207 # endif
    208 
    209 /* Use api.header.include to #include this header
    210    instead of duplicating it here.  */
    211 #ifndef YY_YY_DEFFILEP_H_INCLUDED
    212 # define YY_YY_DEFFILEP_H_INCLUDED
    213 /* Debug traces.  */
    214 #ifndef YYDEBUG
    215 # define YYDEBUG 0
    216 #endif
    217 #if YYDEBUG
    218 extern int yydebug;
    219 #endif
    220 
    221 /* Token kinds.  */
    222 #ifndef YYTOKENTYPE
    223 # define YYTOKENTYPE
    224   enum yytokentype
    225   {
    226     YYEMPTY = -2,
    227     YYEOF = 0,                     /* "end of file"  */
    228     YYerror = 256,                 /* error  */
    229     YYUNDEF = 257,                 /* "invalid token"  */
    230     NAME = 258,                    /* NAME  */
    231     LIBRARY = 259,                 /* LIBRARY  */
    232     DESCRIPTION = 260,             /* DESCRIPTION  */
    233     STACKSIZE_K = 261,             /* STACKSIZE_K  */
    234     HEAPSIZE = 262,                /* HEAPSIZE  */
    235     CODE = 263,                    /* CODE  */
    236     DATAU = 264,                   /* DATAU  */
    237     DATAL = 265,                   /* DATAL  */
    238     SECTIONS = 266,                /* SECTIONS  */
    239     EXPORTS = 267,                 /* EXPORTS  */
    240     IMPORTS = 268,                 /* IMPORTS  */
    241     VERSIONK = 269,                /* VERSIONK  */
    242     BASE = 270,                    /* BASE  */
    243     CONSTANTU = 271,               /* CONSTANTU  */
    244     CONSTANTL = 272,               /* CONSTANTL  */
    245     PRIVATEU = 273,                /* PRIVATEU  */
    246     PRIVATEL = 274,                /* PRIVATEL  */
    247     ALIGNCOMM = 275,               /* ALIGNCOMM  */
    248     EXCLUDE_SYMBOLS = 276,         /* EXCLUDE_SYMBOLS  */
    249     READ = 277,                    /* READ  */
    250     WRITE = 278,                   /* WRITE  */
    251     EXECUTE = 279,                 /* EXECUTE  */
    252     SHARED_K = 280,                /* SHARED_K  */
    253     NONAMEU = 281,                 /* NONAMEU  */
    254     NONAMEL = 282,                 /* NONAMEL  */
    255     DIRECTIVE = 283,               /* DIRECTIVE  */
    256     EQUAL = 284,                   /* EQUAL  */
    257     ID = 285,                      /* ID  */
    258     DIGITS = 286                   /* DIGITS  */
    259   };
    260   typedef enum yytokentype yytoken_kind_t;
    261 #endif
    262 /* Token kinds.  */
    263 #define YYEMPTY -2
    264 #define YYEOF 0
    265 #define YYerror 256
    266 #define YYUNDEF 257
    267 #define NAME 258
    268 #define LIBRARY 259
    269 #define DESCRIPTION 260
    270 #define STACKSIZE_K 261
    271 #define HEAPSIZE 262
    272 #define CODE 263
    273 #define DATAU 264
    274 #define DATAL 265
    275 #define SECTIONS 266
    276 #define EXPORTS 267
    277 #define IMPORTS 268
    278 #define VERSIONK 269
    279 #define BASE 270
    280 #define CONSTANTU 271
    281 #define CONSTANTL 272
    282 #define PRIVATEU 273
    283 #define PRIVATEL 274
    284 #define ALIGNCOMM 275
    285 #define EXCLUDE_SYMBOLS 276
    286 #define READ 277
    287 #define WRITE 278
    288 #define EXECUTE 279
    289 #define SHARED_K 280
    290 #define NONAMEU 281
    291 #define NONAMEL 282
    292 #define DIRECTIVE 283
    293 #define EQUAL 284
    294 #define ID 285
    295 #define DIGITS 286
    296 
    297 /* Value type.  */
    298 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
    299 union YYSTYPE
    300 {
    301 #line 117 "deffilep.y"
    302 
    303   char *id;
    304   const char *id_const;
    305   int number;
    306   bfd_vma vma;
    307   char *digits;
    308 
    309 #line 310 "deffilep.c"
    310 
    311 };
    312 typedef union YYSTYPE YYSTYPE;
    313 # define YYSTYPE_IS_TRIVIAL 1
    314 # define YYSTYPE_IS_DECLARED 1
    315 #endif
    316 
    317 
    318 extern YYSTYPE yylval;
    319 
    320 
    321 int yyparse (void);
    322 
    323 
    324 #endif /* !YY_YY_DEFFILEP_H_INCLUDED  */
    325 /* Symbol kind.  */
    326 enum yysymbol_kind_t
    327 {
    328   YYSYMBOL_YYEMPTY = -2,
    329   YYSYMBOL_YYEOF = 0,                      /* "end of file"  */
    330   YYSYMBOL_YYerror = 1,                    /* error  */
    331   YYSYMBOL_YYUNDEF = 2,                    /* "invalid token"  */
    332   YYSYMBOL_NAME = 3,                       /* NAME  */
    333   YYSYMBOL_LIBRARY = 4,                    /* LIBRARY  */
    334   YYSYMBOL_DESCRIPTION = 5,                /* DESCRIPTION  */
    335   YYSYMBOL_STACKSIZE_K = 6,                /* STACKSIZE_K  */
    336   YYSYMBOL_HEAPSIZE = 7,                   /* HEAPSIZE  */
    337   YYSYMBOL_CODE = 8,                       /* CODE  */
    338   YYSYMBOL_DATAU = 9,                      /* DATAU  */
    339   YYSYMBOL_DATAL = 10,                     /* DATAL  */
    340   YYSYMBOL_SECTIONS = 11,                  /* SECTIONS  */
    341   YYSYMBOL_EXPORTS = 12,                   /* EXPORTS  */
    342   YYSYMBOL_IMPORTS = 13,                   /* IMPORTS  */
    343   YYSYMBOL_VERSIONK = 14,                  /* VERSIONK  */
    344   YYSYMBOL_BASE = 15,                      /* BASE  */
    345   YYSYMBOL_CONSTANTU = 16,                 /* CONSTANTU  */
    346   YYSYMBOL_CONSTANTL = 17,                 /* CONSTANTL  */
    347   YYSYMBOL_PRIVATEU = 18,                  /* PRIVATEU  */
    348   YYSYMBOL_PRIVATEL = 19,                  /* PRIVATEL  */
    349   YYSYMBOL_ALIGNCOMM = 20,                 /* ALIGNCOMM  */
    350   YYSYMBOL_EXCLUDE_SYMBOLS = 21,           /* EXCLUDE_SYMBOLS  */
    351   YYSYMBOL_READ = 22,                      /* READ  */
    352   YYSYMBOL_WRITE = 23,                     /* WRITE  */
    353   YYSYMBOL_EXECUTE = 24,                   /* EXECUTE  */
    354   YYSYMBOL_SHARED_K = 25,                  /* SHARED_K  */
    355   YYSYMBOL_NONAMEU = 26,                   /* NONAMEU  */
    356   YYSYMBOL_NONAMEL = 27,                   /* NONAMEL  */
    357   YYSYMBOL_DIRECTIVE = 28,                 /* DIRECTIVE  */
    358   YYSYMBOL_EQUAL = 29,                     /* EQUAL  */
    359   YYSYMBOL_ID = 30,                        /* ID  */
    360   YYSYMBOL_DIGITS = 31,                    /* DIGITS  */
    361   YYSYMBOL_32_ = 32,                       /* '.'  */
    362   YYSYMBOL_33_ = 33,                       /* ','  */
    363   YYSYMBOL_34_ = 34,                       /* '='  */
    364   YYSYMBOL_35_ = 35,                       /* '@'  */
    365   YYSYMBOL_YYACCEPT = 36,                  /* $accept  */
    366   YYSYMBOL_start = 37,                     /* start  */
    367   YYSYMBOL_command = 38,                   /* command  */
    368   YYSYMBOL_explist = 39,                   /* explist  */
    369   YYSYMBOL_expline = 40,                   /* expline  */
    370   YYSYMBOL_exp_opt_list = 41,              /* exp_opt_list  */
    371   YYSYMBOL_exp_opt = 42,                   /* exp_opt  */
    372   YYSYMBOL_implist = 43,                   /* implist  */
    373   YYSYMBOL_impline = 44,                   /* impline  */
    374   YYSYMBOL_seclist = 45,                   /* seclist  */
    375   YYSYMBOL_secline = 46,                   /* secline  */
    376   YYSYMBOL_attr_list = 47,                 /* attr_list  */
    377   YYSYMBOL_opt_comma = 48,                 /* opt_comma  */
    378   YYSYMBOL_opt_number = 49,                /* opt_number  */
    379   YYSYMBOL_attr = 50,                      /* attr  */
    380   YYSYMBOL_keyword_as_name = 51,           /* keyword_as_name  */
    381   YYSYMBOL_opt_name2 = 52,                 /* opt_name2  */
    382   YYSYMBOL_opt_name = 53,                  /* opt_name  */
    383   YYSYMBOL_opt_equalequal_name = 54,       /* opt_equalequal_name  */
    384   YYSYMBOL_opt_ordinal = 55,               /* opt_ordinal  */
    385   YYSYMBOL_opt_equal_name = 56,            /* opt_equal_name  */
    386   YYSYMBOL_opt_base = 57,                  /* opt_base  */
    387   YYSYMBOL_anylang_id = 58,                /* anylang_id  */
    388   YYSYMBOL_symbol_list = 59,               /* symbol_list  */
    389   YYSYMBOL_opt_digits = 60,                /* opt_digits  */
    390   YYSYMBOL_opt_id = 61,                    /* opt_id  */
    391   YYSYMBOL_NUMBER = 62,                    /* NUMBER  */
    392   YYSYMBOL_VMA = 63                        /* VMA  */
    393 };
    394 typedef enum yysymbol_kind_t yysymbol_kind_t;
    395 
    396 
    397 
    398 
    399 #ifdef short
    400 # undef short
    401 #endif
    402 
    403 /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
    404    <limits.h> and (if available) <stdint.h> are included
    405    so that the code can choose integer types of a good width.  */
    406 
    407 #ifndef __PTRDIFF_MAX__
    408 # include <limits.h> /* INFRINGES ON USER NAME SPACE */
    409 # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
    410 #  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
    411 #  define YY_STDINT_H
    412 # endif
    413 #endif
    414 
    415 /* Narrow types that promote to a signed type and that can represent a
    416    signed or unsigned integer of at least N bits.  In tables they can
    417    save space and decrease cache pressure.  Promoting to a signed type
    418    helps avoid bugs in integer arithmetic.  */
    419 
    420 #ifdef __INT_LEAST8_MAX__
    421 typedef __INT_LEAST8_TYPE__ yytype_int8;
    422 #elif defined YY_STDINT_H
    423 typedef int_least8_t yytype_int8;
    424 #else
    425 typedef signed char yytype_int8;
    426 #endif
    427 
    428 #ifdef __INT_LEAST16_MAX__
    429 typedef __INT_LEAST16_TYPE__ yytype_int16;
    430 #elif defined YY_STDINT_H
    431 typedef int_least16_t yytype_int16;
    432 #else
    433 typedef short yytype_int16;
    434 #endif
    435 
    436 /* Work around bug in HP-UX 11.23, which defines these macros
    437    incorrectly for preprocessor constants.  This workaround can likely
    438    be removed in 2023, as HPE has promised support for HP-UX 11.23
    439    (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
    440    <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>.  */
    441 #ifdef __hpux
    442 # undef UINT_LEAST8_MAX
    443 # undef UINT_LEAST16_MAX
    444 # define UINT_LEAST8_MAX 255
    445 # define UINT_LEAST16_MAX 65535
    446 #endif
    447 
    448 #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
    449 typedef __UINT_LEAST8_TYPE__ yytype_uint8;
    450 #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
    451        && UINT_LEAST8_MAX <= INT_MAX)
    452 typedef uint_least8_t yytype_uint8;
    453 #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
    454 typedef unsigned char yytype_uint8;
    455 #else
    456 typedef short yytype_uint8;
    457 #endif
    458 
    459 #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
    460 typedef __UINT_LEAST16_TYPE__ yytype_uint16;
    461 #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
    462        && UINT_LEAST16_MAX <= INT_MAX)
    463 typedef uint_least16_t yytype_uint16;
    464 #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
    465 typedef unsigned short yytype_uint16;
    466 #else
    467 typedef int yytype_uint16;
    468 #endif
    469 
    470 #ifndef YYPTRDIFF_T
    471 # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
    472 #  define YYPTRDIFF_T __PTRDIFF_TYPE__
    473 #  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
    474 # elif defined PTRDIFF_MAX
    475 #  ifndef ptrdiff_t
    476 #   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
    477 #  endif
    478 #  define YYPTRDIFF_T ptrdiff_t
    479 #  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
    480 # else
    481 #  define YYPTRDIFF_T long
    482 #  define YYPTRDIFF_MAXIMUM LONG_MAX
    483 # endif
    484 #endif
    485 
    486 #ifndef YYSIZE_T
    487 # ifdef __SIZE_TYPE__
    488 #  define YYSIZE_T __SIZE_TYPE__
    489 # elif defined size_t
    490 #  define YYSIZE_T size_t
    491 # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
    492 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
    493 #  define YYSIZE_T size_t
    494 # else
    495 #  define YYSIZE_T unsigned
    496 # endif
    497 #endif
    498 
    499 #define YYSIZE_MAXIMUM                                  \
    500   YY_CAST (YYPTRDIFF_T,                                 \
    501            (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
    502             ? YYPTRDIFF_MAXIMUM                         \
    503             : YY_CAST (YYSIZE_T, -1)))
    504 
    505 #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
    506 
    507 
    508 /* Stored state numbers (used for stacks). */
    509 typedef yytype_uint8 yy_state_t;
    510 
    511 /* State numbers in computations.  */
    512 typedef int yy_state_fast_t;
    513 
    514 #ifndef YY_
    515 # if defined YYENABLE_NLS && YYENABLE_NLS
    516 #  if ENABLE_NLS
    517 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
    518 #   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
    519 #  endif
    520 # endif
    521 # ifndef YY_
    522 #  define YY_(Msgid) Msgid
    523 # endif
    524 #endif
    525 
    526 
    527 #ifndef YY_ATTRIBUTE_PURE
    528 # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
    529 #  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
    530 # else
    531 #  define YY_ATTRIBUTE_PURE
    532 # endif
    533 #endif
    534 
    535 #ifndef YY_ATTRIBUTE_UNUSED
    536 # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
    537 #  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
    538 # else
    539 #  define YY_ATTRIBUTE_UNUSED
    540 # endif
    541 #endif
    542 
    543 /* Suppress unused-variable warnings by "using" E.  */
    544 #if ! defined lint || defined __GNUC__
    545 # define YY_USE(E) ((void) (E))
    546 #else
    547 # define YY_USE(E) /* empty */
    548 #endif
    549 
    550 /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
    551 #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
    552 # if __GNUC__ * 100 + __GNUC_MINOR__ < 407
    553 #  define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                           \
    554     _Pragma ("GCC diagnostic push")                                     \
    555     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
    556 # else
    557 #  define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                           \
    558     _Pragma ("GCC diagnostic push")                                     \
    559     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")              \
    560     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
    561 # endif
    562 # define YY_IGNORE_MAYBE_UNINITIALIZED_END      \
    563     _Pragma ("GCC diagnostic pop")
    564 #else
    565 # define YY_INITIAL_VALUE(Value) Value
    566 #endif
    567 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
    568 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
    569 # define YY_IGNORE_MAYBE_UNINITIALIZED_END
    570 #endif
    571 #ifndef YY_INITIAL_VALUE
    572 # define YY_INITIAL_VALUE(Value) /* Nothing. */
    573 #endif
    574 
    575 #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
    576 # define YY_IGNORE_USELESS_CAST_BEGIN                          \
    577     _Pragma ("GCC diagnostic push")                            \
    578     _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
    579 # define YY_IGNORE_USELESS_CAST_END            \
    580     _Pragma ("GCC diagnostic pop")
    581 #endif
    582 #ifndef YY_IGNORE_USELESS_CAST_BEGIN
    583 # define YY_IGNORE_USELESS_CAST_BEGIN
    584 # define YY_IGNORE_USELESS_CAST_END
    585 #endif
    586 
    587 
    588 #define YY_ASSERT(E) ((void) (0 && (E)))
    589 
    590 #if !defined yyoverflow
    591 
    592 /* The parser invokes alloca or malloc; define the necessary symbols.  */
    593 
    594 # ifdef YYSTACK_USE_ALLOCA
    595 #  if YYSTACK_USE_ALLOCA
    596 #   ifdef __GNUC__
    597 #    define YYSTACK_ALLOC __builtin_alloca
    598 #   elif defined __BUILTIN_VA_ARG_INCR
    599 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
    600 #   elif defined _AIX
    601 #    define YYSTACK_ALLOC __alloca
    602 #   elif defined _MSC_VER
    603 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
    604 #    define alloca _alloca
    605 #   else
    606 #    define YYSTACK_ALLOC alloca
    607 #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
    608 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
    609       /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
    610 #     ifndef EXIT_SUCCESS
    611 #      define EXIT_SUCCESS 0
    612 #     endif
    613 #    endif
    614 #   endif
    615 #  endif
    616 # endif
    617 
    618 # ifdef YYSTACK_ALLOC
    619    /* Pacify GCC's 'empty if-body' warning.  */
    620 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
    621 #  ifndef YYSTACK_ALLOC_MAXIMUM
    622     /* The OS might guarantee only one guard page at the bottom of the stack,
    623        and a page size can be as small as 4096 bytes.  So we cannot safely
    624        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
    625        to allow for a few compiler-allocated temporary stack slots.  */
    626 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
    627 #  endif
    628 # else
    629 #  define YYSTACK_ALLOC YYMALLOC
    630 #  define YYSTACK_FREE YYFREE
    631 #  ifndef YYSTACK_ALLOC_MAXIMUM
    632 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
    633 #  endif
    634 #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
    635        && ! ((defined YYMALLOC || defined malloc) \
    636              && (defined YYFREE || defined free)))
    637 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
    638 #   ifndef EXIT_SUCCESS
    639 #    define EXIT_SUCCESS 0
    640 #   endif
    641 #  endif
    642 #  ifndef YYMALLOC
    643 #   define YYMALLOC malloc
    644 #   if ! defined malloc && ! defined EXIT_SUCCESS
    645 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
    646 #   endif
    647 #  endif
    648 #  ifndef YYFREE
    649 #   define YYFREE free
    650 #   if ! defined free && ! defined EXIT_SUCCESS
    651 void free (void *); /* INFRINGES ON USER NAME SPACE */
    652 #   endif
    653 #  endif
    654 # endif
    655 #endif /* !defined yyoverflow */
    656 
    657 #if (! defined yyoverflow \
    658      && (! defined __cplusplus \
    659          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
    660 
    661 /* A type that is properly aligned for any stack member.  */
    662 union yyalloc
    663 {
    664   yy_state_t yyss_alloc;
    665   YYSTYPE yyvs_alloc;
    666 };
    667 
    668 /* The size of the maximum gap between one aligned stack and the next.  */
    669 # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
    670 
    671 /* The size of an array large to enough to hold all stacks, each with
    672    N elements.  */
    673 # define YYSTACK_BYTES(N) \
    674      ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
    675       + YYSTACK_GAP_MAXIMUM)
    676 
    677 # define YYCOPY_NEEDED 1
    678 
    679 /* Relocate STACK from its old location to the new one.  The
    680    local variables YYSIZE and YYSTACKSIZE give the old and new number of
    681    elements in the stack, and YYPTR gives the new location of the
    682    stack.  Advance YYPTR to a properly aligned location for the next
    683    stack.  */
    684 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
    685     do                                                                  \
    686       {                                                                 \
    687         YYPTRDIFF_T yynewbytes;                                         \
    688         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
    689         Stack = &yyptr->Stack_alloc;                                    \
    690         yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
    691         yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
    692       }                                                                 \
    693     while (0)
    694 
    695 #endif
    696 
    697 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
    698 /* Copy COUNT objects from SRC to DST.  The source and destination do
    699    not overlap.  */
    700 # ifndef YYCOPY
    701 #  if defined __GNUC__ && 1 < __GNUC__
    702 #   define YYCOPY(Dst, Src, Count) \
    703       __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
    704 #  else
    705 #   define YYCOPY(Dst, Src, Count)              \
    706       do                                        \
    707         {                                       \
    708           YYPTRDIFF_T yyi;                      \
    709           for (yyi = 0; yyi < (Count); yyi++)   \
    710             (Dst)[yyi] = (Src)[yyi];            \
    711         }                                       \
    712       while (0)
    713 #  endif
    714 # endif
    715 #endif /* !YYCOPY_NEEDED */
    716 
    717 /* YYFINAL -- State number of the termination state.  */
    718 #define YYFINAL  73
    719 /* YYLAST -- Last index in YYTABLE.  */
    720 #define YYLAST   161
    721 
    722 /* YYNTOKENS -- Number of terminals.  */
    723 #define YYNTOKENS  36
    724 /* YYNNTS -- Number of nonterminals.  */
    725 #define YYNNTS  28
    726 /* YYNRULES -- Number of rules.  */
    727 #define YYNRULES  104
    728 /* YYNSTATES -- Number of states.  */
    729 #define YYNSTATES  153
    730 
    731 /* YYMAXUTOK -- Last valid token kind.  */
    732 #define YYMAXUTOK   286
    733 
    734 
    735 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
    736    as returned by yylex, with out-of-bounds checking.  */
    737 #define YYTRANSLATE(YYX)                                \
    738   (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
    739    ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
    740    : YYSYMBOL_YYUNDEF)
    741 
    742 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
    743    as returned by yylex.  */
    744 static const yytype_int8 yytranslate[] =
    745 {
    746        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    747        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    748        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    749        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    750        2,     2,     2,     2,    33,     2,    32,     2,     2,     2,
    751        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    752        2,    34,     2,     2,    35,     2,     2,     2,     2,     2,
    753        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    754        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    755        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    756        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    757        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    758        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    759        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    760        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    761        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    762        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    763        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    764        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    765        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    766        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    767        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    768        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    769        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    770        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    771        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
    772        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    773       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    774       25,    26,    27,    28,    29,    30,    31
    775 };
    776 
    777 #if YYDEBUG
    778 /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
    779 static const yytype_int16 yyrline[] =
    780 {
    781        0,   142,   142,   143,   147,   148,   149,   150,   151,   152,
    782      153,   154,   155,   156,   157,   158,   159,   160,   161,   165,
    783      167,   168,   175,   182,   183,   186,   187,   188,   189,   190,
    784      191,   192,   193,   196,   197,   201,   203,   205,   207,   209,
    785      211,   216,   217,   221,   222,   226,   227,   231,   232,   234,
    786      235,   239,   240,   241,   242,   246,   247,   248,   249,   250,
    787      251,   252,   253,   254,   255,   256,   257,   258,   265,   266,
    788      267,   268,   269,   270,   271,   272,   273,   274,   277,   278,
    789      284,   290,   296,   304,   305,   308,   309,   313,   314,   318,
    790      319,   322,   323,   326,   327,   333,   342,   343,   344,   347,
    791      348,   351,   352,   355,   357
    792 };
    793 #endif
    794 
    795 /** Accessing symbol of state STATE.  */
    796 #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
    797 
    798 #if YYDEBUG || 0
    799 /* The user-facing name of the symbol whose (internal) number is
    800    YYSYMBOL.  No bounds checking.  */
    801 static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
    802 
    803 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    804    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
    805 static const char *const yytname[] =
    806 {
    807   "\"end of file\"", "error", "\"invalid token\"", "NAME", "LIBRARY",
    808   "DESCRIPTION", "STACKSIZE_K", "HEAPSIZE", "CODE", "DATAU", "DATAL",
    809   "SECTIONS", "EXPORTS", "IMPORTS", "VERSIONK", "BASE", "CONSTANTU",
    810   "CONSTANTL", "PRIVATEU", "PRIVATEL", "ALIGNCOMM", "EXCLUDE_SYMBOLS",
    811   "READ", "WRITE", "EXECUTE", "SHARED_K", "NONAMEU", "NONAMEL",
    812   "DIRECTIVE", "EQUAL", "ID", "DIGITS", "'.'", "','", "'='", "'@'",
    813   "$accept", "start", "command", "explist", "expline", "exp_opt_list",
    814   "exp_opt", "implist", "impline", "seclist", "secline", "attr_list",
    815   "opt_comma", "opt_number", "attr", "keyword_as_name", "opt_name2",
    816   "opt_name", "opt_equalequal_name", "opt_ordinal", "opt_equal_name",
    817   "opt_base", "anylang_id", "symbol_list", "opt_digits", "opt_id",
    818   "NUMBER", "VMA", YY_NULLPTR
    819 };
    820 
    821 static const char *
    822 yysymbol_name (yysymbol_kind_t yysymbol)
    823 {
    824   return yytname[yysymbol];
    825 }
    826 #endif
    827 
    828 #define YYPACT_NINF (-85)
    829 
    830 #define yypact_value_is_default(Yyn) \
    831   ((Yyn) == YYPACT_NINF)
    832 
    833 #define YYTABLE_NINF (-49)
    834 
    835 #define yytable_value_is_error(Yyn) \
    836   0
    837 
    838 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    839    STATE-NUM.  */
    840 static const yytype_int8 yypact[] =
    841 {
    842       93,     5,     5,   -14,     7,     7,    38,    38,    16,     5,
    843       46,     7,   -27,   -27,    57,    36,   -85,   -85,   -85,   -85,
    844      -85,   -85,   -85,   -85,   -85,   -85,   -85,   -85,   -85,   -85,
    845      -85,   -85,   -85,   -85,   -85,   -85,   -85,   -85,   -85,   -85,
    846       61,     5,    76,   -85,   102,   102,   -85,   -85,    95,    95,
    847      -85,   -85,   -85,   -85,    87,   -85,    87,   100,    16,   -85,
    848        5,   -85,    84,   -25,    46,   -85,    97,   -85,   101,    53,
    849      103,    37,   -85,   -85,   -85,     5,    76,   -85,     5,    98,
    850      -85,   -85,     7,   -85,   -85,   -85,    38,   -85,    87,   -85,
    851      -85,     5,    99,   106,   107,   -85,     7,   -85,   109,     7,
    852      -27,   103,   -85,   -85,   110,   -85,   -85,   -85,     7,   105,
    853       26,   111,   -85,   -85,   112,   -85,   103,   -85,   -85,   -85,
    854       56,   114,   115,   -85,    85,   -85,   -85,   -85,   -85,   -85,
    855      -85,   -85,   -85,   -85,   -85,   105,   105,   -85,   104,    63,
    856      104,   104,    56,   -85,    96,   -85,   -85,   -85,   -85,   104,
    857      104,   -85,   -85
    858 };
    859 
    860 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
    861    Performed when YYTABLE does not specify something else to do.  Zero
    862    means the default is an error.  */
    863 static const yytype_int8 yydefact[] =
    864 {
    865        0,    84,    84,     0,     0,     0,     0,     0,     0,    19,
    866        0,     0,     0,     0,     0,     0,     3,    68,    61,    75,
    867       66,    56,    59,    60,    65,    67,    76,    55,    57,    58,
    868       71,    72,    63,    73,    77,    64,    74,    69,    70,    62,
    869       78,     0,     0,    83,    92,    92,     6,   103,    50,    50,
    870       51,    52,    53,    54,     9,    46,    10,     0,    11,    42,
    871       12,    20,    90,     0,    13,    34,    14,    93,     0,     0,
    872       96,    18,    16,     1,     2,     0,    79,    80,     0,     0,
    873        4,     5,     0,     7,     8,    47,     0,    44,    43,    41,
    874       21,     0,    88,     0,     0,    33,     0,    94,   100,     0,
    875        0,    97,    82,    81,     0,    49,    45,    89,     0,    48,
    876       86,     0,    15,    99,   102,    17,    98,   104,    91,    87,
    877       24,     0,     0,    40,     0,   101,    95,    29,    30,    27,
    878       28,    31,    32,    25,    26,    48,    48,    85,    86,    86,
    879       86,    86,    24,    39,     0,    37,    38,    22,    23,    86,
    880       86,    35,    36
    881 };
    882 
    883 /* YYPGOTO[NTERM-NUM].  */
    884 static const yytype_int16 yypgoto[] =
    885 {
    886      -85,   -85,   131,   -85,    88,     8,   -85,   -85,    83,   -85,
    887       91,    -3,   -84,   108,    65,   113,    -7,   150,   -60,   -85,
    888      -85,   116,   -12,   -85,   -85,   -85,    -5,   -85
    889 };
    890 
    891 /* YYDEFGOTO[NTERM-NUM].  */
    892 static const yytype_uint8 yydefgoto[] =
    893 {
    894        0,    15,    16,    60,    61,   135,   136,    64,    65,    58,
    895       59,    54,    86,    83,    55,    42,    43,    44,   123,   109,
    896       92,    80,    69,    71,   114,   126,    48,   118
    897 };
    898 
    899 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
    900    positive, shift that token.  If negative, reduce the rule whose
    901    number is the opposite.  If YYTABLE_NINF, syntax error.  */
    902 static const yytype_int16 yytable[] =
    903 {
    904       49,    70,    62,    67,    56,    68,    66,    93,    17,    94,
    905       18,    19,    20,    21,    22,    23,    46,    24,    25,    26,
    906       27,    28,    29,    30,    31,   120,    32,    33,    34,    35,
    907       36,    37,    38,    39,    77,    40,    73,    41,    47,     1,
    908        2,     3,     4,     5,     6,     7,    57,     8,     9,    10,
    909       11,   141,   142,    62,    88,   121,    12,    13,   122,   101,
    910       50,    51,    52,    53,    14,   127,   128,    67,   102,    68,
    911      100,   103,   129,   130,   131,   132,    63,   105,   143,   145,
    912      146,   147,   133,   134,   107,    98,    99,    72,   116,   151,
    913      152,   112,   121,    75,   115,   144,     1,     2,     3,     4,
    914        5,     6,     7,   119,     8,     9,    10,    11,    78,   -48,
    915      -48,   -48,   -48,    12,    13,   139,    47,    79,    91,   140,
    916       85,    14,    50,    51,    52,    53,   149,    47,    82,    96,
    917       87,    97,   104,   121,   108,    98,   110,   111,    85,   150,
    918      113,   117,   125,   124,   137,   138,    74,    95,    90,    89,
    919      148,   106,    45,     0,    76,     0,     0,    84,     0,     0,
    920        0,    81
    921 };
    922 
    923 static const yytype_int16 yycheck[] =
    924 {
    925        5,    13,     9,    30,     7,    32,    11,    32,     3,    34,
    926        5,     6,     7,     8,     9,    10,    30,    12,    13,    14,
    927       15,    16,    17,    18,    19,   109,    21,    22,    23,    24,
    928       25,    26,    27,    28,    41,    30,     0,    32,    31,     3,
    929        4,     5,     6,     7,     8,     9,    30,    11,    12,    13,
    930       14,   135,   136,    60,    57,    29,    20,    21,    32,    71,
    931       22,    23,    24,    25,    28,     9,    10,    30,    75,    32,
    932       33,    78,    16,    17,    18,    19,    30,    82,   138,   139,
    933      140,   141,    26,    27,    91,    32,    33,    30,   100,   149,
    934      150,    96,    29,    32,    99,    32,     3,     4,     5,     6,
    935        7,     8,     9,   108,    11,    12,    13,    14,    32,    22,
    936       23,    24,    25,    20,    21,    30,    31,    15,    34,   124,
    937       33,    28,    22,    23,    24,    25,    30,    31,    33,    32,
    938       30,    30,    34,    29,    35,    32,    30,    30,    33,   144,
    939       31,    31,    30,    32,    30,    30,    15,    64,    60,    58,
    940      142,    86,     2,    -1,    41,    -1,    -1,    49,    -1,    -1,
    941       -1,    45
    942 };
    943 
    944 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
    945    state STATE-NUM.  */
    946 static const yytype_int8 yystos[] =
    947 {
    948        0,     3,     4,     5,     6,     7,     8,     9,    11,    12,
    949       13,    14,    20,    21,    28,    37,    38,     3,     5,     6,
    950        7,     8,     9,    10,    12,    13,    14,    15,    16,    17,
    951       18,    19,    21,    22,    23,    24,    25,    26,    27,    28,
    952       30,    32,    51,    52,    53,    53,    30,    31,    62,    62,
    953       22,    23,    24,    25,    47,    50,    47,    30,    45,    46,
    954       39,    40,    52,    30,    43,    44,    62,    30,    32,    58,
    955       58,    59,    30,     0,    38,    32,    51,    52,    32,    15,
    956       57,    57,    33,    49,    49,    33,    48,    30,    47,    46,
    957       40,    34,    56,    32,    34,    44,    32,    30,    32,    33,
    958       33,    58,    52,    52,    34,    62,    50,    52,    35,    55,
    959       30,    30,    62,    31,    60,    62,    58,    31,    63,    62,
    960       48,    29,    32,    54,    32,    30,    61,     9,    10,    16,
    961       17,    18,    19,    26,    27,    41,    42,    30,    30,    30,
    962       62,    48,    48,    54,    32,    54,    54,    54,    41,    30,
    963       62,    54,    54
    964 };
    965 
    966 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
    967 static const yytype_int8 yyr1[] =
    968 {
    969        0,    36,    37,    37,    38,    38,    38,    38,    38,    38,
    970       38,    38,    38,    38,    38,    38,    38,    38,    38,    39,
    971       39,    39,    40,    41,    41,    42,    42,    42,    42,    42,
    972       42,    42,    42,    43,    43,    44,    44,    44,    44,    44,
    973       44,    45,    45,    46,    46,    47,    47,    48,    48,    49,
    974       49,    50,    50,    50,    50,    51,    51,    51,    51,    51,
    975       51,    51,    51,    51,    51,    51,    51,    51,    51,    51,
    976       51,    51,    51,    51,    51,    51,    51,    51,    52,    52,
    977       52,    52,    52,    53,    53,    54,    54,    55,    55,    56,
    978       56,    57,    57,    58,    58,    58,    59,    59,    59,    60,
    979       60,    61,    61,    62,    63
    980 };
    981 
    982 /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */
    983 static const yytype_int8 yyr2[] =
    984 {
    985        0,     2,     2,     1,     3,     3,     2,     3,     3,     2,
    986        2,     2,     2,     2,     2,     4,     2,     4,     2,     0,
    987        1,     2,     7,     3,     0,     1,     1,     1,     1,     1,
    988        1,     1,     1,     2,     1,     8,     8,     6,     6,     6,
    989        4,     2,     1,     2,     2,     3,     1,     1,     0,     2,
    990        0,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    991        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    992        1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
    993        2,     3,     3,     1,     0,     2,     0,     2,     0,     2,
    994        0,     3,     0,     1,     2,     4,     1,     2,     3,     1,
    995        0,     1,     0,     1,     1
    996 };
    997 
    998 
    999 enum { YYENOMEM = -2 };
   1000 
   1001 #define yyerrok         (yyerrstatus = 0)
   1002 #define yyclearin       (yychar = YYEMPTY)
   1003 
   1004 #define YYACCEPT        goto yyacceptlab
   1005 #define YYABORT         goto yyabortlab
   1006 #define YYERROR         goto yyerrorlab
   1007 #define YYNOMEM         goto yyexhaustedlab
   1008 
   1009 
   1010 #define YYRECOVERING()  (!!yyerrstatus)
   1011 
   1012 #define YYBACKUP(Token, Value)                                    \
   1013   do                                                              \
   1014     if (yychar == YYEMPTY)                                        \
   1015       {                                                           \
   1016         yychar = (Token);                                         \
   1017         yylval = (Value);                                         \
   1018         YYPOPSTACK (yylen);                                       \
   1019         yystate = *yyssp;                                         \
   1020         goto yybackup;                                            \
   1021       }                                                           \
   1022     else                                                          \
   1023       {                                                           \
   1024         yyerror (YY_("syntax error: cannot back up")); \
   1025         YYERROR;                                                  \
   1026       }                                                           \
   1027   while (0)
   1028 
   1029 /* Backward compatibility with an undocumented macro.
   1030    Use YYerror or YYUNDEF. */
   1031 #define YYERRCODE YYUNDEF
   1032 
   1033 
   1034 /* Enable debugging if requested.  */
   1035 #if YYDEBUG
   1036 
   1037 # ifndef YYFPRINTF
   1038 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
   1039 #  define YYFPRINTF fprintf
   1040 # endif
   1041 
   1042 # define YYDPRINTF(Args)                        \
   1043 do {                                            \
   1044   if (yydebug)                                  \
   1045     YYFPRINTF Args;                             \
   1046 } while (0)
   1047 
   1048 
   1049 
   1050 
   1051 # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
   1052 do {                                                                      \
   1053   if (yydebug)                                                            \
   1054     {                                                                     \
   1055       YYFPRINTF (stderr, "%s ", Title);                                   \
   1056       yy_symbol_print (stderr,                                            \
   1057                   Kind, Value); \
   1058       YYFPRINTF (stderr, "\n");                                           \
   1059     }                                                                     \
   1060 } while (0)
   1061 
   1062 
   1063 /*-----------------------------------.
   1064 | Print this symbol's value on YYO.  |
   1065 `-----------------------------------*/
   1066 
   1067 static void
   1068 yy_symbol_value_print (FILE *yyo,
   1069                        yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
   1070 {
   1071   FILE *yyoutput = yyo;
   1072   YY_USE (yyoutput);
   1073   if (!yyvaluep)
   1074     return;
   1075   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   1076   YY_USE (yykind);
   1077   YY_IGNORE_MAYBE_UNINITIALIZED_END
   1078 }
   1079 
   1080 
   1081 /*---------------------------.
   1082 | Print this symbol on YYO.  |
   1083 `---------------------------*/
   1084 
   1085 static void
   1086 yy_symbol_print (FILE *yyo,
   1087                  yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
   1088 {
   1089   YYFPRINTF (yyo, "%s %s (",
   1090              yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
   1091 
   1092   yy_symbol_value_print (yyo, yykind, yyvaluep);
   1093   YYFPRINTF (yyo, ")");
   1094 }
   1095 
   1096 /*------------------------------------------------------------------.
   1097 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
   1098 | TOP (included).                                                   |
   1099 `------------------------------------------------------------------*/
   1100 
   1101 static void
   1102 yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
   1103 {
   1104   YYFPRINTF (stderr, "Stack now");
   1105   for (; yybottom <= yytop; yybottom++)
   1106     {
   1107       int yybot = *yybottom;
   1108       YYFPRINTF (stderr, " %d", yybot);
   1109     }
   1110   YYFPRINTF (stderr, "\n");
   1111 }
   1112 
   1113 # define YY_STACK_PRINT(Bottom, Top)                            \
   1114 do {                                                            \
   1115   if (yydebug)                                                  \
   1116     yy_stack_print ((Bottom), (Top));                           \
   1117 } while (0)
   1118 
   1119 
   1120 /*------------------------------------------------.
   1121 | Report that the YYRULE is going to be reduced.  |
   1122 `------------------------------------------------*/
   1123 
   1124 static void
   1125 yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp,
   1126                  int yyrule)
   1127 {
   1128   int yylno = yyrline[yyrule];
   1129   int yynrhs = yyr2[yyrule];
   1130   int yyi;
   1131   YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
   1132              yyrule - 1, yylno);
   1133   /* The symbols being reduced.  */
   1134   for (yyi = 0; yyi < yynrhs; yyi++)
   1135     {
   1136       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
   1137       yy_symbol_print (stderr,
   1138                        YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
   1139                        &yyvsp[(yyi + 1) - (yynrhs)]);
   1140       YYFPRINTF (stderr, "\n");
   1141     }
   1142 }
   1143 
   1144 # define YY_REDUCE_PRINT(Rule)          \
   1145 do {                                    \
   1146   if (yydebug)                          \
   1147     yy_reduce_print (yyssp, yyvsp, Rule); \
   1148 } while (0)
   1149 
   1150 /* Nonzero means print parse trace.  It is left uninitialized so that
   1151    multiple parsers can coexist.  */
   1152 int yydebug;
   1153 #else /* !YYDEBUG */
   1154 # define YYDPRINTF(Args) ((void) 0)
   1155 # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
   1156 # define YY_STACK_PRINT(Bottom, Top)
   1157 # define YY_REDUCE_PRINT(Rule)
   1158 #endif /* !YYDEBUG */
   1159 
   1160 
   1161 /* YYINITDEPTH -- initial size of the parser's stacks.  */
   1162 #ifndef YYINITDEPTH
   1163 # define YYINITDEPTH 200
   1164 #endif
   1165 
   1166 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
   1167    if the built-in stack extension method is used).
   1168 
   1169    Do not make this value too large; the results are undefined if
   1170    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
   1171    evaluated with infinite-precision integer arithmetic.  */
   1172 
   1173 #ifndef YYMAXDEPTH
   1174 # define YYMAXDEPTH 10000
   1175 #endif
   1176 
   1177 
   1178 
   1179 
   1180 
   1181 
   1182 /*-----------------------------------------------.
   1183 | Release the memory associated to this symbol.  |
   1184 `-----------------------------------------------*/
   1185 
   1186 static void
   1187 yydestruct (const char *yymsg,
   1188             yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
   1189 {
   1190   YY_USE (yyvaluep);
   1191   if (!yymsg)
   1192     yymsg = "Deleting";
   1193   YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
   1194 
   1195   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   1196   YY_USE (yykind);
   1197   YY_IGNORE_MAYBE_UNINITIALIZED_END
   1198 }
   1199 
   1200 
   1201 /* Lookahead token kind.  */
   1202 int yychar;
   1203 
   1204 /* The semantic value of the lookahead symbol.  */
   1205 YYSTYPE yylval;
   1206 /* Number of syntax errors so far.  */
   1207 int yynerrs;
   1208 
   1209 
   1210 
   1211 
   1212 /*----------.
   1213 | yyparse.  |
   1214 `----------*/
   1215 
   1216 int
   1217 yyparse (void)
   1218 {
   1219     yy_state_fast_t yystate = 0;
   1220     /* Number of tokens to shift before error messages enabled.  */
   1221     int yyerrstatus = 0;
   1222 
   1223     /* Refer to the stacks through separate pointers, to allow yyoverflow
   1224        to reallocate them elsewhere.  */
   1225 
   1226     /* Their size.  */
   1227     YYPTRDIFF_T yystacksize = YYINITDEPTH;
   1228 
   1229     /* The state stack: array, bottom, top.  */
   1230     yy_state_t yyssa[YYINITDEPTH];
   1231     yy_state_t *yyss = yyssa;
   1232     yy_state_t *yyssp = yyss;
   1233 
   1234     /* The semantic value stack: array, bottom, top.  */
   1235     YYSTYPE yyvsa[YYINITDEPTH];
   1236     YYSTYPE *yyvs = yyvsa;
   1237     YYSTYPE *yyvsp = yyvs;
   1238 
   1239   int yyn;
   1240   /* The return value of yyparse.  */
   1241   int yyresult;
   1242   /* Lookahead symbol kind.  */
   1243   yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
   1244   /* The variables used to return semantic value and location from the
   1245      action routines.  */
   1246   YYSTYPE yyval;
   1247 
   1248 
   1249 
   1250 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
   1251 
   1252   /* The number of symbols on the RHS of the reduced rule.
   1253      Keep to zero when no symbol should be popped.  */
   1254   int yylen = 0;
   1255 
   1256   YYDPRINTF ((stderr, "Starting parse\n"));
   1257 
   1258   yychar = YYEMPTY; /* Cause a token to be read.  */
   1259 
   1260   goto yysetstate;
   1261 
   1262 
   1263 /*------------------------------------------------------------.
   1264 | yynewstate -- push a new state, which is found in yystate.  |
   1265 `------------------------------------------------------------*/
   1266 yynewstate:
   1267   /* In all cases, when you get here, the value and location stacks
   1268      have just been pushed.  So pushing a state here evens the stacks.  */
   1269   yyssp++;
   1270 
   1271 
   1272 /*--------------------------------------------------------------------.
   1273 | yysetstate -- set current state (the top of the stack) to yystate.  |
   1274 `--------------------------------------------------------------------*/
   1275 yysetstate:
   1276   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
   1277   YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
   1278   YY_IGNORE_USELESS_CAST_BEGIN
   1279   *yyssp = YY_CAST (yy_state_t, yystate);
   1280   YY_IGNORE_USELESS_CAST_END
   1281   YY_STACK_PRINT (yyss, yyssp);
   1282 
   1283   if (yyss + yystacksize - 1 <= yyssp)
   1284 #if !defined yyoverflow && !defined YYSTACK_RELOCATE
   1285     YYNOMEM;
   1286 #else
   1287     {
   1288       /* Get the current used size of the three stacks, in elements.  */
   1289       YYPTRDIFF_T yysize = yyssp - yyss + 1;
   1290 
   1291 # if defined yyoverflow
   1292       {
   1293         /* Give user a chance to reallocate the stack.  Use copies of
   1294            these so that the &'s don't force the real ones into
   1295            memory.  */
   1296         yy_state_t *yyss1 = yyss;
   1297         YYSTYPE *yyvs1 = yyvs;
   1298 
   1299         /* Each stack pointer address is followed by the size of the
   1300            data in use in that stack, in bytes.  This used to be a
   1301            conditional around just the two extra args, but that might
   1302            be undefined if yyoverflow is a macro.  */
   1303         yyoverflow (YY_("memory exhausted"),
   1304                     &yyss1, yysize * YYSIZEOF (*yyssp),
   1305                     &yyvs1, yysize * YYSIZEOF (*yyvsp),
   1306                     &yystacksize);
   1307         yyss = yyss1;
   1308         yyvs = yyvs1;
   1309       }
   1310 # else /* defined YYSTACK_RELOCATE */
   1311       /* Extend the stack our own way.  */
   1312       if (YYMAXDEPTH <= yystacksize)
   1313         YYNOMEM;
   1314       yystacksize *= 2;
   1315       if (YYMAXDEPTH < yystacksize)
   1316         yystacksize = YYMAXDEPTH;
   1317 
   1318       {
   1319         yy_state_t *yyss1 = yyss;
   1320         union yyalloc *yyptr =
   1321           YY_CAST (union yyalloc *,
   1322                    YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
   1323         if (! yyptr)
   1324           YYNOMEM;
   1325         YYSTACK_RELOCATE (yyss_alloc, yyss);
   1326         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
   1327 #  undef YYSTACK_RELOCATE
   1328         if (yyss1 != yyssa)
   1329           YYSTACK_FREE (yyss1);
   1330       }
   1331 # endif
   1332 
   1333       yyssp = yyss + yysize - 1;
   1334       yyvsp = yyvs + yysize - 1;
   1335 
   1336       YY_IGNORE_USELESS_CAST_BEGIN
   1337       YYDPRINTF ((stderr, "Stack size increased to %ld\n",
   1338                   YY_CAST (long, yystacksize)));
   1339       YY_IGNORE_USELESS_CAST_END
   1340 
   1341       if (yyss + yystacksize - 1 <= yyssp)
   1342         YYABORT;
   1343     }
   1344 #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
   1345 
   1346 
   1347   if (yystate == YYFINAL)
   1348     YYACCEPT;
   1349 
   1350   goto yybackup;
   1351 
   1352 
   1353 /*-----------.
   1354 | yybackup.  |
   1355 `-----------*/
   1356 yybackup:
   1357   /* Do appropriate processing given the current state.  Read a
   1358      lookahead token if we need one and don't already have one.  */
   1359 
   1360   /* First try to decide what to do without reference to lookahead token.  */
   1361   yyn = yypact[yystate];
   1362   if (yypact_value_is_default (yyn))
   1363     goto yydefault;
   1364 
   1365   /* Not known => get a lookahead token if don't already have one.  */
   1366 
   1367   /* YYCHAR is either empty, or end-of-input, or a valid lookahead.  */
   1368   if (yychar == YYEMPTY)
   1369     {
   1370       YYDPRINTF ((stderr, "Reading a token\n"));
   1371       yychar = yylex ();
   1372     }
   1373 
   1374   if (yychar <= YYEOF)
   1375     {
   1376       yychar = YYEOF;
   1377       yytoken = YYSYMBOL_YYEOF;
   1378       YYDPRINTF ((stderr, "Now at end of input.\n"));
   1379     }
   1380   else if (yychar == YYerror)
   1381     {
   1382       /* The scanner already issued an error message, process directly
   1383          to error recovery.  But do not keep the error token as
   1384          lookahead, it is too special and may lead us to an endless
   1385          loop in error recovery. */
   1386       yychar = YYUNDEF;
   1387       yytoken = YYSYMBOL_YYerror;
   1388       goto yyerrlab1;
   1389     }
   1390   else
   1391     {
   1392       yytoken = YYTRANSLATE (yychar);
   1393       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
   1394     }
   1395 
   1396   /* If the proper action on seeing token YYTOKEN is to reduce or to
   1397      detect an error, take that action.  */
   1398   yyn += yytoken;
   1399   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
   1400     goto yydefault;
   1401   yyn = yytable[yyn];
   1402   if (yyn <= 0)
   1403     {
   1404       if (yytable_value_is_error (yyn))
   1405         goto yyerrlab;
   1406       yyn = -yyn;
   1407       goto yyreduce;
   1408     }
   1409 
   1410   /* Count tokens shifted since error; after three, turn off error
   1411      status.  */
   1412   if (yyerrstatus)
   1413     yyerrstatus--;
   1414 
   1415   /* Shift the lookahead token.  */
   1416   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
   1417   yystate = yyn;
   1418   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   1419   *++yyvsp = yylval;
   1420   YY_IGNORE_MAYBE_UNINITIALIZED_END
   1421 
   1422   /* Discard the shifted token.  */
   1423   yychar = YYEMPTY;
   1424   goto yynewstate;
   1425 
   1426 
   1427 /*-----------------------------------------------------------.
   1428 | yydefault -- do the default action for the current state.  |
   1429 `-----------------------------------------------------------*/
   1430 yydefault:
   1431   yyn = yydefact[yystate];
   1432   if (yyn == 0)
   1433     goto yyerrlab;
   1434   goto yyreduce;
   1435 
   1436 
   1437 /*-----------------------------.
   1438 | yyreduce -- do a reduction.  |
   1439 `-----------------------------*/
   1440 yyreduce:
   1441   /* yyn is the number of a rule to reduce with.  */
   1442   yylen = yyr2[yyn];
   1443 
   1444   /* If YYLEN is nonzero, implement the default value of the action:
   1445      '$$ = $1'.
   1446 
   1447      Otherwise, the following line sets YYVAL to garbage.
   1448      This behavior is undocumented and Bison
   1449      users should not rely upon it.  Assigning to YYVAL
   1450      unconditionally makes the parser a bit smaller, and it avoids a
   1451      GCC warning that YYVAL may be used uninitialized.  */
   1452   yyval = yyvsp[1-yylen];
   1453 
   1454 
   1455   YY_REDUCE_PRINT (yyn);
   1456   switch (yyn)
   1457     {
   1458   case 4: /* command: NAME opt_name opt_base  */
   1459 #line 147 "deffilep.y"
   1460                                        { def_image_name ((yyvsp[-1].id), (yyvsp[0].vma), 0); }
   1461 #line 1462 "deffilep.c"
   1462     break;
   1463 
   1464   case 5: /* command: LIBRARY opt_name opt_base  */
   1465 #line 148 "deffilep.y"
   1466                                           { def_image_name ((yyvsp[-1].id), (yyvsp[0].vma), 1); }
   1467 #line 1468 "deffilep.c"
   1468     break;
   1469 
   1470   case 6: /* command: DESCRIPTION ID  */
   1471 #line 149 "deffilep.y"
   1472                                { def_description ((yyvsp[0].id));}
   1473 #line 1474 "deffilep.c"
   1474     break;
   1475 
   1476   case 7: /* command: STACKSIZE_K NUMBER opt_number  */
   1477 #line 150 "deffilep.y"
   1478                                               { def_stacksize ((yyvsp[-1].number), (yyvsp[0].number));}
   1479 #line 1480 "deffilep.c"
   1480     break;
   1481 
   1482   case 8: /* command: HEAPSIZE NUMBER opt_number  */
   1483 #line 151 "deffilep.y"
   1484                                            { def_heapsize ((yyvsp[-1].number), (yyvsp[0].number));}
   1485 #line 1486 "deffilep.c"
   1486     break;
   1487 
   1488   case 9: /* command: CODE attr_list  */
   1489 #line 152 "deffilep.y"
   1490                                { def_section ("CODE", (yyvsp[0].number));}
   1491 #line 1492 "deffilep.c"
   1492     break;
   1493 
   1494   case 10: /* command: DATAU attr_list  */
   1495 #line 153 "deffilep.y"
   1496                                  { def_section ("DATA", (yyvsp[0].number));}
   1497 #line 1498 "deffilep.c"
   1498     break;
   1499 
   1500   case 14: /* command: VERSIONK NUMBER  */
   1501 #line 157 "deffilep.y"
   1502                                 { def_version ((yyvsp[0].number), 0);}
   1503 #line 1504 "deffilep.c"
   1504     break;
   1505 
   1506   case 15: /* command: VERSIONK NUMBER '.' NUMBER  */
   1507 #line 158 "deffilep.y"
   1508                                            { def_version ((yyvsp[-2].number), (yyvsp[0].number));}
   1509 #line 1510 "deffilep.c"
   1510     break;
   1511 
   1512   case 16: /* command: DIRECTIVE ID  */
   1513 #line 159 "deffilep.y"
   1514                              { def_directive ((yyvsp[0].id));}
   1515 #line 1516 "deffilep.c"
   1516     break;
   1517 
   1518   case 17: /* command: ALIGNCOMM anylang_id ',' NUMBER  */
   1519 #line 160 "deffilep.y"
   1520                                                 { def_aligncomm ((yyvsp[-2].id), (yyvsp[0].number));}
   1521 #line 1522 "deffilep.c"
   1522     break;
   1523 
   1524   case 22: /* expline: opt_name2 opt_equal_name opt_ordinal opt_comma exp_opt_list opt_comma opt_equalequal_name  */
   1525 #line 176 "deffilep.y"
   1526                         { def_exports ((yyvsp[-6].id), (yyvsp[-5].id), (yyvsp[-4].number), (yyvsp[-2].number), (yyvsp[0].id)); }
   1527 #line 1528 "deffilep.c"
   1528     break;
   1529 
   1530   case 23: /* exp_opt_list: exp_opt opt_comma exp_opt_list  */
   1531 #line 182 "deffilep.y"
   1532                                                { (yyval.number) = (yyvsp[-2].number) | (yyvsp[0].number); }
   1533 #line 1534 "deffilep.c"
   1534     break;
   1535 
   1536   case 24: /* exp_opt_list: %empty  */
   1537 #line 183 "deffilep.y"
   1538                 { (yyval.number) = 0; }
   1539 #line 1540 "deffilep.c"
   1540     break;
   1541 
   1542   case 25: /* exp_opt: NONAMEU  */
   1543 #line 186 "deffilep.y"
   1544                                 { (yyval.number) = 1; }
   1545 #line 1546 "deffilep.c"
   1546     break;
   1547 
   1548   case 26: /* exp_opt: NONAMEL  */
   1549 #line 187 "deffilep.y"
   1550                                 { (yyval.number) = 1; }
   1551 #line 1552 "deffilep.c"
   1552     break;
   1553 
   1554   case 27: /* exp_opt: CONSTANTU  */
   1555 #line 188 "deffilep.y"
   1556                                 { (yyval.number) = 2; }
   1557 #line 1558 "deffilep.c"
   1558     break;
   1559 
   1560   case 28: /* exp_opt: CONSTANTL  */
   1561 #line 189 "deffilep.y"
   1562                                 { (yyval.number) = 2; }
   1563 #line 1564 "deffilep.c"
   1564     break;
   1565 
   1566   case 29: /* exp_opt: DATAU  */
   1567 #line 190 "deffilep.y"
   1568                                 { (yyval.number) = 4; }
   1569 #line 1570 "deffilep.c"
   1570     break;
   1571 
   1572   case 30: /* exp_opt: DATAL  */
   1573 #line 191 "deffilep.y"
   1574                                 { (yyval.number) = 4; }
   1575 #line 1576 "deffilep.c"
   1576     break;
   1577 
   1578   case 31: /* exp_opt: PRIVATEU  */
   1579 #line 192 "deffilep.y"
   1580                                 { (yyval.number) = 8; }
   1581 #line 1582 "deffilep.c"
   1582     break;
   1583 
   1584   case 32: /* exp_opt: PRIVATEL  */
   1585 #line 193 "deffilep.y"
   1586                                 { (yyval.number) = 8; }
   1587 #line 1588 "deffilep.c"
   1588     break;
   1589 
   1590   case 35: /* impline: ID '=' ID '.' ID '.' ID opt_equalequal_name  */
   1591 #line 202 "deffilep.y"
   1592                  { def_import ((yyvsp[-7].id), (yyvsp[-5].id), (yyvsp[-3].id), (yyvsp[-1].id), -1, (yyvsp[0].id)); }
   1593 #line 1594 "deffilep.c"
   1594     break;
   1595 
   1596   case 36: /* impline: ID '=' ID '.' ID '.' NUMBER opt_equalequal_name  */
   1597 #line 204 "deffilep.y"
   1598                                  { def_import ((yyvsp[-7].id), (yyvsp[-5].id), (yyvsp[-3].id),  0, (yyvsp[-1].number), (yyvsp[0].id)); }
   1599 #line 1600 "deffilep.c"
   1600     break;
   1601 
   1602   case 37: /* impline: ID '=' ID '.' ID opt_equalequal_name  */
   1603 #line 206 "deffilep.y"
   1604                  { def_import ((yyvsp[-5].id), (yyvsp[-3].id),	0, (yyvsp[-1].id), -1, (yyvsp[0].id)); }
   1605 #line 1606 "deffilep.c"
   1606     break;
   1607 
   1608   case 38: /* impline: ID '=' ID '.' NUMBER opt_equalequal_name  */
   1609 #line 208 "deffilep.y"
   1610                  { def_import ((yyvsp[-5].id), (yyvsp[-3].id),	0,  0, (yyvsp[-1].number), (yyvsp[0].id)); }
   1611 #line 1612 "deffilep.c"
   1612     break;
   1613 
   1614   case 39: /* impline: ID '.' ID '.' ID opt_equalequal_name  */
   1615 #line 210 "deffilep.y"
   1616                  { def_import( 0, (yyvsp[-5].id), (yyvsp[-3].id), (yyvsp[-1].id), -1, (yyvsp[0].id)); }
   1617 #line 1618 "deffilep.c"
   1618     break;
   1619 
   1620   case 40: /* impline: ID '.' ID opt_equalequal_name  */
   1621 #line 212 "deffilep.y"
   1622                  { def_import ( 0, (yyvsp[-3].id),	0, (yyvsp[-1].id), -1, (yyvsp[0].id)); }
   1623 #line 1624 "deffilep.c"
   1624     break;
   1625 
   1626   case 43: /* secline: ID attr_list  */
   1627 #line 221 "deffilep.y"
   1628                      { def_section ((yyvsp[-1].id), (yyvsp[0].number));}
   1629 #line 1630 "deffilep.c"
   1630     break;
   1631 
   1632   case 44: /* secline: ID ID  */
   1633 #line 222 "deffilep.y"
   1634                 { def_section_alt ((yyvsp[-1].id), (yyvsp[0].id));}
   1635 #line 1636 "deffilep.c"
   1636     break;
   1637 
   1638   case 45: /* attr_list: attr_list opt_comma attr  */
   1639 #line 226 "deffilep.y"
   1640                                  { (yyval.number) = (yyvsp[-2].number) | (yyvsp[0].number); }
   1641 #line 1642 "deffilep.c"
   1642     break;
   1643 
   1644   case 46: /* attr_list: attr  */
   1645 #line 227 "deffilep.y"
   1646                { (yyval.number) = (yyvsp[0].number); }
   1647 #line 1648 "deffilep.c"
   1648     break;
   1649 
   1650   case 49: /* opt_number: ',' NUMBER  */
   1651 #line 234 "deffilep.y"
   1652                        { (yyval.number)=(yyvsp[0].number);}
   1653 #line 1654 "deffilep.c"
   1654     break;
   1655 
   1656   case 50: /* opt_number: %empty  */
   1657 #line 235 "deffilep.y"
   1658                    { (yyval.number)=-1;}
   1659 #line 1660 "deffilep.c"
   1660     break;
   1661 
   1662   case 51: /* attr: READ  */
   1663 #line 239 "deffilep.y"
   1664                         { (yyval.number) = 1;}
   1665 #line 1666 "deffilep.c"
   1666     break;
   1667 
   1668   case 52: /* attr: WRITE  */
   1669 #line 240 "deffilep.y"
   1670                         { (yyval.number) = 2;}
   1671 #line 1672 "deffilep.c"
   1672     break;
   1673 
   1674   case 53: /* attr: EXECUTE  */
   1675 #line 241 "deffilep.y"
   1676                         { (yyval.number)=4;}
   1677 #line 1678 "deffilep.c"
   1678     break;
   1679 
   1680   case 54: /* attr: SHARED_K  */
   1681 #line 242 "deffilep.y"
   1682                          { (yyval.number)=8;}
   1683 #line 1684 "deffilep.c"
   1684     break;
   1685 
   1686   case 55: /* keyword_as_name: BASE  */
   1687 #line 246 "deffilep.y"
   1688                       { (yyval.id_const) = "BASE"; }
   1689 #line 1690 "deffilep.c"
   1690     break;
   1691 
   1692   case 56: /* keyword_as_name: CODE  */
   1693 #line 247 "deffilep.y"
   1694                 { (yyval.id_const) = "CODE"; }
   1695 #line 1696 "deffilep.c"
   1696     break;
   1697 
   1698   case 57: /* keyword_as_name: CONSTANTU  */
   1699 #line 248 "deffilep.y"
   1700                      { (yyval.id_const) = "CONSTANT"; }
   1701 #line 1702 "deffilep.c"
   1702     break;
   1703 
   1704   case 58: /* keyword_as_name: CONSTANTL  */
   1705 #line 249 "deffilep.y"
   1706                      { (yyval.id_const) = "constant"; }
   1707 #line 1708 "deffilep.c"
   1708     break;
   1709 
   1710   case 59: /* keyword_as_name: DATAU  */
   1711 #line 250 "deffilep.y"
   1712                  { (yyval.id_const) = "DATA"; }
   1713 #line 1714 "deffilep.c"
   1714     break;
   1715 
   1716   case 60: /* keyword_as_name: DATAL  */
   1717 #line 251 "deffilep.y"
   1718                  { (yyval.id_const) = "data"; }
   1719 #line 1720 "deffilep.c"
   1720     break;
   1721 
   1722   case 61: /* keyword_as_name: DESCRIPTION  */
   1723 #line 252 "deffilep.y"
   1724                        { (yyval.id_const) = "DESCRIPTION"; }
   1725 #line 1726 "deffilep.c"
   1726     break;
   1727 
   1728   case 62: /* keyword_as_name: DIRECTIVE  */
   1729 #line 253 "deffilep.y"
   1730                      { (yyval.id_const) = "DIRECTIVE"; }
   1731 #line 1732 "deffilep.c"
   1732     break;
   1733 
   1734   case 63: /* keyword_as_name: EXCLUDE_SYMBOLS  */
   1735 #line 254 "deffilep.y"
   1736                            { (yyval.id_const) = "EXCLUDE_SYMBOLS"; }
   1737 #line 1738 "deffilep.c"
   1738     break;
   1739 
   1740   case 64: /* keyword_as_name: EXECUTE  */
   1741 #line 255 "deffilep.y"
   1742                    { (yyval.id_const) = "EXECUTE"; }
   1743 #line 1744 "deffilep.c"
   1744     break;
   1745 
   1746   case 65: /* keyword_as_name: EXPORTS  */
   1747 #line 256 "deffilep.y"
   1748                    { (yyval.id_const) = "EXPORTS"; }
   1749 #line 1750 "deffilep.c"
   1750     break;
   1751 
   1752   case 66: /* keyword_as_name: HEAPSIZE  */
   1753 #line 257 "deffilep.y"
   1754                     { (yyval.id_const) = "HEAPSIZE"; }
   1755 #line 1756 "deffilep.c"
   1756     break;
   1757 
   1758   case 67: /* keyword_as_name: IMPORTS  */
   1759 #line 258 "deffilep.y"
   1760                    { (yyval.id_const) = "IMPORTS"; }
   1761 #line 1762 "deffilep.c"
   1762     break;
   1763 
   1764   case 68: /* keyword_as_name: NAME  */
   1765 #line 265 "deffilep.y"
   1766                 { (yyval.id_const) = "NAME"; }
   1767 #line 1768 "deffilep.c"
   1768     break;
   1769 
   1770   case 69: /* keyword_as_name: NONAMEU  */
   1771 #line 266 "deffilep.y"
   1772                    { (yyval.id_const) = "NONAME"; }
   1773 #line 1774 "deffilep.c"
   1774     break;
   1775 
   1776   case 70: /* keyword_as_name: NONAMEL  */
   1777 #line 267 "deffilep.y"
   1778                    { (yyval.id_const) = "noname"; }
   1779 #line 1780 "deffilep.c"
   1780     break;
   1781 
   1782   case 71: /* keyword_as_name: PRIVATEU  */
   1783 #line 268 "deffilep.y"
   1784                     { (yyval.id_const) = "PRIVATE"; }
   1785 #line 1786 "deffilep.c"
   1786     break;
   1787 
   1788   case 72: /* keyword_as_name: PRIVATEL  */
   1789 #line 269 "deffilep.y"
   1790                     { (yyval.id_const) = "private"; }
   1791 #line 1792 "deffilep.c"
   1792     break;
   1793 
   1794   case 73: /* keyword_as_name: READ  */
   1795 #line 270 "deffilep.y"
   1796                 { (yyval.id_const) = "READ"; }
   1797 #line 1798 "deffilep.c"
   1798     break;
   1799 
   1800   case 74: /* keyword_as_name: SHARED_K  */
   1801 #line 271 "deffilep.y"
   1802                      { (yyval.id_const) = "SHARED"; }
   1803 #line 1804 "deffilep.c"
   1804     break;
   1805 
   1806   case 75: /* keyword_as_name: STACKSIZE_K  */
   1807 #line 272 "deffilep.y"
   1808                        { (yyval.id_const) = "STACKSIZE"; }
   1809 #line 1810 "deffilep.c"
   1810     break;
   1811 
   1812   case 76: /* keyword_as_name: VERSIONK  */
   1813 #line 273 "deffilep.y"
   1814                     { (yyval.id_const) = "VERSION"; }
   1815 #line 1816 "deffilep.c"
   1816     break;
   1817 
   1818   case 77: /* keyword_as_name: WRITE  */
   1819 #line 274 "deffilep.y"
   1820                  { (yyval.id_const) = "WRITE"; }
   1821 #line 1822 "deffilep.c"
   1822     break;
   1823 
   1824   case 78: /* opt_name2: ID  */
   1825 #line 277 "deffilep.y"
   1826               { (yyval.id) = (yyvsp[0].id); }
   1827 #line 1828 "deffilep.c"
   1828     break;
   1829 
   1830   case 79: /* opt_name2: '.' keyword_as_name  */
   1831 #line 279 "deffilep.y"
   1832           {
   1833 	    char *name = xmalloc (strlen ((yyvsp[0].id_const)) + 2);
   1834 	    sprintf (name, ".%s", (yyvsp[0].id_const));
   1835 	    (yyval.id) = name;
   1836 	  }
   1837 #line 1838 "deffilep.c"
   1838     break;
   1839 
   1840   case 80: /* opt_name2: '.' opt_name2  */
   1841 #line 285 "deffilep.y"
   1842           {
   1843 	    char *name = def_pool_alloc (strlen ((yyvsp[0].id)) + 2);
   1844 	    sprintf (name, ".%s", (yyvsp[0].id));
   1845 	    (yyval.id) = name;
   1846 	  }
   1847 #line 1848 "deffilep.c"
   1848     break;
   1849 
   1850   case 81: /* opt_name2: keyword_as_name '.' opt_name2  */
   1851 #line 291 "deffilep.y"
   1852           {
   1853 	    char *name = def_pool_alloc (strlen ((yyvsp[-2].id_const)) + 1 + strlen ((yyvsp[0].id)) + 1);
   1854 	    sprintf (name, "%s.%s", (yyvsp[-2].id_const), (yyvsp[0].id));
   1855 	    (yyval.id) = name;
   1856 	  }
   1857 #line 1858 "deffilep.c"
   1858     break;
   1859 
   1860   case 82: /* opt_name2: ID '.' opt_name2  */
   1861 #line 297 "deffilep.y"
   1862           {
   1863 	    char *name = def_pool_alloc (strlen ((yyvsp[-2].id)) + 1 + strlen ((yyvsp[0].id)) + 1);
   1864 	    sprintf (name, "%s.%s", (yyvsp[-2].id), (yyvsp[0].id));
   1865 	    (yyval.id) = name;
   1866 	  }
   1867 #line 1868 "deffilep.c"
   1868     break;
   1869 
   1870   case 83: /* opt_name: opt_name2  */
   1871 #line 304 "deffilep.y"
   1872                     { (yyval.id) = (yyvsp[0].id); }
   1873 #line 1874 "deffilep.c"
   1874     break;
   1875 
   1876   case 84: /* opt_name: %empty  */
   1877 #line 305 "deffilep.y"
   1878                         { (yyval.id) = ""; }
   1879 #line 1880 "deffilep.c"
   1880     break;
   1881 
   1882   case 85: /* opt_equalequal_name: EQUAL ID  */
   1883 #line 308 "deffilep.y"
   1884                                 { (yyval.id) = (yyvsp[0].id); }
   1885 #line 1886 "deffilep.c"
   1886     break;
   1887 
   1888   case 86: /* opt_equalequal_name: %empty  */
   1889 #line 309 "deffilep.y"
   1890                                                                 { (yyval.id) = 0; }
   1891 #line 1892 "deffilep.c"
   1892     break;
   1893 
   1894   case 87: /* opt_ordinal: '@' NUMBER  */
   1895 #line 313 "deffilep.y"
   1896                          { (yyval.number) = (yyvsp[0].number);}
   1897 #line 1898 "deffilep.c"
   1898     break;
   1899 
   1900   case 88: /* opt_ordinal: %empty  */
   1901 #line 314 "deffilep.y"
   1902                          { (yyval.number) = -1;}
   1903 #line 1904 "deffilep.c"
   1904     break;
   1905 
   1906   case 89: /* opt_equal_name: '=' opt_name2  */
   1907 #line 318 "deffilep.y"
   1908                         { (yyval.id) = (yyvsp[0].id); }
   1909 #line 1910 "deffilep.c"
   1910     break;
   1911 
   1912   case 90: /* opt_equal_name: %empty  */
   1913 #line 319 "deffilep.y"
   1914                         { (yyval.id) =	0; }
   1915 #line 1916 "deffilep.c"
   1916     break;
   1917 
   1918   case 91: /* opt_base: BASE '=' VMA  */
   1919 #line 322 "deffilep.y"
   1920                         { (yyval.vma) = (yyvsp[0].vma);}
   1921 #line 1922 "deffilep.c"
   1922     break;
   1923 
   1924   case 92: /* opt_base: %empty  */
   1925 #line 323 "deffilep.y"
   1926                 { (yyval.vma) = (bfd_vma) -1;}
   1927 #line 1928 "deffilep.c"
   1928     break;
   1929 
   1930   case 93: /* anylang_id: ID  */
   1931 #line 326 "deffilep.y"
   1932                         { (yyval.id) = (yyvsp[0].id); }
   1933 #line 1934 "deffilep.c"
   1934     break;
   1935 
   1936   case 94: /* anylang_id: '.' ID  */
   1937 #line 328 "deffilep.y"
   1938           {
   1939 	    char *id = def_pool_alloc (strlen ((yyvsp[0].id)) + 2);
   1940 	    sprintf (id, ".%s", (yyvsp[0].id));
   1941 	    (yyval.id) = id;
   1942 	  }
   1943 #line 1944 "deffilep.c"
   1944     break;
   1945 
   1946   case 95: /* anylang_id: anylang_id '.' opt_digits opt_id  */
   1947 #line 334 "deffilep.y"
   1948           {
   1949 	    char *id = def_pool_alloc (strlen ((yyvsp[-3].id)) + 1 + strlen ((yyvsp[-1].digits)) + strlen ((yyvsp[0].id)) + 1);
   1950 	    sprintf (id, "%s.%s%s", (yyvsp[-3].id), (yyvsp[-1].digits), (yyvsp[0].id));
   1951 	    (yyval.id) = id;
   1952 	  }
   1953 #line 1954 "deffilep.c"
   1954     break;
   1955 
   1956   case 96: /* symbol_list: anylang_id  */
   1957 #line 342 "deffilep.y"
   1958                    { def_exclude_symbols ((yyvsp[0].id)); }
   1959 #line 1960 "deffilep.c"
   1960     break;
   1961 
   1962   case 97: /* symbol_list: symbol_list anylang_id  */
   1963 #line 343 "deffilep.y"
   1964                                        { def_exclude_symbols ((yyvsp[0].id)); }
   1965 #line 1966 "deffilep.c"
   1966     break;
   1967 
   1968   case 98: /* symbol_list: symbol_list ',' anylang_id  */
   1969 #line 344 "deffilep.y"
   1970                                            { def_exclude_symbols ((yyvsp[0].id)); }
   1971 #line 1972 "deffilep.c"
   1972     break;
   1973 
   1974   case 99: /* opt_digits: DIGITS  */
   1975 #line 347 "deffilep.y"
   1976                         { (yyval.digits) = (yyvsp[0].digits); }
   1977 #line 1978 "deffilep.c"
   1978     break;
   1979 
   1980   case 100: /* opt_digits: %empty  */
   1981 #line 348 "deffilep.y"
   1982                         { (yyval.digits) = ""; }
   1983 #line 1984 "deffilep.c"
   1984     break;
   1985 
   1986   case 101: /* opt_id: ID  */
   1987 #line 351 "deffilep.y"
   1988                         { (yyval.id) = (yyvsp[0].id); }
   1989 #line 1990 "deffilep.c"
   1990     break;
   1991 
   1992   case 102: /* opt_id: %empty  */
   1993 #line 352 "deffilep.y"
   1994                         { (yyval.id) = ""; }
   1995 #line 1996 "deffilep.c"
   1996     break;
   1997 
   1998   case 103: /* NUMBER: DIGITS  */
   1999 #line 355 "deffilep.y"
   2000                         { (yyval.number) = strtoul ((yyvsp[0].digits), 0, 0); }
   2001 #line 2002 "deffilep.c"
   2002     break;
   2003 
   2004   case 104: /* VMA: DIGITS  */
   2005 #line 357 "deffilep.y"
   2006                         { (yyval.vma) = (bfd_vma) strtoull ((yyvsp[0].digits), 0, 0); }
   2007 #line 2008 "deffilep.c"
   2008     break;
   2009 
   2010 
   2011 #line 2012 "deffilep.c"
   2012 
   2013       default: break;
   2014     }
   2015   /* User semantic actions sometimes alter yychar, and that requires
   2016      that yytoken be updated with the new translation.  We take the
   2017      approach of translating immediately before every use of yytoken.
   2018      One alternative is translating here after every semantic action,
   2019      but that translation would be missed if the semantic action invokes
   2020      YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
   2021      if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
   2022      incorrect destructor might then be invoked immediately.  In the
   2023      case of YYERROR or YYBACKUP, subsequent parser actions might lead
   2024      to an incorrect destructor call or verbose syntax error message
   2025      before the lookahead is translated.  */
   2026   YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
   2027 
   2028   YYPOPSTACK (yylen);
   2029   yylen = 0;
   2030 
   2031   *++yyvsp = yyval;
   2032 
   2033   /* Now 'shift' the result of the reduction.  Determine what state
   2034      that goes to, based on the state we popped back to and the rule
   2035      number reduced by.  */
   2036   {
   2037     const int yylhs = yyr1[yyn] - YYNTOKENS;
   2038     const int yyi = yypgoto[yylhs] + *yyssp;
   2039     yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
   2040                ? yytable[yyi]
   2041                : yydefgoto[yylhs]);
   2042   }
   2043 
   2044   goto yynewstate;
   2045 
   2046 
   2047 /*--------------------------------------.
   2048 | yyerrlab -- here on detecting error.  |
   2049 `--------------------------------------*/
   2050 yyerrlab:
   2051   /* Make sure we have latest lookahead translation.  See comments at
   2052      user semantic actions for why this is necessary.  */
   2053   yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
   2054   /* If not already recovering from an error, report this error.  */
   2055   if (!yyerrstatus)
   2056     {
   2057       ++yynerrs;
   2058       yyerror (YY_("syntax error"));
   2059     }
   2060 
   2061   if (yyerrstatus == 3)
   2062     {
   2063       /* If just tried and failed to reuse lookahead token after an
   2064          error, discard it.  */
   2065 
   2066       if (yychar <= YYEOF)
   2067         {
   2068           /* Return failure if at end of input.  */
   2069           if (yychar == YYEOF)
   2070             YYABORT;
   2071         }
   2072       else
   2073         {
   2074           yydestruct ("Error: discarding",
   2075                       yytoken, &yylval);
   2076           yychar = YYEMPTY;
   2077         }
   2078     }
   2079 
   2080   /* Else will try to reuse lookahead token after shifting the error
   2081      token.  */
   2082   goto yyerrlab1;
   2083 
   2084 
   2085 /*---------------------------------------------------.
   2086 | yyerrorlab -- error raised explicitly by YYERROR.  |
   2087 `---------------------------------------------------*/
   2088 yyerrorlab:
   2089   /* Pacify compilers when the user code never invokes YYERROR and the
   2090      label yyerrorlab therefore never appears in user code.  */
   2091   if (0)
   2092     YYERROR;
   2093   ++yynerrs;
   2094 
   2095   /* Do not reclaim the symbols of the rule whose action triggered
   2096      this YYERROR.  */
   2097   YYPOPSTACK (yylen);
   2098   yylen = 0;
   2099   YY_STACK_PRINT (yyss, yyssp);
   2100   yystate = *yyssp;
   2101   goto yyerrlab1;
   2102 
   2103 
   2104 /*-------------------------------------------------------------.
   2105 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
   2106 `-------------------------------------------------------------*/
   2107 yyerrlab1:
   2108   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
   2109 
   2110   /* Pop stack until we find a state that shifts the error token.  */
   2111   for (;;)
   2112     {
   2113       yyn = yypact[yystate];
   2114       if (!yypact_value_is_default (yyn))
   2115         {
   2116           yyn += YYSYMBOL_YYerror;
   2117           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
   2118             {
   2119               yyn = yytable[yyn];
   2120               if (0 < yyn)
   2121                 break;
   2122             }
   2123         }
   2124 
   2125       /* Pop the current state because it cannot handle the error token.  */
   2126       if (yyssp == yyss)
   2127         YYABORT;
   2128 
   2129 
   2130       yydestruct ("Error: popping",
   2131                   YY_ACCESSING_SYMBOL (yystate), yyvsp);
   2132       YYPOPSTACK (1);
   2133       yystate = *yyssp;
   2134       YY_STACK_PRINT (yyss, yyssp);
   2135     }
   2136 
   2137   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   2138   *++yyvsp = yylval;
   2139   YY_IGNORE_MAYBE_UNINITIALIZED_END
   2140 
   2141 
   2142   /* Shift the error token.  */
   2143   YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
   2144 
   2145   yystate = yyn;
   2146   goto yynewstate;
   2147 
   2148 
   2149 /*-------------------------------------.
   2150 | yyacceptlab -- YYACCEPT comes here.  |
   2151 `-------------------------------------*/
   2152 yyacceptlab:
   2153   yyresult = 0;
   2154   goto yyreturnlab;
   2155 
   2156 
   2157 /*-----------------------------------.
   2158 | yyabortlab -- YYABORT comes here.  |
   2159 `-----------------------------------*/
   2160 yyabortlab:
   2161   yyresult = 1;
   2162   goto yyreturnlab;
   2163 
   2164 
   2165 /*-----------------------------------------------------------.
   2166 | yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here.  |
   2167 `-----------------------------------------------------------*/
   2168 yyexhaustedlab:
   2169   yyerror (YY_("memory exhausted"));
   2170   yyresult = 2;
   2171   goto yyreturnlab;
   2172 
   2173 
   2174 /*----------------------------------------------------------.
   2175 | yyreturnlab -- parsing is finished, clean up and return.  |
   2176 `----------------------------------------------------------*/
   2177 yyreturnlab:
   2178   if (yychar != YYEMPTY)
   2179     {
   2180       /* Make sure we have latest lookahead translation.  See comments at
   2181          user semantic actions for why this is necessary.  */
   2182       yytoken = YYTRANSLATE (yychar);
   2183       yydestruct ("Cleanup: discarding lookahead",
   2184                   yytoken, &yylval);
   2185     }
   2186   /* Do not reclaim the symbols of the rule whose action triggered
   2187      this YYABORT or YYACCEPT.  */
   2188   YYPOPSTACK (yylen);
   2189   YY_STACK_PRINT (yyss, yyssp);
   2190   while (yyssp != yyss)
   2191     {
   2192       yydestruct ("Cleanup: popping",
   2193                   YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
   2194       YYPOPSTACK (1);
   2195     }
   2196 #ifndef yyoverflow
   2197   if (yyss != yyssa)
   2198     YYSTACK_FREE (yyss);
   2199 #endif
   2200 
   2201   return yyresult;
   2202 }
   2203 
   2204 #line 359 "deffilep.y"
   2205 
   2206 
   2207 /*****************************************************************************
   2208  API
   2209  *****************************************************************************/
   2210 
   2211 static FILE *the_file;
   2212 static const char *def_filename;
   2213 static int linenumber;
   2214 static def_file *def;
   2215 static int saw_newline;
   2216 
   2217 struct directive
   2218   {
   2219     struct directive *next;
   2220     char *name;
   2221     int len;
   2222   };
   2223 
   2224 static struct directive *directives = 0;
   2225 
   2226 def_file *
   2227 def_file_empty (void)
   2228 {
   2229   def_file *rv = xmalloc (sizeof (def_file));
   2230   memset (rv, 0, sizeof (def_file));
   2231   rv->is_dll = -1;
   2232   rv->base_address = (bfd_vma) -1;
   2233   rv->stack_reserve = rv->stack_commit = -1;
   2234   rv->heap_reserve = rv->heap_commit = -1;
   2235   rv->version_major = rv->version_minor = -1;
   2236   return rv;
   2237 }
   2238 
   2239 def_file *
   2240 def_file_parse (const char *filename, def_file *add_to)
   2241 {
   2242   struct directive *d;
   2243 
   2244   the_file = fopen (filename, "r");
   2245   def_filename = filename;
   2246   linenumber = 1;
   2247   if (!the_file)
   2248     {
   2249       perror (filename);
   2250       return 0;
   2251     }
   2252   if (add_to)
   2253     {
   2254       def = add_to;
   2255     }
   2256   else
   2257     {
   2258       def = def_file_empty ();
   2259     }
   2260 
   2261   saw_newline = 1;
   2262   if (def_parse ())
   2263     {
   2264       def_file_free (def);
   2265       fclose (the_file);
   2266       def_pool_free ();
   2267       return 0;
   2268     }
   2269 
   2270   fclose (the_file);
   2271 
   2272   while ((d = directives) != NULL)
   2273     {
   2274 #if TRACE
   2275       printf ("Adding directive %08x `%s'\n", d->name, d->name);
   2276 #endif
   2277       def_file_add_directive (def, d->name, d->len);
   2278       directives = d->next;
   2279       free (d->name);
   2280       free (d);
   2281     }
   2282   def_pool_free ();
   2283 
   2284   return def;
   2285 }
   2286 
   2287 void
   2288 def_file_free (def_file *fdef)
   2289 {
   2290   int i;
   2291   unsigned int ui;
   2292 
   2293   if (!fdef)
   2294     return;
   2295   free (fdef->name);
   2296   free (fdef->description);
   2297 
   2298   if (fdef->section_defs)
   2299     {
   2300       for (i = 0; i < fdef->num_section_defs; i++)
   2301 	{
   2302 	  free (fdef->section_defs[i].name);
   2303 	  free (fdef->section_defs[i].class);
   2304 	}
   2305       free (fdef->section_defs);
   2306     }
   2307 
   2308   for (i = 0; i < fdef->num_exports; i++)
   2309     {
   2310       if (fdef->exports[i].internal_name != fdef->exports[i].name)
   2311         free (fdef->exports[i].internal_name);
   2312       free (fdef->exports[i].name);
   2313       free (fdef->exports[i].its_name);
   2314     }
   2315   free (fdef->exports);
   2316 
   2317   for (i = 0; i < fdef->num_imports; i++)
   2318     {
   2319       if (fdef->imports[i].internal_name != fdef->imports[i].name)
   2320         free (fdef->imports[i].internal_name);
   2321       free (fdef->imports[i].name);
   2322       free (fdef->imports[i].its_name);
   2323     }
   2324   free (fdef->imports);
   2325 
   2326   while (fdef->modules)
   2327     {
   2328       def_file_module *m = fdef->modules;
   2329 
   2330       fdef->modules = fdef->modules->next;
   2331       free (m);
   2332     }
   2333 
   2334   while (fdef->aligncomms)
   2335     {
   2336       def_file_aligncomm *c = fdef->aligncomms;
   2337 
   2338       fdef->aligncomms = fdef->aligncomms->next;
   2339       free (c->symbol_name);
   2340       free (c);
   2341     }
   2342 
   2343   for (ui = 0; ui < fdef->num_exclude_symbols; ui++)
   2344     {
   2345       free (fdef->exclude_symbols[ui].symbol_name);
   2346     }
   2347   free (fdef->exclude_symbols);
   2348 
   2349   free (fdef);
   2350 }
   2351 
   2352 #ifdef DEF_FILE_PRINT
   2353 void
   2354 def_file_print (FILE *file, def_file *fdef)
   2355 {
   2356   int i;
   2357 
   2358   fprintf (file, ">>>> def_file at 0x%08x\n", fdef);
   2359   if (fdef->name)
   2360     fprintf (file, "  name: %s\n", fdef->name ? fdef->name : "(unspecified)");
   2361   if (fdef->is_dll != -1)
   2362     fprintf (file, "  is dll: %s\n", fdef->is_dll ? "yes" : "no");
   2363   if (fdef->base_address != (bfd_vma) -1)
   2364     fprintf (file, "  base address: 0x%" PRIx64 "\n",
   2365 	     (uint64_t) fdef->base_address);
   2366   if (fdef->description)
   2367     fprintf (file, "  description: `%s'\n", fdef->description);
   2368   if (fdef->stack_reserve != -1)
   2369     fprintf (file, "  stack reserve: 0x%08x\n", fdef->stack_reserve);
   2370   if (fdef->stack_commit != -1)
   2371     fprintf (file, "  stack commit: 0x%08x\n", fdef->stack_commit);
   2372   if (fdef->heap_reserve != -1)
   2373     fprintf (file, "  heap reserve: 0x%08x\n", fdef->heap_reserve);
   2374   if (fdef->heap_commit != -1)
   2375     fprintf (file, "  heap commit: 0x%08x\n", fdef->heap_commit);
   2376 
   2377   if (fdef->num_section_defs > 0)
   2378     {
   2379       fprintf (file, "  section defs:\n");
   2380 
   2381       for (i = 0; i < fdef->num_section_defs; i++)
   2382 	{
   2383 	  fprintf (file, "    name: `%s', class: `%s', flags:",
   2384 		   fdef->section_defs[i].name, fdef->section_defs[i].class);
   2385 	  if (fdef->section_defs[i].flag_read)
   2386 	    fprintf (file, " R");
   2387 	  if (fdef->section_defs[i].flag_write)
   2388 	    fprintf (file, " W");
   2389 	  if (fdef->section_defs[i].flag_execute)
   2390 	    fprintf (file, " X");
   2391 	  if (fdef->section_defs[i].flag_shared)
   2392 	    fprintf (file, " S");
   2393 	  fprintf (file, "\n");
   2394 	}
   2395     }
   2396 
   2397   if (fdef->num_exports > 0)
   2398     {
   2399       fprintf (file, "  exports:\n");
   2400 
   2401       for (i = 0; i < fdef->num_exports; i++)
   2402 	{
   2403 	  fprintf (file, "    name: `%s', int: `%s', ordinal: %d, flags:",
   2404 		   fdef->exports[i].name, fdef->exports[i].internal_name,
   2405 		   fdef->exports[i].ordinal);
   2406 	  if (fdef->exports[i].flag_private)
   2407 	    fprintf (file, " P");
   2408 	  if (fdef->exports[i].flag_constant)
   2409 	    fprintf (file, " C");
   2410 	  if (fdef->exports[i].flag_noname)
   2411 	    fprintf (file, " N");
   2412 	  if (fdef->exports[i].flag_data)
   2413 	    fprintf (file, " D");
   2414 	  fprintf (file, "\n");
   2415 	}
   2416     }
   2417 
   2418   if (fdef->num_imports > 0)
   2419     {
   2420       fprintf (file, "  imports:\n");
   2421 
   2422       for (i = 0; i < fdef->num_imports; i++)
   2423 	{
   2424 	  fprintf (file, "    int: %s, from: `%s', name: `%s', ordinal: %d\n",
   2425 		   fdef->imports[i].internal_name,
   2426 		   fdef->imports[i].module,
   2427 		   fdef->imports[i].name,
   2428 		   fdef->imports[i].ordinal);
   2429 	}
   2430     }
   2431 
   2432   if (fdef->version_major != -1)
   2433     fprintf (file, "  version: %d.%d\n", fdef->version_major, fdef->version_minor);
   2434 
   2435   fprintf (file, "<<<< def_file at 0x%08x\n", fdef);
   2436 }
   2437 #endif
   2438 
   2439 /* Helper routine to check for identity of string pointers,
   2440    which might be NULL.  */
   2441 
   2442 static int
   2443 are_names_equal (const char *s1, const char *s2)
   2444 {
   2445   if (!s1 && !s2)
   2446     return 0;
   2447   if (!s1 || !s2)
   2448     return (!s1 ? -1 : 1);
   2449   return strcmp (s1, s2);
   2450 }
   2451 
   2452 static int
   2453 cmp_export_elem (const def_file_export *e, const char *ex_name,
   2454 		 const char *in_name, const char *its_name,
   2455 		 int ord)
   2456 {
   2457   int r;
   2458 
   2459   if ((r = are_names_equal (its_name ? its_name : ex_name,
   2460 			    e->its_name ? e->its_name : e->name)) != 0)
   2461     return r;
   2462   if ((r = are_names_equal (in_name, e->internal_name)) != 0)
   2463     return r;
   2464   return (ord - e->ordinal);
   2465 }
   2466 
   2467 /* Search the position of the identical element, or returns the position
   2468    of the next higher element. If last valid element is smaller, then MAX
   2469    is returned. The max parameter indicates the number of elements in the
   2470    array. On return, *is_ident indicates whether the returned array index
   2471    points at an element which is identical to the one searched for.  */
   2472 
   2473 static unsigned int
   2474 find_export_in_list (def_file_export *b, unsigned int max,
   2475 		     const char *ex_name, const char *in_name,
   2476 		     const char *its_name, int ord, bool *is_ident)
   2477 {
   2478   int e;
   2479   unsigned int l, r, p;
   2480 
   2481   *is_ident = false;
   2482   if (!max)
   2483     return 0;
   2484   if ((e = cmp_export_elem (b, ex_name, in_name, its_name, ord)) <= 0)
   2485     {
   2486       if (!e)
   2487 	*is_ident = true;
   2488       return 0;
   2489     }
   2490   if (max == 1)
   2491     return 1;
   2492   if ((e = cmp_export_elem (b + (max - 1), ex_name, in_name, its_name, ord)) > 0)
   2493     return max;
   2494   else if (!e || max == 2)
   2495     {
   2496       if (!e)
   2497 	*is_ident = true;
   2498       return max - 1;
   2499     }
   2500   l = 0; r = max - 1;
   2501   while (l < r)
   2502     {
   2503       p = (l + r) / 2;
   2504       e = cmp_export_elem (b + p, ex_name, in_name, its_name, ord);
   2505       if (!e)
   2506 	{
   2507 	  *is_ident = true;
   2508 	  return p;
   2509 	}
   2510       else if (e < 0)
   2511 	r = p - 1;
   2512       else if (e > 0)
   2513 	l = p + 1;
   2514     }
   2515   if ((e = cmp_export_elem (b + l, ex_name, in_name, its_name, ord)) > 0)
   2516     ++l;
   2517   else if (!e)
   2518     *is_ident = true;
   2519   return l;
   2520 }
   2521 
   2522 def_file_export *
   2523 def_file_add_export (def_file *fdef,
   2524 		     const char *external_name,
   2525 		     const char *internal_name,
   2526 		     int ordinal,
   2527 		     const char *its_name,
   2528 		     bool *is_dup)
   2529 {
   2530   def_file_export *e;
   2531   unsigned int pos;
   2532 
   2533   if (internal_name && !external_name)
   2534     external_name = internal_name;
   2535   if (external_name && !internal_name)
   2536     internal_name = external_name;
   2537 
   2538   /* We need to avoid duplicates.  */
   2539   *is_dup = false;
   2540   pos = find_export_in_list (fdef->exports, fdef->num_exports,
   2541 		     external_name, internal_name,
   2542 		     its_name, ordinal, is_dup);
   2543 
   2544   if (*is_dup)
   2545     return (fdef->exports + pos);
   2546 
   2547   if ((unsigned)fdef->num_exports >= fdef->max_exports)
   2548     {
   2549       fdef->max_exports += SYMBOL_LIST_ARRAY_GROW;
   2550       fdef->exports = xrealloc (fdef->exports,
   2551 				fdef->max_exports * sizeof (def_file_export));
   2552     }
   2553 
   2554   e = fdef->exports + pos;
   2555   /* If we're inserting in the middle of the array, we need to move the
   2556      following elements forward.  */
   2557   if (pos != (unsigned)fdef->num_exports)
   2558     memmove (&e[1], e, (sizeof (def_file_export) * (fdef->num_exports - pos)));
   2559   /* Wipe the element for use as a new entry.  */
   2560   memset (e, 0, sizeof (def_file_export));
   2561   e->name = xstrdup (external_name);
   2562   e->internal_name = xstrdup (internal_name);
   2563   e->its_name = (its_name ? xstrdup (its_name) : NULL);
   2564   e->ordinal = ordinal;
   2565   fdef->num_exports++;
   2566   return e;
   2567 }
   2568 
   2569 def_file_module *
   2570 def_get_module (def_file *fdef, const char *name)
   2571 {
   2572   def_file_module *s;
   2573 
   2574   for (s = fdef->modules; s; s = s->next)
   2575     if (strcmp (s->name, name) == 0)
   2576       return s;
   2577 
   2578   return NULL;
   2579 }
   2580 
   2581 static def_file_module *
   2582 def_stash_module (def_file *fdef, const char *name)
   2583 {
   2584   def_file_module *s;
   2585 
   2586   if ((s = def_get_module (fdef, name)) != NULL)
   2587       return s;
   2588   s = xmalloc (sizeof (def_file_module) + strlen (name));
   2589   s->next = fdef->modules;
   2590   fdef->modules = s;
   2591   s->user_data = 0;
   2592   strcpy (s->name, name);
   2593   return s;
   2594 }
   2595 
   2596 static int
   2597 cmp_import_elem (const def_file_import *e, const char *ex_name,
   2598 		 const char *in_name, const char *module,
   2599 		 int ord)
   2600 {
   2601   int r;
   2602 
   2603   if ((r = are_names_equal (module, (e->module ? e->module->name : NULL))))
   2604     return r;
   2605   if ((r = are_names_equal (ex_name, e->name)) != 0)
   2606     return r;
   2607   if ((r = are_names_equal (in_name, e->internal_name)) != 0)
   2608     return r;
   2609   if (ord != e->ordinal)
   2610     return (ord < e->ordinal ? -1 : 1);
   2611   return 0;
   2612 }
   2613 
   2614 /* Search the position of the identical element, or returns the position
   2615    of the next higher element. If last valid element is smaller, then MAX
   2616    is returned. The max parameter indicates the number of elements in the
   2617    array. On return, *is_ident indicates whether the returned array index
   2618    points at an element which is identical to the one searched for.  */
   2619 
   2620 static unsigned int
   2621 find_import_in_list (def_file_import *b, unsigned int max,
   2622 		     const char *ex_name, const char *in_name,
   2623 		     const char *module, int ord, bool *is_ident)
   2624 {
   2625   int e;
   2626   unsigned int l, r, p;
   2627 
   2628   *is_ident = false;
   2629   if (!max)
   2630     return 0;
   2631   if ((e = cmp_import_elem (b, ex_name, in_name, module, ord)) <= 0)
   2632     {
   2633       if (!e)
   2634 	*is_ident = true;
   2635       return 0;
   2636     }
   2637   if (max == 1)
   2638     return 1;
   2639   if ((e = cmp_import_elem (b + (max - 1), ex_name, in_name, module, ord)) > 0)
   2640     return max;
   2641   else if (!e || max == 2)
   2642     {
   2643       if (!e)
   2644 	*is_ident = true;
   2645       return max - 1;
   2646     }
   2647   l = 0; r = max - 1;
   2648   while (l < r)
   2649     {
   2650       p = (l + r) / 2;
   2651       e = cmp_import_elem (b + p, ex_name, in_name, module, ord);
   2652       if (!e)
   2653 	{
   2654 	  *is_ident = true;
   2655 	  return p;
   2656 	}
   2657       else if (e < 0)
   2658 	r = p - 1;
   2659       else if (e > 0)
   2660 	l = p + 1;
   2661     }
   2662   if ((e = cmp_import_elem (b + l, ex_name, in_name, module, ord)) > 0)
   2663     ++l;
   2664   else if (!e)
   2665     *is_ident = true;
   2666   return l;
   2667 }
   2668 
   2669 static void
   2670 fill_in_import (def_file_import *i,
   2671 		const char *name,
   2672 		def_file_module *module,
   2673 		int ordinal,
   2674 		const char *internal_name,
   2675 		const char *its_name)
   2676 {
   2677   memset (i, 0, sizeof (def_file_import));
   2678   if (name)
   2679     i->name = xstrdup (name);
   2680   i->module = module;
   2681   i->ordinal = ordinal;
   2682   if (internal_name)
   2683     i->internal_name = xstrdup (internal_name);
   2684   else
   2685     i->internal_name = i->name;
   2686   i->its_name = (its_name ? xstrdup (its_name) : NULL);
   2687 }
   2688 
   2689 def_file_import *
   2690 def_file_add_import (def_file *fdef,
   2691 		     const char *name,
   2692 		     const char *module,
   2693 		     int ordinal,
   2694 		     const char *internal_name,
   2695 		     const char *its_name,
   2696 		     bool *is_dup)
   2697 {
   2698   def_file_import *i;
   2699   unsigned int pos;
   2700 
   2701   /* We need to avoid here duplicates.  */
   2702   *is_dup = false;
   2703   pos = find_import_in_list (fdef->imports, fdef->num_imports,
   2704 			     name,
   2705 			     (!internal_name ? name : internal_name),
   2706 			     module, ordinal, is_dup);
   2707   if (*is_dup)
   2708     return fdef->imports + pos;
   2709 
   2710   if ((unsigned)fdef->num_imports >= fdef->max_imports)
   2711     {
   2712       fdef->max_imports += SYMBOL_LIST_ARRAY_GROW;
   2713       fdef->imports = xrealloc (fdef->imports,
   2714 				fdef->max_imports * sizeof (def_file_import));
   2715     }
   2716   i = fdef->imports + pos;
   2717   /* If we're inserting in the middle of the array, we need to move the
   2718      following elements forward.  */
   2719   if (pos != (unsigned)fdef->num_imports)
   2720     memmove (i + 1, i, sizeof (def_file_import) * (fdef->num_imports - pos));
   2721 
   2722   fill_in_import (i, name, def_stash_module (fdef, module), ordinal,
   2723 		  internal_name, its_name);
   2724   fdef->num_imports++;
   2725 
   2726   return i;
   2727 }
   2728 
   2729 int
   2730 def_file_add_import_from (def_file *fdef,
   2731 			  int num_imports,
   2732 			  const char *name,
   2733 			  const char *module,
   2734 			  int ordinal,
   2735 			  const char *internal_name,
   2736 			  const char *its_name ATTRIBUTE_UNUSED)
   2737 {
   2738   def_file_import *i;
   2739   bool is_dup;
   2740   unsigned int pos;
   2741 
   2742   /* We need to avoid here duplicates.  */
   2743   is_dup = false;
   2744   pos = find_import_in_list (fdef->imports, fdef->num_imports,
   2745 			     name, internal_name ? internal_name : name,
   2746 			     module, ordinal, &is_dup);
   2747   if (is_dup)
   2748     return -1;
   2749   if (fdef->imports && pos != (unsigned)fdef->num_imports)
   2750     {
   2751       i = fdef->imports + pos;
   2752       if (i->module && strcmp (i->module->name, module) == 0)
   2753 	return -1;
   2754     }
   2755 
   2756   if ((unsigned)fdef->num_imports + num_imports - 1 >= fdef->max_imports)
   2757     {
   2758       fdef->max_imports = fdef->num_imports + num_imports +
   2759 			  SYMBOL_LIST_ARRAY_GROW;
   2760 
   2761       fdef->imports = xrealloc (fdef->imports,
   2762 				fdef->max_imports * sizeof (def_file_import));
   2763     }
   2764   i = fdef->imports + pos;
   2765   /* If we're inserting in the middle of the array, we need to move the
   2766      following elements forward.  */
   2767   if (pos != (unsigned)fdef->num_imports)
   2768     memmove (i + num_imports, i,
   2769 	     sizeof (def_file_import) * (fdef->num_imports - pos));
   2770 
   2771   return pos;
   2772 }
   2773 
   2774 def_file_import *
   2775 def_file_add_import_at (def_file *fdef,
   2776 			int pos,
   2777 			const char *name,
   2778 			const char *module,
   2779 			int ordinal,
   2780 			const char *internal_name,
   2781 			const char *its_name)
   2782 {
   2783   def_file_import *i = fdef->imports + pos;
   2784 
   2785   fill_in_import (i, name, def_stash_module (fdef, module), ordinal,
   2786 		  internal_name, its_name);
   2787   fdef->num_imports++;
   2788 
   2789   return i;
   2790 }
   2791 
   2792 /* Search the position of the identical element, or returns the position
   2793    of the next higher element. If last valid element is smaller, then MAX
   2794    is returned. The max parameter indicates the number of elements in the
   2795    array. On return, *is_ident indicates whether the returned array index
   2796    points at an element which is identical to the one searched for.  */
   2797 
   2798 static unsigned int
   2799 find_exclude_in_list (def_file_exclude_symbol *b, unsigned int max,
   2800 		      const char *name, bool *is_ident)
   2801 {
   2802   int e;
   2803   unsigned int l, r, p;
   2804 
   2805   *is_ident = false;
   2806   if (!max)
   2807     return 0;
   2808   if ((e = strcmp (b[0].symbol_name, name)) <= 0)
   2809     {
   2810       if (!e)
   2811 	*is_ident = true;
   2812       return 0;
   2813     }
   2814   if (max == 1)
   2815     return 1;
   2816   if ((e = strcmp (b[max - 1].symbol_name, name)) > 0)
   2817     return max;
   2818   else if (!e || max == 2)
   2819     {
   2820       if (!e)
   2821 	*is_ident = true;
   2822       return max - 1;
   2823     }
   2824   l = 0; r = max - 1;
   2825   while (l < r)
   2826     {
   2827       p = (l + r) / 2;
   2828       e = strcmp (b[p].symbol_name, name);
   2829       if (!e)
   2830 	{
   2831 	  *is_ident = true;
   2832 	  return p;
   2833 	}
   2834       else if (e < 0)
   2835 	r = p - 1;
   2836       else if (e > 0)
   2837 	l = p + 1;
   2838     }
   2839   if ((e = strcmp (b[l].symbol_name, name)) > 0)
   2840     ++l;
   2841   else if (!e)
   2842     *is_ident = true;
   2843   return l;
   2844 }
   2845 
   2846 static def_file_exclude_symbol *
   2847 def_file_add_exclude_symbol (def_file *fdef, const char *name)
   2848 {
   2849   def_file_exclude_symbol *e;
   2850   unsigned pos;
   2851   bool is_dup = false;
   2852 
   2853   pos = find_exclude_in_list (fdef->exclude_symbols, fdef->num_exclude_symbols,
   2854 			      name, &is_dup);
   2855 
   2856   /* We need to avoid duplicates.  */
   2857   if (is_dup)
   2858     return (fdef->exclude_symbols + pos);
   2859 
   2860   if (fdef->num_exclude_symbols >= fdef->max_exclude_symbols)
   2861     {
   2862       fdef->max_exclude_symbols += SYMBOL_LIST_ARRAY_GROW;
   2863       fdef->exclude_symbols = xrealloc (fdef->exclude_symbols,
   2864 					fdef->max_exclude_symbols * sizeof (def_file_exclude_symbol));
   2865     }
   2866 
   2867   e = fdef->exclude_symbols + pos;
   2868   /* If we're inserting in the middle of the array, we need to move the
   2869      following elements forward.  */
   2870   if (pos != fdef->num_exclude_symbols)
   2871     memmove (&e[1], e, (sizeof (def_file_exclude_symbol) * (fdef->num_exclude_symbols - pos)));
   2872   /* Wipe the element for use as a new entry.  */
   2873   memset (e, 0, sizeof (def_file_exclude_symbol));
   2874   e->symbol_name = xstrdup (name);
   2875   fdef->num_exclude_symbols++;
   2876   return e;
   2877 }
   2878 
   2879 struct
   2880 {
   2881   char *param;
   2882   int token;
   2883 }
   2884 diropts[] =
   2885 {
   2886   { "-heap", HEAPSIZE },
   2887   { "-stack", STACKSIZE_K },
   2888   { "-attr", SECTIONS },
   2889   { "-export", EXPORTS },
   2890   { "-aligncomm", ALIGNCOMM },
   2891   { "-exclude-symbols", EXCLUDE_SYMBOLS },
   2892   { 0, 0 }
   2893 };
   2894 
   2895 void
   2896 def_file_add_directive (def_file *my_def, const char *param, int len)
   2897 {
   2898   def_file *save_def = def;
   2899   const char *pend = param + len;
   2900   char * tend = (char *) param;
   2901   int i;
   2902 
   2903   def = my_def;
   2904 
   2905   while (param < pend)
   2906     {
   2907       while (param < pend
   2908 	     && (ISSPACE (*param) || *param == '\n' || *param == 0))
   2909 	param++;
   2910 
   2911       if (param == pend)
   2912 	break;
   2913 
   2914       /* Scan forward until we encounter any of:
   2915 	  - the end of the buffer
   2916 	  - the start of a new option
   2917 	  - a newline separating options
   2918 	  - a NUL separating options.  */
   2919       for (tend = (char *) (param + 1);
   2920 	   (tend < pend
   2921 	    && !(ISSPACE (tend[-1]) && *tend == '-')
   2922 	    && *tend != '\n' && *tend != 0);
   2923 	   tend++)
   2924 	;
   2925 
   2926       for (i = 0; diropts[i].param; i++)
   2927 	{
   2928 	  len = strlen (diropts[i].param);
   2929 
   2930 	  if (tend - param >= len
   2931 	      && strncmp (param, diropts[i].param, len) == 0
   2932 	      && (param[len] == ':' || param[len] == ' '))
   2933 	    {
   2934 	      lex_parse_string_end = tend;
   2935 	      lex_parse_string = param + len + 1;
   2936 	      lex_forced_token = diropts[i].token;
   2937 	      saw_newline = 0;
   2938 	      if (def_parse ())
   2939 		continue;
   2940 	      break;
   2941 	    }
   2942 	}
   2943 
   2944       if (!diropts[i].param)
   2945 	{
   2946 	  if (tend < pend)
   2947 	    {
   2948 	      char saved;
   2949 
   2950 	      saved = * tend;
   2951 	      * tend = 0;
   2952 	      /* xgettext:c-format */
   2953 	      einfo (_("Warning: .drectve `%s' unrecognized\n"), param);
   2954 	      * tend = saved;
   2955 	    }
   2956 	  else
   2957 	    {
   2958 	      einfo (_("Warning: corrupt .drectve at end of def file\n"));
   2959 	    }
   2960 	}
   2961 
   2962       lex_parse_string = 0;
   2963       param = tend;
   2964     }
   2965 
   2966   def = save_def;
   2967   def_pool_free ();
   2968 }
   2969 
   2970 /* Parser Callbacks.  */
   2971 
   2972 static void
   2973 def_image_name (const char *name, bfd_vma base, int is_dll)
   2974 {
   2975   /* If a LIBRARY or NAME statement is specified without a name, there is nothing
   2976      to do here.  We retain the output filename specified on command line.  */
   2977   if (*name)
   2978     {
   2979       const char* image_name = lbasename (name);
   2980 
   2981       if (image_name != name)
   2982 	einfo (_("%s:%d: Warning: path components stripped from %s, '%s'\n"),
   2983 	       def_filename, linenumber, is_dll ? "LIBRARY" : "NAME",
   2984 	       name);
   2985       free (def->name);
   2986       /* Append the default suffix, if none specified.  */
   2987       if (strchr (image_name, '.') == 0)
   2988 	{
   2989 	  const char * suffix = is_dll ? ".dll" : ".exe";
   2990 
   2991 	  def->name = xmalloc (strlen (image_name) + strlen (suffix) + 1);
   2992 	  sprintf (def->name, "%s%s", image_name, suffix);
   2993 	}
   2994       else
   2995 	def->name = xstrdup (image_name);
   2996     }
   2997 
   2998   /* Honor a BASE address statement, even if LIBRARY string is empty.  */
   2999   def->base_address = base;
   3000   def->is_dll = is_dll;
   3001 }
   3002 
   3003 static void
   3004 def_description (const char *text)
   3005 {
   3006   int len = def->description ? strlen (def->description) : 0;
   3007 
   3008   len += strlen (text) + 1;
   3009   if (def->description)
   3010     {
   3011       def->description = xrealloc (def->description, len);
   3012       strcat (def->description, text);
   3013     }
   3014   else
   3015     {
   3016       def->description = xmalloc (len);
   3017       strcpy (def->description, text);
   3018     }
   3019 }
   3020 
   3021 static void
   3022 def_stacksize (int reserve, int commit)
   3023 {
   3024   def->stack_reserve = reserve;
   3025   def->stack_commit = commit;
   3026 }
   3027 
   3028 static void
   3029 def_heapsize (int reserve, int commit)
   3030 {
   3031   def->heap_reserve = reserve;
   3032   def->heap_commit = commit;
   3033 }
   3034 
   3035 static void
   3036 def_section (const char *name, int attr)
   3037 {
   3038   def_file_section *s;
   3039   int max_sections = ROUND_UP (def->num_section_defs, 4);
   3040 
   3041   if (def->num_section_defs >= max_sections)
   3042     {
   3043       max_sections = ROUND_UP (def->num_section_defs+1, 4);
   3044 
   3045       if (def->section_defs)
   3046 	def->section_defs = xrealloc (def->section_defs,
   3047 				      max_sections * sizeof (def_file_import));
   3048       else
   3049 	def->section_defs = xmalloc (max_sections * sizeof (def_file_import));
   3050     }
   3051   s = def->section_defs + def->num_section_defs;
   3052   memset (s, 0, sizeof (def_file_section));
   3053   s->name = xstrdup (name);
   3054   if (attr & 1)
   3055     s->flag_read = 1;
   3056   if (attr & 2)
   3057     s->flag_write = 1;
   3058   if (attr & 4)
   3059     s->flag_execute = 1;
   3060   if (attr & 8)
   3061     s->flag_shared = 1;
   3062 
   3063   def->num_section_defs++;
   3064 }
   3065 
   3066 static void
   3067 def_section_alt (const char *name, const char *attr)
   3068 {
   3069   int aval = 0;
   3070 
   3071   for (; *attr; attr++)
   3072     {
   3073       switch (*attr)
   3074 	{
   3075 	case 'R':
   3076 	case 'r':
   3077 	  aval |= 1;
   3078 	  break;
   3079 	case 'W':
   3080 	case 'w':
   3081 	  aval |= 2;
   3082 	  break;
   3083 	case 'X':
   3084 	case 'x':
   3085 	  aval |= 4;
   3086 	  break;
   3087 	case 'S':
   3088 	case 's':
   3089 	  aval |= 8;
   3090 	  break;
   3091 	}
   3092     }
   3093   def_section (name, aval);
   3094 }
   3095 
   3096 static void
   3097 def_exports (const char *external_name,
   3098 	     const char *internal_name,
   3099 	     int ordinal,
   3100 	     int flags,
   3101 	     const char *its_name)
   3102 {
   3103   def_file_export *dfe;
   3104   bool is_dup = false;
   3105 
   3106   if (!internal_name && external_name)
   3107     internal_name = external_name;
   3108 #if TRACE
   3109   printf ("def_exports, ext=%s int=%s\n", external_name, internal_name);
   3110 #endif
   3111 
   3112   dfe = def_file_add_export (def, external_name, internal_name, ordinal,
   3113 			     its_name, &is_dup);
   3114 
   3115   /* We might check here for flag redefinition and warn.  For now we
   3116      ignore duplicates silently.  */
   3117   if (is_dup)
   3118     return;
   3119 
   3120   if (flags & 1)
   3121     dfe->flag_noname = 1;
   3122   if (flags & 2)
   3123     dfe->flag_constant = 1;
   3124   if (flags & 4)
   3125     dfe->flag_data = 1;
   3126   if (flags & 8)
   3127     dfe->flag_private = 1;
   3128 }
   3129 
   3130 static void
   3131 def_import (const char *internal_name,
   3132 	    const char *module,
   3133 	    const char *dllext,
   3134 	    const char *name,
   3135 	    int ordinal,
   3136 	    const char *its_name)
   3137 {
   3138   char *buf = 0;
   3139   const char *ext = dllext ? dllext : "dll";
   3140   bool is_dup = false;
   3141 
   3142   buf = xmalloc (strlen (module) + strlen (ext) + 2);
   3143   sprintf (buf, "%s.%s", module, ext);
   3144   module = buf;
   3145 
   3146   def_file_add_import (def, name, module, ordinal, internal_name, its_name,
   3147 		       &is_dup);
   3148   free (buf);
   3149 }
   3150 
   3151 static void
   3152 def_version (int major, int minor)
   3153 {
   3154   def->version_major = major;
   3155   def->version_minor = minor;
   3156 }
   3157 
   3158 static void
   3159 def_directive (char *str)
   3160 {
   3161   struct directive *d = xmalloc (sizeof (struct directive));
   3162 
   3163   d->next = directives;
   3164   directives = d;
   3165   d->name = xstrdup (str);
   3166   d->len = strlen (str);
   3167 }
   3168 
   3169 static void
   3170 def_aligncomm (char *str, int align)
   3171 {
   3172   def_file_aligncomm *c, *p;
   3173 
   3174   p = NULL;
   3175   c = def->aligncomms;
   3176   while (c != NULL)
   3177     {
   3178       int e = strcmp (c->symbol_name, str);
   3179       if (!e)
   3180 	{
   3181 	  /* Not sure if we want to allow here duplicates with
   3182 	     different alignments, but for now we keep them.  */
   3183 	  e = (int) c->alignment - align;
   3184 	  if (!e)
   3185 	    return;
   3186 	}
   3187       if (e > 0)
   3188 	break;
   3189       c = (p = c)->next;
   3190     }
   3191 
   3192   c = xmalloc (sizeof (def_file_aligncomm));
   3193   c->symbol_name = xstrdup (str);
   3194   c->alignment = (unsigned int) align;
   3195   if (!p)
   3196     {
   3197       c->next = def->aligncomms;
   3198       def->aligncomms = c;
   3199     }
   3200   else
   3201     {
   3202       c->next = p->next;
   3203       p->next = c;
   3204     }
   3205 }
   3206 
   3207 static void
   3208 def_exclude_symbols (char *str)
   3209 {
   3210   def_file_add_exclude_symbol (def, str);
   3211 }
   3212 
   3213 static void
   3214 def_error (const char *err)
   3215 {
   3216   einfo ("%P: %s:%d: %s\n",
   3217 	 def_filename ? def_filename : "<unknown-file>", linenumber, err);
   3218 }
   3219 
   3220 
   3221 /* Lexical Scanner.  */
   3222 
   3223 #undef TRACE
   3224 #define TRACE 0
   3225 
   3226 /* Never freed, but always reused as needed, so no real leak.  */
   3227 static char *buffer = 0;
   3228 static int buflen = 0;
   3229 static int bufptr = 0;
   3230 
   3231 static void
   3232 put_buf (char c)
   3233 {
   3234   if (bufptr == buflen)
   3235     {
   3236       buflen += 50;		/* overly reasonable, eh?  */
   3237       if (buffer)
   3238 	buffer = xrealloc (buffer, buflen + 1);
   3239       else
   3240 	buffer = xmalloc (buflen + 1);
   3241     }
   3242   buffer[bufptr++] = c;
   3243   buffer[bufptr] = 0;		/* not optimal, but very convenient.  */
   3244 }
   3245 
   3246 static struct
   3247 {
   3248   char *name;
   3249   int token;
   3250 }
   3251 tokens[] =
   3252 {
   3253   { "BASE", BASE },
   3254   { "CODE", CODE },
   3255   { "CONSTANT", CONSTANTU },
   3256   { "constant", CONSTANTL },
   3257   { "DATA", DATAU },
   3258   { "data", DATAL },
   3259   { "DESCRIPTION", DESCRIPTION },
   3260   { "DIRECTIVE", DIRECTIVE },
   3261   { "EXCLUDE_SYMBOLS", EXCLUDE_SYMBOLS },
   3262   { "EXECUTE", EXECUTE },
   3263   { "EXPORTS", EXPORTS },
   3264   { "HEAPSIZE", HEAPSIZE },
   3265   { "IMPORTS", IMPORTS },
   3266   { "LIBRARY", LIBRARY },
   3267   { "NAME", NAME },
   3268   { "NONAME", NONAMEU },
   3269   { "noname", NONAMEL },
   3270   { "PRIVATE", PRIVATEU },
   3271   { "private", PRIVATEL },
   3272   { "READ", READ },
   3273   { "SECTIONS", SECTIONS },
   3274   { "SEGMENTS", SECTIONS },
   3275   { "SHARED", SHARED_K },
   3276   { "STACKSIZE", STACKSIZE_K },
   3277   { "VERSION", VERSIONK },
   3278   { "WRITE", WRITE },
   3279   { 0, 0 }
   3280 };
   3281 
   3282 static int
   3283 def_getc (void)
   3284 {
   3285   int rv;
   3286 
   3287   if (lex_parse_string)
   3288     {
   3289       if (lex_parse_string >= lex_parse_string_end)
   3290 	rv = EOF;
   3291       else
   3292 	rv = *lex_parse_string++;
   3293     }
   3294   else
   3295     {
   3296       rv = fgetc (the_file);
   3297     }
   3298   if (rv == '\n')
   3299     saw_newline = 1;
   3300   return rv;
   3301 }
   3302 
   3303 static int
   3304 def_ungetc (int c)
   3305 {
   3306   if (lex_parse_string)
   3307     {
   3308       lex_parse_string--;
   3309       return c;
   3310     }
   3311   else
   3312     return ungetc (c, the_file);
   3313 }
   3314 
   3315 static int
   3316 def_lex (void)
   3317 {
   3318   int c, i, q;
   3319 
   3320   if (lex_forced_token)
   3321     {
   3322       i = lex_forced_token;
   3323       lex_forced_token = 0;
   3324 #if TRACE
   3325       printf ("lex: forcing token %d\n", i);
   3326 #endif
   3327       return i;
   3328     }
   3329 
   3330   c = def_getc ();
   3331 
   3332   /* Trim leading whitespace.  */
   3333   while (c != EOF && (c == ' ' || c == '\t') && saw_newline)
   3334     c = def_getc ();
   3335 
   3336   if (c == EOF)
   3337     {
   3338 #if TRACE
   3339       printf ("lex: EOF\n");
   3340 #endif
   3341       return 0;
   3342     }
   3343 
   3344   if (saw_newline && c == ';')
   3345     {
   3346       do
   3347 	{
   3348 	  c = def_getc ();
   3349 	}
   3350       while (c != EOF && c != '\n');
   3351       if (c == '\n')
   3352 	return def_lex ();
   3353       return 0;
   3354     }
   3355 
   3356   /* Must be something else.  */
   3357   saw_newline = 0;
   3358 
   3359   if (ISDIGIT (c))
   3360     {
   3361       bufptr = 0;
   3362       while (c != EOF && (ISXDIGIT (c) || (c == 'x')))
   3363 	{
   3364 	  put_buf (c);
   3365 	  c = def_getc ();
   3366 	}
   3367       if (c != EOF)
   3368 	def_ungetc (c);
   3369       yylval.digits = def_pool_strdup (buffer);
   3370 #if TRACE
   3371       printf ("lex: `%s' returns DIGITS\n", buffer);
   3372 #endif
   3373       return DIGITS;
   3374     }
   3375 
   3376   if (ISALPHA (c) || strchr ("$:-_?@", c))
   3377     {
   3378       bufptr = 0;
   3379       q = c;
   3380       put_buf (c);
   3381       c = def_getc ();
   3382 
   3383       if (q == '@')
   3384 	{
   3385 	  if (ISBLANK (c) ) /* '@' followed by whitespace.  */
   3386 	    return (q);
   3387 	  else if (ISDIGIT (c)) /* '@' followed by digit.  */
   3388 	    {
   3389 	      def_ungetc (c);
   3390 	      return (q);
   3391 	    }
   3392 #if TRACE
   3393 	  printf ("lex: @ returns itself\n");
   3394 #endif
   3395 	}
   3396 
   3397       while (c != EOF && (ISALNUM (c) || strchr ("$:-_?/@<>", c)))
   3398 	{
   3399 	  put_buf (c);
   3400 	  c = def_getc ();
   3401 	}
   3402       if (c != EOF)
   3403 	def_ungetc (c);
   3404       if (ISALPHA (q)) /* Check for tokens.  */
   3405 	{
   3406 	  for (i = 0; tokens[i].name; i++)
   3407 	    if (strcmp (tokens[i].name, buffer) == 0)
   3408 	      {
   3409 #if TRACE
   3410 	        printf ("lex: `%s' is a string token\n", buffer);
   3411 #endif
   3412 	        return tokens[i].token;
   3413 	      }
   3414 	}
   3415 #if TRACE
   3416       printf ("lex: `%s' returns ID\n", buffer);
   3417 #endif
   3418       yylval.id = def_pool_strdup (buffer);
   3419       return ID;
   3420     }
   3421 
   3422   if (c == '\'' || c == '"')
   3423     {
   3424       q = c;
   3425       c = def_getc ();
   3426       bufptr = 0;
   3427 
   3428       while (c != EOF && c != q)
   3429 	{
   3430 	  put_buf (c);
   3431 	  c = def_getc ();
   3432 	}
   3433       yylval.id = def_pool_strdup (buffer);
   3434 #if TRACE
   3435       printf ("lex: `%s' returns ID\n", buffer);
   3436 #endif
   3437       return ID;
   3438     }
   3439 
   3440   if ( c == '=')
   3441     {
   3442       c = def_getc ();
   3443       if (c == '=')
   3444 	{
   3445 #if TRACE
   3446 	  printf ("lex: `==' returns EQUAL\n");
   3447 #endif
   3448 	  return EQUAL;
   3449 	}
   3450       def_ungetc (c);
   3451 #if TRACE
   3452       printf ("lex: `=' returns itself\n");
   3453 #endif
   3454       return '=';
   3455     }
   3456   if (c == '.' || c == ',')
   3457     {
   3458 #if TRACE
   3459       printf ("lex: `%c' returns itself\n", c);
   3460 #endif
   3461       return c;
   3462     }
   3463 
   3464   if (c == '\n')
   3465     {
   3466       linenumber++;
   3467       saw_newline = 1;
   3468     }
   3469 
   3470   /*printf ("lex: 0x%02x ignored\n", c); */
   3471   return def_lex ();
   3472 }
   3473 
   3474 static char *
   3475 def_pool_alloc (size_t sz)
   3476 {
   3477   def_pool_str *e;
   3478 
   3479   e = (def_pool_str *) xmalloc (sizeof (def_pool_str) + sz);
   3480   e->next = pool_strs;
   3481   pool_strs = e;
   3482   return e->data;
   3483 }
   3484 
   3485 static char *
   3486 def_pool_strdup (const char *str)
   3487 {
   3488   char *s;
   3489   size_t len;
   3490   if (!str)
   3491     return NULL;
   3492   len = strlen (str) + 1;
   3493   s = def_pool_alloc (len);
   3494   memcpy (s, str, len);
   3495   return s;
   3496 }
   3497 
   3498 static void
   3499 def_pool_free (void)
   3500 {
   3501   def_pool_str *p;
   3502   while ((p = pool_strs) != NULL)
   3503     {
   3504       pool_strs = p->next;
   3505       free (p);
   3506     }
   3507 }
   3508