aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
Diffstat (limited to 'ld')
-rw-r--r--ld/configdoc.texi26
-rw-r--r--ld/deffilep.c2927
-rw-r--r--ld/deffilep.h120
-rw-r--r--ld/ld.12355
-rw-r--r--ld/ld.info7611
-rw-r--r--ld/ldgram.c4495
-rw-r--r--ld/ldgram.h331
-rw-r--r--ld/ldlex.c4261
8 files changed, 22126 insertions, 0 deletions
diff --git a/ld/configdoc.texi b/ld/configdoc.texi
new file mode 100644
index 0000000..7434edb
--- /dev/null
+++ b/ld/configdoc.texi
@@ -0,0 +1,26 @@
+@c ------------------------------ CONFIGURATION VARS:
+@c 1. Inclusiveness of this manual
+@set GENERIC
+
+@c 2. Specific target machines
+@set ARM
+@set H8300
+@set HPPA
+@set I960
+@set M68HC11
+@set M68K
+@set MMIX
+@set MSP430
+@set POWERPC
+@set POWERPC64
+@set Renesas
+@set SPU
+@set TICOFF
+@set WIN32
+@set XTENSA
+
+@c 3. Properties of this configuration
+@clear SingleFormat
+@set UsesEnvVars
+@c ------------------------------ end CONFIGURATION VARS
+
diff --git a/ld/deffilep.c b/ld/deffilep.c
new file mode 100644
index 0000000..53f58c4
--- /dev/null
+++ b/ld/deffilep.c
@@ -0,0 +1,2927 @@
+/* A Bison parser, made by GNU Bison 2.3. */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Bison version. */
+#define YYBISON_VERSION "2.3"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Using locations. */
+#define YYLSP_NEEDED 0
+
+
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ NAME = 258,
+ LIBRARY = 259,
+ DESCRIPTION = 260,
+ STACKSIZE_K = 261,
+ HEAPSIZE = 262,
+ CODE = 263,
+ DATAU = 264,
+ DATAL = 265,
+ SECTIONS = 266,
+ EXPORTS = 267,
+ IMPORTS = 268,
+ VERSIONK = 269,
+ BASE = 270,
+ CONSTANTU = 271,
+ CONSTANTL = 272,
+ PRIVATEU = 273,
+ PRIVATEL = 274,
+ ALIGNCOMM = 275,
+ READ = 276,
+ WRITE = 277,
+ EXECUTE = 278,
+ SHARED = 279,
+ NONAMEU = 280,
+ NONAMEL = 281,
+ DIRECTIVE = 282,
+ ID = 283,
+ DIGITS = 284
+ };
+#endif
+/* Tokens. */
+#define NAME 258
+#define LIBRARY 259
+#define DESCRIPTION 260
+#define STACKSIZE_K 261
+#define HEAPSIZE 262
+#define CODE 263
+#define DATAU 264
+#define DATAL 265
+#define SECTIONS 266
+#define EXPORTS 267
+#define IMPORTS 268
+#define VERSIONK 269
+#define BASE 270
+#define CONSTANTU 271
+#define CONSTANTL 272
+#define PRIVATEU 273
+#define PRIVATEL 274
+#define ALIGNCOMM 275
+#define READ 276
+#define WRITE 277
+#define EXECUTE 278
+#define SHARED 279
+#define NONAMEU 280
+#define NONAMEL 281
+#define DIRECTIVE 282
+#define ID 283
+#define DIGITS 284
+
+
+
+
+/* Copy the first part of user declarations. */
+#line 1 "deffilep.y"
+ /* deffilep.y - parser for .def files */
+
+/* Copyright 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006,
+ 2007, 2009 Free Software Foundation, Inc.
+
+ This file is part of GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "libiberty.h"
+#include "safe-ctype.h"
+#include "bfd.h"
+#include "ld.h"
+#include "ldmisc.h"
+#include "deffile.h"
+
+#define TRACE 0
+
+#define ROUND_UP(a, b) (((a)+((b)-1))&~((b)-1))
+
+/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
+ as well as gratuitiously global symbol names, so we can have multiple
+ yacc generated parsers in ld. Note that these are only the variables
+ produced by yacc. If other parser generators (bison, byacc, etc) produce
+ additional global names that conflict at link time, then those parser
+ generators need to be fixed instead of adding those names to this list. */
+
+#define yymaxdepth def_maxdepth
+#define yyparse def_parse
+#define yylex def_lex
+#define yyerror def_error
+#define yylval def_lval
+#define yychar def_char
+#define yydebug def_debug
+#define yypact def_pact
+#define yyr1 def_r1
+#define yyr2 def_r2
+#define yydef def_def
+#define yychk def_chk
+#define yypgo def_pgo
+#define yyact def_act
+#define yyexca def_exca
+#define yyerrflag def_errflag
+#define yynerrs def_nerrs
+#define yyps def_ps
+#define yypv def_pv
+#define yys def_s
+#define yy_yys def_yys
+#define yystate def_state
+#define yytmp def_tmp
+#define yyv def_v
+#define yy_yyv def_yyv
+#define yyval def_val
+#define yylloc def_lloc
+#define yyreds def_reds /* With YYDEBUG defined. */
+#define yytoks def_toks /* With YYDEBUG defined. */
+#define yylhs def_yylhs
+#define yylen def_yylen
+#define yydefred def_yydefred
+#define yydgoto def_yydgoto
+#define yysindex def_yysindex
+#define yyrindex def_yyrindex
+#define yygindex def_yygindex
+#define yytable def_yytable
+#define yycheck def_yycheck
+
+static void def_description (const char *);
+static void def_exports (const char *, const char *, int, int);
+static void def_heapsize (int, int);
+static void def_import (const char *, const char *, const char *, const char *,
+ int);
+static void def_image_name (const char *, int, int);
+static void def_section (const char *, int);
+static void def_section_alt (const char *, const char *);
+static void def_stacksize (int, int);
+static void def_version (int, int);
+static void def_directive (char *);
+static void def_aligncomm (char *str, int align);
+static int def_parse (void);
+static int def_error (const char *);
+static int def_lex (void);
+
+static int lex_forced_token = 0;
+static const char *lex_parse_string = 0;
+static const char *lex_parse_string_end = 0;
+
+
+
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table. */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 103 "deffilep.y"
+{
+ char *id;
+ int number;
+ char *digits;
+}
+/* Line 193 of yacc.c. */
+#line 262 "deffilep.c"
+ YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations. */
+
+
+/* Line 216 of yacc.c. */
+#line 275 "deffilep.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+# if ENABLE_NLS
+# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_(msgid) dgettext ("bison-runtime", msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions. */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int i)
+#else
+static int
+YYID (i)
+ int i;
+#endif
+{
+ return i;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef _STDLIB_H
+# define _STDLIB_H 1
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined _STDLIB_H \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef _STDLIB_H
+# define _STDLIB_H 1
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yytype_int16 yyss;
+ YYSTYPE yyvs;
+ };
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack, Stack, yysize); \
+ Stack = &yyptr->Stack; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 44
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 107
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 34
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 24
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 71
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 107
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 284
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const yytype_uint8 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 31, 2, 30, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 32, 2, 2, 33, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const yytype_uint8 yyprhs[] =
+{
+ 0, 0, 3, 6, 8, 12, 16, 19, 23, 27,
+ 30, 33, 36, 39, 42, 45, 50, 53, 58, 59,
+ 61, 64, 70, 74, 75, 77, 79, 81, 83, 85,
+ 87, 89, 91, 94, 96, 104, 112, 118, 124, 130,
+ 134, 137, 139, 142, 145, 149, 151, 153, 154, 157,
+ 158, 160, 162, 164, 166, 168, 172, 173, 176, 177,
+ 180, 181, 185, 186, 188, 192, 194, 199, 201, 202,
+ 204, 205
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yytype_int8 yyrhs[] =
+{
+ 35, 0, -1, 35, 36, -1, 36, -1, 3, 49,
+ 52, -1, 4, 49, 52, -1, 5, 28, -1, 6,
+ 57, 47, -1, 7, 57, 47, -1, 8, 45, -1,
+ 9, 45, -1, 11, 43, -1, 12, 37, -1, 13,
+ 41, -1, 14, 57, -1, 14, 57, 30, 57, -1,
+ 27, 28, -1, 20, 54, 31, 57, -1, -1, 38,
+ -1, 37, 38, -1, 53, 51, 50, 46, 39, -1,
+ 40, 46, 39, -1, -1, 25, -1, 26, -1, 16,
+ -1, 17, -1, 9, -1, 10, -1, 18, -1, 19,
+ -1, 41, 42, -1, 42, -1, 28, 32, 28, 30,
+ 28, 30, 28, -1, 28, 32, 28, 30, 28, 30,
+ 57, -1, 28, 32, 28, 30, 28, -1, 28, 32,
+ 28, 30, 57, -1, 28, 30, 28, 30, 28, -1,
+ 28, 30, 28, -1, 43, 44, -1, 44, -1, 28,
+ 45, -1, 28, 28, -1, 45, 46, 48, -1, 48,
+ -1, 31, -1, -1, 31, 57, -1, -1, 21, -1,
+ 22, -1, 23, -1, 24, -1, 28, -1, 28, 30,
+ 28, -1, -1, 33, 57, -1, -1, 32, 53, -1,
+ -1, 15, 32, 57, -1, -1, 28, -1, 53, 30,
+ 28, -1, 28, -1, 54, 30, 55, 56, -1, 29,
+ -1, -1, 28, -1, -1, 29, -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const yytype_uint16 yyrline[] =
+{
+ 0, 123, 123, 124, 128, 129, 130, 131, 132, 133,
+ 134, 135, 136, 137, 138, 139, 140, 141, 145, 147,
+ 148, 155, 162, 163, 166, 167, 168, 169, 170, 171,
+ 172, 173, 176, 177, 181, 182, 183, 184, 185, 186,
+ 190, 191, 195, 196, 200, 201, 205, 206, 208, 209,
+ 213, 214, 215, 216, 219, 220, 226, 230, 231, 235,
+ 236, 239, 240, 243, 244, 252, 253, 261, 262, 265,
+ 266, 269
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "$end", "error", "$undefined", "NAME", "LIBRARY", "DESCRIPTION",
+ "STACKSIZE_K", "HEAPSIZE", "CODE", "DATAU", "DATAL", "SECTIONS",
+ "EXPORTS", "IMPORTS", "VERSIONK", "BASE", "CONSTANTU", "CONSTANTL",
+ "PRIVATEU", "PRIVATEL", "ALIGNCOMM", "READ", "WRITE", "EXECUTE",
+ "SHARED", "NONAMEU", "NONAMEL", "DIRECTIVE", "ID", "DIGITS", "'.'",
+ "','", "'='", "'@'", "$accept", "start", "command", "explist", "expline",
+ "exp_opt_list", "exp_opt", "implist", "impline", "seclist", "secline",
+ "attr_list", "opt_comma", "opt_number", "attr", "opt_name",
+ "opt_ordinal", "opt_equal_name", "opt_base", "dot_name", "anylang_id",
+ "opt_digits", "opt_id", "NUMBER", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const yytype_uint16 yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 46, 44, 61, 64
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint8 yyr1[] =
+{
+ 0, 34, 35, 35, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 37, 37,
+ 37, 38, 39, 39, 40, 40, 40, 40, 40, 40,
+ 40, 40, 41, 41, 42, 42, 42, 42, 42, 42,
+ 43, 43, 44, 44, 45, 45, 46, 46, 47, 47,
+ 48, 48, 48, 48, 49, 49, 49, 50, 50, 51,
+ 51, 52, 52, 53, 53, 54, 54, 55, 55, 56,
+ 56, 57
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 2, 1, 3, 3, 2, 3, 3, 2,
+ 2, 2, 2, 2, 2, 4, 2, 4, 0, 1,
+ 2, 5, 3, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 1, 7, 7, 5, 5, 5, 3,
+ 2, 1, 2, 2, 3, 1, 1, 0, 2, 0,
+ 1, 1, 1, 1, 1, 3, 0, 2, 0, 2,
+ 0, 3, 0, 1, 3, 1, 4, 1, 0, 1,
+ 0, 1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+ STATE-NUM when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint8 yydefact[] =
+{
+ 0, 56, 56, 0, 0, 0, 0, 0, 0, 18,
+ 0, 0, 0, 0, 0, 3, 54, 62, 62, 6,
+ 71, 49, 49, 50, 51, 52, 53, 9, 45, 10,
+ 0, 11, 41, 63, 12, 19, 60, 0, 13, 33,
+ 14, 65, 0, 16, 1, 2, 0, 0, 4, 5,
+ 0, 7, 8, 46, 0, 43, 42, 40, 20, 0,
+ 0, 58, 0, 0, 32, 0, 68, 0, 55, 0,
+ 48, 44, 64, 59, 0, 47, 39, 0, 15, 67,
+ 70, 17, 61, 57, 23, 0, 0, 69, 66, 28,
+ 29, 26, 27, 30, 31, 24, 25, 21, 47, 38,
+ 36, 37, 23, 0, 22, 34, 35
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int8 yydefgoto[] =
+{
+ -1, 14, 15, 34, 35, 97, 98, 38, 39, 31,
+ 32, 27, 54, 51, 28, 17, 75, 61, 48, 36,
+ 42, 80, 88, 21
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -74
+static const yytype_int8 yypact[] =
+{
+ 29, -27, -27, -23, -15, -15, 30, 30, 2, 11,
+ 19, -15, 27, 33, 4, -74, -7, 48, 48, -74,
+ -74, 26, 26, -74, -74, -74, -74, -2, -74, -2,
+ 55, 2, -74, -74, 11, -74, 14, 18, 19, -74,
+ 50, -74, -3, -74, -74, -74, 54, 52, -74, -74,
+ -15, -74, -74, -74, 30, -74, -2, -74, -74, 57,
+ 11, 53, 59, 60, -74, -15, 61, -15, -74, -15,
+ -74, -74, -74, 62, -15, 58, 63, 64, -74, -74,
+ 67, -74, -74, -74, 49, 68, 42, -74, -74, -74,
+ -74, -74, -74, -74, -74, -74, -74, -74, 58, -74,
+ 69, -74, 49, 44, -74, -74, -74
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int8 yypgoto[] =
+{
+ -74, -74, 77, -74, 66, -1, -74, -74, 65, -74,
+ 71, -4, -73, 75, 51, 102, -74, -74, 88, 47,
+ -74, -74, -74, -5
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If zero, do what YYDEFACT says.
+ If YYTABLE_NINF, syntax error. */
+#define YYTABLE_NINF -48
+static const yytype_int8 yytable[] =
+{
+ 22, 16, 84, 29, 44, 19, 40, 1, 2, 3,
+ 4, 5, 6, 7, 20, 8, 9, 10, 11, -47,
+ -47, -47, -47, 46, 12, 102, 56, 66, 67, 53,
+ 30, 13, 1, 2, 3, 4, 5, 6, 7, 33,
+ 8, 9, 10, 11, 59, 70, 60, 37, 62, 12,
+ 63, 23, 24, 25, 26, 41, 13, 50, 89, 90,
+ 78, 43, 81, 47, 82, 91, 92, 93, 94, 83,
+ 100, 20, 105, 20, 95, 96, 23, 24, 25, 26,
+ 65, 101, 68, 55, 69, 72, 74, 76, 77, 53,
+ 79, 45, 59, 85, 86, 87, 99, 52, 106, 103,
+ 58, 104, 57, 64, 18, 71, 49, 73
+};
+
+static const yytype_uint8 yycheck[] =
+{
+ 5, 28, 75, 7, 0, 28, 11, 3, 4, 5,
+ 6, 7, 8, 9, 29, 11, 12, 13, 14, 21,
+ 22, 23, 24, 30, 20, 98, 30, 30, 31, 31,
+ 28, 27, 3, 4, 5, 6, 7, 8, 9, 28,
+ 11, 12, 13, 14, 30, 50, 32, 28, 30, 20,
+ 32, 21, 22, 23, 24, 28, 27, 31, 9, 10,
+ 65, 28, 67, 15, 69, 16, 17, 18, 19, 74,
+ 28, 29, 28, 29, 25, 26, 21, 22, 23, 24,
+ 30, 86, 28, 28, 32, 28, 33, 28, 28, 31,
+ 29, 14, 30, 30, 30, 28, 28, 22, 103, 30,
+ 34, 102, 31, 38, 2, 54, 18, 60
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const yytype_uint8 yystos[] =
+{
+ 0, 3, 4, 5, 6, 7, 8, 9, 11, 12,
+ 13, 14, 20, 27, 35, 36, 28, 49, 49, 28,
+ 29, 57, 57, 21, 22, 23, 24, 45, 48, 45,
+ 28, 43, 44, 28, 37, 38, 53, 28, 41, 42,
+ 57, 28, 54, 28, 0, 36, 30, 15, 52, 52,
+ 31, 47, 47, 31, 46, 28, 45, 44, 38, 30,
+ 32, 51, 30, 32, 42, 30, 30, 31, 28, 32,
+ 57, 48, 28, 53, 33, 50, 28, 28, 57, 29,
+ 55, 57, 57, 57, 46, 30, 30, 28, 56, 9,
+ 10, 16, 17, 18, 19, 25, 26, 39, 40, 28,
+ 28, 57, 46, 30, 39, 28, 57
+};
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. */
+
+#define YYFAIL goto yyerrlab
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ yytoken = YYTRANSLATE (yychar); \
+ YYPOPSTACK (1); \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (YYID (0))
+
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+ If N is 0, then set CURRENT to the empty location which ends
+ the previous symbol: RHS[0] (always defined). */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ do \
+ if (YYID (N)) \
+ { \
+ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
+ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
+ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
+ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
+ } \
+ else \
+ { \
+ (Current).first_line = (Current).last_line = \
+ YYRHSLOC (Rhs, 0).last_line; \
+ (Current).first_column = (Current).last_column = \
+ YYRHSLOC (Rhs, 0).last_column; \
+ } \
+ while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+ This macro was not mandated originally: define only if we know
+ we won't break user code: when these are the locations we know. */
+
+#ifndef YY_LOCATION_PRINT
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
+# define YY_LOCATION_PRINT(File, Loc) \
+ fprintf (File, "%d.%d-%d.%d", \
+ (Loc).first_line, (Loc).first_column, \
+ (Loc).last_line, (Loc).last_column)
+# else
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (!yyvaluep)
+ return;
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+ YYUSE (yyoutput);
+# endif
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+ yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+ YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+#else
+static void
+yy_stack_print (bottom, top)
+ yytype_int16 *bottom;
+ yytype_int16 *top;
+#endif
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; bottom <= top; ++bottom)
+ YYFPRINTF (stderr, " %d", *bottom);
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+ YYSTYPE *yyvsp;
+ int yyrule;
+#endif
+{
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ unsigned long int yylno = yyrline[yyrule];
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ fprintf (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ );
+ fprintf (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined __GLIBC__ && defined _STRING_H
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+ const char *yystr;
+#endif
+{
+ YYSIZE_T yylen;
+ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+ return yylen;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+#endif
+{
+ char *yyd = yydest;
+ const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+ quotes and backslashes, so that it's suitable for yyerror. The
+ heuristic is that double-quoting is unnecessary unless the string
+ contains an apostrophe, a comma, or backslash (other than
+ backslash-backslash). YYSTR is taken from yytname. If YYRES is
+ null, do not copy; instead, return the length of what the result
+ would have been. */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+ if (*yystr == '"')
+ {
+ YYSIZE_T yyn = 0;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ if (! yyres)
+ return yystrlen (yystr);
+
+ return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+ YYCHAR while in state YYSTATE. Return the number of bytes copied,
+ including the terminating null byte. If YYRESULT is null, do not
+ copy anything; just return the number of bytes that would be
+ copied. As a special case, return 0 if an ordinary "syntax error"
+ message will do. Return YYSIZE_MAXIMUM if overflow occurs during
+ size calculation. */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+ int yyn = yypact[yystate];
+
+ if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+ return 0;
+ else
+ {
+ int yytype = YYTRANSLATE (yychar);
+ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+ YYSIZE_T yysize = yysize0;
+ YYSIZE_T yysize1;
+ int yysize_overflow = 0;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ int yyx;
+
+# if 0
+ /* This is so xgettext sees the translatable formats that are
+ constructed on the fly. */
+ YY_("syntax error, unexpected %s");
+ YY_("syntax error, unexpected %s, expecting %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+ char *yyfmt;
+ char const *yyf;
+ static char const yyunexpected[] = "syntax error, unexpected %s";
+ static char const yyexpecting[] = ", expecting %s";
+ static char const yyor[] = " or %s";
+ char yyformat[sizeof yyunexpected
+ + sizeof yyexpecting - 1
+ + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+ * (sizeof yyor - 1))];
+ char const *yyprefix = yyexpecting;
+
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yycount = 1;
+
+ yyarg[0] = yytname[yytype];
+ yyfmt = yystpcpy (yyformat, yyunexpected);
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ yyformat[sizeof yyunexpected - 1] = '\0';
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+ yysize_overflow |= (yysize1 < yysize);
+ yysize = yysize1;
+ yyfmt = yystpcpy (yyfmt, yyprefix);
+ yyprefix = yyor;
+ }
+
+ yyf = YY_(yyformat);
+ yysize1 = yysize + yystrlen (yyf);
+ yysize_overflow |= (yysize1 < yysize);
+ yysize = yysize1;
+
+ if (yysize_overflow)
+ return YYSIZE_MAXIMUM;
+
+ if (yyresult)
+ {
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ char *yyp = yyresult;
+ int yyi = 0;
+ while ((*yyp = *yyf) != '\0')
+ {
+ if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyf += 2;
+ }
+ else
+ {
+ yyp++;
+ yyf++;
+ }
+ }
+ }
+ return yysize;
+ }
+}
+#endif /* YYERROR_VERBOSE */
+
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
+#endif
+{
+ YYUSE (yyvaluep);
+
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ switch (yytype)
+ {
+
+ default:
+ break;
+ }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes. */
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* The look-ahead symbol. */
+int yychar;
+
+/* The semantic value of the look-ahead symbol. */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far. */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+
+ int yystate;
+ int yyn;
+ int yyresult;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+ /* Look-ahead token as an internal (translated) token number. */
+ int yytoken = 0;
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+ /* Three stacks and their tools:
+ `yyss': related to states,
+ `yyvs': related to semantic values,
+ `yyls': related to locations.
+
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss = yyssa;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+ YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ YYSIZE_T yystacksize = YYINITDEPTH;
+
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+
+ yyssp = yyss;
+ yyvsp = yyvs;
+
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+# else
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss);
+ YYSTACK_RELOCATE (yyvs);
+
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+ look-ahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to look-ahead token. */
+ yyn = yypact[yystate];
+ if (yyn == YYPACT_NINF)
+ goto yydefault;
+
+ /* Not known => get a look-ahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ if (yychar <= YYEOF)
+ {
+ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yyn == 0 || yyn == YYTABLE_NINF)
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the look-ahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token unless it is eof. */
+ if (yychar != YYEOF)
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ *++yyvsp = yylval;
+
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+ case 4:
+#line 128 "deffilep.y"
+ { def_image_name ((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].number), 0); }
+ break;
+
+ case 5:
+#line 129 "deffilep.y"
+ { def_image_name ((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].number), 1); }
+ break;
+
+ case 6:
+#line 130 "deffilep.y"
+ { def_description ((yyvsp[(2) - (2)].id));}
+ break;
+
+ case 7:
+#line 131 "deffilep.y"
+ { def_stacksize ((yyvsp[(2) - (3)].number), (yyvsp[(3) - (3)].number));}
+ break;
+
+ case 8:
+#line 132 "deffilep.y"
+ { def_heapsize ((yyvsp[(2) - (3)].number), (yyvsp[(3) - (3)].number));}
+ break;
+
+ case 9:
+#line 133 "deffilep.y"
+ { def_section ("CODE", (yyvsp[(2) - (2)].number));}
+ break;
+
+ case 10:
+#line 134 "deffilep.y"
+ { def_section ("DATA", (yyvsp[(2) - (2)].number));}
+ break;
+
+ case 14:
+#line 138 "deffilep.y"
+ { def_version ((yyvsp[(2) - (2)].number), 0);}
+ break;
+
+ case 15:
+#line 139 "deffilep.y"
+ { def_version ((yyvsp[(2) - (4)].number), (yyvsp[(4) - (4)].number));}
+ break;
+
+ case 16:
+#line 140 "deffilep.y"
+ { def_directive ((yyvsp[(2) - (2)].id));}
+ break;
+
+ case 17:
+#line 141 "deffilep.y"
+ { def_aligncomm ((yyvsp[(2) - (4)].id), (yyvsp[(4) - (4)].number));}
+ break;
+
+ case 21:
+#line 156 "deffilep.y"
+ { def_exports ((yyvsp[(1) - (5)].id), (yyvsp[(2) - (5)].id), (yyvsp[(3) - (5)].number), (yyvsp[(5) - (5)].number)); }
+ break;
+
+ case 22:
+#line 162 "deffilep.y"
+ { (yyval.number) = (yyvsp[(1) - (3)].number) | (yyvsp[(3) - (3)].number); }
+ break;
+
+ case 23:
+#line 163 "deffilep.y"
+ { (yyval.number) = 0; }
+ break;
+
+ case 24:
+#line 166 "deffilep.y"
+ { (yyval.number) = 1; }
+ break;
+
+ case 25:
+#line 167 "deffilep.y"
+ { (yyval.number) = 1; }
+ break;
+
+ case 26:
+#line 168 "deffilep.y"
+ { (yyval.number) = 2; }
+ break;
+
+ case 27:
+#line 169 "deffilep.y"
+ { (yyval.number) = 2; }
+ break;
+
+ case 28:
+#line 170 "deffilep.y"
+ { (yyval.number) = 4; }
+ break;
+
+ case 29:
+#line 171 "deffilep.y"
+ { (yyval.number) = 4; }
+ break;
+
+ case 30:
+#line 172 "deffilep.y"
+ { (yyval.number) = 8; }
+ break;
+
+ case 31:
+#line 173 "deffilep.y"
+ { (yyval.number) = 8; }
+ break;
+
+ case 34:
+#line 181 "deffilep.y"
+ { def_import ((yyvsp[(1) - (7)].id), (yyvsp[(3) - (7)].id), (yyvsp[(5) - (7)].id), (yyvsp[(7) - (7)].id), -1); }
+ break;
+
+ case 35:
+#line 182 "deffilep.y"
+ { def_import ((yyvsp[(1) - (7)].id), (yyvsp[(3) - (7)].id), (yyvsp[(5) - (7)].id), 0, (yyvsp[(7) - (7)].number)); }
+ break;
+
+ case 36:
+#line 183 "deffilep.y"
+ { def_import ((yyvsp[(1) - (5)].id), (yyvsp[(3) - (5)].id), 0, (yyvsp[(5) - (5)].id), -1); }
+ break;
+
+ case 37:
+#line 184 "deffilep.y"
+ { def_import ((yyvsp[(1) - (5)].id), (yyvsp[(3) - (5)].id), 0, 0, (yyvsp[(5) - (5)].number)); }
+ break;
+
+ case 38:
+#line 185 "deffilep.y"
+ { def_import ( 0, (yyvsp[(1) - (5)].id), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].id), -1); }
+ break;
+
+ case 39:
+#line 186 "deffilep.y"
+ { def_import ( 0, (yyvsp[(1) - (3)].id), 0, (yyvsp[(3) - (3)].id), -1); }
+ break;
+
+ case 42:
+#line 195 "deffilep.y"
+ { def_section ((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].number));}
+ break;
+
+ case 43:
+#line 196 "deffilep.y"
+ { def_section_alt ((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));}
+ break;
+
+ case 44:
+#line 200 "deffilep.y"
+ { (yyval.number) = (yyvsp[(1) - (3)].number) | (yyvsp[(3) - (3)].number); }
+ break;
+
+ case 45:
+#line 201 "deffilep.y"
+ { (yyval.number) = (yyvsp[(1) - (1)].number); }
+ break;
+
+ case 48:
+#line 208 "deffilep.y"
+ { (yyval.number)=(yyvsp[(2) - (2)].number);}
+ break;
+
+ case 49:
+#line 209 "deffilep.y"
+ { (yyval.number)=-1;}
+ break;
+
+ case 50:
+#line 213 "deffilep.y"
+ { (yyval.number) = 1;}
+ break;
+
+ case 51:
+#line 214 "deffilep.y"
+ { (yyval.number) = 2;}
+ break;
+
+ case 52:
+#line 215 "deffilep.y"
+ { (yyval.number)=4;}
+ break;
+
+ case 53:
+#line 216 "deffilep.y"
+ { (yyval.number)=8;}
+ break;
+
+ case 54:
+#line 219 "deffilep.y"
+ { (yyval.id) = (yyvsp[(1) - (1)].id); }
+ break;
+
+ case 55:
+#line 221 "deffilep.y"
+ {
+ char *name = xmalloc (strlen ((yyvsp[(1) - (3)].id)) + 1 + strlen ((yyvsp[(3) - (3)].id)) + 1);
+ sprintf (name, "%s.%s", (yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].id));
+ (yyval.id) = name;
+ }
+ break;
+
+ case 56:
+#line 226 "deffilep.y"
+ { (yyval.id) = ""; }
+ break;
+
+ case 57:
+#line 230 "deffilep.y"
+ { (yyval.number) = (yyvsp[(2) - (2)].number);}
+ break;
+
+ case 58:
+#line 231 "deffilep.y"
+ { (yyval.number) = -1;}
+ break;
+
+ case 59:
+#line 235 "deffilep.y"
+ { (yyval.id) = (yyvsp[(2) - (2)].id); }
+ break;
+
+ case 60:
+#line 236 "deffilep.y"
+ { (yyval.id) = 0; }
+ break;
+
+ case 61:
+#line 239 "deffilep.y"
+ { (yyval.number) = (yyvsp[(3) - (3)].number);}
+ break;
+
+ case 62:
+#line 240 "deffilep.y"
+ { (yyval.number) = -1;}
+ break;
+
+ case 63:
+#line 243 "deffilep.y"
+ { (yyval.id) = (yyvsp[(1) - (1)].id); }
+ break;
+
+ case 64:
+#line 245 "deffilep.y"
+ {
+ char *name = xmalloc (strlen ((yyvsp[(1) - (3)].id)) + 1 + strlen ((yyvsp[(3) - (3)].id)) + 1);
+ sprintf (name, "%s.%s", (yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].id));
+ (yyval.id) = name;
+ }
+ break;
+
+ case 65:
+#line 252 "deffilep.y"
+ { (yyval.id) = (yyvsp[(1) - (1)].id); }
+ break;
+
+ case 66:
+#line 254 "deffilep.y"
+ {
+ char *id = xmalloc (strlen ((yyvsp[(1) - (4)].id)) + 1 + strlen ((yyvsp[(3) - (4)].digits)) + strlen ((yyvsp[(4) - (4)].id)) + 1);
+ sprintf (id, "%s.%s%s", (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].digits), (yyvsp[(4) - (4)].id));
+ (yyval.id) = id;
+ }
+ break;
+
+ case 67:
+#line 261 "deffilep.y"
+ { (yyval.digits) = (yyvsp[(1) - (1)].digits); }
+ break;
+
+ case 68:
+#line 262 "deffilep.y"
+ { (yyval.digits) = ""; }
+ break;
+
+ case 69:
+#line 265 "deffilep.y"
+ { (yyval.id) = (yyvsp[(1) - (1)].id); }
+ break;
+
+ case 70:
+#line 266 "deffilep.y"
+ { (yyval.id) = ""; }
+ break;
+
+ case 71:
+#line 269 "deffilep.y"
+ { (yyval.number) = strtoul ((yyvsp[(1) - (1)].digits), 0, 0); }
+ break;
+
+
+/* Line 1267 of yacc.c. */
+#line 1862 "deffilep.c"
+ default: break;
+ }
+ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ yyerror (YY_("syntax error"));
+#else
+ {
+ YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+ if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+ {
+ YYSIZE_T yyalloc = 2 * yysize;
+ if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+ yyalloc = YYSTACK_ALLOC_MAXIMUM;
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+ if (yymsg)
+ yymsg_alloc = yyalloc;
+ else
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ }
+ }
+
+ if (0 < yysize && yysize <= yymsg_alloc)
+ {
+ (void) yysyntax_error (yymsg, yystate, yychar);
+ yyerror (yymsg);
+ }
+ else
+ {
+ yyerror (YY_("syntax error"));
+ if (yysize != 0)
+ goto yyexhaustedlab;
+ }
+ }
+#endif
+ }
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse look-ahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse look-ahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+
+ /* Pacify compilers like GCC when the user code never invokes
+ YYERROR and the label yyerrorlab therefore never appears in user
+ code. */
+ if (/*CONSTCOND*/ 0)
+ goto yyerrorlab;
+
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (yyn != YYPACT_NINF)
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ yystos[yystate], yyvsp);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ *++yyvsp = yylval;
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+yyreturn:
+ if (yychar != YYEOF && yychar != YYEMPTY)
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
+ {
+ yydestruct ("Cleanup: popping",
+ yystos[*yyssp], yyvsp);
+ YYPOPSTACK (1);
+ }
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+#endif
+ /* Make sure YYID is used. */
+ return YYID (yyresult);
+}
+
+
+#line 271 "deffilep.y"
+
+
+/*****************************************************************************
+ API
+ *****************************************************************************/
+
+static FILE *the_file;
+static const char *def_filename;
+static int linenumber;
+static def_file *def;
+static int saw_newline;
+
+struct directive
+ {
+ struct directive *next;
+ char *name;
+ int len;
+ };
+
+static struct directive *directives = 0;
+
+def_file *
+def_file_empty (void)
+{
+ def_file *rv = xmalloc (sizeof (def_file));
+ memset (rv, 0, sizeof (def_file));
+ rv->is_dll = -1;
+ rv->base_address = (bfd_vma) -1;
+ rv->stack_reserve = rv->stack_commit = -1;
+ rv->heap_reserve = rv->heap_commit = -1;
+ rv->version_major = rv->version_minor = -1;
+ return rv;
+}
+
+def_file *
+def_file_parse (const char *filename, def_file *add_to)
+{
+ struct directive *d;
+
+ the_file = fopen (filename, "r");
+ def_filename = filename;
+ linenumber = 1;
+ if (!the_file)
+ {
+ perror (filename);
+ return 0;
+ }
+ if (add_to)
+ {
+ def = add_to;
+ }
+ else
+ {
+ def = def_file_empty ();
+ }
+
+ saw_newline = 1;
+ if (def_parse ())
+ {
+ def_file_free (def);
+ fclose (the_file);
+ return 0;
+ }
+
+ fclose (the_file);
+
+ for (d = directives; d; d = d->next)
+ {
+#if TRACE
+ printf ("Adding directive %08x `%s'\n", d->name, d->name);
+#endif
+ def_file_add_directive (def, d->name, d->len);
+ }
+
+ return def;
+}
+
+void
+def_file_free (def_file *def)
+{
+ int i;
+
+ if (!def)
+ return;
+ if (def->name)
+ free (def->name);
+ if (def->description)
+ free (def->description);
+
+ if (def->section_defs)
+ {
+ for (i = 0; i < def->num_section_defs; i++)
+ {
+ if (def->section_defs[i].name)
+ free (def->section_defs[i].name);
+ if (def->section_defs[i].class)
+ free (def->section_defs[i].class);
+ }
+ free (def->section_defs);
+ }
+
+ if (def->exports)
+ {
+ for (i = 0; i < def->num_exports; i++)
+ {
+ if (def->exports[i].internal_name
+ && def->exports[i].internal_name != def->exports[i].name)
+ free (def->exports[i].internal_name);
+ if (def->exports[i].name)
+ free (def->exports[i].name);
+ }
+ free (def->exports);
+ }
+
+ if (def->imports)
+ {
+ for (i = 0; i < def->num_imports; i++)
+ {
+ if (def->imports[i].internal_name
+ && def->imports[i].internal_name != def->imports[i].name)
+ free (def->imports[i].internal_name);
+ if (def->imports[i].name)
+ free (def->imports[i].name);
+ }
+ free (def->imports);
+ }
+
+ while (def->modules)
+ {
+ def_file_module *m = def->modules;
+ def->modules = def->modules->next;
+ free (m);
+ }
+
+ while (def->aligncomms)
+ {
+ def_file_aligncomm *c = def->aligncomms;
+ def->aligncomms = def->aligncomms->next;
+ free (c->symbol_name);
+ free (c);
+ }
+
+ free (def);
+}
+
+#ifdef DEF_FILE_PRINT
+void
+def_file_print (FILE *file, def_file *def)
+{
+ int i;
+
+ fprintf (file, ">>>> def_file at 0x%08x\n", def);
+ if (def->name)
+ fprintf (file, " name: %s\n", def->name ? def->name : "(unspecified)");
+ if (def->is_dll != -1)
+ fprintf (file, " is dll: %s\n", def->is_dll ? "yes" : "no");
+ if (def->base_address != (bfd_vma) -1)
+ fprintf (file, " base address: 0x%08x\n", def->base_address);
+ if (def->description)
+ fprintf (file, " description: `%s'\n", def->description);
+ if (def->stack_reserve != -1)
+ fprintf (file, " stack reserve: 0x%08x\n", def->stack_reserve);
+ if (def->stack_commit != -1)
+ fprintf (file, " stack commit: 0x%08x\n", def->stack_commit);
+ if (def->heap_reserve != -1)
+ fprintf (file, " heap reserve: 0x%08x\n", def->heap_reserve);
+ if (def->heap_commit != -1)
+ fprintf (file, " heap commit: 0x%08x\n", def->heap_commit);
+
+ if (def->num_section_defs > 0)
+ {
+ fprintf (file, " section defs:\n");
+
+ for (i = 0; i < def->num_section_defs; i++)
+ {
+ fprintf (file, " name: `%s', class: `%s', flags:",
+ def->section_defs[i].name, def->section_defs[i].class);
+ if (def->section_defs[i].flag_read)
+ fprintf (file, " R");
+ if (def->section_defs[i].flag_write)
+ fprintf (file, " W");
+ if (def->section_defs[i].flag_execute)
+ fprintf (file, " X");
+ if (def->section_defs[i].flag_shared)
+ fprintf (file, " S");
+ fprintf (file, "\n");
+ }
+ }
+
+ if (def->num_exports > 0)
+ {
+ fprintf (file, " exports:\n");
+
+ for (i = 0; i < def->num_exports; i++)
+ {
+ fprintf (file, " name: `%s', int: `%s', ordinal: %d, flags:",
+ def->exports[i].name, def->exports[i].internal_name,
+ def->exports[i].ordinal);
+ if (def->exports[i].flag_private)
+ fprintf (file, " P");
+ if (def->exports[i].flag_constant)
+ fprintf (file, " C");
+ if (def->exports[i].flag_noname)
+ fprintf (file, " N");
+ if (def->exports[i].flag_data)
+ fprintf (file, " D");
+ fprintf (file, "\n");
+ }
+ }
+
+ if (def->num_imports > 0)
+ {
+ fprintf (file, " imports:\n");
+
+ for (i = 0; i < def->num_imports; i++)
+ {
+ fprintf (file, " int: %s, from: `%s', name: `%s', ordinal: %d\n",
+ def->imports[i].internal_name,
+ def->imports[i].module,
+ def->imports[i].name,
+ def->imports[i].ordinal);
+ }
+ }
+
+ if (def->version_major != -1)
+ fprintf (file, " version: %d.%d\n", def->version_major, def->version_minor);
+
+ fprintf (file, "<<<< def_file at 0x%08x\n", def);
+}
+#endif
+
+def_file_export *
+def_file_add_export (def_file *def,
+ const char *external_name,
+ const char *internal_name,
+ int ordinal)
+{
+ def_file_export *e;
+ int max_exports = ROUND_UP(def->num_exports, 32);
+
+ if (def->num_exports >= max_exports)
+ {
+ max_exports = ROUND_UP(def->num_exports + 1, 32);
+ if (def->exports)
+ def->exports = xrealloc (def->exports,
+ max_exports * sizeof (def_file_export));
+ else
+ def->exports = xmalloc (max_exports * sizeof (def_file_export));
+ }
+ e = def->exports + def->num_exports;
+ memset (e, 0, sizeof (def_file_export));
+ if (internal_name && !external_name)
+ external_name = internal_name;
+ if (external_name && !internal_name)
+ internal_name = external_name;
+ e->name = xstrdup (external_name);
+ e->internal_name = xstrdup (internal_name);
+ e->ordinal = ordinal;
+ def->num_exports++;
+ return e;
+}
+
+def_file_module *
+def_get_module (def_file *def, const char *name)
+{
+ def_file_module *s;
+
+ for (s = def->modules; s; s = s->next)
+ if (strcmp (s->name, name) == 0)
+ return s;
+
+ return NULL;
+}
+
+static def_file_module *
+def_stash_module (def_file *def, const char *name)
+{
+ def_file_module *s;
+
+ if ((s = def_get_module (def, name)) != NULL)
+ return s;
+ s = xmalloc (sizeof (def_file_module) + strlen (name));
+ s->next = def->modules;
+ def->modules = s;
+ s->user_data = 0;
+ strcpy (s->name, name);
+ return s;
+}
+
+def_file_import *
+def_file_add_import (def_file *def,
+ const char *name,
+ const char *module,
+ int ordinal,
+ const char *internal_name)
+{
+ def_file_import *i;
+ int max_imports = ROUND_UP (def->num_imports, 16);
+
+ if (def->num_imports >= max_imports)
+ {
+ max_imports = ROUND_UP (def->num_imports+1, 16);
+
+ if (def->imports)
+ def->imports = xrealloc (def->imports,
+ max_imports * sizeof (def_file_import));
+ else
+ def->imports = xmalloc (max_imports * sizeof (def_file_import));
+ }
+ i = def->imports + def->num_imports;
+ memset (i, 0, sizeof (def_file_import));
+ if (name)
+ i->name = xstrdup (name);
+ if (module)
+ i->module = def_stash_module (def, module);
+ i->ordinal = ordinal;
+ if (internal_name)
+ i->internal_name = xstrdup (internal_name);
+ else
+ i->internal_name = i->name;
+ def->num_imports++;
+
+ return i;
+}
+
+struct
+{
+ char *param;
+ int token;
+}
+diropts[] =
+{
+ { "-heap", HEAPSIZE },
+ { "-stack", STACKSIZE_K },
+ { "-attr", SECTIONS },
+ { "-export", EXPORTS },
+ { "-aligncomm", ALIGNCOMM },
+ { 0, 0 }
+};
+
+void
+def_file_add_directive (def_file *my_def, const char *param, int len)
+{
+ def_file *save_def = def;
+ const char *pend = param + len;
+ char * tend = (char *) param;
+ int i;
+
+ def = my_def;
+
+ while (param < pend)
+ {
+ while (param < pend
+ && (ISSPACE (*param) || *param == '\n' || *param == 0))
+ param++;
+
+ if (param == pend)
+ break;
+
+ /* Scan forward until we encounter any of:
+ - the end of the buffer
+ - the start of a new option
+ - a newline seperating options
+ - a NUL seperating options. */
+ for (tend = (char *) (param + 1);
+ (tend < pend
+ && !(ISSPACE (tend[-1]) && *tend == '-')
+ && *tend != '\n' && *tend != 0);
+ tend++)
+ ;
+
+ for (i = 0; diropts[i].param; i++)
+ {
+ int len = strlen (diropts[i].param);
+
+ if (tend - param >= len
+ && strncmp (param, diropts[i].param, len) == 0
+ && (param[len] == ':' || param[len] == ' '))
+ {
+ lex_parse_string_end = tend;
+ lex_parse_string = param + len + 1;
+ lex_forced_token = diropts[i].token;
+ saw_newline = 0;
+ if (def_parse ())
+ continue;
+ break;
+ }
+ }
+
+ if (!diropts[i].param)
+ {
+ char saved;
+
+ saved = * tend;
+ * tend = 0;
+ /* xgettext:c-format */
+ einfo (_("Warning: .drectve `%s' unrecognized\n"), param);
+ * tend = saved;
+ }
+
+ lex_parse_string = 0;
+ param = tend;
+ }
+
+ def = save_def;
+}
+
+/* Parser Callbacks. */
+
+static void
+def_image_name (const char *name, int base, int is_dll)
+{
+ /* If a LIBRARY or NAME statement is specified without a name, there is nothing
+ to do here. We retain the output filename specified on command line. */
+ if (*name)
+ {
+ const char* image_name = lbasename (name);
+ if (image_name != name)
+ einfo ("%s:%d: Warning: path components stripped from %s, '%s'\n",
+ def_filename, linenumber, is_dll ? "LIBRARY" : "NAME",
+ name);
+ if (def->name)
+ free (def->name);
+ /* Append the default suffix, if none specified. */
+ if (strchr (image_name, '.') == 0)
+ {
+ const char * suffix = is_dll ? ".dll" : ".exe";
+
+ def->name = xmalloc (strlen (image_name) + strlen (suffix) + 1);
+ sprintf (def->name, "%s%s", image_name, suffix);
+ }
+ else
+ def->name = xstrdup (image_name);
+ }
+
+ /* Honor a BASE address statement, even if LIBRARY string is empty. */
+ def->base_address = base;
+ def->is_dll = is_dll;
+}
+
+static void
+def_description (const char *text)
+{
+ int len = def->description ? strlen (def->description) : 0;
+
+ len += strlen (text) + 1;
+ if (def->description)
+ {
+ def->description = xrealloc (def->description, len);
+ strcat (def->description, text);
+ }
+ else
+ {
+ def->description = xmalloc (len);
+ strcpy (def->description, text);
+ }
+}
+
+static void
+def_stacksize (int reserve, int commit)
+{
+ def->stack_reserve = reserve;
+ def->stack_commit = commit;
+}
+
+static void
+def_heapsize (int reserve, int commit)
+{
+ def->heap_reserve = reserve;
+ def->heap_commit = commit;
+}
+
+static void
+def_section (const char *name, int attr)
+{
+ def_file_section *s;
+ int max_sections = ROUND_UP (def->num_section_defs, 4);
+
+ if (def->num_section_defs >= max_sections)
+ {
+ max_sections = ROUND_UP (def->num_section_defs+1, 4);
+
+ if (def->section_defs)
+ def->section_defs = xrealloc (def->section_defs,
+ max_sections * sizeof (def_file_import));
+ else
+ def->section_defs = xmalloc (max_sections * sizeof (def_file_import));
+ }
+ s = def->section_defs + def->num_section_defs;
+ memset (s, 0, sizeof (def_file_section));
+ s->name = xstrdup (name);
+ if (attr & 1)
+ s->flag_read = 1;
+ if (attr & 2)
+ s->flag_write = 1;
+ if (attr & 4)
+ s->flag_execute = 1;
+ if (attr & 8)
+ s->flag_shared = 1;
+
+ def->num_section_defs++;
+}
+
+static void
+def_section_alt (const char *name, const char *attr)
+{
+ int aval = 0;
+
+ for (; *attr; attr++)
+ {
+ switch (*attr)
+ {
+ case 'R':
+ case 'r':
+ aval |= 1;
+ break;
+ case 'W':
+ case 'w':
+ aval |= 2;
+ break;
+ case 'X':
+ case 'x':
+ aval |= 4;
+ break;
+ case 'S':
+ case 's':
+ aval |= 8;
+ break;
+ }
+ }
+ def_section (name, aval);
+}
+
+static void
+def_exports (const char *external_name,
+ const char *internal_name,
+ int ordinal,
+ int flags)
+{
+ def_file_export *dfe;
+
+ if (!internal_name && external_name)
+ internal_name = external_name;
+#if TRACE
+ printf ("def_exports, ext=%s int=%s\n", external_name, internal_name);
+#endif
+
+ dfe = def_file_add_export (def, external_name, internal_name, ordinal);
+ if (flags & 1)
+ dfe->flag_noname = 1;
+ if (flags & 2)
+ dfe->flag_constant = 1;
+ if (flags & 4)
+ dfe->flag_data = 1;
+ if (flags & 8)
+ dfe->flag_private = 1;
+}
+
+static void
+def_import (const char *internal_name,
+ const char *module,
+ const char *dllext,
+ const char *name,
+ int ordinal)
+{
+ char *buf = 0;
+ const char *ext = dllext ? dllext : "dll";
+
+ buf = xmalloc (strlen (module) + strlen (ext) + 2);
+ sprintf (buf, "%s.%s", module, ext);
+ module = buf;
+
+ def_file_add_import (def, name, module, ordinal, internal_name);
+ if (buf)
+ free (buf);
+}
+
+static void
+def_version (int major, int minor)
+{
+ def->version_major = major;
+ def->version_minor = minor;
+}
+
+static void
+def_directive (char *str)
+{
+ struct directive *d = xmalloc (sizeof (struct directive));
+
+ d->next = directives;
+ directives = d;
+ d->name = xstrdup (str);
+ d->len = strlen (str);
+}
+
+static void
+def_aligncomm (char *str, int align)
+{
+ def_file_aligncomm *c = xmalloc (sizeof (def_file_aligncomm));
+
+ c->symbol_name = xstrdup (str);
+ c->alignment = (unsigned int) align;
+
+ c->next = def->aligncomms;
+ def->aligncomms = c;
+}
+
+static int
+def_error (const char *err)
+{
+ einfo ("%P: %s:%d: %s\n",
+ def_filename ? def_filename : "<unknown-file>", linenumber, err);
+ return 0;
+}
+
+
+/* Lexical Scanner. */
+
+#undef TRACE
+#define TRACE 0
+
+/* Never freed, but always reused as needed, so no real leak. */
+static char *buffer = 0;
+static int buflen = 0;
+static int bufptr = 0;
+
+static void
+put_buf (char c)
+{
+ if (bufptr == buflen)
+ {
+ buflen += 50; /* overly reasonable, eh? */
+ if (buffer)
+ buffer = xrealloc (buffer, buflen + 1);
+ else
+ buffer = xmalloc (buflen + 1);
+ }
+ buffer[bufptr++] = c;
+ buffer[bufptr] = 0; /* not optimal, but very convenient. */
+}
+
+static struct
+{
+ char *name;
+ int token;
+}
+tokens[] =
+{
+ { "BASE", BASE },
+ { "CODE", CODE },
+ { "CONSTANT", CONSTANTU },
+ { "constant", CONSTANTL },
+ { "DATA", DATAU },
+ { "data", DATAL },
+ { "DESCRIPTION", DESCRIPTION },
+ { "DIRECTIVE", DIRECTIVE },
+ { "EXECUTE", EXECUTE },
+ { "EXPORTS", EXPORTS },
+ { "HEAPSIZE", HEAPSIZE },
+ { "IMPORTS", IMPORTS },
+ { "LIBRARY", LIBRARY },
+ { "NAME", NAME },
+ { "NONAME", NONAMEU },
+ { "noname", NONAMEL },
+ { "PRIVATE", PRIVATEU },
+ { "private", PRIVATEL },
+ { "READ", READ },
+ { "SECTIONS", SECTIONS },
+ { "SEGMENTS", SECTIONS },
+ { "SHARED", SHARED },
+ { "STACKSIZE", STACKSIZE_K },
+ { "VERSION", VERSIONK },
+ { "WRITE", WRITE },
+ { 0, 0 }
+};
+
+static int
+def_getc (void)
+{
+ int rv;
+
+ if (lex_parse_string)
+ {
+ if (lex_parse_string >= lex_parse_string_end)
+ rv = EOF;
+ else
+ rv = *lex_parse_string++;
+ }
+ else
+ {
+ rv = fgetc (the_file);
+ }
+ if (rv == '\n')
+ saw_newline = 1;
+ return rv;
+}
+
+static int
+def_ungetc (int c)
+{
+ if (lex_parse_string)
+ {
+ lex_parse_string--;
+ return c;
+ }
+ else
+ return ungetc (c, the_file);
+}
+
+static int
+def_lex (void)
+{
+ int c, i, q;
+
+ if (lex_forced_token)
+ {
+ i = lex_forced_token;
+ lex_forced_token = 0;
+#if TRACE
+ printf ("lex: forcing token %d\n", i);
+#endif
+ return i;
+ }
+
+ c = def_getc ();
+
+ /* Trim leading whitespace. */
+ while (c != EOF && (c == ' ' || c == '\t') && saw_newline)
+ c = def_getc ();
+
+ if (c == EOF)
+ {
+#if TRACE
+ printf ("lex: EOF\n");
+#endif
+ return 0;
+ }
+
+ if (saw_newline && c == ';')
+ {
+ do
+ {
+ c = def_getc ();
+ }
+ while (c != EOF && c != '\n');
+ if (c == '\n')
+ return def_lex ();
+ return 0;
+ }
+
+ /* Must be something else. */
+ saw_newline = 0;
+
+ if (ISDIGIT (c))
+ {
+ bufptr = 0;
+ while (c != EOF && (ISXDIGIT (c) || (c == 'x')))
+ {
+ put_buf (c);
+ c = def_getc ();
+ }
+ if (c != EOF)
+ def_ungetc (c);
+ yylval.digits = xstrdup (buffer);
+#if TRACE
+ printf ("lex: `%s' returns DIGITS\n", buffer);
+#endif
+ return DIGITS;
+ }
+
+ if (ISALPHA (c) || strchr ("$:-_?@", c))
+ {
+ bufptr = 0;
+ q = c;
+ put_buf (c);
+ c = def_getc ();
+
+ if (q == '@')
+ {
+ if (ISBLANK (c) ) /* '@' followed by whitespace. */
+ return (q);
+ else if (ISDIGIT (c)) /* '@' followed by digit. */
+ {
+ def_ungetc (c);
+ return (q);
+ }
+#if TRACE
+ printf ("lex: @ returns itself\n");
+#endif
+ }
+
+ while (c != EOF && (ISALNUM (c) || strchr ("$:-_?/@", c)))
+ {
+ put_buf (c);
+ c = def_getc ();
+ }
+ if (c != EOF)
+ def_ungetc (c);
+ if (ISALPHA (q)) /* Check for tokens. */
+ {
+ for (i = 0; tokens[i].name; i++)
+ if (strcmp (tokens[i].name, buffer) == 0)
+ {
+#if TRACE
+ printf ("lex: `%s' is a string token\n", buffer);
+#endif
+ return tokens[i].token;
+ }
+ }
+#if TRACE
+ printf ("lex: `%s' returns ID\n", buffer);
+#endif
+ yylval.id = xstrdup (buffer);
+ return ID;
+ }
+
+ if (c == '\'' || c == '"')
+ {
+ q = c;
+ c = def_getc ();
+ bufptr = 0;
+
+ while (c != EOF && c != q)
+ {
+ put_buf (c);
+ c = def_getc ();
+ }
+ yylval.id = xstrdup (buffer);
+#if TRACE
+ printf ("lex: `%s' returns ID\n", buffer);
+#endif
+ return ID;
+ }
+
+ if (c == '=' || c == '.' || c == ',')
+ {
+#if TRACE
+ printf ("lex: `%c' returns itself\n", c);
+#endif
+ return c;
+ }
+
+ if (c == '\n')
+ {
+ linenumber++;
+ saw_newline = 1;
+ }
+
+ /*printf ("lex: 0x%02x ignored\n", c); */
+ return def_lex ();
+}
+
diff --git a/ld/deffilep.h b/ld/deffilep.h
new file mode 100644
index 0000000..036e41a
--- /dev/null
+++ b/ld/deffilep.h
@@ -0,0 +1,120 @@
+/* A Bison parser, made by GNU Bison 2.3. */
+
+/* Skeleton interface for Bison's Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ NAME = 258,
+ LIBRARY = 259,
+ DESCRIPTION = 260,
+ STACKSIZE_K = 261,
+ HEAPSIZE = 262,
+ CODE = 263,
+ DATAU = 264,
+ DATAL = 265,
+ SECTIONS = 266,
+ EXPORTS = 267,
+ IMPORTS = 268,
+ VERSIONK = 269,
+ BASE = 270,
+ CONSTANTU = 271,
+ CONSTANTL = 272,
+ PRIVATEU = 273,
+ PRIVATEL = 274,
+ ALIGNCOMM = 275,
+ READ = 276,
+ WRITE = 277,
+ EXECUTE = 278,
+ SHARED = 279,
+ NONAMEU = 280,
+ NONAMEL = 281,
+ DIRECTIVE = 282,
+ ID = 283,
+ DIGITS = 284
+ };
+#endif
+/* Tokens. */
+#define NAME 258
+#define LIBRARY 259
+#define DESCRIPTION 260
+#define STACKSIZE_K 261
+#define HEAPSIZE 262
+#define CODE 263
+#define DATAU 264
+#define DATAL 265
+#define SECTIONS 266
+#define EXPORTS 267
+#define IMPORTS 268
+#define VERSIONK 269
+#define BASE 270
+#define CONSTANTU 271
+#define CONSTANTL 272
+#define PRIVATEU 273
+#define PRIVATEL 274
+#define ALIGNCOMM 275
+#define READ 276
+#define WRITE 277
+#define EXECUTE 278
+#define SHARED 279
+#define NONAMEU 280
+#define NONAMEL 281
+#define DIRECTIVE 282
+#define ID 283
+#define DIGITS 284
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 103 "deffilep.y"
+{
+ char *id;
+ int number;
+ char *digits;
+}
+/* Line 1529 of yacc.c. */
+#line 113 "deffilep.h"
+ YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+extern YYSTYPE yylval;
+
diff --git a/ld/ld.1 b/ld/ld.1
new file mode 100644
index 0000000..6086571
--- /dev/null
+++ b/ld/ld.1
@@ -0,0 +1,2355 @@
+.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LD 1"
+.TH LD 1 "2009-10-16" "binutils-2.20" "GNU Development Tools"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+ld \- The GNU linker
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+ld [\fBoptions\fR] \fIobjfile\fR ...
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBld\fR combines a number of object and archive files, relocates
+their data and ties up symbol references. Usually the last step in
+compiling a program is to run \fBld\fR.
+.PP
+\&\fBld\fR accepts Linker Command Language files written in
+a superset of \s-1AT&T\s0's Link Editor Command Language syntax,
+to provide explicit and total control over the linking process.
+.PP
+This man page does not describe the command language; see the
+\&\fBld\fR entry in \f(CW\*(C`info\*(C'\fR for full details on the command
+language and on other aspects of the \s-1GNU\s0 linker.
+.PP
+This version of \fBld\fR uses the general purpose \s-1BFD\s0 libraries
+to operate on object files. This allows \fBld\fR to read, combine, and
+write object files in many different formats\-\-\-for example, \s-1COFF\s0 or
+\&\f(CW\*(C`a.out\*(C'\fR. Different formats may be linked together to produce any
+available kind of object file.
+.PP
+Aside from its flexibility, the \s-1GNU\s0 linker is more helpful than other
+linkers in providing diagnostic information. Many linkers abandon
+execution immediately upon encountering an error; whenever possible,
+\&\fBld\fR continues executing, allowing you to identify other errors
+(or, in some cases, to get an output file in spite of the error).
+.PP
+The \s-1GNU\s0 linker \fBld\fR is meant to cover a broad range of situations,
+and to be as compatible as possible with other linkers. As a result,
+you have many choices to control its behavior.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+The linker supports a plethora of command-line options, but in actual
+practice few of them are used in any particular context.
+For instance, a frequent use of \fBld\fR is to link standard Unix
+object files on a standard, supported Unix system. On such a system, to
+link a file \f(CW\*(C`hello.o\*(C'\fR:
+.PP
+.Vb 1
+\& ld \-o <output> /lib/crt0.o hello.o \-lc
+.Ve
+.PP
+This tells \fBld\fR to produce a file called \fIoutput\fR as the
+result of linking the file \f(CW\*(C`/lib/crt0.o\*(C'\fR with \f(CW\*(C`hello.o\*(C'\fR and
+the library \f(CW\*(C`libc.a\*(C'\fR, which will come from the standard search
+directories. (See the discussion of the \fB\-l\fR option below.)
+.PP
+Some of the command-line options to \fBld\fR may be specified at any
+point in the command line. However, options which refer to files, such
+as \fB\-l\fR or \fB\-T\fR, cause the file to be read at the point at
+which the option appears in the command line, relative to the object
+files and other file options. Repeating non-file options with a
+different argument will either have no further effect, or override prior
+occurrences (those further to the left on the command line) of that
+option. Options which may be meaningfully specified more than once are
+noted in the descriptions below.
+.PP
+Non-option arguments are object files or archives which are to be linked
+together. They may follow, precede, or be mixed in with command-line
+options, except that an object file argument may not be placed between
+an option and its argument.
+.PP
+Usually the linker is invoked with at least one object file, but you can
+specify other forms of binary input files using \fB\-l\fR, \fB\-R\fR,
+and the script command language. If \fIno\fR binary input files at all
+are specified, the linker does not produce any output, and issues the
+message \fBNo input files\fR.
+.PP
+If the linker cannot recognize the format of an object file, it will
+assume that it is a linker script. A script specified in this way
+augments the main linker script used for the link (either the default
+linker script or the one specified by using \fB\-T\fR). This feature
+permits the linker to link against a file which appears to be an object
+or an archive, but actually merely defines some symbol values, or uses
+\&\f(CW\*(C`INPUT\*(C'\fR or \f(CW\*(C`GROUP\*(C'\fR to load other objects. Specifying a
+script in this way merely augments the main linker script, with the
+extra commands placed after the main script; use the \fB\-T\fR option
+to replace the default linker script entirely, but note the effect of
+the \f(CW\*(C`INSERT\*(C'\fR command.
+.PP
+For options whose names are a single letter,
+option arguments must either follow the option letter without intervening
+whitespace, or be given as separate arguments immediately following the
+option that requires them.
+.PP
+For options whose names are multiple letters, either one dash or two can
+precede the option name; for example, \fB\-trace\-symbol\fR and
+\&\fB\-\-trace\-symbol\fR are equivalent. Note\-\-\-there is one exception to
+this rule. Multiple letter options that start with a lower case 'o' can
+only be preceded by two dashes. This is to reduce confusion with the
+\&\fB\-o\fR option. So for example \fB\-omagic\fR sets the output file
+name to \fBmagic\fR whereas \fB\-\-omagic\fR sets the \s-1NMAGIC\s0 flag on the
+output.
+.PP
+Arguments to multiple-letter options must either be separated from the
+option name by an equals sign, or be given as separate arguments
+immediately following the option that requires them. For example,
+\&\fB\-\-trace\-symbol foo\fR and \fB\-\-trace\-symbol=foo\fR are equivalent.
+Unique abbreviations of the names of multiple-letter options are
+accepted.
+.PP
+Note\-\-\-if the linker is being invoked indirectly, via a compiler driver
+(e.g. \fBgcc\fR) then all the linker command line options should be
+prefixed by \fB\-Wl,\fR (or whatever is appropriate for the particular
+compiler driver) like this:
+.PP
+.Vb 1
+\& gcc \-Wl,\-\-start\-group foo.o bar.o \-Wl,\-\-end\-group
+.Ve
+.PP
+This is important, because otherwise the compiler driver program may
+silently drop the linker options, resulting in a bad link. Confusion
+may also arise when passing options that require values through a
+driver, as the use of a space between option and argument acts as
+a separator, and causes the driver to pass only the option to the linker
+and the argument to the compiler. In this case, it is simplest to use
+the joined forms of both single\- and multiple-letter options, such as:
+.PP
+.Vb 1
+\& gcc foo.o bar.o \-Wl,\-eENTRY \-Wl,\-Map=a.map
+.Ve
+.PP
+Here is a table of the generic command line switches accepted by the \s-1GNU\s0
+linker:
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR. The options read are
+inserted in place of the original @\fIfile\fR option. If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace. A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes. Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash. The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.IP "\fB\-a\fR \fIkeyword\fR" 4
+.IX Item "-a keyword"
+This option is supported for \s-1HP/UX\s0 compatibility. The \fIkeyword\fR
+argument must be one of the strings \fBarchive\fR, \fBshared\fR, or
+\&\fBdefault\fR. \fB\-aarchive\fR is functionally equivalent to
+\&\fB\-Bstatic\fR, and the other two keywords are functionally equivalent
+to \fB\-Bdynamic\fR. This option may be used any number of times.
+.IP "\fB\-A\fR \fIarchitecture\fR" 4
+.IX Item "-A architecture"
+.PD 0
+.IP "\fB\-\-architecture=\fR\fIarchitecture\fR" 4
+.IX Item "--architecture=architecture"
+.PD
+In the current release of \fBld\fR, this option is useful only for the
+Intel 960 family of architectures. In that \fBld\fR configuration, the
+\&\fIarchitecture\fR argument identifies the particular architecture in
+the 960 family, enabling some safeguards and modifying the
+archive-library search path.
+.Sp
+Future releases of \fBld\fR may support similar functionality for
+other architecture families.
+.IP "\fB\-b\fR \fIinput-format\fR" 4
+.IX Item "-b input-format"
+.PD 0
+.IP "\fB\-\-format=\fR\fIinput-format\fR" 4
+.IX Item "--format=input-format"
+.PD
+\&\fBld\fR may be configured to support more than one kind of object
+file. If your \fBld\fR is configured this way, you can use the
+\&\fB\-b\fR option to specify the binary format for input object files
+that follow this option on the command line. Even when \fBld\fR is
+configured to support alternative object formats, you don't usually need
+to specify this, as \fBld\fR should be configured to expect as a
+default input format the most usual format on each machine.
+\&\fIinput-format\fR is a text string, the name of a particular format
+supported by the \s-1BFD\s0 libraries. (You can list the available binary
+formats with \fBobjdump \-i\fR.)
+.Sp
+You may want to use this option if you are linking files with an unusual
+binary format. You can also use \fB\-b\fR to switch formats explicitly (when
+linking object files of different formats), by including
+\&\fB\-b\fR \fIinput-format\fR before each group of object files in a
+particular format.
+.Sp
+The default format is taken from the environment variable
+\&\f(CW\*(C`GNUTARGET\*(C'\fR.
+.Sp
+You can also define the input format from a script, using the command
+\&\f(CW\*(C`TARGET\*(C'\fR;
+.IP "\fB\-c\fR \fIMRI-commandfile\fR" 4
+.IX Item "-c MRI-commandfile"
+.PD 0
+.IP "\fB\-\-mri\-script=\fR\fIMRI-commandfile\fR" 4
+.IX Item "--mri-script=MRI-commandfile"
+.PD
+For compatibility with linkers produced by \s-1MRI\s0, \fBld\fR accepts script
+files written in an alternate, restricted command language, described in
+the \s-1MRI\s0 Compatible Script Files section of \s-1GNU\s0 ld documentation.
+Introduce \s-1MRI\s0 script files with
+the option \fB\-c\fR; use the \fB\-T\fR option to run linker
+scripts written in the general-purpose \fBld\fR scripting language.
+If \fIMRI-cmdfile\fR does not exist, \fBld\fR looks for it in the directories
+specified by any \fB\-L\fR options.
+.IP "\fB\-d\fR" 4
+.IX Item "-d"
+.PD 0
+.IP "\fB\-dc\fR" 4
+.IX Item "-dc"
+.IP "\fB\-dp\fR" 4
+.IX Item "-dp"
+.PD
+These three options are equivalent; multiple forms are supported for
+compatibility with other linkers. They assign space to common symbols
+even if a relocatable output file is specified (with \fB\-r\fR). The
+script command \f(CW\*(C`FORCE_COMMON_ALLOCATION\*(C'\fR has the same effect.
+.IP "\fB\-e\fR \fIentry\fR" 4
+.IX Item "-e entry"
+.PD 0
+.IP "\fB\-\-entry=\fR\fIentry\fR" 4
+.IX Item "--entry=entry"
+.PD
+Use \fIentry\fR as the explicit symbol for beginning execution of your
+program, rather than the default entry point. If there is no symbol
+named \fIentry\fR, the linker will try to parse \fIentry\fR as a number,
+and use that as the entry address (the number will be interpreted in
+base 10; you may use a leading \fB0x\fR for base 16, or a leading
+\&\fB0\fR for base 8).
+.IP "\fB\-\-exclude\-libs\fR \fIlib\fR\fB,\fR\fIlib\fR\fB,...\fR" 4
+.IX Item "--exclude-libs lib,lib,..."
+Specifies a list of archive libraries from which symbols should not be automatically
+exported. The library names may be delimited by commas or colons. Specifying
+\&\f(CW\*(C`\-\-exclude\-libs ALL\*(C'\fR excludes symbols in all archive libraries from
+automatic export. This option is available only for the i386 \s-1PE\s0 targeted
+port of the linker and for \s-1ELF\s0 targeted ports. For i386 \s-1PE\s0, symbols
+explicitly listed in a .def file are still exported, regardless of this
+option. For \s-1ELF\s0 targeted ports, symbols affected by this option will
+be treated as hidden.
+.IP "\fB\-\-exclude\-modules\-for\-implib\fR \fImodule\fR\fB,\fR\fImodule\fR\fB,...\fR" 4
+.IX Item "--exclude-modules-for-implib module,module,..."
+Specifies a list of object files or archive members, from which symbols
+should not be automatically exported, but which should be copied wholesale
+into the import library being generated during the link. The module names
+may be delimited by commas or colons, and must match exactly the filenames
+used by \fBld\fR to open the files; for archive members, this is simply
+the member name, but for object files the name listed must include and
+match precisely any path used to specify the input file on the linker's
+command-line. This option is available only for the i386 \s-1PE\s0 targeted port
+of the linker. Symbols explicitly listed in a .def file are still exported,
+regardless of this option.
+.IP "\fB\-E\fR" 4
+.IX Item "-E"
+.PD 0
+.IP "\fB\-\-export\-dynamic\fR" 4
+.IX Item "--export-dynamic"
+.IP "\fB\-\-no\-export\-dynamic\fR" 4
+.IX Item "--no-export-dynamic"
+.PD
+When creating a dynamically linked executable, using the \fB\-E\fR
+option or the \fB\-\-export\-dynamic\fR option causes the linker to add
+all symbols to the dynamic symbol table. The dynamic symbol table is the
+set of symbols which are visible from dynamic objects at run time.
+.Sp
+If you do not use either of these options (or use the
+\&\fB\-\-no\-export\-dynamic\fR option to restore the default behavior), the
+dynamic symbol table will normally contain only those symbols which are
+referenced by some dynamic object mentioned in the link.
+.Sp
+If you use \f(CW\*(C`dlopen\*(C'\fR to load a dynamic object which needs to refer
+back to the symbols defined by the program, rather than some other
+dynamic object, then you will probably need to use this option when
+linking the program itself.
+.Sp
+You can also use the dynamic list to control what symbols should
+be added to the dynamic symbol table if the output format supports it.
+See the description of \fB\-\-dynamic\-list\fR.
+.Sp
+Note that this option is specific to \s-1ELF\s0 targeted ports. \s-1PE\s0 targets
+support a similar function to export all symbols from a \s-1DLL\s0 or \s-1EXE\s0; see
+the description of \fB\-\-export\-all\-symbols\fR below.
+.IP "\fB\-EB\fR" 4
+.IX Item "-EB"
+Link big-endian objects. This affects the default output format.
+.IP "\fB\-EL\fR" 4
+.IX Item "-EL"
+Link little-endian objects. This affects the default output format.
+.IP "\fB\-f\fR \fIname\fR" 4
+.IX Item "-f name"
+.PD 0
+.IP "\fB\-\-auxiliary=\fR\fIname\fR" 4
+.IX Item "--auxiliary=name"
+.PD
+When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_AUXILIARY\s0 field
+to the specified name. This tells the dynamic linker that the symbol
+table of the shared object should be used as an auxiliary filter on the
+symbol table of the shared object \fIname\fR.
+.Sp
+If you later link a program against this filter object, then, when you
+run the program, the dynamic linker will see the \s-1DT_AUXILIARY\s0 field. If
+the dynamic linker resolves any symbols from the filter object, it will
+first check whether there is a definition in the shared object
+\&\fIname\fR. If there is one, it will be used instead of the definition
+in the filter object. The shared object \fIname\fR need not exist.
+Thus the shared object \fIname\fR may be used to provide an alternative
+implementation of certain functions, perhaps for debugging or for
+machine specific performance.
+.Sp
+This option may be specified more than once. The \s-1DT_AUXILIARY\s0 entries
+will be created in the order in which they appear on the command line.
+.IP "\fB\-F\fR \fIname\fR" 4
+.IX Item "-F name"
+.PD 0
+.IP "\fB\-\-filter=\fR\fIname\fR" 4
+.IX Item "--filter=name"
+.PD
+When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_FILTER\s0 field to
+the specified name. This tells the dynamic linker that the symbol table
+of the shared object which is being created should be used as a filter
+on the symbol table of the shared object \fIname\fR.
+.Sp
+If you later link a program against this filter object, then, when you
+run the program, the dynamic linker will see the \s-1DT_FILTER\s0 field. The
+dynamic linker will resolve symbols according to the symbol table of the
+filter object as usual, but it will actually link to the definitions
+found in the shared object \fIname\fR. Thus the filter object can be
+used to select a subset of the symbols provided by the object
+\&\fIname\fR.
+.Sp
+Some older linkers used the \fB\-F\fR option throughout a compilation
+toolchain for specifying object-file format for both input and output
+object files.
+The \s-1GNU\s0 linker uses other mechanisms for this purpose: the
+\&\fB\-b\fR, \fB\-\-format\fR, \fB\-\-oformat\fR options, the
+\&\f(CW\*(C`TARGET\*(C'\fR command in linker scripts, and the \f(CW\*(C`GNUTARGET\*(C'\fR
+environment variable.
+The \s-1GNU\s0 linker will ignore the \fB\-F\fR option when not
+creating an \s-1ELF\s0 shared object.
+.IP "\fB\-fini=\fR\fIname\fR" 4
+.IX Item "-fini=name"
+When creating an \s-1ELF\s0 executable or shared object, call \s-1NAME\s0 when the
+executable or shared object is unloaded, by setting \s-1DT_FINI\s0 to the
+address of the function. By default, the linker uses \f(CW\*(C`_fini\*(C'\fR as
+the function to call.
+.IP "\fB\-g\fR" 4
+.IX Item "-g"
+Ignored. Provided for compatibility with other tools.
+.IP "\fB\-G\fR \fIvalue\fR" 4
+.IX Item "-G value"
+.PD 0
+.IP "\fB\-\-gpsize=\fR\fIvalue\fR" 4
+.IX Item "--gpsize=value"
+.PD
+Set the maximum size of objects to be optimized using the \s-1GP\s0 register to
+\&\fIsize\fR. This is only meaningful for object file formats such as
+\&\s-1MIPS\s0 \s-1ECOFF\s0 which supports putting large and small objects into different
+sections. This is ignored for other object file formats.
+.IP "\fB\-h\fR \fIname\fR" 4
+.IX Item "-h name"
+.PD 0
+.IP "\fB\-soname=\fR\fIname\fR" 4
+.IX Item "-soname=name"
+.PD
+When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_SONAME\s0 field to
+the specified name. When an executable is linked with a shared object
+which has a \s-1DT_SONAME\s0 field, then when the executable is run the dynamic
+linker will attempt to load the shared object specified by the \s-1DT_SONAME\s0
+field rather than the using the file name given to the linker.
+.IP "\fB\-i\fR" 4
+.IX Item "-i"
+Perform an incremental link (same as option \fB\-r\fR).
+.IP "\fB\-init=\fR\fIname\fR" 4
+.IX Item "-init=name"
+When creating an \s-1ELF\s0 executable or shared object, call \s-1NAME\s0 when the
+executable or shared object is loaded, by setting \s-1DT_INIT\s0 to the address
+of the function. By default, the linker uses \f(CW\*(C`_init\*(C'\fR as the
+function to call.
+.IP "\fB\-l\fR \fInamespec\fR" 4
+.IX Item "-l namespec"
+.PD 0
+.IP "\fB\-\-library=\fR\fInamespec\fR" 4
+.IX Item "--library=namespec"
+.PD
+Add the archive or object file specified by \fInamespec\fR to the
+list of files to link. This option may be used any number of times.
+If \fInamespec\fR is of the form \fI:\fIfilename\fI\fR, \fBld\fR
+will search the library path for a file called \fIfilename\fR, otherwise it
+will search the library path for a file called \fIlib\fInamespec\fI.a\fR.
+.Sp
+On systems which support shared libraries, \fBld\fR may also search for
+files other than \fIlib\fInamespec\fI.a\fR. Specifically, on \s-1ELF\s0
+and SunOS systems, \fBld\fR will search a directory for a library
+called \fIlib\fInamespec\fI.so\fR before searching for one called
+\&\fIlib\fInamespec\fI.a\fR. (By convention, a \f(CW\*(C`.so\*(C'\fR extension
+indicates a shared library.) Note that this behavior does not apply
+to \fI:\fIfilename\fI\fR, which always specifies a file called
+\&\fIfilename\fR.
+.Sp
+The linker will search an archive only once, at the location where it is
+specified on the command line. If the archive defines a symbol which
+was undefined in some object which appeared before the archive on the
+command line, the linker will include the appropriate file(s) from the
+archive. However, an undefined symbol in an object appearing later on
+the command line will not cause the linker to search the archive again.
+.Sp
+See the \fB\-(\fR option for a way to force the linker to search
+archives multiple times.
+.Sp
+You may list the same archive multiple times on the command line.
+.Sp
+This type of archive searching is standard for Unix linkers. However,
+if you are using \fBld\fR on \s-1AIX\s0, note that it is different from the
+behaviour of the \s-1AIX\s0 linker.
+.IP "\fB\-L\fR \fIsearchdir\fR" 4
+.IX Item "-L searchdir"
+.PD 0
+.IP "\fB\-\-library\-path=\fR\fIsearchdir\fR" 4
+.IX Item "--library-path=searchdir"
+.PD
+Add path \fIsearchdir\fR to the list of paths that \fBld\fR will search
+for archive libraries and \fBld\fR control scripts. You may use this
+option any number of times. The directories are searched in the order
+in which they are specified on the command line. Directories specified
+on the command line are searched before the default directories. All
+\&\fB\-L\fR options apply to all \fB\-l\fR options, regardless of the
+order in which the options appear. \fB\-L\fR options do not affect
+how \fBld\fR searches for a linker script unless \fB\-T\fR
+option is specified.
+.Sp
+If \fIsearchdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
+by the \fIsysroot prefix\fR, a path specified when the linker is configured.
+.Sp
+The default set of paths searched (without being specified with
+\&\fB\-L\fR) depends on which emulation mode \fBld\fR is using, and in
+some cases also on how it was configured.
+.Sp
+The paths can also be specified in a link script with the
+\&\f(CW\*(C`SEARCH_DIR\*(C'\fR command. Directories specified this way are searched
+at the point in which the linker script appears in the command line.
+.IP "\fB\-m\fR \fIemulation\fR" 4
+.IX Item "-m emulation"
+Emulate the \fIemulation\fR linker. You can list the available
+emulations with the \fB\-\-verbose\fR or \fB\-V\fR options.
+.Sp
+If the \fB\-m\fR option is not used, the emulation is taken from the
+\&\f(CW\*(C`LDEMULATION\*(C'\fR environment variable, if that is defined.
+.Sp
+Otherwise, the default emulation depends upon how the linker was
+configured.
+.IP "\fB\-M\fR" 4
+.IX Item "-M"
+.PD 0
+.IP "\fB\-\-print\-map\fR" 4
+.IX Item "--print-map"
+.PD
+Print a link map to the standard output. A link map provides
+information about the link, including the following:
+.RS 4
+.IP "\(bu" 4
+Where object files are mapped into memory.
+.IP "\(bu" 4
+How common symbols are allocated.
+.IP "\(bu" 4
+All archive members included in the link, with a mention of the symbol
+which caused the archive member to be brought in.
+.IP "\(bu" 4
+The values assigned to symbols.
+.Sp
+Note \- symbols whose values are computed by an expression which
+involves a reference to a previous value of the same symbol may not
+have correct result displayed in the link map. This is because the
+linker discards intermediate results and only retains the final value
+of an expression. Under such circumstances the linker will display
+the final value enclosed by square brackets. Thus for example a
+linker script containing:
+.Sp
+.Vb 3
+\& foo = 1
+\& foo = foo * 4
+\& foo = foo + 8
+.Ve
+.Sp
+will produce the following output in the link map if the \fB\-M\fR
+option is used:
+.Sp
+.Vb 3
+\& 0x00000001 foo = 0x1
+\& [0x0000000c] foo = (foo * 0x4)
+\& [0x0000000c] foo = (foo + 0x8)
+.Ve
+.Sp
+See \fBExpressions\fR for more information about expressions in linker
+scripts.
+.RE
+.RS 4
+.RE
+.IP "\fB\-n\fR" 4
+.IX Item "-n"
+.PD 0
+.IP "\fB\-\-nmagic\fR" 4
+.IX Item "--nmagic"
+.PD
+Turn off page alignment of sections, and mark the output as
+\&\f(CW\*(C`NMAGIC\*(C'\fR if possible.
+.IP "\fB\-N\fR" 4
+.IX Item "-N"
+.PD 0
+.IP "\fB\-\-omagic\fR" 4
+.IX Item "--omagic"
+.PD
+Set the text and data sections to be readable and writable. Also, do
+not page-align the data segment, and disable linking against shared
+libraries. If the output format supports Unix style magic numbers,
+mark the output as \f(CW\*(C`OMAGIC\*(C'\fR. Note: Although a writable text section
+is allowed for PE-COFF targets, it does not conform to the format
+specification published by Microsoft.
+.IP "\fB\-\-no\-omagic\fR" 4
+.IX Item "--no-omagic"
+This option negates most of the effects of the \fB\-N\fR option. It
+sets the text section to be read-only, and forces the data segment to
+be page-aligned. Note \- this option does not enable linking against
+shared libraries. Use \fB\-Bdynamic\fR for this.
+.IP "\fB\-o\fR \fIoutput\fR" 4
+.IX Item "-o output"
+.PD 0
+.IP "\fB\-\-output=\fR\fIoutput\fR" 4
+.IX Item "--output=output"
+.PD
+Use \fIoutput\fR as the name for the program produced by \fBld\fR; if this
+option is not specified, the name \fIa.out\fR is used by default. The
+script command \f(CW\*(C`OUTPUT\*(C'\fR can also specify the output file name.
+.IP "\fB\-O\fR \fIlevel\fR" 4
+.IX Item "-O level"
+If \fIlevel\fR is a numeric values greater than zero \fBld\fR optimizes
+the output. This might take significantly longer and therefore probably
+should only be enabled for the final binary. At the moment this
+option only affects \s-1ELF\s0 shared library generation. Future releases of
+the linker may make more use of this option. Also currently there is
+no difference in the linker's behaviour for different non-zero values
+of this option. Again this may change with future releases.
+.IP "\fB\-q\fR" 4
+.IX Item "-q"
+.PD 0
+.IP "\fB\-\-emit\-relocs\fR" 4
+.IX Item "--emit-relocs"
+.PD
+Leave relocation sections and contents in fully linked executables.
+Post link analysis and optimization tools may need this information in
+order to perform correct modifications of executables. This results
+in larger executables.
+.Sp
+This option is currently only supported on \s-1ELF\s0 platforms.
+.IP "\fB\-\-force\-dynamic\fR" 4
+.IX Item "--force-dynamic"
+Force the output file to have dynamic sections. This option is specific
+to VxWorks targets.
+.IP "\fB\-r\fR" 4
+.IX Item "-r"
+.PD 0
+.IP "\fB\-\-relocatable\fR" 4
+.IX Item "--relocatable"
+.PD
+Generate relocatable output\-\-\-i.e., generate an output file that can in
+turn serve as input to \fBld\fR. This is often called \fIpartial
+linking\fR. As a side effect, in environments that support standard Unix
+magic numbers, this option also sets the output file's magic number to
+\&\f(CW\*(C`OMAGIC\*(C'\fR.
+If this option is not specified, an absolute file is produced. When
+linking \*(C+ programs, this option \fIwill not\fR resolve references to
+constructors; to do that, use \fB\-Ur\fR.
+.Sp
+When an input file does not have the same format as the output file,
+partial linking is only supported if that input file does not contain any
+relocations. Different output formats can have further restrictions; for
+example some \f(CW\*(C`a.out\*(C'\fR\-based formats do not support partial linking
+with input files in other formats at all.
+.Sp
+This option does the same thing as \fB\-i\fR.
+.IP "\fB\-R\fR \fIfilename\fR" 4
+.IX Item "-R filename"
+.PD 0
+.IP "\fB\-\-just\-symbols=\fR\fIfilename\fR" 4
+.IX Item "--just-symbols=filename"
+.PD
+Read symbol names and their addresses from \fIfilename\fR, but do not
+relocate it or include it in the output. This allows your output file
+to refer symbolically to absolute locations of memory defined in other
+programs. You may use this option more than once.
+.Sp
+For compatibility with other \s-1ELF\s0 linkers, if the \fB\-R\fR option is
+followed by a directory name, rather than a file name, it is treated as
+the \fB\-rpath\fR option.
+.IP "\fB\-s\fR" 4
+.IX Item "-s"
+.PD 0
+.IP "\fB\-\-strip\-all\fR" 4
+.IX Item "--strip-all"
+.PD
+Omit all symbol information from the output file.
+.IP "\fB\-S\fR" 4
+.IX Item "-S"
+.PD 0
+.IP "\fB\-\-strip\-debug\fR" 4
+.IX Item "--strip-debug"
+.PD
+Omit debugger symbol information (but not all symbols) from the output file.
+.IP "\fB\-t\fR" 4
+.IX Item "-t"
+.PD 0
+.IP "\fB\-\-trace\fR" 4
+.IX Item "--trace"
+.PD
+Print the names of the input files as \fBld\fR processes them.
+.IP "\fB\-T\fR \fIscriptfile\fR" 4
+.IX Item "-T scriptfile"
+.PD 0
+.IP "\fB\-\-script=\fR\fIscriptfile\fR" 4
+.IX Item "--script=scriptfile"
+.PD
+Use \fIscriptfile\fR as the linker script. This script replaces
+\&\fBld\fR's default linker script (rather than adding to it), so
+\&\fIcommandfile\fR must specify everything necessary to describe the
+output file. If \fIscriptfile\fR does not exist in
+the current directory, \f(CW\*(C`ld\*(C'\fR looks for it in the directories
+specified by any preceding \fB\-L\fR options. Multiple \fB\-T\fR
+options accumulate.
+.IP "\fB\-dT\fR \fIscriptfile\fR" 4
+.IX Item "-dT scriptfile"
+.PD 0
+.IP "\fB\-\-default\-script=\fR\fIscriptfile\fR" 4
+.IX Item "--default-script=scriptfile"
+.PD
+Use \fIscriptfile\fR as the default linker script.
+.Sp
+This option is similar to the \fB\-\-script\fR option except that
+processing of the script is delayed until after the rest of the
+command line has been processed. This allows options placed after the
+\&\fB\-\-default\-script\fR option on the command line to affect the
+behaviour of the linker script, which can be important when the linker
+command line cannot be directly controlled by the user. (eg because
+the command line is being constructed by another tool, such as
+\&\fBgcc\fR).
+.IP "\fB\-u\fR \fIsymbol\fR" 4
+.IX Item "-u symbol"
+.PD 0
+.IP "\fB\-\-undefined=\fR\fIsymbol\fR" 4
+.IX Item "--undefined=symbol"
+.PD
+Force \fIsymbol\fR to be entered in the output file as an undefined
+symbol. Doing this may, for example, trigger linking of additional
+modules from standard libraries. \fB\-u\fR may be repeated with
+different option arguments to enter additional undefined symbols. This
+option is equivalent to the \f(CW\*(C`EXTERN\*(C'\fR linker script command.
+.IP "\fB\-Ur\fR" 4
+.IX Item "-Ur"
+For anything other than \*(C+ programs, this option is equivalent to
+\&\fB\-r\fR: it generates relocatable output\-\-\-i.e., an output file that can in
+turn serve as input to \fBld\fR. When linking \*(C+ programs, \fB\-Ur\fR
+\&\fIdoes\fR resolve references to constructors, unlike \fB\-r\fR.
+It does not work to use \fB\-Ur\fR on files that were themselves linked
+with \fB\-Ur\fR; once the constructor table has been built, it cannot
+be added to. Use \fB\-Ur\fR only for the last partial link, and
+\&\fB\-r\fR for the others.
+.IP "\fB\-\-unique[=\fR\fI\s-1SECTION\s0\fR\fB]\fR" 4
+.IX Item "--unique[=SECTION]"
+Creates a separate output section for every input section matching
+\&\fI\s-1SECTION\s0\fR, or if the optional wildcard \fI\s-1SECTION\s0\fR argument is
+missing, for every orphan input section. An orphan section is one not
+specifically mentioned in a linker script. You may use this option
+multiple times on the command line; It prevents the normal merging of
+input sections with the same name, overriding output section assignments
+in a linker script.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.IP "\fB\-V\fR" 4
+.IX Item "-V"
+.PD
+Display the version number for \fBld\fR. The \fB\-V\fR option also
+lists the supported emulations.
+.IP "\fB\-x\fR" 4
+.IX Item "-x"
+.PD 0
+.IP "\fB\-\-discard\-all\fR" 4
+.IX Item "--discard-all"
+.PD
+Delete all local symbols.
+.IP "\fB\-X\fR" 4
+.IX Item "-X"
+.PD 0
+.IP "\fB\-\-discard\-locals\fR" 4
+.IX Item "--discard-locals"
+.PD
+Delete all temporary local symbols. (These symbols start with
+system-specific local label prefixes, typically \fB.L\fR for \s-1ELF\s0 systems
+or \fBL\fR for traditional a.out systems.)
+.IP "\fB\-y\fR \fIsymbol\fR" 4
+.IX Item "-y symbol"
+.PD 0
+.IP "\fB\-\-trace\-symbol=\fR\fIsymbol\fR" 4
+.IX Item "--trace-symbol=symbol"
+.PD
+Print the name of each linked file in which \fIsymbol\fR appears. This
+option may be given any number of times. On many systems it is necessary
+to prepend an underscore.
+.Sp
+This option is useful when you have an undefined symbol in your link but
+don't know where the reference is coming from.
+.IP "\fB\-Y\fR \fIpath\fR" 4
+.IX Item "-Y path"
+Add \fIpath\fR to the default library search path. This option exists
+for Solaris compatibility.
+.IP "\fB\-z\fR \fIkeyword\fR" 4
+.IX Item "-z keyword"
+The recognized keywords are:
+.RS 4
+.IP "\fBcombreloc\fR" 4
+.IX Item "combreloc"
+Combines multiple reloc sections and sorts them to make dynamic symbol
+lookup caching possible.
+.IP "\fBdefs\fR" 4
+.IX Item "defs"
+Disallows undefined symbols in object files. Undefined symbols in
+shared libraries are still allowed.
+.IP "\fBexecstack\fR" 4
+.IX Item "execstack"
+Marks the object as requiring executable stack.
+.IP "\fBinitfirst\fR" 4
+.IX Item "initfirst"
+This option is only meaningful when building a shared object.
+It marks the object so that its runtime initialization will occur
+before the runtime initialization of any other objects brought into
+the process at the same time. Similarly the runtime finalization of
+the object will occur after the runtime finalization of any other
+objects.
+.IP "\fBinterpose\fR" 4
+.IX Item "interpose"
+Marks the object that its symbol table interposes before all symbols
+but the primary executable.
+.IP "\fBlazy\fR" 4
+.IX Item "lazy"
+When generating an executable or shared library, mark it to tell the
+dynamic linker to defer function call resolution to the point when
+the function is called (lazy binding), rather than at load time.
+Lazy binding is the default.
+.IP "\fBloadfltr\fR" 4
+.IX Item "loadfltr"
+Marks the object that its filters be processed immediately at
+runtime.
+.IP "\fBmuldefs\fR" 4
+.IX Item "muldefs"
+Allows multiple definitions.
+.IP "\fBnocombreloc\fR" 4
+.IX Item "nocombreloc"
+Disables multiple reloc sections combining.
+.IP "\fBnocopyreloc\fR" 4
+.IX Item "nocopyreloc"
+Disables production of copy relocs.
+.IP "\fBnodefaultlib\fR" 4
+.IX Item "nodefaultlib"
+Marks the object that the search for dependencies of this object will
+ignore any default library search paths.
+.IP "\fBnodelete\fR" 4
+.IX Item "nodelete"
+Marks the object shouldn't be unloaded at runtime.
+.IP "\fBnodlopen\fR" 4
+.IX Item "nodlopen"
+Marks the object not available to \f(CW\*(C`dlopen\*(C'\fR.
+.IP "\fBnodump\fR" 4
+.IX Item "nodump"
+Marks the object can not be dumped by \f(CW\*(C`dldump\*(C'\fR.
+.IP "\fBnoexecstack\fR" 4
+.IX Item "noexecstack"
+Marks the object as not requiring executable stack.
+.IP "\fBnorelro\fR" 4
+.IX Item "norelro"
+Don't create an \s-1ELF\s0 \f(CW\*(C`PT_GNU_RELRO\*(C'\fR segment header in the object.
+.IP "\fBnow\fR" 4
+.IX Item "now"
+When generating an executable or shared library, mark it to tell the
+dynamic linker to resolve all symbols when the program is started, or
+when the shared library is linked to using dlopen, instead of
+deferring function call resolution to the point when the function is
+first called.
+.IP "\fBorigin\fR" 4
+.IX Item "origin"
+Marks the object may contain \f(CW$ORIGIN\fR.
+.IP "\fBrelro\fR" 4
+.IX Item "relro"
+Create an \s-1ELF\s0 \f(CW\*(C`PT_GNU_RELRO\*(C'\fR segment header in the object.
+.IP "\fBmax\-page\-size=\fR\fIvalue\fR" 4
+.IX Item "max-page-size=value"
+Set the emulation maximum page size to \fIvalue\fR.
+.IP "\fBcommon\-page\-size=\fR\fIvalue\fR" 4
+.IX Item "common-page-size=value"
+Set the emulation common page size to \fIvalue\fR.
+.RE
+.RS 4
+.Sp
+Other keywords are ignored for Solaris compatibility.
+.RE
+.IP "\fB\-(\fR \fIarchives\fR \fB\-)\fR" 4
+.IX Item "-( archives -)"
+.PD 0
+.IP "\fB\-\-start\-group\fR \fIarchives\fR \fB\-\-end\-group\fR" 4
+.IX Item "--start-group archives --end-group"
+.PD
+The \fIarchives\fR should be a list of archive files. They may be
+either explicit file names, or \fB\-l\fR options.
+.Sp
+The specified archives are searched repeatedly until no new undefined
+references are created. Normally, an archive is searched only once in
+the order that it is specified on the command line. If a symbol in that
+archive is needed to resolve an undefined symbol referred to by an
+object in an archive that appears later on the command line, the linker
+would not be able to resolve that reference. By grouping the archives,
+they all be searched repeatedly until all possible references are
+resolved.
+.Sp
+Using this option has a significant performance cost. It is best to use
+it only when there are unavoidable circular references between two or
+more archives.
+.IP "\fB\-\-accept\-unknown\-input\-arch\fR" 4
+.IX Item "--accept-unknown-input-arch"
+.PD 0
+.IP "\fB\-\-no\-accept\-unknown\-input\-arch\fR" 4
+.IX Item "--no-accept-unknown-input-arch"
+.PD
+Tells the linker to accept input files whose architecture cannot be
+recognised. The assumption is that the user knows what they are doing
+and deliberately wants to link in these unknown input files. This was
+the default behaviour of the linker, before release 2.14. The default
+behaviour from release 2.14 onwards is to reject such input files, and
+so the \fB\-\-accept\-unknown\-input\-arch\fR option has been added to
+restore the old behaviour.
+.IP "\fB\-\-as\-needed\fR" 4
+.IX Item "--as-needed"
+.PD 0
+.IP "\fB\-\-no\-as\-needed\fR" 4
+.IX Item "--no-as-needed"
+.PD
+This option affects \s-1ELF\s0 \s-1DT_NEEDED\s0 tags for dynamic libraries mentioned
+on the command line after the \fB\-\-as\-needed\fR option. Normally,
+the linker will add a \s-1DT_NEEDED\s0 tag for each dynamic library mentioned
+on the command line, regardless of whether the library is actually
+needed. \fB\-\-as\-needed\fR causes a \s-1DT_NEEDED\s0 tag to only be emitted
+for a library that satisfies a symbol reference from regular objects
+which is undefined at the point that the library was linked, or, if
+the library is not found in the \s-1DT_NEEDED\s0 lists of other libraries
+linked up to that point, a reference from another dynamic library.
+\&\fB\-\-no\-as\-needed\fR restores the default behaviour.
+.IP "\fB\-\-add\-needed\fR" 4
+.IX Item "--add-needed"
+.PD 0
+.IP "\fB\-\-no\-add\-needed\fR" 4
+.IX Item "--no-add-needed"
+.PD
+This option affects the treatment of dynamic libraries from \s-1ELF\s0
+\&\s-1DT_NEEDED\s0 tags in dynamic libraries mentioned on the command line after
+the \fB\-\-no\-add\-needed\fR option. Normally, the linker will add
+a \s-1DT_NEEDED\s0 tag for each dynamic library from \s-1DT_NEEDED\s0 tags.
+\&\fB\-\-no\-add\-needed\fR causes \s-1DT_NEEDED\s0 tags will never be emitted
+for those libraries from \s-1DT_NEEDED\s0 tags. \fB\-\-add\-needed\fR restores
+the default behaviour.
+.IP "\fB\-assert\fR \fIkeyword\fR" 4
+.IX Item "-assert keyword"
+This option is ignored for SunOS compatibility.
+.IP "\fB\-Bdynamic\fR" 4
+.IX Item "-Bdynamic"
+.PD 0
+.IP "\fB\-dy\fR" 4
+.IX Item "-dy"
+.IP "\fB\-call_shared\fR" 4
+.IX Item "-call_shared"
+.PD
+Link against dynamic libraries. This is only meaningful on platforms
+for which shared libraries are supported. This option is normally the
+default on such platforms. The different variants of this option are
+for compatibility with various systems. You may use this option
+multiple times on the command line: it affects library searching for
+\&\fB\-l\fR options which follow it.
+.IP "\fB\-Bgroup\fR" 4
+.IX Item "-Bgroup"
+Set the \f(CW\*(C`DF_1_GROUP\*(C'\fR flag in the \f(CW\*(C`DT_FLAGS_1\*(C'\fR entry in the dynamic
+section. This causes the runtime linker to handle lookups in this
+object and its dependencies to be performed only inside the group.
+\&\fB\-\-unresolved\-symbols=report\-all\fR is implied. This option is
+only meaningful on \s-1ELF\s0 platforms which support shared libraries.
+.IP "\fB\-Bstatic\fR" 4
+.IX Item "-Bstatic"
+.PD 0
+.IP "\fB\-dn\fR" 4
+.IX Item "-dn"
+.IP "\fB\-non_shared\fR" 4
+.IX Item "-non_shared"
+.IP "\fB\-static\fR" 4
+.IX Item "-static"
+.PD
+Do not link against shared libraries. This is only meaningful on
+platforms for which shared libraries are supported. The different
+variants of this option are for compatibility with various systems. You
+may use this option multiple times on the command line: it affects
+library searching for \fB\-l\fR options which follow it. This
+option also implies \fB\-\-unresolved\-symbols=report\-all\fR. This
+option can be used with \fB\-shared\fR. Doing so means that a
+shared library is being created but that all of the library's external
+references must be resolved by pulling in entries from static
+libraries.
+.IP "\fB\-Bsymbolic\fR" 4
+.IX Item "-Bsymbolic"
+When creating a shared library, bind references to global symbols to the
+definition within the shared library, if any. Normally, it is possible
+for a program linked against a shared library to override the definition
+within the shared library. This option is only meaningful on \s-1ELF\s0
+platforms which support shared libraries.
+.IP "\fB\-Bsymbolic\-functions\fR" 4
+.IX Item "-Bsymbolic-functions"
+When creating a shared library, bind references to global function
+symbols to the definition within the shared library, if any.
+This option is only meaningful on \s-1ELF\s0 platforms which support shared
+libraries.
+.IP "\fB\-\-dynamic\-list=\fR\fIdynamic-list-file\fR" 4
+.IX Item "--dynamic-list=dynamic-list-file"
+Specify the name of a dynamic list file to the linker. This is
+typically used when creating shared libraries to specify a list of
+global symbols whose references shouldn't be bound to the definition
+within the shared library, or creating dynamically linked executables
+to specify a list of symbols which should be added to the symbol table
+in the executable. This option is only meaningful on \s-1ELF\s0 platforms
+which support shared libraries.
+.Sp
+The format of the dynamic list is the same as the version node without
+scope and node name. See \fB\s-1VERSION\s0\fR for more information.
+.IP "\fB\-\-dynamic\-list\-data\fR" 4
+.IX Item "--dynamic-list-data"
+Include all global data symbols to the dynamic list.
+.IP "\fB\-\-dynamic\-list\-cpp\-new\fR" 4
+.IX Item "--dynamic-list-cpp-new"
+Provide the builtin dynamic list for \*(C+ operator new and delete. It
+is mainly useful for building shared libstdc++.
+.IP "\fB\-\-dynamic\-list\-cpp\-typeinfo\fR" 4
+.IX Item "--dynamic-list-cpp-typeinfo"
+Provide the builtin dynamic list for \*(C+ runtime type identification.
+.IP "\fB\-\-check\-sections\fR" 4
+.IX Item "--check-sections"
+.PD 0
+.IP "\fB\-\-no\-check\-sections\fR" 4
+.IX Item "--no-check-sections"
+.PD
+Asks the linker \fInot\fR to check section addresses after they have
+been assigned to see if there are any overlaps. Normally the linker will
+perform this check, and if it finds any overlaps it will produce
+suitable error messages. The linker does know about, and does make
+allowances for sections in overlays. The default behaviour can be
+restored by using the command line switch \fB\-\-check\-sections\fR.
+Section overlap is not usually checked for relocatable links. You can
+force checking in that case by using the \fB\-\-check\-sections\fR
+option.
+.IP "\fB\-\-cref\fR" 4
+.IX Item "--cref"
+Output a cross reference table. If a linker map file is being
+generated, the cross reference table is printed to the map file.
+Otherwise, it is printed on the standard output.
+.Sp
+The format of the table is intentionally simple, so that it may be
+easily processed by a script if necessary. The symbols are printed out,
+sorted by name. For each symbol, a list of file names is given. If the
+symbol is defined, the first file listed is the location of the
+definition. The remaining files contain references to the symbol.
+.IP "\fB\-\-no\-define\-common\fR" 4
+.IX Item "--no-define-common"
+This option inhibits the assignment of addresses to common symbols.
+The script command \f(CW\*(C`INHIBIT_COMMON_ALLOCATION\*(C'\fR has the same effect.
+.Sp
+The \fB\-\-no\-define\-common\fR option allows decoupling
+the decision to assign addresses to Common symbols from the choice
+of the output file type; otherwise a non-Relocatable output type
+forces assigning addresses to Common symbols.
+Using \fB\-\-no\-define\-common\fR allows Common symbols that are referenced
+from a shared library to be assigned addresses only in the main program.
+This eliminates the unused duplicate space in the shared library,
+and also prevents any possible confusion over resolving to the wrong
+duplicate when there are many dynamic modules with specialized search
+paths for runtime symbol resolution.
+.IP "\fB\-\-defsym=\fR\fIsymbol\fR\fB=\fR\fIexpression\fR" 4
+.IX Item "--defsym=symbol=expression"
+Create a global symbol in the output file, containing the absolute
+address given by \fIexpression\fR. You may use this option as many
+times as necessary to define multiple symbols in the command line. A
+limited form of arithmetic is supported for the \fIexpression\fR in this
+context: you may give a hexadecimal constant or the name of an existing
+symbol, or use \f(CW\*(C`+\*(C'\fR and \f(CW\*(C`\-\*(C'\fR to add or subtract hexadecimal
+constants or symbols. If you need more elaborate expressions, consider
+using the linker command language from a script. \fINote:\fR there should be no white
+space between \fIsymbol\fR, the equals sign ("\fB=\fR"), and
+\&\fIexpression\fR.
+.IP "\fB\-\-demangle[=\fR\fIstyle\fR\fB]\fR" 4
+.IX Item "--demangle[=style]"
+.PD 0
+.IP "\fB\-\-no\-demangle\fR" 4
+.IX Item "--no-demangle"
+.PD
+These options control whether to demangle symbol names in error messages
+and other output. When the linker is told to demangle, it tries to
+present symbol names in a readable fashion: it strips leading
+underscores if they are used by the object file format, and converts \*(C+
+mangled symbol names into user readable names. Different compilers have
+different mangling styles. The optional demangling style argument can be used
+to choose an appropriate demangling style for your compiler. The linker will
+demangle by default unless the environment variable \fB\s-1COLLECT_NO_DEMANGLE\s0\fR
+is set. These options may be used to override the default.
+.IP "\fB\-I\fR\fIfile\fR" 4
+.IX Item "-Ifile"
+.PD 0
+.IP "\fB\-\-dynamic\-linker=\fR\fIfile\fR" 4
+.IX Item "--dynamic-linker=file"
+.PD
+Set the name of the dynamic linker. This is only meaningful when
+generating dynamically linked \s-1ELF\s0 executables. The default dynamic
+linker is normally correct; don't use this unless you know what you are
+doing.
+.IP "\fB\-\-fatal\-warnings\fR" 4
+.IX Item "--fatal-warnings"
+.PD 0
+.IP "\fB\-\-no\-fatal\-warnings\fR" 4
+.IX Item "--no-fatal-warnings"
+.PD
+Treat all warnings as errors. The default behaviour can be restored
+with the option \fB\-\-no\-fatal\-warnings\fR.
+.IP "\fB\-\-force\-exe\-suffix\fR" 4
+.IX Item "--force-exe-suffix"
+Make sure that an output file has a .exe suffix.
+.Sp
+If a successfully built fully linked output file does not have a
+\&\f(CW\*(C`.exe\*(C'\fR or \f(CW\*(C`.dll\*(C'\fR suffix, this option forces the linker to copy
+the output file to one of the same name with a \f(CW\*(C`.exe\*(C'\fR suffix. This
+option is useful when using unmodified Unix makefiles on a Microsoft
+Windows host, since some versions of Windows won't run an image unless
+it ends in a \f(CW\*(C`.exe\*(C'\fR suffix.
+.IP "\fB\-\-gc\-sections\fR" 4
+.IX Item "--gc-sections"
+.PD 0
+.IP "\fB\-\-no\-gc\-sections\fR" 4
+.IX Item "--no-gc-sections"
+.PD
+Enable garbage collection of unused input sections. It is ignored on
+targets that do not support this option. The default behaviour (of not
+performing this garbage collection) can be restored by specifying
+\&\fB\-\-no\-gc\-sections\fR on the command line.
+.Sp
+\&\fB\-\-gc\-sections\fR decides which input sections are used by
+examining symbols and relocations. The section containing the entry
+symbol and all sections containing symbols undefined on the
+command-line will be kept, as will sections containing symbols
+referenced by dynamic objects. Note that when building shared
+libraries, the linker must assume that any visible symbol is
+referenced. Once this initial set of sections has been determined,
+the linker recursively marks as used any section referenced by their
+relocations. See \fB\-\-entry\fR and \fB\-\-undefined\fR.
+.Sp
+This option can be set when doing a partial link (enabled with option
+\&\fB\-r\fR). In this case the root of symbols kept must be explicitely
+specified either by an \fB\-\-entry\fR or \fB\-\-undefined\fR option or by
+a \f(CW\*(C`ENTRY\*(C'\fR command in the linker script.
+.IP "\fB\-\-print\-gc\-sections\fR" 4
+.IX Item "--print-gc-sections"
+.PD 0
+.IP "\fB\-\-no\-print\-gc\-sections\fR" 4
+.IX Item "--no-print-gc-sections"
+.PD
+List all sections removed by garbage collection. The listing is
+printed on stderr. This option is only effective if garbage
+collection has been enabled via the \fB\-\-gc\-sections\fR) option. The
+default behaviour (of not listing the sections that are removed) can
+be restored by specifying \fB\-\-no\-print\-gc\-sections\fR on the command
+line.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of the command-line options on the standard output and exit.
+.IP "\fB\-\-target\-help\fR" 4
+.IX Item "--target-help"
+Print a summary of all target specific options on the standard output and exit.
+.IP "\fB\-Map=\fR\fImapfile\fR" 4
+.IX Item "-Map=mapfile"
+Print a link map to the file \fImapfile\fR. See the description of the
+\&\fB\-M\fR option, above.
+.IP "\fB\-\-no\-keep\-memory\fR" 4
+.IX Item "--no-keep-memory"
+\&\fBld\fR normally optimizes for speed over memory usage by caching the
+symbol tables of input files in memory. This option tells \fBld\fR to
+instead optimize for memory usage, by rereading the symbol tables as
+necessary. This may be required if \fBld\fR runs out of memory space
+while linking a large executable.
+.IP "\fB\-\-no\-undefined\fR" 4
+.IX Item "--no-undefined"
+.PD 0
+.IP "\fB\-z defs\fR" 4
+.IX Item "-z defs"
+.PD
+Report unresolved symbol references from regular object files. This
+is done even if the linker is creating a non-symbolic shared library.
+The switch \fB\-\-[no\-]allow\-shlib\-undefined\fR controls the
+behaviour for reporting unresolved references found in shared
+libraries being linked in.
+.IP "\fB\-\-allow\-multiple\-definition\fR" 4
+.IX Item "--allow-multiple-definition"
+.PD 0
+.IP "\fB\-z muldefs\fR" 4
+.IX Item "-z muldefs"
+.PD
+Normally when a symbol is defined multiple times, the linker will
+report a fatal error. These options allow multiple definitions and the
+first definition will be used.
+.IP "\fB\-\-allow\-shlib\-undefined\fR" 4
+.IX Item "--allow-shlib-undefined"
+.PD 0
+.IP "\fB\-\-no\-allow\-shlib\-undefined\fR" 4
+.IX Item "--no-allow-shlib-undefined"
+.PD
+Allows or disallows undefined symbols in shared libraries.
+This switch is similar to \fB\-\-no\-undefined\fR except that it
+determines the behaviour when the undefined symbols are in a
+shared library rather than a regular object file. It does not affect
+how undefined symbols in regular object files are handled.
+.Sp
+The default behaviour is to report errors for any undefined symbols
+referenced in shared libraries if the linker is being used to create
+an executable, but to allow them if the linker is being used to create
+a shared library.
+.Sp
+The reasons for allowing undefined symbol references in shared
+libraries specified at link time are that:
+.RS 4
+.IP "\(bu" 4
+A shared library specified at link time may not be the same as the one
+that is available at load time, so the symbol might actually be
+resolvable at load time.
+.IP "\(bu" 4
+There are some operating systems, eg BeOS and \s-1HPPA\s0, where undefined
+symbols in shared libraries are normal.
+.Sp
+The BeOS kernel for example patches shared libraries at load time to
+select whichever function is most appropriate for the current
+architecture. This is used, for example, to dynamically select an
+appropriate memset function.
+.RE
+.RS 4
+.RE
+.IP "\fB\-\-no\-undefined\-version\fR" 4
+.IX Item "--no-undefined-version"
+Normally when a symbol has an undefined version, the linker will ignore
+it. This option disallows symbols with undefined version and a fatal error
+will be issued instead.
+.IP "\fB\-\-default\-symver\fR" 4
+.IX Item "--default-symver"
+Create and use a default symbol version (the soname) for unversioned
+exported symbols.
+.IP "\fB\-\-default\-imported\-symver\fR" 4
+.IX Item "--default-imported-symver"
+Create and use a default symbol version (the soname) for unversioned
+imported symbols.
+.IP "\fB\-\-no\-warn\-mismatch\fR" 4
+.IX Item "--no-warn-mismatch"
+Normally \fBld\fR will give an error if you try to link together input
+files that are mismatched for some reason, perhaps because they have
+been compiled for different processors or for different endiannesses.
+This option tells \fBld\fR that it should silently permit such possible
+errors. This option should only be used with care, in cases when you
+have taken some special action that ensures that the linker errors are
+inappropriate.
+.IP "\fB\-\-no\-warn\-search\-mismatch\fR" 4
+.IX Item "--no-warn-search-mismatch"
+Normally \fBld\fR will give a warning if it finds an incompatible
+library during a library search. This option silences the warning.
+.IP "\fB\-\-no\-whole\-archive\fR" 4
+.IX Item "--no-whole-archive"
+Turn off the effect of the \fB\-\-whole\-archive\fR option for subsequent
+archive files.
+.IP "\fB\-\-noinhibit\-exec\fR" 4
+.IX Item "--noinhibit-exec"
+Retain the executable output file whenever it is still usable.
+Normally, the linker will not produce an output file if it encounters
+errors during the link process; it exits without writing an output file
+when it issues any error whatsoever.
+.IP "\fB\-nostdlib\fR" 4
+.IX Item "-nostdlib"
+Only search library directories explicitly specified on the
+command line. Library directories specified in linker scripts
+(including linker scripts specified on the command line) are ignored.
+.IP "\fB\-\-oformat=\fR\fIoutput-format\fR" 4
+.IX Item "--oformat=output-format"
+\&\fBld\fR may be configured to support more than one kind of object
+file. If your \fBld\fR is configured this way, you can use the
+\&\fB\-\-oformat\fR option to specify the binary format for the output
+object file. Even when \fBld\fR is configured to support alternative
+object formats, you don't usually need to specify this, as \fBld\fR
+should be configured to produce as a default output format the most
+usual format on each machine. \fIoutput-format\fR is a text string, the
+name of a particular format supported by the \s-1BFD\s0 libraries. (You can
+list the available binary formats with \fBobjdump \-i\fR.) The script
+command \f(CW\*(C`OUTPUT_FORMAT\*(C'\fR can also specify the output format, but
+this option overrides it.
+.IP "\fB\-pie\fR" 4
+.IX Item "-pie"
+.PD 0
+.IP "\fB\-\-pic\-executable\fR" 4
+.IX Item "--pic-executable"
+.PD
+Create a position independent executable. This is currently only supported on
+\&\s-1ELF\s0 platforms. Position independent executables are similar to shared
+libraries in that they are relocated by the dynamic linker to the virtual
+address the \s-1OS\s0 chooses for them (which can vary between invocations). Like
+normal dynamically linked executables they can be executed and symbols
+defined in the executable cannot be overridden by shared libraries.
+.IP "\fB\-qmagic\fR" 4
+.IX Item "-qmagic"
+This option is ignored for Linux compatibility.
+.IP "\fB\-Qy\fR" 4
+.IX Item "-Qy"
+This option is ignored for \s-1SVR4\s0 compatibility.
+.IP "\fB\-\-relax\fR" 4
+.IX Item "--relax"
+An option with machine dependent effects.
+This option is only supported on a few targets.
+.Sp
+On some platforms, the \fB\-\-relax\fR option performs global
+optimizations that become possible when the linker resolves addressing
+in the program, such as relaxing address modes and synthesizing new
+instructions in the output object file.
+.Sp
+On some platforms these link time global optimizations may make symbolic
+debugging of the resulting executable impossible.
+This is known to be
+the case for the Matsushita \s-1MN10200\s0 and \s-1MN10300\s0 family of processors.
+.Sp
+On platforms where this is not supported, \fB\-\-relax\fR is accepted,
+but ignored.
+.IP "\fB\-\-retain\-symbols\-file=\fR\fIfilename\fR" 4
+.IX Item "--retain-symbols-file=filename"
+Retain \fIonly\fR the symbols listed in the file \fIfilename\fR,
+discarding all others. \fIfilename\fR is simply a flat file, with one
+symbol name per line. This option is especially useful in environments
+(such as VxWorks)
+where a large global symbol table is accumulated gradually, to conserve
+run-time memory.
+.Sp
+\&\fB\-\-retain\-symbols\-file\fR does \fInot\fR discard undefined symbols,
+or symbols needed for relocations.
+.Sp
+You may only specify \fB\-\-retain\-symbols\-file\fR once in the command
+line. It overrides \fB\-s\fR and \fB\-S\fR.
+.IP "\fB\-rpath=\fR\fIdir\fR" 4
+.IX Item "-rpath=dir"
+Add a directory to the runtime library search path. This is used when
+linking an \s-1ELF\s0 executable with shared objects. All \fB\-rpath\fR
+arguments are concatenated and passed to the runtime linker, which uses
+them to locate shared objects at runtime. The \fB\-rpath\fR option is
+also used when locating shared objects which are needed by shared
+objects explicitly included in the link; see the description of the
+\&\fB\-rpath\-link\fR option. If \fB\-rpath\fR is not used when linking an
+\&\s-1ELF\s0 executable, the contents of the environment variable
+\&\f(CW\*(C`LD_RUN_PATH\*(C'\fR will be used if it is defined.
+.Sp
+The \fB\-rpath\fR option may also be used on SunOS. By default, on
+SunOS, the linker will form a runtime search patch out of all the
+\&\fB\-L\fR options it is given. If a \fB\-rpath\fR option is used, the
+runtime search path will be formed exclusively using the \fB\-rpath\fR
+options, ignoring the \fB\-L\fR options. This can be useful when using
+gcc, which adds many \fB\-L\fR options which may be on \s-1NFS\s0 mounted
+file systems.
+.Sp
+For compatibility with other \s-1ELF\s0 linkers, if the \fB\-R\fR option is
+followed by a directory name, rather than a file name, it is treated as
+the \fB\-rpath\fR option.
+.IP "\fB\-rpath\-link=\fR\fIdir\fR" 4
+.IX Item "-rpath-link=dir"
+When using \s-1ELF\s0 or SunOS, one shared library may require another. This
+happens when an \f(CW\*(C`ld \-shared\*(C'\fR link includes a shared library as one
+of the input files.
+.Sp
+When the linker encounters such a dependency when doing a non-shared,
+non-relocatable link, it will automatically try to locate the required
+shared library and include it in the link, if it is not included
+explicitly. In such a case, the \fB\-rpath\-link\fR option
+specifies the first set of directories to search. The
+\&\fB\-rpath\-link\fR option may specify a sequence of directory names
+either by specifying a list of names separated by colons, or by
+appearing multiple times.
+.Sp
+This option should be used with caution as it overrides the search path
+that may have been hard compiled into a shared library. In such a case it
+is possible to use unintentionally a different search path than the
+runtime linker would do.
+.Sp
+The linker uses the following search paths to locate required shared
+libraries:
+.RS 4
+.IP "1." 4
+Any directories specified by \fB\-rpath\-link\fR options.
+.IP "2." 4
+Any directories specified by \fB\-rpath\fR options. The difference
+between \fB\-rpath\fR and \fB\-rpath\-link\fR is that directories
+specified by \fB\-rpath\fR options are included in the executable and
+used at runtime, whereas the \fB\-rpath\-link\fR option is only effective
+at link time. Searching \fB\-rpath\fR in this way is only supported
+by native linkers and cross linkers which have been configured with
+the \fB\-\-with\-sysroot\fR option.
+.IP "3." 4
+On an \s-1ELF\s0 system, for native linkers, if the \fB\-rpath\fR and
+\&\fB\-rpath\-link\fR options were not used, search the contents of the
+environment variable \f(CW\*(C`LD_RUN_PATH\*(C'\fR.
+.IP "4." 4
+On SunOS, if the \fB\-rpath\fR option was not used, search any
+directories specified using \fB\-L\fR options.
+.IP "5." 4
+For a native linker, the search the contents of the environment
+variable \f(CW\*(C`LD_LIBRARY_PATH\*(C'\fR.
+.IP "6." 4
+For a native \s-1ELF\s0 linker, the directories in \f(CW\*(C`DT_RUNPATH\*(C'\fR or
+\&\f(CW\*(C`DT_RPATH\*(C'\fR of a shared library are searched for shared
+libraries needed by it. The \f(CW\*(C`DT_RPATH\*(C'\fR entries are ignored if
+\&\f(CW\*(C`DT_RUNPATH\*(C'\fR entries exist.
+.IP "7." 4
+The default directories, normally \fI/lib\fR and \fI/usr/lib\fR.
+.IP "8." 4
+For a native linker on an \s-1ELF\s0 system, if the file \fI/etc/ld.so.conf\fR
+exists, the list of directories found in that file.
+.RE
+.RS 4
+.Sp
+If the required shared library is not found, the linker will issue a
+warning and continue with the link.
+.RE
+.IP "\fB\-shared\fR" 4
+.IX Item "-shared"
+.PD 0
+.IP "\fB\-Bshareable\fR" 4
+.IX Item "-Bshareable"
+.PD
+Create a shared library. This is currently only supported on \s-1ELF\s0, \s-1XCOFF\s0
+and SunOS platforms. On SunOS, the linker will automatically create a
+shared library if the \fB\-e\fR option is not used and there are
+undefined symbols in the link.
+.IP "\fB\-\-sort\-common\fR" 4
+.IX Item "--sort-common"
+.PD 0
+.IP "\fB\-\-sort\-common=ascending\fR" 4
+.IX Item "--sort-common=ascending"
+.IP "\fB\-\-sort\-common=descending\fR" 4
+.IX Item "--sort-common=descending"
+.PD
+This option tells \fBld\fR to sort the common symbols by alignment in
+ascending or descending order when it places them in the appropriate output
+sections. The symbol alignments considered are sixteen-byte or larger,
+eight-byte, four-byte, two-byte, and one-byte. This is to prevent gaps
+between symbols due to alignment constraints. If no sorting order is
+specified, then descending order is assumed.
+.IP "\fB\-\-sort\-section=name\fR" 4
+.IX Item "--sort-section=name"
+This option will apply \f(CW\*(C`SORT_BY_NAME\*(C'\fR to all wildcard section
+patterns in the linker script.
+.IP "\fB\-\-sort\-section=alignment\fR" 4
+.IX Item "--sort-section=alignment"
+This option will apply \f(CW\*(C`SORT_BY_ALIGNMENT\*(C'\fR to all wildcard section
+patterns in the linker script.
+.IP "\fB\-\-split\-by\-file[=\fR\fIsize\fR\fB]\fR" 4
+.IX Item "--split-by-file[=size]"
+Similar to \fB\-\-split\-by\-reloc\fR but creates a new output section for
+each input file when \fIsize\fR is reached. \fIsize\fR defaults to a
+size of 1 if not given.
+.IP "\fB\-\-split\-by\-reloc[=\fR\fIcount\fR\fB]\fR" 4
+.IX Item "--split-by-reloc[=count]"
+Tries to creates extra sections in the output file so that no single
+output section in the file contains more than \fIcount\fR relocations.
+This is useful when generating huge relocatable files for downloading into
+certain real time kernels with the \s-1COFF\s0 object file format; since \s-1COFF\s0
+cannot represent more than 65535 relocations in a single section. Note
+that this will fail to work with object file formats which do not
+support arbitrary sections. The linker will not split up individual
+input sections for redistribution, so if a single input section contains
+more than \fIcount\fR relocations one output section will contain that
+many relocations. \fIcount\fR defaults to a value of 32768.
+.IP "\fB\-\-stats\fR" 4
+.IX Item "--stats"
+Compute and display statistics about the operation of the linker, such
+as execution time and memory usage.
+.IP "\fB\-\-sysroot=\fR\fIdirectory\fR" 4
+.IX Item "--sysroot=directory"
+Use \fIdirectory\fR as the location of the sysroot, overriding the
+configure-time default. This option is only supported by linkers
+that were configured using \fB\-\-with\-sysroot\fR.
+.IP "\fB\-\-traditional\-format\fR" 4
+.IX Item "--traditional-format"
+For some targets, the output of \fBld\fR is different in some ways from
+the output of some existing linker. This switch requests \fBld\fR to
+use the traditional format instead.
+.Sp
+For example, on SunOS, \fBld\fR combines duplicate entries in the
+symbol string table. This can reduce the size of an output file with
+full debugging information by over 30 percent. Unfortunately, the SunOS
+\&\f(CW\*(C`dbx\*(C'\fR program can not read the resulting program (\f(CW\*(C`gdb\*(C'\fR has no
+trouble). The \fB\-\-traditional\-format\fR switch tells \fBld\fR to not
+combine duplicate entries.
+.IP "\fB\-\-section\-start=\fR\fIsectionname\fR\fB=\fR\fIorg\fR" 4
+.IX Item "--section-start=sectionname=org"
+Locate a section in the output file at the absolute
+address given by \fIorg\fR. You may use this option as many
+times as necessary to locate multiple sections in the command
+line.
+\&\fIorg\fR must be a single hexadecimal integer;
+for compatibility with other linkers, you may omit the leading
+\&\fB0x\fR usually associated with hexadecimal values. \fINote:\fR there
+should be no white space between \fIsectionname\fR, the equals
+sign ("\fB=\fR"), and \fIorg\fR.
+.IP "\fB\-Tbss=\fR\fIorg\fR" 4
+.IX Item "-Tbss=org"
+.PD 0
+.IP "\fB\-Tdata=\fR\fIorg\fR" 4
+.IX Item "-Tdata=org"
+.IP "\fB\-Ttext=\fR\fIorg\fR" 4
+.IX Item "-Ttext=org"
+.PD
+Same as \fB\-\-section\-start\fR, with \f(CW\*(C`.bss\*(C'\fR, \f(CW\*(C`.data\*(C'\fR or
+\&\f(CW\*(C`.text\*(C'\fR as the \fIsectionname\fR.
+.IP "\fB\-Ttext\-segment=\fR\fIorg\fR" 4
+.IX Item "-Ttext-segment=org"
+When creating an \s-1ELF\s0 executable or shared object, it will set the address
+of the first byte of the text segment.
+.IP "\fB\-\-unresolved\-symbols=\fR\fImethod\fR" 4
+.IX Item "--unresolved-symbols=method"
+Determine how to handle unresolved symbols. There are four possible
+values for \fBmethod\fR:
+.RS 4
+.IP "\fBignore-all\fR" 4
+.IX Item "ignore-all"
+Do not report any unresolved symbols.
+.IP "\fBreport-all\fR" 4
+.IX Item "report-all"
+Report all unresolved symbols. This is the default.
+.IP "\fBignore-in-object-files\fR" 4
+.IX Item "ignore-in-object-files"
+Report unresolved symbols that are contained in shared libraries, but
+ignore them if they come from regular object files.
+.IP "\fBignore-in-shared-libs\fR" 4
+.IX Item "ignore-in-shared-libs"
+Report unresolved symbols that come from regular object files, but
+ignore them if they come from shared libraries. This can be useful
+when creating a dynamic binary and it is known that all the shared
+libraries that it should be referencing are included on the linker's
+command line.
+.RE
+.RS 4
+.Sp
+The behaviour for shared libraries on their own can also be controlled
+by the \fB\-\-[no\-]allow\-shlib\-undefined\fR option.
+.Sp
+Normally the linker will generate an error message for each reported
+unresolved symbol but the option \fB\-\-warn\-unresolved\-symbols\fR
+can change this to a warning.
+.RE
+.IP "\fB\-\-dll\-verbose\fR" 4
+.IX Item "--dll-verbose"
+.PD 0
+.IP "\fB\-\-verbose\fR" 4
+.IX Item "--verbose"
+.PD
+Display the version number for \fBld\fR and list the linker emulations
+supported. Display which input files can and cannot be opened. Display
+the linker script being used by the linker.
+.IP "\fB\-\-version\-script=\fR\fIversion-scriptfile\fR" 4
+.IX Item "--version-script=version-scriptfile"
+Specify the name of a version script to the linker. This is typically
+used when creating shared libraries to specify additional information
+about the version hierarchy for the library being created. This option
+is only fully supported on \s-1ELF\s0 platforms which support shared libraries;
+see \fB\s-1VERSION\s0\fR. It is partially supported on \s-1PE\s0 platforms, which can
+use version scripts to filter symbol visibility in auto-export mode: any
+symbols marked \fBlocal\fR in the version script will not be exported.
+.IP "\fB\-\-warn\-common\fR" 4
+.IX Item "--warn-common"
+Warn when a common symbol is combined with another common symbol or with
+a symbol definition. Unix linkers allow this somewhat sloppy practise,
+but linkers on some other operating systems do not. This option allows
+you to find potential problems from combining global symbols.
+Unfortunately, some C libraries use this practise, so you may get some
+warnings about symbols in the libraries as well as in your programs.
+.Sp
+There are three kinds of global symbols, illustrated here by C examples:
+.RS 4
+.IP "\fBint i = 1;\fR" 4
+.IX Item "int i = 1;"
+A definition, which goes in the initialized data section of the output
+file.
+.IP "\fBextern int i;\fR" 4
+.IX Item "extern int i;"
+An undefined reference, which does not allocate space.
+There must be either a definition or a common symbol for the
+variable somewhere.
+.IP "\fBint i;\fR" 4
+.IX Item "int i;"
+A common symbol. If there are only (one or more) common symbols for a
+variable, it goes in the uninitialized data area of the output file.
+The linker merges multiple common symbols for the same variable into a
+single symbol. If they are of different sizes, it picks the largest
+size. The linker turns a common symbol into a declaration, if there is
+a definition of the same variable.
+.RE
+.RS 4
+.Sp
+The \fB\-\-warn\-common\fR option can produce five kinds of warnings.
+Each warning consists of a pair of lines: the first describes the symbol
+just encountered, and the second describes the previous symbol
+encountered with the same name. One or both of the two symbols will be
+a common symbol.
+.IP "1." 4
+Turning a common symbol into a reference, because there is already a
+definition for the symbol.
+.Sp
+.Vb 3
+\& <file>(<section>): warning: common of \`<symbol>\*(Aq
+\& overridden by definition
+\& <file>(<section>): warning: defined here
+.Ve
+.IP "2." 4
+Turning a common symbol into a reference, because a later definition for
+the symbol is encountered. This is the same as the previous case,
+except that the symbols are encountered in a different order.
+.Sp
+.Vb 3
+\& <file>(<section>): warning: definition of \`<symbol>\*(Aq
+\& overriding common
+\& <file>(<section>): warning: common is here
+.Ve
+.IP "3." 4
+Merging a common symbol with a previous same-sized common symbol.
+.Sp
+.Vb 3
+\& <file>(<section>): warning: multiple common
+\& of \`<symbol>\*(Aq
+\& <file>(<section>): warning: previous common is here
+.Ve
+.IP "4." 4
+Merging a common symbol with a previous larger common symbol.
+.Sp
+.Vb 3
+\& <file>(<section>): warning: common of \`<symbol>\*(Aq
+\& overridden by larger common
+\& <file>(<section>): warning: larger common is here
+.Ve
+.IP "5." 4
+Merging a common symbol with a previous smaller common symbol. This is
+the same as the previous case, except that the symbols are
+encountered in a different order.
+.Sp
+.Vb 3
+\& <file>(<section>): warning: common of \`<symbol>\*(Aq
+\& overriding smaller common
+\& <file>(<section>): warning: smaller common is here
+.Ve
+.RE
+.RS 4
+.RE
+.IP "\fB\-\-warn\-constructors\fR" 4
+.IX Item "--warn-constructors"
+Warn if any global constructors are used. This is only useful for a few
+object file formats. For formats like \s-1COFF\s0 or \s-1ELF\s0, the linker can not
+detect the use of global constructors.
+.IP "\fB\-\-warn\-multiple\-gp\fR" 4
+.IX Item "--warn-multiple-gp"
+Warn if multiple global pointer values are required in the output file.
+This is only meaningful for certain processors, such as the Alpha.
+Specifically, some processors put large-valued constants in a special
+section. A special register (the global pointer) points into the middle
+of this section, so that constants can be loaded efficiently via a
+base-register relative addressing mode. Since the offset in
+base-register relative mode is fixed and relatively small (e.g., 16
+bits), this limits the maximum size of the constant pool. Thus, in
+large programs, it is often necessary to use multiple global pointer
+values in order to be able to address all possible constants. This
+option causes a warning to be issued whenever this case occurs.
+.IP "\fB\-\-warn\-once\fR" 4
+.IX Item "--warn-once"
+Only warn once for each undefined symbol, rather than once per module
+which refers to it.
+.IP "\fB\-\-warn\-section\-align\fR" 4
+.IX Item "--warn-section-align"
+Warn if the address of an output section is changed because of
+alignment. Typically, the alignment will be set by an input section.
+The address will only be changed if it not explicitly specified; that
+is, if the \f(CW\*(C`SECTIONS\*(C'\fR command does not specify a start address for
+the section.
+.IP "\fB\-\-warn\-shared\-textrel\fR" 4
+.IX Item "--warn-shared-textrel"
+Warn if the linker adds a \s-1DT_TEXTREL\s0 to a shared object.
+.IP "\fB\-\-warn\-alternate\-em\fR" 4
+.IX Item "--warn-alternate-em"
+Warn if an object has alternate \s-1ELF\s0 machine code.
+.IP "\fB\-\-warn\-unresolved\-symbols\fR" 4
+.IX Item "--warn-unresolved-symbols"
+If the linker is going to report an unresolved symbol (see the option
+\&\fB\-\-unresolved\-symbols\fR) it will normally generate an error.
+This option makes it generate a warning instead.
+.IP "\fB\-\-error\-unresolved\-symbols\fR" 4
+.IX Item "--error-unresolved-symbols"
+This restores the linker's default behaviour of generating errors when
+it is reporting unresolved symbols.
+.IP "\fB\-\-whole\-archive\fR" 4
+.IX Item "--whole-archive"
+For each archive mentioned on the command line after the
+\&\fB\-\-whole\-archive\fR option, include every object file in the archive
+in the link, rather than searching the archive for the required object
+files. This is normally used to turn an archive file into a shared
+library, forcing every object to be included in the resulting shared
+library. This option may be used more than once.
+.Sp
+Two notes when using this option from gcc: First, gcc doesn't know
+about this option, so you have to use \fB\-Wl,\-whole\-archive\fR.
+Second, don't forget to use \fB\-Wl,\-no\-whole\-archive\fR after your
+list of archives, because gcc will add its own list of archives to
+your link and you may not want this flag to affect those as well.
+.IP "\fB\-\-wrap=\fR\fIsymbol\fR" 4
+.IX Item "--wrap=symbol"
+Use a wrapper function for \fIsymbol\fR. Any undefined reference to
+\&\fIsymbol\fR will be resolved to \f(CW\*(C`_\|_wrap_\f(CIsymbol\f(CW\*(C'\fR. Any
+undefined reference to \f(CW\*(C`_\|_real_\f(CIsymbol\f(CW\*(C'\fR will be resolved to
+\&\fIsymbol\fR.
+.Sp
+This can be used to provide a wrapper for a system function. The
+wrapper function should be called \f(CW\*(C`_\|_wrap_\f(CIsymbol\f(CW\*(C'\fR. If it
+wishes to call the system function, it should call
+\&\f(CW\*(C`_\|_real_\f(CIsymbol\f(CW\*(C'\fR.
+.Sp
+Here is a trivial example:
+.Sp
+.Vb 6
+\& void *
+\& _\|_wrap_malloc (size_t c)
+\& {
+\& printf ("malloc called with %zu\en", c);
+\& return _\|_real_malloc (c);
+\& }
+.Ve
+.Sp
+If you link other code with this file using \fB\-\-wrap malloc\fR, then
+all calls to \f(CW\*(C`malloc\*(C'\fR will call the function \f(CW\*(C`_\|_wrap_malloc\*(C'\fR
+instead. The call to \f(CW\*(C`_\|_real_malloc\*(C'\fR in \f(CW\*(C`_\|_wrap_malloc\*(C'\fR will
+call the real \f(CW\*(C`malloc\*(C'\fR function.
+.Sp
+You may wish to provide a \f(CW\*(C`_\|_real_malloc\*(C'\fR function as well, so that
+links without the \fB\-\-wrap\fR option will succeed. If you do this,
+you should not put the definition of \f(CW\*(C`_\|_real_malloc\*(C'\fR in the same
+file as \f(CW\*(C`_\|_wrap_malloc\*(C'\fR; if you do, the assembler may resolve the
+call before the linker has a chance to wrap it to \f(CW\*(C`malloc\*(C'\fR.
+.IP "\fB\-\-eh\-frame\-hdr\fR" 4
+.IX Item "--eh-frame-hdr"
+Request creation of \f(CW\*(C`.eh_frame_hdr\*(C'\fR section and \s-1ELF\s0
+\&\f(CW\*(C`PT_GNU_EH_FRAME\*(C'\fR segment header.
+.IP "\fB\-\-enable\-new\-dtags\fR" 4
+.IX Item "--enable-new-dtags"
+.PD 0
+.IP "\fB\-\-disable\-new\-dtags\fR" 4
+.IX Item "--disable-new-dtags"
+.PD
+This linker can create the new dynamic tags in \s-1ELF\s0. But the older \s-1ELF\s0
+systems may not understand them. If you specify
+\&\fB\-\-enable\-new\-dtags\fR, the dynamic tags will be created as needed.
+If you specify \fB\-\-disable\-new\-dtags\fR, no new dynamic tags will be
+created. By default, the new dynamic tags are not created. Note that
+those options are only available for \s-1ELF\s0 systems.
+.IP "\fB\-\-hash\-size=\fR\fInumber\fR" 4
+.IX Item "--hash-size=number"
+Set the default size of the linker's hash tables to a prime number
+close to \fInumber\fR. Increasing this value can reduce the length of
+time it takes the linker to perform its tasks, at the expense of
+increasing the linker's memory requirements. Similarly reducing this
+value can reduce the memory requirements at the expense of speed.
+.IP "\fB\-\-hash\-style=\fR\fIstyle\fR" 4
+.IX Item "--hash-style=style"
+Set the type of linker's hash table(s). \fIstyle\fR can be either
+\&\f(CW\*(C`sysv\*(C'\fR for classic \s-1ELF\s0 \f(CW\*(C`.hash\*(C'\fR section, \f(CW\*(C`gnu\*(C'\fR for
+new style \s-1GNU\s0 \f(CW\*(C`.gnu.hash\*(C'\fR section or \f(CW\*(C`both\*(C'\fR for both
+the classic \s-1ELF\s0 \f(CW\*(C`.hash\*(C'\fR and new style \s-1GNU\s0 \f(CW\*(C`.gnu.hash\*(C'\fR
+hash tables. The default is \f(CW\*(C`sysv\*(C'\fR.
+.IP "\fB\-\-reduce\-memory\-overheads\fR" 4
+.IX Item "--reduce-memory-overheads"
+This option reduces memory requirements at ld runtime, at the expense of
+linking speed. This was introduced to select the old O(n^2) algorithm
+for link map file generation, rather than the new O(n) algorithm which uses
+about 40% more memory for symbol storage.
+.Sp
+Another effect of the switch is to set the default hash table size to
+1021, which again saves memory at the cost of lengthening the linker's
+run time. This is not done however if the \fB\-\-hash\-size\fR switch
+has been used.
+.Sp
+The \fB\-\-reduce\-memory\-overheads\fR switch may be also be used to
+enable other tradeoffs in future versions of the linker.
+.IP "\fB\-\-build\-id\fR" 4
+.IX Item "--build-id"
+.PD 0
+.IP "\fB\-\-build\-id=\fR\fIstyle\fR" 4
+.IX Item "--build-id=style"
+.PD
+Request creation of \f(CW\*(C`.note.gnu.build\-id\*(C'\fR \s-1ELF\s0 note section.
+The contents of the note are unique bits identifying this linked
+file. \fIstyle\fR can be \f(CW\*(C`uuid\*(C'\fR to use 128 random bits,
+\&\f(CW\*(C`sha1\*(C'\fR to use a 160\-bit \s-1SHA1\s0 hash on the normative
+parts of the output contents, \f(CW\*(C`md5\*(C'\fR to use a 128\-bit
+\&\s-1MD5\s0 hash on the normative parts of the output contents, or
+\&\f(CW\*(C`0x\f(CIhexstring\f(CW\*(C'\fR to use a chosen bit string specified as
+an even number of hexadecimal digits (\f(CW\*(C`\-\*(C'\fR and \f(CW\*(C`:\*(C'\fR
+characters between digit pairs are ignored). If \fIstyle\fR is
+omitted, \f(CW\*(C`sha1\*(C'\fR is used.
+.Sp
+The \f(CW\*(C`md5\*(C'\fR and \f(CW\*(C`sha1\*(C'\fR styles produces an identifier
+that is always the same in an identical output file, but will be
+unique among all nonidentical output files. It is not intended
+to be compared as a checksum for the file's contents. A linked
+file may be changed later by other tools, but the build \s-1ID\s0 bit
+string identifying the original linked file does not change.
+.Sp
+Passing \f(CW\*(C`none\*(C'\fR for \fIstyle\fR disables the setting from any
+\&\f(CW\*(C`\-\-build\-id\*(C'\fR options earlier on the command line.
+.PP
+The i386 \s-1PE\s0 linker supports the \fB\-shared\fR option, which causes
+the output to be a dynamically linked library (\s-1DLL\s0) instead of a
+normal executable. You should name the output \f(CW\*(C`*.dll\*(C'\fR when you
+use this option. In addition, the linker fully supports the standard
+\&\f(CW\*(C`*.def\*(C'\fR files, which may be specified on the linker command line
+like an object file (in fact, it should precede archives it exports
+symbols from, to ensure that they get linked in, just like a normal
+object file).
+.PP
+In addition to the options common to all targets, the i386 \s-1PE\s0 linker
+support additional command line options that are specific to the i386
+\&\s-1PE\s0 target. Options that take values may be separated from their
+values by either a space or an equals sign.
+.IP "\fB\-\-add\-stdcall\-alias\fR" 4
+.IX Item "--add-stdcall-alias"
+If given, symbols with a stdcall suffix (@\fInn\fR) will be exported
+as-is and also with the suffix stripped.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-base\-file\fR \fIfile\fR" 4
+.IX Item "--base-file file"
+Use \fIfile\fR as the name of a file in which to save the base
+addresses of all the relocations needed for generating DLLs with
+\&\fIdlltool\fR.
+[This is an i386 \s-1PE\s0 specific option]
+.IP "\fB\-\-dll\fR" 4
+.IX Item "--dll"
+Create a \s-1DLL\s0 instead of a regular executable. You may also use
+\&\fB\-shared\fR or specify a \f(CW\*(C`LIBRARY\*(C'\fR in a given \f(CW\*(C`.def\*(C'\fR
+file.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-enable\-long\-section\-names\fR" 4
+.IX Item "--enable-long-section-names"
+.PD 0
+.IP "\fB\-\-disable\-long\-section\-names\fR" 4
+.IX Item "--disable-long-section-names"
+.PD
+The \s-1PE\s0 variants of the Coff object format add an extension that permits
+the use of section names longer than eight characters, the normal limit
+for Coff. By default, these names are only allowed in object files, as
+fully-linked executable images do not carry the Coff string table required
+to support the longer names. As a \s-1GNU\s0 extension, it is possible to
+allow their use in executable images as well, or to (probably pointlessly!)
+disallow it in object files, by using these two options. Executable images
+generated with these long section names are slightly non-standard, carrying
+as they do a string table, and may generate confusing output when examined
+with non-GNU PE-aware tools, such as file viewers and dumpers. However,
+\&\s-1GDB\s0 relies on the use of \s-1PE\s0 long section names to find Dwarf\-2 debug
+information sections in an executable image at runtime, and so if neither
+option is specified on the command-line, \fBld\fR will enable long
+section names, overriding the default and technically correct behaviour,
+when it finds the presence of debug information while linking an executable
+image and not stripping symbols.
+[This option is valid for all \s-1PE\s0 targeted ports of the linker]
+.IP "\fB\-\-enable\-stdcall\-fixup\fR" 4
+.IX Item "--enable-stdcall-fixup"
+.PD 0
+.IP "\fB\-\-disable\-stdcall\-fixup\fR" 4
+.IX Item "--disable-stdcall-fixup"
+.PD
+If the link finds a symbol that it cannot resolve, it will attempt to
+do \*(L"fuzzy linking\*(R" by looking for another defined symbol that differs
+only in the format of the symbol name (cdecl vs stdcall) and will
+resolve that symbol by linking to the match. For example, the
+undefined symbol \f(CW\*(C`_foo\*(C'\fR might be linked to the function
+\&\f(CW\*(C`_foo@12\*(C'\fR, or the undefined symbol \f(CW\*(C`_bar@16\*(C'\fR might be linked
+to the function \f(CW\*(C`_bar\*(C'\fR. When the linker does this, it prints a
+warning, since it normally should have failed to link, but sometimes
+import libraries generated from third-party dlls may need this feature
+to be usable. If you specify \fB\-\-enable\-stdcall\-fixup\fR, this
+feature is fully enabled and warnings are not printed. If you specify
+\&\fB\-\-disable\-stdcall\-fixup\fR, this feature is disabled and such
+mismatches are considered to be errors.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-export\-all\-symbols\fR" 4
+.IX Item "--export-all-symbols"
+If given, all global symbols in the objects used to build a \s-1DLL\s0 will
+be exported by the \s-1DLL\s0. Note that this is the default if there
+otherwise wouldn't be any exported symbols. When symbols are
+explicitly exported via \s-1DEF\s0 files or implicitly exported via function
+attributes, the default is to not export anything else unless this
+option is given. Note that the symbols \f(CW\*(C`DllMain@12\*(C'\fR,
+\&\f(CW\*(C`DllEntryPoint@0\*(C'\fR, \f(CW\*(C`DllMainCRTStartup@12\*(C'\fR, and
+\&\f(CW\*(C`impure_ptr\*(C'\fR will not be automatically
+exported. Also, symbols imported from other DLLs will not be
+re-exported, nor will symbols specifying the \s-1DLL\s0's internal layout
+such as those beginning with \f(CW\*(C`_head_\*(C'\fR or ending with
+\&\f(CW\*(C`_iname\*(C'\fR. In addition, no symbols from \f(CW\*(C`libgcc\*(C'\fR,
+\&\f(CW\*(C`libstd++\*(C'\fR, \f(CW\*(C`libmingw32\*(C'\fR, or \f(CW\*(C`crtX.o\*(C'\fR will be exported.
+Symbols whose names begin with \f(CW\*(C`_\|_rtti_\*(C'\fR or \f(CW\*(C`_\|_builtin_\*(C'\fR will
+not be exported, to help with \*(C+ DLLs. Finally, there is an
+extensive list of cygwin-private symbols that are not exported
+(obviously, this applies on when building DLLs for cygwin targets).
+These cygwin-excludes are: \f(CW\*(C`_cygwin_dll_entry@12\*(C'\fR,
+\&\f(CW\*(C`_cygwin_crt0_common@8\*(C'\fR, \f(CW\*(C`_cygwin_noncygwin_dll_entry@12\*(C'\fR,
+\&\f(CW\*(C`_fmode\*(C'\fR, \f(CW\*(C`_impure_ptr\*(C'\fR, \f(CW\*(C`cygwin_attach_dll\*(C'\fR,
+\&\f(CW\*(C`cygwin_premain0\*(C'\fR, \f(CW\*(C`cygwin_premain1\*(C'\fR, \f(CW\*(C`cygwin_premain2\*(C'\fR,
+\&\f(CW\*(C`cygwin_premain3\*(C'\fR, and \f(CW\*(C`environ\*(C'\fR.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-exclude\-symbols\fR \fIsymbol\fR\fB,\fR\fIsymbol\fR\fB,...\fR" 4
+.IX Item "--exclude-symbols symbol,symbol,..."
+Specifies a list of symbols which should not be automatically
+exported. The symbol names may be delimited by commas or colons.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-file\-alignment\fR" 4
+.IX Item "--file-alignment"
+Specify the file alignment. Sections in the file will always begin at
+file offsets which are multiples of this number. This defaults to
+512.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-heap\fR \fIreserve\fR" 4
+.IX Item "--heap reserve"
+.PD 0
+.IP "\fB\-\-heap\fR \fIreserve\fR\fB,\fR\fIcommit\fR" 4
+.IX Item "--heap reserve,commit"
+.PD
+Specify the number of bytes of memory to reserve (and optionally commit)
+to be used as heap for this program. The default is 1Mb reserved, 4K
+committed.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-image\-base\fR \fIvalue\fR" 4
+.IX Item "--image-base value"
+Use \fIvalue\fR as the base address of your program or dll. This is
+the lowest memory location that will be used when your program or dll
+is loaded. To reduce the need to relocate and improve performance of
+your dlls, each should have a unique base address and not overlap any
+other dlls. The default is 0x400000 for executables, and 0x10000000
+for dlls.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-kill\-at\fR" 4
+.IX Item "--kill-at"
+If given, the stdcall suffixes (@\fInn\fR) will be stripped from
+symbols before they are exported.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-large\-address\-aware\fR" 4
+.IX Item "--large-address-aware"
+If given, the appropriate bit in the \*(L"Characteristics\*(R" field of the \s-1COFF\s0
+header is set to indicate that this executable supports virtual addresses
+greater than 2 gigabytes. This should be used in conjunction with the /3GB
+or /USERVA=\fIvalue\fR megabytes switch in the \*(L"[operating systems]\*(R"
+section of the \s-1BOOT\s0.INI. Otherwise, this bit has no effect.
+[This option is specific to \s-1PE\s0 targeted ports of the linker]
+.IP "\fB\-\-major\-image\-version\fR \fIvalue\fR" 4
+.IX Item "--major-image-version value"
+Sets the major number of the \*(L"image version\*(R". Defaults to 1.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-major\-os\-version\fR \fIvalue\fR" 4
+.IX Item "--major-os-version value"
+Sets the major number of the \*(L"os version\*(R". Defaults to 4.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-major\-subsystem\-version\fR \fIvalue\fR" 4
+.IX Item "--major-subsystem-version value"
+Sets the major number of the \*(L"subsystem version\*(R". Defaults to 4.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-minor\-image\-version\fR \fIvalue\fR" 4
+.IX Item "--minor-image-version value"
+Sets the minor number of the \*(L"image version\*(R". Defaults to 0.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-minor\-os\-version\fR \fIvalue\fR" 4
+.IX Item "--minor-os-version value"
+Sets the minor number of the \*(L"os version\*(R". Defaults to 0.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-minor\-subsystem\-version\fR \fIvalue\fR" 4
+.IX Item "--minor-subsystem-version value"
+Sets the minor number of the \*(L"subsystem version\*(R". Defaults to 0.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-output\-def\fR \fIfile\fR" 4
+.IX Item "--output-def file"
+The linker will create the file \fIfile\fR which will contain a \s-1DEF\s0
+file corresponding to the \s-1DLL\s0 the linker is generating. This \s-1DEF\s0 file
+(which should be called \f(CW\*(C`*.def\*(C'\fR) may be used to create an import
+library with \f(CW\*(C`dlltool\*(C'\fR or may be used as a reference to
+automatically or implicitly exported symbols.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-out\-implib\fR \fIfile\fR" 4
+.IX Item "--out-implib file"
+The linker will create the file \fIfile\fR which will contain an
+import lib corresponding to the \s-1DLL\s0 the linker is generating. This
+import lib (which should be called \f(CW\*(C`*.dll.a\*(C'\fR or \f(CW\*(C`*.a\*(C'\fR
+may be used to link clients against the generated \s-1DLL\s0; this behaviour
+makes it possible to skip a separate \f(CW\*(C`dlltool\*(C'\fR import library
+creation step.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-enable\-auto\-image\-base\fR" 4
+.IX Item "--enable-auto-image-base"
+Automatically choose the image base for DLLs, unless one is specified
+using the \f(CW\*(C`\-\-image\-base\*(C'\fR argument. By using a hash generated
+from the dllname to create unique image bases for each \s-1DLL\s0, in-memory
+collisions and relocations which can delay program execution are
+avoided.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-disable\-auto\-image\-base\fR" 4
+.IX Item "--disable-auto-image-base"
+Do not automatically generate a unique image base. If there is no
+user-specified image base (\f(CW\*(C`\-\-image\-base\*(C'\fR) then use the platform
+default.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-dll\-search\-prefix\fR \fIstring\fR" 4
+.IX Item "--dll-search-prefix string"
+When linking dynamically to a dll without an import library,
+search for \f(CW\*(C`<string><basename>.dll\*(C'\fR in preference to
+\&\f(CW\*(C`lib<basename>.dll\*(C'\fR. This behaviour allows easy distinction
+between DLLs built for the various \*(L"subplatforms\*(R": native, cygwin,
+uwin, pw, etc. For instance, cygwin DLLs typically use
+\&\f(CW\*(C`\-\-dll\-search\-prefix=cyg\*(C'\fR.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-enable\-auto\-import\fR" 4
+.IX Item "--enable-auto-import"
+Do sophisticated linking of \f(CW\*(C`_symbol\*(C'\fR to \f(CW\*(C`_\|_imp_\|_symbol\*(C'\fR for
+\&\s-1DATA\s0 imports from DLLs, and create the necessary thunking symbols when
+building the import libraries with those \s-1DATA\s0 exports. Note: Use of the
+\&'auto\-import' extension will cause the text section of the image file
+to be made writable. This does not conform to the PE-COFF format
+specification published by Microsoft.
+.Sp
+Note \- use of the 'auto\-import' extension will also cause read only
+data which would normally be placed into the .rdata section to be
+placed into the .data section instead. This is in order to work
+around a problem with consts that is described here:
+http://www.cygwin.com/ml/cygwin/2004\-09/msg01101.html
+.Sp
+Using 'auto\-import' generally will 'just work' \*(-- but sometimes you may
+see this message:
+.Sp
+"variable '<var>' can't be auto-imported. Please read the
+documentation for ld's \f(CW\*(C`\-\-enable\-auto\-import\*(C'\fR for details."
+.Sp
+This message occurs when some (sub)expression accesses an address
+ultimately given by the sum of two constants (Win32 import tables only
+allow one). Instances where this may occur include accesses to member
+fields of struct variables imported from a \s-1DLL\s0, as well as using a
+constant index into an array variable imported from a \s-1DLL\s0. Any
+multiword variable (arrays, structs, long long, etc) may trigger
+this error condition. However, regardless of the exact data type
+of the offending exported variable, ld will always detect it, issue
+the warning, and exit.
+.Sp
+There are several ways to address this difficulty, regardless of the
+data type of the exported variable:
+.Sp
+One way is to use \-\-enable\-runtime\-pseudo\-reloc switch. This leaves the task
+of adjusting references in your client code for runtime environment, so
+this method works only when runtime environment supports this feature.
+.Sp
+A second solution is to force one of the 'constants' to be a variable \*(--
+that is, unknown and un-optimizable at compile time. For arrays,
+there are two possibilities: a) make the indexee (the array's address)
+a variable, or b) make the 'constant' index a variable. Thus:
+.Sp
+.Vb 3
+\& extern type extern_array[];
+\& extern_array[1] \-\->
+\& { volatile type *t=extern_array; t[1] }
+.Ve
+.Sp
+or
+.Sp
+.Vb 3
+\& extern type extern_array[];
+\& extern_array[1] \-\->
+\& { volatile int t=1; extern_array[t] }
+.Ve
+.Sp
+For structs (and most other multiword data types) the only option
+is to make the struct itself (or the long long, or the ...) variable:
+.Sp
+.Vb 3
+\& extern struct s extern_struct;
+\& extern_struct.field \-\->
+\& { volatile struct s *t=&extern_struct; t\->field }
+.Ve
+.Sp
+or
+.Sp
+.Vb 3
+\& extern long long extern_ll;
+\& extern_ll \-\->
+\& { volatile long long * local_ll=&extern_ll; *local_ll }
+.Ve
+.Sp
+A third method of dealing with this difficulty is to abandon
+\&'auto\-import' for the offending symbol and mark it with
+\&\f(CW\*(C`_\|_declspec(dllimport)\*(C'\fR. However, in practise that
+requires using compile-time #defines to indicate whether you are
+building a \s-1DLL\s0, building client code that will link to the \s-1DLL\s0, or
+merely building/linking to a static library. In making the choice
+between the various methods of resolving the 'direct address with
+constant offset' problem, you should consider typical real-world usage:
+.Sp
+Original:
+.Sp
+.Vb 7
+\& \-\-foo.h
+\& extern int arr[];
+\& \-\-foo.c
+\& #include "foo.h"
+\& void main(int argc, char **argv){
+\& printf("%d\en",arr[1]);
+\& }
+.Ve
+.Sp
+Solution 1:
+.Sp
+.Vb 9
+\& \-\-foo.h
+\& extern int arr[];
+\& \-\-foo.c
+\& #include "foo.h"
+\& void main(int argc, char **argv){
+\& /* This workaround is for win32 and cygwin; do not "optimize" */
+\& volatile int *parr = arr;
+\& printf("%d\en",parr[1]);
+\& }
+.Ve
+.Sp
+Solution 2:
+.Sp
+.Vb 10
+\& \-\-foo.h
+\& /* Note: auto\-export is assumed (no _\|_declspec(dllexport)) */
+\& #if (defined(_WIN32) || defined(_\|_CYGWIN_\|_)) && \e
+\& !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC))
+\& #define FOO_IMPORT _\|_declspec(dllimport)
+\& #else
+\& #define FOO_IMPORT
+\& #endif
+\& extern FOO_IMPORT int arr[];
+\& \-\-foo.c
+\& #include "foo.h"
+\& void main(int argc, char **argv){
+\& printf("%d\en",arr[1]);
+\& }
+.Ve
+.Sp
+A fourth way to avoid this problem is to re-code your
+library to use a functional interface rather than a data interface
+for the offending variables (e.g. \fIset_foo()\fR and \fIget_foo()\fR accessor
+functions).
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-disable\-auto\-import\fR" 4
+.IX Item "--disable-auto-import"
+Do not attempt to do sophisticated linking of \f(CW\*(C`_symbol\*(C'\fR to
+\&\f(CW\*(C`_\|_imp_\|_symbol\*(C'\fR for \s-1DATA\s0 imports from DLLs.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-enable\-runtime\-pseudo\-reloc\fR" 4
+.IX Item "--enable-runtime-pseudo-reloc"
+If your code contains expressions described in \-\-enable\-auto\-import section,
+that is, \s-1DATA\s0 imports from \s-1DLL\s0 with non-zero offset, this switch will create
+a vector of 'runtime pseudo relocations' which can be used by runtime
+environment to adjust references to such data in your client code.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-disable\-runtime\-pseudo\-reloc\fR" 4
+.IX Item "--disable-runtime-pseudo-reloc"
+Do not create pseudo relocations for non-zero offset \s-1DATA\s0 imports from
+DLLs. This is the default.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-enable\-extra\-pe\-debug\fR" 4
+.IX Item "--enable-extra-pe-debug"
+Show additional debug info related to auto-import symbol thunking.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-section\-alignment\fR" 4
+.IX Item "--section-alignment"
+Sets the section alignment. Sections in memory will always begin at
+addresses which are a multiple of this number. Defaults to 0x1000.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-stack\fR \fIreserve\fR" 4
+.IX Item "--stack reserve"
+.PD 0
+.IP "\fB\-\-stack\fR \fIreserve\fR\fB,\fR\fIcommit\fR" 4
+.IX Item "--stack reserve,commit"
+.PD
+Specify the number of bytes of memory to reserve (and optionally commit)
+to be used as stack for this program. The default is 2Mb reserved, 4K
+committed.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-subsystem\fR \fIwhich\fR" 4
+.IX Item "--subsystem which"
+.PD 0
+.IP "\fB\-\-subsystem\fR \fIwhich\fR\fB:\fR\fImajor\fR" 4
+.IX Item "--subsystem which:major"
+.IP "\fB\-\-subsystem\fR \fIwhich\fR\fB:\fR\fImajor\fR\fB.\fR\fIminor\fR" 4
+.IX Item "--subsystem which:major.minor"
+.PD
+Specifies the subsystem under which your program will execute. The
+legal values for \fIwhich\fR are \f(CW\*(C`native\*(C'\fR, \f(CW\*(C`windows\*(C'\fR,
+\&\f(CW\*(C`console\*(C'\fR, \f(CW\*(C`posix\*(C'\fR, and \f(CW\*(C`xbox\*(C'\fR. You may optionally set
+the subsystem version also. Numeric values are also accepted for
+\&\fIwhich\fR.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.Sp
+The following options set flags in the \f(CW\*(C`DllCharacteristics\*(C'\fR field
+of the \s-1PE\s0 file header:
+[These options are specific to \s-1PE\s0 targeted ports of the linker]
+.IP "\fB\-\-dynamicbase\fR" 4
+.IX Item "--dynamicbase"
+The image base address may be relocated using address space layout
+randomization (\s-1ASLR\s0). This feature was introduced with \s-1MS\s0 Windows
+Vista for i386 \s-1PE\s0 targets.
+.IP "\fB\-\-forceinteg\fR" 4
+.IX Item "--forceinteg"
+Code integrity checks are enforced.
+.IP "\fB\-\-nxcompat\fR" 4
+.IX Item "--nxcompat"
+The image is compatible with the Data Execution Prevention.
+This feature was introduced with \s-1MS\s0 Windows \s-1XP\s0 \s-1SP2\s0 for i386 \s-1PE\s0 targets.
+.IP "\fB\-\-no\-isolation\fR" 4
+.IX Item "--no-isolation"
+Although the image understands isolation, do not isolate the image.
+.IP "\fB\-\-no\-seh\fR" 4
+.IX Item "--no-seh"
+The image does not use \s-1SEH\s0. No \s-1SE\s0 handler may be called from
+this image.
+.IP "\fB\-\-no\-bind\fR" 4
+.IX Item "--no-bind"
+Do not bind this image.
+.IP "\fB\-\-wdmdriver\fR" 4
+.IX Item "--wdmdriver"
+The driver uses the \s-1MS\s0 Windows Driver Model.
+.IP "\fB\-\-tsaware\fR" 4
+.IX Item "--tsaware"
+The image is Terminal Server aware.
+.PP
+The 68HC11 and 68HC12 linkers support specific options to control the
+memory bank switching mapping and trampoline code generation.
+.IP "\fB\-\-no\-trampoline\fR" 4
+.IX Item "--no-trampoline"
+This option disables the generation of trampoline. By default a trampoline
+is generated for each far function which is called using a \f(CW\*(C`jsr\*(C'\fR
+instruction (this happens when a pointer to a far function is taken).
+.IP "\fB\-\-bank\-window\fR \fIname\fR" 4
+.IX Item "--bank-window name"
+This option indicates to the linker the name of the memory region in
+the \fB\s-1MEMORY\s0\fR specification that describes the memory bank window.
+The definition of such region is then used by the linker to compute
+paging and addresses within the memory window.
+.PP
+The following options are supported to control handling of \s-1GOT\s0 generation
+when linking for 68K targets.
+.IP "\fB\-\-got=\fR\fItype\fR" 4
+.IX Item "--got=type"
+This option tells the linker which \s-1GOT\s0 generation scheme to use.
+\&\fItype\fR should be one of \fBsingle\fR, \fBnegative\fR,
+\&\fBmultigot\fR or \fBtarget\fR. For more information refer to the
+Info entry for \fIld\fR.
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+You can change the behaviour of \fBld\fR with the environment variables
+\&\f(CW\*(C`GNUTARGET\*(C'\fR,
+\&\f(CW\*(C`LDEMULATION\*(C'\fR and \f(CW\*(C`COLLECT_NO_DEMANGLE\*(C'\fR.
+.PP
+\&\f(CW\*(C`GNUTARGET\*(C'\fR determines the input-file object format if you don't
+use \fB\-b\fR (or its synonym \fB\-\-format\fR). Its value should be one
+of the \s-1BFD\s0 names for an input format. If there is no
+\&\f(CW\*(C`GNUTARGET\*(C'\fR in the environment, \fBld\fR uses the natural format
+of the target. If \f(CW\*(C`GNUTARGET\*(C'\fR is set to \f(CW\*(C`default\*(C'\fR then \s-1BFD\s0
+attempts to discover the input format by examining binary input files;
+this method often succeeds, but there are potential ambiguities, since
+there is no method of ensuring that the magic number used to specify
+object-file formats is unique. However, the configuration procedure for
+\&\s-1BFD\s0 on each system places the conventional format for that system first
+in the search-list, so ambiguities are resolved in favor of convention.
+.PP
+\&\f(CW\*(C`LDEMULATION\*(C'\fR determines the default emulation if you don't use the
+\&\fB\-m\fR option. The emulation can affect various aspects of linker
+behaviour, particularly the default linker script. You can list the
+available emulations with the \fB\-\-verbose\fR or \fB\-V\fR options. If
+the \fB\-m\fR option is not used, and the \f(CW\*(C`LDEMULATION\*(C'\fR environment
+variable is not defined, the default emulation depends upon how the
+linker was configured.
+.PP
+Normally, the linker will default to demangling symbols. However, if
+\&\f(CW\*(C`COLLECT_NO_DEMANGLE\*(C'\fR is set in the environment, then it will
+default to not demangling symbols. This environment variable is used in
+a similar fashion by the \f(CW\*(C`gcc\*(C'\fR linker wrapper program. The default
+may be overridden by the \fB\-\-demangle\fR and \fB\-\-no\-demangle\fR
+options.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIar\fR\|(1), \fInm\fR\|(1), \fIobjcopy\fR\|(1), \fIobjdump\fR\|(1), \fIreadelf\fR\|(1) and
+the Info entries for \fIbinutils\fR and
+\&\fIld\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts. A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/ld/ld.info b/ld/ld.info
new file mode 100644
index 0000000..6022958
--- /dev/null
+++ b/ld/ld.info
@@ -0,0 +1,7611 @@
+This is ld.info, produced by makeinfo version 4.8 from ld.texinfo.
+
+START-INFO-DIR-ENTRY
+* Ld: (ld). The GNU linker.
+END-INFO-DIR-ENTRY
+
+ This file documents the GNU linker LD (GNU Binutils) version 2.20.
+
+ Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
+Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts. A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+
+File: ld.info, Node: Top, Next: Overview, Up: (dir)
+
+LD
+**
+
+This file documents the GNU linker ld (GNU Binutils) version 2.20.
+
+ This document is distributed under the terms of the GNU Free
+Documentation License version 1.3. A copy of the license is included
+in the section entitled "GNU Free Documentation License".
+
+* Menu:
+
+* Overview:: Overview
+* Invocation:: Invocation
+* Scripts:: Linker Scripts
+
+* Machine Dependent:: Machine Dependent Features
+
+* BFD:: BFD
+
+* Reporting Bugs:: Reporting Bugs
+* MRI:: MRI Compatible Script Files
+* GNU Free Documentation License:: GNU Free Documentation License
+* LD Index:: LD Index
+
+
+File: ld.info, Node: Overview, Next: Invocation, Prev: Top, Up: Top
+
+1 Overview
+**********
+
+`ld' combines a number of object and archive files, relocates their
+data and ties up symbol references. Usually the last step in compiling
+a program is to run `ld'.
+
+ `ld' accepts Linker Command Language files written in a superset of
+AT&T's Link Editor Command Language syntax, to provide explicit and
+total control over the linking process.
+
+ This version of `ld' uses the general purpose BFD libraries to
+operate on object files. This allows `ld' to read, combine, and write
+object files in many different formats--for example, COFF or `a.out'.
+Different formats may be linked together to produce any available kind
+of object file. *Note BFD::, for more information.
+
+ Aside from its flexibility, the GNU linker is more helpful than other
+linkers in providing diagnostic information. Many linkers abandon
+execution immediately upon encountering an error; whenever possible,
+`ld' continues executing, allowing you to identify other errors (or, in
+some cases, to get an output file in spite of the error).
+
+
+File: ld.info, Node: Invocation, Next: Scripts, Prev: Overview, Up: Top
+
+2 Invocation
+************
+
+The GNU linker `ld' is meant to cover a broad range of situations, and
+to be as compatible as possible with other linkers. As a result, you
+have many choices to control its behavior.
+
+* Menu:
+
+* Options:: Command Line Options
+* Environment:: Environment Variables
+
+
+File: ld.info, Node: Options, Next: Environment, Up: Invocation
+
+2.1 Command Line Options
+========================
+
+ The linker supports a plethora of command-line options, but in actual
+practice few of them are used in any particular context. For instance,
+a frequent use of `ld' is to link standard Unix object files on a
+standard, supported Unix system. On such a system, to link a file
+`hello.o':
+
+ ld -o OUTPUT /lib/crt0.o hello.o -lc
+
+ This tells `ld' to produce a file called OUTPUT as the result of
+linking the file `/lib/crt0.o' with `hello.o' and the library `libc.a',
+which will come from the standard search directories. (See the
+discussion of the `-l' option below.)
+
+ Some of the command-line options to `ld' may be specified at any
+point in the command line. However, options which refer to files, such
+as `-l' or `-T', cause the file to be read at the point at which the
+option appears in the command line, relative to the object files and
+other file options. Repeating non-file options with a different
+argument will either have no further effect, or override prior
+occurrences (those further to the left on the command line) of that
+option. Options which may be meaningfully specified more than once are
+noted in the descriptions below.
+
+ Non-option arguments are object files or archives which are to be
+linked together. They may follow, precede, or be mixed in with
+command-line options, except that an object file argument may not be
+placed between an option and its argument.
+
+ Usually the linker is invoked with at least one object file, but you
+can specify other forms of binary input files using `-l', `-R', and the
+script command language. If _no_ binary input files at all are
+specified, the linker does not produce any output, and issues the
+message `No input files'.
+
+ If the linker cannot recognize the format of an object file, it will
+assume that it is a linker script. A script specified in this way
+augments the main linker script used for the link (either the default
+linker script or the one specified by using `-T'). This feature
+permits the linker to link against a file which appears to be an object
+or an archive, but actually merely defines some symbol values, or uses
+`INPUT' or `GROUP' to load other objects. Specifying a script in this
+way merely augments the main linker script, with the extra commands
+placed after the main script; use the `-T' option to replace the
+default linker script entirely, but note the effect of the `INSERT'
+command. *Note Scripts::.
+
+ For options whose names are a single letter, option arguments must
+either follow the option letter without intervening whitespace, or be
+given as separate arguments immediately following the option that
+requires them.
+
+ For options whose names are multiple letters, either one dash or two
+can precede the option name; for example, `-trace-symbol' and
+`--trace-symbol' are equivalent. Note--there is one exception to this
+rule. Multiple letter options that start with a lower case 'o' can
+only be preceded by two dashes. This is to reduce confusion with the
+`-o' option. So for example `-omagic' sets the output file name to
+`magic' whereas `--omagic' sets the NMAGIC flag on the output.
+
+ Arguments to multiple-letter options must either be separated from
+the option name by an equals sign, or be given as separate arguments
+immediately following the option that requires them. For example,
+`--trace-symbol foo' and `--trace-symbol=foo' are equivalent. Unique
+abbreviations of the names of multiple-letter options are accepted.
+
+ Note--if the linker is being invoked indirectly, via a compiler
+driver (e.g. `gcc') then all the linker command line options should be
+prefixed by `-Wl,' (or whatever is appropriate for the particular
+compiler driver) like this:
+
+ gcc -Wl,--start-group foo.o bar.o -Wl,--end-group
+
+ This is important, because otherwise the compiler driver program may
+silently drop the linker options, resulting in a bad link. Confusion
+may also arise when passing options that require values through a
+driver, as the use of a space between option and argument acts as a
+separator, and causes the driver to pass only the option to the linker
+and the argument to the compiler. In this case, it is simplest to use
+the joined forms of both single- and multiple-letter options, such as:
+
+ gcc foo.o bar.o -Wl,-eENTRY -Wl,-Map=a.map
+
+ Here is a table of the generic command line switches accepted by the
+GNU linker:
+
+`@FILE'
+ Read command-line options from FILE. The options read are
+ inserted in place of the original @FILE option. If FILE does not
+ exist, or cannot be read, then the option will be treated
+ literally, and not removed.
+
+ Options in FILE are separated by whitespace. A whitespace
+ character may be included in an option by surrounding the entire
+ option in either single or double quotes. Any character
+ (including a backslash) may be included by prefixing the character
+ to be included with a backslash. The FILE may itself contain
+ additional @FILE options; any such options will be processed
+ recursively.
+
+`-a KEYWORD'
+ This option is supported for HP/UX compatibility. The KEYWORD
+ argument must be one of the strings `archive', `shared', or
+ `default'. `-aarchive' is functionally equivalent to `-Bstatic',
+ and the other two keywords are functionally equivalent to
+ `-Bdynamic'. This option may be used any number of times.
+
+`-A ARCHITECTURE'
+`--architecture=ARCHITECTURE'
+ In the current release of `ld', this option is useful only for the
+ Intel 960 family of architectures. In that `ld' configuration, the
+ ARCHITECTURE argument identifies the particular architecture in
+ the 960 family, enabling some safeguards and modifying the
+ archive-library search path. *Note `ld' and the Intel 960 family:
+ i960, for details.
+
+ Future releases of `ld' may support similar functionality for
+ other architecture families.
+
+`-b INPUT-FORMAT'
+`--format=INPUT-FORMAT'
+ `ld' may be configured to support more than one kind of object
+ file. If your `ld' is configured this way, you can use the `-b'
+ option to specify the binary format for input object files that
+ follow this option on the command line. Even when `ld' is
+ configured to support alternative object formats, you don't
+ usually need to specify this, as `ld' should be configured to
+ expect as a default input format the most usual format on each
+ machine. INPUT-FORMAT is a text string, the name of a particular
+ format supported by the BFD libraries. (You can list the
+ available binary formats with `objdump -i'.) *Note BFD::.
+
+ You may want to use this option if you are linking files with an
+ unusual binary format. You can also use `-b' to switch formats
+ explicitly (when linking object files of different formats), by
+ including `-b INPUT-FORMAT' before each group of object files in a
+ particular format.
+
+ The default format is taken from the environment variable
+ `GNUTARGET'. *Note Environment::. You can also define the input
+ format from a script, using the command `TARGET'; see *Note Format
+ Commands::.
+
+`-c MRI-COMMANDFILE'
+`--mri-script=MRI-COMMANDFILE'
+ For compatibility with linkers produced by MRI, `ld' accepts script
+ files written in an alternate, restricted command language,
+ described in *Note MRI Compatible Script Files: MRI. Introduce
+ MRI script files with the option `-c'; use the `-T' option to run
+ linker scripts written in the general-purpose `ld' scripting
+ language. If MRI-CMDFILE does not exist, `ld' looks for it in the
+ directories specified by any `-L' options.
+
+`-d'
+`-dc'
+`-dp'
+ These three options are equivalent; multiple forms are supported
+ for compatibility with other linkers. They assign space to common
+ symbols even if a relocatable output file is specified (with
+ `-r'). The script command `FORCE_COMMON_ALLOCATION' has the same
+ effect. *Note Miscellaneous Commands::.
+
+`-e ENTRY'
+`--entry=ENTRY'
+ Use ENTRY as the explicit symbol for beginning execution of your
+ program, rather than the default entry point. If there is no
+ symbol named ENTRY, the linker will try to parse ENTRY as a number,
+ and use that as the entry address (the number will be interpreted
+ in base 10; you may use a leading `0x' for base 16, or a leading
+ `0' for base 8). *Note Entry Point::, for a discussion of defaults
+ and other ways of specifying the entry point.
+
+`--exclude-libs LIB,LIB,...'
+ Specifies a list of archive libraries from which symbols should
+ not be automatically exported. The library names may be delimited
+ by commas or colons. Specifying `--exclude-libs ALL' excludes
+ symbols in all archive libraries from automatic export. This
+ option is available only for the i386 PE targeted port of the
+ linker and for ELF targeted ports. For i386 PE, symbols
+ explicitly listed in a .def file are still exported, regardless of
+ this option. For ELF targeted ports, symbols affected by this
+ option will be treated as hidden.
+
+`--exclude-modules-for-implib MODULE,MODULE,...'
+ Specifies a list of object files or archive members, from which
+ symbols should not be automatically exported, but which should be
+ copied wholesale into the import library being generated during
+ the link. The module names may be delimited by commas or colons,
+ and must match exactly the filenames used by `ld' to open the
+ files; for archive members, this is simply the member name, but
+ for object files the name listed must include and match precisely
+ any path used to specify the input file on the linker's
+ command-line. This option is available only for the i386 PE
+ targeted port of the linker. Symbols explicitly listed in a .def
+ file are still exported, regardless of this option.
+
+`-E'
+`--export-dynamic'
+`--no-export-dynamic'
+ When creating a dynamically linked executable, using the `-E'
+ option or the `--export-dynamic' option causes the linker to add
+ all symbols to the dynamic symbol table. The dynamic symbol table
+ is the set of symbols which are visible from dynamic objects at
+ run time.
+
+ If you do not use either of these options (or use the
+ `--no-export-dynamic' option to restore the default behavior), the
+ dynamic symbol table will normally contain only those symbols
+ which are referenced by some dynamic object mentioned in the link.
+
+ If you use `dlopen' to load a dynamic object which needs to refer
+ back to the symbols defined by the program, rather than some other
+ dynamic object, then you will probably need to use this option when
+ linking the program itself.
+
+ You can also use the dynamic list to control what symbols should
+ be added to the dynamic symbol table if the output format supports
+ it. See the description of `--dynamic-list'.
+
+ Note that this option is specific to ELF targeted ports. PE
+ targets support a similar function to export all symbols from a
+ DLL or EXE; see the description of `--export-all-symbols' below.
+
+`-EB'
+ Link big-endian objects. This affects the default output format.
+
+`-EL'
+ Link little-endian objects. This affects the default output
+ format.
+
+`-f NAME'
+`--auxiliary=NAME'
+ When creating an ELF shared object, set the internal DT_AUXILIARY
+ field to the specified name. This tells the dynamic linker that
+ the symbol table of the shared object should be used as an
+ auxiliary filter on the symbol table of the shared object NAME.
+
+ If you later link a program against this filter object, then, when
+ you run the program, the dynamic linker will see the DT_AUXILIARY
+ field. If the dynamic linker resolves any symbols from the filter
+ object, it will first check whether there is a definition in the
+ shared object NAME. If there is one, it will be used instead of
+ the definition in the filter object. The shared object NAME need
+ not exist. Thus the shared object NAME may be used to provide an
+ alternative implementation of certain functions, perhaps for
+ debugging or for machine specific performance.
+
+ This option may be specified more than once. The DT_AUXILIARY
+ entries will be created in the order in which they appear on the
+ command line.
+
+`-F NAME'
+`--filter=NAME'
+ When creating an ELF shared object, set the internal DT_FILTER
+ field to the specified name. This tells the dynamic linker that
+ the symbol table of the shared object which is being created
+ should be used as a filter on the symbol table of the shared
+ object NAME.
+
+ If you later link a program against this filter object, then, when
+ you run the program, the dynamic linker will see the DT_FILTER
+ field. The dynamic linker will resolve symbols according to the
+ symbol table of the filter object as usual, but it will actually
+ link to the definitions found in the shared object NAME. Thus the
+ filter object can be used to select a subset of the symbols
+ provided by the object NAME.
+
+ Some older linkers used the `-F' option throughout a compilation
+ toolchain for specifying object-file format for both input and
+ output object files. The GNU linker uses other mechanisms for
+ this purpose: the `-b', `--format', `--oformat' options, the
+ `TARGET' command in linker scripts, and the `GNUTARGET'
+ environment variable. The GNU linker will ignore the `-F' option
+ when not creating an ELF shared object.
+
+`-fini=NAME'
+ When creating an ELF executable or shared object, call NAME when
+ the executable or shared object is unloaded, by setting DT_FINI to
+ the address of the function. By default, the linker uses `_fini'
+ as the function to call.
+
+`-g'
+ Ignored. Provided for compatibility with other tools.
+
+`-G VALUE'
+`--gpsize=VALUE'
+ Set the maximum size of objects to be optimized using the GP
+ register to SIZE. This is only meaningful for object file formats
+ such as MIPS ECOFF which supports putting large and small objects
+ into different sections. This is ignored for other object file
+ formats.
+
+`-h NAME'
+`-soname=NAME'
+ When creating an ELF shared object, set the internal DT_SONAME
+ field to the specified name. When an executable is linked with a
+ shared object which has a DT_SONAME field, then when the
+ executable is run the dynamic linker will attempt to load the
+ shared object specified by the DT_SONAME field rather than the
+ using the file name given to the linker.
+
+`-i'
+ Perform an incremental link (same as option `-r').
+
+`-init=NAME'
+ When creating an ELF executable or shared object, call NAME when
+ the executable or shared object is loaded, by setting DT_INIT to
+ the address of the function. By default, the linker uses `_init'
+ as the function to call.
+
+`-l NAMESPEC'
+`--library=NAMESPEC'
+ Add the archive or object file specified by NAMESPEC to the list
+ of files to link. This option may be used any number of times.
+ If NAMESPEC is of the form `:FILENAME', `ld' will search the
+ library path for a file called FILENAME, otherwise it will search
+ the library path for a file called `libNAMESPEC.a'.
+
+ On systems which support shared libraries, `ld' may also search for
+ files other than `libNAMESPEC.a'. Specifically, on ELF and SunOS
+ systems, `ld' will search a directory for a library called
+ `libNAMESPEC.so' before searching for one called `libNAMESPEC.a'.
+ (By convention, a `.so' extension indicates a shared library.)
+ Note that this behavior does not apply to `:FILENAME', which
+ always specifies a file called FILENAME.
+
+ The linker will search an archive only once, at the location where
+ it is specified on the command line. If the archive defines a
+ symbol which was undefined in some object which appeared before
+ the archive on the command line, the linker will include the
+ appropriate file(s) from the archive. However, an undefined
+ symbol in an object appearing later on the command line will not
+ cause the linker to search the archive again.
+
+ See the `-(' option for a way to force the linker to search
+ archives multiple times.
+
+ You may list the same archive multiple times on the command line.
+
+ This type of archive searching is standard for Unix linkers.
+ However, if you are using `ld' on AIX, note that it is different
+ from the behaviour of the AIX linker.
+
+`-L SEARCHDIR'
+`--library-path=SEARCHDIR'
+ Add path SEARCHDIR to the list of paths that `ld' will search for
+ archive libraries and `ld' control scripts. You may use this
+ option any number of times. The directories are searched in the
+ order in which they are specified on the command line.
+ Directories specified on the command line are searched before the
+ default directories. All `-L' options apply to all `-l' options,
+ regardless of the order in which the options appear. `-L' options
+ do not affect how `ld' searches for a linker script unless `-T'
+ option is specified.
+
+ If SEARCHDIR begins with `=', then the `=' will be replaced by the
+ "sysroot prefix", a path specified when the linker is configured.
+
+ The default set of paths searched (without being specified with
+ `-L') depends on which emulation mode `ld' is using, and in some
+ cases also on how it was configured. *Note Environment::.
+
+ The paths can also be specified in a link script with the
+ `SEARCH_DIR' command. Directories specified this way are searched
+ at the point in which the linker script appears in the command
+ line.
+
+`-m EMULATION'
+ Emulate the EMULATION linker. You can list the available
+ emulations with the `--verbose' or `-V' options.
+
+ If the `-m' option is not used, the emulation is taken from the
+ `LDEMULATION' environment variable, if that is defined.
+
+ Otherwise, the default emulation depends upon how the linker was
+ configured.
+
+`-M'
+`--print-map'
+ Print a link map to the standard output. A link map provides
+ information about the link, including the following:
+
+ * Where object files are mapped into memory.
+
+ * How common symbols are allocated.
+
+ * All archive members included in the link, with a mention of
+ the symbol which caused the archive member to be brought in.
+
+ * The values assigned to symbols.
+
+ Note - symbols whose values are computed by an expression
+ which involves a reference to a previous value of the same
+ symbol may not have correct result displayed in the link map.
+ This is because the linker discards intermediate results and
+ only retains the final value of an expression. Under such
+ circumstances the linker will display the final value
+ enclosed by square brackets. Thus for example a linker
+ script containing:
+
+ foo = 1
+ foo = foo * 4
+ foo = foo + 8
+
+ will produce the following output in the link map if the `-M'
+ option is used:
+
+ 0x00000001 foo = 0x1
+ [0x0000000c] foo = (foo * 0x4)
+ [0x0000000c] foo = (foo + 0x8)
+
+ See *Note Expressions:: for more information about
+ expressions in linker scripts.
+
+`-n'
+`--nmagic'
+ Turn off page alignment of sections, and mark the output as
+ `NMAGIC' if possible.
+
+`-N'
+`--omagic'
+ Set the text and data sections to be readable and writable. Also,
+ do not page-align the data segment, and disable linking against
+ shared libraries. If the output format supports Unix style magic
+ numbers, mark the output as `OMAGIC'. Note: Although a writable
+ text section is allowed for PE-COFF targets, it does not conform
+ to the format specification published by Microsoft.
+
+`--no-omagic'
+ This option negates most of the effects of the `-N' option. It
+ sets the text section to be read-only, and forces the data segment
+ to be page-aligned. Note - this option does not enable linking
+ against shared libraries. Use `-Bdynamic' for this.
+
+`-o OUTPUT'
+`--output=OUTPUT'
+ Use OUTPUT as the name for the program produced by `ld'; if this
+ option is not specified, the name `a.out' is used by default. The
+ script command `OUTPUT' can also specify the output file name.
+
+`-O LEVEL'
+ If LEVEL is a numeric values greater than zero `ld' optimizes the
+ output. This might take significantly longer and therefore
+ probably should only be enabled for the final binary. At the
+ moment this option only affects ELF shared library generation.
+ Future releases of the linker may make more use of this option.
+ Also currently there is no difference in the linker's behaviour
+ for different non-zero values of this option. Again this may
+ change with future releases.
+
+`-q'
+`--emit-relocs'
+ Leave relocation sections and contents in fully linked executables.
+ Post link analysis and optimization tools may need this
+ information in order to perform correct modifications of
+ executables. This results in larger executables.
+
+ This option is currently only supported on ELF platforms.
+
+`--force-dynamic'
+ Force the output file to have dynamic sections. This option is
+ specific to VxWorks targets.
+
+`-r'
+`--relocatable'
+ Generate relocatable output--i.e., generate an output file that
+ can in turn serve as input to `ld'. This is often called "partial
+ linking". As a side effect, in environments that support standard
+ Unix magic numbers, this option also sets the output file's magic
+ number to `OMAGIC'. If this option is not specified, an absolute
+ file is produced. When linking C++ programs, this option _will
+ not_ resolve references to constructors; to do that, use `-Ur'.
+
+ When an input file does not have the same format as the output
+ file, partial linking is only supported if that input file does
+ not contain any relocations. Different output formats can have
+ further restrictions; for example some `a.out'-based formats do
+ not support partial linking with input files in other formats at
+ all.
+
+ This option does the same thing as `-i'.
+
+`-R FILENAME'
+`--just-symbols=FILENAME'
+ Read symbol names and their addresses from FILENAME, but do not
+ relocate it or include it in the output. This allows your output
+ file to refer symbolically to absolute locations of memory defined
+ in other programs. You may use this option more than once.
+
+ For compatibility with other ELF linkers, if the `-R' option is
+ followed by a directory name, rather than a file name, it is
+ treated as the `-rpath' option.
+
+`-s'
+`--strip-all'
+ Omit all symbol information from the output file.
+
+`-S'
+`--strip-debug'
+ Omit debugger symbol information (but not all symbols) from the
+ output file.
+
+`-t'
+`--trace'
+ Print the names of the input files as `ld' processes them.
+
+`-T SCRIPTFILE'
+`--script=SCRIPTFILE'
+ Use SCRIPTFILE as the linker script. This script replaces `ld''s
+ default linker script (rather than adding to it), so COMMANDFILE
+ must specify everything necessary to describe the output file.
+ *Note Scripts::. If SCRIPTFILE does not exist in the current
+ directory, `ld' looks for it in the directories specified by any
+ preceding `-L' options. Multiple `-T' options accumulate.
+
+`-dT SCRIPTFILE'
+`--default-script=SCRIPTFILE'
+ Use SCRIPTFILE as the default linker script. *Note Scripts::.
+
+ This option is similar to the `--script' option except that
+ processing of the script is delayed until after the rest of the
+ command line has been processed. This allows options placed after
+ the `--default-script' option on the command line to affect the
+ behaviour of the linker script, which can be important when the
+ linker command line cannot be directly controlled by the user.
+ (eg because the command line is being constructed by another tool,
+ such as `gcc').
+
+`-u SYMBOL'
+`--undefined=SYMBOL'
+ Force SYMBOL to be entered in the output file as an undefined
+ symbol. Doing this may, for example, trigger linking of additional
+ modules from standard libraries. `-u' may be repeated with
+ different option arguments to enter additional undefined symbols.
+ This option is equivalent to the `EXTERN' linker script command.
+
+`-Ur'
+ For anything other than C++ programs, this option is equivalent to
+ `-r': it generates relocatable output--i.e., an output file that
+ can in turn serve as input to `ld'. When linking C++ programs,
+ `-Ur' _does_ resolve references to constructors, unlike `-r'. It
+ does not work to use `-Ur' on files that were themselves linked
+ with `-Ur'; once the constructor table has been built, it cannot
+ be added to. Use `-Ur' only for the last partial link, and `-r'
+ for the others.
+
+`--unique[=SECTION]'
+ Creates a separate output section for every input section matching
+ SECTION, or if the optional wildcard SECTION argument is missing,
+ for every orphan input section. An orphan section is one not
+ specifically mentioned in a linker script. You may use this option
+ multiple times on the command line; It prevents the normal
+ merging of input sections with the same name, overriding output
+ section assignments in a linker script.
+
+`-v'
+`--version'
+`-V'
+ Display the version number for `ld'. The `-V' option also lists
+ the supported emulations.
+
+`-x'
+`--discard-all'
+ Delete all local symbols.
+
+`-X'
+`--discard-locals'
+ Delete all temporary local symbols. (These symbols start with
+ system-specific local label prefixes, typically `.L' for ELF
+ systems or `L' for traditional a.out systems.)
+
+`-y SYMBOL'
+`--trace-symbol=SYMBOL'
+ Print the name of each linked file in which SYMBOL appears. This
+ option may be given any number of times. On many systems it is
+ necessary to prepend an underscore.
+
+ This option is useful when you have an undefined symbol in your
+ link but don't know where the reference is coming from.
+
+`-Y PATH'
+ Add PATH to the default library search path. This option exists
+ for Solaris compatibility.
+
+`-z KEYWORD'
+ The recognized keywords are:
+ `combreloc'
+ Combines multiple reloc sections and sorts them to make
+ dynamic symbol lookup caching possible.
+
+ `defs'
+ Disallows undefined symbols in object files. Undefined
+ symbols in shared libraries are still allowed.
+
+ `execstack'
+ Marks the object as requiring executable stack.
+
+ `initfirst'
+ This option is only meaningful when building a shared object.
+ It marks the object so that its runtime initialization will
+ occur before the runtime initialization of any other objects
+ brought into the process at the same time. Similarly the
+ runtime finalization of the object will occur after the
+ runtime finalization of any other objects.
+
+ `interpose'
+ Marks the object that its symbol table interposes before all
+ symbols but the primary executable.
+
+ `lazy'
+ When generating an executable or shared library, mark it to
+ tell the dynamic linker to defer function call resolution to
+ the point when the function is called (lazy binding), rather
+ than at load time. Lazy binding is the default.
+
+ `loadfltr'
+ Marks the object that its filters be processed immediately at
+ runtime.
+
+ `muldefs'
+ Allows multiple definitions.
+
+ `nocombreloc'
+ Disables multiple reloc sections combining.
+
+ `nocopyreloc'
+ Disables production of copy relocs.
+
+ `nodefaultlib'
+ Marks the object that the search for dependencies of this
+ object will ignore any default library search paths.
+
+ `nodelete'
+ Marks the object shouldn't be unloaded at runtime.
+
+ `nodlopen'
+ Marks the object not available to `dlopen'.
+
+ `nodump'
+ Marks the object can not be dumped by `dldump'.
+
+ `noexecstack'
+ Marks the object as not requiring executable stack.
+
+ `norelro'
+ Don't create an ELF `PT_GNU_RELRO' segment header in the
+ object.
+
+ `now'
+ When generating an executable or shared library, mark it to
+ tell the dynamic linker to resolve all symbols when the
+ program is started, or when the shared library is linked to
+ using dlopen, instead of deferring function call resolution
+ to the point when the function is first called.
+
+ `origin'
+ Marks the object may contain $ORIGIN.
+
+ `relro'
+ Create an ELF `PT_GNU_RELRO' segment header in the object.
+
+ `max-page-size=VALUE'
+ Set the emulation maximum page size to VALUE.
+
+ `common-page-size=VALUE'
+ Set the emulation common page size to VALUE.
+
+
+ Other keywords are ignored for Solaris compatibility.
+
+`-( ARCHIVES -)'
+`--start-group ARCHIVES --end-group'
+ The ARCHIVES should be a list of archive files. They may be
+ either explicit file names, or `-l' options.
+
+ The specified archives are searched repeatedly until no new
+ undefined references are created. Normally, an archive is
+ searched only once in the order that it is specified on the
+ command line. If a symbol in that archive is needed to resolve an
+ undefined symbol referred to by an object in an archive that
+ appears later on the command line, the linker would not be able to
+ resolve that reference. By grouping the archives, they all be
+ searched repeatedly until all possible references are resolved.
+
+ Using this option has a significant performance cost. It is best
+ to use it only when there are unavoidable circular references
+ between two or more archives.
+
+`--accept-unknown-input-arch'
+`--no-accept-unknown-input-arch'
+ Tells the linker to accept input files whose architecture cannot be
+ recognised. The assumption is that the user knows what they are
+ doing and deliberately wants to link in these unknown input files.
+ This was the default behaviour of the linker, before release
+ 2.14. The default behaviour from release 2.14 onwards is to
+ reject such input files, and so the `--accept-unknown-input-arch'
+ option has been added to restore the old behaviour.
+
+`--as-needed'
+`--no-as-needed'
+ This option affects ELF DT_NEEDED tags for dynamic libraries
+ mentioned on the command line after the `--as-needed' option.
+ Normally, the linker will add a DT_NEEDED tag for each dynamic
+ library mentioned on the command line, regardless of whether the
+ library is actually needed. `--as-needed' causes a DT_NEEDED tag
+ to only be emitted for a library that satisfies a symbol reference
+ from regular objects which is undefined at the point that the
+ library was linked, or, if the library is not found in the
+ DT_NEEDED lists of other libraries linked up to that point, a
+ reference from another dynamic library. `--no-as-needed' restores
+ the default behaviour.
+
+`--add-needed'
+`--no-add-needed'
+ This option affects the treatment of dynamic libraries from ELF
+ DT_NEEDED tags in dynamic libraries mentioned on the command line
+ after the `--no-add-needed' option. Normally, the linker will add
+ a DT_NEEDED tag for each dynamic library from DT_NEEDED tags.
+ `--no-add-needed' causes DT_NEEDED tags will never be emitted for
+ those libraries from DT_NEEDED tags. `--add-needed' restores the
+ default behaviour.
+
+`-assert KEYWORD'
+ This option is ignored for SunOS compatibility.
+
+`-Bdynamic'
+`-dy'
+`-call_shared'
+ Link against dynamic libraries. This is only meaningful on
+ platforms for which shared libraries are supported. This option
+ is normally the default on such platforms. The different variants
+ of this option are for compatibility with various systems. You
+ may use this option multiple times on the command line: it affects
+ library searching for `-l' options which follow it.
+
+`-Bgroup'
+ Set the `DF_1_GROUP' flag in the `DT_FLAGS_1' entry in the dynamic
+ section. This causes the runtime linker to handle lookups in this
+ object and its dependencies to be performed only inside the group.
+ `--unresolved-symbols=report-all' is implied. This option is only
+ meaningful on ELF platforms which support shared libraries.
+
+`-Bstatic'
+`-dn'
+`-non_shared'
+`-static'
+ Do not link against shared libraries. This is only meaningful on
+ platforms for which shared libraries are supported. The different
+ variants of this option are for compatibility with various
+ systems. You may use this option multiple times on the command
+ line: it affects library searching for `-l' options which follow
+ it. This option also implies `--unresolved-symbols=report-all'.
+ This option can be used with `-shared'. Doing so means that a
+ shared library is being created but that all of the library's
+ external references must be resolved by pulling in entries from
+ static libraries.
+
+`-Bsymbolic'
+ When creating a shared library, bind references to global symbols
+ to the definition within the shared library, if any. Normally, it
+ is possible for a program linked against a shared library to
+ override the definition within the shared library. This option is
+ only meaningful on ELF platforms which support shared libraries.
+
+`-Bsymbolic-functions'
+ When creating a shared library, bind references to global function
+ symbols to the definition within the shared library, if any. This
+ option is only meaningful on ELF platforms which support shared
+ libraries.
+
+`--dynamic-list=DYNAMIC-LIST-FILE'
+ Specify the name of a dynamic list file to the linker. This is
+ typically used when creating shared libraries to specify a list of
+ global symbols whose references shouldn't be bound to the
+ definition within the shared library, or creating dynamically
+ linked executables to specify a list of symbols which should be
+ added to the symbol table in the executable. This option is only
+ meaningful on ELF platforms which support shared libraries.
+
+ The format of the dynamic list is the same as the version node
+ without scope and node name. See *Note VERSION:: for more
+ information.
+
+`--dynamic-list-data'
+ Include all global data symbols to the dynamic list.
+
+`--dynamic-list-cpp-new'
+ Provide the builtin dynamic list for C++ operator new and delete.
+ It is mainly useful for building shared libstdc++.
+
+`--dynamic-list-cpp-typeinfo'
+ Provide the builtin dynamic list for C++ runtime type
+ identification.
+
+`--check-sections'
+`--no-check-sections'
+ Asks the linker _not_ to check section addresses after they have
+ been assigned to see if there are any overlaps. Normally the
+ linker will perform this check, and if it finds any overlaps it
+ will produce suitable error messages. The linker does know about,
+ and does make allowances for sections in overlays. The default
+ behaviour can be restored by using the command line switch
+ `--check-sections'. Section overlap is not usually checked for
+ relocatable links. You can force checking in that case by using
+ the `--check-sections' option.
+
+`--cref'
+ Output a cross reference table. If a linker map file is being
+ generated, the cross reference table is printed to the map file.
+ Otherwise, it is printed on the standard output.
+
+ The format of the table is intentionally simple, so that it may be
+ easily processed by a script if necessary. The symbols are
+ printed out, sorted by name. For each symbol, a list of file
+ names is given. If the symbol is defined, the first file listed
+ is the location of the definition. The remaining files contain
+ references to the symbol.
+
+`--no-define-common'
+ This option inhibits the assignment of addresses to common symbols.
+ The script command `INHIBIT_COMMON_ALLOCATION' has the same effect.
+ *Note Miscellaneous Commands::.
+
+ The `--no-define-common' option allows decoupling the decision to
+ assign addresses to Common symbols from the choice of the output
+ file type; otherwise a non-Relocatable output type forces
+ assigning addresses to Common symbols. Using `--no-define-common'
+ allows Common symbols that are referenced from a shared library to
+ be assigned addresses only in the main program. This eliminates
+ the unused duplicate space in the shared library, and also
+ prevents any possible confusion over resolving to the wrong
+ duplicate when there are many dynamic modules with specialized
+ search paths for runtime symbol resolution.
+
+`--defsym=SYMBOL=EXPRESSION'
+ Create a global symbol in the output file, containing the absolute
+ address given by EXPRESSION. You may use this option as many
+ times as necessary to define multiple symbols in the command line.
+ A limited form of arithmetic is supported for the EXPRESSION in
+ this context: you may give a hexadecimal constant or the name of
+ an existing symbol, or use `+' and `-' to add or subtract
+ hexadecimal constants or symbols. If you need more elaborate
+ expressions, consider using the linker command language from a
+ script (*note Assignment: Symbol Definitions: Assignments.).
+ _Note:_ there should be no white space between SYMBOL, the equals
+ sign ("<=>"), and EXPRESSION.
+
+`--demangle[=STYLE]'
+`--no-demangle'
+ These options control whether to demangle symbol names in error
+ messages and other output. When the linker is told to demangle,
+ it tries to present symbol names in a readable fashion: it strips
+ leading underscores if they are used by the object file format,
+ and converts C++ mangled symbol names into user readable names.
+ Different compilers have different mangling styles. The optional
+ demangling style argument can be used to choose an appropriate
+ demangling style for your compiler. The linker will demangle by
+ default unless the environment variable `COLLECT_NO_DEMANGLE' is
+ set. These options may be used to override the default.
+
+`-IFILE'
+`--dynamic-linker=FILE'
+ Set the name of the dynamic linker. This is only meaningful when
+ generating dynamically linked ELF executables. The default dynamic
+ linker is normally correct; don't use this unless you know what
+ you are doing.
+
+`--fatal-warnings'
+`--no-fatal-warnings'
+ Treat all warnings as errors. The default behaviour can be
+ restored with the option `--no-fatal-warnings'.
+
+`--force-exe-suffix'
+ Make sure that an output file has a .exe suffix.
+
+ If a successfully built fully linked output file does not have a
+ `.exe' or `.dll' suffix, this option forces the linker to copy the
+ output file to one of the same name with a `.exe' suffix. This
+ option is useful when using unmodified Unix makefiles on a
+ Microsoft Windows host, since some versions of Windows won't run
+ an image unless it ends in a `.exe' suffix.
+
+`--gc-sections'
+`--no-gc-sections'
+ Enable garbage collection of unused input sections. It is ignored
+ on targets that do not support this option. The default behaviour
+ (of not performing this garbage collection) can be restored by
+ specifying `--no-gc-sections' on the command line.
+
+ `--gc-sections' decides which input sections are used by examining
+ symbols and relocations. The section containing the entry symbol
+ and all sections containing symbols undefined on the command-line
+ will be kept, as will sections containing symbols referenced by
+ dynamic objects. Note that when building shared libraries, the
+ linker must assume that any visible symbol is referenced. Once
+ this initial set of sections has been determined, the linker
+ recursively marks as used any section referenced by their
+ relocations. See `--entry' and `--undefined'.
+
+ This option can be set when doing a partial link (enabled with
+ option `-r'). In this case the root of symbols kept must be
+ explicitely specified either by an `--entry' or `--undefined'
+ option or by a `ENTRY' command in the linker script.
+
+`--print-gc-sections'
+`--no-print-gc-sections'
+ List all sections removed by garbage collection. The listing is
+ printed on stderr. This option is only effective if garbage
+ collection has been enabled via the `--gc-sections') option. The
+ default behaviour (of not listing the sections that are removed)
+ can be restored by specifying `--no-print-gc-sections' on the
+ command line.
+
+`--help'
+ Print a summary of the command-line options on the standard output
+ and exit.
+
+`--target-help'
+ Print a summary of all target specific options on the standard
+ output and exit.
+
+`-Map=MAPFILE'
+ Print a link map to the file MAPFILE. See the description of the
+ `-M' option, above.
+
+`--no-keep-memory'
+ `ld' normally optimizes for speed over memory usage by caching the
+ symbol tables of input files in memory. This option tells `ld' to
+ instead optimize for memory usage, by rereading the symbol tables
+ as necessary. This may be required if `ld' runs out of memory
+ space while linking a large executable.
+
+`--no-undefined'
+`-z defs'
+ Report unresolved symbol references from regular object files.
+ This is done even if the linker is creating a non-symbolic shared
+ library. The switch `--[no-]allow-shlib-undefined' controls the
+ behaviour for reporting unresolved references found in shared
+ libraries being linked in.
+
+`--allow-multiple-definition'
+`-z muldefs'
+ Normally when a symbol is defined multiple times, the linker will
+ report a fatal error. These options allow multiple definitions and
+ the first definition will be used.
+
+`--allow-shlib-undefined'
+`--no-allow-shlib-undefined'
+ Allows or disallows undefined symbols in shared libraries. This
+ switch is similar to `--no-undefined' except that it determines
+ the behaviour when the undefined symbols are in a shared library
+ rather than a regular object file. It does not affect how
+ undefined symbols in regular object files are handled.
+
+ The default behaviour is to report errors for any undefined symbols
+ referenced in shared libraries if the linker is being used to
+ create an executable, but to allow them if the linker is being
+ used to create a shared library.
+
+ The reasons for allowing undefined symbol references in shared
+ libraries specified at link time are that:
+
+ * A shared library specified at link time may not be the same
+ as the one that is available at load time, so the symbol
+ might actually be resolvable at load time.
+
+ * There are some operating systems, eg BeOS and HPPA, where
+ undefined symbols in shared libraries are normal.
+
+ The BeOS kernel for example patches shared libraries at load
+ time to select whichever function is most appropriate for the
+ current architecture. This is used, for example, to
+ dynamically select an appropriate memset function.
+
+`--no-undefined-version'
+ Normally when a symbol has an undefined version, the linker will
+ ignore it. This option disallows symbols with undefined version
+ and a fatal error will be issued instead.
+
+`--default-symver'
+ Create and use a default symbol version (the soname) for
+ unversioned exported symbols.
+
+`--default-imported-symver'
+ Create and use a default symbol version (the soname) for
+ unversioned imported symbols.
+
+`--no-warn-mismatch'
+ Normally `ld' will give an error if you try to link together input
+ files that are mismatched for some reason, perhaps because they
+ have been compiled for different processors or for different
+ endiannesses. This option tells `ld' that it should silently
+ permit such possible errors. This option should only be used with
+ care, in cases when you have taken some special action that
+ ensures that the linker errors are inappropriate.
+
+`--no-warn-search-mismatch'
+ Normally `ld' will give a warning if it finds an incompatible
+ library during a library search. This option silences the warning.
+
+`--no-whole-archive'
+ Turn off the effect of the `--whole-archive' option for subsequent
+ archive files.
+
+`--noinhibit-exec'
+ Retain the executable output file whenever it is still usable.
+ Normally, the linker will not produce an output file if it
+ encounters errors during the link process; it exits without
+ writing an output file when it issues any error whatsoever.
+
+`-nostdlib'
+ Only search library directories explicitly specified on the
+ command line. Library directories specified in linker scripts
+ (including linker scripts specified on the command line) are
+ ignored.
+
+`--oformat=OUTPUT-FORMAT'
+ `ld' may be configured to support more than one kind of object
+ file. If your `ld' is configured this way, you can use the
+ `--oformat' option to specify the binary format for the output
+ object file. Even when `ld' is configured to support alternative
+ object formats, you don't usually need to specify this, as `ld'
+ should be configured to produce as a default output format the most
+ usual format on each machine. OUTPUT-FORMAT is a text string, the
+ name of a particular format supported by the BFD libraries. (You
+ can list the available binary formats with `objdump -i'.) The
+ script command `OUTPUT_FORMAT' can also specify the output format,
+ but this option overrides it. *Note BFD::.
+
+`-pie'
+`--pic-executable'
+ Create a position independent executable. This is currently only
+ supported on ELF platforms. Position independent executables are
+ similar to shared libraries in that they are relocated by the
+ dynamic linker to the virtual address the OS chooses for them
+ (which can vary between invocations). Like normal dynamically
+ linked executables they can be executed and symbols defined in the
+ executable cannot be overridden by shared libraries.
+
+`-qmagic'
+ This option is ignored for Linux compatibility.
+
+`-Qy'
+ This option is ignored for SVR4 compatibility.
+
+`--relax'
+ An option with machine dependent effects. This option is only
+ supported on a few targets. *Note `ld' and the H8/300: H8/300.
+ *Note `ld' and the Intel 960 family: i960. *Note `ld' and Xtensa
+ Processors: Xtensa. *Note `ld' and the 68HC11 and 68HC12:
+ M68HC11/68HC12. *Note `ld' and PowerPC 32-bit ELF Support:
+ PowerPC ELF32.
+
+ On some platforms, the `--relax' option performs global
+ optimizations that become possible when the linker resolves
+ addressing in the program, such as relaxing address modes and
+ synthesizing new instructions in the output object file.
+
+ On some platforms these link time global optimizations may make
+ symbolic debugging of the resulting executable impossible. This
+ is known to be the case for the Matsushita MN10200 and MN10300
+ family of processors.
+
+ On platforms where this is not supported, `--relax' is accepted,
+ but ignored.
+
+`--retain-symbols-file=FILENAME'
+ Retain _only_ the symbols listed in the file FILENAME, discarding
+ all others. FILENAME is simply a flat file, with one symbol name
+ per line. This option is especially useful in environments (such
+ as VxWorks) where a large global symbol table is accumulated
+ gradually, to conserve run-time memory.
+
+ `--retain-symbols-file' does _not_ discard undefined symbols, or
+ symbols needed for relocations.
+
+ You may only specify `--retain-symbols-file' once in the command
+ line. It overrides `-s' and `-S'.
+
+`-rpath=DIR'
+ Add a directory to the runtime library search path. This is used
+ when linking an ELF executable with shared objects. All `-rpath'
+ arguments are concatenated and passed to the runtime linker, which
+ uses them to locate shared objects at runtime. The `-rpath'
+ option is also used when locating shared objects which are needed
+ by shared objects explicitly included in the link; see the
+ description of the `-rpath-link' option. If `-rpath' is not used
+ when linking an ELF executable, the contents of the environment
+ variable `LD_RUN_PATH' will be used if it is defined.
+
+ The `-rpath' option may also be used on SunOS. By default, on
+ SunOS, the linker will form a runtime search patch out of all the
+ `-L' options it is given. If a `-rpath' option is used, the
+ runtime search path will be formed exclusively using the `-rpath'
+ options, ignoring the `-L' options. This can be useful when using
+ gcc, which adds many `-L' options which may be on NFS mounted file
+ systems.
+
+ For compatibility with other ELF linkers, if the `-R' option is
+ followed by a directory name, rather than a file name, it is
+ treated as the `-rpath' option.
+
+`-rpath-link=DIR'
+ When using ELF or SunOS, one shared library may require another.
+ This happens when an `ld -shared' link includes a shared library
+ as one of the input files.
+
+ When the linker encounters such a dependency when doing a
+ non-shared, non-relocatable link, it will automatically try to
+ locate the required shared library and include it in the link, if
+ it is not included explicitly. In such a case, the `-rpath-link'
+ option specifies the first set of directories to search. The
+ `-rpath-link' option may specify a sequence of directory names
+ either by specifying a list of names separated by colons, or by
+ appearing multiple times.
+
+ This option should be used with caution as it overrides the search
+ path that may have been hard compiled into a shared library. In
+ such a case it is possible to use unintentionally a different
+ search path than the runtime linker would do.
+
+ The linker uses the following search paths to locate required
+ shared libraries:
+ 1. Any directories specified by `-rpath-link' options.
+
+ 2. Any directories specified by `-rpath' options. The difference
+ between `-rpath' and `-rpath-link' is that directories
+ specified by `-rpath' options are included in the executable
+ and used at runtime, whereas the `-rpath-link' option is only
+ effective at link time. Searching `-rpath' in this way is
+ only supported by native linkers and cross linkers which have
+ been configured with the `--with-sysroot' option.
+
+ 3. On an ELF system, for native linkers, if the `-rpath' and
+ `-rpath-link' options were not used, search the contents of
+ the environment variable `LD_RUN_PATH'.
+
+ 4. On SunOS, if the `-rpath' option was not used, search any
+ directories specified using `-L' options.
+
+ 5. For a native linker, the search the contents of the
+ environment variable `LD_LIBRARY_PATH'.
+
+ 6. For a native ELF linker, the directories in `DT_RUNPATH' or
+ `DT_RPATH' of a shared library are searched for shared
+ libraries needed by it. The `DT_RPATH' entries are ignored if
+ `DT_RUNPATH' entries exist.
+
+ 7. The default directories, normally `/lib' and `/usr/lib'.
+
+ 8. For a native linker on an ELF system, if the file
+ `/etc/ld.so.conf' exists, the list of directories found in
+ that file.
+
+ If the required shared library is not found, the linker will issue
+ a warning and continue with the link.
+
+`-shared'
+`-Bshareable'
+ Create a shared library. This is currently only supported on ELF,
+ XCOFF and SunOS platforms. On SunOS, the linker will
+ automatically create a shared library if the `-e' option is not
+ used and there are undefined symbols in the link.
+
+`--sort-common'
+`--sort-common=ascending'
+`--sort-common=descending'
+ This option tells `ld' to sort the common symbols by alignment in
+ ascending or descending order when it places them in the
+ appropriate output sections. The symbol alignments considered are
+ sixteen-byte or larger, eight-byte, four-byte, two-byte, and
+ one-byte. This is to prevent gaps between symbols due to alignment
+ constraints. If no sorting order is specified, then descending
+ order is assumed.
+
+`--sort-section=name'
+ This option will apply `SORT_BY_NAME' to all wildcard section
+ patterns in the linker script.
+
+`--sort-section=alignment'
+ This option will apply `SORT_BY_ALIGNMENT' to all wildcard section
+ patterns in the linker script.
+
+`--split-by-file[=SIZE]'
+ Similar to `--split-by-reloc' but creates a new output section for
+ each input file when SIZE is reached. SIZE defaults to a size of
+ 1 if not given.
+
+`--split-by-reloc[=COUNT]'
+ Tries to creates extra sections in the output file so that no
+ single output section in the file contains more than COUNT
+ relocations. This is useful when generating huge relocatable
+ files for downloading into certain real time kernels with the COFF
+ object file format; since COFF cannot represent more than 65535
+ relocations in a single section. Note that this will fail to work
+ with object file formats which do not support arbitrary sections.
+ The linker will not split up individual input sections for
+ redistribution, so if a single input section contains more than
+ COUNT relocations one output section will contain that many
+ relocations. COUNT defaults to a value of 32768.
+
+`--stats'
+ Compute and display statistics about the operation of the linker,
+ such as execution time and memory usage.
+
+`--sysroot=DIRECTORY'
+ Use DIRECTORY as the location of the sysroot, overriding the
+ configure-time default. This option is only supported by linkers
+ that were configured using `--with-sysroot'.
+
+`--traditional-format'
+ For some targets, the output of `ld' is different in some ways from
+ the output of some existing linker. This switch requests `ld' to
+ use the traditional format instead.
+
+ For example, on SunOS, `ld' combines duplicate entries in the
+ symbol string table. This can reduce the size of an output file
+ with full debugging information by over 30 percent.
+ Unfortunately, the SunOS `dbx' program can not read the resulting
+ program (`gdb' has no trouble). The `--traditional-format' switch
+ tells `ld' to not combine duplicate entries.
+
+`--section-start=SECTIONNAME=ORG'
+ Locate a section in the output file at the absolute address given
+ by ORG. You may use this option as many times as necessary to
+ locate multiple sections in the command line. ORG must be a
+ single hexadecimal integer; for compatibility with other linkers,
+ you may omit the leading `0x' usually associated with hexadecimal
+ values. _Note:_ there should be no white space between
+ SECTIONNAME, the equals sign ("<=>"), and ORG.
+
+`-Tbss=ORG'
+`-Tdata=ORG'
+`-Ttext=ORG'
+ Same as `--section-start', with `.bss', `.data' or `.text' as the
+ SECTIONNAME.
+
+`-Ttext-segment=ORG'
+ When creating an ELF executable or shared object, it will set the
+ address of the first byte of the text segment.
+
+`--unresolved-symbols=METHOD'
+ Determine how to handle unresolved symbols. There are four
+ possible values for `method':
+
+ `ignore-all'
+ Do not report any unresolved symbols.
+
+ `report-all'
+ Report all unresolved symbols. This is the default.
+
+ `ignore-in-object-files'
+ Report unresolved symbols that are contained in shared
+ libraries, but ignore them if they come from regular object
+ files.
+
+ `ignore-in-shared-libs'
+ Report unresolved symbols that come from regular object
+ files, but ignore them if they come from shared libraries.
+ This can be useful when creating a dynamic binary and it is
+ known that all the shared libraries that it should be
+ referencing are included on the linker's command line.
+
+ The behaviour for shared libraries on their own can also be
+ controlled by the `--[no-]allow-shlib-undefined' option.
+
+ Normally the linker will generate an error message for each
+ reported unresolved symbol but the option
+ `--warn-unresolved-symbols' can change this to a warning.
+
+`--dll-verbose'
+`--verbose'
+ Display the version number for `ld' and list the linker emulations
+ supported. Display which input files can and cannot be opened.
+ Display the linker script being used by the linker.
+
+`--version-script=VERSION-SCRIPTFILE'
+ Specify the name of a version script to the linker. This is
+ typically used when creating shared libraries to specify
+ additional information about the version hierarchy for the library
+ being created. This option is only fully supported on ELF
+ platforms which support shared libraries; see *Note VERSION::. It
+ is partially supported on PE platforms, which can use version
+ scripts to filter symbol visibility in auto-export mode: any
+ symbols marked `local' in the version script will not be exported.
+ *Note WIN32::.
+
+`--warn-common'
+ Warn when a common symbol is combined with another common symbol
+ or with a symbol definition. Unix linkers allow this somewhat
+ sloppy practise, but linkers on some other operating systems do
+ not. This option allows you to find potential problems from
+ combining global symbols. Unfortunately, some C libraries use
+ this practise, so you may get some warnings about symbols in the
+ libraries as well as in your programs.
+
+ There are three kinds of global symbols, illustrated here by C
+ examples:
+
+ `int i = 1;'
+ A definition, which goes in the initialized data section of
+ the output file.
+
+ `extern int i;'
+ An undefined reference, which does not allocate space. There
+ must be either a definition or a common symbol for the
+ variable somewhere.
+
+ `int i;'
+ A common symbol. If there are only (one or more) common
+ symbols for a variable, it goes in the uninitialized data
+ area of the output file. The linker merges multiple common
+ symbols for the same variable into a single symbol. If they
+ are of different sizes, it picks the largest size. The
+ linker turns a common symbol into a declaration, if there is
+ a definition of the same variable.
+
+ The `--warn-common' option can produce five kinds of warnings.
+ Each warning consists of a pair of lines: the first describes the
+ symbol just encountered, and the second describes the previous
+ symbol encountered with the same name. One or both of the two
+ symbols will be a common symbol.
+
+ 1. Turning a common symbol into a reference, because there is
+ already a definition for the symbol.
+ FILE(SECTION): warning: common of `SYMBOL'
+ overridden by definition
+ FILE(SECTION): warning: defined here
+
+ 2. Turning a common symbol into a reference, because a later
+ definition for the symbol is encountered. This is the same
+ as the previous case, except that the symbols are encountered
+ in a different order.
+ FILE(SECTION): warning: definition of `SYMBOL'
+ overriding common
+ FILE(SECTION): warning: common is here
+
+ 3. Merging a common symbol with a previous same-sized common
+ symbol.
+ FILE(SECTION): warning: multiple common
+ of `SYMBOL'
+ FILE(SECTION): warning: previous common is here
+
+ 4. Merging a common symbol with a previous larger common symbol.
+ FILE(SECTION): warning: common of `SYMBOL'
+ overridden by larger common
+ FILE(SECTION): warning: larger common is here
+
+ 5. Merging a common symbol with a previous smaller common
+ symbol. This is the same as the previous case, except that
+ the symbols are encountered in a different order.
+ FILE(SECTION): warning: common of `SYMBOL'
+ overriding smaller common
+ FILE(SECTION): warning: smaller common is here
+
+`--warn-constructors'
+ Warn if any global constructors are used. This is only useful for
+ a few object file formats. For formats like COFF or ELF, the
+ linker can not detect the use of global constructors.
+
+`--warn-multiple-gp'
+ Warn if multiple global pointer values are required in the output
+ file. This is only meaningful for certain processors, such as the
+ Alpha. Specifically, some processors put large-valued constants
+ in a special section. A special register (the global pointer)
+ points into the middle of this section, so that constants can be
+ loaded efficiently via a base-register relative addressing mode.
+ Since the offset in base-register relative mode is fixed and
+ relatively small (e.g., 16 bits), this limits the maximum size of
+ the constant pool. Thus, in large programs, it is often necessary
+ to use multiple global pointer values in order to be able to
+ address all possible constants. This option causes a warning to
+ be issued whenever this case occurs.
+
+`--warn-once'
+ Only warn once for each undefined symbol, rather than once per
+ module which refers to it.
+
+`--warn-section-align'
+ Warn if the address of an output section is changed because of
+ alignment. Typically, the alignment will be set by an input
+ section. The address will only be changed if it not explicitly
+ specified; that is, if the `SECTIONS' command does not specify a
+ start address for the section (*note SECTIONS::).
+
+`--warn-shared-textrel'
+ Warn if the linker adds a DT_TEXTREL to a shared object.
+
+`--warn-alternate-em'
+ Warn if an object has alternate ELF machine code.
+
+`--warn-unresolved-symbols'
+ If the linker is going to report an unresolved symbol (see the
+ option `--unresolved-symbols') it will normally generate an error.
+ This option makes it generate a warning instead.
+
+`--error-unresolved-symbols'
+ This restores the linker's default behaviour of generating errors
+ when it is reporting unresolved symbols.
+
+`--whole-archive'
+ For each archive mentioned on the command line after the
+ `--whole-archive' option, include every object file in the archive
+ in the link, rather than searching the archive for the required
+ object files. This is normally used to turn an archive file into
+ a shared library, forcing every object to be included in the
+ resulting shared library. This option may be used more than once.
+
+ Two notes when using this option from gcc: First, gcc doesn't know
+ about this option, so you have to use `-Wl,-whole-archive'.
+ Second, don't forget to use `-Wl,-no-whole-archive' after your
+ list of archives, because gcc will add its own list of archives to
+ your link and you may not want this flag to affect those as well.
+
+`--wrap=SYMBOL'
+ Use a wrapper function for SYMBOL. Any undefined reference to
+ SYMBOL will be resolved to `__wrap_SYMBOL'. Any undefined
+ reference to `__real_SYMBOL' will be resolved to SYMBOL.
+
+ This can be used to provide a wrapper for a system function. The
+ wrapper function should be called `__wrap_SYMBOL'. If it wishes
+ to call the system function, it should call `__real_SYMBOL'.
+
+ Here is a trivial example:
+
+ void *
+ __wrap_malloc (size_t c)
+ {
+ printf ("malloc called with %zu\n", c);
+ return __real_malloc (c);
+ }
+
+ If you link other code with this file using `--wrap malloc', then
+ all calls to `malloc' will call the function `__wrap_malloc'
+ instead. The call to `__real_malloc' in `__wrap_malloc' will call
+ the real `malloc' function.
+
+ You may wish to provide a `__real_malloc' function as well, so that
+ links without the `--wrap' option will succeed. If you do this,
+ you should not put the definition of `__real_malloc' in the same
+ file as `__wrap_malloc'; if you do, the assembler may resolve the
+ call before the linker has a chance to wrap it to `malloc'.
+
+`--eh-frame-hdr'
+ Request creation of `.eh_frame_hdr' section and ELF
+ `PT_GNU_EH_FRAME' segment header.
+
+`--enable-new-dtags'
+`--disable-new-dtags'
+ This linker can create the new dynamic tags in ELF. But the older
+ ELF systems may not understand them. If you specify
+ `--enable-new-dtags', the dynamic tags will be created as needed.
+ If you specify `--disable-new-dtags', no new dynamic tags will be
+ created. By default, the new dynamic tags are not created. Note
+ that those options are only available for ELF systems.
+
+`--hash-size=NUMBER'
+ Set the default size of the linker's hash tables to a prime number
+ close to NUMBER. Increasing this value can reduce the length of
+ time it takes the linker to perform its tasks, at the expense of
+ increasing the linker's memory requirements. Similarly reducing
+ this value can reduce the memory requirements at the expense of
+ speed.
+
+`--hash-style=STYLE'
+ Set the type of linker's hash table(s). STYLE can be either
+ `sysv' for classic ELF `.hash' section, `gnu' for new style GNU
+ `.gnu.hash' section or `both' for both the classic ELF `.hash' and
+ new style GNU `.gnu.hash' hash tables. The default is `sysv'.
+
+`--reduce-memory-overheads'
+ This option reduces memory requirements at ld runtime, at the
+ expense of linking speed. This was introduced to select the old
+ O(n^2) algorithm for link map file generation, rather than the new
+ O(n) algorithm which uses about 40% more memory for symbol storage.
+
+ Another effect of the switch is to set the default hash table size
+ to 1021, which again saves memory at the cost of lengthening the
+ linker's run time. This is not done however if the `--hash-size'
+ switch has been used.
+
+ The `--reduce-memory-overheads' switch may be also be used to
+ enable other tradeoffs in future versions of the linker.
+
+`--build-id'
+`--build-id=STYLE'
+ Request creation of `.note.gnu.build-id' ELF note section. The
+ contents of the note are unique bits identifying this linked file.
+ STYLE can be `uuid' to use 128 random bits, `sha1' to use a
+ 160-bit SHA1 hash on the normative parts of the output contents,
+ `md5' to use a 128-bit MD5 hash on the normative parts of the
+ output contents, or `0xHEXSTRING' to use a chosen bit string
+ specified as an even number of hexadecimal digits (`-' and `:'
+ characters between digit pairs are ignored). If STYLE is omitted,
+ `sha1' is used.
+
+ The `md5' and `sha1' styles produces an identifier that is always
+ the same in an identical output file, but will be unique among all
+ nonidentical output files. It is not intended to be compared as a
+ checksum for the file's contents. A linked file may be changed
+ later by other tools, but the build ID bit string identifying the
+ original linked file does not change.
+
+ Passing `none' for STYLE disables the setting from any
+ `--build-id' options earlier on the command line.
+
+2.1.1 Options Specific to i386 PE Targets
+-----------------------------------------
+
+The i386 PE linker supports the `-shared' option, which causes the
+output to be a dynamically linked library (DLL) instead of a normal
+executable. You should name the output `*.dll' when you use this
+option. In addition, the linker fully supports the standard `*.def'
+files, which may be specified on the linker command line like an object
+file (in fact, it should precede archives it exports symbols from, to
+ensure that they get linked in, just like a normal object file).
+
+ In addition to the options common to all targets, the i386 PE linker
+support additional command line options that are specific to the i386
+PE target. Options that take values may be separated from their values
+by either a space or an equals sign.
+
+`--add-stdcall-alias'
+ If given, symbols with a stdcall suffix (@NN) will be exported
+ as-is and also with the suffix stripped. [This option is specific
+ to the i386 PE targeted port of the linker]
+
+`--base-file FILE'
+ Use FILE as the name of a file in which to save the base addresses
+ of all the relocations needed for generating DLLs with `dlltool'.
+ [This is an i386 PE specific option]
+
+`--dll'
+ Create a DLL instead of a regular executable. You may also use
+ `-shared' or specify a `LIBRARY' in a given `.def' file. [This
+ option is specific to the i386 PE targeted port of the linker]
+
+`--enable-long-section-names'
+`--disable-long-section-names'
+ The PE variants of the Coff object format add an extension that
+ permits the use of section names longer than eight characters, the
+ normal limit for Coff. By default, these names are only allowed
+ in object files, as fully-linked executable images do not carry
+ the Coff string table required to support the longer names. As a
+ GNU extension, it is possible to allow their use in executable
+ images as well, or to (probably pointlessly!) disallow it in
+ object files, by using these two options. Executable images
+ generated with these long section names are slightly non-standard,
+ carrying as they do a string table, and may generate confusing
+ output when examined with non-GNU PE-aware tools, such as file
+ viewers and dumpers. However, GDB relies on the use of PE long
+ section names to find Dwarf-2 debug information sections in an
+ executable image at runtime, and so if neither option is specified
+ on the command-line, `ld' will enable long section names,
+ overriding the default and technically correct behaviour, when it
+ finds the presence of debug information while linking an executable
+ image and not stripping symbols. [This option is valid for all PE
+ targeted ports of the linker]
+
+`--enable-stdcall-fixup'
+`--disable-stdcall-fixup'
+ If the link finds a symbol that it cannot resolve, it will attempt
+ to do "fuzzy linking" by looking for another defined symbol that
+ differs only in the format of the symbol name (cdecl vs stdcall)
+ and will resolve that symbol by linking to the match. For
+ example, the undefined symbol `_foo' might be linked to the
+ function `_foo@12', or the undefined symbol `_bar@16' might be
+ linked to the function `_bar'. When the linker does this, it
+ prints a warning, since it normally should have failed to link,
+ but sometimes import libraries generated from third-party dlls may
+ need this feature to be usable. If you specify
+ `--enable-stdcall-fixup', this feature is fully enabled and
+ warnings are not printed. If you specify
+ `--disable-stdcall-fixup', this feature is disabled and such
+ mismatches are considered to be errors. [This option is specific
+ to the i386 PE targeted port of the linker]
+
+`--export-all-symbols'
+ If given, all global symbols in the objects used to build a DLL
+ will be exported by the DLL. Note that this is the default if
+ there otherwise wouldn't be any exported symbols. When symbols are
+ explicitly exported via DEF files or implicitly exported via
+ function attributes, the default is to not export anything else
+ unless this option is given. Note that the symbols `DllMain@12',
+ `DllEntryPoint@0', `DllMainCRTStartup@12', and `impure_ptr' will
+ not be automatically exported. Also, symbols imported from other
+ DLLs will not be re-exported, nor will symbols specifying the
+ DLL's internal layout such as those beginning with `_head_' or
+ ending with `_iname'. In addition, no symbols from `libgcc',
+ `libstd++', `libmingw32', or `crtX.o' will be exported. Symbols
+ whose names begin with `__rtti_' or `__builtin_' will not be
+ exported, to help with C++ DLLs. Finally, there is an extensive
+ list of cygwin-private symbols that are not exported (obviously,
+ this applies on when building DLLs for cygwin targets). These
+ cygwin-excludes are: `_cygwin_dll_entry@12',
+ `_cygwin_crt0_common@8', `_cygwin_noncygwin_dll_entry@12',
+ `_fmode', `_impure_ptr', `cygwin_attach_dll', `cygwin_premain0',
+ `cygwin_premain1', `cygwin_premain2', `cygwin_premain3', and
+ `environ'. [This option is specific to the i386 PE targeted port
+ of the linker]
+
+`--exclude-symbols SYMBOL,SYMBOL,...'
+ Specifies a list of symbols which should not be automatically
+ exported. The symbol names may be delimited by commas or colons.
+ [This option is specific to the i386 PE targeted port of the
+ linker]
+
+`--file-alignment'
+ Specify the file alignment. Sections in the file will always
+ begin at file offsets which are multiples of this number. This
+ defaults to 512. [This option is specific to the i386 PE targeted
+ port of the linker]
+
+`--heap RESERVE'
+`--heap RESERVE,COMMIT'
+ Specify the number of bytes of memory to reserve (and optionally
+ commit) to be used as heap for this program. The default is 1Mb
+ reserved, 4K committed. [This option is specific to the i386 PE
+ targeted port of the linker]
+
+`--image-base VALUE'
+ Use VALUE as the base address of your program or dll. This is the
+ lowest memory location that will be used when your program or dll
+ is loaded. To reduce the need to relocate and improve performance
+ of your dlls, each should have a unique base address and not
+ overlap any other dlls. The default is 0x400000 for executables,
+ and 0x10000000 for dlls. [This option is specific to the i386 PE
+ targeted port of the linker]
+
+`--kill-at'
+ If given, the stdcall suffixes (@NN) will be stripped from symbols
+ before they are exported. [This option is specific to the i386 PE
+ targeted port of the linker]
+
+`--large-address-aware'
+ If given, the appropriate bit in the "Characteristics" field of
+ the COFF header is set to indicate that this executable supports
+ virtual addresses greater than 2 gigabytes. This should be used
+ in conjunction with the /3GB or /USERVA=VALUE megabytes switch in
+ the "[operating systems]" section of the BOOT.INI. Otherwise,
+ this bit has no effect. [This option is specific to PE targeted
+ ports of the linker]
+
+`--major-image-version VALUE'
+ Sets the major number of the "image version". Defaults to 1.
+ [This option is specific to the i386 PE targeted port of the
+ linker]
+
+`--major-os-version VALUE'
+ Sets the major number of the "os version". Defaults to 4. [This
+ option is specific to the i386 PE targeted port of the linker]
+
+`--major-subsystem-version VALUE'
+ Sets the major number of the "subsystem version". Defaults to 4.
+ [This option is specific to the i386 PE targeted port of the
+ linker]
+
+`--minor-image-version VALUE'
+ Sets the minor number of the "image version". Defaults to 0.
+ [This option is specific to the i386 PE targeted port of the
+ linker]
+
+`--minor-os-version VALUE'
+ Sets the minor number of the "os version". Defaults to 0. [This
+ option is specific to the i386 PE targeted port of the linker]
+
+`--minor-subsystem-version VALUE'
+ Sets the minor number of the "subsystem version". Defaults to 0.
+ [This option is specific to the i386 PE targeted port of the
+ linker]
+
+`--output-def FILE'
+ The linker will create the file FILE which will contain a DEF file
+ corresponding to the DLL the linker is generating. This DEF file
+ (which should be called `*.def') may be used to create an import
+ library with `dlltool' or may be used as a reference to
+ automatically or implicitly exported symbols. [This option is
+ specific to the i386 PE targeted port of the linker]
+
+`--out-implib FILE'
+ The linker will create the file FILE which will contain an import
+ lib corresponding to the DLL the linker is generating. This import
+ lib (which should be called `*.dll.a' or `*.a' may be used to link
+ clients against the generated DLL; this behaviour makes it
+ possible to skip a separate `dlltool' import library creation step.
+ [This option is specific to the i386 PE targeted port of the
+ linker]
+
+`--enable-auto-image-base'
+ Automatically choose the image base for DLLs, unless one is
+ specified using the `--image-base' argument. By using a hash
+ generated from the dllname to create unique image bases for each
+ DLL, in-memory collisions and relocations which can delay program
+ execution are avoided. [This option is specific to the i386 PE
+ targeted port of the linker]
+
+`--disable-auto-image-base'
+ Do not automatically generate a unique image base. If there is no
+ user-specified image base (`--image-base') then use the platform
+ default. [This option is specific to the i386 PE targeted port of
+ the linker]
+
+`--dll-search-prefix STRING'
+ When linking dynamically to a dll without an import library,
+ search for `<string><basename>.dll' in preference to
+ `lib<basename>.dll'. This behaviour allows easy distinction
+ between DLLs built for the various "subplatforms": native, cygwin,
+ uwin, pw, etc. For instance, cygwin DLLs typically use
+ `--dll-search-prefix=cyg'. [This option is specific to the i386
+ PE targeted port of the linker]
+
+`--enable-auto-import'
+ Do sophisticated linking of `_symbol' to `__imp__symbol' for DATA
+ imports from DLLs, and create the necessary thunking symbols when
+ building the import libraries with those DATA exports. Note: Use
+ of the 'auto-import' extension will cause the text section of the
+ image file to be made writable. This does not conform to the
+ PE-COFF format specification published by Microsoft.
+
+ Note - use of the 'auto-import' extension will also cause read only
+ data which would normally be placed into the .rdata section to be
+ placed into the .data section instead. This is in order to work
+ around a problem with consts that is described here:
+ http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html
+
+ Using 'auto-import' generally will 'just work' - but sometimes you
+ may see this message:
+
+ "variable '<var>' can't be auto-imported. Please read the
+ documentation for ld's `--enable-auto-import' for details."
+
+ This message occurs when some (sub)expression accesses an address
+ ultimately given by the sum of two constants (Win32 import tables
+ only allow one). Instances where this may occur include accesses
+ to member fields of struct variables imported from a DLL, as well
+ as using a constant index into an array variable imported from a
+ DLL. Any multiword variable (arrays, structs, long long, etc) may
+ trigger this error condition. However, regardless of the exact
+ data type of the offending exported variable, ld will always
+ detect it, issue the warning, and exit.
+
+ There are several ways to address this difficulty, regardless of
+ the data type of the exported variable:
+
+ One way is to use -enable-runtime-pseudo-reloc switch. This leaves
+ the task of adjusting references in your client code for runtime
+ environment, so this method works only when runtime environment
+ supports this feature.
+
+ A second solution is to force one of the 'constants' to be a
+ variable - that is, unknown and un-optimizable at compile time.
+ For arrays, there are two possibilities: a) make the indexee (the
+ array's address) a variable, or b) make the 'constant' index a
+ variable. Thus:
+
+ extern type extern_array[];
+ extern_array[1] -->
+ { volatile type *t=extern_array; t[1] }
+
+ or
+
+ extern type extern_array[];
+ extern_array[1] -->
+ { volatile int t=1; extern_array[t] }
+
+ For structs (and most other multiword data types) the only option
+ is to make the struct itself (or the long long, or the ...)
+ variable:
+
+ extern struct s extern_struct;
+ extern_struct.field -->
+ { volatile struct s *t=&extern_struct; t->field }
+
+ or
+
+ extern long long extern_ll;
+ extern_ll -->
+ { volatile long long * local_ll=&extern_ll; *local_ll }
+
+ A third method of dealing with this difficulty is to abandon
+ 'auto-import' for the offending symbol and mark it with
+ `__declspec(dllimport)'. However, in practise that requires using
+ compile-time #defines to indicate whether you are building a DLL,
+ building client code that will link to the DLL, or merely
+ building/linking to a static library. In making the choice
+ between the various methods of resolving the 'direct address with
+ constant offset' problem, you should consider typical real-world
+ usage:
+
+ Original:
+ --foo.h
+ extern int arr[];
+ --foo.c
+ #include "foo.h"
+ void main(int argc, char **argv){
+ printf("%d\n",arr[1]);
+ }
+
+ Solution 1:
+ --foo.h
+ extern int arr[];
+ --foo.c
+ #include "foo.h"
+ void main(int argc, char **argv){
+ /* This workaround is for win32 and cygwin; do not "optimize" */
+ volatile int *parr = arr;
+ printf("%d\n",parr[1]);
+ }
+
+ Solution 2:
+ --foo.h
+ /* Note: auto-export is assumed (no __declspec(dllexport)) */
+ #if (defined(_WIN32) || defined(__CYGWIN__)) && \
+ !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC))
+ #define FOO_IMPORT __declspec(dllimport)
+ #else
+ #define FOO_IMPORT
+ #endif
+ extern FOO_IMPORT int arr[];
+ --foo.c
+ #include "foo.h"
+ void main(int argc, char **argv){
+ printf("%d\n",arr[1]);
+ }
+
+ A fourth way to avoid this problem is to re-code your library to
+ use a functional interface rather than a data interface for the
+ offending variables (e.g. set_foo() and get_foo() accessor
+ functions). [This option is specific to the i386 PE targeted port
+ of the linker]
+
+`--disable-auto-import'
+ Do not attempt to do sophisticated linking of `_symbol' to
+ `__imp__symbol' for DATA imports from DLLs. [This option is
+ specific to the i386 PE targeted port of the linker]
+
+`--enable-runtime-pseudo-reloc'
+ If your code contains expressions described in -enable-auto-import
+ section, that is, DATA imports from DLL with non-zero offset, this
+ switch will create a vector of 'runtime pseudo relocations' which
+ can be used by runtime environment to adjust references to such
+ data in your client code. [This option is specific to the i386 PE
+ targeted port of the linker]
+
+`--disable-runtime-pseudo-reloc'
+ Do not create pseudo relocations for non-zero offset DATA imports
+ from DLLs. This is the default. [This option is specific to the
+ i386 PE targeted port of the linker]
+
+`--enable-extra-pe-debug'
+ Show additional debug info related to auto-import symbol thunking.
+ [This option is specific to the i386 PE targeted port of the
+ linker]
+
+`--section-alignment'
+ Sets the section alignment. Sections in memory will always begin
+ at addresses which are a multiple of this number. Defaults to
+ 0x1000. [This option is specific to the i386 PE targeted port of
+ the linker]
+
+`--stack RESERVE'
+`--stack RESERVE,COMMIT'
+ Specify the number of bytes of memory to reserve (and optionally
+ commit) to be used as stack for this program. The default is 2Mb
+ reserved, 4K committed. [This option is specific to the i386 PE
+ targeted port of the linker]
+
+`--subsystem WHICH'
+`--subsystem WHICH:MAJOR'
+`--subsystem WHICH:MAJOR.MINOR'
+ Specifies the subsystem under which your program will execute. The
+ legal values for WHICH are `native', `windows', `console',
+ `posix', and `xbox'. You may optionally set the subsystem version
+ also. Numeric values are also accepted for WHICH. [This option
+ is specific to the i386 PE targeted port of the linker]
+
+ The following options set flags in the `DllCharacteristics' field
+ of the PE file header: [These options are specific to PE targeted
+ ports of the linker]
+
+`--dynamicbase'
+ The image base address may be relocated using address space layout
+ randomization (ASLR). This feature was introduced with MS Windows
+ Vista for i386 PE targets.
+
+`--forceinteg'
+ Code integrity checks are enforced.
+
+`--nxcompat'
+ The image is compatible with the Data Execution Prevention. This
+ feature was introduced with MS Windows XP SP2 for i386 PE targets.
+
+`--no-isolation'
+ Although the image understands isolation, do not isolate the image.
+
+`--no-seh'
+ The image does not use SEH. No SE handler may be called from this
+ image.
+
+`--no-bind'
+ Do not bind this image.
+
+`--wdmdriver'
+ The driver uses the MS Windows Driver Model.
+
+`--tsaware'
+ The image is Terminal Server aware.
+
+
+2.1.2 Options specific to Motorola 68HC11 and 68HC12 targets
+------------------------------------------------------------
+
+The 68HC11 and 68HC12 linkers support specific options to control the
+memory bank switching mapping and trampoline code generation.
+
+`--no-trampoline'
+ This option disables the generation of trampoline. By default a
+ trampoline is generated for each far function which is called
+ using a `jsr' instruction (this happens when a pointer to a far
+ function is taken).
+
+`--bank-window NAME'
+ This option indicates to the linker the name of the memory region
+ in the `MEMORY' specification that describes the memory bank
+ window. The definition of such region is then used by the linker
+ to compute paging and addresses within the memory window.
+
+
+2.1.3 Options specific to Motorola 68K target
+---------------------------------------------
+
+The following options are supported to control handling of GOT
+generation when linking for 68K targets.
+
+`--got=TYPE'
+ This option tells the linker which GOT generation scheme to use.
+ TYPE should be one of `single', `negative', `multigot' or
+ `target'. For more information refer to the Info entry for `ld'.
+
+
+
+File: ld.info, Node: Environment, Prev: Options, Up: Invocation
+
+2.2 Environment Variables
+=========================
+
+You can change the behaviour of `ld' with the environment variables
+`GNUTARGET', `LDEMULATION' and `COLLECT_NO_DEMANGLE'.
+
+ `GNUTARGET' determines the input-file object format if you don't use
+`-b' (or its synonym `--format'). Its value should be one of the BFD
+names for an input format (*note BFD::). If there is no `GNUTARGET' in
+the environment, `ld' uses the natural format of the target. If
+`GNUTARGET' is set to `default' then BFD attempts to discover the input
+format by examining binary input files; this method often succeeds, but
+there are potential ambiguities, since there is no method of ensuring
+that the magic number used to specify object-file formats is unique.
+However, the configuration procedure for BFD on each system places the
+conventional format for that system first in the search-list, so
+ambiguities are resolved in favor of convention.
+
+ `LDEMULATION' determines the default emulation if you don't use the
+`-m' option. The emulation can affect various aspects of linker
+behaviour, particularly the default linker script. You can list the
+available emulations with the `--verbose' or `-V' options. If the `-m'
+option is not used, and the `LDEMULATION' environment variable is not
+defined, the default emulation depends upon how the linker was
+configured.
+
+ Normally, the linker will default to demangling symbols. However, if
+`COLLECT_NO_DEMANGLE' is set in the environment, then it will default
+to not demangling symbols. This environment variable is used in a
+similar fashion by the `gcc' linker wrapper program. The default may
+be overridden by the `--demangle' and `--no-demangle' options.
+
+
+File: ld.info, Node: Scripts, Next: Machine Dependent, Prev: Invocation, Up: Top
+
+3 Linker Scripts
+****************
+
+Every link is controlled by a "linker script". This script is written
+in the linker command language.
+
+ The main purpose of the linker script is to describe how the
+sections in the input files should be mapped into the output file, and
+to control the memory layout of the output file. Most linker scripts
+do nothing more than this. However, when necessary, the linker script
+can also direct the linker to perform many other operations, using the
+commands described below.
+
+ The linker always uses a linker script. If you do not supply one
+yourself, the linker will use a default script that is compiled into the
+linker executable. You can use the `--verbose' command line option to
+display the default linker script. Certain command line options, such
+as `-r' or `-N', will affect the default linker script.
+
+ You may supply your own linker script by using the `-T' command line
+option. When you do this, your linker script will replace the default
+linker script.
+
+ You may also use linker scripts implicitly by naming them as input
+files to the linker, as though they were files to be linked. *Note
+Implicit Linker Scripts::.
+
+* Menu:
+
+* Basic Script Concepts:: Basic Linker Script Concepts
+* Script Format:: Linker Script Format
+* Simple Example:: Simple Linker Script Example
+* Simple Commands:: Simple Linker Script Commands
+* Assignments:: Assigning Values to Symbols
+* SECTIONS:: SECTIONS Command
+* MEMORY:: MEMORY Command
+* PHDRS:: PHDRS Command
+* VERSION:: VERSION Command
+* Expressions:: Expressions in Linker Scripts
+* Implicit Linker Scripts:: Implicit Linker Scripts
+
+
+File: ld.info, Node: Basic Script Concepts, Next: Script Format, Up: Scripts
+
+3.1 Basic Linker Script Concepts
+================================
+
+We need to define some basic concepts and vocabulary in order to
+describe the linker script language.
+
+ The linker combines input files into a single output file. The
+output file and each input file are in a special data format known as an
+"object file format". Each file is called an "object file". The
+output file is often called an "executable", but for our purposes we
+will also call it an object file. Each object file has, among other
+things, a list of "sections". We sometimes refer to a section in an
+input file as an "input section"; similarly, a section in the output
+file is an "output section".
+
+ Each section in an object file has a name and a size. Most sections
+also have an associated block of data, known as the "section contents".
+A section may be marked as "loadable", which mean that the contents
+should be loaded into memory when the output file is run. A section
+with no contents may be "allocatable", which means that an area in
+memory should be set aside, but nothing in particular should be loaded
+there (in some cases this memory must be zeroed out). A section which
+is neither loadable nor allocatable typically contains some sort of
+debugging information.
+
+ Every loadable or allocatable output section has two addresses. The
+first is the "VMA", or virtual memory address. This is the address the
+section will have when the output file is run. The second is the
+"LMA", or load memory address. This is the address at which the
+section will be loaded. In most cases the two addresses will be the
+same. An example of when they might be different is when a data section
+is loaded into ROM, and then copied into RAM when the program starts up
+(this technique is often used to initialize global variables in a ROM
+based system). In this case the ROM address would be the LMA, and the
+RAM address would be the VMA.
+
+ You can see the sections in an object file by using the `objdump'
+program with the `-h' option.
+
+ Every object file also has a list of "symbols", known as the "symbol
+table". A symbol may be defined or undefined. Each symbol has a name,
+and each defined symbol has an address, among other information. If
+you compile a C or C++ program into an object file, you will get a
+defined symbol for every defined function and global or static
+variable. Every undefined function or global variable which is
+referenced in the input file will become an undefined symbol.
+
+ You can see the symbols in an object file by using the `nm' program,
+or by using the `objdump' program with the `-t' option.
+
+
+File: ld.info, Node: Script Format, Next: Simple Example, Prev: Basic Script Concepts, Up: Scripts
+
+3.2 Linker Script Format
+========================
+
+Linker scripts are text files.
+
+ You write a linker script as a series of commands. Each command is
+either a keyword, possibly followed by arguments, or an assignment to a
+symbol. You may separate commands using semicolons. Whitespace is
+generally ignored.
+
+ Strings such as file or format names can normally be entered
+directly. If the file name contains a character such as a comma which
+would otherwise serve to separate file names, you may put the file name
+in double quotes. There is no way to use a double quote character in a
+file name.
+
+ You may include comments in linker scripts just as in C, delimited by
+`/*' and `*/'. As in C, comments are syntactically equivalent to
+whitespace.
+
+
+File: ld.info, Node: Simple Example, Next: Simple Commands, Prev: Script Format, Up: Scripts
+
+3.3 Simple Linker Script Example
+================================
+
+Many linker scripts are fairly simple.
+
+ The simplest possible linker script has just one command:
+`SECTIONS'. You use the `SECTIONS' command to describe the memory
+layout of the output file.
+
+ The `SECTIONS' command is a powerful command. Here we will describe
+a simple use of it. Let's assume your program consists only of code,
+initialized data, and uninitialized data. These will be in the
+`.text', `.data', and `.bss' sections, respectively. Let's assume
+further that these are the only sections which appear in your input
+files.
+
+ For this example, let's say that the code should be loaded at address
+0x10000, and that the data should start at address 0x8000000. Here is a
+linker script which will do that:
+ SECTIONS
+ {
+ . = 0x10000;
+ .text : { *(.text) }
+ . = 0x8000000;
+ .data : { *(.data) }
+ .bss : { *(.bss) }
+ }
+
+ You write the `SECTIONS' command as the keyword `SECTIONS', followed
+by a series of symbol assignments and output section descriptions
+enclosed in curly braces.
+
+ The first line inside the `SECTIONS' command of the above example
+sets the value of the special symbol `.', which is the location
+counter. If you do not specify the address of an output section in some
+other way (other ways are described later), the address is set from the
+current value of the location counter. The location counter is then
+incremented by the size of the output section. At the start of the
+`SECTIONS' command, the location counter has the value `0'.
+
+ The second line defines an output section, `.text'. The colon is
+required syntax which may be ignored for now. Within the curly braces
+after the output section name, you list the names of the input sections
+which should be placed into this output section. The `*' is a wildcard
+which matches any file name. The expression `*(.text)' means all
+`.text' input sections in all input files.
+
+ Since the location counter is `0x10000' when the output section
+`.text' is defined, the linker will set the address of the `.text'
+section in the output file to be `0x10000'.
+
+ The remaining lines define the `.data' and `.bss' sections in the
+output file. The linker will place the `.data' output section at
+address `0x8000000'. After the linker places the `.data' output
+section, the value of the location counter will be `0x8000000' plus the
+size of the `.data' output section. The effect is that the linker will
+place the `.bss' output section immediately after the `.data' output
+section in memory.
+
+ The linker will ensure that each output section has the required
+alignment, by increasing the location counter if necessary. In this
+example, the specified addresses for the `.text' and `.data' sections
+will probably satisfy any alignment constraints, but the linker may
+have to create a small gap between the `.data' and `.bss' sections.
+
+ That's it! That's a simple and complete linker script.
+
+
+File: ld.info, Node: Simple Commands, Next: Assignments, Prev: Simple Example, Up: Scripts
+
+3.4 Simple Linker Script Commands
+=================================
+
+In this section we describe the simple linker script commands.
+
+* Menu:
+
+* Entry Point:: Setting the entry point
+* File Commands:: Commands dealing with files
+
+* Format Commands:: Commands dealing with object file formats
+
+* REGION_ALIAS:: Assign alias names to memory regions
+* Miscellaneous Commands:: Other linker script commands
+
+
+File: ld.info, Node: Entry Point, Next: File Commands, Up: Simple Commands
+
+3.4.1 Setting the Entry Point
+-----------------------------
+
+The first instruction to execute in a program is called the "entry
+point". You can use the `ENTRY' linker script command to set the entry
+point. The argument is a symbol name:
+ ENTRY(SYMBOL)
+
+ There are several ways to set the entry point. The linker will set
+the entry point by trying each of the following methods in order, and
+stopping when one of them succeeds:
+ * the `-e' ENTRY command-line option;
+
+ * the `ENTRY(SYMBOL)' command in a linker script;
+
+ * the value of the symbol `start', if defined;
+
+ * the address of the first byte of the `.text' section, if present;
+
+ * The address `0'.
+
+
+File: ld.info, Node: File Commands, Next: Format Commands, Prev: Entry Point, Up: Simple Commands
+
+3.4.2 Commands Dealing with Files
+---------------------------------
+
+Several linker script commands deal with files.
+
+`INCLUDE FILENAME'
+ Include the linker script FILENAME at this point. The file will
+ be searched for in the current directory, and in any directory
+ specified with the `-L' option. You can nest calls to `INCLUDE'
+ up to 10 levels deep.
+
+ You can place `INCLUDE' directives at the top level, in `MEMORY' or
+ `SECTIONS' commands, or in output section descriptions.
+
+`INPUT(FILE, FILE, ...)'
+`INPUT(FILE FILE ...)'
+ The `INPUT' command directs the linker to include the named files
+ in the link, as though they were named on the command line.
+
+ For example, if you always want to include `subr.o' any time you do
+ a link, but you can't be bothered to put it on every link command
+ line, then you can put `INPUT (subr.o)' in your linker script.
+
+ In fact, if you like, you can list all of your input files in the
+ linker script, and then invoke the linker with nothing but a `-T'
+ option.
+
+ In case a "sysroot prefix" is configured, and the filename starts
+ with the `/' character, and the script being processed was located
+ inside the "sysroot prefix", the filename will be looked for in
+ the "sysroot prefix". Otherwise, the linker will try to open the
+ file in the current directory. If it is not found, the linker
+ will search through the archive library search path. See the
+ description of `-L' in *Note Command Line Options: Options.
+
+ If you use `INPUT (-lFILE)', `ld' will transform the name to
+ `libFILE.a', as with the command line argument `-l'.
+
+ When you use the `INPUT' command in an implicit linker script, the
+ files will be included in the link at the point at which the linker
+ script file is included. This can affect archive searching.
+
+`GROUP(FILE, FILE, ...)'
+`GROUP(FILE FILE ...)'
+ The `GROUP' command is like `INPUT', except that the named files
+ should all be archives, and they are searched repeatedly until no
+ new undefined references are created. See the description of `-('
+ in *Note Command Line Options: Options.
+
+`AS_NEEDED(FILE, FILE, ...)'
+`AS_NEEDED(FILE FILE ...)'
+ This construct can appear only inside of the `INPUT' or `GROUP'
+ commands, among other filenames. The files listed will be handled
+ as if they appear directly in the `INPUT' or `GROUP' commands,
+ with the exception of ELF shared libraries, that will be added only
+ when they are actually needed. This construct essentially enables
+ `--as-needed' option for all the files listed inside of it and
+ restores previous `--as-needed' resp. `--no-as-needed' setting
+ afterwards.
+
+`OUTPUT(FILENAME)'
+ The `OUTPUT' command names the output file. Using
+ `OUTPUT(FILENAME)' in the linker script is exactly like using `-o
+ FILENAME' on the command line (*note Command Line Options:
+ Options.). If both are used, the command line option takes
+ precedence.
+
+ You can use the `OUTPUT' command to define a default name for the
+ output file other than the usual default of `a.out'.
+
+`SEARCH_DIR(PATH)'
+ The `SEARCH_DIR' command adds PATH to the list of paths where `ld'
+ looks for archive libraries. Using `SEARCH_DIR(PATH)' is exactly
+ like using `-L PATH' on the command line (*note Command Line
+ Options: Options.). If both are used, then the linker will search
+ both paths. Paths specified using the command line option are
+ searched first.
+
+`STARTUP(FILENAME)'
+ The `STARTUP' command is just like the `INPUT' command, except
+ that FILENAME will become the first input file to be linked, as
+ though it were specified first on the command line. This may be
+ useful when using a system in which the entry point is always the
+ start of the first file.
+
+
+File: ld.info, Node: Format Commands, Next: REGION_ALIAS, Prev: File Commands, Up: Simple Commands
+
+3.4.3 Commands Dealing with Object File Formats
+-----------------------------------------------
+
+A couple of linker script commands deal with object file formats.
+
+`OUTPUT_FORMAT(BFDNAME)'
+`OUTPUT_FORMAT(DEFAULT, BIG, LITTLE)'
+ The `OUTPUT_FORMAT' command names the BFD format to use for the
+ output file (*note BFD::). Using `OUTPUT_FORMAT(BFDNAME)' is
+ exactly like using `--oformat BFDNAME' on the command line (*note
+ Command Line Options: Options.). If both are used, the command
+ line option takes precedence.
+
+ You can use `OUTPUT_FORMAT' with three arguments to use different
+ formats based on the `-EB' and `-EL' command line options. This
+ permits the linker script to set the output format based on the
+ desired endianness.
+
+ If neither `-EB' nor `-EL' are used, then the output format will
+ be the first argument, DEFAULT. If `-EB' is used, the output
+ format will be the second argument, BIG. If `-EL' is used, the
+ output format will be the third argument, LITTLE.
+
+ For example, the default linker script for the MIPS ELF target
+ uses this command:
+ OUTPUT_FORMAT(elf32-bigmips, elf32-bigmips, elf32-littlemips)
+ This says that the default format for the output file is
+ `elf32-bigmips', but if the user uses the `-EL' command line
+ option, the output file will be created in the `elf32-littlemips'
+ format.
+
+`TARGET(BFDNAME)'
+ The `TARGET' command names the BFD format to use when reading input
+ files. It affects subsequent `INPUT' and `GROUP' commands. This
+ command is like using `-b BFDNAME' on the command line (*note
+ Command Line Options: Options.). If the `TARGET' command is used
+ but `OUTPUT_FORMAT' is not, then the last `TARGET' command is also
+ used to set the format for the output file. *Note BFD::.
+
+
+File: ld.info, Node: REGION_ALIAS, Next: Miscellaneous Commands, Prev: Format Commands, Up: Simple Commands
+
+3.4.4 Assign alias names to memory regions
+------------------------------------------
+
+Alias names can be added to existing memory regions created with the
+*Note MEMORY:: command. Each name corresponds to at most one memory
+region.
+
+ REGION_ALIAS(ALIAS, REGION)
+
+ The `REGION_ALIAS' function creates an alias name ALIAS for the
+memory region REGION. This allows a flexible mapping of output sections
+to memory regions. An example follows.
+
+ Suppose we have an application for embedded systems which come with
+various memory storage devices. All have a general purpose, volatile
+memory `RAM' that allows code execution or data storage. Some may have
+a read-only, non-volatile memory `ROM' that allows code execution and
+read-only data access. The last variant is a read-only, non-volatile
+memory `ROM2' with read-only data access and no code execution
+capability. We have four output sections:
+
+ * `.text' program code;
+
+ * `.rodata' read-only data;
+
+ * `.data' read-write initialized data;
+
+ * `.bss' read-write zero initialized data.
+
+ The goal is to provide a linker command file that contains a system
+independent part defining the output sections and a system dependent
+part mapping the output sections to the memory regions available on the
+system. Our embedded systems come with three different memory setups
+`A', `B' and `C':
+Section Variant A Variant B Variant C
+.text RAM ROM ROM
+.rodata RAM ROM ROM2
+.data RAM RAM/ROM RAM/ROM2
+.bss RAM RAM RAM
+ The notation `RAM/ROM' or `RAM/ROM2' means that this section is
+loaded into region `ROM' or `ROM2' respectively. Please note that the
+load address of the `.data' section starts in all three variants at the
+end of the `.rodata' section.
+
+ The base linker script that deals with the output sections follows.
+It includes the system dependent `linkcmds.memory' file that describes
+the memory layout:
+ INCLUDE linkcmds.memory
+
+ SECTIONS
+ {
+ .text :
+ {
+ *(.text)
+ } > REGION_TEXT
+ .rodata :
+ {
+ *(.rodata)
+ rodata_end = .;
+ } > REGION_RODATA
+ .data : AT (rodata_end)
+ {
+ data_start = .;
+ *(.data)
+ } > REGION_DATA
+ data_size = SIZEOF(.data);
+ data_load_start = LOADADDR(.data);
+ .bss :
+ {
+ *(.bss)
+ } > REGION_BSS
+ }
+
+ Now we need three different `linkcmds.memory' files to define memory
+regions and alias names. The content of `linkcmds.memory' for the three
+variants `A', `B' and `C':
+`A'
+ Here everything goes into the `RAM'.
+ MEMORY
+ {
+ RAM : ORIGIN = 0, LENGTH = 4M
+ }
+
+ REGION_ALIAS("REGION_TEXT", RAM);
+ REGION_ALIAS("REGION_RODATA", RAM);
+ REGION_ALIAS("REGION_DATA", RAM);
+ REGION_ALIAS("REGION_BSS", RAM);
+
+`B'
+ Program code and read-only data go into the `ROM'. Read-write
+ data goes into the `RAM'. An image of the initialized data is
+ loaded into the `ROM' and will be copied during system start into
+ the `RAM'.
+ MEMORY
+ {
+ ROM : ORIGIN = 0, LENGTH = 3M
+ RAM : ORIGIN = 0x10000000, LENGTH = 1M
+ }
+
+ REGION_ALIAS("REGION_TEXT", ROM);
+ REGION_ALIAS("REGION_RODATA", ROM);
+ REGION_ALIAS("REGION_DATA", RAM);
+ REGION_ALIAS("REGION_BSS", RAM);
+
+`C'
+ Program code goes into the `ROM'. Read-only data goes into the
+ `ROM2'. Read-write data goes into the `RAM'. An image of the
+ initialized data is loaded into the `ROM2' and will be copied
+ during system start into the `RAM'.
+ MEMORY
+ {
+ ROM : ORIGIN = 0, LENGTH = 2M
+ ROM2 : ORIGIN = 0x10000000, LENGTH = 1M
+ RAM : ORIGIN = 0x20000000, LENGTH = 1M
+ }
+
+ REGION_ALIAS("REGION_TEXT", ROM);
+ REGION_ALIAS("REGION_RODATA", ROM2);
+ REGION_ALIAS("REGION_DATA", RAM);
+ REGION_ALIAS("REGION_BSS", RAM);
+
+ It is possible to write a common system initialization routine to
+copy the `.data' section from `ROM' or `ROM2' into the `RAM' if
+necessary:
+ #include <string.h>
+
+ extern char data_start [];
+ extern char data_size [];
+ extern char data_load_start [];
+
+ void copy_data(void)
+ {
+ if (data_start != data_load_start)
+ {
+ memcpy(data_start, data_load_start, (size_t) data_size);
+ }
+ }
+
+
+File: ld.info, Node: Miscellaneous Commands, Prev: REGION_ALIAS, Up: Simple Commands
+
+3.4.5 Other Linker Script Commands
+----------------------------------
+
+There are a few other linker scripts commands.
+
+`ASSERT(EXP, MESSAGE)'
+ Ensure that EXP is non-zero. If it is zero, then exit the linker
+ with an error code, and print MESSAGE.
+
+`EXTERN(SYMBOL SYMBOL ...)'
+ Force SYMBOL to be entered in the output file as an undefined
+ symbol. Doing this may, for example, trigger linking of additional
+ modules from standard libraries. You may list several SYMBOLs for
+ each `EXTERN', and you may use `EXTERN' multiple times. This
+ command has the same effect as the `-u' command-line option.
+
+`FORCE_COMMON_ALLOCATION'
+ This command has the same effect as the `-d' command-line option:
+ to make `ld' assign space to common symbols even if a relocatable
+ output file is specified (`-r').
+
+`INHIBIT_COMMON_ALLOCATION'
+ This command has the same effect as the `--no-define-common'
+ command-line option: to make `ld' omit the assignment of addresses
+ to common symbols even for a non-relocatable output file.
+
+`INSERT [ AFTER | BEFORE ] OUTPUT_SECTION'
+ This command is typically used in a script specified by `-T' to
+ augment the default `SECTIONS' with, for example, overlays. It
+ inserts all prior linker script statements after (or before)
+ OUTPUT_SECTION, and also causes `-T' to not override the default
+ linker script. The exact insertion point is as for orphan
+ sections. *Note Location Counter::. The insertion happens after
+ the linker has mapped input sections to output sections. Prior to
+ the insertion, since `-T' scripts are parsed before the default
+ linker script, statements in the `-T' script occur before the
+ default linker script statements in the internal linker
+ representation of the script. In particular, input section
+ assignments will be made to `-T' output sections before those in
+ the default script. Here is an example of how a `-T' script using
+ `INSERT' might look:
+
+ SECTIONS
+ {
+ OVERLAY :
+ {
+ .ov1 { ov1*(.text) }
+ .ov2 { ov2*(.text) }
+ }
+ }
+ INSERT AFTER .text;
+
+`NOCROSSREFS(SECTION SECTION ...)'
+ This command may be used to tell `ld' to issue an error about any
+ references among certain output sections.
+
+ In certain types of programs, particularly on embedded systems when
+ using overlays, when one section is loaded into memory, another
+ section will not be. Any direct references between the two
+ sections would be errors. For example, it would be an error if
+ code in one section called a function defined in the other section.
+
+ The `NOCROSSREFS' command takes a list of output section names. If
+ `ld' detects any cross references between the sections, it reports
+ an error and returns a non-zero exit status. Note that the
+ `NOCROSSREFS' command uses output section names, not input section
+ names.
+
+`OUTPUT_ARCH(BFDARCH)'
+ Specify a particular output machine architecture. The argument is
+ one of the names used by the BFD library (*note BFD::). You can
+ see the architecture of an object file by using the `objdump'
+ program with the `-f' option.
+
+
+File: ld.info, Node: Assignments, Next: SECTIONS, Prev: Simple Commands, Up: Scripts
+
+3.5 Assigning Values to Symbols
+===============================
+
+You may assign a value to a symbol in a linker script. This will define
+the symbol and place it into the symbol table with a global scope.
+
+* Menu:
+
+* Simple Assignments:: Simple Assignments
+* PROVIDE:: PROVIDE
+* PROVIDE_HIDDEN:: PROVIDE_HIDDEN
+* Source Code Reference:: How to use a linker script defined symbol in source code
+
+
+File: ld.info, Node: Simple Assignments, Next: PROVIDE, Up: Assignments
+
+3.5.1 Simple Assignments
+------------------------
+
+You may assign to a symbol using any of the C assignment operators:
+
+`SYMBOL = EXPRESSION ;'
+`SYMBOL += EXPRESSION ;'
+`SYMBOL -= EXPRESSION ;'
+`SYMBOL *= EXPRESSION ;'
+`SYMBOL /= EXPRESSION ;'
+`SYMBOL <<= EXPRESSION ;'
+`SYMBOL >>= EXPRESSION ;'
+`SYMBOL &= EXPRESSION ;'
+`SYMBOL |= EXPRESSION ;'
+
+ The first case will define SYMBOL to the value of EXPRESSION. In
+the other cases, SYMBOL must already be defined, and the value will be
+adjusted accordingly.
+
+ The special symbol name `.' indicates the location counter. You may
+only use this within a `SECTIONS' command. *Note Location Counter::.
+
+ The semicolon after EXPRESSION is required.
+
+ Expressions are defined below; see *Note Expressions::.
+
+ You may write symbol assignments as commands in their own right, or
+as statements within a `SECTIONS' command, or as part of an output
+section description in a `SECTIONS' command.
+
+ The section of the symbol will be set from the section of the
+expression; for more information, see *Note Expression Section::.
+
+ Here is an example showing the three different places that symbol
+assignments may be used:
+
+ floating_point = 0;
+ SECTIONS
+ {
+ .text :
+ {
+ *(.text)
+ _etext = .;
+ }
+ _bdata = (. + 3) & ~ 3;
+ .data : { *(.data) }
+ }
+ In this example, the symbol `floating_point' will be defined as
+zero. The symbol `_etext' will be defined as the address following the
+last `.text' input section. The symbol `_bdata' will be defined as the
+address following the `.text' output section aligned upward to a 4 byte
+boundary.
+
+
+File: ld.info, Node: PROVIDE, Next: PROVIDE_HIDDEN, Prev: Simple Assignments, Up: Assignments
+
+3.5.2 PROVIDE
+-------------
+
+In some cases, it is desirable for a linker script to define a symbol
+only if it is referenced and is not defined by any object included in
+the link. For example, traditional linkers defined the symbol `etext'.
+However, ANSI C requires that the user be able to use `etext' as a
+function name without encountering an error. The `PROVIDE' keyword may
+be used to define a symbol, such as `etext', only if it is referenced
+but not defined. The syntax is `PROVIDE(SYMBOL = EXPRESSION)'.
+
+ Here is an example of using `PROVIDE' to define `etext':
+ SECTIONS
+ {
+ .text :
+ {
+ *(.text)
+ _etext = .;
+ PROVIDE(etext = .);
+ }
+ }
+
+ In this example, if the program defines `_etext' (with a leading
+underscore), the linker will give a multiple definition error. If, on
+the other hand, the program defines `etext' (with no leading
+underscore), the linker will silently use the definition in the program.
+If the program references `etext' but does not define it, the linker
+will use the definition in the linker script.
+
+
+File: ld.info, Node: PROVIDE_HIDDEN, Next: Source Code Reference, Prev: PROVIDE, Up: Assignments
+
+3.5.3 PROVIDE_HIDDEN
+--------------------
+
+Similar to `PROVIDE'. For ELF targeted ports, the symbol will be
+hidden and won't be exported.
+
+
+File: ld.info, Node: Source Code Reference, Prev: PROVIDE_HIDDEN, Up: Assignments
+
+3.5.4 Source Code Reference
+---------------------------
+
+Accessing a linker script defined variable from source code is not
+intuitive. In particular a linker script symbol is not equivalent to a
+variable declaration in a high level language, it is instead a symbol
+that does not have a value.
+
+ Before going further, it is important to note that compilers often
+transform names in the source code into different names when they are
+stored in the symbol table. For example, Fortran compilers commonly
+prepend or append an underscore, and C++ performs extensive `name
+mangling'. Therefore there might be a discrepancy between the name of
+a variable as it is used in source code and the name of the same
+variable as it is defined in a linker script. For example in C a
+linker script variable might be referred to as:
+
+ extern int foo;
+
+ But in the linker script it might be defined as:
+
+ _foo = 1000;
+
+ In the remaining examples however it is assumed that no name
+transformation has taken place.
+
+ When a symbol is declared in a high level language such as C, two
+things happen. The first is that the compiler reserves enough space in
+the program's memory to hold the _value_ of the symbol. The second is
+that the compiler creates an entry in the program's symbol table which
+holds the symbol's _address_. ie the symbol table contains the address
+of the block of memory holding the symbol's value. So for example the
+following C declaration, at file scope:
+
+ int foo = 1000;
+
+ creates a entry called `foo' in the symbol table. This entry holds
+the address of an `int' sized block of memory where the number 1000 is
+initially stored.
+
+ When a program references a symbol the compiler generates code that
+first accesses the symbol table to find the address of the symbol's
+memory block and then code to read the value from that memory block.
+So:
+
+ foo = 1;
+
+ looks up the symbol `foo' in the symbol table, gets the address
+associated with this symbol and then writes the value 1 into that
+address. Whereas:
+
+ int * a = & foo;
+
+ looks up the symbol `foo' in the symbol table, gets it address and
+then copies this address into the block of memory associated with the
+variable `a'.
+
+ Linker scripts symbol declarations, by contrast, create an entry in
+the symbol table but do not assign any memory to them. Thus they are
+an address without a value. So for example the linker script
+definition:
+
+ foo = 1000;
+
+ creates an entry in the symbol table called `foo' which holds the
+address of memory location 1000, but nothing special is stored at
+address 1000. This means that you cannot access the _value_ of a
+linker script defined symbol - it has no value - all you can do is
+access the _address_ of a linker script defined symbol.
+
+ Hence when you are using a linker script defined symbol in source
+code you should always take the address of the symbol, and never
+attempt to use its value. For example suppose you want to copy the
+contents of a section of memory called .ROM into a section called
+.FLASH and the linker script contains these declarations:
+
+ start_of_ROM = .ROM;
+ end_of_ROM = .ROM + sizeof (.ROM) - 1;
+ start_of_FLASH = .FLASH;
+
+ Then the C source code to perform the copy would be:
+
+ extern char start_of_ROM, end_of_ROM, start_of_FLASH;
+
+ memcpy (& start_of_FLASH, & start_of_ROM, & end_of_ROM - & start_of_ROM);
+
+ Note the use of the `&' operators. These are correct.
+
+
+File: ld.info, Node: SECTIONS, Next: MEMORY, Prev: Assignments, Up: Scripts
+
+3.6 SECTIONS Command
+====================
+
+The `SECTIONS' command tells the linker how to map input sections into
+output sections, and how to place the output sections in memory.
+
+ The format of the `SECTIONS' command is:
+ SECTIONS
+ {
+ SECTIONS-COMMAND
+ SECTIONS-COMMAND
+ ...
+ }
+
+ Each SECTIONS-COMMAND may of be one of the following:
+
+ * an `ENTRY' command (*note Entry command: Entry Point.)
+
+ * a symbol assignment (*note Assignments::)
+
+ * an output section description
+
+ * an overlay description
+
+ The `ENTRY' command and symbol assignments are permitted inside the
+`SECTIONS' command for convenience in using the location counter in
+those commands. This can also make the linker script easier to
+understand because you can use those commands at meaningful points in
+the layout of the output file.
+
+ Output section descriptions and overlay descriptions are described
+below.
+
+ If you do not use a `SECTIONS' command in your linker script, the
+linker will place each input section into an identically named output
+section in the order that the sections are first encountered in the
+input files. If all input sections are present in the first file, for
+example, the order of sections in the output file will match the order
+in the first input file. The first section will be at address zero.
+
+* Menu:
+
+* Output Section Description:: Output section description
+* Output Section Name:: Output section name
+* Output Section Address:: Output section address
+* Input Section:: Input section description
+* Output Section Data:: Output section data
+* Output Section Keywords:: Output section keywords
+* Output Section Discarding:: Output section discarding
+* Output Section Attributes:: Output section attributes
+* Overlay Description:: Overlay description
+
+
+File: ld.info, Node: Output Section Description, Next: Output Section Name, Up: SECTIONS
+
+3.6.1 Output Section Description
+--------------------------------
+
+The full description of an output section looks like this:
+ SECTION [ADDRESS] [(TYPE)] :
+ [AT(LMA)]
+ [ALIGN(SECTION_ALIGN)]
+ [SUBALIGN(SUBSECTION_ALIGN)]
+ [CONSTRAINT]
+ {
+ OUTPUT-SECTION-COMMAND
+ OUTPUT-SECTION-COMMAND
+ ...
+ } [>REGION] [AT>LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP]
+
+ Most output sections do not use most of the optional section
+attributes.
+
+ The whitespace around SECTION is required, so that the section name
+is unambiguous. The colon and the curly braces are also required. The
+line breaks and other white space are optional.
+
+ Each OUTPUT-SECTION-COMMAND may be one of the following:
+
+ * a symbol assignment (*note Assignments::)
+
+ * an input section description (*note Input Section::)
+
+ * data values to include directly (*note Output Section Data::)
+
+ * a special output section keyword (*note Output Section Keywords::)
+
+
+File: ld.info, Node: Output Section Name, Next: Output Section Address, Prev: Output Section Description, Up: SECTIONS
+
+3.6.2 Output Section Name
+-------------------------
+
+The name of the output section is SECTION. SECTION must meet the
+constraints of your output format. In formats which only support a
+limited number of sections, such as `a.out', the name must be one of
+the names supported by the format (`a.out', for example, allows only
+`.text', `.data' or `.bss'). If the output format supports any number
+of sections, but with numbers and not names (as is the case for Oasys),
+the name should be supplied as a quoted numeric string. A section name
+may consist of any sequence of characters, but a name which contains
+any unusual characters such as commas must be quoted.
+
+ The output section name `/DISCARD/' is special; *Note Output Section
+Discarding::.
+
+
+File: ld.info, Node: Output Section Address, Next: Input Section, Prev: Output Section Name, Up: SECTIONS
+
+3.6.3 Output Section Address
+----------------------------
+
+The ADDRESS is an expression for the VMA (the virtual memory address)
+of the output section. If you do not provide ADDRESS, the linker will
+set it based on REGION if present, or otherwise based on the current
+value of the location counter.
+
+ If you provide ADDRESS, the address of the output section will be
+set to precisely that. If you provide neither ADDRESS nor REGION, then
+the address of the output section will be set to the current value of
+the location counter aligned to the alignment requirements of the
+output section. The alignment requirement of the output section is the
+strictest alignment of any input section contained within the output
+section.
+
+ For example,
+ .text . : { *(.text) }
+ and
+ .text : { *(.text) }
+ are subtly different. The first will set the address of the `.text'
+output section to the current value of the location counter. The
+second will set it to the current value of the location counter aligned
+to the strictest alignment of a `.text' input section.
+
+ The ADDRESS may be an arbitrary expression; *Note Expressions::.
+For example, if you want to align the section on a 0x10 byte boundary,
+so that the lowest four bits of the section address are zero, you could
+do something like this:
+ .text ALIGN(0x10) : { *(.text) }
+ This works because `ALIGN' returns the current location counter
+aligned upward to the specified value.
+
+ Specifying ADDRESS for a section will change the value of the
+location counter, provided that the section is non-empty. (Empty
+sections are ignored).
+
+
+File: ld.info, Node: Input Section, Next: Output Section Data, Prev: Output Section Address, Up: SECTIONS
+
+3.6.4 Input Section Description
+-------------------------------
+
+The most common output section command is an input section description.
+
+ The input section description is the most basic linker script
+operation. You use output sections to tell the linker how to lay out
+your program in memory. You use input section descriptions to tell the
+linker how to map the input files into your memory layout.
+
+* Menu:
+
+* Input Section Basics:: Input section basics
+* Input Section Wildcards:: Input section wildcard patterns
+* Input Section Common:: Input section for common symbols
+* Input Section Keep:: Input section and garbage collection
+* Input Section Example:: Input section example
+
+
+File: ld.info, Node: Input Section Basics, Next: Input Section Wildcards, Up: Input Section
+
+3.6.4.1 Input Section Basics
+............................
+
+An input section description consists of a file name optionally followed
+by a list of section names in parentheses.
+
+ The file name and the section name may be wildcard patterns, which we
+describe further below (*note Input Section Wildcards::).
+
+ The most common input section description is to include all input
+sections with a particular name in the output section. For example, to
+include all input `.text' sections, you would write:
+ *(.text)
+ Here the `*' is a wildcard which matches any file name. To exclude
+a list of files from matching the file name wildcard, EXCLUDE_FILE may
+be used to match all files except the ones specified in the
+EXCLUDE_FILE list. For example:
+ *(EXCLUDE_FILE (*crtend.o *otherfile.o) .ctors)
+ will cause all .ctors sections from all files except `crtend.o' and
+`otherfile.o' to be included.
+
+ There are two ways to include more than one section:
+ *(.text .rdata)
+ *(.text) *(.rdata)
+ The difference between these is the order in which the `.text' and
+`.rdata' input sections will appear in the output section. In the
+first example, they will be intermingled, appearing in the same order as
+they are found in the linker input. In the second example, all `.text'
+input sections will appear first, followed by all `.rdata' input
+sections.
+
+ You can specify a file name to include sections from a particular
+file. You would do this if one or more of your files contain special
+data that needs to be at a particular location in memory. For example:
+ data.o(.data)
+
+ You can also specify files within archives by writing a pattern
+matching the archive, a colon, then the pattern matching the file, with
+no whitespace around the colon.
+
+`archive:file'
+ matches file within archive
+
+`archive:'
+ matches the whole archive
+
+`:file'
+ matches file but not one in an archive
+
+ Either one or both of `archive' and `file' can contain shell
+wildcards. On DOS based file systems, the linker will assume that a
+single letter followed by a colon is a drive specifier, so `c:myfile.o'
+is a simple file specification, not `myfile.o' within an archive called
+`c'. `archive:file' filespecs may also be used within an
+`EXCLUDE_FILE' list, but may not appear in other linker script
+contexts. For instance, you cannot extract a file from an archive by
+using `archive:file' in an `INPUT' command.
+
+ If you use a file name without a list of sections, then all sections
+in the input file will be included in the output section. This is not
+commonly done, but it may by useful on occasion. For example:
+ data.o
+
+ When you use a file name which is not an `archive:file' specifier
+and does not contain any wild card characters, the linker will first
+see if you also specified the file name on the linker command line or
+in an `INPUT' command. If you did not, the linker will attempt to open
+the file as an input file, as though it appeared on the command line.
+Note that this differs from an `INPUT' command, because the linker will
+not search for the file in the archive search path.
+
+
+File: ld.info, Node: Input Section Wildcards, Next: Input Section Common, Prev: Input Section Basics, Up: Input Section
+
+3.6.4.2 Input Section Wildcard Patterns
+.......................................
+
+In an input section description, either the file name or the section
+name or both may be wildcard patterns.
+
+ The file name of `*' seen in many examples is a simple wildcard
+pattern for the file name.
+
+ The wildcard patterns are like those used by the Unix shell.
+
+`*'
+ matches any number of characters
+
+`?'
+ matches any single character
+
+`[CHARS]'
+ matches a single instance of any of the CHARS; the `-' character
+ may be used to specify a range of characters, as in `[a-z]' to
+ match any lower case letter
+
+`\'
+ quotes the following character
+
+ When a file name is matched with a wildcard, the wildcard characters
+will not match a `/' character (used to separate directory names on
+Unix). A pattern consisting of a single `*' character is an exception;
+it will always match any file name, whether it contains a `/' or not.
+In a section name, the wildcard characters will match a `/' character.
+
+ File name wildcard patterns only match files which are explicitly
+specified on the command line or in an `INPUT' command. The linker
+does not search directories to expand wildcards.
+
+ If a file name matches more than one wildcard pattern, or if a file
+name appears explicitly and is also matched by a wildcard pattern, the
+linker will use the first match in the linker script. For example, this
+sequence of input section descriptions is probably in error, because the
+`data.o' rule will not be used:
+ .data : { *(.data) }
+ .data1 : { data.o(.data) }
+
+ Normally, the linker will place files and sections matched by
+wildcards in the order in which they are seen during the link. You can
+change this by using the `SORT_BY_NAME' keyword, which appears before a
+wildcard pattern in parentheses (e.g., `SORT_BY_NAME(.text*)'). When
+the `SORT_BY_NAME' keyword is used, the linker will sort the files or
+sections into ascending order by name before placing them in the output
+file.
+
+ `SORT_BY_ALIGNMENT' is very similar to `SORT_BY_NAME'. The
+difference is `SORT_BY_ALIGNMENT' will sort sections into ascending
+order by alignment before placing them in the output file.
+
+ `SORT' is an alias for `SORT_BY_NAME'.
+
+ When there are nested section sorting commands in linker script,
+there can be at most 1 level of nesting for section sorting commands.
+
+ 1. `SORT_BY_NAME' (`SORT_BY_ALIGNMENT' (wildcard section pattern)).
+ It will sort the input sections by name first, then by alignment
+ if 2 sections have the same name.
+
+ 2. `SORT_BY_ALIGNMENT' (`SORT_BY_NAME' (wildcard section pattern)).
+ It will sort the input sections by alignment first, then by name
+ if 2 sections have the same alignment.
+
+ 3. `SORT_BY_NAME' (`SORT_BY_NAME' (wildcard section pattern)) is
+ treated the same as `SORT_BY_NAME' (wildcard section pattern).
+
+ 4. `SORT_BY_ALIGNMENT' (`SORT_BY_ALIGNMENT' (wildcard section
+ pattern)) is treated the same as `SORT_BY_ALIGNMENT' (wildcard
+ section pattern).
+
+ 5. All other nested section sorting commands are invalid.
+
+ When both command line section sorting option and linker script
+section sorting command are used, section sorting command always takes
+precedence over the command line option.
+
+ If the section sorting command in linker script isn't nested, the
+command line option will make the section sorting command to be treated
+as nested sorting command.
+
+ 1. `SORT_BY_NAME' (wildcard section pattern ) with `--sort-sections
+ alignment' is equivalent to `SORT_BY_NAME' (`SORT_BY_ALIGNMENT'
+ (wildcard section pattern)).
+
+ 2. `SORT_BY_ALIGNMENT' (wildcard section pattern) with
+ `--sort-section name' is equivalent to `SORT_BY_ALIGNMENT'
+ (`SORT_BY_NAME' (wildcard section pattern)).
+
+ If the section sorting command in linker script is nested, the
+command line option will be ignored.
+
+ If you ever get confused about where input sections are going, use
+the `-M' linker option to generate a map file. The map file shows
+precisely how input sections are mapped to output sections.
+
+ This example shows how wildcard patterns might be used to partition
+files. This linker script directs the linker to place all `.text'
+sections in `.text' and all `.bss' sections in `.bss'. The linker will
+place the `.data' section from all files beginning with an upper case
+character in `.DATA'; for all other files, the linker will place the
+`.data' section in `.data'.
+ SECTIONS {
+ .text : { *(.text) }
+ .DATA : { [A-Z]*(.data) }
+ .data : { *(.data) }
+ .bss : { *(.bss) }
+ }
+
+
+File: ld.info, Node: Input Section Common, Next: Input Section Keep, Prev: Input Section Wildcards, Up: Input Section
+
+3.6.4.3 Input Section for Common Symbols
+........................................
+
+A special notation is needed for common symbols, because in many object
+file formats common symbols do not have a particular input section. The
+linker treats common symbols as though they are in an input section
+named `COMMON'.
+
+ You may use file names with the `COMMON' section just as with any
+other input sections. You can use this to place common symbols from a
+particular input file in one section while common symbols from other
+input files are placed in another section.
+
+ In most cases, common symbols in input files will be placed in the
+`.bss' section in the output file. For example:
+ .bss { *(.bss) *(COMMON) }
+
+ Some object file formats have more than one type of common symbol.
+For example, the MIPS ELF object file format distinguishes standard
+common symbols and small common symbols. In this case, the linker will
+use a different special section name for other types of common symbols.
+In the case of MIPS ELF, the linker uses `COMMON' for standard common
+symbols and `.scommon' for small common symbols. This permits you to
+map the different types of common symbols into memory at different
+locations.
+
+ You will sometimes see `[COMMON]' in old linker scripts. This
+notation is now considered obsolete. It is equivalent to `*(COMMON)'.
+
+
+File: ld.info, Node: Input Section Keep, Next: Input Section Example, Prev: Input Section Common, Up: Input Section
+
+3.6.4.4 Input Section and Garbage Collection
+............................................
+
+When link-time garbage collection is in use (`--gc-sections'), it is
+often useful to mark sections that should not be eliminated. This is
+accomplished by surrounding an input section's wildcard entry with
+`KEEP()', as in `KEEP(*(.init))' or `KEEP(SORT_BY_NAME(*)(.ctors))'.
+
+
+File: ld.info, Node: Input Section Example, Prev: Input Section Keep, Up: Input Section
+
+3.6.4.5 Input Section Example
+.............................
+
+The following example is a complete linker script. It tells the linker
+to read all of the sections from file `all.o' and place them at the
+start of output section `outputa' which starts at location `0x10000'.
+All of section `.input1' from file `foo.o' follows immediately, in the
+same output section. All of section `.input2' from `foo.o' goes into
+output section `outputb', followed by section `.input1' from `foo1.o'.
+All of the remaining `.input1' and `.input2' sections from any files
+are written to output section `outputc'.
+
+ SECTIONS {
+ outputa 0x10000 :
+ {
+ all.o
+ foo.o (.input1)
+ }
+ outputb :
+ {
+ foo.o (.input2)
+ foo1.o (.input1)
+ }
+ outputc :
+ {
+ *(.input1)
+ *(.input2)
+ }
+ }
+
+
+File: ld.info, Node: Output Section Data, Next: Output Section Keywords, Prev: Input Section, Up: SECTIONS
+
+3.6.5 Output Section Data
+-------------------------
+
+You can include explicit bytes of data in an output section by using
+`BYTE', `SHORT', `LONG', `QUAD', or `SQUAD' as an output section
+command. Each keyword is followed by an expression in parentheses
+providing the value to store (*note Expressions::). The value of the
+expression is stored at the current value of the location counter.
+
+ The `BYTE', `SHORT', `LONG', and `QUAD' commands store one, two,
+four, and eight bytes (respectively). After storing the bytes, the
+location counter is incremented by the number of bytes stored.
+
+ For example, this will store the byte 1 followed by the four byte
+value of the symbol `addr':
+ BYTE(1)
+ LONG(addr)
+
+ When using a 64 bit host or target, `QUAD' and `SQUAD' are the same;
+they both store an 8 byte, or 64 bit, value. When both host and target
+are 32 bits, an expression is computed as 32 bits. In this case `QUAD'
+stores a 32 bit value zero extended to 64 bits, and `SQUAD' stores a 32
+bit value sign extended to 64 bits.
+
+ If the object file format of the output file has an explicit
+endianness, which is the normal case, the value will be stored in that
+endianness. When the object file format does not have an explicit
+endianness, as is true of, for example, S-records, the value will be
+stored in the endianness of the first input object file.
+
+ Note--these commands only work inside a section description and not
+between them, so the following will produce an error from the linker:
+ SECTIONS { .text : { *(.text) } LONG(1) .data : { *(.data) } }
+ whereas this will work:
+ SECTIONS { .text : { *(.text) ; LONG(1) } .data : { *(.data) } }
+
+ You may use the `FILL' command to set the fill pattern for the
+current section. It is followed by an expression in parentheses. Any
+otherwise unspecified regions of memory within the section (for example,
+gaps left due to the required alignment of input sections) are filled
+with the value of the expression, repeated as necessary. A `FILL'
+statement covers memory locations after the point at which it occurs in
+the section definition; by including more than one `FILL' statement,
+you can have different fill patterns in different parts of an output
+section.
+
+ This example shows how to fill unspecified regions of memory with the
+value `0x90':
+ FILL(0x90909090)
+
+ The `FILL' command is similar to the `=FILLEXP' output section
+attribute, but it only affects the part of the section following the
+`FILL' command, rather than the entire section. If both are used, the
+`FILL' command takes precedence. *Note Output Section Fill::, for
+details on the fill expression.
+
+
+File: ld.info, Node: Output Section Keywords, Next: Output Section Discarding, Prev: Output Section Data, Up: SECTIONS
+
+3.6.6 Output Section Keywords
+-----------------------------
+
+There are a couple of keywords which can appear as output section
+commands.
+
+`CREATE_OBJECT_SYMBOLS'
+ The command tells the linker to create a symbol for each input
+ file. The name of each symbol will be the name of the
+ corresponding input file. The section of each symbol will be the
+ output section in which the `CREATE_OBJECT_SYMBOLS' command
+ appears.
+
+ This is conventional for the a.out object file format. It is not
+ normally used for any other object file format.
+
+`CONSTRUCTORS'
+ When linking using the a.out object file format, the linker uses an
+ unusual set construct to support C++ global constructors and
+ destructors. When linking object file formats which do not support
+ arbitrary sections, such as ECOFF and XCOFF, the linker will
+ automatically recognize C++ global constructors and destructors by
+ name. For these object file formats, the `CONSTRUCTORS' command
+ tells the linker to place constructor information in the output
+ section where the `CONSTRUCTORS' command appears. The
+ `CONSTRUCTORS' command is ignored for other object file formats.
+
+ The symbol `__CTOR_LIST__' marks the start of the global
+ constructors, and the symbol `__CTOR_END__' marks the end.
+ Similarly, `__DTOR_LIST__' and `__DTOR_END__' mark the start and
+ end of the global destructors. The first word in the list is the
+ number of entries, followed by the address of each constructor or
+ destructor, followed by a zero word. The compiler must arrange to
+ actually run the code. For these object file formats GNU C++
+ normally calls constructors from a subroutine `__main'; a call to
+ `__main' is automatically inserted into the startup code for
+ `main'. GNU C++ normally runs destructors either by using
+ `atexit', or directly from the function `exit'.
+
+ For object file formats such as `COFF' or `ELF' which support
+ arbitrary section names, GNU C++ will normally arrange to put the
+ addresses of global constructors and destructors into the `.ctors'
+ and `.dtors' sections. Placing the following sequence into your
+ linker script will build the sort of table which the GNU C++
+ runtime code expects to see.
+
+ __CTOR_LIST__ = .;
+ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
+ *(.ctors)
+ LONG(0)
+ __CTOR_END__ = .;
+ __DTOR_LIST__ = .;
+ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
+ *(.dtors)
+ LONG(0)
+ __DTOR_END__ = .;
+
+ If you are using the GNU C++ support for initialization priority,
+ which provides some control over the order in which global
+ constructors are run, you must sort the constructors at link time
+ to ensure that they are executed in the correct order. When using
+ the `CONSTRUCTORS' command, use `SORT_BY_NAME(CONSTRUCTORS)'
+ instead. When using the `.ctors' and `.dtors' sections, use
+ `*(SORT_BY_NAME(.ctors))' and `*(SORT_BY_NAME(.dtors))' instead of
+ just `*(.ctors)' and `*(.dtors)'.
+
+ Normally the compiler and linker will handle these issues
+ automatically, and you will not need to concern yourself with
+ them. However, you may need to consider this if you are using C++
+ and writing your own linker scripts.
+
+
+
+File: ld.info, Node: Output Section Discarding, Next: Output Section Attributes, Prev: Output Section Keywords, Up: SECTIONS
+
+3.6.7 Output Section Discarding
+-------------------------------
+
+The linker will not create output sections with no contents. This is
+for convenience when referring to input sections that may or may not be
+present in any of the input files. For example:
+ .foo : { *(.foo) }
+ will only create a `.foo' section in the output file if there is a
+`.foo' section in at least one input file, and if the input sections
+are not all empty. Other link script directives that allocate space in
+an output section will also create the output section.
+
+ The linker will ignore address assignments (*note Output Section
+Address::) on discarded output sections, except when the linker script
+defines symbols in the output section. In that case the linker will
+obey the address assignments, possibly advancing dot even though the
+section is discarded.
+
+ The special output section name `/DISCARD/' may be used to discard
+input sections. Any input sections which are assigned to an output
+section named `/DISCARD/' are not included in the output file.
+
+
+File: ld.info, Node: Output Section Attributes, Next: Overlay Description, Prev: Output Section Discarding, Up: SECTIONS
+
+3.6.8 Output Section Attributes
+-------------------------------
+
+We showed above that the full description of an output section looked
+like this:
+
+ SECTION [ADDRESS] [(TYPE)] :
+ [AT(LMA)]
+ [ALIGN(SECTION_ALIGN)]
+ [SUBALIGN(SUBSECTION_ALIGN)]
+ [CONSTRAINT]
+ {
+ OUTPUT-SECTION-COMMAND
+ OUTPUT-SECTION-COMMAND
+ ...
+ } [>REGION] [AT>LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP]
+
+ We've already described SECTION, ADDRESS, and
+OUTPUT-SECTION-COMMAND. In this section we will describe the remaining
+section attributes.
+
+* Menu:
+
+* Output Section Type:: Output section type
+* Output Section LMA:: Output section LMA
+* Forced Output Alignment:: Forced Output Alignment
+* Forced Input Alignment:: Forced Input Alignment
+* Output Section Constraint:: Output section constraint
+* Output Section Region:: Output section region
+* Output Section Phdr:: Output section phdr
+* Output Section Fill:: Output section fill
+
+
+File: ld.info, Node: Output Section Type, Next: Output Section LMA, Up: Output Section Attributes
+
+3.6.8.1 Output Section Type
+...........................
+
+Each output section may have a type. The type is a keyword in
+parentheses. The following types are defined:
+
+`NOLOAD'
+ The section should be marked as not loadable, so that it will not
+ be loaded into memory when the program is run.
+
+`DSECT'
+`COPY'
+`INFO'
+`OVERLAY'
+ These type names are supported for backward compatibility, and are
+ rarely used. They all have the same effect: the section should be
+ marked as not allocatable, so that no memory is allocated for the
+ section when the program is run.
+
+ The linker normally sets the attributes of an output section based on
+the input sections which map into it. You can override this by using
+the section type. For example, in the script sample below, the `ROM'
+section is addressed at memory location `0' and does not need to be
+loaded when the program is run. The contents of the `ROM' section will
+appear in the linker output file as usual.
+ SECTIONS {
+ ROM 0 (NOLOAD) : { ... }
+ ...
+ }
+
+
+File: ld.info, Node: Output Section LMA, Next: Forced Output Alignment, Prev: Output Section Type, Up: Output Section Attributes
+
+3.6.8.2 Output Section LMA
+..........................
+
+Every section has a virtual address (VMA) and a load address (LMA); see
+*Note Basic Script Concepts::. The address expression which may appear
+in an output section description sets the VMA (*note Output Section
+Address::).
+
+ The expression LMA that follows the `AT' keyword specifies the load
+address of the section.
+
+ Alternatively, with `AT>LMA_REGION' expression, you may specify a
+memory region for the section's load address. *Note MEMORY::. Note
+that if the section has not had a VMA assigned to it then the linker
+will use the LMA_REGION as the VMA region as well.
+
+ If neither `AT' nor `AT>' is specified for an allocatable section,
+the linker will set the LMA such that the difference between VMA and
+LMA for the section is the same as the preceding output section in the
+same region. If there is no preceding output section or the section is
+not allocatable, the linker will set the LMA equal to the VMA. *Note
+Output Section Region::.
+
+ This feature is designed to make it easy to build a ROM image. For
+example, the following linker script creates three output sections: one
+called `.text', which starts at `0x1000', one called `.mdata', which is
+loaded at the end of the `.text' section even though its VMA is
+`0x2000', and one called `.bss' to hold uninitialized data at address
+`0x3000'. The symbol `_data' is defined with the value `0x2000', which
+shows that the location counter holds the VMA value, not the LMA value.
+
+ SECTIONS
+ {
+ .text 0x1000 : { *(.text) _etext = . ; }
+ .mdata 0x2000 :
+ AT ( ADDR (.text) + SIZEOF (.text) )
+ { _data = . ; *(.data); _edata = . ; }
+ .bss 0x3000 :
+ { _bstart = . ; *(.bss) *(COMMON) ; _bend = . ;}
+ }
+
+ The run-time initialization code for use with a program generated
+with this linker script would include something like the following, to
+copy the initialized data from the ROM image to its runtime address.
+Notice how this code takes advantage of the symbols defined by the
+linker script.
+
+ extern char _etext, _data, _edata, _bstart, _bend;
+ char *src = &_etext;
+ char *dst = &_data;
+
+ /* ROM has data at end of text; copy it. */
+ while (dst < &_edata) {
+ *dst++ = *src++;
+ }
+
+ /* Zero bss */
+ for (dst = &_bstart; dst< &_bend; dst++)
+ *dst = 0;
+
+
+File: ld.info, Node: Forced Output Alignment, Next: Forced Input Alignment, Prev: Output Section LMA, Up: Output Section Attributes
+
+3.6.8.3 Forced Output Alignment
+...............................
+
+You can increase an output section's alignment by using ALIGN.
+
+
+File: ld.info, Node: Forced Input Alignment, Next: Output Section Constraint, Prev: Forced Output Alignment, Up: Output Section Attributes
+
+3.6.8.4 Forced Input Alignment
+..............................
+
+You can force input section alignment within an output section by using
+SUBALIGN. The value specified overrides any alignment given by input
+sections, whether larger or smaller.
+
+
+File: ld.info, Node: Output Section Constraint, Next: Output Section Region, Prev: Forced Input Alignment, Up: Output Section Attributes
+
+3.6.8.5 Output Section Constraint
+.................................
+
+You can specify that an output section should only be created if all of
+its input sections are read-only or all of its input sections are
+read-write by using the keyword `ONLY_IF_RO' and `ONLY_IF_RW'
+respectively.
+
+
+File: ld.info, Node: Output Section Region, Next: Output Section Phdr, Prev: Output Section Constraint, Up: Output Section Attributes
+
+3.6.8.6 Output Section Region
+.............................
+
+You can assign a section to a previously defined region of memory by
+using `>REGION'. *Note MEMORY::.
+
+ Here is a simple example:
+ MEMORY { rom : ORIGIN = 0x1000, LENGTH = 0x1000 }
+ SECTIONS { ROM : { *(.text) } >rom }
+
+
+File: ld.info, Node: Output Section Phdr, Next: Output Section Fill, Prev: Output Section Region, Up: Output Section Attributes
+
+3.6.8.7 Output Section Phdr
+...........................
+
+You can assign a section to a previously defined program segment by
+using `:PHDR'. *Note PHDRS::. If a section is assigned to one or more
+segments, then all subsequent allocated sections will be assigned to
+those segments as well, unless they use an explicitly `:PHDR' modifier.
+You can use `:NONE' to tell the linker to not put the section in any
+segment at all.
+
+ Here is a simple example:
+ PHDRS { text PT_LOAD ; }
+ SECTIONS { .text : { *(.text) } :text }
+
+
+File: ld.info, Node: Output Section Fill, Prev: Output Section Phdr, Up: Output Section Attributes
+
+3.6.8.8 Output Section Fill
+...........................
+
+You can set the fill pattern for an entire section by using `=FILLEXP'.
+FILLEXP is an expression (*note Expressions::). Any otherwise
+unspecified regions of memory within the output section (for example,
+gaps left due to the required alignment of input sections) will be
+filled with the value, repeated as necessary. If the fill expression
+is a simple hex number, ie. a string of hex digit starting with `0x'
+and without a trailing `k' or `M', then an arbitrarily long sequence of
+hex digits can be used to specify the fill pattern; Leading zeros
+become part of the pattern too. For all other cases, including extra
+parentheses or a unary `+', the fill pattern is the four least
+significant bytes of the value of the expression. In all cases, the
+number is big-endian.
+
+ You can also change the fill value with a `FILL' command in the
+output section commands; (*note Output Section Data::).
+
+ Here is a simple example:
+ SECTIONS { .text : { *(.text) } =0x90909090 }
+
+
+File: ld.info, Node: Overlay Description, Prev: Output Section Attributes, Up: SECTIONS
+
+3.6.9 Overlay Description
+-------------------------
+
+An overlay description provides an easy way to describe sections which
+are to be loaded as part of a single memory image but are to be run at
+the same memory address. At run time, some sort of overlay manager will
+copy the overlaid sections in and out of the runtime memory address as
+required, perhaps by simply manipulating addressing bits. This approach
+can be useful, for example, when a certain region of memory is faster
+than another.
+
+ Overlays are described using the `OVERLAY' command. The `OVERLAY'
+command is used within a `SECTIONS' command, like an output section
+description. The full syntax of the `OVERLAY' command is as follows:
+ OVERLAY [START] : [NOCROSSREFS] [AT ( LDADDR )]
+ {
+ SECNAME1
+ {
+ OUTPUT-SECTION-COMMAND
+ OUTPUT-SECTION-COMMAND
+ ...
+ } [:PHDR...] [=FILL]
+ SECNAME2
+ {
+ OUTPUT-SECTION-COMMAND
+ OUTPUT-SECTION-COMMAND
+ ...
+ } [:PHDR...] [=FILL]
+ ...
+ } [>REGION] [:PHDR...] [=FILL]
+
+ Everything is optional except `OVERLAY' (a keyword), and each
+section must have a name (SECNAME1 and SECNAME2 above). The section
+definitions within the `OVERLAY' construct are identical to those
+within the general `SECTIONS' contruct (*note SECTIONS::), except that
+no addresses and no memory regions may be defined for sections within
+an `OVERLAY'.
+
+ The sections are all defined with the same starting address. The
+load addresses of the sections are arranged such that they are
+consecutive in memory starting at the load address used for the
+`OVERLAY' as a whole (as with normal section definitions, the load
+address is optional, and defaults to the start address; the start
+address is also optional, and defaults to the current value of the
+location counter).
+
+ If the `NOCROSSREFS' keyword is used, and there any references among
+the sections, the linker will report an error. Since the sections all
+run at the same address, it normally does not make sense for one
+section to refer directly to another. *Note NOCROSSREFS: Miscellaneous
+Commands.
+
+ For each section within the `OVERLAY', the linker automatically
+provides two symbols. The symbol `__load_start_SECNAME' is defined as
+the starting load address of the section. The symbol
+`__load_stop_SECNAME' is defined as the final load address of the
+section. Any characters within SECNAME which are not legal within C
+identifiers are removed. C (or assembler) code may use these symbols
+to move the overlaid sections around as necessary.
+
+ At the end of the overlay, the value of the location counter is set
+to the start address of the overlay plus the size of the largest
+section.
+
+ Here is an example. Remember that this would appear inside a
+`SECTIONS' construct.
+ OVERLAY 0x1000 : AT (0x4000)
+ {
+ .text0 { o1/*.o(.text) }
+ .text1 { o2/*.o(.text) }
+ }
+This will define both `.text0' and `.text1' to start at address
+0x1000. `.text0' will be loaded at address 0x4000, and `.text1' will
+be loaded immediately after `.text0'. The following symbols will be
+defined if referenced: `__load_start_text0', `__load_stop_text0',
+`__load_start_text1', `__load_stop_text1'.
+
+ C code to copy overlay `.text1' into the overlay area might look
+like the following.
+
+ extern char __load_start_text1, __load_stop_text1;
+ memcpy ((char *) 0x1000, &__load_start_text1,
+ &__load_stop_text1 - &__load_start_text1);
+
+ Note that the `OVERLAY' command is just syntactic sugar, since
+everything it does can be done using the more basic commands. The above
+example could have been written identically as follows.
+
+ .text0 0x1000 : AT (0x4000) { o1/*.o(.text) }
+ PROVIDE (__load_start_text0 = LOADADDR (.text0));
+ PROVIDE (__load_stop_text0 = LOADADDR (.text0) + SIZEOF (.text0));
+ .text1 0x1000 : AT (0x4000 + SIZEOF (.text0)) { o2/*.o(.text) }
+ PROVIDE (__load_start_text1 = LOADADDR (.text1));
+ PROVIDE (__load_stop_text1 = LOADADDR (.text1) + SIZEOF (.text1));
+ . = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1));
+
+
+File: ld.info, Node: MEMORY, Next: PHDRS, Prev: SECTIONS, Up: Scripts
+
+3.7 MEMORY Command
+==================
+
+The linker's default configuration permits allocation of all available
+memory. You can override this by using the `MEMORY' command.
+
+ The `MEMORY' command describes the location and size of blocks of
+memory in the target. You can use it to describe which memory regions
+may be used by the linker, and which memory regions it must avoid. You
+can then assign sections to particular memory regions. The linker will
+set section addresses based on the memory regions, and will warn about
+regions that become too full. The linker will not shuffle sections
+around to fit into the available regions.
+
+ A linker script may contain at most one use of the `MEMORY' command.
+However, you can define as many blocks of memory within it as you
+wish. The syntax is:
+ MEMORY
+ {
+ NAME [(ATTR)] : ORIGIN = ORIGIN, LENGTH = LEN
+ ...
+ }
+
+ The NAME is a name used in the linker script to refer to the region.
+The region name has no meaning outside of the linker script. Region
+names are stored in a separate name space, and will not conflict with
+symbol names, file names, or section names. Each memory region must
+have a distinct name within the `MEMORY' command. However you can add
+later alias names to existing memory regions with the *Note
+REGION_ALIAS:: command.
+
+ The ATTR string is an optional list of attributes that specify
+whether to use a particular memory region for an input section which is
+not explicitly mapped in the linker script. As described in *Note
+SECTIONS::, if you do not specify an output section for some input
+section, the linker will create an output section with the same name as
+the input section. If you define region attributes, the linker will use
+them to select the memory region for the output section that it creates.
+
+ The ATTR string must consist only of the following characters:
+`R'
+ Read-only section
+
+`W'
+ Read/write section
+
+`X'
+ Executable section
+
+`A'
+ Allocatable section
+
+`I'
+ Initialized section
+
+`L'
+ Same as `I'
+
+`!'
+ Invert the sense of any of the preceding attributes
+
+ If a unmapped section matches any of the listed attributes other than
+`!', it will be placed in the memory region. The `!' attribute
+reverses this test, so that an unmapped section will be placed in the
+memory region only if it does not match any of the listed attributes.
+
+ The ORIGIN is an numerical expression for the start address of the
+memory region. The expression must evaluate to a constant and it
+cannot involve any symbols. The keyword `ORIGIN' may be abbreviated to
+`org' or `o' (but not, for example, `ORG').
+
+ The LEN is an expression for the size in bytes of the memory region.
+As with the ORIGIN expression, the expression must be numerical only
+and must evaluate to a constant. The keyword `LENGTH' may be
+abbreviated to `len' or `l'.
+
+ In the following example, we specify that there are two memory
+regions available for allocation: one starting at `0' for 256 kilobytes,
+and the other starting at `0x40000000' for four megabytes. The linker
+will place into the `rom' memory region every section which is not
+explicitly mapped into a memory region, and is either read-only or
+executable. The linker will place other sections which are not
+explicitly mapped into a memory region into the `ram' memory region.
+
+ MEMORY
+ {
+ rom (rx) : ORIGIN = 0, LENGTH = 256K
+ ram (!rx) : org = 0x40000000, l = 4M
+ }
+
+ Once you define a memory region, you can direct the linker to place
+specific output sections into that memory region by using the `>REGION'
+output section attribute. For example, if you have a memory region
+named `mem', you would use `>mem' in the output section definition.
+*Note Output Section Region::. If no address was specified for the
+output section, the linker will set the address to the next available
+address within the memory region. If the combined output sections
+directed to a memory region are too large for the region, the linker
+will issue an error message.
+
+ It is possible to access the origin and length of a memory in an
+expression via the `ORIGIN(MEMORY)' and `LENGTH(MEMORY)' functions:
+
+ _fstack = ORIGIN(ram) + LENGTH(ram) - 4;
+
+
+File: ld.info, Node: PHDRS, Next: VERSION, Prev: MEMORY, Up: Scripts
+
+3.8 PHDRS Command
+=================
+
+The ELF object file format uses "program headers", also knows as
+"segments". The program headers describe how the program should be
+loaded into memory. You can print them out by using the `objdump'
+program with the `-p' option.
+
+ When you run an ELF program on a native ELF system, the system loader
+reads the program headers in order to figure out how to load the
+program. This will only work if the program headers are set correctly.
+This manual does not describe the details of how the system loader
+interprets program headers; for more information, see the ELF ABI.
+
+ The linker will create reasonable program headers by default.
+However, in some cases, you may need to specify the program headers more
+precisely. You may use the `PHDRS' command for this purpose. When the
+linker sees the `PHDRS' command in the linker script, it will not
+create any program headers other than the ones specified.
+
+ The linker only pays attention to the `PHDRS' command when
+generating an ELF output file. In other cases, the linker will simply
+ignore `PHDRS'.
+
+ This is the syntax of the `PHDRS' command. The words `PHDRS',
+`FILEHDR', `AT', and `FLAGS' are keywords.
+
+ PHDRS
+ {
+ NAME TYPE [ FILEHDR ] [ PHDRS ] [ AT ( ADDRESS ) ]
+ [ FLAGS ( FLAGS ) ] ;
+ }
+
+ The NAME is used only for reference in the `SECTIONS' command of the
+linker script. It is not put into the output file. Program header
+names are stored in a separate name space, and will not conflict with
+symbol names, file names, or section names. Each program header must
+have a distinct name.
+
+ Certain program header types describe segments of memory which the
+system loader will load from the file. In the linker script, you
+specify the contents of these segments by placing allocatable output
+sections in the segments. You use the `:PHDR' output section attribute
+to place a section in a particular segment. *Note Output Section
+Phdr::.
+
+ It is normal to put certain sections in more than one segment. This
+merely implies that one segment of memory contains another. You may
+repeat `:PHDR', using it once for each segment which should contain the
+section.
+
+ If you place a section in one or more segments using `:PHDR', then
+the linker will place all subsequent allocatable sections which do not
+specify `:PHDR' in the same segments. This is for convenience, since
+generally a whole set of contiguous sections will be placed in a single
+segment. You can use `:NONE' to override the default segment and tell
+the linker to not put the section in any segment at all.
+
+ You may use the `FILEHDR' and `PHDRS' keywords appear after the
+program header type to further describe the contents of the segment.
+The `FILEHDR' keyword means that the segment should include the ELF
+file header. The `PHDRS' keyword means that the segment should include
+the ELF program headers themselves.
+
+ The TYPE may be one of the following. The numbers indicate the
+value of the keyword.
+
+`PT_NULL' (0)
+ Indicates an unused program header.
+
+`PT_LOAD' (1)
+ Indicates that this program header describes a segment to be
+ loaded from the file.
+
+`PT_DYNAMIC' (2)
+ Indicates a segment where dynamic linking information can be found.
+
+`PT_INTERP' (3)
+ Indicates a segment where the name of the program interpreter may
+ be found.
+
+`PT_NOTE' (4)
+ Indicates a segment holding note information.
+
+`PT_SHLIB' (5)
+ A reserved program header type, defined but not specified by the
+ ELF ABI.
+
+`PT_PHDR' (6)
+ Indicates a segment where the program headers may be found.
+
+EXPRESSION
+ An expression giving the numeric type of the program header. This
+ may be used for types not defined above.
+
+ You can specify that a segment should be loaded at a particular
+address in memory by using an `AT' expression. This is identical to the
+`AT' command used as an output section attribute (*note Output Section
+LMA::). The `AT' command for a program header overrides the output
+section attribute.
+
+ The linker will normally set the segment flags based on the sections
+which comprise the segment. You may use the `FLAGS' keyword to
+explicitly specify the segment flags. The value of FLAGS must be an
+integer. It is used to set the `p_flags' field of the program header.
+
+ Here is an example of `PHDRS'. This shows a typical set of program
+headers used on a native ELF system.
+
+ PHDRS
+ {
+ headers PT_PHDR PHDRS ;
+ interp PT_INTERP ;
+ text PT_LOAD FILEHDR PHDRS ;
+ data PT_LOAD ;
+ dynamic PT_DYNAMIC ;
+ }
+
+ SECTIONS
+ {
+ . = SIZEOF_HEADERS;
+ .interp : { *(.interp) } :text :interp
+ .text : { *(.text) } :text
+ .rodata : { *(.rodata) } /* defaults to :text */
+ ...
+ . = . + 0x1000; /* move to a new page in memory */
+ .data : { *(.data) } :data
+ .dynamic : { *(.dynamic) } :data :dynamic
+ ...
+ }
+
+
+File: ld.info, Node: VERSION, Next: Expressions, Prev: PHDRS, Up: Scripts
+
+3.9 VERSION Command
+===================
+
+The linker supports symbol versions when using ELF. Symbol versions are
+only useful when using shared libraries. The dynamic linker can use
+symbol versions to select a specific version of a function when it runs
+a program that may have been linked against an earlier version of the
+shared library.
+
+ You can include a version script directly in the main linker script,
+or you can supply the version script as an implicit linker script. You
+can also use the `--version-script' linker option.
+
+ The syntax of the `VERSION' command is simply
+ VERSION { version-script-commands }
+
+ The format of the version script commands is identical to that used
+by Sun's linker in Solaris 2.5. The version script defines a tree of
+version nodes. You specify the node names and interdependencies in the
+version script. You can specify which symbols are bound to which
+version nodes, and you can reduce a specified set of symbols to local
+scope so that they are not globally visible outside of the shared
+library.
+
+ The easiest way to demonstrate the version script language is with a
+few examples.
+
+ VERS_1.1 {
+ global:
+ foo1;
+ local:
+ old*;
+ original*;
+ new*;
+ };
+
+ VERS_1.2 {
+ foo2;
+ } VERS_1.1;
+
+ VERS_2.0 {
+ bar1; bar2;
+ extern "C++" {
+ ns::*;
+ "int f(int, double)";
+ }
+ } VERS_1.2;
+
+ This example version script defines three version nodes. The first
+version node defined is `VERS_1.1'; it has no other dependencies. The
+script binds the symbol `foo1' to `VERS_1.1'. It reduces a number of
+symbols to local scope so that they are not visible outside of the
+shared library; this is done using wildcard patterns, so that any
+symbol whose name begins with `old', `original', or `new' is matched.
+The wildcard patterns available are the same as those used in the shell
+when matching filenames (also known as "globbing"). However, if you
+specify the symbol name inside double quotes, then the name is treated
+as literal, rather than as a glob pattern.
+
+ Next, the version script defines node `VERS_1.2'. This node depends
+upon `VERS_1.1'. The script binds the symbol `foo2' to the version
+node `VERS_1.2'.
+
+ Finally, the version script defines node `VERS_2.0'. This node
+depends upon `VERS_1.2'. The scripts binds the symbols `bar1' and
+`bar2' are bound to the version node `VERS_2.0'.
+
+ When the linker finds a symbol defined in a library which is not
+specifically bound to a version node, it will effectively bind it to an
+unspecified base version of the library. You can bind all otherwise
+unspecified symbols to a given version node by using `global: *;'
+somewhere in the version script. Note that it's slightly crazy to use
+wildcards in a global spec except on the last version node. Global
+wildcards elsewhere run the risk of accidentally adding symbols to the
+set exported for an old version. That's wrong since older versions
+ought to have a fixed set of symbols.
+
+ The names of the version nodes have no specific meaning other than
+what they might suggest to the person reading them. The `2.0' version
+could just as well have appeared in between `1.1' and `1.2'. However,
+this would be a confusing way to write a version script.
+
+ Node name can be omitted, provided it is the only version node in
+the version script. Such version script doesn't assign any versions to
+symbols, only selects which symbols will be globally visible out and
+which won't.
+
+ { global: foo; bar; local: *; };
+
+ When you link an application against a shared library that has
+versioned symbols, the application itself knows which version of each
+symbol it requires, and it also knows which version nodes it needs from
+each shared library it is linked against. Thus at runtime, the dynamic
+loader can make a quick check to make sure that the libraries you have
+linked against do in fact supply all of the version nodes that the
+application will need to resolve all of the dynamic symbols. In this
+way it is possible for the dynamic linker to know with certainty that
+all external symbols that it needs will be resolvable without having to
+search for each symbol reference.
+
+ The symbol versioning is in effect a much more sophisticated way of
+doing minor version checking that SunOS does. The fundamental problem
+that is being addressed here is that typically references to external
+functions are bound on an as-needed basis, and are not all bound when
+the application starts up. If a shared library is out of date, a
+required interface may be missing; when the application tries to use
+that interface, it may suddenly and unexpectedly fail. With symbol
+versioning, the user will get a warning when they start their program if
+the libraries being used with the application are too old.
+
+ There are several GNU extensions to Sun's versioning approach. The
+first of these is the ability to bind a symbol to a version node in the
+source file where the symbol is defined instead of in the versioning
+script. This was done mainly to reduce the burden on the library
+maintainer. You can do this by putting something like:
+ __asm__(".symver original_foo,foo@VERS_1.1");
+ in the C source file. This renames the function `original_foo' to
+be an alias for `foo' bound to the version node `VERS_1.1'. The
+`local:' directive can be used to prevent the symbol `original_foo'
+from being exported. A `.symver' directive takes precedence over a
+version script.
+
+ The second GNU extension is to allow multiple versions of the same
+function to appear in a given shared library. In this way you can make
+an incompatible change to an interface without increasing the major
+version number of the shared library, while still allowing applications
+linked against the old interface to continue to function.
+
+ To do this, you must use multiple `.symver' directives in the source
+file. Here is an example:
+
+ __asm__(".symver original_foo,foo@");
+ __asm__(".symver old_foo,foo@VERS_1.1");
+ __asm__(".symver old_foo1,foo@VERS_1.2");
+ __asm__(".symver new_foo,foo@@VERS_2.0");
+
+ In this example, `foo@' represents the symbol `foo' bound to the
+unspecified base version of the symbol. The source file that contains
+this example would define 4 C functions: `original_foo', `old_foo',
+`old_foo1', and `new_foo'.
+
+ When you have multiple definitions of a given symbol, there needs to
+be some way to specify a default version to which external references to
+this symbol will be bound. You can do this with the `foo@@VERS_2.0'
+type of `.symver' directive. You can only declare one version of a
+symbol as the default in this manner; otherwise you would effectively
+have multiple definitions of the same symbol.
+
+ If you wish to bind a reference to a specific version of the symbol
+within the shared library, you can use the aliases of convenience
+(i.e., `old_foo'), or you can use the `.symver' directive to
+specifically bind to an external version of the function in question.
+
+ You can also specify the language in the version script:
+
+ VERSION extern "lang" { version-script-commands }
+
+ The supported `lang's are `C', `C++', and `Java'. The linker will
+iterate over the list of symbols at the link time and demangle them
+according to `lang' before matching them to the patterns specified in
+`version-script-commands'.
+
+ Demangled names may contains spaces and other special characters. As
+described above, you can use a glob pattern to match demangled names,
+or you can use a double-quoted string to match the string exactly. In
+the latter case, be aware that minor differences (such as differing
+whitespace) between the version script and the demangler output will
+cause a mismatch. As the exact string generated by the demangler might
+change in the future, even if the mangled name does not, you should
+check that all of your version directives are behaving as you expect
+when you upgrade.
+
+
+File: ld.info, Node: Expressions, Next: Implicit Linker Scripts, Prev: VERSION, Up: Scripts
+
+3.10 Expressions in Linker Scripts
+==================================
+
+The syntax for expressions in the linker script language is identical to
+that of C expressions. All expressions are evaluated as integers. All
+expressions are evaluated in the same size, which is 32 bits if both the
+host and target are 32 bits, and is otherwise 64 bits.
+
+ You can use and set symbol values in expressions.
+
+ The linker defines several special purpose builtin functions for use
+in expressions.
+
+* Menu:
+
+* Constants:: Constants
+* Symbolic Constants:: Symbolic constants
+* Symbols:: Symbol Names
+* Orphan Sections:: Orphan Sections
+* Location Counter:: The Location Counter
+* Operators:: Operators
+* Evaluation:: Evaluation
+* Expression Section:: The Section of an Expression
+* Builtin Functions:: Builtin Functions
+
+
+File: ld.info, Node: Constants, Next: Symbolic Constants, Up: Expressions
+
+3.10.1 Constants
+----------------
+
+All constants are integers.
+
+ As in C, the linker considers an integer beginning with `0' to be
+octal, and an integer beginning with `0x' or `0X' to be hexadecimal.
+Alternatively the linker accepts suffixes of `h' or `H' for
+hexadeciaml, `o' or `O' for octal, `b' or `B' for binary and `d' or `D'
+for decimal. Any integer value without a prefix or a suffix is
+considered to be decimal.
+
+ In addition, you can use the suffixes `K' and `M' to scale a
+constant by `1024' or `1024*1024' respectively. For example, the
+following all refer to the same quantity:
+
+ _fourk_1 = 4K;
+ _fourk_2 = 4096;
+ _fourk_3 = 0x1000;
+ _fourk_4 = 10000o;
+
+ Note - the `K' and `M' suffixes cannot be used in conjunction with
+the base suffixes mentioned above.
+
+
+File: ld.info, Node: Symbolic Constants, Next: Symbols, Prev: Constants, Up: Expressions
+
+3.10.2 Symbolic Constants
+-------------------------
+
+It is possible to refer to target specific constants via the use of the
+`CONSTANT(NAME)' operator, where NAME is one of:
+
+`MAXPAGESIZE'
+ The target's maximum page size.
+
+`COMMONPAGESIZE'
+ The target's default page size.
+
+ So for example:
+
+ .text ALIGN (CONSTANT (MAXPAGESIZE)) : { *(.text) }
+
+ will create a text section aligned to the largest page boundary
+supported by the target.
+
+
+File: ld.info, Node: Symbols, Next: Orphan Sections, Prev: Symbolic Constants, Up: Expressions
+
+3.10.3 Symbol Names
+-------------------
+
+Unless quoted, symbol names start with a letter, underscore, or period
+and may include letters, digits, underscores, periods, and hyphens.
+Unquoted symbol names must not conflict with any keywords. You can
+specify a symbol which contains odd characters or has the same name as a
+keyword by surrounding the symbol name in double quotes:
+ "SECTION" = 9;
+ "with a space" = "also with a space" + 10;
+
+ Since symbols can contain many non-alphabetic characters, it is
+safest to delimit symbols with spaces. For example, `A-B' is one
+symbol, whereas `A - B' is an expression involving subtraction.
+
+
+File: ld.info, Node: Orphan Sections, Next: Location Counter, Prev: Symbols, Up: Expressions
+
+3.10.4 Orphan Sections
+----------------------
+
+Orphan sections are sections present in the input files which are not
+explicitly placed into the output file by the linker script. The
+linker will still copy these sections into the output file, but it has
+to guess as to where they should be placed. The linker uses a simple
+heuristic to do this. It attempts to place orphan sections after
+non-orphan sections of the same attribute, such as code vs data,
+loadable vs non-loadable, etc. If there is not enough room to do this
+then it places at the end of the file.
+
+ For ELF targets, the attribute of the section includes section type
+as well as section flag.
+
+ If an orphaned section's name is representable as a C identifier then
+the linker will automatically *note PROVIDE:: two symbols:
+__start_SECNAME and __end_SECNAME, where SECNAME is the name of the
+section. These indicate the start address and end address of the
+orphaned section respectively. Note: most section names are not
+representable as C identifiers because they contain a `.' character.
+
+
+File: ld.info, Node: Location Counter, Next: Operators, Prev: Orphan Sections, Up: Expressions
+
+3.10.5 The Location Counter
+---------------------------
+
+The special linker variable "dot" `.' always contains the current
+output location counter. Since the `.' always refers to a location in
+an output section, it may only appear in an expression within a
+`SECTIONS' command. The `.' symbol may appear anywhere that an
+ordinary symbol is allowed in an expression.
+
+ Assigning a value to `.' will cause the location counter to be
+moved. This may be used to create holes in the output section. The
+location counter may not be moved backwards inside an output section,
+and may not be moved backwards outside of an output section if so doing
+creates areas with overlapping LMAs.
+
+ SECTIONS
+ {
+ output :
+ {
+ file1(.text)
+ . = . + 1000;
+ file2(.text)
+ . += 1000;
+ file3(.text)
+ } = 0x12345678;
+ }
+ In the previous example, the `.text' section from `file1' is located
+at the beginning of the output section `output'. It is followed by a
+1000 byte gap. Then the `.text' section from `file2' appears, also
+with a 1000 byte gap following before the `.text' section from `file3'.
+The notation `= 0x12345678' specifies what data to write in the gaps
+(*note Output Section Fill::).
+
+ Note: `.' actually refers to the byte offset from the start of the
+current containing object. Normally this is the `SECTIONS' statement,
+whose start address is 0, hence `.' can be used as an absolute address.
+If `.' is used inside a section description however, it refers to the
+byte offset from the start of that section, not an absolute address.
+Thus in a script like this:
+
+ SECTIONS
+ {
+ . = 0x100
+ .text: {
+ *(.text)
+ . = 0x200
+ }
+ . = 0x500
+ .data: {
+ *(.data)
+ . += 0x600
+ }
+ }
+
+ The `.text' section will be assigned a starting address of 0x100 and
+a size of exactly 0x200 bytes, even if there is not enough data in the
+`.text' input sections to fill this area. (If there is too much data,
+an error will be produced because this would be an attempt to move `.'
+backwards). The `.data' section will start at 0x500 and it will have
+an extra 0x600 bytes worth of space after the end of the values from
+the `.data' input sections and before the end of the `.data' output
+section itself.
+
+ Setting symbols to the value of the location counter outside of an
+output section statement can result in unexpected values if the linker
+needs to place orphan sections. For example, given the following:
+
+ SECTIONS
+ {
+ start_of_text = . ;
+ .text: { *(.text) }
+ end_of_text = . ;
+
+ start_of_data = . ;
+ .data: { *(.data) }
+ end_of_data = . ;
+ }
+
+ If the linker needs to place some input section, e.g. `.rodata', not
+mentioned in the script, it might choose to place that section between
+`.text' and `.data'. You might think the linker should place `.rodata'
+on the blank line in the above script, but blank lines are of no
+particular significance to the linker. As well, the linker doesn't
+associate the above symbol names with their sections. Instead, it
+assumes that all assignments or other statements belong to the previous
+output section, except for the special case of an assignment to `.'.
+I.e., the linker will place the orphan `.rodata' section as if the
+script was written as follows:
+
+ SECTIONS
+ {
+ start_of_text = . ;
+ .text: { *(.text) }
+ end_of_text = . ;
+
+ start_of_data = . ;
+ .rodata: { *(.rodata) }
+ .data: { *(.data) }
+ end_of_data = . ;
+ }
+
+ This may or may not be the script author's intention for the value of
+`start_of_data'. One way to influence the orphan section placement is
+to assign the location counter to itself, as the linker assumes that an
+assignment to `.' is setting the start address of a following output
+section and thus should be grouped with that section. So you could
+write:
+
+ SECTIONS
+ {
+ start_of_text = . ;
+ .text: { *(.text) }
+ end_of_text = . ;
+
+ . = . ;
+ start_of_data = . ;
+ .data: { *(.data) }
+ end_of_data = . ;
+ }
+
+ Now, the orphan `.rodata' section will be placed between
+`end_of_text' and `start_of_data'.
+
+
+File: ld.info, Node: Operators, Next: Evaluation, Prev: Location Counter, Up: Expressions
+
+3.10.6 Operators
+----------------
+
+The linker recognizes the standard C set of arithmetic operators, with
+the standard bindings and precedence levels:
+ precedence associativity Operators Notes
+ (highest)
+ 1 left ! - ~ (1)
+ 2 left * / %
+ 3 left + -
+ 4 left >> <<
+ 5 left == != > < <= >=
+ 6 left &
+ 7 left |
+ 8 left &&
+ 9 left ||
+ 10 right ? :
+ 11 right &= += -= *= /= (2)
+ (lowest)
+ Notes: (1) Prefix operators (2) *Note Assignments::.
+
+
+File: ld.info, Node: Evaluation, Next: Expression Section, Prev: Operators, Up: Expressions
+
+3.10.7 Evaluation
+-----------------
+
+The linker evaluates expressions lazily. It only computes the value of
+an expression when absolutely necessary.
+
+ The linker needs some information, such as the value of the start
+address of the first section, and the origins and lengths of memory
+regions, in order to do any linking at all. These values are computed
+as soon as possible when the linker reads in the linker script.
+
+ However, other values (such as symbol values) are not known or needed
+until after storage allocation. Such values are evaluated later, when
+other information (such as the sizes of output sections) is available
+for use in the symbol assignment expression.
+
+ The sizes of sections cannot be known until after allocation, so
+assignments dependent upon these are not performed until after
+allocation.
+
+ Some expressions, such as those depending upon the location counter
+`.', must be evaluated during section allocation.
+
+ If the result of an expression is required, but the value is not
+available, then an error results. For example, a script like the
+following
+ SECTIONS
+ {
+ .text 9+this_isnt_constant :
+ { *(.text) }
+ }
+will cause the error message `non constant expression for initial
+address'.
+
+
+File: ld.info, Node: Expression Section, Next: Builtin Functions, Prev: Evaluation, Up: Expressions
+
+3.10.8 The Section of an Expression
+-----------------------------------
+
+When the linker evaluates an expression, the result is either absolute
+or relative to some section. A relative expression is expressed as a
+fixed offset from the base of a section.
+
+ The position of the expression within the linker script determines
+whether it is absolute or relative. An expression which appears within
+an output section definition is relative to the base of the output
+section. An expression which appears elsewhere will be absolute.
+
+ A symbol set to a relative expression will be relocatable if you
+request relocatable output using the `-r' option. That means that a
+further link operation may change the value of the symbol. The symbol's
+section will be the section of the relative expression.
+
+ A symbol set to an absolute expression will retain the same value
+through any further link operation. The symbol will be absolute, and
+will not have any particular associated section.
+
+ You can use the builtin function `ABSOLUTE' to force an expression
+to be absolute when it would otherwise be relative. For example, to
+create an absolute symbol set to the address of the end of the output
+section `.data':
+ SECTIONS
+ {
+ .data : { *(.data) _edata = ABSOLUTE(.); }
+ }
+ If `ABSOLUTE' were not used, `_edata' would be relative to the
+`.data' section.
+
+
+File: ld.info, Node: Builtin Functions, Prev: Expression Section, Up: Expressions
+
+3.10.9 Builtin Functions
+------------------------
+
+The linker script language includes a number of builtin functions for
+use in linker script expressions.
+
+`ABSOLUTE(EXP)'
+ Return the absolute (non-relocatable, as opposed to non-negative)
+ value of the expression EXP. Primarily useful to assign an
+ absolute value to a symbol within a section definition, where
+ symbol values are normally section relative. *Note Expression
+ Section::.
+
+`ADDR(SECTION)'
+ Return the absolute address (the VMA) of the named SECTION. Your
+ script must previously have defined the location of that section.
+ In the following example, `symbol_1' and `symbol_2' are assigned
+ identical values:
+ SECTIONS { ...
+ .output1 :
+ {
+ start_of_output_1 = ABSOLUTE(.);
+ ...
+ }
+ .output :
+ {
+ symbol_1 = ADDR(.output1);
+ symbol_2 = start_of_output_1;
+ }
+ ... }
+
+`ALIGN(ALIGN)'
+`ALIGN(EXP,ALIGN)'
+ Return the location counter (`.') or arbitrary expression aligned
+ to the next ALIGN boundary. The single operand `ALIGN' doesn't
+ change the value of the location counter--it just does arithmetic
+ on it. The two operand `ALIGN' allows an arbitrary expression to
+ be aligned upwards (`ALIGN(ALIGN)' is equivalent to `ALIGN(.,
+ ALIGN)').
+
+ Here is an example which aligns the output `.data' section to the
+ next `0x2000' byte boundary after the preceding section and sets a
+ variable within the section to the next `0x8000' boundary after the
+ input sections:
+ SECTIONS { ...
+ .data ALIGN(0x2000): {
+ *(.data)
+ variable = ALIGN(0x8000);
+ }
+ ... }
+ The first use of `ALIGN' in this example specifies the
+ location of a section because it is used as the optional ADDRESS
+ attribute of a section definition (*note Output Section
+ Address::). The second use of `ALIGN' is used to defines the
+ value of a symbol.
+
+ The builtin function `NEXT' is closely related to `ALIGN'.
+
+`ALIGNOF(SECTION)'
+ Return the alignment in bytes of the named SECTION, if that
+ section has been allocated. If the section has not been allocated
+ when this is evaluated, the linker will report an error. In the
+ following example, the alignment of the `.output' section is
+ stored as the first value in that section.
+ SECTIONS{ ...
+ .output {
+ LONG (ALIGNOF (.output))
+ ...
+ }
+ ... }
+
+`BLOCK(EXP)'
+ This is a synonym for `ALIGN', for compatibility with older linker
+ scripts. It is most often seen when setting the address of an
+ output section.
+
+`DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE)'
+ This is equivalent to either
+ (ALIGN(MAXPAGESIZE) + (. & (MAXPAGESIZE - 1)))
+ or
+ (ALIGN(MAXPAGESIZE) + (. & (MAXPAGESIZE - COMMONPAGESIZE)))
+ depending on whether the latter uses fewer COMMONPAGESIZE sized
+ pages for the data segment (area between the result of this
+ expression and `DATA_SEGMENT_END') than the former or not. If the
+ latter form is used, it means COMMONPAGESIZE bytes of runtime
+ memory will be saved at the expense of up to COMMONPAGESIZE wasted
+ bytes in the on-disk file.
+
+ This expression can only be used directly in `SECTIONS' commands,
+ not in any output section descriptions and only once in the linker
+ script. COMMONPAGESIZE should be less or equal to MAXPAGESIZE and
+ should be the system page size the object wants to be optimized
+ for (while still working on system page sizes up to MAXPAGESIZE).
+
+ Example:
+ . = DATA_SEGMENT_ALIGN(0x10000, 0x2000);
+
+`DATA_SEGMENT_END(EXP)'
+ This defines the end of data segment for `DATA_SEGMENT_ALIGN'
+ evaluation purposes.
+
+ . = DATA_SEGMENT_END(.);
+
+`DATA_SEGMENT_RELRO_END(OFFSET, EXP)'
+ This defines the end of the `PT_GNU_RELRO' segment when `-z relro'
+ option is used. Second argument is returned. When `-z relro'
+ option is not present, `DATA_SEGMENT_RELRO_END' does nothing,
+ otherwise `DATA_SEGMENT_ALIGN' is padded so that EXP + OFFSET is
+ aligned to the most commonly used page boundary for particular
+ target. If present in the linker script, it must always come in
+ between `DATA_SEGMENT_ALIGN' and `DATA_SEGMENT_END'.
+
+ . = DATA_SEGMENT_RELRO_END(24, .);
+
+`DEFINED(SYMBOL)'
+ Return 1 if SYMBOL is in the linker global symbol table and is
+ defined before the statement using DEFINED in the script, otherwise
+ return 0. You can use this function to provide default values for
+ symbols. For example, the following script fragment shows how to
+ set a global symbol `begin' to the first location in the `.text'
+ section--but if a symbol called `begin' already existed, its value
+ is preserved:
+
+ SECTIONS { ...
+ .text : {
+ begin = DEFINED(begin) ? begin : . ;
+ ...
+ }
+ ...
+ }
+
+`LENGTH(MEMORY)'
+ Return the length of the memory region named MEMORY.
+
+`LOADADDR(SECTION)'
+ Return the absolute LMA of the named SECTION. This is normally
+ the same as `ADDR', but it may be different if the `AT' attribute
+ is used in the output section definition (*note Output Section
+ LMA::).
+
+`MAX(EXP1, EXP2)'
+ Returns the maximum of EXP1 and EXP2.
+
+`MIN(EXP1, EXP2)'
+ Returns the minimum of EXP1 and EXP2.
+
+`NEXT(EXP)'
+ Return the next unallocated address that is a multiple of EXP.
+ This function is closely related to `ALIGN(EXP)'; unless you use
+ the `MEMORY' command to define discontinuous memory for the output
+ file, the two functions are equivalent.
+
+`ORIGIN(MEMORY)'
+ Return the origin of the memory region named MEMORY.
+
+`SEGMENT_START(SEGMENT, DEFAULT)'
+ Return the base address of the named SEGMENT. If an explicit
+ value has been given for this segment (with a command-line `-T'
+ option) that value will be returned; otherwise the value will be
+ DEFAULT. At present, the `-T' command-line option can only be
+ used to set the base address for the "text", "data", and "bss"
+ sections, but you use `SEGMENT_START' with any segment name.
+
+`SIZEOF(SECTION)'
+ Return the size in bytes of the named SECTION, if that section has
+ been allocated. If the section has not been allocated when this is
+ evaluated, the linker will report an error. In the following
+ example, `symbol_1' and `symbol_2' are assigned identical values:
+ SECTIONS{ ...
+ .output {
+ .start = . ;
+ ...
+ .end = . ;
+ }
+ symbol_1 = .end - .start ;
+ symbol_2 = SIZEOF(.output);
+ ... }
+
+`SIZEOF_HEADERS'
+`sizeof_headers'
+ Return the size in bytes of the output file's headers. This is
+ information which appears at the start of the output file. You
+ can use this number when setting the start address of the first
+ section, if you choose, to facilitate paging.
+
+ When producing an ELF output file, if the linker script uses the
+ `SIZEOF_HEADERS' builtin function, the linker must compute the
+ number of program headers before it has determined all the section
+ addresses and sizes. If the linker later discovers that it needs
+ additional program headers, it will report an error `not enough
+ room for program headers'. To avoid this error, you must avoid
+ using the `SIZEOF_HEADERS' function, or you must rework your linker
+ script to avoid forcing the linker to use additional program
+ headers, or you must define the program headers yourself using the
+ `PHDRS' command (*note PHDRS::).
+
+
+File: ld.info, Node: Implicit Linker Scripts, Prev: Expressions, Up: Scripts
+
+3.11 Implicit Linker Scripts
+============================
+
+If you specify a linker input file which the linker can not recognize as
+an object file or an archive file, it will try to read the file as a
+linker script. If the file can not be parsed as a linker script, the
+linker will report an error.
+
+ An implicit linker script will not replace the default linker script.
+
+ Typically an implicit linker script would contain only symbol
+assignments, or the `INPUT', `GROUP', or `VERSION' commands.
+
+ Any input files read because of an implicit linker script will be
+read at the position in the command line where the implicit linker
+script was read. This can affect archive searching.
+
+
+File: ld.info, Node: Machine Dependent, Next: BFD, Prev: Scripts, Up: Top
+
+4 Machine Dependent Features
+****************************
+
+`ld' has additional features on some platforms; the following sections
+describe them. Machines where `ld' has no additional functionality are
+not listed.
+
+* Menu:
+
+
+* H8/300:: `ld' and the H8/300
+
+* i960:: `ld' and the Intel 960 family
+
+* ARM:: `ld' and the ARM family
+
+* HPPA ELF32:: `ld' and HPPA 32-bit ELF
+
+* M68K:: `ld' and the Motorola 68K family
+
+* MMIX:: `ld' and MMIX
+
+* MSP430:: `ld' and MSP430
+
+* M68HC11/68HC12:: `ld' and the Motorola 68HC11 and 68HC12 families
+
+* PowerPC ELF32:: `ld' and PowerPC 32-bit ELF Support
+
+* PowerPC64 ELF64:: `ld' and PowerPC64 64-bit ELF Support
+
+* SPU ELF:: `ld' and SPU ELF Support
+
+* TI COFF:: `ld' and TI COFF
+
+* WIN32:: `ld' and WIN32 (cygwin/mingw)
+
+* Xtensa:: `ld' and Xtensa Processors
+
+
+File: ld.info, Node: H8/300, Next: i960, Up: Machine Dependent
+
+4.1 `ld' and the H8/300
+=======================
+
+For the H8/300, `ld' can perform these global optimizations when you
+specify the `--relax' command-line option.
+
+_relaxing address modes_
+ `ld' finds all `jsr' and `jmp' instructions whose targets are
+ within eight bits, and turns them into eight-bit program-counter
+ relative `bsr' and `bra' instructions, respectively.
+
+_synthesizing instructions_
+ `ld' finds all `mov.b' instructions which use the sixteen-bit
+ absolute address form, but refer to the top page of memory, and
+ changes them to use the eight-bit address form. (That is: the
+ linker turns `mov.b `@'AA:16' into `mov.b `@'AA:8' whenever the
+ address AA is in the top page of memory).
+
+_bit manipulation instructions_
+ `ld' finds all bit manipulation instructions like `band, bclr,
+ biand, bild, bior, bist, bixor, bld, bnot, bor, bset, bst, btst,
+ bxor' which use 32 bit and 16 bit absolute address form, but refer
+ to the top page of memory, and changes them to use the 8 bit
+ address form. (That is: the linker turns `bset #xx:3,`@'AA:32'
+ into `bset #xx:3,`@'AA:8' whenever the address AA is in the top
+ page of memory).
+
+_system control instructions_
+ `ld' finds all `ldc.w, stc.w' instructions which use the 32 bit
+ absolute address form, but refer to the top page of memory, and
+ changes them to use 16 bit address form. (That is: the linker
+ turns `ldc.w `@'AA:32,ccr' into `ldc.w `@'AA:16,ccr' whenever the
+ address AA is in the top page of memory).
+
+
+File: ld.info, Node: i960, Next: ARM, Prev: H8/300, Up: Machine Dependent
+
+4.2 `ld' and the Intel 960 Family
+=================================
+
+You can use the `-AARCHITECTURE' command line option to specify one of
+the two-letter names identifying members of the 960 family; the option
+specifies the desired output target, and warns of any incompatible
+instructions in the input files. It also modifies the linker's search
+strategy for archive libraries, to support the use of libraries
+specific to each particular architecture, by including in the search
+loop names suffixed with the string identifying the architecture.
+
+ For example, if your `ld' command line included `-ACA' as well as
+`-ltry', the linker would look (in its built-in search paths, and in
+any paths you specify with `-L') for a library with the names
+
+ try
+ libtry.a
+ tryca
+ libtryca.a
+
+The first two possibilities would be considered in any event; the last
+two are due to the use of `-ACA'.
+
+ You can meaningfully use `-A' more than once on a command line, since
+the 960 architecture family allows combination of target architectures;
+each use will add another pair of name variants to search for when `-l'
+specifies a library.
+
+ `ld' supports the `--relax' option for the i960 family. If you
+specify `--relax', `ld' finds all `balx' and `calx' instructions whose
+targets are within 24 bits, and turns them into 24-bit program-counter
+relative `bal' and `cal' instructions, respectively. `ld' also turns
+`cal' instructions into `bal' instructions when it determines that the
+target subroutine is a leaf routine (that is, the target subroutine does
+not itself call any subroutines).
+
+ The `--fix-cortex-a8' switch enables a link-time workaround for an
+erratum in certain Cortex-A8 processors. The workaround is enabled by
+default if you are targeting the ARM v7-A architecture profile. It can
+be enabled otherwise by specifying `--fix-cortex-a8', or disabled
+unconditionally by specifying `--no-fix-cortex-a8'.
+
+ The erratum only affects Thumb-2 code. Please contact ARM for
+further details.
+
+
+File: ld.info, Node: M68HC11/68HC12, Next: PowerPC ELF32, Prev: MSP430, Up: Machine Dependent
+
+4.3 `ld' and the Motorola 68HC11 and 68HC12 families
+====================================================
+
+4.3.1 Linker Relaxation
+-----------------------
+
+For the Motorola 68HC11, `ld' can perform these global optimizations
+when you specify the `--relax' command-line option.
+
+_relaxing address modes_
+ `ld' finds all `jsr' and `jmp' instructions whose targets are
+ within eight bits, and turns them into eight-bit program-counter
+ relative `bsr' and `bra' instructions, respectively.
+
+ `ld' also looks at all 16-bit extended addressing modes and
+ transforms them in a direct addressing mode when the address is in
+ page 0 (between 0 and 0x0ff).
+
+_relaxing gcc instruction group_
+ When `gcc' is called with `-mrelax', it can emit group of
+ instructions that the linker can optimize to use a 68HC11 direct
+ addressing mode. These instructions consists of `bclr' or `bset'
+ instructions.
+
+
+4.3.2 Trampoline Generation
+---------------------------
+
+For 68HC11 and 68HC12, `ld' can generate trampoline code to call a far
+function using a normal `jsr' instruction. The linker will also change
+the relocation to some far function to use the trampoline address
+instead of the function address. This is typically the case when a
+pointer to a function is taken. The pointer will in fact point to the
+function trampoline.
+
+
+File: ld.info, Node: ARM, Next: HPPA ELF32, Prev: i960, Up: Machine Dependent
+
+4.4 `ld' and the ARM family
+===========================
+
+For the ARM, `ld' will generate code stubs to allow functions calls
+between ARM and Thumb code. These stubs only work with code that has
+been compiled and assembled with the `-mthumb-interwork' command line
+option. If it is necessary to link with old ARM object files or
+libraries, which have not been compiled with the -mthumb-interwork
+option then the `--support-old-code' command line switch should be
+given to the linker. This will make it generate larger stub functions
+which will work with non-interworking aware ARM code. Note, however,
+the linker does not support generating stubs for function calls to
+non-interworking aware Thumb code.
+
+ The `--thumb-entry' switch is a duplicate of the generic `--entry'
+switch, in that it sets the program's starting address. But it also
+sets the bottom bit of the address, so that it can be branched to using
+a BX instruction, and the program will start executing in Thumb mode
+straight away.
+
+ The `--use-nul-prefixed-import-tables' switch is specifying, that
+the import tables idata4 and idata5 have to be generated with a zero
+elememt prefix for import libraries. This is the old style to generate
+import tables. By default this option is turned off.
+
+ The `--be8' switch instructs `ld' to generate BE8 format
+executables. This option is only valid when linking big-endian objects.
+The resulting image will contain big-endian data and little-endian code.
+
+ The `R_ARM_TARGET1' relocation is typically used for entries in the
+`.init_array' section. It is interpreted as either `R_ARM_REL32' or
+`R_ARM_ABS32', depending on the target. The `--target1-rel' and
+`--target1-abs' switches override the default.
+
+ The `--target2=type' switch overrides the default definition of the
+`R_ARM_TARGET2' relocation. Valid values for `type', their meanings,
+and target defaults are as follows:
+`rel'
+ `R_ARM_REL32' (arm*-*-elf, arm*-*-eabi)
+
+`abs'
+ `R_ARM_ABS32' (arm*-*-symbianelf)
+
+`got-rel'
+ `R_ARM_GOT_PREL' (arm*-*-linux, arm*-*-*bsd)
+
+ The `R_ARM_V4BX' relocation (defined by the ARM AAELF specification)
+enables objects compiled for the ARMv4 architecture to be
+interworking-safe when linked with other objects compiled for ARMv4t,
+but also allows pure ARMv4 binaries to be built from the same ARMv4
+objects.
+
+ In the latter case, the switch `--fix-v4bx' must be passed to the
+linker, which causes v4t `BX rM' instructions to be rewritten as `MOV
+PC,rM', since v4 processors do not have a `BX' instruction.
+
+ In the former case, the switch should not be used, and `R_ARM_V4BX'
+relocations are ignored.
+
+ Replace `BX rM' instructions identified by `R_ARM_V4BX' relocations
+with a branch to the following veneer:
+
+ TST rM, #1
+ MOVEQ PC, rM
+ BX Rn
+
+ This allows generation of libraries/applications that work on ARMv4
+cores and are still interworking safe. Note that the above veneer
+clobbers the condition flags, so may cause incorrect progrm behavior in
+rare cases.
+
+ The `--use-blx' switch enables the linker to use ARM/Thumb BLX
+instructions (available on ARMv5t and above) in various situations.
+Currently it is used to perform calls via the PLT from Thumb code using
+BLX rather than using BX and a mode-switching stub before each PLT
+entry. This should lead to such calls executing slightly faster.
+
+ This option is enabled implicitly for SymbianOS, so there is no need
+to specify it if you are using that target.
+
+ The `--vfp11-denorm-fix' switch enables a link-time workaround for a
+bug in certain VFP11 coprocessor hardware, which sometimes allows
+instructions with denorm operands (which must be handled by support
+code) to have those operands overwritten by subsequent instructions
+before the support code can read the intended values.
+
+ The bug may be avoided in scalar mode if you allow at least one
+intervening instruction between a VFP11 instruction which uses a
+register and another instruction which writes to the same register, or
+at least two intervening instructions if vector mode is in use. The bug
+only affects full-compliance floating-point mode: you do not need this
+workaround if you are using "runfast" mode. Please contact ARM for
+further details.
+
+ If you know you are using buggy VFP11 hardware, you can enable this
+workaround by specifying the linker option `--vfp-denorm-fix=scalar' if
+you are using the VFP11 scalar mode only, or `--vfp-denorm-fix=vector'
+if you are using vector mode (the latter also works for scalar code).
+The default is `--vfp-denorm-fix=none'.
+
+ If the workaround is enabled, instructions are scanned for
+potentially-troublesome sequences, and a veneer is created for each
+such sequence which may trigger the erratum. The veneer consists of the
+first instruction of the sequence and a branch back to the subsequent
+instruction. The original instruction is then replaced with a branch to
+the veneer. The extra cycles required to call and return from the veneer
+are sufficient to avoid the erratum in both the scalar and vector cases.
+
+ The `--no-enum-size-warning' switch prevents the linker from warning
+when linking object files that specify incompatible EABI enumeration
+size attributes. For example, with this switch enabled, linking of an
+object file using 32-bit enumeration values with another using
+enumeration values fitted into the smallest possible space will not be
+diagnosed.
+
+ The `--no-wchar-size-warning' switch prevents the linker from
+warning when linking object files that specify incompatible EABI
+`wchar_t' size attributes. For example, with this switch enabled,
+linking of an object file using 32-bit `wchar_t' values with another
+using 16-bit `wchar_t' values will not be diagnosed.
+
+ The `--pic-veneer' switch makes the linker use PIC sequences for
+ARM/Thumb interworking veneers, even if the rest of the binary is not
+PIC. This avoids problems on uClinux targets where `--emit-relocs' is
+used to generate relocatable binaries.
+
+ The linker will automatically generate and insert small sequences of
+code into a linked ARM ELF executable whenever an attempt is made to
+perform a function call to a symbol that is too far away. The
+placement of these sequences of instructions - called stubs - is
+controlled by the command line option `--stub-group-size=N'. The
+placement is important because a poor choice can create a need for
+duplicate stubs, increasing the code sizw. The linker will try to
+group stubs together in order to reduce interruptions to the flow of
+code, but it needs guidance as to how big these groups should be and
+where they should be placed.
+
+ The value of `N', the parameter to the `--stub-group-size=' option
+controls where the stub groups are placed. If it is negative then all
+stubs are placed after the first branch that needs them. If it is
+positive then the stubs can be placed either before or after the
+branches that need them. If the value of `N' is 1 (either +1 or -1)
+then the linker will choose exactly where to place groups of stubs,
+using its built in heuristics. A value of `N' greater than 1 (or
+smaller than -1) tells the linker that a single group of stubs can
+service at most `N' bytes from the input sections.
+
+ The default, if `--stub-group-size=' is not specified, is `N = +1'.
+
+ Farcalls stubs insertion is fully supported for the ARM-EABI target
+only, because it relies on object files properties not present
+otherwise.
+
+
+File: ld.info, Node: HPPA ELF32, Next: M68K, Prev: ARM, Up: Machine Dependent
+
+4.5 `ld' and HPPA 32-bit ELF Support
+====================================
+
+When generating a shared library, `ld' will by default generate import
+stubs suitable for use with a single sub-space application. The
+`--multi-subspace' switch causes `ld' to generate export stubs, and
+different (larger) import stubs suitable for use with multiple
+sub-spaces.
+
+ Long branch stubs and import/export stubs are placed by `ld' in stub
+sections located between groups of input sections. `--stub-group-size'
+specifies the maximum size of a group of input sections handled by one
+stub section. Since branch offsets are signed, a stub section may
+serve two groups of input sections, one group before the stub section,
+and one group after it. However, when using conditional branches that
+require stubs, it may be better (for branch prediction) that stub
+sections only serve one group of input sections. A negative value for
+`N' chooses this scheme, ensuring that branches to stubs always use a
+negative offset. Two special values of `N' are recognized, `1' and
+`-1'. These both instruct `ld' to automatically size input section
+groups for the branch types detected, with the same behaviour regarding
+stub placement as other positive or negative values of `N' respectively.
+
+ Note that `--stub-group-size' does not split input sections. A
+single input section larger than the group size specified will of course
+create a larger group (of one section). If input sections are too
+large, it may not be possible for a branch to reach its stub.
+
+
+File: ld.info, Node: M68K, Next: MMIX, Prev: HPPA ELF32, Up: Machine Dependent
+
+4.6 `ld' and the Motorola 68K family
+====================================
+
+The `--got=TYPE' option lets you choose the GOT generation scheme. The
+choices are `single', `negative', `multigot' and `target'. When
+`target' is selected the linker chooses the default GOT generation
+scheme for the current target. `single' tells the linker to generate a
+single GOT with entries only at non-negative offsets. `negative'
+instructs the linker to generate a single GOT with entries at both
+negative and positive offsets. Not all environments support such GOTs.
+`multigot' allows the linker to generate several GOTs in the output
+file. All GOT references from a single input object file access the
+same GOT, but references from different input object files might access
+different GOTs. Not all environments support such GOTs.
+
+
+File: ld.info, Node: MMIX, Next: MSP430, Prev: M68K, Up: Machine Dependent
+
+4.7 `ld' and MMIX
+=================
+
+For MMIX, there is a choice of generating `ELF' object files or `mmo'
+object files when linking. The simulator `mmix' understands the `mmo'
+format. The binutils `objcopy' utility can translate between the two
+formats.
+
+ There is one special section, the `.MMIX.reg_contents' section.
+Contents in this section is assumed to correspond to that of global
+registers, and symbols referring to it are translated to special
+symbols, equal to registers. In a final link, the start address of the
+`.MMIX.reg_contents' section corresponds to the first allocated global
+register multiplied by 8. Register `$255' is not included in this
+section; it is always set to the program entry, which is at the symbol
+`Main' for `mmo' files.
+
+ Global symbols with the prefix `__.MMIX.start.', for example
+`__.MMIX.start..text' and `__.MMIX.start..data' are special. The
+default linker script uses these to set the default start address of a
+section.
+
+ Initial and trailing multiples of zero-valued 32-bit words in a
+section, are left out from an mmo file.
+
+
+File: ld.info, Node: MSP430, Next: M68HC11/68HC12, Prev: MMIX, Up: Machine Dependent
+
+4.8 `ld' and MSP430
+===================
+
+For the MSP430 it is possible to select the MPU architecture. The flag
+`-m [mpu type]' will select an appropriate linker script for selected
+MPU type. (To get a list of known MPUs just pass `-m help' option to
+the linker).
+
+ The linker will recognize some extra sections which are MSP430
+specific:
+
+``.vectors''
+ Defines a portion of ROM where interrupt vectors located.
+
+``.bootloader''
+ Defines the bootloader portion of the ROM (if applicable). Any
+ code in this section will be uploaded to the MPU.
+
+``.infomem''
+ Defines an information memory section (if applicable). Any code in
+ this section will be uploaded to the MPU.
+
+``.infomemnobits''
+ This is the same as the `.infomem' section except that any code in
+ this section will not be uploaded to the MPU.
+
+``.noinit''
+ Denotes a portion of RAM located above `.bss' section.
+
+ The last two sections are used by gcc.
+
+
+File: ld.info, Node: PowerPC ELF32, Next: PowerPC64 ELF64, Prev: M68HC11/68HC12, Up: Machine Dependent
+
+4.9 `ld' and PowerPC 32-bit ELF Support
+=======================================
+
+Branches on PowerPC processors are limited to a signed 26-bit
+displacement, which may result in `ld' giving `relocation truncated to
+fit' errors with very large programs. `--relax' enables the generation
+of trampolines that can access the entire 32-bit address space. These
+trampolines are inserted at section boundaries, so may not themselves
+be reachable if an input section exceeds 33M in size. You may combine
+`-r' and `--relax' to add trampolines in a partial link. In that case
+both branches to undefined symbols and inter-section branches are also
+considered potentially out of range, and trampolines inserted.
+
+`--bss-plt'
+ Current PowerPC GCC accepts a `-msecure-plt' option that generates
+ code capable of using a newer PLT and GOT layout that has the
+ security advantage of no executable section ever needing to be
+ writable and no writable section ever being executable. PowerPC
+ `ld' will generate this layout, including stubs to access the PLT,
+ if all input files (including startup and static libraries) were
+ compiled with `-msecure-plt'. `--bss-plt' forces the old BSS PLT
+ (and GOT layout) which can give slightly better performance.
+
+`--secure-plt'
+ `ld' will use the new PLT and GOT layout if it is linking new
+ `-fpic' or `-fPIC' code, but does not do so automatically when
+ linking non-PIC code. This option requests the new PLT and GOT
+ layout. A warning will be given if some object file requires the
+ old style BSS PLT.
+
+`--sdata-got'
+ The new secure PLT and GOT are placed differently relative to other
+ sections compared to older BSS PLT and GOT placement. The
+ location of `.plt' must change because the new secure PLT is an
+ initialized section while the old PLT is uninitialized. The
+ reason for the `.got' change is more subtle: The new placement
+ allows `.got' to be read-only in applications linked with `-z
+ relro -z now'. However, this placement means that `.sdata' cannot
+ always be used in shared libraries, because the PowerPC ABI
+ accesses `.sdata' in shared libraries from the GOT pointer.
+ `--sdata-got' forces the old GOT placement. PowerPC GCC doesn't
+ use `.sdata' in shared libraries, so this option is really only
+ useful for other compilers that may do so.
+
+`--emit-stub-syms'
+ This option causes `ld' to label linker stubs with a local symbol
+ that encodes the stub type and destination.
+
+`--no-tls-optimize'
+ PowerPC `ld' normally performs some optimization of code sequences
+ used to access Thread-Local Storage. Use this option to disable
+ the optimization.
+
+
+File: ld.info, Node: PowerPC64 ELF64, Next: SPU ELF, Prev: PowerPC ELF32, Up: Machine Dependent
+
+4.10 `ld' and PowerPC64 64-bit ELF Support
+==========================================
+
+`--stub-group-size'
+ Long branch stubs, PLT call stubs and TOC adjusting stubs are
+ placed by `ld' in stub sections located between groups of input
+ sections. `--stub-group-size' specifies the maximum size of a
+ group of input sections handled by one stub section. Since branch
+ offsets are signed, a stub section may serve two groups of input
+ sections, one group before the stub section, and one group after
+ it. However, when using conditional branches that require stubs,
+ it may be better (for branch prediction) that stub sections only
+ serve one group of input sections. A negative value for `N'
+ chooses this scheme, ensuring that branches to stubs always use a
+ negative offset. Two special values of `N' are recognized, `1'
+ and `-1'. These both instruct `ld' to automatically size input
+ section groups for the branch types detected, with the same
+ behaviour regarding stub placement as other positive or negative
+ values of `N' respectively.
+
+ Note that `--stub-group-size' does not split input sections. A
+ single input section larger than the group size specified will of
+ course create a larger group (of one section). If input sections
+ are too large, it may not be possible for a branch to reach its
+ stub.
+
+`--emit-stub-syms'
+ This option causes `ld' to label linker stubs with a local symbol
+ that encodes the stub type and destination.
+
+`--dotsyms, --no-dotsyms'
+ These two options control how `ld' interprets version patterns in
+ a version script. Older PowerPC64 compilers emitted both a
+ function descriptor symbol with the same name as the function, and
+ a code entry symbol with the name prefixed by a dot (`.'). To
+ properly version a function `foo', the version script thus needs
+ to control both `foo' and `.foo'. The option `--dotsyms', on by
+ default, automatically adds the required dot-prefixed patterns.
+ Use `--no-dotsyms' to disable this feature.
+
+`--no-tls-optimize'
+ PowerPC64 `ld' normally performs some optimization of code
+ sequences used to access Thread-Local Storage. Use this option to
+ disable the optimization.
+
+`--no-opd-optimize'
+ PowerPC64 `ld' normally removes `.opd' section entries
+ corresponding to deleted link-once functions, or functions removed
+ by the action of `--gc-sections' or linker script `/DISCARD/'.
+ Use this option to disable `.opd' optimization.
+
+`--non-overlapping-opd'
+ Some PowerPC64 compilers have an option to generate compressed
+ `.opd' entries spaced 16 bytes apart, overlapping the third word,
+ the static chain pointer (unused in C) with the first word of the
+ next entry. This option expands such entries to the full 24 bytes.
+
+`--no-toc-optimize'
+ PowerPC64 `ld' normally removes unused `.toc' section entries.
+ Such entries are detected by examining relocations that reference
+ the TOC in code sections. A reloc in a deleted code section marks
+ a TOC word as unneeded, while a reloc in a kept code section marks
+ a TOC word as needed. Since the TOC may reference itself, TOC
+ relocs are also examined. TOC words marked as both needed and
+ unneeded will of course be kept. TOC words without any referencing
+ reloc are assumed to be part of a multi-word entry, and are kept or
+ discarded as per the nearest marked preceding word. This works
+ reliably for compiler generated code, but may be incorrect if
+ assembly code is used to insert TOC entries. Use this option to
+ disable the optimization.
+
+`--no-multi-toc'
+ By default, PowerPC64 GCC generates code for a TOC model where TOC
+ entries are accessed with a 16-bit offset from r2. This limits the
+ total TOC size to 64K. PowerPC64 `ld' extends this limit by
+ grouping code sections such that each group uses less than 64K for
+ its TOC entries, then inserts r2 adjusting stubs between
+ inter-group calls. `ld' does not split apart input sections, so
+ cannot help if a single input file has a `.toc' section that
+ exceeds 64K, most likely from linking multiple files with `ld -r'.
+ Use this option to turn off this feature.
+
+
+File: ld.info, Node: SPU ELF, Next: TI COFF, Prev: PowerPC64 ELF64, Up: Machine Dependent
+
+4.11 `ld' and SPU ELF Support
+=============================
+
+`--plugin'
+ This option marks an executable as a PIC plugin module.
+
+`--no-overlays'
+ Normally, `ld' recognizes calls to functions within overlay
+ regions, and redirects such calls to an overlay manager via a stub.
+ `ld' also provides a built-in overlay manager. This option turns
+ off all this special overlay handling.
+
+`--emit-stub-syms'
+ This option causes `ld' to label overlay stubs with a local symbol
+ that encodes the stub type and destination.
+
+`--extra-overlay-stubs'
+ This option causes `ld' to add overlay call stubs on all function
+ calls out of overlay regions. Normally stubs are not added on
+ calls to non-overlay regions.
+
+`--local-store=lo:hi'
+ `ld' usually checks that a final executable for SPU fits in the
+ address range 0 to 256k. This option may be used to change the
+ range. Disable the check entirely with `--local-store=0:0'.
+
+`--stack-analysis'
+ SPU local store space is limited. Over-allocation of stack space
+ unnecessarily limits space available for code and data, while
+ under-allocation results in runtime failures. If given this
+ option, `ld' will provide an estimate of maximum stack usage.
+ `ld' does this by examining symbols in code sections to determine
+ the extents of functions, and looking at function prologues for
+ stack adjusting instructions. A call-graph is created by looking
+ for relocations on branch instructions. The graph is then searched
+ for the maximum stack usage path. Note that this analysis does not
+ find calls made via function pointers, and does not handle
+ recursion and other cycles in the call graph. Stack usage may be
+ under-estimated if your code makes such calls. Also, stack usage
+ for dynamic allocation, e.g. alloca, will not be detected. If a
+ link map is requested, detailed information about each function's
+ stack usage and calls will be given.
+
+`--emit-stack-syms'
+ This option, if given along with `--stack-analysis' will result in
+ `ld' emitting stack sizing symbols for each function. These take
+ the form `__stack_<function_name>' for global functions, and
+ `__stack_<number>_<function_name>' for static functions.
+ `<number>' is the section id in hex. The value of such symbols is
+ the stack requirement for the corresponding function. The symbol
+ size will be zero, type `STT_NOTYPE', binding `STB_LOCAL', and
+ section `SHN_ABS'.
+
+
+File: ld.info, Node: TI COFF, Next: WIN32, Prev: SPU ELF, Up: Machine Dependent
+
+4.12 `ld''s Support for Various TI COFF Versions
+================================================
+
+The `--format' switch allows selection of one of the various TI COFF
+versions. The latest of this writing is 2; versions 0 and 1 are also
+supported. The TI COFF versions also vary in header byte-order format;
+`ld' will read any version or byte order, but the output header format
+depends on the default specified by the specific target.
+
+
+File: ld.info, Node: WIN32, Next: Xtensa, Prev: TI COFF, Up: Machine Dependent
+
+4.13 `ld' and WIN32 (cygwin/mingw)
+==================================
+
+This section describes some of the win32 specific `ld' issues. See
+*Note Command Line Options: Options. for detailed description of the
+command line options mentioned here.
+
+_import libraries_
+ The standard Windows linker creates and uses so-called import
+ libraries, which contains information for linking to dll's. They
+ are regular static archives and are handled as any other static
+ archive. The cygwin and mingw ports of `ld' have specific support
+ for creating such libraries provided with the `--out-implib'
+ command line option.
+
+_exporting DLL symbols_
+ The cygwin/mingw `ld' has several ways to export symbols for dll's.
+
+ _using auto-export functionality_
+ By default `ld' exports symbols with the auto-export
+ functionality, which is controlled by the following command
+ line options:
+
+ * -export-all-symbols [This is the default]
+
+ * -exclude-symbols
+
+ * -exclude-libs
+
+ * -exclude-modules-for-implib
+
+ * -version-script
+
+ When auto-export is in operation, `ld' will export all the
+ non-local (global and common) symbols it finds in a DLL, with
+ the exception of a few symbols known to belong to the
+ system's runtime and libraries. As it will often not be
+ desirable to export all of a DLL's symbols, which may include
+ private functions that are not part of any public interface,
+ the command-line options listed above may be used to filter
+ symbols out from the list for exporting. The `--output-def'
+ option can be used in order to see the final list of exported
+ symbols with all exclusions taken into effect.
+
+ If `--export-all-symbols' is not given explicitly on the
+ command line, then the default auto-export behavior will be
+ _disabled_ if either of the following are true:
+
+ * A DEF file is used.
+
+ * Any symbol in any object file was marked with the
+ __declspec(dllexport) attribute.
+
+ _using a DEF file_
+ Another way of exporting symbols is using a DEF file. A DEF
+ file is an ASCII file containing definitions of symbols which
+ should be exported when a dll is created. Usually it is
+ named `<dll name>.def' and is added as any other object file
+ to the linker's command line. The file's name must end in
+ `.def' or `.DEF'.
+
+ gcc -o <output> <objectfiles> <dll name>.def
+
+ Using a DEF file turns off the normal auto-export behavior,
+ unless the `--export-all-symbols' option is also used.
+
+ Here is an example of a DEF file for a shared library called
+ `xyz.dll':
+
+ LIBRARY "xyz.dll" BASE=0x20000000
+
+ EXPORTS
+ foo
+ bar
+ _bar = bar
+ another_foo = abc.dll.afoo
+ var1 DATA
+
+ This example defines a DLL with a non-default base address
+ and five symbols in the export table. The third exported
+ symbol `_bar' is an alias for the second. The fourth symbol,
+ `another_foo' is resolved by "forwarding" to another module
+ and treating it as an alias for `afoo' exported from the DLL
+ `abc.dll'. The final symbol `var1' is declared to be a data
+ object.
+
+ The optional `LIBRARY <name>' command indicates the _internal_
+ name of the output DLL. If `<name>' does not include a suffix,
+ the default library suffix, `.DLL' is appended.
+
+ When the .DEF file is used to build an application, rather
+ than a library, the `NAME <name>' command should be used
+ instead of `LIBRARY'. If `<name>' does not include a suffix,
+ the default executable suffix, `.EXE' is appended.
+
+ With either `LIBRARY <name>' or `NAME <name>' the optional
+ specification `BASE = <number>' may be used to specify a
+ non-default base address for the image.
+
+ If neither `LIBRARY <name>' nor `NAME <name>' is specified,
+ or they specify an empty string, the internal name is the
+ same as the filename specified on the command line.
+
+ The complete specification of an export symbol is:
+
+ EXPORTS
+ ( ( ( <name1> [ = <name2> ] )
+ | ( <name1> = <module-name> . <external-name>))
+ [ @ <integer> ] [NONAME] [DATA] [CONSTANT] [PRIVATE] ) *
+
+ Declares `<name1>' as an exported symbol from the DLL, or
+ declares `<name1>' as an exported alias for `<name2>'; or
+ declares `<name1>' as a "forward" alias for the symbol
+ `<external-name>' in the DLL `<module-name>'. Optionally,
+ the symbol may be exported by the specified ordinal
+ `<integer>' alias.
+
+ The optional keywords that follow the declaration indicate:
+
+ `NONAME': Do not put the symbol name in the DLL's export
+ table. It will still be exported by its ordinal alias
+ (either the value specified by the .def specification or,
+ otherwise, the value assigned by the linker). The symbol
+ name, however, does remain visible in the import library (if
+ any), unless `PRIVATE' is also specified.
+
+ `DATA': The symbol is a variable or object, rather than a
+ function. The import lib will export only an indirect
+ reference to `foo' as the symbol `_imp__foo' (ie, `foo' must
+ be resolved as `*_imp__foo').
+
+ `CONSTANT': Like `DATA', but put the undecorated `foo' as
+ well as `_imp__foo' into the import library. Both refer to the
+ read-only import address table's pointer to the variable, not
+ to the variable itself. This can be dangerous. If the user
+ code fails to add the `dllimport' attribute and also fails to
+ explicitly add the extra indirection that the use of the
+ attribute enforces, the application will behave unexpectedly.
+
+ `PRIVATE': Put the symbol in the DLL's export table, but do
+ not put it into the static import library used to resolve
+ imports at link time. The symbol can still be imported using
+ the `LoadLibrary/GetProcAddress' API at runtime or by by
+ using the GNU ld extension of linking directly to the DLL
+ without an import library.
+
+ See ld/deffilep.y in the binutils sources for the full
+ specification of other DEF file statements
+
+ While linking a shared dll, `ld' is able to create a DEF file
+ with the `--output-def <file>' command line option.
+
+ _Using decorations_
+ Another way of marking symbols for export is to modify the
+ source code itself, so that when building the DLL each symbol
+ to be exported is declared as:
+
+ __declspec(dllexport) int a_variable
+ __declspec(dllexport) void a_function(int with_args)
+
+ All such symbols will be exported from the DLL. If, however,
+ any of the object files in the DLL contain symbols decorated
+ in this way, then the normal auto-export behavior is
+ disabled, unless the `--export-all-symbols' option is also
+ used.
+
+ Note that object files that wish to access these symbols must
+ _not_ decorate them with dllexport. Instead, they should use
+ dllimport, instead:
+
+ __declspec(dllimport) int a_variable
+ __declspec(dllimport) void a_function(int with_args)
+
+ This complicates the structure of library header files,
+ because when included by the library itself the header must
+ declare the variables and functions as dllexport, but when
+ included by client code the header must declare them as
+ dllimport. There are a number of idioms that are typically
+ used to do this; often client code can omit the __declspec()
+ declaration completely. See `--enable-auto-import' and
+ `automatic data imports' for more information.
+
+_automatic data imports_
+ The standard Windows dll format supports data imports from dlls
+ only by adding special decorations (dllimport/dllexport), which
+ let the compiler produce specific assembler instructions to deal
+ with this issue. This increases the effort necessary to port
+ existing Un*x code to these platforms, especially for large c++
+ libraries and applications. The auto-import feature, which was
+ initially provided by Paul Sokolovsky, allows one to omit the
+ decorations to achieve a behavior that conforms to that on
+ POSIX/Un*x platforms. This feature is enabled with the
+ `--enable-auto-import' command-line option, although it is enabled
+ by default on cygwin/mingw. The `--enable-auto-import' option
+ itself now serves mainly to suppress any warnings that are
+ ordinarily emitted when linked objects trigger the feature's use.
+
+ auto-import of variables does not always work flawlessly without
+ additional assistance. Sometimes, you will see this message
+
+ "variable '<var>' can't be auto-imported. Please read the
+ documentation for ld's `--enable-auto-import' for details."
+
+ The `--enable-auto-import' documentation explains why this error
+ occurs, and several methods that can be used to overcome this
+ difficulty. One of these methods is the _runtime pseudo-relocs_
+ feature, described below.
+
+ For complex variables imported from DLLs (such as structs or
+ classes), object files typically contain a base address for the
+ variable and an offset (_addend_) within the variable-to specify a
+ particular field or public member, for instance. Unfortunately,
+ the runtime loader used in win32 environments is incapable of
+ fixing these references at runtime without the additional
+ information supplied by dllimport/dllexport decorations. The
+ standard auto-import feature described above is unable to resolve
+ these references.
+
+ The `--enable-runtime-pseudo-relocs' switch allows these
+ references to be resolved without error, while leaving the task of
+ adjusting the references themselves (with their non-zero addends)
+ to specialized code provided by the runtime environment. Recent
+ versions of the cygwin and mingw environments and compilers
+ provide this runtime support; older versions do not. However, the
+ support is only necessary on the developer's platform; the
+ compiled result will run without error on an older system.
+
+ `--enable-runtime-pseudo-relocs' is not the default; it must be
+ explicitly enabled as needed.
+
+_direct linking to a dll_
+ The cygwin/mingw ports of `ld' support the direct linking,
+ including data symbols, to a dll without the usage of any import
+ libraries. This is much faster and uses much less memory than
+ does the traditional import library method, especially when
+ linking large libraries or applications. When `ld' creates an
+ import lib, each function or variable exported from the dll is
+ stored in its own bfd, even though a single bfd could contain many
+ exports. The overhead involved in storing, loading, and
+ processing so many bfd's is quite large, and explains the
+ tremendous time, memory, and storage needed to link against
+ particularly large or complex libraries when using import libs.
+
+ Linking directly to a dll uses no extra command-line switches
+ other than `-L' and `-l', because `ld' already searches for a
+ number of names to match each library. All that is needed from
+ the developer's perspective is an understanding of this search, in
+ order to force ld to select the dll instead of an import library.
+
+ For instance, when ld is called with the argument `-lxxx' it will
+ attempt to find, in the first directory of its search path,
+
+ libxxx.dll.a
+ xxx.dll.a
+ libxxx.a
+ xxx.lib
+ cygxxx.dll (*)
+ libxxx.dll
+ xxx.dll
+
+ before moving on to the next directory in the search path.
+
+ (*) Actually, this is not `cygxxx.dll' but in fact is
+ `<prefix>xxx.dll', where `<prefix>' is set by the `ld' option
+ `--dll-search-prefix=<prefix>'. In the case of cygwin, the
+ standard gcc spec file includes `--dll-search-prefix=cyg', so in
+ effect we actually search for `cygxxx.dll'.
+
+ Other win32-based unix environments, such as mingw or pw32, may
+ use other `<prefix>'es, although at present only cygwin makes use
+ of this feature. It was originally intended to help avoid name
+ conflicts among dll's built for the various win32/un*x
+ environments, so that (for example) two versions of a zlib dll
+ could coexist on the same machine.
+
+ The generic cygwin/mingw path layout uses a `bin' directory for
+ applications and dll's and a `lib' directory for the import
+ libraries (using cygwin nomenclature):
+
+ bin/
+ cygxxx.dll
+ lib/
+ libxxx.dll.a (in case of dll's)
+ libxxx.a (in case of static archive)
+
+ Linking directly to a dll without using the import library can be
+ done two ways:
+
+ 1. Use the dll directly by adding the `bin' path to the link line
+ gcc -Wl,-verbose -o a.exe -L../bin/ -lxxx
+
+ However, as the dll's often have version numbers appended to their
+ names (`cygncurses-5.dll') this will often fail, unless one
+ specifies `-L../bin -lncurses-5' to include the version. Import
+ libs are generally not versioned, and do not have this difficulty.
+
+ 2. Create a symbolic link from the dll to a file in the `lib'
+ directory according to the above mentioned search pattern. This
+ should be used to avoid unwanted changes in the tools needed for
+ making the app/dll.
+
+ ln -s bin/cygxxx.dll lib/[cyg|lib|]xxx.dll[.a]
+
+ Then you can link without any make environment changes.
+
+ gcc -Wl,-verbose -o a.exe -L../lib/ -lxxx
+
+ This technique also avoids the version number problems, because
+ the following is perfectly legal
+
+ bin/
+ cygxxx-5.dll
+ lib/
+ libxxx.dll.a -> ../bin/cygxxx-5.dll
+
+ Linking directly to a dll without using an import lib will work
+ even when auto-import features are exercised, and even when
+ `--enable-runtime-pseudo-relocs' is used.
+
+ Given the improvements in speed and memory usage, one might
+ justifiably wonder why import libraries are used at all. There
+ are three reasons:
+
+ 1. Until recently, the link-directly-to-dll functionality did _not_
+ work with auto-imported data.
+
+ 2. Sometimes it is necessary to include pure static objects within
+ the import library (which otherwise contains only bfd's for
+ indirection symbols that point to the exports of a dll). Again,
+ the import lib for the cygwin kernel makes use of this ability,
+ and it is not possible to do this without an import lib.
+
+ 3. Symbol aliases can only be resolved using an import lib. This
+ is critical when linking against OS-supplied dll's (eg, the win32
+ API) in which symbols are usually exported as undecorated aliases
+ of their stdcall-decorated assembly names.
+
+ So, import libs are not going away. But the ability to replace
+ true import libs with a simple symbolic link to (or a copy of) a
+ dll, in many cases, is a useful addition to the suite of tools
+ binutils makes available to the win32 developer. Given the
+ massive improvements in memory requirements during linking, storage
+ requirements, and linking speed, we expect that many developers
+ will soon begin to use this feature whenever possible.
+
+_symbol aliasing_
+
+ _adding additional names_
+ Sometimes, it is useful to export symbols with additional
+ names. A symbol `foo' will be exported as `foo', but it can
+ also be exported as `_foo' by using special directives in the
+ DEF file when creating the dll. This will affect also the
+ optional created import library. Consider the following DEF
+ file:
+
+ LIBRARY "xyz.dll" BASE=0x61000000
+
+ EXPORTS
+ foo
+ _foo = foo
+
+ The line `_foo = foo' maps the symbol `foo' to `_foo'.
+
+ Another method for creating a symbol alias is to create it in
+ the source code using the "weak" attribute:
+
+ void foo () { /* Do something. */; }
+ void _foo () __attribute__ ((weak, alias ("foo")));
+
+ See the gcc manual for more information about attributes and
+ weak symbols.
+
+ _renaming symbols_
+ Sometimes it is useful to rename exports. For instance, the
+ cygwin kernel does this regularly. A symbol `_foo' can be
+ exported as `foo' but not as `_foo' by using special
+ directives in the DEF file. (This will also affect the import
+ library, if it is created). In the following example:
+
+ LIBRARY "xyz.dll" BASE=0x61000000
+
+ EXPORTS
+ _foo = foo
+
+ The line `_foo = foo' maps the exported symbol `foo' to
+ `_foo'.
+
+ Note: using a DEF file disables the default auto-export behavior,
+ unless the `--export-all-symbols' command line option is used.
+ If, however, you are trying to rename symbols, then you should list
+ _all_ desired exports in the DEF file, including the symbols that
+ are not being renamed, and do _not_ use the `--export-all-symbols'
+ option. If you list only the renamed symbols in the DEF file, and
+ use `--export-all-symbols' to handle the other symbols, then the
+ both the new names _and_ the original names for the renamed
+ symbols will be exported. In effect, you'd be aliasing those
+ symbols, not renaming them, which is probably not what you wanted.
+
+_weak externals_
+ The Windows object format, PE, specifies a form of weak symbols
+ called weak externals. When a weak symbol is linked and the
+ symbol is not defined, the weak symbol becomes an alias for some
+ other symbol. There are three variants of weak externals:
+ * Definition is searched for in objects and libraries,
+ historically called lazy externals.
+
+ * Definition is searched for only in other objects, not in
+ libraries. This form is not presently implemented.
+
+ * No search; the symbol is an alias. This form is not presently
+ implemented.
+ As a GNU extension, weak symbols that do not specify an alternate
+ symbol are supported. If the symbol is undefined when linking,
+ the symbol uses a default value.
+
+_aligned common symbols_
+ As a GNU extension to the PE file format, it is possible to
+ specify the desired alignment for a common symbol. This
+ information is conveyed from the assembler or compiler to the
+ linker by means of GNU-specific commands carried in the object
+ file's `.drectve' section, which are recognized by `ld' and
+ respected when laying out the common symbols. Native tools will
+ be able to process object files employing this GNU extension, but
+ will fail to respect the alignment instructions, and may issue
+ noisy warnings about unknown linker directives.
+
+
+File: ld.info, Node: Xtensa, Prev: WIN32, Up: Machine Dependent
+
+4.14 `ld' and Xtensa Processors
+===============================
+
+The default `ld' behavior for Xtensa processors is to interpret
+`SECTIONS' commands so that lists of explicitly named sections in a
+specification with a wildcard file will be interleaved when necessary to
+keep literal pools within the range of PC-relative load offsets. For
+example, with the command:
+
+ SECTIONS
+ {
+ .text : {
+ *(.literal .text)
+ }
+ }
+
+`ld' may interleave some of the `.literal' and `.text' sections from
+different object files to ensure that the literal pools are within the
+range of PC-relative load offsets. A valid interleaving might place
+the `.literal' sections from an initial group of files followed by the
+`.text' sections of that group of files. Then, the `.literal' sections
+from the rest of the files and the `.text' sections from the rest of
+the files would follow.
+
+ Relaxation is enabled by default for the Xtensa version of `ld' and
+provides two important link-time optimizations. The first optimization
+is to combine identical literal values to reduce code size. A redundant
+literal will be removed and all the `L32R' instructions that use it
+will be changed to reference an identical literal, as long as the
+location of the replacement literal is within the offset range of all
+the `L32R' instructions. The second optimization is to remove
+unnecessary overhead from assembler-generated "longcall" sequences of
+`L32R'/`CALLXN' when the target functions are within range of direct
+`CALLN' instructions.
+
+ For each of these cases where an indirect call sequence can be
+optimized to a direct call, the linker will change the `CALLXN'
+instruction to a `CALLN' instruction, remove the `L32R' instruction,
+and remove the literal referenced by the `L32R' instruction if it is
+not used for anything else. Removing the `L32R' instruction always
+reduces code size but can potentially hurt performance by changing the
+alignment of subsequent branch targets. By default, the linker will
+always preserve alignments, either by switching some instructions
+between 24-bit encodings and the equivalent density instructions or by
+inserting a no-op in place of the `L32R' instruction that was removed.
+If code size is more important than performance, the `--size-opt'
+option can be used to prevent the linker from widening density
+instructions or inserting no-ops, except in a few cases where no-ops
+are required for correctness.
+
+ The following Xtensa-specific command-line options can be used to
+control the linker:
+
+`--no-relax'
+ Since the Xtensa version of `ld' enables the `--relax' option by
+ default, the `--no-relax' option is provided to disable relaxation.
+
+`--size-opt'
+ When optimizing indirect calls to direct calls, optimize for code
+ size more than performance. With this option, the linker will not
+ insert no-ops or widen density instructions to preserve branch
+ target alignment. There may still be some cases where no-ops are
+ required to preserve the correctness of the code.
+
+
+File: ld.info, Node: BFD, Next: Reporting Bugs, Prev: Machine Dependent, Up: Top
+
+5 BFD
+*****
+
+The linker accesses object and archive files using the BFD libraries.
+These libraries allow the linker to use the same routines to operate on
+object files whatever the object file format. A different object file
+format can be supported simply by creating a new BFD back end and adding
+it to the library. To conserve runtime memory, however, the linker and
+associated tools are usually configured to support only a subset of the
+object file formats available. You can use `objdump -i' (*note
+objdump: (binutils.info)objdump.) to list all the formats available for
+your configuration.
+
+ As with most implementations, BFD is a compromise between several
+conflicting requirements. The major factor influencing BFD design was
+efficiency: any time used converting between formats is time which
+would not have been spent had BFD not been involved. This is partly
+offset by abstraction payback; since BFD simplifies applications and
+back ends, more time and care may be spent optimizing algorithms for a
+greater speed.
+
+ One minor artifact of the BFD solution which you should bear in mind
+is the potential for information loss. There are two places where
+useful information can be lost using the BFD mechanism: during
+conversion and during output. *Note BFD information loss::.
+
+* Menu:
+
+* BFD outline:: How it works: an outline of BFD
+
+
+File: ld.info, Node: BFD outline, Up: BFD
+
+5.1 How It Works: An Outline of BFD
+===================================
+
+When an object file is opened, BFD subroutines automatically determine
+the format of the input object file. They then build a descriptor in
+memory with pointers to routines that will be used to access elements of
+the object file's data structures.
+
+ As different information from the object files is required, BFD
+reads from different sections of the file and processes them. For
+example, a very common operation for the linker is processing symbol
+tables. Each BFD back end provides a routine for converting between
+the object file's representation of symbols and an internal canonical
+format. When the linker asks for the symbol table of an object file, it
+calls through a memory pointer to the routine from the relevant BFD
+back end which reads and converts the table into a canonical form. The
+linker then operates upon the canonical form. When the link is finished
+and the linker writes the output file's symbol table, another BFD back
+end routine is called to take the newly created symbol table and
+convert it into the chosen output format.
+
+* Menu:
+
+* BFD information loss:: Information Loss
+* Canonical format:: The BFD canonical object-file format
+
+
+File: ld.info, Node: BFD information loss, Next: Canonical format, Up: BFD outline
+
+5.1.1 Information Loss
+----------------------
+
+_Information can be lost during output._ The output formats supported
+by BFD do not provide identical facilities, and information which can
+be described in one form has nowhere to go in another format. One
+example of this is alignment information in `b.out'. There is nowhere
+in an `a.out' format file to store alignment information on the
+contained data, so when a file is linked from `b.out' and an `a.out'
+image is produced, alignment information will not propagate to the
+output file. (The linker will still use the alignment information
+internally, so the link is performed correctly).
+
+ Another example is COFF section names. COFF files may contain an
+unlimited number of sections, each one with a textual section name. If
+the target of the link is a format which does not have many sections
+(e.g., `a.out') or has sections without names (e.g., the Oasys format),
+the link cannot be done simply. You can circumvent this problem by
+describing the desired input-to-output section mapping with the linker
+command language.
+
+ _Information can be lost during canonicalization._ The BFD internal
+canonical form of the external formats is not exhaustive; there are
+structures in input formats for which there is no direct representation
+internally. This means that the BFD back ends cannot maintain all
+possible data richness through the transformation between external to
+internal and back to external formats.
+
+ This limitation is only a problem when an application reads one
+format and writes another. Each BFD back end is responsible for
+maintaining as much data as possible, and the internal BFD canonical
+form has structures which are opaque to the BFD core, and exported only
+to the back ends. When a file is read in one format, the canonical form
+is generated for BFD and the application. At the same time, the back
+end saves away any information which may otherwise be lost. If the data
+is then written back in the same format, the back end routine will be
+able to use the canonical form provided by the BFD core as well as the
+information it prepared earlier. Since there is a great deal of
+commonality between back ends, there is no information lost when
+linking or copying big endian COFF to little endian COFF, or `a.out' to
+`b.out'. When a mixture of formats is linked, the information is only
+lost from the files whose format differs from the destination.
+
+
+File: ld.info, Node: Canonical format, Prev: BFD information loss, Up: BFD outline
+
+5.1.2 The BFD canonical object-file format
+------------------------------------------
+
+The greatest potential for loss of information occurs when there is the
+least overlap between the information provided by the source format,
+that stored by the canonical format, and that needed by the destination
+format. A brief description of the canonical form may help you
+understand which kinds of data you can count on preserving across
+conversions.
+
+_files_
+ Information stored on a per-file basis includes target machine
+ architecture, particular implementation format type, a demand
+ pageable bit, and a write protected bit. Information like Unix
+ magic numbers is not stored here--only the magic numbers' meaning,
+ so a `ZMAGIC' file would have both the demand pageable bit and the
+ write protected text bit set. The byte order of the target is
+ stored on a per-file basis, so that big- and little-endian object
+ files may be used with one another.
+
+_sections_
+ Each section in the input file contains the name of the section,
+ the section's original address in the object file, size and
+ alignment information, various flags, and pointers into other BFD
+ data structures.
+
+_symbols_
+ Each symbol contains a pointer to the information for the object
+ file which originally defined it, its name, its value, and various
+ flag bits. When a BFD back end reads in a symbol table, it
+ relocates all symbols to make them relative to the base of the
+ section where they were defined. Doing this ensures that each
+ symbol points to its containing section. Each symbol also has a
+ varying amount of hidden private data for the BFD back end. Since
+ the symbol points to the original file, the private data format
+ for that symbol is accessible. `ld' can operate on a collection
+ of symbols of wildly different formats without problems.
+
+ Normal global and simple local symbols are maintained on output,
+ so an output file (no matter its format) will retain symbols
+ pointing to functions and to global, static, and common variables.
+ Some symbol information is not worth retaining; in `a.out', type
+ information is stored in the symbol table as long symbol names.
+ This information would be useless to most COFF debuggers; the
+ linker has command line switches to allow users to throw it away.
+
+ There is one word of type information within the symbol, so if the
+ format supports symbol type information within symbols (for
+ example, COFF, IEEE, Oasys) and the type is simple enough to fit
+ within one word (nearly everything but aggregates), the
+ information will be preserved.
+
+_relocation level_
+ Each canonical BFD relocation record contains a pointer to the
+ symbol to relocate to, the offset of the data to relocate, the
+ section the data is in, and a pointer to a relocation type
+ descriptor. Relocation is performed by passing messages through
+ the relocation type descriptor and the symbol pointer. Therefore,
+ relocations can be performed on output data using a relocation
+ method that is only available in one of the input formats. For
+ instance, Oasys provides a byte relocation format. A relocation
+ record requesting this relocation type would point indirectly to a
+ routine to perform this, so the relocation may be performed on a
+ byte being written to a 68k COFF file, even though 68k COFF has no
+ such relocation type.
+
+_line numbers_
+ Object formats can contain, for debugging purposes, some form of
+ mapping between symbols, source line numbers, and addresses in the
+ output file. These addresses have to be relocated along with the
+ symbol information. Each symbol with an associated list of line
+ number records points to the first record of the list. The head
+ of a line number list consists of a pointer to the symbol, which
+ allows finding out the address of the function whose line number
+ is being described. The rest of the list is made up of pairs:
+ offsets into the section and line numbers. Any format which can
+ simply derive this information can pass it successfully between
+ formats (COFF, IEEE and Oasys).
+
+
+File: ld.info, Node: Reporting Bugs, Next: MRI, Prev: BFD, Up: Top
+
+6 Reporting Bugs
+****************
+
+Your bug reports play an essential role in making `ld' reliable.
+
+ Reporting a bug may help you by bringing a solution to your problem,
+or it may not. But in any case the principal function of a bug report
+is to help the entire community by making the next version of `ld' work
+better. Bug reports are your contribution to the maintenance of `ld'.
+
+ In order for a bug report to serve its purpose, you must include the
+information that enables us to fix the bug.
+
+* Menu:
+
+* Bug Criteria:: Have you found a bug?
+* Bug Reporting:: How to report bugs
+
+
+File: ld.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs
+
+6.1 Have You Found a Bug?
+=========================
+
+If you are not sure whether you have found a bug, here are some
+guidelines:
+
+ * If the linker gets a fatal signal, for any input whatever, that is
+ a `ld' bug. Reliable linkers never crash.
+
+ * If `ld' produces an error message for valid input, that is a bug.
+
+ * If `ld' does not produce an error message for invalid input, that
+ may be a bug. In the general case, the linker can not verify that
+ object files are correct.
+
+ * If you are an experienced user of linkers, your suggestions for
+ improvement of `ld' are welcome in any case.
+
+
+File: ld.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs
+
+6.2 How to Report Bugs
+======================
+
+A number of companies and individuals offer support for GNU products.
+If you obtained `ld' from a support organization, we recommend you
+contact that organization first.
+
+ You can find contact information for many support companies and
+individuals in the file `etc/SERVICE' in the GNU Emacs distribution.
+
+ Otherwise, send bug reports for `ld' to
+`http://www.sourceware.org/bugzilla/'.
+
+ The fundamental principle of reporting bugs usefully is this:
+*report all the facts*. If you are not sure whether to state a fact or
+leave it out, state it!
+
+ Often people omit facts because they think they know what causes the
+problem and assume that some details do not matter. Thus, you might
+assume that the name of a symbol you use in an example does not matter.
+Well, probably it does not, but one cannot be sure. Perhaps the bug
+is a stray memory reference which happens to fetch from the location
+where that name is stored in memory; perhaps, if the name were
+different, the contents of that location would fool the linker into
+doing the right thing despite the bug. Play it safe and give a
+specific, complete example. That is the easiest thing for you to do,
+and the most helpful.
+
+ Keep in mind that the purpose of a bug report is to enable us to fix
+the bug if it is new to us. Therefore, always write your bug reports
+on the assumption that the bug has not been reported previously.
+
+ Sometimes people give a few sketchy facts and ask, "Does this ring a
+bell?" This cannot help us fix a bug, so it is basically useless. We
+respond by asking for enough details to enable us to investigate. You
+might as well expedite matters by sending them to begin with.
+
+ To enable us to fix the bug, you should include all these things:
+
+ * The version of `ld'. `ld' announces it if you start it with the
+ `--version' argument.
+
+ Without this, we will not know whether there is any point in
+ looking for the bug in the current version of `ld'.
+
+ * Any patches you may have applied to the `ld' source, including any
+ patches made to the `BFD' library.
+
+ * The type of machine you are using, and the operating system name
+ and version number.
+
+ * What compiler (and its version) was used to compile `ld'--e.g.
+ "`gcc-2.7'".
+
+ * The command arguments you gave the linker to link your example and
+ observe the bug. To guarantee you will not omit something
+ important, list them all. A copy of the Makefile (or the output
+ from make) is sufficient.
+
+ If we were to try to guess the arguments, we would probably guess
+ wrong and then we might not encounter the bug.
+
+ * A complete input file, or set of input files, that will reproduce
+ the bug. It is generally most helpful to send the actual object
+ files provided that they are reasonably small. Say no more than
+ 10K. For bigger files you can either make them available by FTP
+ or HTTP or else state that you are willing to send the object
+ file(s) to whomever requests them. (Note - your email will be
+ going to a mailing list, so we do not want to clog it up with
+ large attachments). But small attachments are best.
+
+ If the source files were assembled using `gas' or compiled using
+ `gcc', then it may be OK to send the source files rather than the
+ object files. In this case, be sure to say exactly what version of
+ `gas' or `gcc' was used to produce the object files. Also say how
+ `gas' or `gcc' were configured.
+
+ * A description of what behavior you observe that you believe is
+ incorrect. For example, "It gets a fatal signal."
+
+ Of course, if the bug is that `ld' gets a fatal signal, then we
+ will certainly notice it. But if the bug is incorrect output, we
+ might not notice unless it is glaringly wrong. You might as well
+ not give us a chance to make a mistake.
+
+ Even if the problem you experience is a fatal signal, you should
+ still say so explicitly. Suppose something strange is going on,
+ such as, your copy of `ld' is out of sync, or you have encountered
+ a bug in the C library on your system. (This has happened!) Your
+ copy might crash and ours would not. If you told us to expect a
+ crash, then when ours fails to crash, we would know that the bug
+ was not happening for us. If you had not told us to expect a
+ crash, then we would not be able to draw any conclusion from our
+ observations.
+
+ * If you wish to suggest changes to the `ld' source, send us context
+ diffs, as generated by `diff' with the `-u', `-c', or `-p' option.
+ Always send diffs from the old file to the new file. If you even
+ discuss something in the `ld' source, refer to it by context, not
+ by line number.
+
+ The line numbers in our development sources will not match those
+ in your sources. Your line numbers would convey no useful
+ information to us.
+
+ Here are some things that are not necessary:
+
+ * A description of the envelope of the bug.
+
+ Often people who encounter a bug spend a lot of time investigating
+ which changes to the input file will make the bug go away and which
+ changes will not affect it.
+
+ This is often time consuming and not very useful, because the way
+ we will find the bug is by running a single example under the
+ debugger with breakpoints, not by pure deduction from a series of
+ examples. We recommend that you save your time for something else.
+
+ Of course, if you can find a simpler example to report _instead_
+ of the original one, that is a convenience for us. Errors in the
+ output will be easier to spot, running under the debugger will take
+ less time, and so on.
+
+ However, simplification is not vital; if you do not want to do
+ this, report the bug anyway and send us the entire test case you
+ used.
+
+ * A patch for the bug.
+
+ A patch for the bug does help us if it is a good one. But do not
+ omit the necessary information, such as the test case, on the
+ assumption that a patch is all we need. We might see problems
+ with your patch and decide to fix the problem another way, or we
+ might not understand it at all.
+
+ Sometimes with a program as complicated as `ld' it is very hard to
+ construct an example that will make the program follow a certain
+ path through the code. If you do not send us the example, we will
+ not be able to construct one, so we will not be able to verify
+ that the bug is fixed.
+
+ And if we cannot understand what bug you are trying to fix, or why
+ your patch should be an improvement, we will not install it. A
+ test case will help us to understand.
+
+ * A guess about what the bug is or what it depends on.
+
+ Such guesses are usually wrong. Even we cannot guess right about
+ such things without first using the debugger to find the facts.
+
+
+File: ld.info, Node: MRI, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top
+
+Appendix A MRI Compatible Script Files
+**************************************
+
+To aid users making the transition to GNU `ld' from the MRI linker,
+`ld' can use MRI compatible linker scripts as an alternative to the
+more general-purpose linker scripting language described in *Note
+Scripts::. MRI compatible linker scripts have a much simpler command
+set than the scripting language otherwise used with `ld'. GNU `ld'
+supports the most commonly used MRI linker commands; these commands are
+described here.
+
+ In general, MRI scripts aren't of much use with the `a.out' object
+file format, since it only has three sections and MRI scripts lack some
+features to make use of them.
+
+ You can specify a file containing an MRI-compatible script using the
+`-c' command-line option.
+
+ Each command in an MRI-compatible script occupies its own line; each
+command line starts with the keyword that identifies the command (though
+blank lines are also allowed for punctuation). If a line of an
+MRI-compatible script begins with an unrecognized keyword, `ld' issues
+a warning message, but continues processing the script.
+
+ Lines beginning with `*' are comments.
+
+ You can write these commands using all upper-case letters, or all
+lower case; for example, `chip' is the same as `CHIP'. The following
+list shows only the upper-case form of each command.
+
+`ABSOLUTE SECNAME'
+`ABSOLUTE SECNAME, SECNAME, ... SECNAME'
+ Normally, `ld' includes in the output file all sections from all
+ the input files. However, in an MRI-compatible script, you can
+ use the `ABSOLUTE' command to restrict the sections that will be
+ present in your output program. If the `ABSOLUTE' command is used
+ at all in a script, then only the sections named explicitly in
+ `ABSOLUTE' commands will appear in the linker output. You can
+ still use other input sections (whatever you select on the command
+ line, or using `LOAD') to resolve addresses in the output file.
+
+`ALIAS OUT-SECNAME, IN-SECNAME'
+ Use this command to place the data from input section IN-SECNAME
+ in a section called OUT-SECNAME in the linker output file.
+
+ IN-SECNAME may be an integer.
+
+`ALIGN SECNAME = EXPRESSION'
+ Align the section called SECNAME to EXPRESSION. The EXPRESSION
+ should be a power of two.
+
+`BASE EXPRESSION'
+ Use the value of EXPRESSION as the lowest address (other than
+ absolute addresses) in the output file.
+
+`CHIP EXPRESSION'
+`CHIP EXPRESSION, EXPRESSION'
+ This command does nothing; it is accepted only for compatibility.
+
+`END'
+ This command does nothing whatever; it's only accepted for
+ compatibility.
+
+`FORMAT OUTPUT-FORMAT'
+ Similar to the `OUTPUT_FORMAT' command in the more general linker
+ language, but restricted to one of these output formats:
+
+ 1. S-records, if OUTPUT-FORMAT is `S'
+
+ 2. IEEE, if OUTPUT-FORMAT is `IEEE'
+
+ 3. COFF (the `coff-m68k' variant in BFD), if OUTPUT-FORMAT is
+ `COFF'
+
+`LIST ANYTHING...'
+ Print (to the standard output file) a link map, as produced by the
+ `ld' command-line option `-M'.
+
+ The keyword `LIST' may be followed by anything on the same line,
+ with no change in its effect.
+
+`LOAD FILENAME'
+`LOAD FILENAME, FILENAME, ... FILENAME'
+ Include one or more object file FILENAME in the link; this has the
+ same effect as specifying FILENAME directly on the `ld' command
+ line.
+
+`NAME OUTPUT-NAME'
+ OUTPUT-NAME is the name for the program produced by `ld'; the
+ MRI-compatible command `NAME' is equivalent to the command-line
+ option `-o' or the general script language command `OUTPUT'.
+
+`ORDER SECNAME, SECNAME, ... SECNAME'
+`ORDER SECNAME SECNAME SECNAME'
+ Normally, `ld' orders the sections in its output file in the order
+ in which they first appear in the input files. In an
+ MRI-compatible script, you can override this ordering with the
+ `ORDER' command. The sections you list with `ORDER' will appear
+ first in your output file, in the order specified.
+
+`PUBLIC NAME=EXPRESSION'
+`PUBLIC NAME,EXPRESSION'
+`PUBLIC NAME EXPRESSION'
+ Supply a value (EXPRESSION) for external symbol NAME used in the
+ linker input files.
+
+`SECT SECNAME, EXPRESSION'
+`SECT SECNAME=EXPRESSION'
+`SECT SECNAME EXPRESSION'
+ You can use any of these three forms of the `SECT' command to
+ specify the start address (EXPRESSION) for section SECNAME. If
+ you have more than one `SECT' statement for the same SECNAME, only
+ the _first_ sets the start address.
+
+
+File: ld.info, Node: GNU Free Documentation License, Next: LD Index, Prev: MRI, Up: Top
+
+Appendix B GNU Free Documentation License
+*****************************************
+
+ Version 1.1, March 2000
+
+ Copyright (C) 2000, 2003 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ written document "free" in the sense of freedom: to assure everyone
+ the effective freedom to copy and redistribute it, with or without
+ modifying it, either commercially or noncommercially. Secondarily,
+ this License preserves for the author and publisher a way to get
+ credit for their work, while not being considered responsible for
+ modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book.
+ We recommend this License principally for works whose purpose is
+ instruction or reference.
+
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work that contains a
+ notice placed by the copyright holder saying it can be distributed
+ under the terms of this License. The "Document", below, refers to
+ any such manual or work. Any member of the public is a licensee,
+ and is addressed as "you."
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter
+ section of the Document that deals exclusively with the
+ relationship of the publishers or authors of the Document to the
+ Document's overall subject (or to related matters) and contains
+ nothing that could fall directly within that overall subject.
+ (For example, if the Document is in part a textbook of
+ mathematics, a Secondary Section may not explain any mathematics.)
+ The relationship could be a matter of historical connection with
+ the subject or with related matters, or of legal, commercial,
+ philosophical, ethical or political position regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in
+ the notice that says that the Document is released under this
+ License.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, whose contents can be viewed and edited directly
+ and straightforwardly with generic text editors or (for images
+ composed of pixels) generic paint programs or (for drawings) some
+ widely available drawing editor, and that is suitable for input to
+ text formatters or for automatic translation to a variety of
+ formats suitable for input to text formatters. A copy made in an
+ otherwise Transparent file format whose markup has been designed
+ to thwart or discourage subsequent modification by readers is not
+ Transparent. A copy that is not "Transparent" is called "Opaque."
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and
+ standard-conforming simple HTML designed for human modification.
+ Opaque formats include PostScript, PDF, proprietary formats that
+ can be read and edited only by proprietary word processors, SGML
+ or XML for which the DTD and/or processing tools are not generally
+ available, and the machine-generated HTML produced by some word
+ processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow
+ the conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies of the Document numbering more than
+ 100, and the Document's license notice requires Cover Texts, you
+ must enclose the copies in covers that carry, clearly and legibly,
+ all these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the
+ title equally prominent and visible. You may add other material
+ on the covers in addition. Copying with changes limited to the
+ covers, as long as they preserve the title of the Document and
+ satisfy these conditions, can be treated as verbatim copying in
+ other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a
+ machine-readable Transparent copy along with each Opaque copy, or
+ state in or with each Opaque copy a publicly-accessible
+ computer-network location containing a complete Transparent copy
+ of the Document, free of added material, which the general
+ network-using public has access to download anonymously at no
+ charge using public-standard network protocols. If you use the
+ latter option, you must take reasonably prudent steps, when you
+ begin distribution of Opaque copies in quantity, to ensure that
+ this Transparent copy will remain thus accessible at the stated
+ location until at least one year after the last time you
+ distribute an Opaque copy (directly or through your agents or
+ retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of
+ copies, to give them a chance to provide you with an updated
+ version of the Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with
+ the Modified Version filling the role of the Document, thus
+ licensing distribution and modification of the Modified Version to
+ whoever possesses a copy of it. In addition, you must do these
+ things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of previous
+ versions (which should, if there were any, be listed in the
+ History section of the Document). You may use the same title
+ as a previous version if the original publisher of that version
+ gives permission.
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in the
+ Modified Version, together with at least five of the principal
+ authors of the Document (all of its principal authors, if it
+ has less than five).
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified Version
+ under the terms of this License, in the form shown in the
+ Addendum below.
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+ H. Include an unaltered copy of this License.
+ I. Preserve the section entitled "History", and its title, and add
+ to it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page.
+ If there is no section entitled "History" in the Document,
+ create one stating the title, year, authors, and publisher of
+ the Document as given on its Title Page, then add an item
+ describing the Modified Version as stated in the previous
+ sentence.
+ J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in the
+ "History" section. You may omit a network location for a work
+ that was published at least four years before the Document
+ itself, or if the original publisher of the version it refers
+ to gives permission.
+ K. In any section entitled "Acknowledgements" or "Dedications",
+ preserve the section's title, and preserve in the section all the
+ substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+ M. Delete any section entitled "Endorsements." Such a section
+ may not be included in the Modified Version.
+ N. Do not retitle any existing section as "Endorsements" or to
+ conflict in title with any Invariant Section.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option
+ designate some or all of these sections as invariant. To do this,
+ add their titles to the list of Invariant Sections in the Modified
+ Version's license notice. These titles must be distinct from any
+ other section titles.
+
+ You may add a section entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties-for example, statements of peer review or that the text has
+ been approved by an organization as the authoritative definition
+ of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end
+ of the list of Cover Texts in the Modified Version. Only one
+ passage of Front-Cover Text and one of Back-Cover Text may be
+ added by (or through arrangements made by) any one entity. If the
+ Document already includes a cover text for the same cover,
+ previously added by you or by arrangement made by the same entity
+ you are acting on behalf of, you may not add another; but you may
+ replace the old one, on explicit permission from the previous
+ publisher that added the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination
+ all of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections entitled
+ "History" in the various original documents, forming one section
+ entitled "History"; likewise combine any sections entitled
+ "Acknowledgements", and any sections entitled "Dedications." You
+ must delete all sections entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the
+ documents in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow
+ this License in all other respects regarding verbatim copying of
+ that document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of
+ a storage or distribution medium, does not as a whole count as a
+ Modified Version of the Document, provided no compilation
+ copyright is claimed for the compilation. Such a compilation is
+ called an "aggregate", and this License does not apply to the
+ other self-contained works thus compiled with the Document, on
+ account of their being thus compiled, if they are not themselves
+ derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one
+ quarter of the entire aggregate, the Document's Cover Texts may be
+ placed on covers that surround only the Document within the
+ aggregate. Otherwise they must appear on covers around the whole
+ aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License provided that you also include the
+ original English version of this License. In case of a
+ disagreement between the translation and the original English
+ version of this License, the original English version will prevail.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided for under this License. Any other
+ attempt to copy, modify, sublicense or distribute the Document is
+ void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses
+ terminated so long as such parties remain in full compliance.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ http://www.gnu.org/copyleft/.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If
+ the Document does not specify a version number of this License,
+ you may choose any version ever published (not as a draft) by the
+ Free Software Foundation.
+
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1
+ or any later version published by the Free Software Foundation;
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License."
+
+ If you have no Invariant Sections, write "with no Invariant Sections"
+instead of saying which ones are invariant. If you have no Front-Cover
+Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being
+LIST"; likewise for Back-Cover Texts.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+
+File: ld.info, Node: LD Index, Prev: GNU Free Documentation License, Up: Top
+
+LD Index
+********
+
+
+* Menu:
+
+* ": Symbols. (line 6)
+* -(: Options. (line 675)
+* --accept-unknown-input-arch: Options. (line 693)
+* --add-needed: Options. (line 717)
+* --add-stdcall-alias: Options. (line 1527)
+* --allow-multiple-definition: Options. (line 945)
+* --allow-shlib-undefined: Options. (line 951)
+* --architecture=ARCH: Options. (line 113)
+* --as-needed: Options. (line 703)
+* --auxiliary=NAME: Options. (line 235)
+* --bank-window: Options. (line 1926)
+* --base-file: Options. (line 1532)
+* --be8: ARM. (line 28)
+* --bss-plt: PowerPC ELF32. (line 16)
+* --build-id: Options. (line 1489)
+* --build-id=STYLE: Options. (line 1489)
+* --check-sections: Options. (line 799)
+* --cref: Options. (line 811)
+* --default-imported-symver: Options. (line 988)
+* --default-script=SCRIPT: Options. (line 520)
+* --default-symver: Options. (line 984)
+* --defsym=SYMBOL=EXP: Options. (line 839)
+* --demangle[=STYLE]: Options. (line 852)
+* --disable-auto-image-base: Options. (line 1701)
+* --disable-auto-import: Options. (line 1836)
+* --disable-long-section-names: Options. (line 1542)
+* --disable-new-dtags: Options. (line 1452)
+* --disable-runtime-pseudo-reloc: Options. (line 1849)
+* --disable-stdcall-fixup: Options. (line 1564)
+* --discard-all: Options. (line 566)
+* --discard-locals: Options. (line 570)
+* --dll: Options. (line 1537)
+* --dll-search-prefix: Options. (line 1707)
+* --dotsyms: PowerPC64 ELF64. (line 33)
+* --dynamic-linker=FILE: Options. (line 865)
+* --dynamic-list-cpp-new: Options. (line 791)
+* --dynamic-list-cpp-typeinfo: Options. (line 795)
+* --dynamic-list-data: Options. (line 788)
+* --dynamic-list=DYNAMIC-LIST-FILE: Options. (line 775)
+* --dynamicbase: Options. (line 1885)
+* --eh-frame-hdr: Options. (line 1448)
+* --emit-relocs: Options. (line 455)
+* --emit-stack-syms: SPU ELF. (line 46)
+* --emit-stub-syms <1>: PowerPC ELF32. (line 47)
+* --emit-stub-syms <2>: SPU ELF. (line 15)
+* --emit-stub-syms: PowerPC64 ELF64. (line 29)
+* --enable-auto-image-base: Options. (line 1693)
+* --enable-auto-import: Options. (line 1716)
+* --enable-extra-pe-debug: Options. (line 1854)
+* --enable-long-section-names: Options. (line 1542)
+* --enable-new-dtags: Options. (line 1452)
+* --enable-runtime-pseudo-reloc: Options. (line 1841)
+* --enable-stdcall-fixup: Options. (line 1564)
+* --entry=ENTRY: Options. (line 167)
+* --error-unresolved-symbols: Options. (line 1401)
+* --exclude-libs: Options. (line 177)
+* --exclude-modules-for-implib: Options. (line 188)
+* --exclude-symbols: Options. (line 1606)
+* --export-all-symbols: Options. (line 1582)
+* --export-dynamic: Options. (line 201)
+* --extra-overlay-stubs: SPU ELF. (line 19)
+* --fatal-warnings: Options. (line 872)
+* --file-alignment: Options. (line 1612)
+* --filter=NAME: Options. (line 256)
+* --fix-cortex-a8: i960. (line 39)
+* --fix-v4bx: ARM. (line 49)
+* --fix-v4bx-interworking: ARM. (line 62)
+* --force-dynamic: Options. (line 464)
+* --force-exe-suffix: Options. (line 877)
+* --forceinteg: Options. (line 1890)
+* --format=FORMAT: Options. (line 124)
+* --format=VERSION: TI COFF. (line 6)
+* --gc-sections: Options. (line 887)
+* --got: Options. (line 1939)
+* --got=TYPE: M68K. (line 6)
+* --gpsize=VALUE: Options. (line 289)
+* --hash-size=NUMBER: Options. (line 1461)
+* --hash-style=STYLE: Options. (line 1469)
+* --heap: Options. (line 1618)
+* --help: Options. (line 918)
+* --image-base: Options. (line 1625)
+* --just-symbols=FILE: Options. (line 487)
+* --kill-at: Options. (line 1634)
+* --large-address-aware: Options. (line 1639)
+* --library-path=DIR: Options. (line 348)
+* --library=NAMESPEC: Options. (line 315)
+* --local-store=lo:hi: SPU ELF. (line 24)
+* --major-image-version: Options. (line 1648)
+* --major-os-version: Options. (line 1653)
+* --major-subsystem-version: Options. (line 1657)
+* --minor-image-version: Options. (line 1662)
+* --minor-os-version: Options. (line 1667)
+* --minor-subsystem-version: Options. (line 1671)
+* --mri-script=MRI-CMDFILE: Options. (line 148)
+* --multi-subspace: HPPA ELF32. (line 6)
+* --nmagic: Options. (line 419)
+* --no-accept-unknown-input-arch: Options. (line 693)
+* --no-add-needed: Options. (line 717)
+* --no-allow-shlib-undefined: Options. (line 951)
+* --no-as-needed: Options. (line 703)
+* --no-bind: Options. (line 1904)
+* --no-check-sections: Options. (line 799)
+* --no-define-common: Options. (line 823)
+* --no-demangle: Options. (line 852)
+* --no-dotsyms: PowerPC64 ELF64. (line 33)
+* --no-enum-size-warning: ARM. (line 111)
+* --no-export-dynamic: Options. (line 201)
+* --no-fatal-warnings: Options. (line 872)
+* --no-fix-cortex-a8: i960. (line 39)
+* --no-gc-sections: Options. (line 887)
+* --no-isolation: Options. (line 1897)
+* --no-keep-memory: Options. (line 930)
+* --no-multi-toc: PowerPC64 ELF64. (line 74)
+* --no-omagic: Options. (line 433)
+* --no-opd-optimize: PowerPC64 ELF64. (line 48)
+* --no-overlays: SPU ELF. (line 9)
+* --no-print-gc-sections: Options. (line 909)
+* --no-relax: Xtensa. (line 56)
+* --no-seh: Options. (line 1900)
+* --no-tls-optimize <1>: PowerPC ELF32. (line 51)
+* --no-tls-optimize: PowerPC64 ELF64. (line 43)
+* --no-toc-optimize: PowerPC64 ELF64. (line 60)
+* --no-trampoline: Options. (line 1920)
+* --no-undefined: Options. (line 937)
+* --no-undefined-version: Options. (line 979)
+* --no-warn-mismatch: Options. (line 992)
+* --no-warn-search-mismatch: Options. (line 1001)
+* --no-wchar-size-warning: ARM. (line 118)
+* --no-whole-archive: Options. (line 1005)
+* --noinhibit-exec: Options. (line 1009)
+* --non-overlapping-opd: PowerPC64 ELF64. (line 54)
+* --nxcompat: Options. (line 1893)
+* --oformat=OUTPUT-FORMAT: Options. (line 1021)
+* --omagic: Options. (line 424)
+* --out-implib: Options. (line 1684)
+* --output-def: Options. (line 1676)
+* --output=OUTPUT: Options. (line 439)
+* --pic-executable: Options. (line 1034)
+* --pic-veneer: ARM. (line 124)
+* --plugin: SPU ELF. (line 6)
+* --print-gc-sections: Options. (line 909)
+* --print-map: Options. (line 382)
+* --reduce-memory-overheads: Options. (line 1475)
+* --relax: Options. (line 1050)
+* --relax on i960: i960. (line 31)
+* --relax on PowerPC: PowerPC ELF32. (line 6)
+* --relax on Xtensa: Xtensa. (line 27)
+* --relocatable: Options. (line 468)
+* --retain-symbols-file=FILENAME: Options. (line 1071)
+* --script=SCRIPT: Options. (line 511)
+* --sdata-got: PowerPC ELF32. (line 33)
+* --section-alignment: Options. (line 1859)
+* --section-start=SECTIONNAME=ORG: Options. (line 1227)
+* --secure-plt: PowerPC ELF32. (line 26)
+* --sort-common: Options. (line 1169)
+* --sort-section=alignment: Options. (line 1184)
+* --sort-section=name: Options. (line 1180)
+* --split-by-file: Options. (line 1188)
+* --split-by-reloc: Options. (line 1193)
+* --stack: Options. (line 1865)
+* --stack-analysis: SPU ELF. (line 29)
+* --stats: Options. (line 1206)
+* --strip-all: Options. (line 498)
+* --strip-debug: Options. (line 502)
+* --stub-group-size: PowerPC64 ELF64. (line 6)
+* --stub-group-size=N <1>: ARM. (line 129)
+* --stub-group-size=N: HPPA ELF32. (line 12)
+* --subsystem: Options. (line 1872)
+* --support-old-code: ARM. (line 6)
+* --sysroot=DIRECTORY: Options. (line 1210)
+* --target-help: Options. (line 922)
+* --target1-abs: ARM. (line 32)
+* --target1-rel: ARM. (line 32)
+* --target2=TYPE: ARM. (line 37)
+* --thumb-entry=ENTRY: ARM. (line 17)
+* --trace: Options. (line 507)
+* --trace-symbol=SYMBOL: Options. (line 576)
+* --traditional-format: Options. (line 1215)
+* --tsaware: Options. (line 1910)
+* --undefined=SYMBOL: Options. (line 533)
+* --unique[=SECTION]: Options. (line 551)
+* --unresolved-symbols: Options. (line 1246)
+* --use-blx: ARM. (line 74)
+* --use-nul-prefixed-import-tables: ARM. (line 23)
+* --verbose: Options. (line 1275)
+* --version: Options. (line 560)
+* --version-script=VERSION-SCRIPTFILE: Options. (line 1281)
+* --vfp11-denorm-fix: ARM. (line 83)
+* --warn-alternate-em: Options. (line 1393)
+* --warn-common: Options. (line 1292)
+* --warn-constructors: Options. (line 1360)
+* --warn-multiple-gp: Options. (line 1365)
+* --warn-once: Options. (line 1379)
+* --warn-section-align: Options. (line 1383)
+* --warn-shared-textrel: Options. (line 1390)
+* --warn-unresolved-symbols: Options. (line 1396)
+* --wdmdriver: Options. (line 1907)
+* --whole-archive: Options. (line 1405)
+* --wrap=SYMBOL: Options. (line 1419)
+* -A ARCH: Options. (line 112)
+* -a KEYWORD: Options. (line 105)
+* -assert KEYWORD: Options. (line 727)
+* -b FORMAT: Options. (line 124)
+* -Bdynamic: Options. (line 730)
+* -Bgroup: Options. (line 740)
+* -Bshareable: Options. (line 1162)
+* -Bstatic: Options. (line 747)
+* -Bsymbolic: Options. (line 762)
+* -Bsymbolic-functions: Options. (line 769)
+* -c MRI-CMDFILE: Options. (line 148)
+* -call_shared: Options. (line 730)
+* -d: Options. (line 158)
+* -dc: Options. (line 158)
+* -dn: Options. (line 747)
+* -dp: Options. (line 158)
+* -dT SCRIPT: Options. (line 520)
+* -dy: Options. (line 730)
+* -E: Options. (line 201)
+* -e ENTRY: Options. (line 167)
+* -EB: Options. (line 228)
+* -EL: Options. (line 231)
+* -F NAME: Options. (line 256)
+* -f NAME: Options. (line 235)
+* -fini=NAME: Options. (line 280)
+* -g: Options. (line 286)
+* -G VALUE: Options. (line 289)
+* -h NAME: Options. (line 297)
+* -i: Options. (line 306)
+* -IFILE: Options. (line 865)
+* -init=NAME: Options. (line 309)
+* -L DIR: Options. (line 348)
+* -l NAMESPEC: Options. (line 315)
+* -M: Options. (line 382)
+* -m EMULATION: Options. (line 372)
+* -Map=MAPFILE: Options. (line 926)
+* -N: Options. (line 424)
+* -n: Options. (line 419)
+* -non_shared: Options. (line 747)
+* -nostdlib: Options. (line 1015)
+* -O LEVEL: Options. (line 445)
+* -o OUTPUT: Options. (line 439)
+* -pie: Options. (line 1034)
+* -q: Options. (line 455)
+* -qmagic: Options. (line 1044)
+* -Qy: Options. (line 1047)
+* -r: Options. (line 468)
+* -R FILE: Options. (line 487)
+* -rpath-link=DIR: Options. (line 1107)
+* -rpath=DIR: Options. (line 1085)
+* -s: Options. (line 498)
+* -S: Options. (line 502)
+* -shared: Options. (line 1162)
+* -soname=NAME: Options. (line 297)
+* -static: Options. (line 747)
+* -t: Options. (line 507)
+* -T SCRIPT: Options. (line 511)
+* -Tbss=ORG: Options. (line 1236)
+* -Tdata=ORG: Options. (line 1236)
+* -Ttext-segment=ORG: Options. (line 1242)
+* -Ttext=ORG: Options. (line 1236)
+* -u SYMBOL: Options. (line 533)
+* -Ur: Options. (line 541)
+* -V: Options. (line 560)
+* -v: Options. (line 560)
+* -X: Options. (line 570)
+* -x: Options. (line 566)
+* -Y PATH: Options. (line 585)
+* -y SYMBOL: Options. (line 576)
+* -z defs: Options. (line 937)
+* -z KEYWORD: Options. (line 589)
+* -z muldefs: Options. (line 945)
+* .: Location Counter. (line 6)
+* /DISCARD/: Output Section Discarding.
+ (line 21)
+* :PHDR: Output Section Phdr.
+ (line 6)
+* =FILLEXP: Output Section Fill.
+ (line 6)
+* >REGION: Output Section Region.
+ (line 6)
+* [COMMON]: Input Section Common.
+ (line 29)
+* ABSOLUTE (MRI): MRI. (line 33)
+* absolute and relocatable symbols: Expression Section. (line 6)
+* absolute expressions: Expression Section. (line 6)
+* ABSOLUTE(EXP): Builtin Functions. (line 10)
+* ADDR(SECTION): Builtin Functions. (line 17)
+* address, section: Output Section Address.
+ (line 6)
+* ALIAS (MRI): MRI. (line 44)
+* ALIGN (MRI): MRI. (line 50)
+* align expression: Builtin Functions. (line 36)
+* align location counter: Builtin Functions. (line 36)
+* ALIGN(ALIGN): Builtin Functions. (line 36)
+* ALIGN(EXP,ALIGN): Builtin Functions. (line 36)
+* ALIGN(SECTION_ALIGN): Forced Output Alignment.
+ (line 6)
+* aligned common symbols: WIN32. (line 418)
+* ALIGNOF(SECTION): Builtin Functions. (line 62)
+* allocating memory: MEMORY. (line 6)
+* architecture: Miscellaneous Commands.
+ (line 72)
+* architectures: Options. (line 112)
+* archive files, from cmd line: Options. (line 315)
+* archive search path in linker script: File Commands. (line 74)
+* arithmetic: Expressions. (line 6)
+* arithmetic operators: Operators. (line 6)
+* ARM interworking support: ARM. (line 6)
+* AS_NEEDED(FILES): File Commands. (line 54)
+* ASSERT: Miscellaneous Commands.
+ (line 9)
+* assertion in linker script: Miscellaneous Commands.
+ (line 9)
+* assignment in scripts: Assignments. (line 6)
+* AT(LMA): Output Section LMA. (line 6)
+* AT>LMA_REGION: Output Section LMA. (line 6)
+* automatic data imports: WIN32. (line 185)
+* back end: BFD. (line 6)
+* BASE (MRI): MRI. (line 54)
+* BE8: ARM. (line 28)
+* BFD canonical format: Canonical format. (line 11)
+* BFD requirements: BFD. (line 16)
+* big-endian objects: Options. (line 228)
+* binary input format: Options. (line 124)
+* BLOCK(EXP): Builtin Functions. (line 75)
+* bug criteria: Bug Criteria. (line 6)
+* bug reports: Bug Reporting. (line 6)
+* bugs in ld: Reporting Bugs. (line 6)
+* BYTE(EXPRESSION): Output Section Data.
+ (line 6)
+* C++ constructors, arranging in link: Output Section Keywords.
+ (line 19)
+* CHIP (MRI): MRI. (line 58)
+* COLLECT_NO_DEMANGLE: Environment. (line 29)
+* combining symbols, warnings on: Options. (line 1292)
+* command files: Scripts. (line 6)
+* command line: Options. (line 6)
+* common allocation: Options. (line 158)
+* common allocation in linker script: Miscellaneous Commands.
+ (line 20)
+* common symbol placement: Input Section Common.
+ (line 6)
+* COMMONPAGESIZE: Symbolic Constants. (line 13)
+* compatibility, MRI: Options. (line 148)
+* CONSTANT: Symbolic Constants. (line 6)
+* constants in linker scripts: Constants. (line 6)
+* constraints on output sections: Output Section Constraint.
+ (line 6)
+* CONSTRUCTORS: Output Section Keywords.
+ (line 19)
+* constructors: Options. (line 541)
+* constructors, arranging in link: Output Section Keywords.
+ (line 19)
+* Cortex-A8 erratum workaround: i960. (line 39)
+* crash of linker: Bug Criteria. (line 9)
+* CREATE_OBJECT_SYMBOLS: Output Section Keywords.
+ (line 9)
+* creating a DEF file: WIN32. (line 152)
+* cross reference table: Options. (line 811)
+* cross references: Miscellaneous Commands.
+ (line 56)
+* current output location: Location Counter. (line 6)
+* data: Output Section Data.
+ (line 6)
+* DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE): Builtin Functions.
+ (line 80)
+* DATA_SEGMENT_END(EXP): Builtin Functions. (line 101)
+* DATA_SEGMENT_RELRO_END(OFFSET, EXP): Builtin Functions. (line 107)
+* dbx: Options. (line 1220)
+* DEF files, creating: Options. (line 1676)
+* default emulation: Environment. (line 21)
+* default input format: Environment. (line 9)
+* DEFINED(SYMBOL): Builtin Functions. (line 118)
+* deleting local symbols: Options. (line 566)
+* demangling, default: Environment. (line 29)
+* demangling, from command line: Options. (line 852)
+* direct linking to a dll: WIN32. (line 233)
+* discarding sections: Output Section Discarding.
+ (line 6)
+* discontinuous memory: MEMORY. (line 6)
+* DLLs, creating: Options. (line 1676)
+* DLLs, linking to: Options. (line 1707)
+* dot: Location Counter. (line 6)
+* dot inside sections: Location Counter. (line 36)
+* dot outside sections: Location Counter. (line 66)
+* dynamic linker, from command line: Options. (line 865)
+* dynamic symbol table: Options. (line 201)
+* ELF program headers: PHDRS. (line 6)
+* emulation: Options. (line 372)
+* emulation, default: Environment. (line 21)
+* END (MRI): MRI. (line 62)
+* endianness: Options. (line 228)
+* entry point: Entry Point. (line 6)
+* entry point, from command line: Options. (line 167)
+* entry point, thumb: ARM. (line 17)
+* ENTRY(SYMBOL): Entry Point. (line 6)
+* error on valid input: Bug Criteria. (line 12)
+* example of linker script: Simple Example. (line 6)
+* exporting DLL symbols: WIN32. (line 19)
+* expression evaluation order: Evaluation. (line 6)
+* expression sections: Expression Section. (line 6)
+* expression, absolute: Builtin Functions. (line 10)
+* expressions: Expressions. (line 6)
+* EXTERN: Miscellaneous Commands.
+ (line 13)
+* fatal signal: Bug Criteria. (line 9)
+* file name wildcard patterns: Input Section Wildcards.
+ (line 6)
+* FILEHDR: PHDRS. (line 61)
+* filename symbols: Output Section Keywords.
+ (line 9)
+* fill pattern, entire section: Output Section Fill.
+ (line 6)
+* FILL(EXPRESSION): Output Section Data.
+ (line 39)
+* finalization function: Options. (line 280)
+* first input file: File Commands. (line 82)
+* first instruction: Entry Point. (line 6)
+* FIX_V4BX: ARM. (line 49)
+* FIX_V4BX_INTERWORKING: ARM. (line 62)
+* FORCE_COMMON_ALLOCATION: Miscellaneous Commands.
+ (line 20)
+* forcing input section alignment: Forced Input Alignment.
+ (line 6)
+* forcing output section alignment: Forced Output Alignment.
+ (line 6)
+* forcing the creation of dynamic sections: Options. (line 464)
+* FORMAT (MRI): MRI. (line 66)
+* functions in expressions: Builtin Functions. (line 6)
+* garbage collection <1>: Options. (line 909)
+* garbage collection <2>: Input Section Keep. (line 6)
+* garbage collection: Options. (line 887)
+* generating optimized output: Options. (line 445)
+* GNU linker: Overview. (line 6)
+* GNUTARGET: Environment. (line 9)
+* GROUP(FILES): File Commands. (line 47)
+* grouping input files: File Commands. (line 47)
+* groups of archives: Options. (line 675)
+* H8/300 support: H8/300. (line 6)
+* header size: Builtin Functions. (line 183)
+* heap size: Options. (line 1618)
+* help: Options. (line 918)
+* holes: Location Counter. (line 12)
+* holes, filling: Output Section Data.
+ (line 39)
+* HPPA multiple sub-space stubs: HPPA ELF32. (line 6)
+* HPPA stub grouping: HPPA ELF32. (line 12)
+* i960 support: i960. (line 6)
+* image base: Options. (line 1625)
+* implicit linker scripts: Implicit Linker Scripts.
+ (line 6)
+* import libraries: WIN32. (line 10)
+* INCLUDE FILENAME: File Commands. (line 9)
+* including a linker script: File Commands. (line 9)
+* including an entire archive: Options. (line 1405)
+* incremental link: Options. (line 306)
+* INHIBIT_COMMON_ALLOCATION: Miscellaneous Commands.
+ (line 25)
+* initialization function: Options. (line 309)
+* initialized data in ROM: Output Section LMA. (line 26)
+* input file format in linker script: Format Commands. (line 35)
+* input filename symbols: Output Section Keywords.
+ (line 9)
+* input files in linker scripts: File Commands. (line 19)
+* input files, displaying: Options. (line 507)
+* input format: Options. (line 124)
+* input object files in linker scripts: File Commands. (line 19)
+* input section alignment: Forced Input Alignment.
+ (line 6)
+* input section basics: Input Section Basics.
+ (line 6)
+* input section wildcards: Input Section Wildcards.
+ (line 6)
+* input sections: Input Section. (line 6)
+* INPUT(FILES): File Commands. (line 19)
+* INSERT: Miscellaneous Commands.
+ (line 30)
+* insert user script into default script: Miscellaneous Commands.
+ (line 30)
+* integer notation: Constants. (line 6)
+* integer suffixes: Constants. (line 15)
+* internal object-file format: Canonical format. (line 11)
+* invalid input: Bug Criteria. (line 14)
+* K and M integer suffixes: Constants. (line 15)
+* KEEP: Input Section Keep. (line 6)
+* l =: MEMORY. (line 74)
+* lazy evaluation: Evaluation. (line 6)
+* ld bugs, reporting: Bug Reporting. (line 6)
+* LDEMULATION: Environment. (line 21)
+* len =: MEMORY. (line 74)
+* LENGTH =: MEMORY. (line 74)
+* LENGTH(MEMORY): Builtin Functions. (line 135)
+* library search path in linker script: File Commands. (line 74)
+* link map: Options. (line 382)
+* link-time runtime library search path: Options. (line 1107)
+* linker crash: Bug Criteria. (line 9)
+* linker script concepts: Basic Script Concepts.
+ (line 6)
+* linker script example: Simple Example. (line 6)
+* linker script file commands: File Commands. (line 6)
+* linker script format: Script Format. (line 6)
+* linker script input object files: File Commands. (line 19)
+* linker script simple commands: Simple Commands. (line 6)
+* linker scripts: Scripts. (line 6)
+* LIST (MRI): MRI. (line 77)
+* little-endian objects: Options. (line 231)
+* LOAD (MRI): MRI. (line 84)
+* load address: Output Section LMA. (line 6)
+* LOADADDR(SECTION): Builtin Functions. (line 138)
+* loading, preventing: Output Section Type.
+ (line 22)
+* local symbols, deleting: Options. (line 570)
+* location counter: Location Counter. (line 6)
+* LONG(EXPRESSION): Output Section Data.
+ (line 6)
+* M and K integer suffixes: Constants. (line 15)
+* M68HC11 and 68HC12 support: M68HC11/68HC12. (line 6)
+* machine architecture: Miscellaneous Commands.
+ (line 72)
+* machine dependencies: Machine Dependent. (line 6)
+* mapping input sections to output sections: Input Section. (line 6)
+* MAX: Builtin Functions. (line 143)
+* MAXPAGESIZE: Symbolic Constants. (line 10)
+* MEMORY: MEMORY. (line 6)
+* memory region attributes: MEMORY. (line 34)
+* memory regions: MEMORY. (line 6)
+* memory regions and sections: Output Section Region.
+ (line 6)
+* memory usage: Options. (line 930)
+* MIN: Builtin Functions. (line 146)
+* Motorola 68K GOT generation: M68K. (line 6)
+* MRI compatibility: MRI. (line 6)
+* MSP430 extra sections: MSP430. (line 11)
+* NAME (MRI): MRI. (line 90)
+* name, section: Output Section Name.
+ (line 6)
+* names: Symbols. (line 6)
+* naming the output file: Options. (line 439)
+* NEXT(EXP): Builtin Functions. (line 150)
+* NMAGIC: Options. (line 419)
+* NO_ENUM_SIZE_WARNING: ARM. (line 111)
+* NO_WCHAR_SIZE_WARNING: ARM. (line 118)
+* NOCROSSREFS(SECTIONS): Miscellaneous Commands.
+ (line 56)
+* NOLOAD: Output Section Type.
+ (line 22)
+* not enough room for program headers: Builtin Functions. (line 188)
+* o =: MEMORY. (line 69)
+* objdump -i: BFD. (line 6)
+* object file management: BFD. (line 6)
+* object files: Options. (line 29)
+* object formats available: BFD. (line 6)
+* object size: Options. (line 289)
+* OMAGIC: Options. (line 424)
+* ONLY_IF_RO: Output Section Constraint.
+ (line 6)
+* ONLY_IF_RW: Output Section Constraint.
+ (line 6)
+* opening object files: BFD outline. (line 6)
+* operators for arithmetic: Operators. (line 6)
+* options: Options. (line 6)
+* ORDER (MRI): MRI. (line 95)
+* org =: MEMORY. (line 69)
+* ORIGIN =: MEMORY. (line 69)
+* ORIGIN(MEMORY): Builtin Functions. (line 156)
+* orphan: Orphan Sections. (line 6)
+* output file after errors: Options. (line 1009)
+* output file format in linker script: Format Commands. (line 10)
+* output file name in linker script: File Commands. (line 64)
+* output section alignment: Forced Output Alignment.
+ (line 6)
+* output section attributes: Output Section Attributes.
+ (line 6)
+* output section data: Output Section Data.
+ (line 6)
+* OUTPUT(FILENAME): File Commands. (line 64)
+* OUTPUT_ARCH(BFDARCH): Miscellaneous Commands.
+ (line 72)
+* OUTPUT_FORMAT(BFDNAME): Format Commands. (line 10)
+* OVERLAY: Overlay Description.
+ (line 6)
+* overlays: Overlay Description.
+ (line 6)
+* partial link: Options. (line 468)
+* PE import table prefixing: ARM. (line 23)
+* PHDRS: PHDRS. (line 61)
+* PIC_VENEER: ARM. (line 124)
+* position independent executables: Options. (line 1036)
+* PowerPC ELF32 options: PowerPC ELF32. (line 16)
+* PowerPC GOT: PowerPC ELF32. (line 33)
+* PowerPC long branches: PowerPC ELF32. (line 6)
+* PowerPC PLT: PowerPC ELF32. (line 16)
+* PowerPC stub symbols: PowerPC ELF32. (line 47)
+* PowerPC TLS optimization: PowerPC ELF32. (line 51)
+* PowerPC64 dot symbols: PowerPC64 ELF64. (line 33)
+* PowerPC64 ELF64 options: PowerPC64 ELF64. (line 6)
+* PowerPC64 multi-TOC: PowerPC64 ELF64. (line 74)
+* PowerPC64 OPD optimization: PowerPC64 ELF64. (line 48)
+* PowerPC64 OPD spacing: PowerPC64 ELF64. (line 54)
+* PowerPC64 stub grouping: PowerPC64 ELF64. (line 6)
+* PowerPC64 stub symbols: PowerPC64 ELF64. (line 29)
+* PowerPC64 TLS optimization: PowerPC64 ELF64. (line 43)
+* PowerPC64 TOC optimization: PowerPC64 ELF64. (line 60)
+* precedence in expressions: Operators. (line 6)
+* prevent unnecessary loading: Output Section Type.
+ (line 22)
+* program headers: PHDRS. (line 6)
+* program headers and sections: Output Section Phdr.
+ (line 6)
+* program headers, not enough room: Builtin Functions. (line 188)
+* program segments: PHDRS. (line 6)
+* PROVIDE: PROVIDE. (line 6)
+* PROVIDE_HIDDEN: PROVIDE_HIDDEN. (line 6)
+* PUBLIC (MRI): MRI. (line 103)
+* QUAD(EXPRESSION): Output Section Data.
+ (line 6)
+* quoted symbol names: Symbols. (line 6)
+* read-only text: Options. (line 419)
+* read/write from cmd line: Options. (line 424)
+* region alias: REGION_ALIAS. (line 6)
+* region names: REGION_ALIAS. (line 6)
+* REGION_ALIAS(ALIAS, REGION): REGION_ALIAS. (line 6)
+* regions of memory: MEMORY. (line 6)
+* relative expressions: Expression Section. (line 6)
+* relaxing addressing modes: Options. (line 1050)
+* relaxing on H8/300: H8/300. (line 9)
+* relaxing on i960: i960. (line 31)
+* relaxing on M68HC11: M68HC11/68HC12. (line 12)
+* relaxing on Xtensa: Xtensa. (line 27)
+* relocatable and absolute symbols: Expression Section. (line 6)
+* relocatable output: Options. (line 468)
+* removing sections: Output Section Discarding.
+ (line 6)
+* reporting bugs in ld: Reporting Bugs. (line 6)
+* requirements for BFD: BFD. (line 16)
+* retain relocations in final executable: Options. (line 455)
+* retaining specified symbols: Options. (line 1071)
+* ROM initialized data: Output Section LMA. (line 26)
+* round up expression: Builtin Functions. (line 36)
+* round up location counter: Builtin Functions. (line 36)
+* runtime library name: Options. (line 297)
+* runtime library search path: Options. (line 1085)
+* runtime pseudo-relocation: WIN32. (line 211)
+* scaled integers: Constants. (line 15)
+* scommon section: Input Section Common.
+ (line 20)
+* script files: Options. (line 520)
+* scripts: Scripts. (line 6)
+* search directory, from cmd line: Options. (line 348)
+* search path in linker script: File Commands. (line 74)
+* SEARCH_DIR(PATH): File Commands. (line 74)
+* SECT (MRI): MRI. (line 109)
+* section address: Output Section Address.
+ (line 6)
+* section address in expression: Builtin Functions. (line 17)
+* section alignment: Builtin Functions. (line 62)
+* section alignment, warnings on: Options. (line 1383)
+* section data: Output Section Data.
+ (line 6)
+* section fill pattern: Output Section Fill.
+ (line 6)
+* section load address: Output Section LMA. (line 6)
+* section load address in expression: Builtin Functions. (line 138)
+* section name: Output Section Name.
+ (line 6)
+* section name wildcard patterns: Input Section Wildcards.
+ (line 6)
+* section size: Builtin Functions. (line 167)
+* section, assigning to memory region: Output Section Region.
+ (line 6)
+* section, assigning to program header: Output Section Phdr.
+ (line 6)
+* SECTIONS: SECTIONS. (line 6)
+* sections, discarding: Output Section Discarding.
+ (line 6)
+* segment origins, cmd line: Options. (line 1236)
+* SEGMENT_START(SEGMENT, DEFAULT): Builtin Functions. (line 159)
+* segments, ELF: PHDRS. (line 6)
+* shared libraries: Options. (line 1164)
+* SHORT(EXPRESSION): Output Section Data.
+ (line 6)
+* SIZEOF(SECTION): Builtin Functions. (line 167)
+* SIZEOF_HEADERS: Builtin Functions. (line 183)
+* small common symbols: Input Section Common.
+ (line 20)
+* SORT: Input Section Wildcards.
+ (line 58)
+* SORT_BY_ALIGNMENT: Input Section Wildcards.
+ (line 54)
+* SORT_BY_NAME: Input Section Wildcards.
+ (line 46)
+* SPU: SPU ELF. (line 29)
+* SPU ELF options: SPU ELF. (line 6)
+* SPU extra overlay stubs: SPU ELF. (line 19)
+* SPU local store size: SPU ELF. (line 24)
+* SPU overlay stub symbols: SPU ELF. (line 15)
+* SPU overlays: SPU ELF. (line 9)
+* SPU plugins: SPU ELF. (line 6)
+* SQUAD(EXPRESSION): Output Section Data.
+ (line 6)
+* stack size: Options. (line 1865)
+* standard Unix system: Options. (line 7)
+* start of execution: Entry Point. (line 6)
+* STARTUP(FILENAME): File Commands. (line 82)
+* strip all symbols: Options. (line 498)
+* strip debugger symbols: Options. (line 502)
+* stripping all but some symbols: Options. (line 1071)
+* STUB_GROUP_SIZE: ARM. (line 129)
+* SUBALIGN(SUBSECTION_ALIGN): Forced Input Alignment.
+ (line 6)
+* suffixes for integers: Constants. (line 15)
+* symbol defaults: Builtin Functions. (line 118)
+* symbol definition, scripts: Assignments. (line 6)
+* symbol names: Symbols. (line 6)
+* symbol tracing: Options. (line 576)
+* symbol versions: VERSION. (line 6)
+* symbol-only input: Options. (line 487)
+* symbolic constants: Symbolic Constants. (line 6)
+* symbols, from command line: Options. (line 839)
+* symbols, relocatable and absolute: Expression Section. (line 6)
+* symbols, retaining selectively: Options. (line 1071)
+* synthesizing linker: Options. (line 1050)
+* synthesizing on H8/300: H8/300. (line 14)
+* TARGET(BFDNAME): Format Commands. (line 35)
+* TARGET1: ARM. (line 32)
+* TARGET2: ARM. (line 37)
+* text segment origin, cmd line: Options. (line 1243)
+* thumb entry point: ARM. (line 17)
+* TI COFF versions: TI COFF. (line 6)
+* traditional format: Options. (line 1215)
+* trampoline generation on M68HC11: M68HC11/68HC12. (line 31)
+* trampoline generation on M68HC12: M68HC11/68HC12. (line 31)
+* unallocated address, next: Builtin Functions. (line 150)
+* undefined symbol: Options. (line 533)
+* undefined symbol in linker script: Miscellaneous Commands.
+ (line 13)
+* undefined symbols, warnings on: Options. (line 1379)
+* uninitialized data placement: Input Section Common.
+ (line 6)
+* unspecified memory: Output Section Data.
+ (line 39)
+* usage: Options. (line 918)
+* USE_BLX: ARM. (line 74)
+* using a DEF file: WIN32. (line 57)
+* using auto-export functionality: WIN32. (line 22)
+* Using decorations: WIN32. (line 156)
+* variables, defining: Assignments. (line 6)
+* verbose: Options. (line 1275)
+* version: Options. (line 560)
+* version script: VERSION. (line 6)
+* version script, symbol versions: Options. (line 1281)
+* VERSION {script text}: VERSION. (line 6)
+* versions of symbols: VERSION. (line 6)
+* VFP11_DENORM_FIX: ARM. (line 83)
+* warnings, on combining symbols: Options. (line 1292)
+* warnings, on section alignment: Options. (line 1383)
+* warnings, on undefined symbols: Options. (line 1379)
+* weak externals: WIN32. (line 401)
+* what is this?: Overview. (line 6)
+* wildcard file name patterns: Input Section Wildcards.
+ (line 6)
+* Xtensa options: Xtensa. (line 56)
+* Xtensa processors: Xtensa. (line 6)
+
+
+
+Tag Table:
+Node: Top759
+Node: Overview1542
+Node: Invocation2656
+Node: Options3064
+Node: Environment90607
+Node: Scripts92367
+Node: Basic Script Concepts94101
+Node: Script Format96808
+Node: Simple Example97671
+Node: Simple Commands100767
+Node: Entry Point101273
+Node: File Commands102032
+Node: Format Commands106033
+Node: REGION_ALIAS107989
+Node: Miscellaneous Commands112821
+Node: Assignments116197
+Node: Simple Assignments116688
+Node: PROVIDE118424
+Node: PROVIDE_HIDDEN119629
+Node: Source Code Reference119873
+Node: SECTIONS123453
+Node: Output Section Description125344
+Node: Output Section Name126431
+Node: Output Section Address127307
+Node: Input Section129027
+Node: Input Section Basics129828
+Node: Input Section Wildcards133046
+Node: Input Section Common137779
+Node: Input Section Keep139261
+Node: Input Section Example139751
+Node: Output Section Data140719
+Node: Output Section Keywords143496
+Node: Output Section Discarding147065
+Node: Output Section Attributes148246
+Node: Output Section Type149347
+Node: Output Section LMA150501
+Node: Forced Output Alignment153014
+Node: Forced Input Alignment153282
+Node: Output Section Constraint153671
+Node: Output Section Region154099
+Node: Output Section Phdr154532
+Node: Output Section Fill155196
+Node: Overlay Description156338
+Node: MEMORY160641
+Node: PHDRS164974
+Node: VERSION170013
+Node: Expressions178088
+Node: Constants179017
+Node: Symbolic Constants179892
+Node: Symbols180443
+Node: Orphan Sections181190
+Node: Location Counter182354
+Node: Operators186790
+Node: Evaluation187712
+Node: Expression Section189076
+Node: Builtin Functions190565
+Node: Implicit Linker Scripts198532
+Node: Machine Dependent199307
+Node: H8/300200323
+Node: i960201948
+Node: M68HC11/68HC12204049
+Node: ARM205503
+Node: HPPA ELF32213015
+Node: M68K214638
+Node: MMIX215547
+Node: MSP430216712
+Node: PowerPC ELF32217761
+Node: PowerPC64 ELF64220597
+Node: SPU ELF225013
+Node: TI COFF227645
+Node: WIN32228171
+Node: Xtensa247895
+Node: BFD251017
+Node: BFD outline252472
+Node: BFD information loss253758
+Node: Canonical format256275
+Node: Reporting Bugs260632
+Node: Bug Criteria261326
+Node: Bug Reporting262025
+Node: MRI269064
+Node: GNU Free Documentation License273707
+Node: LD Index293424
+
+End Tag Table
diff --git a/ld/ldgram.c b/ld/ldgram.c
new file mode 100644
index 0000000..7219b2a
--- /dev/null
+++ b/ld/ldgram.c
@@ -0,0 +1,4495 @@
+/* A Bison parser, made by GNU Bison 2.3. */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Bison version. */
+#define YYBISON_VERSION "2.3"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Using locations. */
+#define YYLSP_NEEDED 0
+
+
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ INT = 258,
+ NAME = 259,
+ LNAME = 260,
+ OREQ = 261,
+ ANDEQ = 262,
+ RSHIFTEQ = 263,
+ LSHIFTEQ = 264,
+ DIVEQ = 265,
+ MULTEQ = 266,
+ MINUSEQ = 267,
+ PLUSEQ = 268,
+ OROR = 269,
+ ANDAND = 270,
+ NE = 271,
+ EQ = 272,
+ GE = 273,
+ LE = 274,
+ RSHIFT = 275,
+ LSHIFT = 276,
+ UNARY = 277,
+ END = 278,
+ ALIGN_K = 279,
+ BLOCK = 280,
+ BIND = 281,
+ QUAD = 282,
+ SQUAD = 283,
+ LONG = 284,
+ SHORT = 285,
+ BYTE = 286,
+ SECTIONS = 287,
+ PHDRS = 288,
+ INSERT_K = 289,
+ AFTER = 290,
+ BEFORE = 291,
+ DATA_SEGMENT_ALIGN = 292,
+ DATA_SEGMENT_RELRO_END = 293,
+ DATA_SEGMENT_END = 294,
+ SORT_BY_NAME = 295,
+ SORT_BY_ALIGNMENT = 296,
+ SIZEOF_HEADERS = 297,
+ OUTPUT_FORMAT = 298,
+ FORCE_COMMON_ALLOCATION = 299,
+ OUTPUT_ARCH = 300,
+ INHIBIT_COMMON_ALLOCATION = 301,
+ SEGMENT_START = 302,
+ INCLUDE = 303,
+ MEMORY = 304,
+ REGION_ALIAS = 305,
+ NOLOAD = 306,
+ DSECT = 307,
+ COPY = 308,
+ INFO = 309,
+ OVERLAY = 310,
+ DEFINED = 311,
+ TARGET_K = 312,
+ SEARCH_DIR = 313,
+ MAP = 314,
+ ENTRY = 315,
+ NEXT = 316,
+ SIZEOF = 317,
+ ALIGNOF = 318,
+ ADDR = 319,
+ LOADADDR = 320,
+ MAX_K = 321,
+ MIN_K = 322,
+ STARTUP = 323,
+ HLL = 324,
+ SYSLIB = 325,
+ FLOAT = 326,
+ NOFLOAT = 327,
+ NOCROSSREFS = 328,
+ ORIGIN = 329,
+ FILL = 330,
+ LENGTH = 331,
+ CREATE_OBJECT_SYMBOLS = 332,
+ INPUT = 333,
+ GROUP = 334,
+ OUTPUT = 335,
+ CONSTRUCTORS = 336,
+ ALIGNMOD = 337,
+ AT = 338,
+ SUBALIGN = 339,
+ PROVIDE = 340,
+ PROVIDE_HIDDEN = 341,
+ AS_NEEDED = 342,
+ CHIP = 343,
+ LIST = 344,
+ SECT = 345,
+ ABSOLUTE = 346,
+ LOAD = 347,
+ NEWLINE = 348,
+ ENDWORD = 349,
+ ORDER = 350,
+ NAMEWORD = 351,
+ ASSERT_K = 352,
+ FORMAT = 353,
+ PUBLIC = 354,
+ DEFSYMEND = 355,
+ BASE = 356,
+ ALIAS = 357,
+ TRUNCATE = 358,
+ REL = 359,
+ INPUT_SCRIPT = 360,
+ INPUT_MRI_SCRIPT = 361,
+ INPUT_DEFSYM = 362,
+ CASE = 363,
+ EXTERN = 364,
+ START = 365,
+ VERS_TAG = 366,
+ VERS_IDENTIFIER = 367,
+ GLOBAL = 368,
+ LOCAL = 369,
+ VERSIONK = 370,
+ INPUT_VERSION_SCRIPT = 371,
+ KEEP = 372,
+ ONLY_IF_RO = 373,
+ ONLY_IF_RW = 374,
+ SPECIAL = 375,
+ EXCLUDE_FILE = 376,
+ CONSTANT = 377,
+ INPUT_DYNAMIC_LIST = 378
+ };
+#endif
+/* Tokens. */
+#define INT 258
+#define NAME 259
+#define LNAME 260
+#define OREQ 261
+#define ANDEQ 262
+#define RSHIFTEQ 263
+#define LSHIFTEQ 264
+#define DIVEQ 265
+#define MULTEQ 266
+#define MINUSEQ 267
+#define PLUSEQ 268
+#define OROR 269
+#define ANDAND 270
+#define NE 271
+#define EQ 272
+#define GE 273
+#define LE 274
+#define RSHIFT 275
+#define LSHIFT 276
+#define UNARY 277
+#define END 278
+#define ALIGN_K 279
+#define BLOCK 280
+#define BIND 281
+#define QUAD 282
+#define SQUAD 283
+#define LONG 284
+#define SHORT 285
+#define BYTE 286
+#define SECTIONS 287
+#define PHDRS 288
+#define INSERT_K 289
+#define AFTER 290
+#define BEFORE 291
+#define DATA_SEGMENT_ALIGN 292
+#define DATA_SEGMENT_RELRO_END 293
+#define DATA_SEGMENT_END 294
+#define SORT_BY_NAME 295
+#define SORT_BY_ALIGNMENT 296
+#define SIZEOF_HEADERS 297
+#define OUTPUT_FORMAT 298
+#define FORCE_COMMON_ALLOCATION 299
+#define OUTPUT_ARCH 300
+#define INHIBIT_COMMON_ALLOCATION 301
+#define SEGMENT_START 302
+#define INCLUDE 303
+#define MEMORY 304
+#define REGION_ALIAS 305
+#define NOLOAD 306
+#define DSECT 307
+#define COPY 308
+#define INFO 309
+#define OVERLAY 310
+#define DEFINED 311
+#define TARGET_K 312
+#define SEARCH_DIR 313
+#define MAP 314
+#define ENTRY 315
+#define NEXT 316
+#define SIZEOF 317
+#define ALIGNOF 318
+#define ADDR 319
+#define LOADADDR 320
+#define MAX_K 321
+#define MIN_K 322
+#define STARTUP 323
+#define HLL 324
+#define SYSLIB 325
+#define FLOAT 326
+#define NOFLOAT 327
+#define NOCROSSREFS 328
+#define ORIGIN 329
+#define FILL 330
+#define LENGTH 331
+#define CREATE_OBJECT_SYMBOLS 332
+#define INPUT 333
+#define GROUP 334
+#define OUTPUT 335
+#define CONSTRUCTORS 336
+#define ALIGNMOD 337
+#define AT 338
+#define SUBALIGN 339
+#define PROVIDE 340
+#define PROVIDE_HIDDEN 341
+#define AS_NEEDED 342
+#define CHIP 343
+#define LIST 344
+#define SECT 345
+#define ABSOLUTE 346
+#define LOAD 347
+#define NEWLINE 348
+#define ENDWORD 349
+#define ORDER 350
+#define NAMEWORD 351
+#define ASSERT_K 352
+#define FORMAT 353
+#define PUBLIC 354
+#define DEFSYMEND 355
+#define BASE 356
+#define ALIAS 357
+#define TRUNCATE 358
+#define REL 359
+#define INPUT_SCRIPT 360
+#define INPUT_MRI_SCRIPT 361
+#define INPUT_DEFSYM 362
+#define CASE 363
+#define EXTERN 364
+#define START 365
+#define VERS_TAG 366
+#define VERS_IDENTIFIER 367
+#define GLOBAL 368
+#define LOCAL 369
+#define VERSIONK 370
+#define INPUT_VERSION_SCRIPT 371
+#define KEEP 372
+#define ONLY_IF_RO 373
+#define ONLY_IF_RW 374
+#define SPECIAL 375
+#define EXCLUDE_FILE 376
+#define CONSTANT 377
+#define INPUT_DYNAMIC_LIST 378
+
+
+
+
+/* Copy the first part of user declarations. */
+#line 24 "ldgram.y"
+
+/*
+
+ */
+
+#define DONTDECLARE_MALLOC
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "ld.h"
+#include "ldexp.h"
+#include "ldver.h"
+#include "ldlang.h"
+#include "ldfile.h"
+#include "ldemul.h"
+#include "ldmisc.h"
+#include "ldmain.h"
+#include "mri.h"
+#include "ldctor.h"
+#include "ldlex.h"
+
+#ifndef YYDEBUG
+#define YYDEBUG 1
+#endif
+
+static enum section_type sectype;
+static lang_memory_region_type *region;
+
+bfd_boolean ldgram_had_keep = FALSE;
+char *ldgram_vers_current_lang = NULL;
+
+#define ERROR_NAME_MAX 20
+static char *error_names[ERROR_NAME_MAX];
+static int error_index;
+#define PUSH_ERROR(x) if (error_index < ERROR_NAME_MAX) error_names[error_index] = x; error_index++;
+#define POP_ERROR() error_index--;
+
+
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table. */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 62 "ldgram.y"
+{
+ bfd_vma integer;
+ struct big_int
+ {
+ bfd_vma integer;
+ char *str;
+ } bigint;
+ fill_type *fill;
+ char *name;
+ const char *cname;
+ struct wildcard_spec wildcard;
+ struct wildcard_list *wildcard_list;
+ struct name_list *name_list;
+ int token;
+ union etree_union *etree;
+ struct phdr_info
+ {
+ bfd_boolean filehdr;
+ bfd_boolean phdrs;
+ union etree_union *at;
+ union etree_union *flags;
+ } phdr;
+ struct lang_nocrossref *nocrossref;
+ struct lang_output_section_phdr_list *section_phdr;
+ struct bfd_elf_version_deps *deflist;
+ struct bfd_elf_version_expr *versyms;
+ struct bfd_elf_version_tree *versnode;
+}
+/* Line 193 of yacc.c. */
+#line 410 "ldgram.c"
+ YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations. */
+
+
+/* Line 216 of yacc.c. */
+#line 423 "ldgram.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+# if ENABLE_NLS
+# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_(msgid) dgettext ("bison-runtime", msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions. */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int i)
+#else
+static int
+YYID (i)
+ int i;
+#endif
+{
+ return i;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef _STDLIB_H
+# define _STDLIB_H 1
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined _STDLIB_H \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef _STDLIB_H
+# define _STDLIB_H 1
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yytype_int16 yyss;
+ YYSTYPE yyvs;
+ };
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack, Stack, yysize); \
+ Stack = &yyptr->Stack; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 17
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 1838
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 147
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 126
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 356
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 763
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 378
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const yytype_uint8 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 145, 2, 2, 2, 34, 21, 2,
+ 37, 142, 32, 30, 140, 31, 2, 33, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 16, 141,
+ 24, 6, 25, 15, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 143, 2, 144, 20, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 56, 19, 57, 146, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 7, 8, 9, 10, 11, 12, 13, 14, 17,
+ 18, 22, 23, 26, 27, 28, 29, 35, 36, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 52, 53, 54, 55, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
+ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+ 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
+ 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
+ 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
+ 131, 132, 133, 134, 135, 136, 137, 138, 139
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const yytype_uint16 yyprhs[] =
+{
+ 0, 0, 3, 6, 9, 12, 15, 18, 20, 21,
+ 26, 27, 30, 34, 35, 38, 43, 45, 47, 50,
+ 52, 57, 62, 66, 69, 74, 78, 83, 88, 93,
+ 98, 103, 106, 109, 112, 117, 122, 125, 128, 131,
+ 134, 135, 141, 144, 145, 149, 152, 153, 155, 159,
+ 161, 165, 166, 168, 172, 173, 176, 178, 181, 185,
+ 186, 189, 192, 193, 195, 197, 199, 201, 203, 205,
+ 207, 209, 211, 213, 218, 223, 228, 233, 242, 247,
+ 249, 251, 256, 257, 263, 268, 269, 275, 280, 285,
+ 289, 293, 300, 302, 306, 309, 311, 315, 318, 319,
+ 325, 326, 334, 335, 342, 347, 350, 353, 354, 359,
+ 362, 363, 371, 373, 375, 377, 379, 385, 390, 395,
+ 403, 411, 419, 427, 436, 439, 441, 445, 447, 449,
+ 453, 458, 460, 461, 467, 470, 472, 474, 476, 481,
+ 483, 488, 493, 494, 503, 504, 510, 513, 515, 516,
+ 518, 520, 522, 524, 526, 528, 530, 533, 534, 536,
+ 538, 540, 542, 544, 546, 548, 550, 552, 554, 558,
+ 562, 569, 576, 578, 579, 584, 586, 587, 591, 593,
+ 594, 602, 603, 609, 613, 617, 618, 622, 624, 627,
+ 629, 632, 637, 642, 646, 650, 652, 657, 661, 662,
+ 664, 666, 667, 670, 674, 675, 678, 681, 685, 690,
+ 693, 696, 699, 703, 707, 711, 715, 719, 723, 727,
+ 731, 735, 739, 743, 747, 751, 755, 759, 763, 769,
+ 773, 777, 782, 784, 786, 791, 796, 801, 806, 811,
+ 816, 821, 828, 835, 842, 847, 854, 859, 861, 868,
+ 875, 882, 887, 892, 896, 897, 902, 903, 908, 909,
+ 914, 915, 917, 919, 921, 922, 923, 924, 925, 926,
+ 927, 947, 948, 949, 950, 951, 952, 971, 972, 973,
+ 981, 982, 988, 990, 992, 994, 996, 998, 1002, 1003,
+ 1006, 1010, 1013, 1020, 1031, 1034, 1036, 1037, 1039, 1042,
+ 1043, 1044, 1048, 1049, 1050, 1051, 1052, 1064, 1069, 1070,
+ 1073, 1074, 1075, 1082, 1084, 1085, 1089, 1095, 1096, 1100,
+ 1101, 1104, 1106, 1109, 1114, 1117, 1118, 1121, 1122, 1128,
+ 1130, 1133, 1138, 1144, 1151, 1153, 1156, 1157, 1160, 1165,
+ 1170, 1179, 1181, 1183, 1187, 1191, 1192, 1202, 1203, 1211,
+ 1213, 1217, 1219, 1223, 1225, 1229, 1230
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yytype_int16 yyrhs[] =
+{
+ 148, 0, -1, 121, 164, -1, 122, 152, -1, 132,
+ 261, -1, 139, 256, -1, 123, 150, -1, 4, -1,
+ -1, 151, 4, 6, 217, -1, -1, 153, 154, -1,
+ 154, 155, 109, -1, -1, 104, 217, -1, 104, 217,
+ 140, 217, -1, 4, -1, 105, -1, 111, 157, -1,
+ 110, -1, 115, 4, 6, 217, -1, 115, 4, 140,
+ 217, -1, 115, 4, 217, -1, 114, 4, -1, 106,
+ 4, 140, 217, -1, 106, 4, 217, -1, 106, 4,
+ 6, 217, -1, 38, 4, 6, 217, -1, 38, 4,
+ 140, 217, -1, 98, 4, 6, 217, -1, 98, 4,
+ 140, 217, -1, 107, 159, -1, 108, 158, -1, 112,
+ 4, -1, 118, 4, 140, 4, -1, 118, 4, 140,
+ 3, -1, 117, 217, -1, 119, 3, -1, 124, 160,
+ -1, 125, 161, -1, -1, 64, 149, 156, 154, 36,
+ -1, 126, 4, -1, -1, 157, 140, 4, -1, 157,
+ 4, -1, -1, 4, -1, 158, 140, 4, -1, 4,
+ -1, 159, 140, 4, -1, -1, 4, -1, 160, 140,
+ 4, -1, -1, 162, 163, -1, 4, -1, 163, 4,
+ -1, 163, 140, 4, -1, -1, 165, 166, -1, 166,
+ 167, -1, -1, 197, -1, 174, -1, 248, -1, 208,
+ -1, 209, -1, 211, -1, 213, -1, 176, -1, 263,
+ -1, 141, -1, 73, 37, 4, 142, -1, 74, 37,
+ 149, 142, -1, 96, 37, 149, 142, -1, 59, 37,
+ 4, 142, -1, 59, 37, 4, 140, 4, 140, 4,
+ 142, -1, 61, 37, 4, 142, -1, 60, -1, 62,
+ -1, 94, 37, 170, 142, -1, -1, 95, 168, 37,
+ 170, 142, -1, 75, 37, 149, 142, -1, -1, 64,
+ 149, 169, 166, 36, -1, 89, 37, 214, 142, -1,
+ 125, 37, 161, 142, -1, 48, 49, 4, -1, 48,
+ 50, 4, -1, 66, 37, 4, 140, 4, 142, -1,
+ 4, -1, 170, 140, 4, -1, 170, 4, -1, 5,
+ -1, 170, 140, 5, -1, 170, 5, -1, -1, 103,
+ 37, 171, 170, 142, -1, -1, 170, 140, 103, 37,
+ 172, 170, 142, -1, -1, 170, 103, 37, 173, 170,
+ 142, -1, 46, 56, 175, 57, -1, 175, 223, -1,
+ 175, 176, -1, -1, 76, 37, 4, 142, -1, 195,
+ 194, -1, -1, 113, 177, 37, 217, 140, 4, 142,
+ -1, 4, -1, 32, -1, 15, -1, 178, -1, 137,
+ 37, 180, 142, 178, -1, 54, 37, 178, 142, -1,
+ 55, 37, 178, 142, -1, 54, 37, 55, 37, 178,
+ 142, 142, -1, 54, 37, 54, 37, 178, 142, 142,
+ -1, 55, 37, 54, 37, 178, 142, 142, -1, 55,
+ 37, 55, 37, 178, 142, 142, -1, 54, 37, 137,
+ 37, 180, 142, 178, 142, -1, 180, 178, -1, 178,
+ -1, 181, 196, 179, -1, 179, -1, 4, -1, 143,
+ 181, 144, -1, 179, 37, 181, 142, -1, 182, -1,
+ -1, 133, 37, 184, 182, 142, -1, 195, 194, -1,
+ 93, -1, 141, -1, 97, -1, 54, 37, 97, 142,
+ -1, 183, -1, 190, 37, 215, 142, -1, 91, 37,
+ 191, 142, -1, -1, 113, 186, 37, 217, 140, 4,
+ 142, 194, -1, -1, 64, 149, 187, 189, 36, -1,
+ 188, 185, -1, 185, -1, -1, 188, -1, 41, -1,
+ 42, -1, 43, -1, 44, -1, 45, -1, 215, -1,
+ 6, 191, -1, -1, 14, -1, 13, -1, 12, -1,
+ 11, -1, 10, -1, 9, -1, 8, -1, 7, -1,
+ 141, -1, 140, -1, 4, 6, 215, -1, 4, 193,
+ 215, -1, 101, 37, 4, 6, 215, 142, -1, 102,
+ 37, 4, 6, 215, 142, -1, 140, -1, -1, 65,
+ 56, 198, 57, -1, 199, -1, -1, 199, 196, 200,
+ -1, 200, -1, -1, 4, 201, 205, 16, 203, 196,
+ 204, -1, -1, 64, 149, 202, 198, 36, -1, 90,
+ 6, 215, -1, 92, 6, 215, -1, -1, 37, 206,
+ 142, -1, 207, -1, 206, 207, -1, 4, -1, 145,
+ 4, -1, 84, 37, 149, 142, -1, 85, 37, 210,
+ 142, -1, 85, 37, 142, -1, 210, 196, 149, -1,
+ 149, -1, 86, 37, 212, 142, -1, 212, 196, 149,
+ -1, -1, 87, -1, 88, -1, -1, 4, 214, -1,
+ 4, 140, 214, -1, -1, 216, 217, -1, 31, 217,
+ -1, 37, 217, 142, -1, 77, 37, 217, 142, -1,
+ 145, 217, -1, 30, 217, -1, 146, 217, -1, 217,
+ 32, 217, -1, 217, 33, 217, -1, 217, 34, 217,
+ -1, 217, 30, 217, -1, 217, 31, 217, -1, 217,
+ 29, 217, -1, 217, 28, 217, -1, 217, 23, 217,
+ -1, 217, 22, 217, -1, 217, 27, 217, -1, 217,
+ 26, 217, -1, 217, 24, 217, -1, 217, 25, 217,
+ -1, 217, 21, 217, -1, 217, 20, 217, -1, 217,
+ 19, 217, -1, 217, 15, 217, 16, 217, -1, 217,
+ 18, 217, -1, 217, 17, 217, -1, 72, 37, 4,
+ 142, -1, 3, -1, 58, -1, 79, 37, 4, 142,
+ -1, 78, 37, 4, 142, -1, 80, 37, 4, 142,
+ -1, 81, 37, 4, 142, -1, 138, 37, 4, 142,
+ -1, 107, 37, 217, 142, -1, 38, 37, 217, 142,
+ -1, 38, 37, 217, 140, 217, 142, -1, 51, 37,
+ 217, 140, 217, 142, -1, 52, 37, 217, 140, 217,
+ 142, -1, 53, 37, 217, 142, -1, 63, 37, 4,
+ 140, 217, 142, -1, 39, 37, 217, 142, -1, 4,
+ -1, 82, 37, 217, 140, 217, 142, -1, 83, 37,
+ 217, 140, 217, 142, -1, 113, 37, 217, 140, 4,
+ 142, -1, 90, 37, 4, 142, -1, 92, 37, 4,
+ 142, -1, 99, 25, 4, -1, -1, 99, 37, 217,
+ 142, -1, -1, 38, 37, 217, 142, -1, -1, 100,
+ 37, 217, 142, -1, -1, 134, -1, 135, -1, 136,
+ -1, -1, -1, -1, -1, -1, -1, 4, 224, 239,
+ 219, 220, 221, 225, 222, 56, 226, 189, 57, 227,
+ 242, 218, 243, 192, 228, 196, -1, -1, -1, -1,
+ -1, -1, 71, 229, 240, 241, 219, 221, 230, 56,
+ 231, 244, 57, 232, 242, 218, 243, 192, 233, 196,
+ -1, -1, -1, 95, 234, 239, 235, 56, 175, 57,
+ -1, -1, 64, 149, 236, 175, 36, -1, 67, -1,
+ 68, -1, 69, -1, 70, -1, 71, -1, 37, 237,
+ 142, -1, -1, 37, 142, -1, 217, 238, 16, -1,
+ 238, 16, -1, 40, 37, 217, 142, 238, 16, -1,
+ 40, 37, 217, 142, 39, 37, 217, 142, 238, 16,
+ -1, 217, 16, -1, 16, -1, -1, 89, -1, 25,
+ 4, -1, -1, -1, 243, 16, 4, -1, -1, -1,
+ -1, -1, 244, 4, 245, 56, 189, 57, 246, 243,
+ 192, 247, 196, -1, 47, 56, 249, 57, -1, -1,
+ 249, 250, -1, -1, -1, 4, 251, 253, 254, 252,
+ 141, -1, 217, -1, -1, 4, 255, 254, -1, 99,
+ 37, 217, 142, 254, -1, -1, 37, 217, 142, -1,
+ -1, 257, 258, -1, 259, -1, 258, 259, -1, 56,
+ 260, 57, 141, -1, 269, 141, -1, -1, 262, 265,
+ -1, -1, 264, 131, 56, 265, 57, -1, 266, -1,
+ 265, 266, -1, 56, 268, 57, 141, -1, 127, 56,
+ 268, 57, 141, -1, 127, 56, 268, 57, 267, 141,
+ -1, 127, -1, 267, 127, -1, -1, 269, 141, -1,
+ 129, 16, 269, 141, -1, 130, 16, 269, 141, -1,
+ 129, 16, 269, 141, 130, 16, 269, 141, -1, 128,
+ -1, 4, -1, 269, 141, 128, -1, 269, 141, 4,
+ -1, -1, 269, 141, 125, 4, 56, 270, 269, 272,
+ 57, -1, -1, 125, 4, 56, 271, 269, 272, 57,
+ -1, 129, -1, 269, 141, 129, -1, 130, -1, 269,
+ 141, 130, -1, 125, -1, 269, 141, 125, -1, -1,
+ 141, -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const yytype_uint16 yyrline[] =
+{
+ 0, 162, 162, 163, 164, 165, 166, 170, 174, 174,
+ 184, 184, 197, 198, 202, 203, 204, 207, 210, 211,
+ 212, 214, 216, 218, 220, 222, 224, 226, 228, 230,
+ 232, 234, 235, 236, 238, 240, 242, 244, 246, 247,
+ 249, 248, 252, 254, 258, 259, 260, 264, 266, 270,
+ 272, 277, 278, 279, 284, 284, 289, 291, 293, 298,
+ 298, 304, 305, 310, 311, 312, 313, 314, 315, 316,
+ 317, 318, 319, 320, 322, 324, 326, 329, 331, 333,
+ 335, 337, 339, 338, 342, 345, 344, 348, 352, 353,
+ 355, 357, 362, 365, 368, 371, 374, 377, 381, 380,
+ 385, 384, 389, 388, 395, 399, 400, 401, 405, 407,
+ 408, 408, 416, 420, 424, 431, 437, 443, 449, 455,
+ 461, 467, 473, 479, 488, 497, 508, 517, 528, 536,
+ 540, 547, 549, 548, 555, 556, 560, 561, 566, 571,
+ 572, 577, 581, 581, 585, 584, 591, 592, 595, 597,
+ 601, 603, 605, 607, 609, 614, 621, 623, 627, 629,
+ 631, 633, 635, 637, 639, 641, 646, 646, 651, 655,
+ 663, 667, 675, 675, 679, 682, 682, 685, 686, 691,
+ 690, 696, 695, 702, 710, 718, 719, 723, 724, 728,
+ 730, 735, 740, 741, 746, 748, 754, 756, 758, 762,
+ 764, 770, 773, 782, 793, 793, 799, 801, 803, 805,
+ 807, 809, 812, 814, 816, 818, 820, 822, 824, 826,
+ 828, 830, 832, 834, 836, 838, 840, 842, 844, 846,
+ 848, 850, 852, 854, 857, 859, 861, 863, 865, 867,
+ 869, 871, 873, 875, 877, 879, 888, 890, 892, 894,
+ 896, 898, 900, 906, 907, 911, 912, 916, 917, 921,
+ 922, 926, 927, 928, 929, 932, 936, 939, 945, 947,
+ 932, 954, 956, 958, 963, 965, 953, 975, 977, 975,
+ 983, 982, 989, 990, 991, 992, 993, 997, 998, 999,
+ 1003, 1004, 1009, 1010, 1015, 1016, 1021, 1022, 1027, 1029,
+ 1034, 1037, 1050, 1054, 1059, 1061, 1052, 1069, 1072, 1074,
+ 1078, 1079, 1078, 1088, 1133, 1136, 1148, 1157, 1160, 1167,
+ 1167, 1179, 1180, 1184, 1188, 1197, 1197, 1211, 1211, 1221,
+ 1222, 1226, 1230, 1234, 1241, 1245, 1253, 1256, 1260, 1264,
+ 1268, 1275, 1279, 1283, 1287, 1292, 1291, 1305, 1304, 1314,
+ 1318, 1322, 1326, 1330, 1334, 1340, 1342
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "$end", "error", "$undefined", "INT", "NAME", "LNAME", "'='", "OREQ",
+ "ANDEQ", "RSHIFTEQ", "LSHIFTEQ", "DIVEQ", "MULTEQ", "MINUSEQ", "PLUSEQ",
+ "'?'", "':'", "OROR", "ANDAND", "'|'", "'^'", "'&'", "NE", "EQ", "'<'",
+ "'>'", "GE", "LE", "RSHIFT", "LSHIFT", "'+'", "'-'", "'*'", "'/'", "'%'",
+ "UNARY", "END", "'('", "ALIGN_K", "BLOCK", "BIND", "QUAD", "SQUAD",
+ "LONG", "SHORT", "BYTE", "SECTIONS", "PHDRS", "INSERT_K", "AFTER",
+ "BEFORE", "DATA_SEGMENT_ALIGN", "DATA_SEGMENT_RELRO_END",
+ "DATA_SEGMENT_END", "SORT_BY_NAME", "SORT_BY_ALIGNMENT", "'{'", "'}'",
+ "SIZEOF_HEADERS", "OUTPUT_FORMAT", "FORCE_COMMON_ALLOCATION",
+ "OUTPUT_ARCH", "INHIBIT_COMMON_ALLOCATION", "SEGMENT_START", "INCLUDE",
+ "MEMORY", "REGION_ALIAS", "NOLOAD", "DSECT", "COPY", "INFO", "OVERLAY",
+ "DEFINED", "TARGET_K", "SEARCH_DIR", "MAP", "ENTRY", "NEXT", "SIZEOF",
+ "ALIGNOF", "ADDR", "LOADADDR", "MAX_K", "MIN_K", "STARTUP", "HLL",
+ "SYSLIB", "FLOAT", "NOFLOAT", "NOCROSSREFS", "ORIGIN", "FILL", "LENGTH",
+ "CREATE_OBJECT_SYMBOLS", "INPUT", "GROUP", "OUTPUT", "CONSTRUCTORS",
+ "ALIGNMOD", "AT", "SUBALIGN", "PROVIDE", "PROVIDE_HIDDEN", "AS_NEEDED",
+ "CHIP", "LIST", "SECT", "ABSOLUTE", "LOAD", "NEWLINE", "ENDWORD",
+ "ORDER", "NAMEWORD", "ASSERT_K", "FORMAT", "PUBLIC", "DEFSYMEND", "BASE",
+ "ALIAS", "TRUNCATE", "REL", "INPUT_SCRIPT", "INPUT_MRI_SCRIPT",
+ "INPUT_DEFSYM", "CASE", "EXTERN", "START", "VERS_TAG", "VERS_IDENTIFIER",
+ "GLOBAL", "LOCAL", "VERSIONK", "INPUT_VERSION_SCRIPT", "KEEP",
+ "ONLY_IF_RO", "ONLY_IF_RW", "SPECIAL", "EXCLUDE_FILE", "CONSTANT",
+ "INPUT_DYNAMIC_LIST", "','", "';'", "')'", "'['", "']'", "'!'", "'~'",
+ "$accept", "file", "filename", "defsym_expr", "@1", "mri_script_file",
+ "@2", "mri_script_lines", "mri_script_command", "@3", "ordernamelist",
+ "mri_load_name_list", "mri_abs_name_list", "casesymlist",
+ "extern_name_list", "@4", "extern_name_list_body", "script_file", "@5",
+ "ifile_list", "ifile_p1", "@6", "@7", "input_list", "@8", "@9", "@10",
+ "sections", "sec_or_group_p1", "statement_anywhere", "@11",
+ "wildcard_name", "wildcard_spec", "exclude_name_list", "file_NAME_list",
+ "input_section_spec_no_keep", "input_section_spec", "@12", "statement",
+ "@13", "@14", "statement_list", "statement_list_opt", "length",
+ "fill_exp", "fill_opt", "assign_op", "end", "assignment", "opt_comma",
+ "memory", "memory_spec_list_opt", "memory_spec_list", "memory_spec",
+ "@15", "@16", "origin_spec", "length_spec", "attributes_opt",
+ "attributes_list", "attributes_string", "startup", "high_level_library",
+ "high_level_library_NAME_list", "low_level_library",
+ "low_level_library_NAME_list", "floating_point_support",
+ "nocrossref_list", "mustbe_exp", "@17", "exp", "memspec_at_opt",
+ "opt_at", "opt_align", "opt_subalign", "sect_constraint", "section",
+ "@18", "@19", "@20", "@21", "@22", "@23", "@24", "@25", "@26", "@27",
+ "@28", "@29", "@30", "type", "atype", "opt_exp_with_type",
+ "opt_exp_without_type", "opt_nocrossrefs", "memspec_opt", "phdr_opt",
+ "overlay_section", "@31", "@32", "@33", "phdrs", "phdr_list", "phdr",
+ "@34", "@35", "phdr_type", "phdr_qualifiers", "phdr_val",
+ "dynamic_list_file", "@36", "dynamic_list_nodes", "dynamic_list_node",
+ "dynamic_list_tag", "version_script_file", "@37", "version", "@38",
+ "vers_nodes", "vers_node", "verdep", "vers_tag", "vers_defns", "@39",
+ "@40", "opt_semicolon", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const yytype_uint16 yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 61, 261, 262, 263,
+ 264, 265, 266, 267, 268, 63, 58, 269, 270, 124,
+ 94, 38, 271, 272, 60, 62, 273, 274, 275, 276,
+ 43, 45, 42, 47, 37, 277, 278, 40, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
+ 291, 292, 293, 294, 295, 296, 123, 125, 297, 298,
+ 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
+ 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,
+ 319, 320, 321, 322, 323, 324, 325, 326, 327, 328,
+ 329, 330, 331, 332, 333, 334, 335, 336, 337, 338,
+ 339, 340, 341, 342, 343, 344, 345, 346, 347, 348,
+ 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
+ 359, 360, 361, 362, 363, 364, 365, 366, 367, 368,
+ 369, 370, 371, 372, 373, 374, 375, 376, 377, 378,
+ 44, 59, 41, 91, 93, 33, 126
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint16 yyr1[] =
+{
+ 0, 147, 148, 148, 148, 148, 148, 149, 151, 150,
+ 153, 152, 154, 154, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 156, 155, 155, 155, 157, 157, 157, 158, 158, 159,
+ 159, 160, 160, 160, 162, 161, 163, 163, 163, 165,
+ 164, 166, 166, 167, 167, 167, 167, 167, 167, 167,
+ 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
+ 167, 167, 168, 167, 167, 169, 167, 167, 167, 167,
+ 167, 167, 170, 170, 170, 170, 170, 170, 171, 170,
+ 172, 170, 173, 170, 174, 175, 175, 175, 176, 176,
+ 177, 176, 178, 178, 178, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 180, 180, 181, 181, 182, 182,
+ 182, 183, 184, 183, 185, 185, 185, 185, 185, 185,
+ 185, 185, 186, 185, 187, 185, 188, 188, 189, 189,
+ 190, 190, 190, 190, 190, 191, 192, 192, 193, 193,
+ 193, 193, 193, 193, 193, 193, 194, 194, 195, 195,
+ 195, 195, 196, 196, 197, 198, 198, 199, 199, 201,
+ 200, 202, 200, 203, 204, 205, 205, 206, 206, 207,
+ 207, 208, 209, 209, 210, 210, 211, 212, 212, 213,
+ 213, 214, 214, 214, 216, 215, 217, 217, 217, 217,
+ 217, 217, 217, 217, 217, 217, 217, 217, 217, 217,
+ 217, 217, 217, 217, 217, 217, 217, 217, 217, 217,
+ 217, 217, 217, 217, 217, 217, 217, 217, 217, 217,
+ 217, 217, 217, 217, 217, 217, 217, 217, 217, 217,
+ 217, 217, 217, 218, 218, 219, 219, 220, 220, 221,
+ 221, 222, 222, 222, 222, 224, 225, 226, 227, 228,
+ 223, 229, 230, 231, 232, 233, 223, 234, 235, 223,
+ 236, 223, 237, 237, 237, 237, 237, 238, 238, 238,
+ 239, 239, 239, 239, 240, 240, 241, 241, 242, 242,
+ 243, 243, 244, 245, 246, 247, 244, 248, 249, 249,
+ 251, 252, 250, 253, 254, 254, 254, 255, 255, 257,
+ 256, 258, 258, 259, 260, 262, 261, 264, 263, 265,
+ 265, 266, 266, 266, 267, 267, 268, 268, 268, 268,
+ 268, 269, 269, 269, 269, 270, 269, 271, 269, 269,
+ 269, 269, 269, 269, 269, 272, 272
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 1, 0, 4,
+ 0, 2, 3, 0, 2, 4, 1, 1, 2, 1,
+ 4, 4, 3, 2, 4, 3, 4, 4, 4, 4,
+ 4, 2, 2, 2, 4, 4, 2, 2, 2, 2,
+ 0, 5, 2, 0, 3, 2, 0, 1, 3, 1,
+ 3, 0, 1, 3, 0, 2, 1, 2, 3, 0,
+ 2, 2, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 4, 4, 4, 4, 8, 4, 1,
+ 1, 4, 0, 5, 4, 0, 5, 4, 4, 3,
+ 3, 6, 1, 3, 2, 1, 3, 2, 0, 5,
+ 0, 7, 0, 6, 4, 2, 2, 0, 4, 2,
+ 0, 7, 1, 1, 1, 1, 5, 4, 4, 7,
+ 7, 7, 7, 8, 2, 1, 3, 1, 1, 3,
+ 4, 1, 0, 5, 2, 1, 1, 1, 4, 1,
+ 4, 4, 0, 8, 0, 5, 2, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 2, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 3, 3,
+ 6, 6, 1, 0, 4, 1, 0, 3, 1, 0,
+ 7, 0, 5, 3, 3, 0, 3, 1, 2, 1,
+ 2, 4, 4, 3, 3, 1, 4, 3, 0, 1,
+ 1, 0, 2, 3, 0, 2, 2, 3, 4, 2,
+ 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 5, 3,
+ 3, 4, 1, 1, 4, 4, 4, 4, 4, 4,
+ 4, 6, 6, 6, 4, 6, 4, 1, 6, 6,
+ 6, 4, 4, 3, 0, 4, 0, 4, 0, 4,
+ 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 19, 0, 0, 0, 0, 0, 18, 0, 0, 7,
+ 0, 5, 1, 1, 1, 1, 1, 3, 0, 2,
+ 3, 2, 6, 10, 2, 1, 0, 1, 2, 0,
+ 0, 3, 0, 0, 0, 0, 11, 4, 0, 2,
+ 0, 0, 6, 1, 0, 3, 5, 0, 3, 0,
+ 2, 1, 2, 4, 2, 0, 2, 0, 5, 1,
+ 2, 4, 5, 6, 1, 2, 0, 2, 4, 4,
+ 8, 1, 1, 3, 3, 0, 9, 0, 7, 1,
+ 3, 1, 3, 1, 3, 0, 1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+ STATE-NUM when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint16 yydefact[] =
+{
+ 0, 59, 10, 8, 325, 319, 0, 2, 62, 3,
+ 13, 6, 0, 4, 0, 5, 0, 1, 60, 11,
+ 0, 336, 0, 326, 329, 0, 320, 321, 0, 0,
+ 0, 0, 0, 79, 0, 80, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 199, 200, 0, 0,
+ 82, 0, 0, 0, 110, 0, 72, 61, 64, 70,
+ 0, 63, 66, 67, 68, 69, 65, 71, 0, 16,
+ 0, 0, 0, 0, 17, 0, 0, 0, 19, 46,
+ 0, 0, 0, 0, 0, 0, 51, 54, 0, 0,
+ 0, 342, 353, 341, 349, 351, 0, 0, 336, 330,
+ 349, 351, 0, 0, 322, 204, 165, 164, 163, 162,
+ 161, 160, 159, 158, 204, 107, 308, 0, 0, 0,
+ 0, 7, 85, 176, 0, 0, 0, 0, 0, 0,
+ 0, 198, 201, 0, 0, 0, 0, 0, 0, 54,
+ 167, 166, 109, 0, 0, 40, 0, 232, 247, 0,
+ 0, 0, 0, 0, 0, 0, 0, 233, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 14, 0, 49, 31, 47, 32,
+ 18, 33, 23, 0, 36, 0, 37, 52, 38, 39,
+ 0, 42, 12, 9, 0, 0, 0, 0, 337, 0,
+ 0, 324, 168, 0, 169, 0, 0, 89, 90, 0,
+ 0, 62, 179, 0, 0, 173, 178, 0, 0, 0,
+ 0, 0, 0, 193, 195, 173, 173, 201, 0, 92,
+ 95, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 13, 0, 0, 210, 206, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 209, 211, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 25, 0, 0, 45, 0, 0, 0, 22, 0,
+ 0, 56, 55, 347, 0, 0, 331, 344, 354, 343,
+ 350, 352, 0, 323, 205, 265, 104, 0, 271, 277,
+ 106, 105, 310, 307, 309, 0, 76, 78, 327, 185,
+ 181, 174, 172, 0, 0, 73, 74, 84, 108, 191,
+ 192, 0, 196, 0, 201, 202, 87, 98, 94, 97,
+ 0, 0, 81, 0, 75, 204, 204, 0, 88, 0,
+ 27, 28, 43, 29, 30, 207, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 230, 229, 227, 226,
+ 225, 220, 219, 223, 224, 222, 221, 218, 217, 215,
+ 216, 212, 213, 214, 15, 26, 24, 50, 48, 44,
+ 20, 21, 35, 34, 53, 57, 0, 0, 338, 339,
+ 0, 334, 332, 0, 288, 280, 0, 288, 0, 0,
+ 86, 0, 0, 176, 177, 0, 194, 197, 203, 0,
+ 102, 93, 96, 0, 83, 0, 0, 0, 328, 41,
+ 0, 240, 246, 0, 0, 244, 0, 231, 208, 235,
+ 234, 236, 237, 0, 0, 251, 252, 239, 0, 238,
+ 0, 58, 355, 352, 345, 335, 333, 0, 0, 288,
+ 0, 256, 107, 295, 0, 296, 278, 313, 314, 0,
+ 189, 0, 0, 187, 0, 0, 91, 0, 0, 100,
+ 170, 171, 0, 0, 0, 0, 0, 0, 0, 0,
+ 228, 356, 0, 0, 0, 282, 283, 284, 285, 286,
+ 289, 0, 0, 0, 0, 291, 0, 258, 0, 294,
+ 297, 256, 0, 317, 0, 311, 0, 190, 186, 188,
+ 0, 173, 182, 99, 0, 0, 111, 241, 242, 243,
+ 245, 248, 249, 250, 348, 0, 355, 287, 0, 290,
+ 0, 0, 260, 281, 260, 107, 0, 314, 0, 0,
+ 77, 204, 0, 103, 0, 340, 0, 288, 0, 0,
+ 0, 266, 272, 0, 0, 315, 0, 312, 183, 0,
+ 180, 101, 346, 0, 0, 255, 0, 0, 264, 0,
+ 279, 318, 314, 204, 0, 292, 257, 0, 261, 262,
+ 263, 0, 273, 316, 184, 0, 259, 267, 302, 288,
+ 148, 0, 0, 128, 114, 113, 150, 151, 152, 153,
+ 154, 0, 0, 0, 0, 135, 137, 142, 0, 0,
+ 136, 0, 115, 0, 131, 139, 147, 149, 0, 0,
+ 0, 303, 274, 293, 0, 0, 144, 204, 0, 132,
+ 0, 112, 0, 127, 173, 0, 146, 268, 204, 134,
+ 0, 299, 0, 0, 0, 0, 0, 0, 0, 0,
+ 148, 0, 155, 0, 0, 125, 0, 0, 129, 0,
+ 173, 299, 0, 148, 0, 254, 0, 0, 138, 0,
+ 117, 0, 0, 118, 0, 141, 0, 112, 0, 0,
+ 124, 126, 130, 254, 140, 0, 298, 0, 300, 0,
+ 0, 0, 0, 0, 145, 0, 133, 116, 300, 304,
+ 0, 157, 0, 0, 0, 0, 0, 0, 157, 300,
+ 253, 204, 0, 275, 120, 119, 0, 121, 122, 0,
+ 269, 157, 156, 301, 173, 123, 143, 173, 305, 276,
+ 270, 173, 306
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int16 yydefgoto[] =
+{
+ -1, 6, 122, 11, 12, 9, 10, 19, 89, 242,
+ 180, 179, 177, 188, 189, 190, 302, 7, 8, 18,
+ 57, 134, 211, 232, 439, 545, 498, 58, 205, 320,
+ 138, 642, 643, 686, 664, 644, 645, 684, 646, 658,
+ 680, 647, 648, 649, 681, 743, 114, 142, 60, 689,
+ 61, 214, 215, 216, 329, 433, 541, 590, 432, 492,
+ 493, 62, 63, 225, 64, 226, 65, 228, 682, 203,
+ 247, 718, 527, 562, 581, 611, 321, 424, 598, 620,
+ 691, 757, 426, 599, 618, 671, 754, 427, 532, 482,
+ 521, 480, 481, 485, 531, 695, 731, 621, 670, 739,
+ 761, 66, 206, 324, 428, 569, 488, 535, 567, 15,
+ 16, 26, 27, 102, 13, 14, 67, 68, 23, 24,
+ 423, 96, 97, 514, 417, 512
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -621
+static const yytype_int16 yypact[] =
+{
+ 180, -621, -621, -621, -621, -621, 27, -621, -621, -621,
+ -621, -621, 38, -621, -21, -621, 23, -621, 824, 1581,
+ 111, 112, 75, -21, -621, 120, 23, -621, 623, 95,
+ 128, 170, 153, -621, 201, -621, 242, 195, 220, 223,
+ 226, 238, 245, 252, 280, 285, -621, -621, 286, 288,
+ -621, 290, 291, 299, -621, 315, -621, -621, -621, -621,
+ 129, -621, -621, -621, -621, -621, -621, -621, 206, -621,
+ 352, 242, 354, 680, -621, 355, 359, 360, -621, -621,
+ 361, 363, 366, 680, 367, 369, 372, -621, 374, 266,
+ 680, -621, 378, -621, 373, 376, 331, 253, 112, -621,
+ -621, -621, 338, 255, -621, -621, -621, -621, -621, -621,
+ -621, -621, -621, -621, -621, -621, -621, 402, 404, 405,
+ 406, -621, -621, 24, 409, 411, 242, 242, 412, 242,
+ 4, -621, 418, 20, 388, 242, 423, 424, 392, -621,
+ -621, -621, -621, 375, 33, -621, 41, -621, -621, 680,
+ 680, 680, 393, 399, 400, 401, 403, -621, 408, 413,
+ 414, 415, 417, 419, 420, 428, 429, 430, 432, 433,
+ 435, 438, 680, 680, 1400, 228, -621, 301, -621, 302,
+ 5, -621, -621, 381, 1756, 303, -621, -621, 307, -621,
+ 444, -621, -621, 1756, 421, 120, 120, 314, 217, 422,
+ 335, 217, -621, 680, -621, 322, 46, -621, -621, 10,
+ 336, -621, -621, 242, 425, -2, -621, 340, 341, 342,
+ 343, 347, 348, -621, -621, 87, 114, 22, 349, -621,
+ -621, 455, 32, 20, 356, 490, 491, 680, 357, -21,
+ 680, 680, -621, 680, 680, -621, -621, 833, 680, 680,
+ 680, 680, 680, 497, 498, 680, 503, 504, 505, 506,
+ 680, 680, 509, 510, 680, 680, 511, -621, -621, 680,
+ 680, 680, 680, 680, 680, 680, 680, 680, 680, 680,
+ 680, 680, 680, 680, 680, 680, 680, 680, 680, 680,
+ 680, 1756, 512, 513, -621, 514, 680, 680, 1756, 310,
+ 516, -621, 25, -621, 384, 387, -621, -621, 518, -621,
+ -621, -621, -12, -621, 1756, 623, -621, 242, -621, -621,
+ -621, -621, -621, -621, -621, 525, -621, -621, 897, 493,
+ -621, -621, -621, 24, 528, -621, -621, -621, -621, -621,
+ -621, 242, -621, 242, 418, -621, -621, -621, -621, -621,
+ 496, 39, -621, 86, -621, -621, -621, 1420, -621, 6,
+ 1756, 1756, 691, 1756, 1756, -621, 1022, 1042, 1440, 1460,
+ 1062, 394, 395, 1082, 396, 426, 427, 436, 1480, 1500,
+ 437, 440, 1102, 1524, 441, 1716, 1773, 1789, 1804, 1002,
+ 1643, 987, 987, 371, 371, 371, 371, 300, 300, 37,
+ 37, -621, -621, -621, 1756, 1756, 1756, -621, -621, -621,
+ 1756, 1756, -621, -621, -621, -621, 531, 120, 232, 217,
+ 480, -621, -621, -7, 536, -621, 608, 536, 680, 407,
+ -621, 3, 527, 24, -621, 442, -621, -621, -621, 20,
+ -621, -621, -621, 507, -621, 443, 448, 537, -621, -621,
+ 680, -621, -621, 680, 680, -621, 680, -621, -621, -621,
+ -621, -621, -621, 680, 680, -621, -621, -621, 542, -621,
+ 680, -621, 431, 532, -621, -621, -621, 15, 522, 1693,
+ 545, 461, -621, -621, 1736, 473, -621, 1756, 19, 560,
+ -621, 566, 2, -621, 481, 541, -621, 122, 20, -621,
+ -621, -621, 449, 1122, 1148, 1168, 1188, 1208, 1228, 450,
+ 1756, 217, 523, 120, 120, -621, -621, -621, -621, -621,
+ -621, 451, 680, 227, 570, -621, 558, 559, 410, -621,
+ -621, 461, 540, 561, 563, -621, 459, -621, -621, -621,
+ 596, 463, -621, -621, 132, 20, -621, -621, -621, -621,
+ -621, -621, -621, -621, -621, 465, 431, -621, 1248, -621,
+ 680, 567, 520, -621, 520, -621, 680, 19, 680, 466,
+ -621, -621, 517, -621, 136, 217, 564, 248, 1274, 680,
+ 585, -621, -621, 601, 1294, -621, 1314, -621, -621, 617,
+ -621, -621, -621, 588, 611, -621, 1334, 680, 214, 584,
+ -621, -621, 19, -621, 680, -621, -621, 1354, -621, -621,
+ -621, 586, -621, -621, -621, 1374, -621, -621, -621, 604,
+ 736, 47, 628, 544, -621, -621, -621, -621, -621, -621,
+ -621, 613, 614, 242, 615, -621, -621, -621, 616, 618,
+ -621, 284, -621, 619, -621, -621, -621, 736, 591, 620,
+ 129, -621, -621, -621, 57, 229, -621, -621, 625, -621,
+ 151, -621, 626, -621, -31, 284, -621, -621, -621, -621,
+ 598, 639, 630, 631, 533, 632, 534, 633, 636, 550,
+ 736, 551, -621, 680, 26, -621, 16, 289, -621, 284,
+ 150, 639, 552, 736, 674, 580, 151, 151, -621, 151,
+ -621, 151, 151, -621, 661, -621, 1544, 557, 562, 151,
+ -621, -621, -621, 580, -621, 644, -621, 681, -621, 565,
+ 571, 17, 574, 578, -621, 701, -621, -621, -621, -621,
+ 704, 58, 581, 582, 151, 583, 592, 593, 58, -621,
+ -621, -621, 705, -621, -621, -621, 594, -621, -621, 129,
+ -621, 58, -621, -621, 463, -621, -621, 463, -621, -621,
+ -621, 463, -621
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int16 yypgoto[] =
+{
+ -621, -621, -70, -621, -621, -621, -621, 470, -621, -621,
+ -621, -621, -621, -621, 587, -621, -621, -621, -621, 519,
+ -621, -621, -621, -221, -621, -621, -621, -621, -444, -13,
+ -621, 927, -540, 29, 72, 55, -621, -621, 94, -621,
+ -621, -621, -500, -621, 1, -508, -621, -617, -425, -212,
+ -621, 311, -621, 389, -621, -621, -621, -621, -621, -621,
+ 256, -621, -621, -621, -621, -621, -621, -205, -103, -621,
+ -73, 34, 218, -621, 181, -621, -621, -621, -621, -621,
+ -621, -621, -621, -621, -621, -621, -621, -621, -621, -621,
+ -621, -463, 323, -621, -621, 65, -620, -621, -621, -621,
+ -621, -621, -621, -621, -621, -621, -621, -527, -621, -621,
+ -621, -621, 738, -621, -621, -621, -621, -621, 526, -19,
+ -621, 668, -10, -621, -621, 211
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If zero, do what YYDEFACT says.
+ If YYTABLE_NINF, syntax error. */
+#define YYTABLE_NINF -328
+static const yytype_int16 yytable[] =
+{
+ 174, 145, 202, 333, 99, 59, 490, 490, 121, 294,
+ 184, 204, 353, 341, 343, 103, 524, 193, 147, 148,
+ 661, 661, 345, 533, 229, 230, 227, 17, 212, 415,
+ 707, 624, 624, 669, -175, 21, 348, 349, 528, 240,
+ 585, 624, 20, 441, 442, 149, 150, 243, 625, 625,
+ 322, 651, 151, 152, 153, -175, 219, 220, 625, 222,
+ 224, 661, 21, 448, 741, 234, 154, 155, 156, 285,
+ 286, 287, 624, 157, 742, 613, 245, 246, 158, 25,
+ 662, 632, 515, 516, 517, 518, 519, 159, 213, 625,
+ 348, 349, 160, 161, 162, 163, 164, 165, 166, 267,
+ 268, 663, 291, 323, 652, 167, 22, 168, 738, 332,
+ 298, 672, 673, 688, 594, 421, 91, 90, 534, 751,
+ 475, 583, 169, 231, 91, 663, 348, 349, 170, 422,
+ 314, 98, 756, 22, 476, 350, 348, 349, 332, 438,
+ 348, 349, 443, 330, 538, 295, 223, 491, 491, 711,
+ 325, 115, 326, 171, 674, 661, 622, 520, 709, 734,
+ 172, 173, 344, 639, 357, 416, 624, 360, 361, 641,
+ 363, 364, 351, 241, 352, 366, 367, 368, 369, 370,
+ 704, 244, 373, 625, 116, 304, 305, 378, 379, 350,
+ 119, 382, 383, 715, 675, 650, 385, 386, 387, 388,
+ 389, 390, 391, 392, 393, 394, 395, 396, 397, 398,
+ 399, 400, 401, 402, 403, 404, 405, 406, 497, 117,
+ 118, 307, 650, 410, 411, 350, 351, 332, 444, 340,
+ 750, 147, 148, 661, 289, 350, 307, 92, 120, 350,
+ 93, 94, 95, 758, 624, 92, 121, 425, 93, 100,
+ 101, 123, 445, 446, 332, 650, 342, 124, 149, 150,
+ 125, 625, 351, 126, 543, 151, 152, 153, 650, 140,
+ 141, 436, 351, 437, 573, 127, 351, 544, 591, 154,
+ 155, 156, 128, 677, 678, 523, 157, 593, 661, 129,
+ 332, 158, 712, 661, 515, 516, 517, 518, 519, 624,
+ 159, 1, 2, 3, 624, 160, 161, 162, 163, 164,
+ 165, 166, 4, 412, 413, 59, 625, 130, 167, 5,
+ 168, 625, 131, 132, 574, 133, 315, 135, 136, 572,
+ 283, 284, 285, 286, 287, 169, 137, 143, 662, 632,
+ 99, 170, 308, 672, 673, 309, 310, 311, 608, 609,
+ 610, 479, 139, 484, 479, 487, 144, 308, 146, 175,
+ 309, 310, 473, 176, 178, 181, 171, 182, 290, 520,
+ 183, 185, 186, 172, 173, 192, 187, 503, 191, 316,
+ 504, 505, 194, 506, 147, 148, 317, 296, 197, 195,
+ 507, 508, 196, 318, 198, 200, 201, 510, 42, 281,
+ 282, 283, 284, 285, 286, 287, 207, 472, 208, 209,
+ 210, 149, 150, 217, 315, 218, 221, 319, 151, 152,
+ 153, 639, 227, 52, 53, 233, 675, 235, 236, 237,
+ 248, 239, 154, 155, 156, 54, 249, 250, 251, 157,
+ 252, 292, 293, 299, 158, 253, 563, 300, 301, 558,
+ 254, 255, 256, 159, 257, 306, 258, 259, 160, 161,
+ 162, 163, 164, 165, 166, 260, 261, 262, 588, 263,
+ 264, 167, 265, 168, 317, 266, 313, 303, 327, 312,
+ 334, 318, 331, 335, 336, 337, 42, 578, 169, 338,
+ 339, 346, 347, 584, 170, 586, 355, 356, 354, 358,
+ 614, 371, 372, 555, 556, 319, 596, 374, 375, 376,
+ 377, 52, 53, 380, 381, 384, 407, 408, 409, 171,
+ 414, 297, 420, 54, 607, 418, 172, 173, 419, 429,
+ 431, 615, 435, 440, 456, 471, 474, 457, 459, 147,
+ 148, 502, 759, 494, 499, 760, 509, 489, 513, 762,
+ 105, 106, 107, 108, 109, 110, 111, 112, 113, 522,
+ 526, 525, 530, 656, 536, 692, 149, 150, 460, 461,
+ 537, 540, 511, 477, 152, 153, 478, 542, 462, 465,
+ 554, -112, 466, 469, 496, 500, 559, 154, 155, 156,
+ 501, 546, 553, 557, 157, 560, 565, 561, 566, 158,
+ 568, 570, 571, 332, 579, 315, 575, 587, 159, 589,
+ 706, 147, 148, 160, 161, 162, 163, 164, 165, 166,
+ 580, 592, 597, 603, 483, 604, 167, 605, 168, 105,
+ 106, 107, 108, 109, 110, 111, 112, 113, 149, 150,
+ 612, 523, 617, 169, 653, 151, 152, 153, 667, 170,
+ 654, 655, 657, 659, 693, 660, 665, 668, 600, 154,
+ 155, 156, 683, 687, 694, 317, 157, 696, 697, 699,
+ 701, 158, 318, 702, 171, 698, 700, 42, 716, 717,
+ 159, 172, 173, 147, 148, 160, 161, 162, 163, 164,
+ 165, 166, 703, 705, 714, 69, 319, 724, 167, -128,
+ 168, 729, 52, 53, 726, 737, 730, 732, 740, 753,
+ 149, 150, 362, 733, 54, 169, 735, 151, 152, 153,
+ 736, 170, 434, 744, 745, 747, 238, 449, 721, 70,
+ 328, 154, 155, 156, 748, 749, 755, 690, 157, 708,
+ 623, 666, 752, 158, 495, 582, 171, 728, 539, 564,
+ 486, 624, 159, 172, 173, 71, 713, 160, 161, 162,
+ 163, 164, 165, 166, 104, 359, 199, 576, 625, 0,
+ 167, 0, 168, 0, 0, 0, 0, 626, 627, 628,
+ 629, 630, 0, 0, 0, 0, 0, 169, 0, 72,
+ 631, 632, 0, 170, 0, 73, 74, 75, 76, 77,
+ 633, 78, 79, 80, 0, 81, 82, 0, 83, 84,
+ 85, 0, 0, 0, 0, 86, 87, 88, 171, 0,
+ 0, 0, 0, 0, 0, 172, 173, 634, 28, 635,
+ 0, 0, 0, 636, 0, 0, 0, 52, 53, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 269, 637,
+ 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 0, 638,
+ 29, 30, 31, 639, 0, 0, 0, 640, 0, 641,
+ 0, 0, 0, 32, 33, 34, 35, 0, 36, 37,
+ 38, 0, 0, 0, 0, 0, 0, 39, 40, 41,
+ 42, 28, 0, 0, 0, 0, 0, 0, 43, 44,
+ 45, 46, 47, 48, 0, 0, 0, 0, 49, 50,
+ 51, 0, 0, 0, 0, 52, 53, 0, 0, 0,
+ 0, 0, 0, 430, 0, 0, 0, 54, 0, 0,
+ 0, 0, 0, 29, 30, 31, 0, 0, 0, 55,
+ 0, 0, 0, 0, 0, -327, 32, 33, 34, 35,
+ 0, 36, 37, 38, 0, 56, 0, 0, 0, 0,
+ 39, 40, 41, 42, 0, 365, 0, 0, 0, 0,
+ 0, 43, 44, 45, 46, 47, 48, 0, 0, 0,
+ 0, 49, 50, 51, 0, 0, 0, 0, 52, 53,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 54, 277, 278, 279, 280, 281, 282, 283, 284, 285,
+ 286, 287, 55, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 269, 56, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 269, 0, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 269, 0, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 269, 0, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 269, 0, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 269, 0, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 0, 0, 0,
+ 0, 0, 450, 269, 451, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 269, 452, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 269, 455, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 269, 458, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 269, 467, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 269, 547, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 0, 0, 0, 0, 0, 0, 269,
+ 548, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 269,
+ 549, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 269,
+ 550, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 269,
+ 551, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 269,
+ 552, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 269,
+ 577, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 0,
+ 0, 0, 0, 0, 0, 269, 595, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 269, 601, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 269, 602, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 269, 606, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 269, 616, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 269, 619, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 0, 0, 0, 0, 269,
+ 288, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 269,
+ 447, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 0,
+ 453, 676, 679, 0, 0, 69, 0, 685, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 454, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 710, 676, 0, 0, 0, 0, 70,
+ 463, 0, 0, 719, 720, 0, 685, 0, 722, 723,
+ 0, 0, 0, 0, 0, 0, 727, 0, 0, 0,
+ 464, 0, 0, 0, 0, 71, 0, 0, 710, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 746, 0, 0, 468, 275, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 0, 72,
+ 0, 0, 0, 0, 725, 73, 74, 75, 76, 77,
+ -43, 78, 79, 80, 0, 81, 82, 0, 83, 84,
+ 85, 0, 0, 0, 0, 86, 87, 88, 269, 0,
+ 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 0, 0,
+ 523, 269, 470, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 269, 529, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 269, 0, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 272, 273,
+ 274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
+ 284, 285, 286, 287, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287
+};
+
+static const yytype_int16 yycheck[] =
+{
+ 73, 71, 105, 215, 23, 18, 4, 4, 4, 4,
+ 83, 114, 233, 225, 226, 25, 479, 90, 3, 4,
+ 4, 4, 227, 4, 4, 5, 4, 0, 4, 4,
+ 4, 15, 15, 650, 36, 56, 4, 5, 482, 6,
+ 567, 15, 4, 4, 5, 30, 31, 6, 32, 32,
+ 4, 4, 37, 38, 39, 57, 126, 127, 32, 129,
+ 130, 4, 56, 57, 6, 135, 51, 52, 53, 32,
+ 33, 34, 15, 58, 16, 602, 149, 150, 63, 56,
+ 54, 55, 67, 68, 69, 70, 71, 72, 64, 32,
+ 4, 5, 77, 78, 79, 80, 81, 82, 83, 172,
+ 173, 641, 175, 57, 57, 90, 127, 92, 728, 140,
+ 183, 54, 55, 144, 577, 127, 4, 6, 99, 739,
+ 127, 565, 107, 103, 4, 665, 4, 5, 113, 141,
+ 203, 56, 749, 127, 141, 103, 4, 5, 140, 344,
+ 4, 5, 103, 213, 142, 140, 142, 145, 145, 689,
+ 140, 56, 142, 138, 97, 4, 619, 142, 142, 142,
+ 145, 146, 140, 137, 237, 140, 15, 240, 241, 143,
+ 243, 244, 140, 140, 142, 248, 249, 250, 251, 252,
+ 680, 140, 255, 32, 56, 195, 196, 260, 261, 103,
+ 37, 264, 265, 693, 137, 620, 269, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 288, 289, 290, 439, 49,
+ 50, 4, 647, 296, 297, 103, 140, 140, 142, 142,
+ 738, 3, 4, 4, 6, 103, 4, 125, 37, 103,
+ 128, 129, 130, 751, 15, 125, 4, 317, 128, 129,
+ 130, 56, 355, 356, 140, 680, 142, 37, 30, 31,
+ 37, 32, 140, 37, 142, 37, 38, 39, 693, 140,
+ 141, 341, 140, 343, 142, 37, 140, 498, 142, 51,
+ 52, 53, 37, 54, 55, 37, 58, 39, 4, 37,
+ 140, 63, 142, 4, 67, 68, 69, 70, 71, 15,
+ 72, 121, 122, 123, 15, 77, 78, 79, 80, 81,
+ 82, 83, 132, 3, 4, 328, 32, 37, 90, 139,
+ 92, 32, 37, 37, 545, 37, 4, 37, 37, 541,
+ 30, 31, 32, 33, 34, 107, 37, 131, 54, 55,
+ 359, 113, 125, 54, 55, 128, 129, 130, 134, 135,
+ 136, 424, 37, 426, 427, 428, 4, 125, 4, 4,
+ 128, 129, 130, 4, 4, 4, 138, 4, 140, 142,
+ 4, 4, 3, 145, 146, 109, 4, 450, 4, 57,
+ 453, 454, 4, 456, 3, 4, 64, 6, 57, 16,
+ 463, 464, 16, 71, 141, 57, 141, 470, 76, 28,
+ 29, 30, 31, 32, 33, 34, 4, 417, 4, 4,
+ 4, 30, 31, 4, 4, 4, 4, 95, 37, 38,
+ 39, 137, 4, 101, 102, 37, 137, 4, 4, 37,
+ 37, 56, 51, 52, 53, 113, 37, 37, 37, 58,
+ 37, 140, 140, 140, 63, 37, 36, 140, 4, 522,
+ 37, 37, 37, 72, 37, 141, 37, 37, 77, 78,
+ 79, 80, 81, 82, 83, 37, 37, 37, 571, 37,
+ 37, 90, 37, 92, 64, 37, 141, 56, 142, 57,
+ 140, 71, 57, 142, 142, 142, 76, 560, 107, 142,
+ 142, 142, 37, 566, 113, 568, 6, 6, 142, 142,
+ 603, 4, 4, 513, 514, 95, 579, 4, 4, 4,
+ 4, 101, 102, 4, 4, 4, 4, 4, 4, 138,
+ 4, 140, 4, 113, 597, 141, 145, 146, 141, 4,
+ 37, 604, 4, 37, 140, 4, 56, 142, 142, 3,
+ 4, 4, 754, 16, 37, 757, 4, 140, 16, 761,
+ 6, 7, 8, 9, 10, 11, 12, 13, 14, 37,
+ 99, 16, 89, 633, 4, 668, 30, 31, 142, 142,
+ 4, 90, 141, 37, 38, 39, 40, 36, 142, 142,
+ 57, 37, 142, 142, 142, 142, 16, 51, 52, 53,
+ 142, 142, 142, 142, 58, 37, 56, 38, 37, 63,
+ 37, 142, 6, 140, 37, 4, 141, 141, 72, 92,
+ 683, 3, 4, 77, 78, 79, 80, 81, 82, 83,
+ 100, 57, 37, 6, 16, 37, 90, 16, 92, 6,
+ 7, 8, 9, 10, 11, 12, 13, 14, 30, 31,
+ 56, 37, 56, 107, 16, 37, 38, 39, 57, 113,
+ 37, 37, 37, 37, 56, 37, 37, 37, 57, 51,
+ 52, 53, 37, 37, 25, 64, 58, 37, 37, 37,
+ 37, 63, 71, 37, 138, 142, 142, 76, 4, 99,
+ 72, 145, 146, 3, 4, 77, 78, 79, 80, 81,
+ 82, 83, 142, 142, 142, 4, 95, 36, 90, 142,
+ 92, 57, 101, 102, 142, 4, 25, 142, 4, 4,
+ 30, 31, 242, 142, 113, 107, 142, 37, 38, 39,
+ 142, 113, 333, 142, 142, 142, 139, 36, 699, 38,
+ 211, 51, 52, 53, 142, 142, 142, 665, 58, 684,
+ 4, 647, 741, 63, 433, 564, 138, 713, 492, 531,
+ 427, 15, 72, 145, 146, 64, 691, 77, 78, 79,
+ 80, 81, 82, 83, 26, 239, 98, 556, 32, -1,
+ 90, -1, 92, -1, -1, -1, -1, 41, 42, 43,
+ 44, 45, -1, -1, -1, -1, -1, 107, -1, 98,
+ 54, 55, -1, 113, -1, 104, 105, 106, 107, 108,
+ 64, 110, 111, 112, -1, 114, 115, -1, 117, 118,
+ 119, -1, -1, -1, -1, 124, 125, 126, 138, -1,
+ -1, -1, -1, -1, -1, 145, 146, 91, 4, 93,
+ -1, -1, -1, 97, -1, -1, -1, 101, 102, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 15, 113,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, -1, 133,
+ 46, 47, 48, 137, -1, -1, -1, 141, -1, 143,
+ -1, -1, -1, 59, 60, 61, 62, -1, 64, 65,
+ 66, -1, -1, -1, -1, -1, -1, 73, 74, 75,
+ 76, 4, -1, -1, -1, -1, -1, -1, 84, 85,
+ 86, 87, 88, 89, -1, -1, -1, -1, 94, 95,
+ 96, -1, -1, -1, -1, 101, 102, -1, -1, -1,
+ -1, -1, -1, 36, -1, -1, -1, 113, -1, -1,
+ -1, -1, -1, 46, 47, 48, -1, -1, -1, 125,
+ -1, -1, -1, -1, -1, 131, 59, 60, 61, 62,
+ -1, 64, 65, 66, -1, 141, -1, -1, -1, -1,
+ 73, 74, 75, 76, -1, 142, -1, -1, -1, -1,
+ -1, 84, 85, 86, 87, 88, 89, -1, -1, -1,
+ -1, 94, 95, 96, -1, -1, -1, -1, 101, 102,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 113, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 125, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 15, 141, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 15, -1, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 15, -1, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 15, -1, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 15, -1, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 15, -1, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, -1, -1, -1,
+ -1, -1, 140, 15, 142, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 15, 142, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 15, 142, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 15, 142, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 15, 142, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 15, 142, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, -1, -1, -1, -1, -1, -1, 15,
+ 142, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 15,
+ 142, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 15,
+ 142, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 15,
+ 142, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 15,
+ 142, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 15,
+ 142, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, -1,
+ -1, -1, -1, -1, -1, 15, 142, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 15, 142, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 15, 142, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 15, 142, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 15, 142, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 15, 142, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, -1, -1, -1, -1, 15,
+ 140, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 15,
+ 140, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, -1,
+ 140, 654, 655, -1, -1, 4, -1, 660, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 140, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 686, 687, -1, -1, -1, -1, 38,
+ 140, -1, -1, 696, 697, -1, 699, -1, 701, 702,
+ -1, -1, -1, -1, -1, -1, 709, -1, -1, -1,
+ 140, -1, -1, -1, -1, 64, -1, -1, 721, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 734, -1, -1, 140, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, -1, 98,
+ -1, -1, -1, -1, 140, 104, 105, 106, 107, 108,
+ 109, 110, 111, 112, -1, 114, 115, -1, 117, 118,
+ 119, -1, -1, -1, -1, 124, 125, 126, 15, -1,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, -1, -1,
+ 37, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 15, -1, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const yytype_uint16 yystos[] =
+{
+ 0, 121, 122, 123, 132, 139, 148, 164, 165, 152,
+ 153, 150, 151, 261, 262, 256, 257, 0, 166, 154,
+ 4, 56, 127, 265, 266, 56, 258, 259, 4, 46,
+ 47, 48, 59, 60, 61, 62, 64, 65, 66, 73,
+ 74, 75, 76, 84, 85, 86, 87, 88, 89, 94,
+ 95, 96, 101, 102, 113, 125, 141, 167, 174, 176,
+ 195, 197, 208, 209, 211, 213, 248, 263, 264, 4,
+ 38, 64, 98, 104, 105, 106, 107, 108, 110, 111,
+ 112, 114, 115, 117, 118, 119, 124, 125, 126, 155,
+ 6, 4, 125, 128, 129, 130, 268, 269, 56, 266,
+ 129, 130, 260, 269, 259, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 193, 56, 56, 49, 50, 37,
+ 37, 4, 149, 56, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 168, 37, 37, 37, 177, 37,
+ 140, 141, 194, 131, 4, 149, 4, 3, 4, 30,
+ 31, 37, 38, 39, 51, 52, 53, 58, 63, 72,
+ 77, 78, 79, 80, 81, 82, 83, 90, 92, 107,
+ 113, 138, 145, 146, 217, 4, 4, 159, 4, 158,
+ 157, 4, 4, 4, 217, 4, 3, 4, 160, 161,
+ 162, 4, 109, 217, 4, 16, 16, 57, 141, 268,
+ 57, 141, 215, 216, 215, 175, 249, 4, 4, 4,
+ 4, 169, 4, 64, 198, 199, 200, 4, 4, 149,
+ 149, 4, 149, 142, 149, 210, 212, 4, 214, 4,
+ 5, 103, 170, 37, 149, 4, 4, 37, 161, 56,
+ 6, 140, 156, 6, 140, 217, 217, 217, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 217, 217, 15,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 140, 6,
+ 140, 217, 140, 140, 4, 140, 6, 140, 217, 140,
+ 140, 4, 163, 56, 269, 269, 141, 4, 125, 128,
+ 129, 130, 57, 141, 217, 4, 57, 64, 71, 95,
+ 176, 223, 4, 57, 250, 140, 142, 142, 166, 201,
+ 149, 57, 140, 196, 140, 142, 142, 142, 142, 142,
+ 142, 196, 142, 196, 140, 214, 142, 37, 4, 5,
+ 103, 140, 142, 170, 142, 6, 6, 217, 142, 265,
+ 217, 217, 154, 217, 217, 142, 217, 217, 217, 217,
+ 217, 4, 4, 217, 4, 4, 4, 4, 217, 217,
+ 4, 4, 217, 217, 4, 217, 217, 217, 217, 217,
+ 217, 217, 217, 217, 217, 217, 217, 217, 217, 217,
+ 217, 217, 217, 217, 217, 217, 217, 4, 4, 4,
+ 217, 217, 3, 4, 4, 4, 140, 271, 141, 141,
+ 4, 127, 141, 267, 224, 149, 229, 234, 251, 4,
+ 36, 37, 205, 202, 200, 4, 149, 149, 214, 171,
+ 37, 4, 5, 103, 142, 215, 215, 140, 57, 36,
+ 140, 142, 142, 140, 140, 142, 140, 142, 142, 142,
+ 142, 142, 142, 140, 140, 142, 142, 142, 140, 142,
+ 16, 4, 269, 130, 56, 127, 141, 37, 40, 217,
+ 238, 239, 236, 16, 217, 240, 239, 217, 253, 140,
+ 4, 145, 206, 207, 16, 198, 142, 170, 173, 37,
+ 142, 142, 4, 217, 217, 217, 217, 217, 217, 4,
+ 217, 141, 272, 16, 270, 67, 68, 69, 70, 71,
+ 142, 237, 37, 37, 238, 16, 99, 219, 175, 16,
+ 89, 241, 235, 4, 99, 254, 4, 4, 142, 207,
+ 90, 203, 36, 142, 170, 172, 142, 142, 142, 142,
+ 142, 142, 142, 142, 57, 269, 269, 142, 217, 16,
+ 37, 38, 220, 36, 219, 56, 37, 255, 37, 252,
+ 142, 6, 196, 142, 170, 141, 272, 142, 217, 37,
+ 100, 221, 221, 175, 217, 254, 217, 141, 215, 92,
+ 204, 142, 57, 39, 238, 142, 217, 37, 225, 230,
+ 57, 142, 142, 6, 37, 16, 142, 217, 134, 135,
+ 136, 222, 56, 254, 215, 217, 142, 56, 231, 142,
+ 226, 244, 238, 4, 15, 32, 41, 42, 43, 44,
+ 45, 54, 55, 64, 91, 93, 97, 113, 133, 137,
+ 141, 143, 178, 179, 182, 183, 185, 188, 189, 190,
+ 195, 4, 57, 16, 37, 37, 149, 37, 186, 37,
+ 37, 4, 54, 179, 181, 37, 185, 57, 37, 194,
+ 245, 232, 54, 55, 97, 137, 178, 54, 55, 178,
+ 187, 191, 215, 37, 184, 178, 180, 37, 144, 196,
+ 181, 227, 215, 56, 25, 242, 37, 37, 142, 37,
+ 142, 37, 37, 142, 189, 142, 217, 4, 182, 142,
+ 178, 179, 142, 242, 142, 189, 4, 99, 218, 178,
+ 178, 180, 178, 178, 36, 140, 142, 178, 218, 57,
+ 25, 243, 142, 142, 142, 142, 142, 4, 243, 246,
+ 4, 6, 16, 192, 142, 142, 178, 142, 142, 142,
+ 192, 243, 191, 4, 233, 142, 194, 228, 192, 196,
+ 196, 247, 196
+};
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. */
+
+#define YYFAIL goto yyerrlab
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ yytoken = YYTRANSLATE (yychar); \
+ YYPOPSTACK (1); \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (YYID (0))
+
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+ If N is 0, then set CURRENT to the empty location which ends
+ the previous symbol: RHS[0] (always defined). */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ do \
+ if (YYID (N)) \
+ { \
+ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
+ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
+ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
+ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
+ } \
+ else \
+ { \
+ (Current).first_line = (Current).last_line = \
+ YYRHSLOC (Rhs, 0).last_line; \
+ (Current).first_column = (Current).last_column = \
+ YYRHSLOC (Rhs, 0).last_column; \
+ } \
+ while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+ This macro was not mandated originally: define only if we know
+ we won't break user code: when these are the locations we know. */
+
+#ifndef YY_LOCATION_PRINT
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
+# define YY_LOCATION_PRINT(File, Loc) \
+ fprintf (File, "%d.%d-%d.%d", \
+ (Loc).first_line, (Loc).first_column, \
+ (Loc).last_line, (Loc).last_column)
+# else
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (!yyvaluep)
+ return;
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+ YYUSE (yyoutput);
+# endif
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+ yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+ YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+#else
+static void
+yy_stack_print (bottom, top)
+ yytype_int16 *bottom;
+ yytype_int16 *top;
+#endif
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; bottom <= top; ++bottom)
+ YYFPRINTF (stderr, " %d", *bottom);
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+ YYSTYPE *yyvsp;
+ int yyrule;
+#endif
+{
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ unsigned long int yylno = yyrline[yyrule];
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ fprintf (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ );
+ fprintf (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined __GLIBC__ && defined _STRING_H
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+ const char *yystr;
+#endif
+{
+ YYSIZE_T yylen;
+ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+ return yylen;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+#endif
+{
+ char *yyd = yydest;
+ const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+ quotes and backslashes, so that it's suitable for yyerror. The
+ heuristic is that double-quoting is unnecessary unless the string
+ contains an apostrophe, a comma, or backslash (other than
+ backslash-backslash). YYSTR is taken from yytname. If YYRES is
+ null, do not copy; instead, return the length of what the result
+ would have been. */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+ if (*yystr == '"')
+ {
+ YYSIZE_T yyn = 0;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ if (! yyres)
+ return yystrlen (yystr);
+
+ return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+ YYCHAR while in state YYSTATE. Return the number of bytes copied,
+ including the terminating null byte. If YYRESULT is null, do not
+ copy anything; just return the number of bytes that would be
+ copied. As a special case, return 0 if an ordinary "syntax error"
+ message will do. Return YYSIZE_MAXIMUM if overflow occurs during
+ size calculation. */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+ int yyn = yypact[yystate];
+
+ if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+ return 0;
+ else
+ {
+ int yytype = YYTRANSLATE (yychar);
+ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+ YYSIZE_T yysize = yysize0;
+ YYSIZE_T yysize1;
+ int yysize_overflow = 0;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ int yyx;
+
+# if 0
+ /* This is so xgettext sees the translatable formats that are
+ constructed on the fly. */
+ YY_("syntax error, unexpected %s");
+ YY_("syntax error, unexpected %s, expecting %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+ char *yyfmt;
+ char const *yyf;
+ static char const yyunexpected[] = "syntax error, unexpected %s";
+ static char const yyexpecting[] = ", expecting %s";
+ static char const yyor[] = " or %s";
+ char yyformat[sizeof yyunexpected
+ + sizeof yyexpecting - 1
+ + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+ * (sizeof yyor - 1))];
+ char const *yyprefix = yyexpecting;
+
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yycount = 1;
+
+ yyarg[0] = yytname[yytype];
+ yyfmt = yystpcpy (yyformat, yyunexpected);
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ yyformat[sizeof yyunexpected - 1] = '\0';
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+ yysize_overflow |= (yysize1 < yysize);
+ yysize = yysize1;
+ yyfmt = yystpcpy (yyfmt, yyprefix);
+ yyprefix = yyor;
+ }
+
+ yyf = YY_(yyformat);
+ yysize1 = yysize + yystrlen (yyf);
+ yysize_overflow |= (yysize1 < yysize);
+ yysize = yysize1;
+
+ if (yysize_overflow)
+ return YYSIZE_MAXIMUM;
+
+ if (yyresult)
+ {
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ char *yyp = yyresult;
+ int yyi = 0;
+ while ((*yyp = *yyf) != '\0')
+ {
+ if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyf += 2;
+ }
+ else
+ {
+ yyp++;
+ yyf++;
+ }
+ }
+ }
+ return yysize;
+ }
+}
+#endif /* YYERROR_VERBOSE */
+
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
+#endif
+{
+ YYUSE (yyvaluep);
+
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ switch (yytype)
+ {
+
+ default:
+ break;
+ }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes. */
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* The look-ahead symbol. */
+int yychar;
+
+/* The semantic value of the look-ahead symbol. */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far. */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+
+ int yystate;
+ int yyn;
+ int yyresult;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+ /* Look-ahead token as an internal (translated) token number. */
+ int yytoken = 0;
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+ /* Three stacks and their tools:
+ `yyss': related to states,
+ `yyvs': related to semantic values,
+ `yyls': related to locations.
+
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss = yyssa;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+ YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ YYSIZE_T yystacksize = YYINITDEPTH;
+
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+
+ yyssp = yyss;
+ yyvsp = yyvs;
+
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+# else
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss);
+ YYSTACK_RELOCATE (yyvs);
+
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+ look-ahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to look-ahead token. */
+ yyn = yypact[yystate];
+ if (yyn == YYPACT_NINF)
+ goto yydefault;
+
+ /* Not known => get a look-ahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ if (yychar <= YYEOF)
+ {
+ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yyn == 0 || yyn == YYTABLE_NINF)
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the look-ahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token unless it is eof. */
+ if (yychar != YYEOF)
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ *++yyvsp = yylval;
+
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+ case 8:
+#line 174 "ldgram.y"
+ { ldlex_defsym(); }
+ break;
+
+ case 9:
+#line 176 "ldgram.y"
+ {
+ ldlex_popstate();
+ lang_add_assignment(exp_assop((yyvsp[(3) - (4)].token),(yyvsp[(2) - (4)].name),(yyvsp[(4) - (4)].etree)));
+ }
+ break;
+
+ case 10:
+#line 184 "ldgram.y"
+ {
+ ldlex_mri_script ();
+ PUSH_ERROR (_("MRI style script"));
+ }
+ break;
+
+ case 11:
+#line 189 "ldgram.y"
+ {
+ ldlex_popstate ();
+ mri_draw_tree ();
+ POP_ERROR ();
+ }
+ break;
+
+ case 16:
+#line 204 "ldgram.y"
+ {
+ einfo(_("%P%F: unrecognised keyword in MRI style script '%s'\n"),(yyvsp[(1) - (1)].name));
+ }
+ break;
+
+ case 17:
+#line 207 "ldgram.y"
+ {
+ config.map_filename = "-";
+ }
+ break;
+
+ case 20:
+#line 213 "ldgram.y"
+ { mri_public((yyvsp[(2) - (4)].name), (yyvsp[(4) - (4)].etree)); }
+ break;
+
+ case 21:
+#line 215 "ldgram.y"
+ { mri_public((yyvsp[(2) - (4)].name), (yyvsp[(4) - (4)].etree)); }
+ break;
+
+ case 22:
+#line 217 "ldgram.y"
+ { mri_public((yyvsp[(2) - (3)].name), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 23:
+#line 219 "ldgram.y"
+ { mri_format((yyvsp[(2) - (2)].name)); }
+ break;
+
+ case 24:
+#line 221 "ldgram.y"
+ { mri_output_section((yyvsp[(2) - (4)].name), (yyvsp[(4) - (4)].etree));}
+ break;
+
+ case 25:
+#line 223 "ldgram.y"
+ { mri_output_section((yyvsp[(2) - (3)].name), (yyvsp[(3) - (3)].etree));}
+ break;
+
+ case 26:
+#line 225 "ldgram.y"
+ { mri_output_section((yyvsp[(2) - (4)].name), (yyvsp[(4) - (4)].etree));}
+ break;
+
+ case 27:
+#line 227 "ldgram.y"
+ { mri_align((yyvsp[(2) - (4)].name),(yyvsp[(4) - (4)].etree)); }
+ break;
+
+ case 28:
+#line 229 "ldgram.y"
+ { mri_align((yyvsp[(2) - (4)].name),(yyvsp[(4) - (4)].etree)); }
+ break;
+
+ case 29:
+#line 231 "ldgram.y"
+ { mri_alignmod((yyvsp[(2) - (4)].name),(yyvsp[(4) - (4)].etree)); }
+ break;
+
+ case 30:
+#line 233 "ldgram.y"
+ { mri_alignmod((yyvsp[(2) - (4)].name),(yyvsp[(4) - (4)].etree)); }
+ break;
+
+ case 33:
+#line 237 "ldgram.y"
+ { mri_name((yyvsp[(2) - (2)].name)); }
+ break;
+
+ case 34:
+#line 239 "ldgram.y"
+ { mri_alias((yyvsp[(2) - (4)].name),(yyvsp[(4) - (4)].name),0);}
+ break;
+
+ case 35:
+#line 241 "ldgram.y"
+ { mri_alias ((yyvsp[(2) - (4)].name), 0, (int) (yyvsp[(4) - (4)].bigint).integer); }
+ break;
+
+ case 36:
+#line 243 "ldgram.y"
+ { mri_base((yyvsp[(2) - (2)].etree)); }
+ break;
+
+ case 37:
+#line 245 "ldgram.y"
+ { mri_truncate ((unsigned int) (yyvsp[(2) - (2)].bigint).integer); }
+ break;
+
+ case 40:
+#line 249 "ldgram.y"
+ { ldlex_script (); ldfile_open_command_file((yyvsp[(2) - (2)].name)); }
+ break;
+
+ case 41:
+#line 251 "ldgram.y"
+ { ldlex_popstate (); }
+ break;
+
+ case 42:
+#line 253 "ldgram.y"
+ { lang_add_entry ((yyvsp[(2) - (2)].name), FALSE); }
+ break;
+
+ case 44:
+#line 258 "ldgram.y"
+ { mri_order((yyvsp[(3) - (3)].name)); }
+ break;
+
+ case 45:
+#line 259 "ldgram.y"
+ { mri_order((yyvsp[(2) - (2)].name)); }
+ break;
+
+ case 47:
+#line 265 "ldgram.y"
+ { mri_load((yyvsp[(1) - (1)].name)); }
+ break;
+
+ case 48:
+#line 266 "ldgram.y"
+ { mri_load((yyvsp[(3) - (3)].name)); }
+ break;
+
+ case 49:
+#line 271 "ldgram.y"
+ { mri_only_load((yyvsp[(1) - (1)].name)); }
+ break;
+
+ case 50:
+#line 273 "ldgram.y"
+ { mri_only_load((yyvsp[(3) - (3)].name)); }
+ break;
+
+ case 51:
+#line 277 "ldgram.y"
+ { (yyval.name) = NULL; }
+ break;
+
+ case 54:
+#line 284 "ldgram.y"
+ { ldlex_expression (); }
+ break;
+
+ case 55:
+#line 286 "ldgram.y"
+ { ldlex_popstate (); }
+ break;
+
+ case 56:
+#line 290 "ldgram.y"
+ { ldlang_add_undef ((yyvsp[(1) - (1)].name)); }
+ break;
+
+ case 57:
+#line 292 "ldgram.y"
+ { ldlang_add_undef ((yyvsp[(2) - (2)].name)); }
+ break;
+
+ case 58:
+#line 294 "ldgram.y"
+ { ldlang_add_undef ((yyvsp[(3) - (3)].name)); }
+ break;
+
+ case 59:
+#line 298 "ldgram.y"
+ { ldlex_both(); }
+ break;
+
+ case 60:
+#line 300 "ldgram.y"
+ { ldlex_popstate(); }
+ break;
+
+ case 73:
+#line 321 "ldgram.y"
+ { lang_add_target((yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 74:
+#line 323 "ldgram.y"
+ { ldfile_add_library_path ((yyvsp[(3) - (4)].name), FALSE); }
+ break;
+
+ case 75:
+#line 325 "ldgram.y"
+ { lang_add_output((yyvsp[(3) - (4)].name), 1); }
+ break;
+
+ case 76:
+#line 327 "ldgram.y"
+ { lang_add_output_format ((yyvsp[(3) - (4)].name), (char *) NULL,
+ (char *) NULL, 1); }
+ break;
+
+ case 77:
+#line 330 "ldgram.y"
+ { lang_add_output_format ((yyvsp[(3) - (8)].name), (yyvsp[(5) - (8)].name), (yyvsp[(7) - (8)].name), 1); }
+ break;
+
+ case 78:
+#line 332 "ldgram.y"
+ { ldfile_set_output_arch ((yyvsp[(3) - (4)].name), bfd_arch_unknown); }
+ break;
+
+ case 79:
+#line 334 "ldgram.y"
+ { command_line.force_common_definition = TRUE ; }
+ break;
+
+ case 80:
+#line 336 "ldgram.y"
+ { command_line.inhibit_common_definition = TRUE ; }
+ break;
+
+ case 82:
+#line 339 "ldgram.y"
+ { lang_enter_group (); }
+ break;
+
+ case 83:
+#line 341 "ldgram.y"
+ { lang_leave_group (); }
+ break;
+
+ case 84:
+#line 343 "ldgram.y"
+ { lang_add_map((yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 85:
+#line 345 "ldgram.y"
+ { ldlex_script (); ldfile_open_command_file((yyvsp[(2) - (2)].name)); }
+ break;
+
+ case 86:
+#line 347 "ldgram.y"
+ { ldlex_popstate (); }
+ break;
+
+ case 87:
+#line 349 "ldgram.y"
+ {
+ lang_add_nocrossref ((yyvsp[(3) - (4)].nocrossref));
+ }
+ break;
+
+ case 89:
+#line 354 "ldgram.y"
+ { lang_add_insert ((yyvsp[(3) - (3)].name), 0); }
+ break;
+
+ case 90:
+#line 356 "ldgram.y"
+ { lang_add_insert ((yyvsp[(3) - (3)].name), 1); }
+ break;
+
+ case 91:
+#line 358 "ldgram.y"
+ { lang_memory_region_alias ((yyvsp[(3) - (6)].name), (yyvsp[(5) - (6)].name)); }
+ break;
+
+ case 92:
+#line 363 "ldgram.y"
+ { lang_add_input_file((yyvsp[(1) - (1)].name),lang_input_file_is_search_file_enum,
+ (char *)NULL); }
+ break;
+
+ case 93:
+#line 366 "ldgram.y"
+ { lang_add_input_file((yyvsp[(3) - (3)].name),lang_input_file_is_search_file_enum,
+ (char *)NULL); }
+ break;
+
+ case 94:
+#line 369 "ldgram.y"
+ { lang_add_input_file((yyvsp[(2) - (2)].name),lang_input_file_is_search_file_enum,
+ (char *)NULL); }
+ break;
+
+ case 95:
+#line 372 "ldgram.y"
+ { lang_add_input_file((yyvsp[(1) - (1)].name),lang_input_file_is_l_enum,
+ (char *)NULL); }
+ break;
+
+ case 96:
+#line 375 "ldgram.y"
+ { lang_add_input_file((yyvsp[(3) - (3)].name),lang_input_file_is_l_enum,
+ (char *)NULL); }
+ break;
+
+ case 97:
+#line 378 "ldgram.y"
+ { lang_add_input_file((yyvsp[(2) - (2)].name),lang_input_file_is_l_enum,
+ (char *)NULL); }
+ break;
+
+ case 98:
+#line 381 "ldgram.y"
+ { (yyval.integer) = as_needed; as_needed = TRUE; }
+ break;
+
+ case 99:
+#line 383 "ldgram.y"
+ { as_needed = (yyvsp[(3) - (5)].integer); }
+ break;
+
+ case 100:
+#line 385 "ldgram.y"
+ { (yyval.integer) = as_needed; as_needed = TRUE; }
+ break;
+
+ case 101:
+#line 387 "ldgram.y"
+ { as_needed = (yyvsp[(5) - (7)].integer); }
+ break;
+
+ case 102:
+#line 389 "ldgram.y"
+ { (yyval.integer) = as_needed; as_needed = TRUE; }
+ break;
+
+ case 103:
+#line 391 "ldgram.y"
+ { as_needed = (yyvsp[(4) - (6)].integer); }
+ break;
+
+ case 108:
+#line 406 "ldgram.y"
+ { lang_add_entry ((yyvsp[(3) - (4)].name), FALSE); }
+ break;
+
+ case 110:
+#line 408 "ldgram.y"
+ {ldlex_expression ();}
+ break;
+
+ case 111:
+#line 409 "ldgram.y"
+ { ldlex_popstate ();
+ lang_add_assignment (exp_assert ((yyvsp[(4) - (7)].etree), (yyvsp[(6) - (7)].name))); }
+ break;
+
+ case 112:
+#line 417 "ldgram.y"
+ {
+ (yyval.cname) = (yyvsp[(1) - (1)].name);
+ }
+ break;
+
+ case 113:
+#line 421 "ldgram.y"
+ {
+ (yyval.cname) = "*";
+ }
+ break;
+
+ case 114:
+#line 425 "ldgram.y"
+ {
+ (yyval.cname) = "?";
+ }
+ break;
+
+ case 115:
+#line 432 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(1) - (1)].cname);
+ (yyval.wildcard).sorted = none;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 116:
+#line 438 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(5) - (5)].cname);
+ (yyval.wildcard).sorted = none;
+ (yyval.wildcard).exclude_name_list = (yyvsp[(3) - (5)].name_list);
+ }
+ break;
+
+ case 117:
+#line 444 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(3) - (4)].cname);
+ (yyval.wildcard).sorted = by_name;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 118:
+#line 450 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(3) - (4)].cname);
+ (yyval.wildcard).sorted = by_alignment;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 119:
+#line 456 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(5) - (7)].cname);
+ (yyval.wildcard).sorted = by_name_alignment;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 120:
+#line 462 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(5) - (7)].cname);
+ (yyval.wildcard).sorted = by_name;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 121:
+#line 468 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(5) - (7)].cname);
+ (yyval.wildcard).sorted = by_alignment_name;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 122:
+#line 474 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(5) - (7)].cname);
+ (yyval.wildcard).sorted = by_alignment;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 123:
+#line 480 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[(7) - (8)].cname);
+ (yyval.wildcard).sorted = by_name;
+ (yyval.wildcard).exclude_name_list = (yyvsp[(5) - (8)].name_list);
+ }
+ break;
+
+ case 124:
+#line 489 "ldgram.y"
+ {
+ struct name_list *tmp;
+ tmp = (struct name_list *) xmalloc (sizeof *tmp);
+ tmp->name = (yyvsp[(2) - (2)].cname);
+ tmp->next = (yyvsp[(1) - (2)].name_list);
+ (yyval.name_list) = tmp;
+ }
+ break;
+
+ case 125:
+#line 498 "ldgram.y"
+ {
+ struct name_list *tmp;
+ tmp = (struct name_list *) xmalloc (sizeof *tmp);
+ tmp->name = (yyvsp[(1) - (1)].cname);
+ tmp->next = NULL;
+ (yyval.name_list) = tmp;
+ }
+ break;
+
+ case 126:
+#line 509 "ldgram.y"
+ {
+ struct wildcard_list *tmp;
+ tmp = (struct wildcard_list *) xmalloc (sizeof *tmp);
+ tmp->next = (yyvsp[(1) - (3)].wildcard_list);
+ tmp->spec = (yyvsp[(3) - (3)].wildcard);
+ (yyval.wildcard_list) = tmp;
+ }
+ break;
+
+ case 127:
+#line 518 "ldgram.y"
+ {
+ struct wildcard_list *tmp;
+ tmp = (struct wildcard_list *) xmalloc (sizeof *tmp);
+ tmp->next = NULL;
+ tmp->spec = (yyvsp[(1) - (1)].wildcard);
+ (yyval.wildcard_list) = tmp;
+ }
+ break;
+
+ case 128:
+#line 529 "ldgram.y"
+ {
+ struct wildcard_spec tmp;
+ tmp.name = (yyvsp[(1) - (1)].name);
+ tmp.exclude_name_list = NULL;
+ tmp.sorted = none;
+ lang_add_wild (&tmp, NULL, ldgram_had_keep);
+ }
+ break;
+
+ case 129:
+#line 537 "ldgram.y"
+ {
+ lang_add_wild (NULL, (yyvsp[(2) - (3)].wildcard_list), ldgram_had_keep);
+ }
+ break;
+
+ case 130:
+#line 541 "ldgram.y"
+ {
+ lang_add_wild (&(yyvsp[(1) - (4)].wildcard), (yyvsp[(3) - (4)].wildcard_list), ldgram_had_keep);
+ }
+ break;
+
+ case 132:
+#line 549 "ldgram.y"
+ { ldgram_had_keep = TRUE; }
+ break;
+
+ case 133:
+#line 551 "ldgram.y"
+ { ldgram_had_keep = FALSE; }
+ break;
+
+ case 135:
+#line 557 "ldgram.y"
+ {
+ lang_add_attribute(lang_object_symbols_statement_enum);
+ }
+ break;
+
+ case 137:
+#line 562 "ldgram.y"
+ {
+
+ lang_add_attribute(lang_constructors_statement_enum);
+ }
+ break;
+
+ case 138:
+#line 567 "ldgram.y"
+ {
+ constructors_sorted = TRUE;
+ lang_add_attribute (lang_constructors_statement_enum);
+ }
+ break;
+
+ case 140:
+#line 573 "ldgram.y"
+ {
+ lang_add_data ((int) (yyvsp[(1) - (4)].integer), (yyvsp[(3) - (4)].etree));
+ }
+ break;
+
+ case 141:
+#line 578 "ldgram.y"
+ {
+ lang_add_fill ((yyvsp[(3) - (4)].fill));
+ }
+ break;
+
+ case 142:
+#line 581 "ldgram.y"
+ {ldlex_expression ();}
+ break;
+
+ case 143:
+#line 582 "ldgram.y"
+ { ldlex_popstate ();
+ lang_add_assignment (exp_assert ((yyvsp[(4) - (8)].etree), (yyvsp[(6) - (8)].name))); }
+ break;
+
+ case 144:
+#line 585 "ldgram.y"
+ { ldlex_script (); ldfile_open_command_file((yyvsp[(2) - (2)].name)); }
+ break;
+
+ case 145:
+#line 587 "ldgram.y"
+ { ldlex_popstate (); }
+ break;
+
+ case 150:
+#line 602 "ldgram.y"
+ { (yyval.integer) = (yyvsp[(1) - (1)].token); }
+ break;
+
+ case 151:
+#line 604 "ldgram.y"
+ { (yyval.integer) = (yyvsp[(1) - (1)].token); }
+ break;
+
+ case 152:
+#line 606 "ldgram.y"
+ { (yyval.integer) = (yyvsp[(1) - (1)].token); }
+ break;
+
+ case 153:
+#line 608 "ldgram.y"
+ { (yyval.integer) = (yyvsp[(1) - (1)].token); }
+ break;
+
+ case 154:
+#line 610 "ldgram.y"
+ { (yyval.integer) = (yyvsp[(1) - (1)].token); }
+ break;
+
+ case 155:
+#line 615 "ldgram.y"
+ {
+ (yyval.fill) = exp_get_fill ((yyvsp[(1) - (1)].etree), 0, "fill value");
+ }
+ break;
+
+ case 156:
+#line 622 "ldgram.y"
+ { (yyval.fill) = (yyvsp[(2) - (2)].fill); }
+ break;
+
+ case 157:
+#line 623 "ldgram.y"
+ { (yyval.fill) = (fill_type *) 0; }
+ break;
+
+ case 158:
+#line 628 "ldgram.y"
+ { (yyval.token) = '+'; }
+ break;
+
+ case 159:
+#line 630 "ldgram.y"
+ { (yyval.token) = '-'; }
+ break;
+
+ case 160:
+#line 632 "ldgram.y"
+ { (yyval.token) = '*'; }
+ break;
+
+ case 161:
+#line 634 "ldgram.y"
+ { (yyval.token) = '/'; }
+ break;
+
+ case 162:
+#line 636 "ldgram.y"
+ { (yyval.token) = LSHIFT; }
+ break;
+
+ case 163:
+#line 638 "ldgram.y"
+ { (yyval.token) = RSHIFT; }
+ break;
+
+ case 164:
+#line 640 "ldgram.y"
+ { (yyval.token) = '&'; }
+ break;
+
+ case 165:
+#line 642 "ldgram.y"
+ { (yyval.token) = '|'; }
+ break;
+
+ case 168:
+#line 652 "ldgram.y"
+ {
+ lang_add_assignment (exp_assop ((yyvsp[(2) - (3)].token), (yyvsp[(1) - (3)].name), (yyvsp[(3) - (3)].etree)));
+ }
+ break;
+
+ case 169:
+#line 656 "ldgram.y"
+ {
+ lang_add_assignment (exp_assop ('=', (yyvsp[(1) - (3)].name),
+ exp_binop ((yyvsp[(2) - (3)].token),
+ exp_nameop (NAME,
+ (yyvsp[(1) - (3)].name)),
+ (yyvsp[(3) - (3)].etree))));
+ }
+ break;
+
+ case 170:
+#line 664 "ldgram.y"
+ {
+ lang_add_assignment (exp_provide ((yyvsp[(3) - (6)].name), (yyvsp[(5) - (6)].etree), FALSE));
+ }
+ break;
+
+ case 171:
+#line 668 "ldgram.y"
+ {
+ lang_add_assignment (exp_provide ((yyvsp[(3) - (6)].name), (yyvsp[(5) - (6)].etree), TRUE));
+ }
+ break;
+
+ case 179:
+#line 691 "ldgram.y"
+ { region = lang_memory_region_lookup ((yyvsp[(1) - (1)].name), TRUE); }
+ break;
+
+ case 180:
+#line 694 "ldgram.y"
+ {}
+ break;
+
+ case 181:
+#line 696 "ldgram.y"
+ { ldlex_script (); ldfile_open_command_file((yyvsp[(2) - (2)].name)); }
+ break;
+
+ case 182:
+#line 698 "ldgram.y"
+ { ldlex_popstate (); }
+ break;
+
+ case 183:
+#line 703 "ldgram.y"
+ {
+ region->origin = exp_get_vma ((yyvsp[(3) - (3)].etree), 0, "origin");
+ region->current = region->origin;
+ }
+ break;
+
+ case 184:
+#line 711 "ldgram.y"
+ {
+ region->length = exp_get_vma ((yyvsp[(3) - (3)].etree), -1, "length");
+ }
+ break;
+
+ case 185:
+#line 718 "ldgram.y"
+ { /* dummy action to avoid bison 1.25 error message */ }
+ break;
+
+ case 189:
+#line 729 "ldgram.y"
+ { lang_set_flags (region, (yyvsp[(1) - (1)].name), 0); }
+ break;
+
+ case 190:
+#line 731 "ldgram.y"
+ { lang_set_flags (region, (yyvsp[(2) - (2)].name), 1); }
+ break;
+
+ case 191:
+#line 736 "ldgram.y"
+ { lang_startup((yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 193:
+#line 742 "ldgram.y"
+ { ldemul_hll((char *)NULL); }
+ break;
+
+ case 194:
+#line 747 "ldgram.y"
+ { ldemul_hll((yyvsp[(3) - (3)].name)); }
+ break;
+
+ case 195:
+#line 749 "ldgram.y"
+ { ldemul_hll((yyvsp[(1) - (1)].name)); }
+ break;
+
+ case 197:
+#line 757 "ldgram.y"
+ { ldemul_syslib((yyvsp[(3) - (3)].name)); }
+ break;
+
+ case 199:
+#line 763 "ldgram.y"
+ { lang_float(TRUE); }
+ break;
+
+ case 200:
+#line 765 "ldgram.y"
+ { lang_float(FALSE); }
+ break;
+
+ case 201:
+#line 770 "ldgram.y"
+ {
+ (yyval.nocrossref) = NULL;
+ }
+ break;
+
+ case 202:
+#line 774 "ldgram.y"
+ {
+ struct lang_nocrossref *n;
+
+ n = (struct lang_nocrossref *) xmalloc (sizeof *n);
+ n->name = (yyvsp[(1) - (2)].name);
+ n->next = (yyvsp[(2) - (2)].nocrossref);
+ (yyval.nocrossref) = n;
+ }
+ break;
+
+ case 203:
+#line 783 "ldgram.y"
+ {
+ struct lang_nocrossref *n;
+
+ n = (struct lang_nocrossref *) xmalloc (sizeof *n);
+ n->name = (yyvsp[(1) - (3)].name);
+ n->next = (yyvsp[(3) - (3)].nocrossref);
+ (yyval.nocrossref) = n;
+ }
+ break;
+
+ case 204:
+#line 793 "ldgram.y"
+ { ldlex_expression (); }
+ break;
+
+ case 205:
+#line 795 "ldgram.y"
+ { ldlex_popstate (); (yyval.etree)=(yyvsp[(2) - (2)].etree);}
+ break;
+
+ case 206:
+#line 800 "ldgram.y"
+ { (yyval.etree) = exp_unop ('-', (yyvsp[(2) - (2)].etree)); }
+ break;
+
+ case 207:
+#line 802 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(2) - (3)].etree); }
+ break;
+
+ case 208:
+#line 804 "ldgram.y"
+ { (yyval.etree) = exp_unop ((int) (yyvsp[(1) - (4)].integer),(yyvsp[(3) - (4)].etree)); }
+ break;
+
+ case 209:
+#line 806 "ldgram.y"
+ { (yyval.etree) = exp_unop ('!', (yyvsp[(2) - (2)].etree)); }
+ break;
+
+ case 210:
+#line 808 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(2) - (2)].etree); }
+ break;
+
+ case 211:
+#line 810 "ldgram.y"
+ { (yyval.etree) = exp_unop ('~', (yyvsp[(2) - (2)].etree));}
+ break;
+
+ case 212:
+#line 813 "ldgram.y"
+ { (yyval.etree) = exp_binop ('*', (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 213:
+#line 815 "ldgram.y"
+ { (yyval.etree) = exp_binop ('/', (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 214:
+#line 817 "ldgram.y"
+ { (yyval.etree) = exp_binop ('%', (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 215:
+#line 819 "ldgram.y"
+ { (yyval.etree) = exp_binop ('+', (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 216:
+#line 821 "ldgram.y"
+ { (yyval.etree) = exp_binop ('-' , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 217:
+#line 823 "ldgram.y"
+ { (yyval.etree) = exp_binop (LSHIFT , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 218:
+#line 825 "ldgram.y"
+ { (yyval.etree) = exp_binop (RSHIFT , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 219:
+#line 827 "ldgram.y"
+ { (yyval.etree) = exp_binop (EQ , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 220:
+#line 829 "ldgram.y"
+ { (yyval.etree) = exp_binop (NE , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 221:
+#line 831 "ldgram.y"
+ { (yyval.etree) = exp_binop (LE , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 222:
+#line 833 "ldgram.y"
+ { (yyval.etree) = exp_binop (GE , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 223:
+#line 835 "ldgram.y"
+ { (yyval.etree) = exp_binop ('<' , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 224:
+#line 837 "ldgram.y"
+ { (yyval.etree) = exp_binop ('>' , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 225:
+#line 839 "ldgram.y"
+ { (yyval.etree) = exp_binop ('&' , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 226:
+#line 841 "ldgram.y"
+ { (yyval.etree) = exp_binop ('^' , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 227:
+#line 843 "ldgram.y"
+ { (yyval.etree) = exp_binop ('|' , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 228:
+#line 845 "ldgram.y"
+ { (yyval.etree) = exp_trinop ('?' , (yyvsp[(1) - (5)].etree), (yyvsp[(3) - (5)].etree), (yyvsp[(5) - (5)].etree)); }
+ break;
+
+ case 229:
+#line 847 "ldgram.y"
+ { (yyval.etree) = exp_binop (ANDAND , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 230:
+#line 849 "ldgram.y"
+ { (yyval.etree) = exp_binop (OROR , (yyvsp[(1) - (3)].etree), (yyvsp[(3) - (3)].etree)); }
+ break;
+
+ case 231:
+#line 851 "ldgram.y"
+ { (yyval.etree) = exp_nameop (DEFINED, (yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 232:
+#line 853 "ldgram.y"
+ { (yyval.etree) = exp_bigintop ((yyvsp[(1) - (1)].bigint).integer, (yyvsp[(1) - (1)].bigint).str); }
+ break;
+
+ case 233:
+#line 855 "ldgram.y"
+ { (yyval.etree) = exp_nameop (SIZEOF_HEADERS,0); }
+ break;
+
+ case 234:
+#line 858 "ldgram.y"
+ { (yyval.etree) = exp_nameop (ALIGNOF,(yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 235:
+#line 860 "ldgram.y"
+ { (yyval.etree) = exp_nameop (SIZEOF,(yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 236:
+#line 862 "ldgram.y"
+ { (yyval.etree) = exp_nameop (ADDR,(yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 237:
+#line 864 "ldgram.y"
+ { (yyval.etree) = exp_nameop (LOADADDR,(yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 238:
+#line 866 "ldgram.y"
+ { (yyval.etree) = exp_nameop (CONSTANT,(yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 239:
+#line 868 "ldgram.y"
+ { (yyval.etree) = exp_unop (ABSOLUTE, (yyvsp[(3) - (4)].etree)); }
+ break;
+
+ case 240:
+#line 870 "ldgram.y"
+ { (yyval.etree) = exp_unop (ALIGN_K,(yyvsp[(3) - (4)].etree)); }
+ break;
+
+ case 241:
+#line 872 "ldgram.y"
+ { (yyval.etree) = exp_binop (ALIGN_K,(yyvsp[(3) - (6)].etree),(yyvsp[(5) - (6)].etree)); }
+ break;
+
+ case 242:
+#line 874 "ldgram.y"
+ { (yyval.etree) = exp_binop (DATA_SEGMENT_ALIGN, (yyvsp[(3) - (6)].etree), (yyvsp[(5) - (6)].etree)); }
+ break;
+
+ case 243:
+#line 876 "ldgram.y"
+ { (yyval.etree) = exp_binop (DATA_SEGMENT_RELRO_END, (yyvsp[(5) - (6)].etree), (yyvsp[(3) - (6)].etree)); }
+ break;
+
+ case 244:
+#line 878 "ldgram.y"
+ { (yyval.etree) = exp_unop (DATA_SEGMENT_END, (yyvsp[(3) - (4)].etree)); }
+ break;
+
+ case 245:
+#line 880 "ldgram.y"
+ { /* The operands to the expression node are
+ placed in the opposite order from the way
+ in which they appear in the script as
+ that allows us to reuse more code in
+ fold_binary. */
+ (yyval.etree) = exp_binop (SEGMENT_START,
+ (yyvsp[(5) - (6)].etree),
+ exp_nameop (NAME, (yyvsp[(3) - (6)].name))); }
+ break;
+
+ case 246:
+#line 889 "ldgram.y"
+ { (yyval.etree) = exp_unop (ALIGN_K,(yyvsp[(3) - (4)].etree)); }
+ break;
+
+ case 247:
+#line 891 "ldgram.y"
+ { (yyval.etree) = exp_nameop (NAME,(yyvsp[(1) - (1)].name)); }
+ break;
+
+ case 248:
+#line 893 "ldgram.y"
+ { (yyval.etree) = exp_binop (MAX_K, (yyvsp[(3) - (6)].etree), (yyvsp[(5) - (6)].etree) ); }
+ break;
+
+ case 249:
+#line 895 "ldgram.y"
+ { (yyval.etree) = exp_binop (MIN_K, (yyvsp[(3) - (6)].etree), (yyvsp[(5) - (6)].etree) ); }
+ break;
+
+ case 250:
+#line 897 "ldgram.y"
+ { (yyval.etree) = exp_assert ((yyvsp[(3) - (6)].etree), (yyvsp[(5) - (6)].name)); }
+ break;
+
+ case 251:
+#line 899 "ldgram.y"
+ { (yyval.etree) = exp_nameop (ORIGIN, (yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 252:
+#line 901 "ldgram.y"
+ { (yyval.etree) = exp_nameop (LENGTH, (yyvsp[(3) - (4)].name)); }
+ break;
+
+ case 253:
+#line 906 "ldgram.y"
+ { (yyval.name) = (yyvsp[(3) - (3)].name); }
+ break;
+
+ case 254:
+#line 907 "ldgram.y"
+ { (yyval.name) = 0; }
+ break;
+
+ case 255:
+#line 911 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(3) - (4)].etree); }
+ break;
+
+ case 256:
+#line 912 "ldgram.y"
+ { (yyval.etree) = 0; }
+ break;
+
+ case 257:
+#line 916 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(3) - (4)].etree); }
+ break;
+
+ case 258:
+#line 917 "ldgram.y"
+ { (yyval.etree) = 0; }
+ break;
+
+ case 259:
+#line 921 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(3) - (4)].etree); }
+ break;
+
+ case 260:
+#line 922 "ldgram.y"
+ { (yyval.etree) = 0; }
+ break;
+
+ case 261:
+#line 926 "ldgram.y"
+ { (yyval.token) = ONLY_IF_RO; }
+ break;
+
+ case 262:
+#line 927 "ldgram.y"
+ { (yyval.token) = ONLY_IF_RW; }
+ break;
+
+ case 263:
+#line 928 "ldgram.y"
+ { (yyval.token) = SPECIAL; }
+ break;
+
+ case 264:
+#line 929 "ldgram.y"
+ { (yyval.token) = 0; }
+ break;
+
+ case 265:
+#line 932 "ldgram.y"
+ { ldlex_expression(); }
+ break;
+
+ case 266:
+#line 936 "ldgram.y"
+ { ldlex_popstate (); ldlex_script (); }
+ break;
+
+ case 267:
+#line 939 "ldgram.y"
+ {
+ lang_enter_output_section_statement((yyvsp[(1) - (9)].name), (yyvsp[(3) - (9)].etree),
+ sectype,
+ (yyvsp[(5) - (9)].etree), (yyvsp[(6) - (9)].etree), (yyvsp[(4) - (9)].etree), (yyvsp[(8) - (9)].token));
+ }
+ break;
+
+ case 268:
+#line 945 "ldgram.y"
+ { ldlex_popstate (); ldlex_expression (); }
+ break;
+
+ case 269:
+#line 947 "ldgram.y"
+ {
+ ldlex_popstate ();
+ lang_leave_output_section_statement ((yyvsp[(17) - (17)].fill), (yyvsp[(14) - (17)].name), (yyvsp[(16) - (17)].section_phdr), (yyvsp[(15) - (17)].name));
+ }
+ break;
+
+ case 270:
+#line 952 "ldgram.y"
+ {}
+ break;
+
+ case 271:
+#line 954 "ldgram.y"
+ { ldlex_expression (); }
+ break;
+
+ case 272:
+#line 956 "ldgram.y"
+ { ldlex_popstate (); ldlex_script (); }
+ break;
+
+ case 273:
+#line 958 "ldgram.y"
+ {
+ lang_enter_overlay ((yyvsp[(3) - (8)].etree), (yyvsp[(6) - (8)].etree));
+ }
+ break;
+
+ case 274:
+#line 963 "ldgram.y"
+ { ldlex_popstate (); ldlex_expression (); }
+ break;
+
+ case 275:
+#line 965 "ldgram.y"
+ {
+ ldlex_popstate ();
+ lang_leave_overlay ((yyvsp[(5) - (16)].etree), (int) (yyvsp[(4) - (16)].integer),
+ (yyvsp[(16) - (16)].fill), (yyvsp[(13) - (16)].name), (yyvsp[(15) - (16)].section_phdr), (yyvsp[(14) - (16)].name));
+ }
+ break;
+
+ case 277:
+#line 975 "ldgram.y"
+ { ldlex_expression (); }
+ break;
+
+ case 278:
+#line 977 "ldgram.y"
+ {
+ ldlex_popstate ();
+ lang_add_assignment (exp_assop ('=', ".", (yyvsp[(3) - (3)].etree)));
+ }
+ break;
+
+ case 280:
+#line 983 "ldgram.y"
+ { ldlex_script (); ldfile_open_command_file((yyvsp[(2) - (2)].name)); }
+ break;
+
+ case 281:
+#line 985 "ldgram.y"
+ { ldlex_popstate (); }
+ break;
+
+ case 282:
+#line 989 "ldgram.y"
+ { sectype = noload_section; }
+ break;
+
+ case 283:
+#line 990 "ldgram.y"
+ { sectype = noalloc_section; }
+ break;
+
+ case 284:
+#line 991 "ldgram.y"
+ { sectype = noalloc_section; }
+ break;
+
+ case 285:
+#line 992 "ldgram.y"
+ { sectype = noalloc_section; }
+ break;
+
+ case 286:
+#line 993 "ldgram.y"
+ { sectype = noalloc_section; }
+ break;
+
+ case 288:
+#line 998 "ldgram.y"
+ { sectype = normal_section; }
+ break;
+
+ case 289:
+#line 999 "ldgram.y"
+ { sectype = normal_section; }
+ break;
+
+ case 290:
+#line 1003 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(1) - (3)].etree); }
+ break;
+
+ case 291:
+#line 1004 "ldgram.y"
+ { (yyval.etree) = (etree_type *)NULL; }
+ break;
+
+ case 292:
+#line 1009 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(3) - (6)].etree); }
+ break;
+
+ case 293:
+#line 1011 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(3) - (10)].etree); }
+ break;
+
+ case 294:
+#line 1015 "ldgram.y"
+ { (yyval.etree) = (yyvsp[(1) - (2)].etree); }
+ break;
+
+ case 295:
+#line 1016 "ldgram.y"
+ { (yyval.etree) = (etree_type *) NULL; }
+ break;
+
+ case 296:
+#line 1021 "ldgram.y"
+ { (yyval.integer) = 0; }
+ break;
+
+ case 297:
+#line 1023 "ldgram.y"
+ { (yyval.integer) = 1; }
+ break;
+
+ case 298:
+#line 1028 "ldgram.y"
+ { (yyval.name) = (yyvsp[(2) - (2)].name); }
+ break;
+
+ case 299:
+#line 1029 "ldgram.y"
+ { (yyval.name) = DEFAULT_MEMORY_REGION; }
+ break;
+
+ case 300:
+#line 1034 "ldgram.y"
+ {
+ (yyval.section_phdr) = NULL;
+ }
+ break;
+
+ case 301:
+#line 1038 "ldgram.y"
+ {
+ struct lang_output_section_phdr_list *n;
+
+ n = ((struct lang_output_section_phdr_list *)
+ xmalloc (sizeof *n));
+ n->name = (yyvsp[(3) - (3)].name);
+ n->used = FALSE;
+ n->next = (yyvsp[(1) - (3)].section_phdr);
+ (yyval.section_phdr) = n;
+ }
+ break;
+
+ case 303:
+#line 1054 "ldgram.y"
+ {
+ ldlex_script ();
+ lang_enter_overlay_section ((yyvsp[(2) - (2)].name));
+ }
+ break;
+
+ case 304:
+#line 1059 "ldgram.y"
+ { ldlex_popstate (); ldlex_expression (); }
+ break;
+
+ case 305:
+#line 1061 "ldgram.y"
+ {
+ ldlex_popstate ();
+ lang_leave_overlay_section ((yyvsp[(9) - (9)].fill), (yyvsp[(8) - (9)].section_phdr));
+ }
+ break;
+
+ case 310:
+#line 1078 "ldgram.y"
+ { ldlex_expression (); }
+ break;
+
+ case 311:
+#line 1079 "ldgram.y"
+ { ldlex_popstate (); }
+ break;
+
+ case 312:
+#line 1081 "ldgram.y"
+ {
+ lang_new_phdr ((yyvsp[(1) - (6)].name), (yyvsp[(3) - (6)].etree), (yyvsp[(4) - (6)].phdr).filehdr, (yyvsp[(4) - (6)].phdr).phdrs, (yyvsp[(4) - (6)].phdr).at,
+ (yyvsp[(4) - (6)].phdr).flags);
+ }
+ break;
+
+ case 313:
+#line 1089 "ldgram.y"
+ {
+ (yyval.etree) = (yyvsp[(1) - (1)].etree);
+
+ if ((yyvsp[(1) - (1)].etree)->type.node_class == etree_name
+ && (yyvsp[(1) - (1)].etree)->type.node_code == NAME)
+ {
+ const char *s;
+ unsigned int i;
+ static const char * const phdr_types[] =
+ {
+ "PT_NULL", "PT_LOAD", "PT_DYNAMIC",
+ "PT_INTERP", "PT_NOTE", "PT_SHLIB",
+ "PT_PHDR", "PT_TLS"
+ };
+
+ s = (yyvsp[(1) - (1)].etree)->name.name;
+ for (i = 0;
+ i < sizeof phdr_types / sizeof phdr_types[0];
+ i++)
+ if (strcmp (s, phdr_types[i]) == 0)
+ {
+ (yyval.etree) = exp_intop (i);
+ break;
+ }
+ if (i == sizeof phdr_types / sizeof phdr_types[0])
+ {
+ if (strcmp (s, "PT_GNU_EH_FRAME") == 0)
+ (yyval.etree) = exp_intop (0x6474e550);
+ else if (strcmp (s, "PT_GNU_STACK") == 0)
+ (yyval.etree) = exp_intop (0x6474e551);
+ else
+ {
+ einfo (_("\
+%X%P:%S: unknown phdr type `%s' (try integer literal)\n"),
+ s);
+ (yyval.etree) = exp_intop (0);
+ }
+ }
+ }
+ }
+ break;
+
+ case 314:
+#line 1133 "ldgram.y"
+ {
+ memset (&(yyval.phdr), 0, sizeof (struct phdr_info));
+ }
+ break;
+
+ case 315:
+#line 1137 "ldgram.y"
+ {
+ (yyval.phdr) = (yyvsp[(3) - (3)].phdr);
+ if (strcmp ((yyvsp[(1) - (3)].name), "FILEHDR") == 0 && (yyvsp[(2) - (3)].etree) == NULL)
+ (yyval.phdr).filehdr = TRUE;
+ else if (strcmp ((yyvsp[(1) - (3)].name), "PHDRS") == 0 && (yyvsp[(2) - (3)].etree) == NULL)
+ (yyval.phdr).phdrs = TRUE;
+ else if (strcmp ((yyvsp[(1) - (3)].name), "FLAGS") == 0 && (yyvsp[(2) - (3)].etree) != NULL)
+ (yyval.phdr).flags = (yyvsp[(2) - (3)].etree);
+ else
+ einfo (_("%X%P:%S: PHDRS syntax error at `%s'\n"), (yyvsp[(1) - (3)].name));
+ }
+ break;
+
+ case 316:
+#line 1149 "ldgram.y"
+ {
+ (yyval.phdr) = (yyvsp[(5) - (5)].phdr);
+ (yyval.phdr).at = (yyvsp[(3) - (5)].etree);
+ }
+ break;
+
+ case 317:
+#line 1157 "ldgram.y"
+ {
+ (yyval.etree) = NULL;
+ }
+ break;
+
+ case 318:
+#line 1161 "ldgram.y"
+ {
+ (yyval.etree) = (yyvsp[(2) - (3)].etree);
+ }
+ break;
+
+ case 319:
+#line 1167 "ldgram.y"
+ {
+ ldlex_version_file ();
+ PUSH_ERROR (_("dynamic list"));
+ }
+ break;
+
+ case 320:
+#line 1172 "ldgram.y"
+ {
+ ldlex_popstate ();
+ POP_ERROR ();
+ }
+ break;
+
+ case 324:
+#line 1189 "ldgram.y"
+ {
+ lang_append_dynamic_list ((yyvsp[(1) - (2)].versyms));
+ }
+ break;
+
+ case 325:
+#line 1197 "ldgram.y"
+ {
+ ldlex_version_file ();
+ PUSH_ERROR (_("VERSION script"));
+ }
+ break;
+
+ case 326:
+#line 1202 "ldgram.y"
+ {
+ ldlex_popstate ();
+ POP_ERROR ();
+ }
+ break;
+
+ case 327:
+#line 1211 "ldgram.y"
+ {
+ ldlex_version_script ();
+ }
+ break;
+
+ case 328:
+#line 1215 "ldgram.y"
+ {
+ ldlex_popstate ();
+ }
+ break;
+
+ case 331:
+#line 1227 "ldgram.y"
+ {
+ lang_register_vers_node (NULL, (yyvsp[(2) - (4)].versnode), NULL);
+ }
+ break;
+
+ case 332:
+#line 1231 "ldgram.y"
+ {
+ lang_register_vers_node ((yyvsp[(1) - (5)].name), (yyvsp[(3) - (5)].versnode), NULL);
+ }
+ break;
+
+ case 333:
+#line 1235 "ldgram.y"
+ {
+ lang_register_vers_node ((yyvsp[(1) - (6)].name), (yyvsp[(3) - (6)].versnode), (yyvsp[(5) - (6)].deflist));
+ }
+ break;
+
+ case 334:
+#line 1242 "ldgram.y"
+ {
+ (yyval.deflist) = lang_add_vers_depend (NULL, (yyvsp[(1) - (1)].name));
+ }
+ break;
+
+ case 335:
+#line 1246 "ldgram.y"
+ {
+ (yyval.deflist) = lang_add_vers_depend ((yyvsp[(1) - (2)].deflist), (yyvsp[(2) - (2)].name));
+ }
+ break;
+
+ case 336:
+#line 1253 "ldgram.y"
+ {
+ (yyval.versnode) = lang_new_vers_node (NULL, NULL);
+ }
+ break;
+
+ case 337:
+#line 1257 "ldgram.y"
+ {
+ (yyval.versnode) = lang_new_vers_node ((yyvsp[(1) - (2)].versyms), NULL);
+ }
+ break;
+
+ case 338:
+#line 1261 "ldgram.y"
+ {
+ (yyval.versnode) = lang_new_vers_node ((yyvsp[(3) - (4)].versyms), NULL);
+ }
+ break;
+
+ case 339:
+#line 1265 "ldgram.y"
+ {
+ (yyval.versnode) = lang_new_vers_node (NULL, (yyvsp[(3) - (4)].versyms));
+ }
+ break;
+
+ case 340:
+#line 1269 "ldgram.y"
+ {
+ (yyval.versnode) = lang_new_vers_node ((yyvsp[(3) - (8)].versyms), (yyvsp[(7) - (8)].versyms));
+ }
+ break;
+
+ case 341:
+#line 1276 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, (yyvsp[(1) - (1)].name), ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 342:
+#line 1280 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, (yyvsp[(1) - (1)].name), ldgram_vers_current_lang, TRUE);
+ }
+ break;
+
+ case 343:
+#line 1284 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[(1) - (3)].versyms), (yyvsp[(3) - (3)].name), ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 344:
+#line 1288 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[(1) - (3)].versyms), (yyvsp[(3) - (3)].name), ldgram_vers_current_lang, TRUE);
+ }
+ break;
+
+ case 345:
+#line 1292 "ldgram.y"
+ {
+ (yyval.name) = ldgram_vers_current_lang;
+ ldgram_vers_current_lang = (yyvsp[(4) - (5)].name);
+ }
+ break;
+
+ case 346:
+#line 1297 "ldgram.y"
+ {
+ struct bfd_elf_version_expr *pat;
+ for (pat = (yyvsp[(7) - (9)].versyms); pat->next != NULL; pat = pat->next);
+ pat->next = (yyvsp[(1) - (9)].versyms);
+ (yyval.versyms) = (yyvsp[(7) - (9)].versyms);
+ ldgram_vers_current_lang = (yyvsp[(6) - (9)].name);
+ }
+ break;
+
+ case 347:
+#line 1305 "ldgram.y"
+ {
+ (yyval.name) = ldgram_vers_current_lang;
+ ldgram_vers_current_lang = (yyvsp[(2) - (3)].name);
+ }
+ break;
+
+ case 348:
+#line 1310 "ldgram.y"
+ {
+ (yyval.versyms) = (yyvsp[(5) - (7)].versyms);
+ ldgram_vers_current_lang = (yyvsp[(4) - (7)].name);
+ }
+ break;
+
+ case 349:
+#line 1315 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, "global", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 350:
+#line 1319 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[(1) - (3)].versyms), "global", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 351:
+#line 1323 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, "local", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 352:
+#line 1327 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[(1) - (3)].versyms), "local", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 353:
+#line 1331 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, "extern", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 354:
+#line 1335 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[(1) - (3)].versyms), "extern", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+
+/* Line 1267 of yacc.c. */
+#line 4268 "ldgram.c"
+ default: break;
+ }
+ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ yyerror (YY_("syntax error"));
+#else
+ {
+ YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+ if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+ {
+ YYSIZE_T yyalloc = 2 * yysize;
+ if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+ yyalloc = YYSTACK_ALLOC_MAXIMUM;
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+ if (yymsg)
+ yymsg_alloc = yyalloc;
+ else
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ }
+ }
+
+ if (0 < yysize && yysize <= yymsg_alloc)
+ {
+ (void) yysyntax_error (yymsg, yystate, yychar);
+ yyerror (yymsg);
+ }
+ else
+ {
+ yyerror (YY_("syntax error"));
+ if (yysize != 0)
+ goto yyexhaustedlab;
+ }
+ }
+#endif
+ }
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse look-ahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse look-ahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+
+ /* Pacify compilers like GCC when the user code never invokes
+ YYERROR and the label yyerrorlab therefore never appears in user
+ code. */
+ if (/*CONSTCOND*/ 0)
+ goto yyerrorlab;
+
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (yyn != YYPACT_NINF)
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ yystos[yystate], yyvsp);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ *++yyvsp = yylval;
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+yyreturn:
+ if (yychar != YYEOF && yychar != YYEMPTY)
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
+ {
+ yydestruct ("Cleanup: popping",
+ yystos[*yyssp], yyvsp);
+ YYPOPSTACK (1);
+ }
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+#endif
+ /* Make sure YYID is used. */
+ return YYID (yyresult);
+}
+
+
+#line 1345 "ldgram.y"
+
+void
+yyerror(arg)
+ const char *arg;
+{
+ if (ldfile_assumed_script)
+ einfo (_("%P:%s: file format not recognized; treating as linker script\n"),
+ ldfile_input_filename);
+ if (error_index > 0 && error_index < ERROR_NAME_MAX)
+ einfo ("%P%F:%S: %s in %s\n", arg, error_names[error_index-1]);
+ else
+ einfo ("%P%F:%S: %s\n", arg);
+}
+
diff --git a/ld/ldgram.h b/ld/ldgram.h
new file mode 100644
index 0000000..25b847f
--- /dev/null
+++ b/ld/ldgram.h
@@ -0,0 +1,331 @@
+/* A Bison parser, made by GNU Bison 2.3. */
+
+/* Skeleton interface for Bison's Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ INT = 258,
+ NAME = 259,
+ LNAME = 260,
+ OREQ = 261,
+ ANDEQ = 262,
+ RSHIFTEQ = 263,
+ LSHIFTEQ = 264,
+ DIVEQ = 265,
+ MULTEQ = 266,
+ MINUSEQ = 267,
+ PLUSEQ = 268,
+ OROR = 269,
+ ANDAND = 270,
+ NE = 271,
+ EQ = 272,
+ GE = 273,
+ LE = 274,
+ RSHIFT = 275,
+ LSHIFT = 276,
+ UNARY = 277,
+ END = 278,
+ ALIGN_K = 279,
+ BLOCK = 280,
+ BIND = 281,
+ QUAD = 282,
+ SQUAD = 283,
+ LONG = 284,
+ SHORT = 285,
+ BYTE = 286,
+ SECTIONS = 287,
+ PHDRS = 288,
+ INSERT_K = 289,
+ AFTER = 290,
+ BEFORE = 291,
+ DATA_SEGMENT_ALIGN = 292,
+ DATA_SEGMENT_RELRO_END = 293,
+ DATA_SEGMENT_END = 294,
+ SORT_BY_NAME = 295,
+ SORT_BY_ALIGNMENT = 296,
+ SIZEOF_HEADERS = 297,
+ OUTPUT_FORMAT = 298,
+ FORCE_COMMON_ALLOCATION = 299,
+ OUTPUT_ARCH = 300,
+ INHIBIT_COMMON_ALLOCATION = 301,
+ SEGMENT_START = 302,
+ INCLUDE = 303,
+ MEMORY = 304,
+ REGION_ALIAS = 305,
+ NOLOAD = 306,
+ DSECT = 307,
+ COPY = 308,
+ INFO = 309,
+ OVERLAY = 310,
+ DEFINED = 311,
+ TARGET_K = 312,
+ SEARCH_DIR = 313,
+ MAP = 314,
+ ENTRY = 315,
+ NEXT = 316,
+ SIZEOF = 317,
+ ALIGNOF = 318,
+ ADDR = 319,
+ LOADADDR = 320,
+ MAX_K = 321,
+ MIN_K = 322,
+ STARTUP = 323,
+ HLL = 324,
+ SYSLIB = 325,
+ FLOAT = 326,
+ NOFLOAT = 327,
+ NOCROSSREFS = 328,
+ ORIGIN = 329,
+ FILL = 330,
+ LENGTH = 331,
+ CREATE_OBJECT_SYMBOLS = 332,
+ INPUT = 333,
+ GROUP = 334,
+ OUTPUT = 335,
+ CONSTRUCTORS = 336,
+ ALIGNMOD = 337,
+ AT = 338,
+ SUBALIGN = 339,
+ PROVIDE = 340,
+ PROVIDE_HIDDEN = 341,
+ AS_NEEDED = 342,
+ CHIP = 343,
+ LIST = 344,
+ SECT = 345,
+ ABSOLUTE = 346,
+ LOAD = 347,
+ NEWLINE = 348,
+ ENDWORD = 349,
+ ORDER = 350,
+ NAMEWORD = 351,
+ ASSERT_K = 352,
+ FORMAT = 353,
+ PUBLIC = 354,
+ DEFSYMEND = 355,
+ BASE = 356,
+ ALIAS = 357,
+ TRUNCATE = 358,
+ REL = 359,
+ INPUT_SCRIPT = 360,
+ INPUT_MRI_SCRIPT = 361,
+ INPUT_DEFSYM = 362,
+ CASE = 363,
+ EXTERN = 364,
+ START = 365,
+ VERS_TAG = 366,
+ VERS_IDENTIFIER = 367,
+ GLOBAL = 368,
+ LOCAL = 369,
+ VERSIONK = 370,
+ INPUT_VERSION_SCRIPT = 371,
+ KEEP = 372,
+ ONLY_IF_RO = 373,
+ ONLY_IF_RW = 374,
+ SPECIAL = 375,
+ EXCLUDE_FILE = 376,
+ CONSTANT = 377,
+ INPUT_DYNAMIC_LIST = 378
+ };
+#endif
+/* Tokens. */
+#define INT 258
+#define NAME 259
+#define LNAME 260
+#define OREQ 261
+#define ANDEQ 262
+#define RSHIFTEQ 263
+#define LSHIFTEQ 264
+#define DIVEQ 265
+#define MULTEQ 266
+#define MINUSEQ 267
+#define PLUSEQ 268
+#define OROR 269
+#define ANDAND 270
+#define NE 271
+#define EQ 272
+#define GE 273
+#define LE 274
+#define RSHIFT 275
+#define LSHIFT 276
+#define UNARY 277
+#define END 278
+#define ALIGN_K 279
+#define BLOCK 280
+#define BIND 281
+#define QUAD 282
+#define SQUAD 283
+#define LONG 284
+#define SHORT 285
+#define BYTE 286
+#define SECTIONS 287
+#define PHDRS 288
+#define INSERT_K 289
+#define AFTER 290
+#define BEFORE 291
+#define DATA_SEGMENT_ALIGN 292
+#define DATA_SEGMENT_RELRO_END 293
+#define DATA_SEGMENT_END 294
+#define SORT_BY_NAME 295
+#define SORT_BY_ALIGNMENT 296
+#define SIZEOF_HEADERS 297
+#define OUTPUT_FORMAT 298
+#define FORCE_COMMON_ALLOCATION 299
+#define OUTPUT_ARCH 300
+#define INHIBIT_COMMON_ALLOCATION 301
+#define SEGMENT_START 302
+#define INCLUDE 303
+#define MEMORY 304
+#define REGION_ALIAS 305
+#define NOLOAD 306
+#define DSECT 307
+#define COPY 308
+#define INFO 309
+#define OVERLAY 310
+#define DEFINED 311
+#define TARGET_K 312
+#define SEARCH_DIR 313
+#define MAP 314
+#define ENTRY 315
+#define NEXT 316
+#define SIZEOF 317
+#define ALIGNOF 318
+#define ADDR 319
+#define LOADADDR 320
+#define MAX_K 321
+#define MIN_K 322
+#define STARTUP 323
+#define HLL 324
+#define SYSLIB 325
+#define FLOAT 326
+#define NOFLOAT 327
+#define NOCROSSREFS 328
+#define ORIGIN 329
+#define FILL 330
+#define LENGTH 331
+#define CREATE_OBJECT_SYMBOLS 332
+#define INPUT 333
+#define GROUP 334
+#define OUTPUT 335
+#define CONSTRUCTORS 336
+#define ALIGNMOD 337
+#define AT 338
+#define SUBALIGN 339
+#define PROVIDE 340
+#define PROVIDE_HIDDEN 341
+#define AS_NEEDED 342
+#define CHIP 343
+#define LIST 344
+#define SECT 345
+#define ABSOLUTE 346
+#define LOAD 347
+#define NEWLINE 348
+#define ENDWORD 349
+#define ORDER 350
+#define NAMEWORD 351
+#define ASSERT_K 352
+#define FORMAT 353
+#define PUBLIC 354
+#define DEFSYMEND 355
+#define BASE 356
+#define ALIAS 357
+#define TRUNCATE 358
+#define REL 359
+#define INPUT_SCRIPT 360
+#define INPUT_MRI_SCRIPT 361
+#define INPUT_DEFSYM 362
+#define CASE 363
+#define EXTERN 364
+#define START 365
+#define VERS_TAG 366
+#define VERS_IDENTIFIER 367
+#define GLOBAL 368
+#define LOCAL 369
+#define VERSIONK 370
+#define INPUT_VERSION_SCRIPT 371
+#define KEEP 372
+#define ONLY_IF_RO 373
+#define ONLY_IF_RW 374
+#define SPECIAL 375
+#define EXCLUDE_FILE 376
+#define CONSTANT 377
+#define INPUT_DYNAMIC_LIST 378
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 62 "ldgram.y"
+{
+ bfd_vma integer;
+ struct big_int
+ {
+ bfd_vma integer;
+ char *str;
+ } bigint;
+ fill_type *fill;
+ char *name;
+ const char *cname;
+ struct wildcard_spec wildcard;
+ struct wildcard_list *wildcard_list;
+ struct name_list *name_list;
+ int token;
+ union etree_union *etree;
+ struct phdr_info
+ {
+ bfd_boolean filehdr;
+ bfd_boolean phdrs;
+ union etree_union *at;
+ union etree_union *flags;
+ } phdr;
+ struct lang_nocrossref *nocrossref;
+ struct lang_output_section_phdr_list *section_phdr;
+ struct bfd_elf_version_deps *deflist;
+ struct bfd_elf_version_expr *versyms;
+ struct bfd_elf_version_tree *versnode;
+}
+/* Line 1529 of yacc.c. */
+#line 324 "ldgram.h"
+ YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+extern YYSTYPE yylval;
+
diff --git a/ld/ldlex.c b/ld/ldlex.c
new file mode 100644
index 0000000..49de3f3
--- /dev/null
+++ b/ld/ldlex.c
@@ -0,0 +1,4261 @@
+
+#line 3 "ldlex.c"
+
+#define YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index. If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition. This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart(yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern yy_size_t yyleng;
+
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+ #define YY_LESS_LINENO(n)
+
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = (yy_hold_char); \
+ YY_RESTORE_YY_MORE_OFFSET \
+ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+ while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr) )
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+ {
+ FILE *yy_input_file;
+
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
+
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ yy_size_t yy_buf_size;
+
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ yy_size_t yy_n_chars;
+
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
+
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
+
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
+
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ * shouldn't try reading from the input source any more. We might
+ * still have a bunch of tokens to match, though, because of
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+ * (via yyrestart()), so that the user can continue scanning by
+ * just pointing yyin at a new input file.
+ */
+#define YY_BUFFER_EOF_PENDING 2
+
+ };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+ : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
+yy_size_t yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0; /* whether we need to initialize */
+static int yy_start = 0; /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin. A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart (FILE *input_file );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size );
+void yy_delete_buffer (YY_BUFFER_STATE b );
+void yy_flush_buffer (YY_BUFFER_STATE b );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer );
+void yypop_buffer_state (void );
+
+static void yyensure_buffer_stack (void );
+static void yy_load_buffer_state (void );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file );
+
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len );
+
+void *yyalloc (yy_size_t );
+void *yyrealloc (void *,yy_size_t );
+void yyfree (void * );
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+ }
+
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){\
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+ }
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+typedef unsigned char YY_CHAR;
+
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int yylineno;
+
+int yylineno = 1;
+
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[] );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+ (yytext_ptr) = yy_bp; \
+ yyleng = (size_t) (yy_cp - yy_bp); \
+ (yy_hold_char) = *yy_cp; \
+ *yy_cp = '\0'; \
+ (yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 190
+#define YY_END_OF_BUFFER 191
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static yyconst flex_int16_t yy_accept[1591] =
+ { 0,
+ 0, 0, 170, 170, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 191, 190,
+ 188, 173, 172, 32, 188, 170, 38, 29, 44, 43,
+ 34, 35, 28, 36, 170, 37, 8, 8, 45, 46,
+ 39, 40, 27, 33, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 10, 9, 170, 115, 113, 170,
+ 42, 30, 41, 31, 189, 173, 32, 189, 168, 38,
+ 29, 44, 43, 34, 35, 28, 36, 168, 37, 8,
+ 8, 45, 46, 39, 40, 27, 33, 168, 168, 168,
+
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 10, 9, 168, 168, 42, 30, 41, 31,
+ 166, 36, 166, 37, 8, 8, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 115, 113, 166,
+ 31, 4, 3, 2, 4, 5, 127, 126, 165, 34,
+ 35, 28, 36, 165, 37, 8, 8, 45, 46, 40,
+ 33, 165, 165, 165, 165, 165, 165, 165, 165, 165,
+ 165, 165, 165, 10, 9, 165, 165, 165, 165, 165,
+ 165, 165, 165, 165, 165, 165, 31, 187, 185, 186,
+
+ 188, 180, 179, 174, 181, 182, 178, 178, 178, 178,
+ 183, 184, 173, 15, 0, 171, 170, 8, 26, 24,
+ 22, 20, 21, 1, 23, 8, 8, 170, 18, 17,
+ 14, 16, 19, 170, 170, 170, 170, 170, 119, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 25, 13, 168, 6,
+ 22, 20, 21, 0, 1, 23, 8, 0, 7, 7,
+
+ 8, 7, 14, 168, 7, 7, 7, 168, 168, 119,
+ 7, 168, 168, 7, 168, 168, 168, 7, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 7, 168, 166, 8, 0,
+ 23, 8, 0, 166, 166, 166, 166, 166, 119, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 4, 4, 126,
+
+ 126, 165, 6, 128, 22, 129, 165, 7, 7, 7,
+ 165, 165, 165, 7, 165, 7, 7, 165, 165, 165,
+ 165, 165, 165, 165, 165, 7, 165, 165, 165, 7,
+ 165, 7, 7, 165, 165, 165, 165, 165, 165, 165,
+ 165, 187, 186, 179, 178, 0, 178, 178, 178, 11,
+ 12, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 91, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 70, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 116, 114, 170, 8, 169, 8, 168, 7,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 61, 62, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 8, 167, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 91, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 70, 61, 166,
+ 62, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 116, 114, 166,
+ 4, 8, 165, 165, 165, 165, 165, 130, 165, 165,
+ 165, 165, 165, 165, 165, 165, 165, 165, 165, 165,
+ 165, 165, 165, 147, 165, 165, 165, 165, 165, 165,
+ 165, 165, 165, 165, 178, 178, 178, 170, 58, 170,
+ 170, 170, 170, 170, 52, 170, 98, 170, 107, 170,
+ 170, 170, 170, 170, 170, 170, 87, 170, 170, 170,
+ 170, 108, 170, 170, 170, 123, 170, 170, 96, 170,
+ 66, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+
+ 94, 170, 170, 170, 170, 170, 170, 104, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 168, 58, 168,
+ 168, 168, 52, 168, 168, 107, 168, 168, 168, 168,
+ 168, 168, 108, 123, 168, 168, 66, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 166,
+ 58, 166, 166, 166, 166, 166, 52, 166, 98, 166,
+ 107, 166, 166, 166, 166, 166, 166, 166, 87, 166,
+ 166, 166, 166, 108, 166, 166, 166, 123, 166, 166,
+ 96, 166, 66, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 94, 166, 166, 166, 166, 166, 166, 104,
+
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 165,
+ 165, 165, 134, 142, 133, 165, 165, 144, 137, 140,
+ 165, 165, 145, 165, 165, 165, 165, 165, 151, 159,
+ 150, 165, 165, 162, 154, 157, 165, 165, 163, 165,
+ 165, 178, 178, 178, 170, 85, 54, 170, 170, 170,
+ 51, 170, 170, 170, 170, 106, 64, 170, 170, 93,
+ 170, 76, 170, 170, 75, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 118, 170, 170, 170,
+ 170, 170, 97, 170, 170, 170, 95, 170, 170, 170,
+ 170, 170, 170, 170, 168, 54, 168, 168, 51, 168,
+
+ 168, 168, 106, 168, 76, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 166, 85, 54, 166, 166, 166, 51, 166, 166, 166,
+ 166, 106, 64, 166, 166, 93, 166, 76, 166, 166,
+ 75, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 118, 166, 166, 166, 166, 166, 97, 166,
+ 166, 166, 95, 166, 166, 166, 166, 166, 166, 166,
+ 165, 135, 132, 165, 165, 144, 144, 139, 165, 143,
+ 165, 165, 152, 149, 165, 165, 162, 162, 156, 165,
+ 161, 165, 178, 178, 176, 170, 170, 63, 170, 86,
+
+ 170, 170, 170, 170, 170, 170, 65, 170, 170, 170,
+ 84, 53, 170, 47, 170, 170, 105, 170, 49, 74,
+ 170, 170, 170, 170, 170, 170, 71, 170, 170, 170,
+ 170, 92, 72, 170, 170, 170, 168, 168, 63, 168,
+ 168, 168, 168, 168, 168, 53, 168, 168, 105, 168,
+ 49, 168, 168, 168, 71, 168, 168, 168, 168, 166,
+ 166, 63, 166, 86, 166, 166, 166, 166, 166, 166,
+ 65, 166, 166, 166, 84, 53, 166, 47, 166, 166,
+ 105, 166, 49, 74, 166, 166, 166, 166, 166, 166,
+ 71, 166, 166, 166, 166, 92, 72, 166, 166, 166,
+
+ 165, 165, 65, 141, 138, 165, 165, 165, 160, 158,
+ 155, 165, 177, 175, 170, 60, 170, 170, 170, 170,
+ 170, 78, 170, 170, 117, 170, 170, 170, 99, 170,
+ 170, 101, 121, 170, 170, 170, 170, 170, 170, 112,
+ 88, 170, 50, 170, 170, 168, 60, 168, 168, 168,
+ 78, 168, 117, 168, 168, 168, 109, 121, 168, 168,
+ 112, 168, 168, 168, 166, 60, 166, 166, 166, 166,
+ 166, 78, 166, 166, 117, 166, 166, 166, 99, 166,
+ 166, 101, 121, 166, 166, 166, 166, 166, 166, 112,
+ 88, 166, 50, 166, 166, 165, 165, 165, 165, 165,
+
+ 165, 146, 170, 125, 170, 170, 170, 170, 170, 170,
+ 59, 170, 170, 170, 170, 170, 170, 170, 83, 170,
+ 170, 170, 120, 164, 170, 146, 168, 125, 168, 168,
+ 59, 168, 168, 168, 168, 168, 120, 164, 168, 146,
+ 166, 125, 166, 166, 166, 166, 166, 166, 59, 166,
+ 166, 166, 166, 166, 166, 166, 83, 166, 166, 166,
+ 120, 164, 166, 146, 131, 136, 164, 148, 153, 77,
+ 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 77, 168,
+ 168, 168, 168, 168, 168, 168, 168, 77, 166, 166,
+
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 170, 170, 170, 170,
+ 170, 170, 170, 110, 111, 170, 170, 170, 170, 73,
+ 170, 170, 170, 170, 170, 168, 168, 168, 110, 111,
+ 168, 168, 168, 168, 166, 166, 166, 166, 166, 166,
+ 166, 110, 111, 166, 166, 166, 166, 73, 166, 166,
+ 166, 166, 166, 170, 170, 170, 170, 170, 170, 100,
+ 90, 170, 170, 170, 170, 170, 170, 170, 170, 168,
+ 168, 100, 168, 168, 168, 168, 166, 166, 166, 166,
+ 166, 166, 100, 90, 166, 166, 166, 166, 166, 166,
+
+ 166, 166, 80, 170, 170, 124, 170, 170, 170, 170,
+ 48, 170, 170, 170, 102, 170, 168, 124, 168, 168,
+ 168, 168, 80, 166, 166, 124, 166, 166, 166, 166,
+ 48, 166, 166, 166, 102, 166, 170, 170, 170, 170,
+ 89, 170, 69, 170, 170, 170, 168, 168, 69, 168,
+ 168, 166, 166, 166, 166, 89, 166, 69, 166, 166,
+ 166, 170, 170, 170, 170, 170, 170, 122, 68, 170,
+ 67, 168, 168, 168, 122, 68, 67, 166, 166, 166,
+ 166, 166, 166, 122, 68, 166, 67, 170, 170, 170,
+ 170, 170, 170, 170, 168, 168, 168, 166, 166, 166,
+
+ 166, 166, 166, 166, 170, 170, 57, 170, 170, 170,
+ 170, 168, 57, 168, 166, 166, 57, 166, 166, 166,
+ 166, 170, 170, 170, 170, 170, 103, 168, 168, 166,
+ 166, 166, 166, 166, 103, 170, 55, 170, 170, 170,
+ 55, 168, 166, 55, 166, 166, 166, 170, 170, 170,
+ 170, 168, 166, 166, 166, 166, 170, 170, 170, 170,
+ 168, 166, 166, 166, 166, 79, 170, 170, 170, 168,
+ 79, 166, 166, 166, 56, 170, 170, 56, 56, 166,
+ 166, 81, 170, 81, 166, 170, 166, 82, 82, 0
+ } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
+ 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 4, 5, 6, 7, 8, 9, 1, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 20, 21, 22,
+ 23, 24, 25, 1, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 1, 57, 58, 59, 60,
+
+ 61, 62, 63, 64, 65, 16, 66, 67, 68, 69,
+ 70, 71, 16, 72, 73, 74, 75, 16, 16, 76,
+ 16, 77, 78, 79, 80, 81, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1
+ } ;
+
+static yyconst flex_int32_t yy_meta[82] =
+ { 0,
+ 1, 1, 2, 3, 1, 1, 4, 1, 1, 1,
+ 1, 5, 6, 7, 8, 9, 10, 11, 11, 8,
+ 1, 1, 7, 1, 5, 11, 11, 11, 11, 11,
+ 11, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 8, 4, 8, 3, 9, 11, 11, 11, 11,
+ 11, 11, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 1, 1, 1,
+ 10
+ } ;
+
+static yyconst flex_int16_t yy_base[1615] =
+ { 0,
+ 0, 0, 0, 0, 81, 0, 162, 0, 243, 323,
+ 403, 0, 271, 273, 484, 565, 646, 727, 2549, 2550,
+ 2550, 2546, 2550, 2524, 2541, 791, 2550, 260, 2550, 2550,
+ 2522, 2521, 0, 2520, 0, 247, 321, 492, 0, 2550,
+ 249, 2519, 257, 0, 255, 257, 253, 259, 262, 268,
+ 2498, 2503, 2500, 2508, 274, 280, 279, 315, 317, 2491,
+ 2506, 350, 2509, 2504, 0, 0, 2475, 2471, 2459, 2465,
+ 2550, 237, 2550, 0, 2550, 2527, 2505, 2522, 836, 2550,
+ 343, 2550, 2550, 2503, 2502, 2550, 289, 0, 341, 881,
+ 306, 2550, 2550, 295, 2501, 344, 2550, 940, 487, 506,
+
+ 565, 577, 571, 2480, 2483, 2491, 333, 345, 346, 476,
+ 2477, 488, 2550, 2550, 644, 2454, 2550, 290, 2550, 0,
+ 999, 477, 0, 362, 735, 747, 596, 511, 477, 567,
+ 349, 515, 2475, 2480, 2477, 2485, 517, 573, 594, 589,
+ 596, 2468, 2483, 645, 2486, 2481, 2452, 2448, 2436, 2442,
+ 0, 1044, 2550, 2550, 0, 2550, 2550, 2503, 1089, 2482,
+ 2481, 2550, 2480, 0, 2479, 0, 323, 2550, 0, 2478,
+ 2550, 1134, 635, 666, 647, 667, 671, 519, 2474, 2456,
+ 2452, 482, 2454, 2550, 2550, 685, 730, 732, 694, 754,
+ 250, 2439, 2423, 2419, 320, 2421, 0, 2490, 2550, 0,
+
+ 2479, 2550, 0, 2550, 2550, 2550, 2470, 505, 534, 610,
+ 2550, 2550, 2487, 2550, 2483, 2550, 0, 1193, 2550, 2550,
+ 0, 0, 0, 0, 0, 757, 0, 736, 2464, 2550,
+ 0, 2550, 2463, 2441, 2455, 2438, 2448, 594, 0, 2450,
+ 2441, 2439, 2433, 501, 2447, 2431, 2444, 2444, 2428, 568,
+ 2435, 2431, 2427, 2429, 2431, 798, 2437, 2427, 487, 2424,
+ 2426, 2414, 686, 2425, 2427, 2415, 2429, 2429, 2417, 2430,
+ 2423, 730, 2414, 2402, 2409, 2421, 2404, 2423, 2421, 2403,
+ 2403, 2402, 2371, 2374, 2379, 2364, 2550, 2550, 0, 1244,
+ 2550, 2550, 2550, 0, 2550, 2550, 582, 809, 0, 2550,
+
+ 2550, 0, 2550, 842, 845, 889, 0, 2406, 724, 0,
+ 917, 2400, 2398, 679, 949, 976, 2407, 2408, 2395, 669,
+ 2404, 2394, 2406, 2382, 2391, 2380, 668, 2391, 2393, 2396,
+ 2385, 2392, 2372, 2392, 2394, 995, 2343, 0, 1295, 0,
+ 0, 884, 0, 2375, 2389, 2372, 2382, 742, 0, 2384,
+ 2375, 2373, 2367, 738, 2381, 2365, 2378, 2378, 2362, 733,
+ 2369, 2365, 2361, 2363, 2365, 802, 2371, 2361, 716, 751,
+ 2361, 2359, 2348, 900, 2359, 2361, 2349, 2363, 2363, 2351,
+ 2364, 2357, 806, 2348, 2336, 2343, 2355, 2338, 2357, 2355,
+ 2337, 2337, 2336, 2305, 2308, 2313, 2298, 0, 1346, 2371,
+
+ 2550, 0, 1397, 0, 0, 0, 833, 888, 841, 0,
+ 2339, 928, 937, 2338, 2342, 2325, 2326, 2324, 2341, 2328,
+ 2336, 2337, 2335, 2336, 2315, 854, 2295, 969, 982, 2294,
+ 2298, 2283, 2284, 2282, 2297, 2285, 2292, 2293, 2291, 2292,
+ 2273, 2345, 0, 0, 2326, 2325, 690, 836, 617, 2550,
+ 2550, 2304, 2300, 2312, 2309, 2310, 2300, 2298, 2308, 2308,
+ 2305, 2290, 2283, 2306, 2305, 2296, 2301, 2285, 2290, 2296,
+ 2288, 2298, 2295, 2276, 0, 2284, 2280, 2285, 2272, 2287,
+ 2275, 2283, 2285, 2281, 0, 2272, 2266, 2267, 2272, 2268,
+ 2257, 2274, 2264, 2261, 2260, 2255, 2272, 2266, 2256, 2253,
+
+ 2259, 2253, 2265, 2249, 2265, 2266, 2248, 2264, 2252, 2256,
+ 2243, 2216, 0, 0, 2224, 0, 0, 998, 2244, 1004,
+ 2251, 2252, 2242, 2251, 2251, 2234, 2227, 2250, 1049, 2247,
+ 2237, 2227, 2235, 2231, 2229, 2237, 2239, 0, 0, 2222,
+ 2223, 2225, 2214, 2231, 2219, 2214, 2222, 2229, 2230, 2231,
+ 2186, 2194, 0, 0, 2214, 2210, 2222, 2219, 2220, 2210,
+ 2208, 2218, 2218, 2215, 2200, 2193, 2216, 2215, 2206, 2211,
+ 2195, 2200, 2206, 2198, 2208, 2205, 2186, 0, 2194, 2190,
+ 2195, 2182, 2197, 2185, 2193, 2195, 2191, 0, 0, 2182,
+ 0, 2176, 2177, 2182, 2178, 2167, 2184, 2174, 2171, 2170,
+
+ 2165, 2182, 2176, 2166, 2163, 2169, 2163, 2175, 2159, 2175,
+ 2176, 2158, 2174, 2162, 2166, 2153, 2126, 0, 0, 2134,
+ 0, 0, 2154, 651, 2163, 2162, 2150, 0, 2160, 2151,
+ 2143, 2158, 2156, 2155, 2147, 2138, 2139, 2142, 2110, 866,
+ 2118, 2117, 2106, 0, 2115, 2107, 2100, 2113, 2111, 2110,
+ 2103, 2095, 2096, 2098, 592, 681, 585, 2129, 0, 2122,
+ 2125, 2120, 2132, 2118, 0, 2124, 0, 2114, 0, 2113,
+ 2101, 2117, 2110, 2104, 2107, 2109, 0, 2106, 2120, 2108,
+ 2102, 0, 2120, 2101, 2102, 0, 2099, 2117, 0, 2099,
+ 0, 2101, 2100, 2113, 2082, 2103, 2090, 2098, 2090, 2099,
+
+ 0, 2092, 2103, 2096, 2099, 2083, 2087, 2070, 2091, 2095,
+ 2078, 2085, 2087, 2090, 2085, 2051, 2047, 2079, 0, 2076,
+ 2071, 2083, 0, 2076, 2066, 0, 2054, 2070, 2063, 2061,
+ 2065, 2059, 0, 0, 2059, 2077, 0, 2062, 2075, 2044,
+ 2065, 2061, 2063, 2066, 2055, 2060, 2056, 2025, 2021, 2053,
+ 0, 2046, 2049, 2044, 2056, 2042, 0, 2048, 0, 2038,
+ 0, 2037, 2025, 2041, 2034, 2028, 2031, 2033, 0, 2030,
+ 2044, 2032, 2017, 0, 2025, 1996, 1987, 0, 1977, 1990,
+ 0, 1971, 0, 1971, 1968, 1981, 1946, 1957, 1934, 1932,
+ 1919, 1927, 0, 1905, 1916, 1909, 1912, 1889, 1888, 222,
+
+ 331, 364, 446, 519, 538, 652, 681, 652, 664, 723,
+ 738, 758, 0, 0, 0, 756, 786, 1465, 0, 0,
+ 771, 782, 0, 791, 809, 773, 768, 775, 0, 0,
+ 0, 785, 802, 1545, 0, 0, 789, 808, 0, 802,
+ 821, 863, 933, 881, 838, 0, 848, 847, 874, 875,
+ 0, 949, 883, 880, 906, 0, 0, 927, 921, 0,
+ 907, 0, 950, 948, 0, 938, 954, 959, 941, 951,
+ 982, 982, 978, 975, 970, 997, 0, 1006, 998, 1005,
+ 1003, 1005, 0, 1014, 1019, 1024, 0, 1005, 1018, 1026,
+ 1009, 1025, 992, 1007, 1031, 1039, 1035, 1051, 0, 1056,
+
+ 1040, 1055, 0, 1058, 0, 1059, 1056, 1061, 1047, 1063,
+ 1061, 1057, 1071, 1069, 1060, 1069, 1083, 1076, 1036, 1050,
+ 1067, 0, 1074, 1076, 1092, 1093, 0, 1098, 1095, 1082,
+ 1097, 0, 0, 1099, 1090, 0, 1074, 0, 1102, 1098,
+ 0, 1088, 1101, 1106, 1086, 1093, 1112, 1110, 1106, 1103,
+ 1098, 1118, 0, 1116, 1115, 1122, 1116, 1118, 0, 1127,
+ 1132, 1140, 0, 1122, 1135, 1143, 1127, 1133, 1100, 1114,
+ 1131, 0, 1140, 1140, 1135, 0, 1625, 0, 1153, 0,
+ 1156, 1109, 0, 1117, 1117, 1113, 0, 1705, 0, 1129,
+ 0, 1132, 1170, 1177, 1179, 1155, 1170, 0, 1173, 0,
+
+ 1164, 1159, 1150, 1177, 1179, 1179, 0, 1185, 1184, 1170,
+ 0, 0, 1187, 0, 1173, 1173, 0, 1194, 0, 1170,
+ 1177, 1198, 1174, 1176, 1194, 1189, 1179, 1186, 1200, 1197,
+ 1208, 0, 0, 1202, 1168, 1187, 1200, 1215, 0, 1218,
+ 1209, 1219, 1227, 1227, 1228, 0, 1231, 1220, 0, 1234,
+ 0, 1216, 1237, 1223, 1213, 1239, 1245, 1204, 1223, 1236,
+ 1252, 0, 1255, 0, 1246, 1240, 1231, 1258, 1260, 1260,
+ 0, 1263, 1262, 1248, 0, 0, 1265, 0, 1251, 1251,
+ 0, 1266, 0, 1242, 1249, 1270, 1251, 1252, 1270, 1266,
+ 1259, 1266, 1280, 1277, 1287, 0, 0, 1281, 1253, 1272,
+
+ 1284, 1290, 0, 0, 0, 1287, 1260, 1265, 0, 0,
+ 0, 1262, 1317, 1318, 1309, 0, 1310, 1296, 1314, 1303,
+ 1312, 0, 1289, 1306, 0, 1291, 1305, 1306, 0, 1294,
+ 1336, 0, 1295, 1332, 1330, 1316, 1310, 1335, 1313, 0,
+ 0, 1331, 0, 1310, 1314, 1349, 0, 1350, 1336, 1351,
+ 0, 1329, 0, 1343, 1344, 1332, 0, 1333, 1334, 1358,
+ 0, 1353, 1332, 1330, 1365, 0, 1366, 1352, 1370, 1359,
+ 1368, 0, 1345, 1362, 0, 1353, 1367, 1368, 0, 1357,
+ 1391, 0, 1362, 1393, 1391, 1377, 1373, 1397, 1375, 0,
+ 0, 1393, 0, 1373, 1372, 1407, 1409, 1409, 1379, 1381,
+
+ 1381, 0, 1414, 0, 1399, 1418, 1408, 1416, 1410, 1421,
+ 0, 1420, 1408, 1409, 1413, 1427, 1424, 1428, 0, 1420,
+ 1438, 1446, 0, 0, 1417, 0, 1451, 0, 1443, 1451,
+ 0, 1453, 1441, 1458, 1448, 1463, 0, 0, 1433, 0,
+ 1466, 0, 1451, 1470, 1460, 1468, 1462, 1473, 0, 1472,
+ 1460, 1461, 1465, 1473, 1470, 1474, 0, 1465, 1480, 1485,
+ 0, 0, 1451, 0, 0, 0, 0, 0, 0, 0,
+ 1473, 1479, 1485, 1482, 1479, 1478, 1488, 1481, 1494, 1480,
+ 1491, 1492, 1484, 1483, 1504, 1494, 1506, 1476, 0, 1504,
+ 1501, 1505, 1500, 1503, 1493, 1513, 1484, 0, 1502, 1517,
+
+ 1528, 1526, 1523, 1522, 1532, 1524, 1537, 1528, 1539, 1540,
+ 1532, 1531, 1551, 1541, 1553, 1523, 1538, 1552, 1544, 1547,
+ 1545, 1548, 1543, 0, 0, 1555, 1551, 1561, 1565, 0,
+ 1566, 1564, 1560, 1557, 1536, 1558, 1561, 1555, 0, 0,
+ 1572, 1576, 1574, 1544, 1562, 1576, 1568, 1571, 1569, 1572,
+ 1567, 0, 0, 1579, 1575, 1585, 1589, 0, 1590, 1588,
+ 1584, 1581, 1560, 1577, 1594, 1583, 1602, 1599, 1602, 0,
+ 0, 1615, 1613, 1599, 1601, 1615, 1619, 1622, 1592, 1609,
+ 1625, 0, 1627, 1614, 1628, 1598, 1616, 1633, 1617, 1633,
+ 1625, 1627, 0, 0, 1640, 1638, 1624, 1626, 1640, 1639,
+
+ 1642, 1612, 0, 1629, 1619, 0, 1620, 1637, 1633, 1649,
+ 0, 1636, 1639, 1644, 0, 1612, 1629, 0, 1656, 1642,
+ 1645, 1617, 0, 1645, 1635, 0, 1636, 1653, 1649, 1665,
+ 0, 1651, 1654, 1659, 0, 1627, 1644, 1682, 1675, 1663,
+ 0, 1679, 0, 1676, 1683, 1649, 1705, 1684, 0, 1680,
+ 1659, 1677, 1708, 1710, 1698, 0, 1700, 0, 1696, 1703,
+ 1669, 1699, 1707, 1706, 1716, 1710, 1693, 0, 0, 1720,
+ 0, 1715, 1714, 1724, 0, 0, 0, 1711, 1719, 1718,
+ 1728, 1722, 1705, 0, 0, 1732, 0, 1713, 1730, 1736,
+ 1729, 1730, 1742, 1730, 1736, 1742, 1735, 1723, 1740, 1746,
+
+ 1739, 1740, 1752, 1740, 1742, 1749, 0, 1739, 1746, 1750,
+ 1743, 1757, 0, 1747, 1753, 1760, 0, 1750, 1754, 1758,
+ 1751, 1770, 1759, 1759, 1772, 1764, 0, 1763, 1763, 1777,
+ 1766, 1766, 1779, 1771, 0, 1769, 0, 1754, 1785, 1772,
+ 0, 1757, 1774, 0, 1759, 1790, 1777, 1781, 1789, 1775,
+ 1793, 1792, 1786, 1794, 1780, 1798, 1783, 1789, 1795, 1804,
+ 1792, 1788, 1794, 1800, 1809, 0, 1807, 1797, 1793, 1810,
+ 0, 1811, 1801, 1797, 0, 1804, 1810, 0, 0, 1806,
+ 1812, 0, 1807, 0, 1808, 1810, 1811, 0, 0, 2550,
+ 1850, 1861, 1872, 1883, 1894, 1905, 1913, 1921, 1929, 1937,
+
+ 1948, 1956, 1967, 1978, 1989, 1992, 2001, 2009, 1915, 2017,
+ 2028, 2039, 2050, 2061
+ } ;
+
+static yyconst flex_int16_t yy_def[1615] =
+ { 0,
+ 1591, 1591, 1590, 3, 1590, 5, 1590, 7, 1592, 1592,
+ 1590, 11, 1593, 1593, 1594, 1594, 1595, 1595, 1590, 1590,
+ 1590, 1590, 1590, 1590, 1596, 1597, 1590, 1590, 1590, 1590,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1590,
+ 1590, 1597, 1590, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1590, 1590, 1590, 1597, 1590, 1590, 1590, 1596, 1598, 1590,
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1598, 1598, 1590,
+ 90, 1590, 1590, 1590, 1590, 1590, 1590, 1598, 98, 98,
+
+ 98, 98, 98, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1590, 1590, 98, 1598, 1590, 1590, 1590, 1598,
+ 1599, 1590, 1599, 1599, 1590, 1590, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1600, 1590, 1590, 1600, 1590, 1590, 1601, 1602, 1603,
+ 1590, 1590, 1590, 1602, 1602, 90, 90, 1590, 1604, 1590,
+ 1590, 1602, 172, 172, 172, 172, 172, 1602, 1602, 1602,
+ 1602, 1602, 1602, 1590, 1590, 172, 172, 172, 172, 172,
+ 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1590, 1590, 1605,
+
+ 1590, 1590, 1606, 1590, 1590, 1590, 1607, 1607, 1607, 1607,
+ 1590, 1590, 1590, 1590, 1596, 1590, 1597, 1597, 1590, 1590,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 218, 1590, 1590,
+ 1597, 1590, 1590, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1590, 1590, 1598, 1598,
+ 1590, 1590, 1590, 1608, 1590, 1590, 90, 90, 298, 1590,
+
+ 1590, 1609, 1590, 98, 98, 98, 1598, 1598, 1598, 1598,
+ 98, 1598, 1598, 1598, 98, 98, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 98, 1598, 1599, 1599, 1610,
+ 1599, 1590, 1609, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1600, 1600, 1601,
+
+ 1590, 1602, 1602, 1603, 1603, 1604, 172, 172, 172, 1602,
+ 1602, 172, 172, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
+ 1602, 1602, 1602, 1602, 1602, 172, 1602, 172, 172, 1602,
+ 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
+ 1602, 1590, 1605, 1606, 1607, 1590, 1607, 1607, 1607, 1590,
+ 1590, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1598, 1608, 1609, 1598, 98,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 98, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1599, 1610, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1600, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
+ 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
+ 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
+ 1602, 1602, 1602, 1602, 1607, 1607, 1607, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1602,
+ 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1611, 1602, 1602,
+ 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
+ 1602, 1602, 1602, 1612, 1602, 1602, 1602, 1602, 1602, 1602,
+ 1602, 1607, 1607, 1607, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1598, 1598, 1598, 1598, 1598, 1598,
+
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1602, 1602, 1602, 1602, 1602, 1613, 1611, 1602, 1602, 1602,
+ 1602, 1602, 1602, 1602, 1602, 1602, 1614, 1612, 1602, 1602,
+ 1602, 1602, 1607, 1607, 1607, 1597, 1597, 1597, 1597, 1597,
+
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+
+ 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
+ 1602, 1602, 1607, 1607, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1602, 1602, 1602, 1602, 1602,
+
+ 1602, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1602, 1602, 1602, 1602, 1602, 1602, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1599, 1599, 1599,
+
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1598, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1598, 1598, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1598,
+ 1598, 1598, 1598, 1598, 1598, 1598, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+
+ 1599, 1599, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1598, 1598, 1598, 1598,
+ 1598, 1598, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1597, 1597, 1598, 1598, 1598, 1598,
+ 1598, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1598, 1598, 1598, 1598, 1598, 1598, 1599, 1599, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1598, 1598, 1598, 1599, 1599, 1599,
+
+ 1599, 1599, 1599, 1599, 1597, 1597, 1597, 1597, 1597, 1597,
+ 1597, 1598, 1598, 1598, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1599, 1597, 1597, 1597, 1597, 1597, 1597, 1598, 1598, 1599,
+ 1599, 1599, 1599, 1599, 1599, 1597, 1597, 1597, 1597, 1597,
+ 1598, 1598, 1599, 1599, 1599, 1599, 1599, 1597, 1597, 1597,
+ 1597, 1598, 1599, 1599, 1599, 1599, 1597, 1597, 1597, 1597,
+ 1598, 1599, 1599, 1599, 1599, 1597, 1597, 1597, 1597, 1598,
+ 1599, 1599, 1599, 1599, 1597, 1597, 1597, 1598, 1599, 1599,
+ 1599, 1597, 1597, 1599, 1599, 1597, 1599, 1597, 1599, 0,
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+ 1590, 1590, 1590, 1590
+ } ;
+
+static yyconst flex_int16_t yy_nxt[2632] =
+ { 0,
+ 21, 22, 23, 24, 25, 21, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 35, 54, 55, 56, 57, 58,
+ 59, 60, 61, 62, 63, 35, 64, 35, 35, 35,
+ 35, 65, 35, 66, 21, 35, 67, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 68, 35, 35, 69,
+ 35, 35, 70, 35, 35, 35, 35, 71, 72, 73,
+ 74, 75, 76, 23, 77, 78, 75, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
+ 102, 103, 104, 88, 105, 88, 106, 107, 108, 109,
+ 110, 111, 88, 88, 112, 88, 88, 88, 88, 88,
+ 88, 88, 113, 88, 114, 75, 88, 115, 103, 103,
+ 103, 103, 103, 88, 88, 88, 88, 88, 88, 88,
+ 88, 88, 88, 116, 88, 88, 88, 88, 117, 118,
+ 119, 120, 75, 76, 23, 77, 78, 75, 121, 80,
+ 81, 82, 83, 84, 85, 86, 122, 123, 124, 125,
+ 126, 92, 93, 94, 95, 96, 97, 127, 128, 129,
+ 130, 131, 132, 133, 134, 135, 123, 136, 137, 138,
+
+ 139, 140, 141, 142, 143, 144, 145, 123, 146, 123,
+ 123, 123, 123, 113, 123, 114, 75, 123, 147, 123,
+ 123, 123, 123, 123, 123, 123, 123, 123, 148, 123,
+ 123, 149, 123, 123, 150, 123, 123, 123, 123, 117,
+ 118, 119, 151, 75, 75, 20, 75, 75, 75, 152,
+ 75, 75, 75, 75, 75, 153, 75, 154, 224, 287,
+ 125, 126, 75, 75, 75, 156, 75, 75, 219, 225,
+ 229, 230, 198, 199, 198, 199, 200, 961, 200, 232,
+ 233, 234, 220, 235, 246, 236, 240, 201, 247, 201,
+ 241, 237, 244, 242, 75, 245, 75, 75, 238, 239,
+
+ 249, 251, 248, 258, 252, 260, 243, 253, 262, 261,
+ 250, 293, 287, 259, 434, 288, 229, 230, 263, 435,
+ 75, 75, 75, 75, 75, 20, 75, 75, 75, 152,
+ 75, 75, 75, 75, 75, 153, 75, 154, 226, 226,
+ 125, 126, 75, 75, 75, 156, 75, 75, 202, 268,
+ 202, 219, 295, 264, 300, 294, 227, 265, 227, 269,
+ 266, 267, 322, 296, 962, 220, 232, 233, 288, 228,
+ 324, 300, 323, 295, 75, 326, 75, 75, 325, 272,
+ 439, 300, 273, 274, 341, 327, 227, 359, 227, 275,
+ 276, 277, 963, 440, 278, 279, 228, 360, 300, 280,
+
+ 75, 75, 75, 21, 22, 157, 24, 21, 158, 159,
+ 27, 28, 29, 30, 160, 161, 162, 163, 164, 165,
+ 166, 167, 168, 169, 41, 170, 43, 171, 172, 173,
+ 174, 175, 176, 177, 164, 164, 164, 164, 164, 178,
+ 164, 179, 180, 181, 164, 164, 182, 183, 164, 164,
+ 164, 164, 164, 164, 184, 164, 185, 21, 164, 186,
+ 187, 188, 175, 189, 190, 164, 164, 164, 164, 191,
+ 164, 192, 193, 194, 164, 195, 196, 164, 164, 164,
+ 71, 72, 73, 197, 21, 198, 199, 21, 21, 200,
+ 964, 21, 21, 21, 21, 21, 21, 204, 21, 293,
+
+ 201, 21, 21, 204, 204, 21, 21, 21, 21, 226,
+ 226, 423, 483, 311, 328, 311, 354, 332, 329, 355,
+ 312, 333, 330, 313, 446, 484, 424, 227, 334, 227,
+ 289, 289, 311, 335, 311, 21, 21, 21, 21, 462,
+ 350, 463, 289, 340, 351, 314, 368, 352, 361, 289,
+ 289, 362, 418, 446, 363, 965, 369, 227, 419, 227,
+ 353, 205, 21, 206, 21, 21, 198, 199, 21, 21,
+ 200, 966, 21, 21, 21, 21, 21, 21, 204, 21,
+ 447, 201, 21, 21, 204, 204, 21, 21, 21, 21,
+ 315, 311, 356, 311, 316, 469, 357, 311, 370, 311,
+
+ 448, 289, 371, 311, 446, 311, 372, 289, 317, 289,
+ 358, 446, 470, 289, 289, 289, 21, 21, 21, 21,
+ 289, 289, 344, 373, 345, 318, 346, 375, 379, 446,
+ 300, 376, 347, 374, 377, 378, 446, 456, 380, 348,
+ 349, 844, 205, 21, 206, 21, 21, 198, 199, 457,
+ 25, 200, 842, 21, 21, 21, 21, 300, 21, 204,
+ 412, 409, 201, 21, 21, 204, 204, 21, 21, 21,
+ 311, 402, 311, 409, 383, 657, 811, 384, 385, 449,
+ 289, 967, 812, 402, 386, 387, 388, 289, 289, 389,
+ 390, 413, 409, 409, 391, 541, 533, 409, 414, 534,
+
+ 446, 336, 402, 402, 542, 415, 208, 402, 209, 446,
+ 417, 409, 210, 488, 968, 416, 489, 526, 969, 527,
+ 409, 402, 490, 211, 21, 212, 21, 21, 198, 199,
+ 402, 25, 200, 970, 21, 21, 21, 21, 843, 21,
+ 204, 586, 426, 201, 21, 21, 204, 204, 21, 21,
+ 21, 427, 342, 342, 587, 499, 409, 500, 409, 971,
+ 572, 501, 431, 655, 342, 342, 402, 522, 402, 432,
+ 301, 217, 301, 217, 226, 226, 565, 573, 566, 523,
+ 409, 972, 301, 343, 301, 559, 428, 208, 429, 209,
+ 402, 588, 227, 210, 227, 430, 973, 560, 974, 589,
+
+ 301, 217, 301, 217, 211, 21, 212, 21, 218, 218,
+ 343, 975, 301, 978, 301, 979, 218, 218, 218, 218,
+ 218, 218, 227, 433, 227, 476, 298, 298, 477, 579,
+ 478, 604, 580, 605, 581, 980, 981, 606, 479, 982,
+ 983, 480, 582, 984, 1590, 583, 1590, 218, 218, 218,
+ 218, 218, 218, 290, 290, 446, 985, 300, 986, 409,
+ 989, 290, 290, 290, 290, 290, 290, 409, 311, 402,
+ 311, 311, 990, 311, 1590, 991, 1590, 402, 289, 992,
+ 409, 289, 446, 996, 300, 289, 289, 997, 519, 289,
+ 402, 998, 290, 290, 290, 290, 290, 290, 297, 297,
+
+ 446, 342, 342, 999, 1000, 656, 298, 299, 298, 299,
+ 298, 298, 1003, 300, 409, 311, 301, 520, 301, 301,
+ 300, 301, 827, 1004, 402, 289, 639, 593, 828, 302,
+ 594, 623, 289, 289, 993, 1005, 595, 298, 299, 298,
+ 299, 298, 298, 311, 300, 311, 301, 995, 301, 301,
+ 300, 301, 446, 289, 409, 1006, 302, 304, 304, 1007,
+ 289, 289, 1008, 409, 402, 304, 305, 304, 306, 304,
+ 304, 625, 307, 402, 1001, 311, 308, 311, 1009, 307,
+ 626, 1010, 1011, 309, 310, 289, 1012, 1013, 307, 994,
+ 1014, 1002, 289, 528, 1015, 409, 304, 311, 304, 311,
+
+ 304, 304, 311, 307, 311, 402, 529, 1016, 409, 307,
+ 1017, 1018, 289, 1019, 1020, 307, 339, 339, 402, 289,
+ 289, 311, 1021, 311, 339, 339, 339, 339, 339, 339,
+ 311, 289, 311, 301, 1022, 301, 1023, 1024, 289, 289,
+ 289, 641, 1025, 1026, 1027, 1028, 719, 289, 289, 1029,
+ 1030, 1031, 1032, 1033, 642, 339, 339, 339, 339, 339,
+ 339, 399, 399, 301, 1034, 301, 1035, 551, 1036, 399,
+ 399, 399, 399, 399, 399, 311, 1037, 311, 1038, 1039,
+ 1040, 1041, 728, 1042, 1043, 289, 1044, 1045, 1046, 1047,
+ 1048, 1049, 289, 289, 1050, 1051, 1052, 1053, 1054, 1055,
+
+ 399, 399, 399, 399, 399, 399, 403, 403, 1056, 1057,
+ 1058, 1059, 1060, 1061, 403, 403, 403, 403, 403, 403,
+ 1062, 1063, 1064, 1065, 1067, 1068, 1069, 1070, 1071, 1072,
+ 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082,
+ 1066, 1083, 1084, 1085, 1086, 403, 403, 403, 403, 403,
+ 403, 407, 407, 1087, 1088, 1089, 1090, 1091, 1092, 407,
+ 408, 407, 409, 407, 407, 1093, 410, 1094, 1095, 1096,
+ 411, 1097, 1098, 410, 1099, 1100, 1101, 1102, 1103, 1104,
+ 1105, 1106, 410, 1107, 1108, 1109, 1110, 1111, 1112, 446,
+ 407, 409, 407, 409, 407, 407, 446, 410, 446, 1115,
+
+ 1116, 1117, 1118, 410, 1119, 1120, 1121, 1122, 1123, 410,
+ 218, 218, 1124, 1125, 1126, 1127, 1128, 1129, 218, 218,
+ 218, 218, 218, 218, 1130, 1131, 1132, 1133, 227, 1134,
+ 227, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1113, 1142,
+ 1143, 1144, 1145, 1114, 1146, 1147, 1148, 1149, 1150, 218,
+ 218, 218, 218, 218, 218, 1151, 1152, 1153, 227, 1154,
+ 227, 290, 290, 1155, 1156, 1157, 1158, 1159, 1160, 290,
+ 290, 290, 290, 290, 290, 1161, 1162, 1163, 1164, 516,
+ 1165, 516, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173,
+ 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183,
+
+ 290, 290, 290, 290, 290, 290, 1184, 1185, 1186, 516,
+ 1187, 516, 339, 339, 1188, 1189, 1190, 1191, 1192, 1193,
+ 339, 339, 339, 339, 339, 339, 1194, 1195, 1196, 1197,
+ 553, 1198, 553, 1199, 1200, 1201, 446, 446, 1202, 1203,
+ 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213,
+ 1216, 339, 339, 339, 339, 339, 339, 1217, 1218, 1219,
+ 553, 1214, 553, 399, 399, 1220, 1215, 1221, 1222, 1223,
+ 1224, 399, 399, 399, 399, 399, 399, 1225, 1226, 1227,
+ 1228, 621, 1229, 621, 1230, 1231, 1232, 1233, 1234, 1235,
+ 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245,
+
+ 1246, 1247, 399, 399, 399, 399, 399, 399, 1248, 1249,
+ 1250, 621, 1251, 621, 403, 403, 1252, 1254, 1255, 1256,
+ 1257, 1253, 403, 403, 403, 403, 403, 403, 1258, 1259,
+ 1260, 1261, 622, 1262, 622, 1263, 1264, 1265, 1266, 1267,
+ 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277,
+ 1278, 1279, 1280, 403, 403, 403, 403, 403, 403, 1281,
+ 1282, 1283, 622, 1284, 622, 976, 976, 1285, 976, 976,
+ 976, 1286, 976, 976, 976, 976, 976, 1288, 976, 1289,
+ 1290, 1291, 1292, 1293, 1287, 976, 976, 976, 976, 976,
+ 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303,
+
+ 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313,
+ 1314, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 976,
+ 1324, 1326, 1327, 1315, 1328, 1329, 1330, 1331, 1325, 1332,
+ 1333, 1334, 1335, 1336, 1337, 1338, 1341, 1342, 1343, 1339,
+ 1344, 1345, 976, 976, 976, 987, 987, 1340, 987, 987,
+ 987, 1346, 987, 987, 987, 987, 987, 1347, 987, 1348,
+ 1349, 1350, 1351, 1352, 1354, 987, 987, 987, 987, 987,
+ 1355, 1353, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363,
+ 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373,
+ 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 987,
+
+ 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392,
+ 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402,
+ 1403, 1404, 987, 987, 987, 976, 976, 1405, 976, 976,
+ 976, 1406, 976, 976, 976, 976, 976, 1407, 976, 1408,
+ 1409, 1410, 1411, 1412, 1413, 976, 976, 976, 976, 976,
+ 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423,
+ 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433,
+ 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 976,
+ 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452,
+ 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462,
+
+ 1466, 1467, 976, 976, 976, 987, 987, 1463, 987, 987,
+ 987, 1464, 987, 987, 987, 987, 987, 1468, 987, 1469,
+ 1470, 1471, 1475, 1476, 1465, 987, 987, 987, 987, 987,
+ 1472, 1477, 1478, 1479, 1473, 1482, 1483, 1480, 1484, 1485,
+ 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1474, 1493, 1494,
+ 1481, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 987,
+ 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512,
+ 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522,
+ 1523, 1524, 987, 987, 987, 1525, 1526, 1527, 1528, 1529,
+ 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539,
+
+ 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549,
+ 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559,
+ 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569,
+ 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579,
+ 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 203, 203, 203, 203, 203, 203, 203,
+ 203, 203, 203, 203, 207, 207, 207, 207, 207, 207,
+
+ 207, 207, 207, 207, 207, 215, 215, 215, 215, 215,
+ 215, 215, 215, 215, 215, 215, 217, 217, 217, 217,
+ 217, 217, 217, 217, 289, 518, 289, 960, 289, 289,
+ 289, 289, 338, 959, 338, 338, 338, 338, 338, 338,
+ 398, 958, 957, 956, 955, 398, 398, 398, 400, 400,
+ 400, 400, 400, 400, 400, 400, 400, 400, 400, 402,
+ 954, 402, 953, 402, 402, 402, 402, 404, 952, 404,
+ 404, 404, 404, 404, 404, 404, 404, 404, 406, 951,
+ 406, 406, 406, 406, 406, 406, 406, 406, 406, 443,
+ 950, 443, 443, 443, 443, 443, 443, 443, 443, 443,
+
+ 444, 949, 444, 445, 445, 445, 948, 947, 445, 445,
+ 946, 445, 517, 945, 517, 944, 517, 517, 517, 517,
+ 554, 943, 554, 554, 554, 554, 554, 554, 977, 942,
+ 977, 977, 977, 977, 977, 977, 977, 977, 977, 988,
+ 941, 988, 988, 988, 988, 988, 988, 988, 988, 988,
+ 976, 940, 976, 976, 976, 976, 976, 976, 976, 976,
+ 976, 987, 939, 987, 987, 987, 987, 987, 987, 987,
+ 987, 987, 938, 937, 936, 935, 934, 933, 932, 931,
+ 930, 929, 928, 927, 926, 925, 924, 923, 922, 921,
+ 920, 919, 918, 917, 916, 915, 914, 913, 912, 911,
+
+ 910, 909, 908, 907, 906, 905, 904, 903, 902, 901,
+ 900, 899, 898, 897, 896, 895, 894, 893, 892, 891,
+ 890, 889, 888, 887, 886, 885, 884, 883, 882, 881,
+ 880, 879, 878, 877, 876, 875, 874, 873, 872, 871,
+ 870, 869, 868, 867, 866, 865, 864, 863, 862, 861,
+ 860, 859, 858, 857, 856, 855, 854, 853, 852, 851,
+ 850, 849, 848, 847, 846, 845, 841, 840, 839, 838,
+ 837, 836, 835, 834, 833, 832, 831, 830, 829, 826,
+ 825, 824, 823, 822, 821, 820, 819, 818, 817, 816,
+ 815, 814, 813, 810, 809, 808, 807, 806, 805, 804,
+
+ 803, 802, 801, 800, 799, 798, 797, 796, 795, 794,
+ 793, 792, 791, 790, 789, 788, 787, 786, 785, 784,
+ 783, 782, 781, 780, 779, 778, 777, 776, 775, 774,
+ 773, 772, 771, 770, 769, 768, 767, 766, 765, 764,
+ 763, 762, 761, 760, 759, 758, 757, 756, 755, 754,
+ 753, 752, 751, 750, 749, 748, 747, 746, 745, 744,
+ 743, 742, 741, 740, 739, 738, 737, 736, 735, 734,
+ 733, 732, 731, 730, 729, 727, 726, 725, 724, 723,
+ 722, 721, 720, 718, 717, 716, 715, 714, 713, 712,
+ 711, 710, 709, 708, 707, 706, 705, 704, 703, 702,
+
+ 701, 700, 699, 698, 697, 696, 695, 694, 693, 692,
+ 691, 690, 689, 688, 687, 686, 685, 684, 683, 682,
+ 681, 680, 679, 678, 677, 676, 675, 674, 673, 672,
+ 671, 670, 669, 668, 667, 666, 665, 664, 663, 662,
+ 661, 660, 659, 658, 445, 446, 442, 654, 653, 652,
+ 651, 650, 649, 648, 647, 646, 645, 644, 643, 640,
+ 638, 637, 636, 635, 634, 633, 632, 631, 630, 629,
+ 628, 627, 624, 401, 620, 619, 618, 617, 616, 615,
+ 614, 613, 612, 611, 610, 609, 608, 607, 603, 602,
+ 601, 600, 599, 598, 597, 596, 592, 591, 590, 585,
+
+ 584, 578, 577, 576, 575, 574, 571, 570, 569, 568,
+ 567, 564, 563, 562, 561, 558, 557, 556, 555, 552,
+ 550, 549, 548, 547, 546, 545, 544, 543, 540, 539,
+ 538, 537, 536, 535, 532, 531, 530, 525, 524, 521,
+ 515, 514, 513, 512, 511, 510, 509, 508, 507, 506,
+ 505, 504, 503, 502, 498, 497, 496, 495, 494, 493,
+ 492, 491, 487, 486, 485, 482, 481, 475, 474, 473,
+ 472, 471, 468, 467, 466, 465, 464, 461, 460, 459,
+ 458, 455, 454, 453, 452, 451, 450, 216, 213, 446,
+ 295, 442, 441, 438, 437, 436, 425, 422, 421, 420,
+
+ 303, 296, 293, 292, 405, 401, 397, 396, 395, 394,
+ 393, 392, 382, 381, 367, 366, 365, 364, 337, 331,
+ 321, 320, 319, 303, 292, 291, 216, 214, 213, 286,
+ 285, 284, 283, 282, 281, 271, 270, 257, 256, 255,
+ 254, 231, 223, 222, 221, 216, 214, 213, 1590, 19,
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+ 1590
+ } ;
+
+static yyconst flex_int16_t yy_chk[2632] =
+ { 0,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 36, 72,
+ 9, 9, 9, 9, 9, 9, 9, 9, 28, 36,
+ 41, 41, 13, 13, 14, 14, 13, 800, 14, 43,
+ 43, 45, 28, 45, 48, 45, 46, 13, 48, 14,
+ 46, 45, 47, 46, 9, 47, 9, 9, 45, 45,
+
+ 49, 50, 48, 55, 50, 56, 46, 50, 57, 56,
+ 49, 87, 118, 55, 191, 72, 94, 94, 57, 191,
+ 9, 9, 9, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 37, 37,
+ 10, 10, 10, 10, 10, 10, 10, 10, 13, 59,
+ 14, 81, 89, 58, 91, 87, 37, 58, 37, 59,
+ 58, 58, 107, 89, 801, 81, 96, 96, 118, 37,
+ 108, 167, 107, 124, 10, 109, 10, 10, 108, 62,
+ 195, 91, 62, 62, 124, 109, 37, 131, 37, 62,
+ 62, 62, 802, 195, 62, 62, 37, 131, 167, 62,
+
+ 10, 10, 10, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 15, 15, 15, 15, 15, 15,
+ 803, 15, 15, 15, 15, 15, 15, 15, 15, 122,
+
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 38,
+ 38, 182, 259, 99, 110, 99, 129, 112, 110, 129,
+ 99, 112, 110, 99, 208, 259, 182, 38, 112, 38,
+ 99, 99, 100, 112, 100, 15, 15, 15, 15, 244,
+ 128, 244, 100, 122, 128, 100, 137, 128, 132, 100,
+ 100, 132, 178, 209, 132, 804, 137, 38, 178, 38,
+ 128, 15, 15, 15, 15, 16, 16, 16, 16, 16,
+ 16, 805, 16, 16, 16, 16, 16, 16, 16, 16,
+ 208, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 101, 101, 130, 101, 101, 250, 130, 103, 138, 103,
+
+ 209, 101, 138, 102, 657, 102, 138, 103, 101, 101,
+ 130, 655, 250, 102, 103, 103, 16, 16, 16, 16,
+ 102, 102, 127, 139, 127, 102, 127, 140, 141, 210,
+ 297, 140, 127, 139, 140, 140, 449, 238, 141, 127,
+ 127, 657, 16, 16, 16, 16, 17, 17, 17, 238,
+ 17, 17, 655, 17, 17, 17, 17, 297, 17, 17,
+ 173, 173, 17, 17, 17, 17, 17, 17, 17, 17,
+ 115, 173, 115, 175, 144, 449, 624, 144, 144, 210,
+ 115, 806, 624, 175, 144, 144, 144, 115, 115, 144,
+ 144, 174, 174, 176, 144, 327, 320, 177, 174, 320,
+
+ 656, 115, 174, 176, 327, 176, 17, 177, 17, 447,
+ 177, 186, 17, 263, 807, 176, 263, 314, 808, 314,
+ 189, 186, 263, 17, 17, 17, 17, 18, 18, 18,
+ 189, 18, 18, 809, 18, 18, 18, 18, 656, 18,
+ 18, 369, 186, 18, 18, 18, 18, 18, 18, 18,
+ 18, 186, 125, 125, 369, 272, 187, 272, 188, 810,
+ 360, 272, 189, 447, 126, 126, 187, 309, 188, 189,
+ 125, 228, 125, 228, 226, 226, 354, 360, 354, 309,
+ 190, 811, 126, 125, 126, 348, 187, 18, 188, 18,
+ 190, 370, 226, 18, 226, 188, 812, 348, 816, 370,
+
+ 125, 228, 125, 228, 18, 18, 18, 18, 26, 26,
+ 125, 817, 126, 821, 126, 822, 26, 26, 26, 26,
+ 26, 26, 226, 190, 226, 256, 298, 298, 256, 366,
+ 256, 383, 366, 383, 366, 824, 825, 383, 256, 826,
+ 827, 256, 366, 828, 298, 366, 298, 26, 26, 26,
+ 26, 26, 26, 79, 79, 448, 832, 298, 833, 407,
+ 837, 79, 79, 79, 79, 79, 79, 409, 304, 407,
+ 304, 305, 838, 305, 298, 840, 298, 409, 304, 841,
+ 426, 305, 842, 845, 298, 304, 304, 847, 305, 305,
+ 426, 848, 79, 79, 79, 79, 79, 79, 90, 90,
+
+ 844, 342, 342, 849, 850, 448, 90, 90, 90, 90,
+ 90, 90, 853, 90, 408, 306, 90, 306, 90, 342,
+ 90, 342, 640, 854, 408, 306, 426, 374, 640, 90,
+ 374, 408, 306, 306, 842, 855, 374, 90, 90, 90,
+ 90, 90, 90, 311, 90, 311, 90, 844, 90, 342,
+ 90, 342, 843, 311, 412, 858, 90, 98, 98, 859,
+ 311, 311, 861, 413, 412, 98, 98, 98, 98, 98,
+ 98, 412, 98, 413, 852, 315, 98, 315, 863, 98,
+ 413, 864, 866, 98, 98, 315, 867, 868, 98, 843,
+ 869, 852, 315, 315, 870, 428, 98, 98, 98, 98,
+
+ 98, 98, 316, 98, 316, 428, 316, 871, 429, 98,
+ 872, 873, 316, 874, 875, 98, 121, 121, 429, 316,
+ 316, 336, 876, 336, 121, 121, 121, 121, 121, 121,
+ 520, 336, 520, 518, 878, 518, 879, 880, 336, 336,
+ 520, 428, 881, 882, 884, 885, 520, 520, 520, 886,
+ 888, 889, 890, 891, 429, 121, 121, 121, 121, 121,
+ 121, 152, 152, 518, 892, 518, 893, 336, 894, 152,
+ 152, 152, 152, 152, 152, 529, 895, 529, 896, 897,
+ 898, 900, 529, 901, 902, 529, 904, 906, 907, 908,
+ 909, 910, 529, 529, 911, 912, 913, 914, 915, 916,
+
+ 152, 152, 152, 152, 152, 152, 159, 159, 917, 918,
+ 919, 920, 921, 923, 159, 159, 159, 159, 159, 159,
+ 924, 925, 926, 928, 929, 930, 931, 934, 935, 937,
+ 939, 940, 942, 943, 944, 945, 946, 947, 948, 949,
+ 928, 950, 951, 952, 954, 159, 159, 159, 159, 159,
+ 159, 172, 172, 955, 956, 957, 958, 960, 961, 172,
+ 172, 172, 172, 172, 172, 962, 172, 964, 965, 966,
+ 172, 967, 968, 172, 969, 970, 971, 973, 974, 975,
+ 979, 981, 172, 982, 984, 985, 986, 990, 992, 993,
+ 172, 172, 172, 172, 172, 172, 994, 172, 995, 996,
+
+ 997, 999, 1001, 172, 1002, 1003, 1004, 1005, 1006, 172,
+ 218, 218, 1008, 1009, 1010, 1013, 1015, 1016, 218, 218,
+ 218, 218, 218, 218, 1018, 1020, 1021, 1022, 218, 1023,
+ 218, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 993, 1031,
+ 1034, 1035, 1036, 994, 1037, 1038, 1040, 1041, 1042, 218,
+ 218, 218, 218, 218, 218, 1043, 1044, 1045, 218, 1047,
+ 218, 290, 290, 1048, 1050, 1052, 1053, 1054, 1055, 290,
+ 290, 290, 290, 290, 290, 1056, 1057, 1058, 1059, 290,
+ 1060, 290, 1061, 1063, 1065, 1066, 1067, 1068, 1069, 1070,
+ 1072, 1073, 1074, 1077, 1079, 1080, 1082, 1084, 1085, 1086,
+
+ 290, 290, 290, 290, 290, 290, 1087, 1088, 1089, 290,
+ 1090, 290, 339, 339, 1091, 1092, 1093, 1094, 1095, 1098,
+ 339, 339, 339, 339, 339, 339, 1099, 1100, 1101, 1102,
+ 339, 1106, 339, 1107, 1108, 1112, 1113, 1114, 1115, 1117,
+ 1118, 1119, 1120, 1121, 1123, 1124, 1126, 1127, 1128, 1130,
+ 1133, 339, 339, 339, 339, 339, 339, 1134, 1135, 1136,
+ 339, 1131, 339, 399, 399, 1137, 1131, 1138, 1139, 1142,
+ 1144, 399, 399, 399, 399, 399, 399, 1145, 1146, 1148,
+ 1149, 399, 1150, 399, 1152, 1154, 1155, 1156, 1158, 1159,
+ 1160, 1162, 1163, 1164, 1165, 1167, 1168, 1169, 1170, 1171,
+
+ 1173, 1174, 399, 399, 399, 399, 399, 399, 1176, 1177,
+ 1178, 399, 1180, 399, 403, 403, 1181, 1183, 1184, 1185,
+ 1186, 1181, 403, 403, 403, 403, 403, 403, 1187, 1188,
+ 1189, 1192, 403, 1194, 403, 1195, 1196, 1197, 1198, 1199,
+ 1200, 1201, 1203, 1205, 1206, 1207, 1208, 1209, 1210, 1212,
+ 1213, 1214, 1215, 403, 403, 403, 403, 403, 403, 1216,
+ 1217, 1218, 403, 1220, 403, 818, 818, 1221, 818, 818,
+ 818, 1222, 818, 818, 818, 818, 818, 1225, 818, 1227,
+ 1229, 1230, 1232, 1233, 1222, 818, 818, 818, 818, 818,
+ 1234, 1235, 1236, 1239, 1241, 1243, 1244, 1245, 1246, 1247,
+
+ 1248, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1258, 1259,
+ 1260, 1263, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 818,
+ 1278, 1279, 1280, 1260, 1281, 1282, 1283, 1284, 1278, 1285,
+ 1286, 1287, 1288, 1290, 1291, 1292, 1294, 1295, 1296, 1293,
+ 1297, 1299, 818, 818, 818, 834, 834, 1293, 834, 834,
+ 834, 1300, 834, 834, 834, 834, 834, 1301, 834, 1302,
+ 1303, 1304, 1305, 1306, 1307, 834, 834, 834, 834, 834,
+ 1308, 1306, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316,
+ 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1326, 1327, 1328,
+ 1329, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 834,
+
+ 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350,
+ 1351, 1354, 1355, 1356, 1357, 1359, 1360, 1361, 1362, 1363,
+ 1364, 1365, 834, 834, 834, 977, 977, 1366, 977, 977,
+ 977, 1367, 977, 977, 977, 977, 977, 1368, 977, 1369,
+ 1372, 1373, 1374, 1375, 1376, 977, 977, 977, 977, 977,
+ 1377, 1378, 1379, 1380, 1381, 1383, 1384, 1385, 1386, 1387,
+ 1388, 1389, 1390, 1391, 1392, 1395, 1396, 1397, 1398, 1399,
+ 1400, 1401, 1402, 1404, 1405, 1407, 1408, 1409, 1410, 977,
+ 1412, 1413, 1414, 1416, 1417, 1419, 1420, 1421, 1422, 1424,
+ 1425, 1427, 1428, 1429, 1430, 1432, 1433, 1434, 1436, 1437,
+
+ 1439, 1440, 977, 977, 977, 988, 988, 1438, 988, 988,
+ 988, 1438, 988, 988, 988, 988, 988, 1442, 988, 1444,
+ 1445, 1446, 1448, 1450, 1438, 988, 988, 988, 988, 988,
+ 1447, 1451, 1452, 1453, 1447, 1454, 1455, 1453, 1457, 1459,
+ 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1447, 1467, 1470,
+ 1453, 1472, 1473, 1474, 1478, 1479, 1480, 1481, 1482, 988,
+ 1483, 1486, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495,
+ 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505,
+ 1506, 1508, 988, 988, 988, 1509, 1510, 1511, 1512, 1514,
+ 1515, 1516, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525,
+
+ 1526, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1536, 1538,
+ 1539, 1540, 1542, 1543, 1545, 1546, 1547, 1548, 1549, 1550,
+ 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560,
+ 1561, 1562, 1563, 1564, 1565, 1567, 1568, 1569, 1570, 1572,
+ 1573, 1574, 1576, 1577, 1580, 1581, 1583, 1585, 1586, 1587,
+ 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591,
+ 1591, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593,
+ 1593, 1593, 1593, 1594, 1594, 1594, 1594, 1594, 1594, 1594,
+ 1594, 1594, 1594, 1594, 1595, 1595, 1595, 1595, 1595, 1595,
+
+ 1595, 1595, 1595, 1595, 1595, 1596, 1596, 1596, 1596, 1596,
+ 1596, 1596, 1596, 1596, 1596, 1596, 1597, 1597, 1597, 1597,
+ 1597, 1597, 1597, 1597, 1598, 1609, 1598, 799, 1598, 1598,
+ 1598, 1598, 1599, 798, 1599, 1599, 1599, 1599, 1599, 1599,
+ 1600, 797, 796, 795, 794, 1600, 1600, 1600, 1601, 1601,
+ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1602,
+ 792, 1602, 791, 1602, 1602, 1602, 1602, 1603, 790, 1603,
+ 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1604, 789,
+ 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1605,
+ 788, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605,
+
+ 1606, 787, 1606, 1607, 1607, 1607, 786, 785, 1607, 1607,
+ 784, 1607, 1608, 782, 1608, 780, 1608, 1608, 1608, 1608,
+ 1610, 779, 1610, 1610, 1610, 1610, 1610, 1610, 1611, 777,
+ 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1612,
+ 776, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612,
+ 1613, 775, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+ 1613, 1614, 773, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
+ 1614, 1614, 772, 771, 770, 768, 767, 766, 765, 764,
+ 763, 762, 760, 758, 756, 755, 754, 753, 752, 750,
+ 749, 748, 747, 746, 745, 744, 743, 742, 741, 740,
+
+ 739, 738, 736, 735, 732, 731, 730, 729, 728, 727,
+ 725, 724, 722, 721, 720, 718, 717, 716, 715, 714,
+ 713, 712, 711, 710, 709, 708, 707, 706, 705, 704,
+ 703, 702, 700, 699, 698, 697, 696, 695, 694, 693,
+ 692, 690, 688, 687, 685, 684, 683, 681, 680, 679,
+ 678, 676, 675, 674, 673, 672, 671, 670, 668, 666,
+ 664, 663, 662, 661, 660, 658, 654, 653, 652, 651,
+ 650, 649, 648, 647, 646, 645, 643, 642, 641, 639,
+ 638, 637, 636, 635, 634, 633, 632, 631, 630, 629,
+ 627, 626, 625, 623, 620, 617, 616, 615, 614, 613,
+
+ 612, 611, 610, 609, 608, 607, 606, 605, 604, 603,
+ 602, 601, 600, 599, 598, 597, 596, 595, 594, 593,
+ 592, 590, 587, 586, 585, 584, 583, 582, 581, 580,
+ 579, 577, 576, 575, 574, 573, 572, 571, 570, 569,
+ 568, 567, 566, 565, 564, 563, 562, 561, 560, 559,
+ 558, 557, 556, 555, 552, 551, 550, 549, 548, 547,
+ 546, 545, 544, 543, 542, 541, 540, 537, 536, 535,
+ 534, 533, 532, 531, 530, 528, 527, 526, 525, 524,
+ 523, 522, 521, 519, 515, 512, 511, 510, 509, 508,
+ 507, 506, 505, 504, 503, 502, 501, 500, 499, 498,
+
+ 497, 496, 495, 494, 493, 492, 491, 490, 489, 488,
+ 487, 486, 484, 483, 482, 481, 480, 479, 478, 477,
+ 476, 474, 473, 472, 471, 470, 469, 468, 467, 466,
+ 465, 464, 463, 462, 461, 460, 459, 458, 457, 456,
+ 455, 454, 453, 452, 446, 445, 442, 441, 440, 439,
+ 438, 437, 436, 435, 434, 433, 432, 431, 430, 427,
+ 425, 424, 423, 422, 421, 420, 419, 418, 417, 416,
+ 415, 414, 411, 400, 397, 396, 395, 394, 393, 392,
+ 391, 390, 389, 388, 387, 386, 385, 384, 382, 381,
+ 380, 379, 378, 377, 376, 375, 373, 372, 371, 368,
+
+ 367, 365, 364, 363, 362, 361, 359, 358, 357, 356,
+ 355, 353, 352, 351, 350, 347, 346, 345, 344, 337,
+ 335, 334, 333, 332, 331, 330, 329, 328, 326, 325,
+ 324, 323, 322, 321, 319, 318, 317, 313, 312, 308,
+ 286, 285, 284, 283, 282, 281, 280, 279, 278, 277,
+ 276, 275, 274, 273, 271, 270, 269, 268, 267, 266,
+ 265, 264, 262, 261, 260, 258, 257, 255, 254, 253,
+ 252, 251, 249, 248, 247, 246, 245, 243, 242, 241,
+ 240, 237, 236, 235, 234, 233, 229, 215, 213, 207,
+ 201, 198, 196, 194, 193, 192, 183, 181, 180, 179,
+
+ 170, 165, 163, 161, 160, 158, 150, 149, 148, 147,
+ 146, 145, 143, 142, 136, 135, 134, 133, 116, 111,
+ 106, 105, 104, 95, 85, 84, 78, 77, 76, 70,
+ 69, 68, 67, 64, 63, 61, 60, 54, 53, 52,
+ 51, 42, 34, 32, 31, 25, 24, 22, 19, 1590,
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+ 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+ 1590
+ } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int yy_flex_debug;
+int yy_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "ldlex.l"
+#line 2 "ldlex.l"
+
+/* Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ Free Software Foundation, Inc.
+ Written by Steve Chamberlain of Cygnus Support.
+
+ This file is part of the GNU Binutils.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "safe-ctype.h"
+#include "bfdlink.h"
+#include "ld.h"
+#include "ldmisc.h"
+#include "ldexp.h"
+#include "ldlang.h"
+#include <ldgram.h>
+#include "ldfile.h"
+#include "ldlex.h"
+#include "ldmain.h"
+#include "libiberty.h"
+
+/* The type of top-level parser input.
+ yylex and yyparse (indirectly) both check this. */
+input_type parser_input;
+
+/* Line number in the current input file.
+ (FIXME Actually, it doesn't appear to get reset for each file?) */
+unsigned int lineno = 1;
+
+/* The string we are currently lexing, or NULL if we are reading a
+ file. */
+const char *lex_string = NULL;
+
+/* Support for flex reading from more than one input file (stream).
+ `include_stack' is flex's input state for each open file;
+ `file_name_stack' is the file names. `lineno_stack' is the current
+ line numbers.
+
+ If `include_stack_ptr' is 0, we haven't started reading anything yet.
+ Otherwise, stack elements 0 through `include_stack_ptr - 1' are valid. */
+
+#undef YY_INPUT
+#define YY_INPUT(buf,result,max_size) result = yy_input (buf, max_size)
+
+#define YY_NO_UNPUT
+
+#define MAX_INCLUDE_DEPTH 10
+static YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
+static const char *file_name_stack[MAX_INCLUDE_DEPTH];
+static unsigned int lineno_stack[MAX_INCLUDE_DEPTH];
+static unsigned int include_stack_ptr = 0;
+static int vers_node_nesting = 0;
+
+static int yy_input (char *, int);
+static void comment (void);
+static void lex_warn_invalid (char *where, char *what);
+
+/* STATES
+ EXPRESSION definitely in an expression
+ SCRIPT definitely in a script
+ BOTH either EXPRESSION or SCRIPT
+ DEFSYMEXP in an argument to -defsym
+ MRI in an MRI script
+ VERS_START starting a Sun style mapfile
+ VERS_SCRIPT a Sun style mapfile
+ VERS_NODE a node within a Sun style mapfile
+*/
+#define RTOKEN(x) { yylval.token = x; return x; }
+
+/* Some versions of flex want this. */
+#ifndef yywrap
+int yywrap (void) { return 1; }
+#endif
+
+
+
+
+
+
+
+
+#line 1660 "ldlex.c"
+
+#define INITIAL 0
+#define SCRIPT 1
+#define EXPRESSION 2
+#define BOTH 3
+#define DEFSYMEXP 4
+#define MRI 5
+#define VERS_START 6
+#define VERS_SCRIPT 7
+#define VERS_NODE 8
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (void );
+
+int yyget_debug (void );
+
+void yyset_debug (int debug_flag );
+
+YY_EXTRA_TYPE yyget_extra (void );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined );
+
+FILE *yyget_in (void );
+
+void yyset_in (FILE * in_str );
+
+FILE *yyget_out (void );
+
+void yyset_out (FILE * out_str );
+
+yy_size_t yyget_leng (void );
+
+char *yyget_text (void );
+
+int yyget_lineno (void );
+
+void yyset_lineno (int line_number );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap (void );
+#else
+extern int yywrap (void );
+#endif
+#endif
+
+ static void yyunput (int c,char *buf_ptr );
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+ { \
+ int c = '*'; \
+ yy_size_t n; \
+ for ( n = 0; n < max_size && \
+ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ buf[n] = (char) c; \
+ if ( c == '\n' ) \
+ buf[n++] = (char) c; \
+ if ( c == EOF && ferror( yyin ) ) \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ result = n; \
+ } \
+ else \
+ { \
+ errno=0; \
+ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+ { \
+ if( errno != EINTR) \
+ { \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ break; \
+ } \
+ errno=0; \
+ clearerr(yyin); \
+ } \
+ }\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex (void);
+
+#define YY_DECL int yylex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+ YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
+
+#line 117 "ldlex.l"
+
+
+ if (parser_input != input_selected)
+ {
+ /* The first token of the input determines the initial parser state. */
+ input_type t = parser_input;
+ parser_input = input_selected;
+ switch (t)
+ {
+ case input_script: return INPUT_SCRIPT; break;
+ case input_mri_script: return INPUT_MRI_SCRIPT; break;
+ case input_version_script: return INPUT_VERSION_SCRIPT; break;
+ case input_dynamic_list: return INPUT_DYNAMIC_LIST; break;
+ case input_defsym: return INPUT_DEFSYM; break;
+ default: abort ();
+ }
+ }
+
+#line 1869 "ldlex.c"
+
+ if ( !(yy_init) )
+ {
+ (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+ YY_USER_INIT;
+#endif
+
+ if ( ! (yy_start) )
+ (yy_start) = 1; /* first start state */
+
+ if ( ! yyin )
+ yyin = stdin;
+
+ if ( ! yyout )
+ yyout = stdout;
+
+ if ( ! YY_CURRENT_BUFFER ) {
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
+
+ yy_load_buffer_state( );
+ }
+
+ while ( 1 ) /* loops until end-of-file is reached */
+ {
+ yy_cp = (yy_c_buf_p);
+
+ /* Support of yytext. */
+ *yy_cp = (yy_hold_char);
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+ yy_current_state = (yy_start);
+yy_match:
+ do
+ {
+ register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 1591 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ ++yy_cp;
+ }
+ while ( yy_base[yy_current_state] != 2550 );
+
+yy_find_action:
+ yy_act = yy_accept[yy_current_state];
+ if ( yy_act == 0 )
+ { /* have to back up */
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ yy_act = yy_accept[yy_current_state];
+ }
+
+ YY_DO_BEFORE_ACTION;
+
+do_action: /* This label is used only to access EOF actions. */
+
+ switch ( yy_act )
+ { /* beginning of action switch */
+ case 0: /* must back up */
+ /* undo the effects of YY_DO_BEFORE_ACTION */
+ *yy_cp = (yy_hold_char);
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 135 "ldlex.l"
+{ comment (); }
+ YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 138 "ldlex.l"
+{ RTOKEN('-');}
+ YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 139 "ldlex.l"
+{ RTOKEN('+');}
+ YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 140 "ldlex.l"
+{ yylval.name = xstrdup (yytext); return NAME; }
+ YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 141 "ldlex.l"
+{ RTOKEN('='); }
+ YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 143 "ldlex.l"
+{
+ yylval.integer = bfd_scan_vma (yytext + 1, 0, 16);
+ yylval.bigint.str = NULL;
+ return INT;
+ }
+ YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 149 "ldlex.l"
+{
+ int ibase ;
+ switch (yytext[yyleng - 1]) {
+ case 'X':
+ case 'x':
+ case 'H':
+ case 'h':
+ ibase = 16;
+ break;
+ case 'O':
+ case 'o':
+ ibase = 8;
+ break;
+ case 'B':
+ case 'b':
+ ibase = 2;
+ break;
+ default:
+ ibase = 10;
+ }
+ yylval.integer = bfd_scan_vma (yytext, 0,
+ ibase);
+ yylval.bigint.str = NULL;
+ return INT;
+ }
+ YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 174 "ldlex.l"
+{
+ char *s = yytext;
+ int ibase = 0;
+
+ if (*s == '$')
+ {
+ ++s;
+ ibase = 16;
+ }
+ yylval.integer = bfd_scan_vma (s, 0, ibase);
+ yylval.bigint.str = NULL;
+ if (yytext[yyleng - 1] == 'M'
+ || yytext[yyleng - 1] == 'm')
+ {
+ yylval.integer *= 1024 * 1024;
+ }
+ else if (yytext[yyleng - 1] == 'K'
+ || yytext[yyleng - 1]=='k')
+ {
+ yylval.integer *= 1024;
+ }
+ else if (yytext[0] == '0'
+ && (yytext[1] == 'x'
+ || yytext[1] == 'X'))
+ {
+ yylval.bigint.str = xstrdup (yytext + 2);
+ }
+ return INT;
+ }
+ YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 203 "ldlex.l"
+{ RTOKEN(']');}
+ YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 204 "ldlex.l"
+{ RTOKEN('[');}
+ YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 205 "ldlex.l"
+{ RTOKEN(LSHIFTEQ);}
+ YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 206 "ldlex.l"
+{ RTOKEN(RSHIFTEQ);}
+ YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 207 "ldlex.l"
+{ RTOKEN(OROR);}
+ YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 208 "ldlex.l"
+{ RTOKEN(EQ);}
+ YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 209 "ldlex.l"
+{ RTOKEN(NE);}
+ YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 210 "ldlex.l"
+{ RTOKEN(GE);}
+ YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 211 "ldlex.l"
+{ RTOKEN(LE);}
+ YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 212 "ldlex.l"
+{ RTOKEN(LSHIFT);}
+ YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 213 "ldlex.l"
+{ RTOKEN(RSHIFT);}
+ YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 214 "ldlex.l"
+{ RTOKEN(PLUSEQ);}
+ YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 215 "ldlex.l"
+{ RTOKEN(MINUSEQ);}
+ YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 216 "ldlex.l"
+{ RTOKEN(MULTEQ);}
+ YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 217 "ldlex.l"
+{ RTOKEN(DIVEQ);}
+ YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 218 "ldlex.l"
+{ RTOKEN(ANDEQ);}
+ YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 219 "ldlex.l"
+{ RTOKEN(OREQ);}
+ YY_BREAK
+case 26:
+YY_RULE_SETUP
+#line 220 "ldlex.l"
+{ RTOKEN(ANDAND);}
+ YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 221 "ldlex.l"
+{ RTOKEN('>');}
+ YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 222 "ldlex.l"
+{ RTOKEN(',');}
+ YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 223 "ldlex.l"
+{ RTOKEN('&');}
+ YY_BREAK
+case 30:
+YY_RULE_SETUP
+#line 224 "ldlex.l"
+{ RTOKEN('|');}
+ YY_BREAK
+case 31:
+YY_RULE_SETUP
+#line 225 "ldlex.l"
+{ RTOKEN('~');}
+ YY_BREAK
+case 32:
+YY_RULE_SETUP
+#line 226 "ldlex.l"
+{ RTOKEN('!');}
+ YY_BREAK
+case 33:
+YY_RULE_SETUP
+#line 227 "ldlex.l"
+{ RTOKEN('?');}
+ YY_BREAK
+case 34:
+YY_RULE_SETUP
+#line 228 "ldlex.l"
+{ RTOKEN('*');}
+ YY_BREAK
+case 35:
+YY_RULE_SETUP
+#line 229 "ldlex.l"
+{ RTOKEN('+');}
+ YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 230 "ldlex.l"
+{ RTOKEN('-');}
+ YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 231 "ldlex.l"
+{ RTOKEN('/');}
+ YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 232 "ldlex.l"
+{ RTOKEN('%');}
+ YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 233 "ldlex.l"
+{ RTOKEN('<');}
+ YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 234 "ldlex.l"
+{ RTOKEN('=');}
+ YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 235 "ldlex.l"
+{ RTOKEN('}') ; }
+ YY_BREAK
+case 42:
+YY_RULE_SETUP
+#line 236 "ldlex.l"
+{ RTOKEN('{'); }
+ YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 237 "ldlex.l"
+{ RTOKEN(')');}
+ YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 238 "ldlex.l"
+{ RTOKEN('(');}
+ YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 239 "ldlex.l"
+{ RTOKEN(':'); }
+ YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 240 "ldlex.l"
+{ RTOKEN(';');}
+ YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 241 "ldlex.l"
+{ RTOKEN(MEMORY);}
+ YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 242 "ldlex.l"
+{ RTOKEN(REGION_ALIAS);}
+ YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 243 "ldlex.l"
+{ RTOKEN(ORIGIN);}
+ YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 244 "ldlex.l"
+{ RTOKEN(VERSIONK);}
+ YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 245 "ldlex.l"
+{ RTOKEN(BLOCK);}
+ YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 246 "ldlex.l"
+{ RTOKEN(BIND);}
+ YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 247 "ldlex.l"
+{ RTOKEN(LENGTH);}
+ YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 248 "ldlex.l"
+{ RTOKEN(ALIGN_K);}
+ YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 249 "ldlex.l"
+{ RTOKEN(DATA_SEGMENT_ALIGN);}
+ YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 250 "ldlex.l"
+{ RTOKEN(DATA_SEGMENT_RELRO_END);}
+ YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 251 "ldlex.l"
+{ RTOKEN(DATA_SEGMENT_END);}
+ YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 252 "ldlex.l"
+{ RTOKEN(ADDR);}
+ YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 253 "ldlex.l"
+{ RTOKEN(LOADADDR);}
+ YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 254 "ldlex.l"
+{ RTOKEN(ALIGNOF); }
+ YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 255 "ldlex.l"
+{ RTOKEN(MAX_K); }
+ YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 256 "ldlex.l"
+{ RTOKEN(MIN_K); }
+ YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 257 "ldlex.l"
+{ RTOKEN(ASSERT_K); }
+ YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 258 "ldlex.l"
+{ RTOKEN(ENTRY);}
+ YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 259 "ldlex.l"
+{ RTOKEN(EXTERN);}
+ YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 260 "ldlex.l"
+{ RTOKEN(NEXT);}
+ YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 261 "ldlex.l"
+{ RTOKEN(SIZEOF_HEADERS);}
+ YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 262 "ldlex.l"
+{ RTOKEN(SIZEOF_HEADERS);}
+ YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 263 "ldlex.l"
+{ RTOKEN(SEGMENT_START);}
+ YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 264 "ldlex.l"
+{ RTOKEN(MAP);}
+ YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 265 "ldlex.l"
+{ RTOKEN(SIZEOF);}
+ YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 266 "ldlex.l"
+{ RTOKEN(TARGET_K);}
+ YY_BREAK
+case 73:
+YY_RULE_SETUP
+#line 267 "ldlex.l"
+{ RTOKEN(SEARCH_DIR);}
+ YY_BREAK
+case 74:
+YY_RULE_SETUP
+#line 268 "ldlex.l"
+{ RTOKEN(OUTPUT);}
+ YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 269 "ldlex.l"
+{ RTOKEN(INPUT);}
+ YY_BREAK
+case 76:
+YY_RULE_SETUP
+#line 270 "ldlex.l"
+{ RTOKEN(GROUP);}
+ YY_BREAK
+case 77:
+YY_RULE_SETUP
+#line 271 "ldlex.l"
+{ RTOKEN(AS_NEEDED);}
+ YY_BREAK
+case 78:
+YY_RULE_SETUP
+#line 272 "ldlex.l"
+{ RTOKEN(DEFINED);}
+ YY_BREAK
+case 79:
+YY_RULE_SETUP
+#line 273 "ldlex.l"
+{ RTOKEN(CREATE_OBJECT_SYMBOLS);}
+ YY_BREAK
+case 80:
+YY_RULE_SETUP
+#line 274 "ldlex.l"
+{ RTOKEN( CONSTRUCTORS);}
+ YY_BREAK
+case 81:
+YY_RULE_SETUP
+#line 275 "ldlex.l"
+{ RTOKEN(FORCE_COMMON_ALLOCATION);}
+ YY_BREAK
+case 82:
+YY_RULE_SETUP
+#line 276 "ldlex.l"
+{ RTOKEN(INHIBIT_COMMON_ALLOCATION);}
+ YY_BREAK
+case 83:
+YY_RULE_SETUP
+#line 277 "ldlex.l"
+{ RTOKEN(SECTIONS);}
+ YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 278 "ldlex.l"
+{ RTOKEN(INSERT_K);}
+ YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 279 "ldlex.l"
+{ RTOKEN(AFTER);}
+ YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 280 "ldlex.l"
+{ RTOKEN(BEFORE);}
+ YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 281 "ldlex.l"
+{ RTOKEN(FILL);}
+ YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 282 "ldlex.l"
+{ RTOKEN(STARTUP);}
+ YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 283 "ldlex.l"
+{ RTOKEN(OUTPUT_FORMAT);}
+ YY_BREAK
+case 90:
+YY_RULE_SETUP
+#line 284 "ldlex.l"
+{ RTOKEN( OUTPUT_ARCH);}
+ YY_BREAK
+case 91:
+YY_RULE_SETUP
+#line 285 "ldlex.l"
+{ RTOKEN(HLL);}
+ YY_BREAK
+case 92:
+YY_RULE_SETUP
+#line 286 "ldlex.l"
+{ RTOKEN(SYSLIB);}
+ YY_BREAK
+case 93:
+YY_RULE_SETUP
+#line 287 "ldlex.l"
+{ RTOKEN(FLOAT);}
+ YY_BREAK
+case 94:
+YY_RULE_SETUP
+#line 288 "ldlex.l"
+{ RTOKEN( QUAD);}
+ YY_BREAK
+case 95:
+YY_RULE_SETUP
+#line 289 "ldlex.l"
+{ RTOKEN( SQUAD);}
+ YY_BREAK
+case 96:
+YY_RULE_SETUP
+#line 290 "ldlex.l"
+{ RTOKEN( LONG);}
+ YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 291 "ldlex.l"
+{ RTOKEN( SHORT);}
+ YY_BREAK
+case 98:
+YY_RULE_SETUP
+#line 292 "ldlex.l"
+{ RTOKEN( BYTE);}
+ YY_BREAK
+case 99:
+YY_RULE_SETUP
+#line 293 "ldlex.l"
+{ RTOKEN(NOFLOAT);}
+ YY_BREAK
+case 100:
+YY_RULE_SETUP
+#line 294 "ldlex.l"
+{ RTOKEN(NOCROSSREFS);}
+ YY_BREAK
+case 101:
+YY_RULE_SETUP
+#line 295 "ldlex.l"
+{ RTOKEN(OVERLAY); }
+ YY_BREAK
+case 102:
+YY_RULE_SETUP
+#line 296 "ldlex.l"
+{ RTOKEN(SORT_BY_NAME); }
+ YY_BREAK
+case 103:
+YY_RULE_SETUP
+#line 297 "ldlex.l"
+{ RTOKEN(SORT_BY_ALIGNMENT); }
+ YY_BREAK
+case 104:
+YY_RULE_SETUP
+#line 298 "ldlex.l"
+{ RTOKEN(SORT_BY_NAME); }
+ YY_BREAK
+case 105:
+YY_RULE_SETUP
+#line 299 "ldlex.l"
+{ RTOKEN(NOLOAD);}
+ YY_BREAK
+case 106:
+YY_RULE_SETUP
+#line 300 "ldlex.l"
+{ RTOKEN(DSECT);}
+ YY_BREAK
+case 107:
+YY_RULE_SETUP
+#line 301 "ldlex.l"
+{ RTOKEN(COPY);}
+ YY_BREAK
+case 108:
+YY_RULE_SETUP
+#line 302 "ldlex.l"
+{ RTOKEN(INFO);}
+ YY_BREAK
+case 109:
+YY_RULE_SETUP
+#line 303 "ldlex.l"
+{ RTOKEN(OVERLAY);}
+ YY_BREAK
+case 110:
+YY_RULE_SETUP
+#line 304 "ldlex.l"
+{ RTOKEN(ONLY_IF_RO); }
+ YY_BREAK
+case 111:
+YY_RULE_SETUP
+#line 305 "ldlex.l"
+{ RTOKEN(ONLY_IF_RW); }
+ YY_BREAK
+case 112:
+YY_RULE_SETUP
+#line 306 "ldlex.l"
+{ RTOKEN(SPECIAL); }
+ YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 307 "ldlex.l"
+{ RTOKEN(ORIGIN);}
+ YY_BREAK
+case 114:
+YY_RULE_SETUP
+#line 308 "ldlex.l"
+{ RTOKEN(ORIGIN);}
+ YY_BREAK
+case 115:
+YY_RULE_SETUP
+#line 309 "ldlex.l"
+{ RTOKEN( LENGTH);}
+ YY_BREAK
+case 116:
+YY_RULE_SETUP
+#line 310 "ldlex.l"
+{ RTOKEN( LENGTH);}
+ YY_BREAK
+case 117:
+YY_RULE_SETUP
+#line 311 "ldlex.l"
+{ RTOKEN(INCLUDE);}
+ YY_BREAK
+case 118:
+YY_RULE_SETUP
+#line 312 "ldlex.l"
+{ RTOKEN (PHDRS); }
+ YY_BREAK
+case 119:
+YY_RULE_SETUP
+#line 313 "ldlex.l"
+{ RTOKEN(AT);}
+ YY_BREAK
+case 120:
+YY_RULE_SETUP
+#line 314 "ldlex.l"
+{ RTOKEN(SUBALIGN);}
+ YY_BREAK
+case 121:
+YY_RULE_SETUP
+#line 315 "ldlex.l"
+{ RTOKEN(PROVIDE); }
+ YY_BREAK
+case 122:
+YY_RULE_SETUP
+#line 316 "ldlex.l"
+{ RTOKEN(PROVIDE_HIDDEN); }
+ YY_BREAK
+case 123:
+YY_RULE_SETUP
+#line 317 "ldlex.l"
+{ RTOKEN(KEEP); }
+ YY_BREAK
+case 124:
+YY_RULE_SETUP
+#line 318 "ldlex.l"
+{ RTOKEN(EXCLUDE_FILE); }
+ YY_BREAK
+case 125:
+YY_RULE_SETUP
+#line 319 "ldlex.l"
+{ RTOKEN(CONSTANT);}
+ YY_BREAK
+case 126:
+/* rule 126 can match eol */
+YY_RULE_SETUP
+#line 320 "ldlex.l"
+{ ++ lineno; }
+ YY_BREAK
+case 127:
+/* rule 127 can match eol */
+YY_RULE_SETUP
+#line 321 "ldlex.l"
+{ ++ lineno; RTOKEN(NEWLINE); }
+ YY_BREAK
+case 128:
+YY_RULE_SETUP
+#line 322 "ldlex.l"
+{ /* Mri comment line */ }
+ YY_BREAK
+case 129:
+YY_RULE_SETUP
+#line 323 "ldlex.l"
+{ /* Mri comment line */ }
+ YY_BREAK
+case 130:
+YY_RULE_SETUP
+#line 324 "ldlex.l"
+{ RTOKEN(ENDWORD); }
+ YY_BREAK
+case 131:
+YY_RULE_SETUP
+#line 325 "ldlex.l"
+{ RTOKEN(ALIGNMOD);}
+ YY_BREAK
+case 132:
+YY_RULE_SETUP
+#line 326 "ldlex.l"
+{ RTOKEN(ALIGN_K);}
+ YY_BREAK
+case 133:
+YY_RULE_SETUP
+#line 327 "ldlex.l"
+{ RTOKEN(CHIP); }
+ YY_BREAK
+case 134:
+YY_RULE_SETUP
+#line 328 "ldlex.l"
+{ RTOKEN(BASE); }
+ YY_BREAK
+case 135:
+YY_RULE_SETUP
+#line 329 "ldlex.l"
+{ RTOKEN(ALIAS); }
+ YY_BREAK
+case 136:
+YY_RULE_SETUP
+#line 330 "ldlex.l"
+{ RTOKEN(TRUNCATE); }
+ YY_BREAK
+case 137:
+YY_RULE_SETUP
+#line 331 "ldlex.l"
+{ RTOKEN(LOAD); }
+ YY_BREAK
+case 138:
+YY_RULE_SETUP
+#line 332 "ldlex.l"
+{ RTOKEN(PUBLIC); }
+ YY_BREAK
+case 139:
+YY_RULE_SETUP
+#line 333 "ldlex.l"
+{ RTOKEN(ORDER); }
+ YY_BREAK
+case 140:
+YY_RULE_SETUP
+#line 334 "ldlex.l"
+{ RTOKEN(NAMEWORD); }
+ YY_BREAK
+case 141:
+YY_RULE_SETUP
+#line 335 "ldlex.l"
+{ RTOKEN(FORMAT); }
+ YY_BREAK
+case 142:
+YY_RULE_SETUP
+#line 336 "ldlex.l"
+{ RTOKEN(CASE); }
+ YY_BREAK
+case 143:
+YY_RULE_SETUP
+#line 337 "ldlex.l"
+{ RTOKEN(START); }
+ YY_BREAK
+case 144:
+YY_RULE_SETUP
+#line 338 "ldlex.l"
+{ RTOKEN(LIST); /* LIST and ignore to end of line */ }
+ YY_BREAK
+case 145:
+YY_RULE_SETUP
+#line 339 "ldlex.l"
+{ RTOKEN(SECT); }
+ YY_BREAK
+case 146:
+YY_RULE_SETUP
+#line 340 "ldlex.l"
+{ RTOKEN(ABSOLUTE); }
+ YY_BREAK
+case 147:
+YY_RULE_SETUP
+#line 341 "ldlex.l"
+{ RTOKEN(ENDWORD); }
+ YY_BREAK
+case 148:
+YY_RULE_SETUP
+#line 342 "ldlex.l"
+{ RTOKEN(ALIGNMOD);}
+ YY_BREAK
+case 149:
+YY_RULE_SETUP
+#line 343 "ldlex.l"
+{ RTOKEN(ALIGN_K);}
+ YY_BREAK
+case 150:
+YY_RULE_SETUP
+#line 344 "ldlex.l"
+{ RTOKEN(CHIP); }
+ YY_BREAK
+case 151:
+YY_RULE_SETUP
+#line 345 "ldlex.l"
+{ RTOKEN(BASE); }
+ YY_BREAK
+case 152:
+YY_RULE_SETUP
+#line 346 "ldlex.l"
+{ RTOKEN(ALIAS); }
+ YY_BREAK
+case 153:
+YY_RULE_SETUP
+#line 347 "ldlex.l"
+{ RTOKEN(TRUNCATE); }
+ YY_BREAK
+case 154:
+YY_RULE_SETUP
+#line 348 "ldlex.l"
+{ RTOKEN(LOAD); }
+ YY_BREAK
+case 155:
+YY_RULE_SETUP
+#line 349 "ldlex.l"
+{ RTOKEN(PUBLIC); }
+ YY_BREAK
+case 156:
+YY_RULE_SETUP
+#line 350 "ldlex.l"
+{ RTOKEN(ORDER); }
+ YY_BREAK
+case 157:
+YY_RULE_SETUP
+#line 351 "ldlex.l"
+{ RTOKEN(NAMEWORD); }
+ YY_BREAK
+case 158:
+YY_RULE_SETUP
+#line 352 "ldlex.l"
+{ RTOKEN(FORMAT); }
+ YY_BREAK
+case 159:
+YY_RULE_SETUP
+#line 353 "ldlex.l"
+{ RTOKEN(CASE); }
+ YY_BREAK
+case 160:
+YY_RULE_SETUP
+#line 354 "ldlex.l"
+{ RTOKEN(EXTERN); }
+ YY_BREAK
+case 161:
+YY_RULE_SETUP
+#line 355 "ldlex.l"
+{ RTOKEN(START); }
+ YY_BREAK
+case 162:
+YY_RULE_SETUP
+#line 356 "ldlex.l"
+{ RTOKEN(LIST); /* LIST and ignore to end of line */ }
+ YY_BREAK
+case 163:
+YY_RULE_SETUP
+#line 357 "ldlex.l"
+{ RTOKEN(SECT); }
+ YY_BREAK
+case 164:
+YY_RULE_SETUP
+#line 358 "ldlex.l"
+{ RTOKEN(ABSOLUTE); }
+ YY_BREAK
+case 165:
+YY_RULE_SETUP
+#line 360 "ldlex.l"
+{
+/* Filename without commas, needed to parse mri stuff */
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+ YY_BREAK
+case 166:
+YY_RULE_SETUP
+#line 367 "ldlex.l"
+{
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+ YY_BREAK
+case 167:
+YY_RULE_SETUP
+#line 371 "ldlex.l"
+{
+ yylval.name = xstrdup (yytext + 2);
+ return LNAME;
+ }
+ YY_BREAK
+case 168:
+YY_RULE_SETUP
+#line 375 "ldlex.l"
+{
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+ YY_BREAK
+case 169:
+YY_RULE_SETUP
+#line 379 "ldlex.l"
+{
+ yylval.name = xstrdup (yytext + 2);
+ return LNAME;
+ }
+ YY_BREAK
+case 170:
+YY_RULE_SETUP
+#line 383 "ldlex.l"
+{
+ /* Annoyingly, this pattern can match comments, and we have
+ longest match issues to consider. So if the first two
+ characters are a comment opening, put the input back and
+ try again. */
+ if (yytext[0] == '/' && yytext[1] == '*')
+ {
+ yyless (2);
+ comment ();
+ }
+ else
+ {
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+ }
+ YY_BREAK
+case 171:
+/* rule 171 can match eol */
+YY_RULE_SETUP
+#line 400 "ldlex.l"
+{
+ /* No matter the state, quotes
+ give what's inside */
+ yylval.name = xstrdup (yytext + 1);
+ yylval.name[yyleng - 2] = 0;
+ return NAME;
+ }
+ YY_BREAK
+case 172:
+/* rule 172 can match eol */
+YY_RULE_SETUP
+#line 407 "ldlex.l"
+{ lineno++;}
+ YY_BREAK
+case 173:
+YY_RULE_SETUP
+#line 408 "ldlex.l"
+{ }
+ YY_BREAK
+case 174:
+YY_RULE_SETUP
+#line 410 "ldlex.l"
+{ return *yytext; }
+ YY_BREAK
+case 175:
+YY_RULE_SETUP
+#line 412 "ldlex.l"
+{ RTOKEN(GLOBAL); }
+ YY_BREAK
+case 176:
+YY_RULE_SETUP
+#line 414 "ldlex.l"
+{ RTOKEN(LOCAL); }
+ YY_BREAK
+case 177:
+YY_RULE_SETUP
+#line 416 "ldlex.l"
+{ RTOKEN(EXTERN); }
+ YY_BREAK
+case 178:
+YY_RULE_SETUP
+#line 418 "ldlex.l"
+{ yylval.name = xstrdup (yytext);
+ return VERS_IDENTIFIER; }
+ YY_BREAK
+case 179:
+YY_RULE_SETUP
+#line 421 "ldlex.l"
+{ yylval.name = xstrdup (yytext);
+ return VERS_TAG; }
+ YY_BREAK
+case 180:
+YY_RULE_SETUP
+#line 424 "ldlex.l"
+{ BEGIN(VERS_SCRIPT); return *yytext; }
+ YY_BREAK
+case 181:
+YY_RULE_SETUP
+#line 426 "ldlex.l"
+{ BEGIN(VERS_NODE);
+ vers_node_nesting = 0;
+ return *yytext;
+ }
+ YY_BREAK
+case 182:
+YY_RULE_SETUP
+#line 430 "ldlex.l"
+{ return *yytext; }
+ YY_BREAK
+case 183:
+YY_RULE_SETUP
+#line 431 "ldlex.l"
+{ vers_node_nesting++; return *yytext; }
+ YY_BREAK
+case 184:
+YY_RULE_SETUP
+#line 432 "ldlex.l"
+{ if (--vers_node_nesting < 0)
+ BEGIN(VERS_SCRIPT);
+ return *yytext;
+ }
+ YY_BREAK
+case 185:
+/* rule 185 can match eol */
+YY_RULE_SETUP
+#line 437 "ldlex.l"
+{ lineno++; }
+ YY_BREAK
+case 186:
+YY_RULE_SETUP
+#line 439 "ldlex.l"
+{ /* Eat up comments */ }
+ YY_BREAK
+case 187:
+YY_RULE_SETUP
+#line 441 "ldlex.l"
+{ /* Eat up whitespace */ }
+ YY_BREAK
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(SCRIPT):
+case YY_STATE_EOF(EXPRESSION):
+case YY_STATE_EOF(BOTH):
+case YY_STATE_EOF(DEFSYMEXP):
+case YY_STATE_EOF(MRI):
+case YY_STATE_EOF(VERS_START):
+case YY_STATE_EOF(VERS_SCRIPT):
+case YY_STATE_EOF(VERS_NODE):
+#line 443 "ldlex.l"
+{
+ include_stack_ptr--;
+
+ if (include_stack_ptr == 0)
+ {
+ yyterminate ();
+ }
+ else
+ {
+ yy_switch_to_buffer (include_stack[include_stack_ptr]);
+ }
+
+ ldfile_input_filename = file_name_stack[include_stack_ptr - 1];
+ lineno = lineno_stack[include_stack_ptr];
+
+ return END;
+}
+ YY_BREAK
+case 188:
+YY_RULE_SETUP
+#line 461 "ldlex.l"
+lex_warn_invalid (" in script", yytext);
+ YY_BREAK
+case 189:
+YY_RULE_SETUP
+#line 462 "ldlex.l"
+lex_warn_invalid (" in expression", yytext);
+ YY_BREAK
+case 190:
+YY_RULE_SETUP
+#line 464 "ldlex.l"
+ECHO;
+ YY_BREAK
+#line 3036 "ldlex.c"
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = (yy_hold_char);
+ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+ * just pointed yyin at a new source and called
+ * yylex(). If so, then we have to assure
+ * consistency between YY_CURRENT_BUFFER and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+ * of the first EOB in the buffer, since yy_c_buf_p will
+ * already have been incremented past the NUL character
+ * (since all states make transitions on EOB to the
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+ (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+ * yy_get_previous_state() go ahead and do it
+ * for us because it doesn't know how to deal
+ * with the possibility of jamming (and we don't
+ * want to build jamming into it because then it
+ * will run more slowly).
+ */
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+ yy_cp = ++(yy_c_buf_p);
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+ yy_cp = (yy_c_buf_p);
+ goto yy_find_action;
+ }
+ }
+
+ else switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+ (yy_did_buffer_switch_on_eof) = 0;
+
+ if ( yywrap( ) )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+ * yytext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+ }
+
+ else
+ {
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) =
+ (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+ (yy_c_buf_p) =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+ }
+
+ default:
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+} /* end of yylex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ * EOB_ACT_LAST_MATCH -
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ register char *source = (yytext_ptr);
+ register int number_to_move, i;
+ int ret_val;
+
+ if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+ }
+
+ else
+ {
+ /* We matched some text prior to the EOB, first
+ * process it.
+ */
+ return EOB_ACT_LAST_MATCH;
+ }
+ }
+
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+ else
+ {
+ yy_size_t num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+
+ /* just a shorter name for the current buffer */
+ YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+ int yy_c_buf_p_offset =
+ (int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+ if ( b->yy_is_our_buffer )
+ {
+ yy_size_t new_size = b->yy_buf_size * 2;
+
+ if ( new_size <= 0 )
+ b->yy_buf_size += b->yy_buf_size / 8;
+ else
+ b->yy_buf_size *= 2;
+
+ b->yy_ch_buf = (char *)
+ /* Include room in for 2 EOB chars. */
+ yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
+ }
+ else
+ /* Can't grow it, we don't own it. */
+ b->yy_ch_buf = 0;
+
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR(
+ "fatal error - scanner input buffer overflow" );
+
+ (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+ num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+ number_to_move - 1;
+
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ (yy_n_chars), num_to_read );
+
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ if ( (yy_n_chars) == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+ yyrestart(yyin );
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ }
+
+ (yy_n_chars) += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+ (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+ return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+ static yy_state_type yy_get_previous_state (void)
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp;
+
+ yy_current_state = (yy_start);
+
+ for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+ {
+ register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 1591 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ }
+
+ return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
+{
+ register int yy_is_jam;
+ register char *yy_cp = (yy_c_buf_p);
+
+ register YY_CHAR yy_c = 1;
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 1591 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ yy_is_jam = (yy_current_state == 1590);
+
+ return yy_is_jam ? 0 : yy_current_state;
+}
+
+ static void yyunput (int c, register char * yy_bp )
+{
+ register char *yy_cp;
+
+ yy_cp = (yy_c_buf_p);
+
+ /* undo effects of setting up yytext */
+ *yy_cp = (yy_hold_char);
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ { /* need to shift things up to make room */
+ /* +2 for EOB chars. */
+ register yy_size_t number_to_move = (yy_n_chars) + 2;
+ register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+ register char *source =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+ while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ *--dest = *--source;
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ }
+
+ *--yy_cp = (char) c;
+
+ (yytext_ptr) = yy_bp;
+ (yy_hold_char) = *yy_cp;
+ (yy_c_buf_p) = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+ static int yyinput (void)
+#else
+ static int input (void)
+#endif
+
+{
+ int c;
+
+ *(yy_c_buf_p) = (yy_hold_char);
+
+ if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ /* This was really a NUL. */
+ *(yy_c_buf_p) = '\0';
+
+ else
+ { /* need more input */
+ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+ ++(yy_c_buf_p);
+
+ switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ yyrestart(yyin );
+
+ /*FALLTHROUGH*/
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( yywrap( ) )
+ return 0;
+
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+#ifdef __cplusplus
+ return yyinput();
+#else
+ return input();
+#endif
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) = (yytext_ptr) + offset;
+ break;
+ }
+ }
+ }
+
+ c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
+ *(yy_c_buf_p) = '\0'; /* preserve yytext */
+ (yy_hold_char) = *++(yy_c_buf_p);
+
+ return c;
+}
+#endif /* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ *
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+ void yyrestart (FILE * input_file )
+{
+
+ if ( ! YY_CURRENT_BUFFER ){
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
+
+ yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+ yy_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ *
+ */
+ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
+{
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * yypop_buffer_state();
+ * yypush_buffer_state(new_buffer);
+ */
+ yyensure_buffer_stack ();
+ if ( YY_CURRENT_BUFFER == new_buffer )
+ return;
+
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ yy_load_buffer_state( );
+
+ /* We don't actually know whether we did this switch during
+ * EOF (yywrap()) processing, but the only time this flag
+ * is looked at is after yywrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void yy_load_buffer_state (void)
+{
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ (yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ *
+ * @return the allocated buffer state.
+ */
+ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
+{
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+ b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 );
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+ yy_init_buffer(b,file );
+
+ return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ *
+ */
+ void yy_delete_buffer (YY_BUFFER_STATE b )
+{
+
+ if ( ! b )
+ return;
+
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ yyfree((void *) b->yy_ch_buf );
+
+ yyfree((void *) b );
+}
+
+#ifndef __cplusplus
+extern int isatty (int );
+#endif /* __cplusplus */
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
+
+{
+ int oerrno = errno;
+
+ yy_flush_buffer(b );
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+ /* If b is the current buffer, then yy_init_buffer was _probably_
+ * called from yyrestart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
+
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+
+ errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ *
+ */
+ void yy_flush_buffer (YY_BUFFER_STATE b )
+{
+ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+ * a transition to the end-of-buffer state. The second causes
+ * a jam in that state.
+ */
+ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+ b->yy_buf_pos = &b->yy_ch_buf[0];
+
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ if ( b == YY_CURRENT_BUFFER )
+ yy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ *
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+ if (new_buffer == NULL)
+ return;
+
+ yyensure_buffer_stack();
+
+ /* This block is copied from yy_switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ (yy_buffer_stack_top)++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from yy_switch_to_buffer. */
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ *
+ */
+void yypop_buffer_state (void)
+{
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if ((yy_buffer_stack_top) > 0)
+ --(yy_buffer_stack_top);
+
+ if (YY_CURRENT_BUFFER) {
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+ }
+}
+
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (void)
+{
+ yy_size_t num_to_alloc;
+
+ if (!(yy_buffer_stack)) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ (yy_buffer_stack_max) = num_to_alloc;
+ (yy_buffer_stack_top) = 0;
+ return;
+ }
+
+ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+ /* Increase the buffer to prepare for a possible push. */
+ int grow_size = 8 /* arbitrary grow size */;
+
+ num_to_alloc = (yy_buffer_stack_max) + grow_size;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+ ((yy_buffer_stack),
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ /* zero only the new slots.*/
+ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+ (yy_buffer_stack_max) = num_to_alloc;
+ }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
+{
+ YY_BUFFER_STATE b;
+
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return 0;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+ b->yy_is_our_buffer = 0;
+ b->yy_input_file = 0;
+ b->yy_n_chars = b->yy_buf_size;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ yy_switch_to_buffer(b );
+
+ return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ *
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+{
+
+ return yy_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len )
+{
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n, i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = _yybytes_len + 2;
+ buf = (char *) yyalloc(n );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
+
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+ b = yy_scan_buffer(buf,n );
+ if ( ! b )
+ YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+ */
+ b->yy_is_our_buffer = 1;
+
+ return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ yytext[yyleng] = (yy_hold_char); \
+ (yy_c_buf_p) = yytext + yyless_macro_arg; \
+ (yy_hold_char) = *(yy_c_buf_p); \
+ *(yy_c_buf_p) = '\0'; \
+ yyleng = yyless_macro_arg; \
+ } \
+ while ( 0 )
+
+/* Accessor methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ *
+ */
+int yyget_lineno (void)
+{
+
+ return yylineno;
+}
+
+/** Get the input stream.
+ *
+ */
+FILE *yyget_in (void)
+{
+ return yyin;
+}
+
+/** Get the output stream.
+ *
+ */
+FILE *yyget_out (void)
+{
+ return yyout;
+}
+
+/** Get the length of the current token.
+ *
+ */
+yy_size_t yyget_leng (void)
+{
+ return yyleng;
+}
+
+/** Get the current token.
+ *
+ */
+
+char *yyget_text (void)
+{
+ return yytext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ *
+ */
+void yyset_lineno (int line_number )
+{
+
+ yylineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ *
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE * in_str )
+{
+ yyin = in_str ;
+}
+
+void yyset_out (FILE * out_str )
+{
+ yyout = out_str ;
+}
+
+int yyget_debug (void)
+{
+ return yy_flex_debug;
+}
+
+void yyset_debug (int bdebug )
+{
+ yy_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from yylex_destroy(), so don't allocate here.
+ */
+
+ (yy_buffer_stack) = 0;
+ (yy_buffer_stack_top) = 0;
+ (yy_buffer_stack_max) = 0;
+ (yy_c_buf_p) = (char *) 0;
+ (yy_init) = 0;
+ (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ yyin = stdin;
+ yyout = stdout;
+#else
+ yyin = (FILE *) 0;
+ yyout = (FILE *) 0;
+#endif
+
+ /* For future reference: Set errno on error, since we are called by
+ * yylex_init()
+ */
+ return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy (void)
+{
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ yypop_buffer_state();
+ }
+
+ /* Destroy the stack itself. */
+ yyfree((yy_buffer_stack) );
+ (yy_buffer_stack) = NULL;
+
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * yylex() is called, initialization will occur. */
+ yy_init_globals( );
+
+ return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+}
+#endif
+
+void *yyalloc (yy_size_t size )
+{
+ return (void *) malloc( size );
+}
+
+void *yyrealloc (void * ptr, yy_size_t size )
+{
+ /* The cast to (char *) in the following accommodates both
+ * implementations that use char* generic pointers, and those
+ * that use void* generic pointers. It works with the latter
+ * because both ANSI C and C++ allow castless assignment from
+ * any pointer type to void*, and deal with argument conversions
+ * as though doing an assignment.
+ */
+ return (void *) realloc( (char *) ptr, size );
+}
+
+void yyfree (void * ptr )
+{
+ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 464 "ldlex.l"
+
+
+
+
+/* Switch flex to reading script file NAME, open on FILE,
+ saving the current input info on the include stack. */
+
+void
+lex_push_file (FILE *file, const char *name)
+{
+ if (include_stack_ptr >= MAX_INCLUDE_DEPTH)
+ {
+ einfo ("%F:includes nested too deeply\n");
+ }
+ file_name_stack[include_stack_ptr] = name;
+ lineno_stack[include_stack_ptr] = lineno;
+ include_stack[include_stack_ptr] = YY_CURRENT_BUFFER;
+
+ include_stack_ptr++;
+ lineno = 1;
+ yyin = file;
+ yy_switch_to_buffer (yy_create_buffer (yyin, YY_BUF_SIZE));
+}
+
+/* Return a newly created flex input buffer containing STRING,
+ which is SIZE bytes long. */
+
+static YY_BUFFER_STATE
+yy_create_string_buffer (const char *string, size_t size)
+{
+ YY_BUFFER_STATE b;
+
+ /* Calls to m-alloc get turned by sed into xm-alloc. */
+ b = malloc (sizeof (struct yy_buffer_state));
+ b->yy_input_file = 0;
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ we need to put in 2 end-of-buffer characters. */
+ b->yy_ch_buf = malloc ((unsigned) (b->yy_buf_size + 3));
+
+ b->yy_ch_buf[0] = '\n';
+ strcpy (b->yy_ch_buf+1, string);
+ b->yy_ch_buf[size+1] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[size+2] = YY_END_OF_BUFFER_CHAR;
+ b->yy_n_chars = size+1;
+ b->yy_buf_pos = &b->yy_ch_buf[1];
+
+ b->yy_is_our_buffer = 1;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+
+ /* flex 2.4.7 changed the interface. FIXME: We should not be using
+ a flex internal interface in the first place! */
+#ifdef YY_BUFFER_NEW
+ b->yy_buffer_status = YY_BUFFER_NEW;
+#else
+ b->yy_eof_status = EOF_NOT_SEEN;
+#endif
+
+ return b;
+}
+
+/* Switch flex to reading from STRING, saving the current input info
+ on the include stack. */
+
+void
+lex_redirect (const char *string)
+{
+ YY_BUFFER_STATE tmp;
+
+ yy_init = 0;
+ if (include_stack_ptr >= MAX_INCLUDE_DEPTH)
+ {
+ einfo("%F: macros nested too deeply\n");
+ }
+ file_name_stack[include_stack_ptr] = "redirect";
+ lineno_stack[include_stack_ptr] = lineno;
+ include_stack[include_stack_ptr] = YY_CURRENT_BUFFER;
+ include_stack_ptr++;
+ lineno = 1;
+ tmp = yy_create_string_buffer (string, strlen (string));
+ yy_switch_to_buffer (tmp);
+}
+
+/* Functions to switch to a different flex start condition,
+ saving the current start condition on `state_stack'. */
+
+static int state_stack[MAX_INCLUDE_DEPTH * 2];
+static int *state_stack_p = state_stack;
+
+void
+ldlex_script (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (SCRIPT);
+}
+
+void
+ldlex_mri_script (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (MRI);
+}
+
+void
+ldlex_version_script (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (VERS_START);
+}
+
+void
+ldlex_version_file (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (VERS_SCRIPT);
+}
+
+void
+ldlex_defsym (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (DEFSYMEXP);
+}
+
+void
+ldlex_expression (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (EXPRESSION);
+}
+
+void
+ldlex_both (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (BOTH);
+}
+
+void
+ldlex_popstate (void)
+{
+ yy_start = *(--state_stack_p);
+}
+
+
+/* Place up to MAX_SIZE characters in BUF and return
+ either the number of characters read, or 0 to indicate EOF. */
+
+static int
+yy_input (char *buf, int max_size)
+{
+ int result = 0;
+ if (YY_CURRENT_BUFFER->yy_input_file)
+ {
+ if (yyin)
+ {
+ result = fread (buf, 1, max_size, yyin);
+ if (result < max_size && ferror (yyin))
+ einfo ("%F%P: read in flex scanner failed\n");
+ }
+ }
+ return result;
+}
+
+/* Eat the rest of a C-style comment. */
+
+static void
+comment (void)
+{
+ int c;
+
+ while (1)
+ {
+ c = input();
+ while (c != '*' && c != EOF)
+ {
+ if (c == '\n')
+ lineno++;
+ c = input();
+ }
+
+ if (c == '*')
+ {
+ c = input();
+ while (c == '*')
+ c = input();
+ if (c == '/')
+ break; /* found the end */
+ }
+
+ if (c == '\n')
+ lineno++;
+
+ if (c == EOF)
+ {
+ einfo( "%F%P: EOF in comment\n");
+ break;
+ }
+ }
+}
+
+/* Warn the user about a garbage character WHAT in the input
+ in context WHERE. */
+
+static void
+lex_warn_invalid (char *where, char *what)
+{
+ char buf[5];
+
+ /* If we have found an input file whose format we do not recognize,
+ and we are therefore treating it as a linker script, and we find
+ an invalid character, then most likely this is a real object file
+ of some different format. Treat it as such. */
+ if (ldfile_assumed_script)
+ {
+ bfd_set_error (bfd_error_file_not_recognized);
+ einfo ("%F%s: file not recognized: %E\n", ldfile_input_filename);
+ }
+
+ if (! ISPRINT (*what))
+ {
+ sprintf (buf, "\\%03o", (unsigned int) *what);
+ what = buf;
+ }
+
+ einfo ("%P:%S: ignoring invalid character `%s'%s\n", what, where);
+}
+