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