aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog4
-rw-r--r--ld/configdoc.texi33
-rwxr-xr-xld/configure20
-rw-r--r--ld/deffilep.c3362
-rw-r--r--ld/deffilep.h132
-rw-r--r--ld/ld.12747
-rw-r--r--ld/ld.info8693
-rw-r--r--ld/ldgram.c4770
-rw-r--r--ld/ldgram.h357
-rw-r--r--ld/ldlex.c4425
-rw-r--r--ld/po/bg.gmobin0 -> 74041 bytes
-rw-r--r--ld/po/da.gmobin0 -> 34929 bytes
-rw-r--r--ld/po/es.gmobin0 -> 58358 bytes
-rw-r--r--ld/po/fi.gmobin0 -> 57750 bytes
-rw-r--r--ld/po/fr.gmobin0 -> 62481 bytes
-rw-r--r--ld/po/ga.gmobin0 -> 48922 bytes
-rw-r--r--ld/po/id.gmobin0 -> 53562 bytes
-rw-r--r--ld/po/it.gmobin0 -> 57987 bytes
-rw-r--r--ld/po/ja.gmobin0 -> 64029 bytes
-rw-r--r--ld/po/sv.gmobin0 -> 43131 bytes
-rw-r--r--ld/po/tr.gmobin0 -> 41339 bytes
-rw-r--r--ld/po/uk.gmobin0 -> 75243 bytes
-rw-r--r--ld/po/vi.gmobin0 -> 61550 bytes
-rw-r--r--ld/po/zh_CN.gmobin0 -> 54302 bytes
-rw-r--r--ld/po/zh_TW.gmobin0 -> 54554 bytes
25 files changed, 24533 insertions, 10 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index a54f015..ba7d1d4 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,7 @@
+2017-03-02 Tristan Gingold <gingold@adacore.com>
+
+ * configure: Regenerate.
+
2017-02-28 Alan Modra <amodra@gmail.com>
* testsuite/ld-elf/merge.d: xfail for nios.
diff --git a/ld/configdoc.texi b/ld/configdoc.texi
new file mode 100644
index 0000000..27b8198
--- /dev/null
+++ b/ld/configdoc.texi
@@ -0,0 +1,33 @@
+@c Copyright (C) 2012-2017 Free Software Foundation, Inc.
+@c For copying conditions, see the file ld.texinfo.
+
+@c ------------------------------ CONFIGURATION VARS:
+@c 1. Inclusiveness of this manual
+@set GENERIC
+
+@c 2. Specific target machines
+@set ARM
+@set C6X
+@set H8300
+@set HPPA
+@set I960
+@set M68HC11
+@set M68K
+@set MIPS
+@set MMIX
+@set MSP430
+@set NDS32
+@set NIOSII
+@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/configure b/ld/configure
index b89177c..36af969 100755
--- a/ld/configure
+++ b/ld/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.64 for ld 2.27.90.
+# Generated by GNU Autoconf 2.64 for ld 2.28.
#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
@@ -556,8 +556,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='ld'
PACKAGE_TARNAME='ld'
-PACKAGE_VERSION='2.27.90'
-PACKAGE_STRING='ld 2.27.90'
+PACKAGE_VERSION='2.28'
+PACKAGE_STRING='ld 2.28'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -1354,7 +1354,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures ld 2.27.90 to adapt to many kinds of systems.
+\`configure' configures ld 2.28 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1425,7 +1425,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of ld 2.27.90:";;
+ short | recursive ) echo "Configuration of ld 2.28:";;
esac
cat <<\_ACEOF
@@ -1550,7 +1550,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-ld configure 2.27.90
+ld configure 2.28
generated by GNU Autoconf 2.64
Copyright (C) 2009 Free Software Foundation, Inc.
@@ -2259,7 +2259,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by ld $as_me 2.27.90, which was
+It was created by ld $as_me 2.28, which was
generated by GNU Autoconf 2.64. Invocation command line was
$ $0 $@
@@ -4069,7 +4069,7 @@ fi
# Define the identity of the package.
PACKAGE='ld'
- VERSION='2.27.90'
+ VERSION='2.28'
cat >>confdefs.h <<_ACEOF
@@ -17813,7 +17813,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by ld $as_me 2.27.90, which was
+This file was extended by ld $as_me 2.28, which was
generated by GNU Autoconf 2.64. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -17877,7 +17877,7 @@ Report bugs to the package provider."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\
-ld config.status 2.27.90
+ld config.status 2.28
configured by $0, generated by GNU Autoconf 2.64,
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
diff --git a/ld/deffilep.c b/ld/deffilep.c
new file mode 100644
index 0000000..f4a553c
--- /dev/null
+++ b/ld/deffilep.c
@@ -0,0 +1,3362 @@
+/* A Bison parser, made by GNU Bison 3.0. */
+
+/* Bison implementation for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2013 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 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, see <http://www.gnu.org/licenses/>. */
+
+/* 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 "3.0"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Push parsers. */
+#define YYPUSH 0
+
+/* Pull parsers. */
+#define YYPULL 1
+
+
+
+
+/* Copy the first part of user declarations. */
+#line 1 "deffilep.y" /* yacc.c:339 */
+ /* deffilep.y - parser for .def files */
+
+/* Copyright (C) 1995-2017 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
+
+typedef struct def_pool_str {
+ struct def_pool_str *next;
+ char data[1];
+} def_pool_str;
+
+static def_pool_str *pool_strs = NULL;
+
+static char *def_pool_alloc (size_t sz);
+static char *def_pool_strdup (const char *str);
+static void def_pool_free (void);
+
+static void def_description (const char *);
+static void def_exports (const char *, const char *, int, int, const char *);
+static void def_heapsize (int, int);
+static void def_import (const char *, const char *, const char *, const char *,
+ int, const char *);
+static void def_image_name (const char *, bfd_vma, 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;
+
+
+#line 178 "deffilep.c" /* yacc.c:339 */
+
+# ifndef YY_NULL
+# if defined __cplusplus && 201103L <= __cplusplus
+# define YY_NULL nullptr
+# else
+# define YY_NULL 0
+# endif
+# endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* In a future release of Bison, this section will be replaced
+ by #include "y.tab.h". */
+#ifndef YY_YY_DEFFILEP_H_INCLUDED
+# define YY_YY_DEFFILEP_H_INCLUDED
+/* Debug traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
+
+/* Token type. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ 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,
+ EQUAL = 283,
+ ID = 284,
+ DIGITS = 285
+ };
+#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 EQUAL 283
+#define ID 284
+#define DIGITS 285
+
+/* Value type. */
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE YYSTYPE;
+union YYSTYPE
+{
+#line 113 "deffilep.y" /* yacc.c:355 */
+
+ char *id;
+ const char *id_const;
+ int number;
+ bfd_vma vma;
+ char *digits;
+
+#line 286 "deffilep.c" /* yacc.c:355 */
+};
+# define YYSTYPE_IS_TRIVIAL 1
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+extern YYSTYPE yylval;
+
+int yyparse (void);
+
+#endif /* !YY_YY_DEFFILEP_H_INCLUDED */
+
+/* Copy the second part of user declarations. */
+
+#line 301 "deffilep.c" /* yacc.c:358 */
+
+#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;
+#else
+typedef signed char 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
+# 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
+
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later. */
+# if (! defined __GNUC__ || __GNUC__ < 2 \
+ || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
+# define __attribute__(Spec) /* empty */
+# 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
+
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized. */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+ _Pragma ("GCC diagnostic pop")
+#else
+# define YY_INITIAL_VALUE(Value) Value
+#endif
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
+#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 EXIT_SUCCESS
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+ /* Use EXIT_SUCCESS as a witness for stdlib.h. */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's 'empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (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 EXIT_SUCCESS \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined EXIT_SUCCESS
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined EXIT_SUCCESS
+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_alloc;
+ YYSTYPE yyvs_alloc;
+};
+
+/* 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)
+
+# define YYCOPY_NEEDED 1
+
+/* 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_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (0)
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from SRC to DST. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(Dst, Src, Count) \
+ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+# else
+# define YYCOPY(Dst, Src, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (Dst)[yyi] = (Src)[yyi]; \
+ } \
+ while (0)
+# endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 69
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 149
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 35
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 27
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 99
+/* YYNSTATES -- Number of states. */
+#define YYNSTATES 146
+
+/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
+ by yylex, with out-of-bounds checking. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 285
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+ as returned by yylex, without out-of-bounds checking. */
+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, 32, 2, 31, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 33, 2, 2, 34, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 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, 30
+};
+
+#if YYDEBUG
+ /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
+static const yytype_uint16 yyrline[] =
+{
+ 0, 138, 138, 139, 143, 144, 145, 146, 147, 148,
+ 149, 150, 151, 152, 153, 154, 155, 156, 160, 162,
+ 163, 170, 177, 178, 181, 182, 183, 184, 185, 186,
+ 187, 188, 191, 192, 196, 198, 200, 202, 204, 206,
+ 211, 212, 216, 217, 221, 222, 226, 227, 229, 230,
+ 234, 235, 236, 237, 241, 242, 243, 244, 245, 246,
+ 247, 248, 249, 250, 251, 252, 259, 260, 261, 262,
+ 263, 264, 265, 266, 267, 268, 271, 272, 278, 284,
+ 290, 298, 299, 302, 303, 307, 308, 312, 313, 316,
+ 317, 320, 321, 327, 335, 336, 339, 340, 343, 345
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || 0
+/* 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", "EQUAL", "ID", "DIGITS",
+ "'.'", "','", "'='", "'@'", "$accept", "start", "command", "explist",
+ "expline", "exp_opt_list", "exp_opt", "implist", "impline", "seclist",
+ "secline", "attr_list", "opt_comma", "opt_number", "attr",
+ "keyword_as_name", "opt_name2", "opt_name", "opt_equalequal_name",
+ "opt_ordinal", "opt_equal_name", "opt_base", "anylang_id", "opt_digits",
+ "opt_id", "NUMBER", "VMA", YY_NULL
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+ (internal) symbol number NUM (which must be that of a token). */
+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,
+ 285, 46, 44, 61, 64
+};
+# endif
+
+#define YYPACT_NINF -82
+
+#define yypact_value_is_default(Yystate) \
+ (!!((Yystate) == (-82)))
+
+#define YYTABLE_NINF -48
+
+#define yytable_value_is_error(Yytable_value) \
+ 0
+
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+static const yytype_int8 yypact[] =
+{
+ 122, 11, 11, -25, 9, 9, 53, 53, -17, 11,
+ 14, 9, -18, 20, 95, -82, -82, -82, -82, -82,
+ -82, -82, -82, -82, -82, -82, -82, -82, -82, -82,
+ -82, -82, -82, -82, -82, -82, -82, -82, 29, 11,
+ 47, -82, 67, 67, -82, -82, 54, 54, -82, -82,
+ -82, -82, 48, -82, 48, -14, -17, -82, 11, -82,
+ 58, 50, 14, -82, 61, -82, 64, 33, -82, -82,
+ -82, 11, 47, -82, 11, 63, -82, -82, 9, -82,
+ -82, -82, 53, -82, 48, -82, -82, 11, 60, 76,
+ 81, -82, 9, -82, 83, 9, -82, -82, 84, -82,
+ -82, -82, 9, 79, -26, 85, -82, -82, 88, -82,
+ -82, -82, -82, 36, 89, 90, -82, 55, -82, -82,
+ -82, -82, -82, -82, -82, -82, -82, -82, 79, 79,
+ -82, 92, 13, 92, 92, 36, -82, 59, -82, -82,
+ -82, -82, 92, 92, -82, -82
+};
+
+ /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE does not specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint8 yydefact[] =
+{
+ 0, 82, 82, 0, 0, 0, 0, 0, 0, 18,
+ 0, 0, 0, 0, 0, 3, 66, 60, 73, 64,
+ 55, 58, 59, 63, 65, 74, 54, 56, 57, 69,
+ 70, 71, 75, 62, 72, 67, 68, 61, 76, 0,
+ 0, 81, 90, 90, 6, 98, 49, 49, 50, 51,
+ 52, 53, 9, 45, 10, 0, 11, 41, 12, 19,
+ 88, 0, 13, 33, 14, 91, 0, 0, 16, 1,
+ 2, 0, 77, 78, 0, 0, 4, 5, 0, 7,
+ 8, 46, 0, 43, 42, 40, 20, 0, 86, 0,
+ 0, 32, 0, 92, 95, 0, 80, 79, 0, 48,
+ 44, 87, 0, 47, 84, 0, 15, 94, 97, 17,
+ 99, 89, 85, 23, 0, 0, 39, 0, 96, 93,
+ 28, 29, 26, 27, 30, 31, 24, 25, 47, 47,
+ 83, 84, 84, 84, 84, 23, 38, 0, 36, 37,
+ 21, 22, 84, 84, 34, 35
+};
+
+ /* YYPGOTO[NTERM-NUM]. */
+static const yytype_int16 yypgoto[] =
+{
+ -82, -82, 107, -82, 65, -11, -82, -82, 75, -82,
+ 82, -4, -81, 93, 57, 102, -8, 141, -75, -82,
+ -82, 101, -82, -82, -82, -5, -82
+};
+
+ /* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int16 yydefgoto[] =
+{
+ -1, 14, 15, 58, 59, 128, 129, 62, 63, 56,
+ 57, 52, 82, 79, 53, 40, 41, 42, 116, 103,
+ 88, 76, 67, 108, 119, 46, 111
+};
+
+ /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule whose
+ number is the opposite. If YYTABLE_NINF, syntax error. */
+static const yytype_int16 yytable[] =
+{
+ 47, 60, 114, 54, 44, 115, 64, 48, 49, 50,
+ 51, 65, 55, 66, 16, 83, 17, 18, 19, 20,
+ 21, 22, 113, 23, 24, 25, 26, 27, 28, 29,
+ 30, 73, 31, 32, 33, 34, 35, 36, 37, 45,
+ 38, 114, 39, 61, 137, 120, 121, 134, 135, 68,
+ 60, 84, 122, 123, 124, 125, 136, 138, 139, 140,
+ 71, 126, 127, 96, 94, 95, 97, 144, 145, -47,
+ -47, -47, -47, 99, 48, 49, 50, 51, 74, 101,
+ 81, 89, 75, 90, 132, 45, 78, 106, 142, 45,
+ 109, 87, 92, 93, 102, 69, 98, 112, 1, 2,
+ 3, 4, 5, 6, 7, 104, 8, 9, 10, 11,
+ 105, 81, 133, 107, 110, 12, 117, 118, 130, 131,
+ 114, 70, 13, 86, 141, 1, 2, 3, 4, 5,
+ 6, 7, 143, 8, 9, 10, 11, 91, 85, 100,
+ 80, 72, 12, 43, 77, 0, 0, 0, 0, 13
+};
+
+static const yytype_int16 yycheck[] =
+{
+ 5, 9, 28, 7, 29, 31, 11, 21, 22, 23,
+ 24, 29, 29, 31, 3, 29, 5, 6, 7, 8,
+ 9, 10, 103, 12, 13, 14, 15, 16, 17, 18,
+ 19, 39, 21, 22, 23, 24, 25, 26, 27, 30,
+ 29, 28, 31, 29, 31, 9, 10, 128, 129, 29,
+ 58, 55, 16, 17, 18, 19, 131, 132, 133, 134,
+ 31, 25, 26, 71, 31, 32, 74, 142, 143, 21,
+ 22, 23, 24, 78, 21, 22, 23, 24, 31, 87,
+ 32, 31, 15, 33, 29, 30, 32, 92, 29, 30,
+ 95, 33, 31, 29, 34, 0, 33, 102, 3, 4,
+ 5, 6, 7, 8, 9, 29, 11, 12, 13, 14,
+ 29, 32, 117, 30, 30, 20, 31, 29, 29, 29,
+ 28, 14, 27, 58, 135, 3, 4, 5, 6, 7,
+ 8, 9, 137, 11, 12, 13, 14, 62, 56, 82,
+ 47, 39, 20, 2, 43, -1, -1, -1, -1, 27
+};
+
+ /* 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, 36, 37, 3, 5, 6, 7,
+ 8, 9, 10, 12, 13, 14, 15, 16, 17, 18,
+ 19, 21, 22, 23, 24, 25, 26, 27, 29, 31,
+ 50, 51, 52, 52, 29, 30, 60, 60, 21, 22,
+ 23, 24, 46, 49, 46, 29, 44, 45, 38, 39,
+ 51, 29, 42, 43, 60, 29, 31, 57, 29, 0,
+ 37, 31, 50, 51, 31, 15, 56, 56, 32, 48,
+ 48, 32, 47, 29, 46, 45, 39, 33, 55, 31,
+ 33, 43, 31, 29, 31, 32, 51, 51, 33, 60,
+ 49, 51, 34, 54, 29, 29, 60, 30, 58, 60,
+ 30, 61, 60, 47, 28, 31, 53, 31, 29, 59,
+ 9, 10, 16, 17, 18, 19, 25, 26, 40, 41,
+ 29, 29, 29, 60, 47, 47, 53, 31, 53, 53,
+ 53, 40, 29, 60, 53, 53
+};
+
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint8 yyr1[] =
+{
+ 0, 35, 36, 36, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37, 38, 38,
+ 38, 39, 40, 40, 41, 41, 41, 41, 41, 41,
+ 41, 41, 42, 42, 43, 43, 43, 43, 43, 43,
+ 44, 44, 45, 45, 46, 46, 47, 47, 48, 48,
+ 49, 49, 49, 49, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 51, 51, 51, 51,
+ 51, 52, 52, 53, 53, 54, 54, 55, 55, 56,
+ 56, 57, 57, 57, 58, 58, 59, 59, 60, 61
+};
+
+ /* YYR2[YYN] -- Number of symbols on the 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, 7, 3, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 1, 8, 8, 6, 6, 6, 4,
+ 2, 1, 2, 2, 3, 1, 1, 0, 2, 0,
+ 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, 2, 2, 3,
+ 3, 1, 0, 2, 0, 2, 0, 2, 0, 3,
+ 0, 1, 2, 4, 1, 0, 1, 0, 1, 1
+};
+
+
+#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
+
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ YYPOPSTACK (yylen); \
+ yystate = *yyssp; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (0)
+
+/* Error token number */
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+
+/* 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 (0)
+
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
+
+
+# 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 (0)
+
+
+/*----------------------------------------.
+| Print this symbol's value on YYOUTPUT. |
+`----------------------------------------*/
+
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+{
+ FILE *yyo = yyoutput;
+ YYUSE (yyo);
+ if (!yyvaluep)
+ return;
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# endif
+ YYUSE (yytype);
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+{
+ YYFPRINTF (yyoutput, "%s %s (",
+ yytype < YYNTOKENS ? "token" : "nterm", 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). |
+`------------------------------------------------------------------*/
+
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; yybottom <= yytop; yybottom++)
+ {
+ int yybot = *yybottom;
+ YYFPRINTF (stderr, " %d", yybot);
+ }
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (0)
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+static void
+yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
+{
+ unsigned long int yylno = yyrline[yyrule];
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ YYFPRINTF (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr,
+ yystos[yyssp[yyi + 1 - yynrhs]],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ );
+ YYFPRINTF (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyssp, yyvsp, Rule); \
+} while (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. */
+static YYSIZE_T
+yystrlen (const char *yystr)
+{
+ 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. */
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+{
+ 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 *YYMSG, which is of size *YYMSG_ALLOC, an error message
+ about the unexpected token YYTOKEN for the state stack whose top is
+ YYSSP.
+
+ Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
+ not large enough to hold the message. In that case, also set
+ *YYMSG_ALLOC to the required number of bytes. Return 2 if the
+ required number of bytes is too large to store. */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+ yytype_int16 *yyssp, int yytoken)
+{
+ YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
+ YYSIZE_T yysize = yysize0;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ /* Internationalized format string. */
+ const char *yyformat = YY_NULL;
+ /* Arguments of yyformat. */
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ /* Number of reported tokens (one for the "unexpected", one per
+ "expected"). */
+ int yycount = 0;
+
+ /* There are many possibilities here to consider:
+ - If this state is a consistent state with a default action, then
+ the only way this function was invoked is if the default action
+ is an error action. In that case, don't check for expected
+ tokens because there are none.
+ - The only way there can be no lookahead present (in yychar) is if
+ this state is a consistent state with a default action. Thus,
+ detecting the absence of a lookahead is sufficient to determine
+ that there is no unexpected or expected token to report. In that
+ case, just report a simple "syntax error".
+ - Don't assume there isn't a lookahead just because this state is a
+ consistent state with a default action. There might have been a
+ previous inconsistent state, consistent state with a non-default
+ action, or user semantic action that manipulated yychar.
+ - Of course, the expected token list depends on states to have
+ correct lookahead information, and it depends on the parser not
+ to perform extra reductions after fetching a lookahead from the
+ scanner and before detecting a syntax error. Thus, state merging
+ (from LALR or IELR) and default reductions corrupt the expected
+ token list. However, the list is correct for canonical LR with
+ one exception: it will still contain any token that will not be
+ accepted due to an error action in a later state.
+ */
+ if (yytoken != YYEMPTY)
+ {
+ int yyn = yypact[*yyssp];
+ yyarg[yycount++] = yytname[yytoken];
+ if (!yypact_value_is_default (yyn))
+ {
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ 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 yyx;
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+ && !yytable_value_is_error (yytable[yyx + yyn]))
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ {
+ YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
+ if (! (yysize <= yysize1
+ && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
+ }
+ }
+ }
+
+ switch (yycount)
+ {
+# define YYCASE_(N, S) \
+ case N: \
+ yyformat = S; \
+ break
+ YYCASE_(0, YY_("syntax error"));
+ YYCASE_(1, YY_("syntax error, unexpected %s"));
+ YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+ YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+ YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+ YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+ }
+
+ {
+ YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
+ if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
+
+ if (*yymsg_alloc < yysize)
+ {
+ *yymsg_alloc = 2 * yysize;
+ if (! (yysize <= *yymsg_alloc
+ && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+ *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+ return 1;
+ }
+
+ /* 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 = *yymsg;
+ int yyi = 0;
+ while ((*yyp = *yyformat) != '\0')
+ if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyformat += 2;
+ }
+ else
+ {
+ yyp++;
+ yyformat++;
+ }
+ }
+ return 0;
+}
+#endif /* YYERROR_VERBOSE */
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+{
+ YYUSE (yyvaluep);
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ YYUSE (yytype);
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+}
+
+
+
+
+/* The lookahead symbol. */
+int yychar;
+
+/* The semantic value of the lookahead symbol. */
+YYSTYPE yylval;
+/* Number of syntax errors so far. */
+int yynerrs;
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+int
+yyparse (void)
+{
+ int yystate;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+
+ /* The stacks and their tools:
+ 'yyss': related to states.
+ 'yyvs': related to semantic values.
+
+ Refer to the stacks through separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs;
+ YYSTYPE *yyvsp;
+
+ YYSIZE_T yystacksize;
+
+ int yyn;
+ int yyresult;
+ /* Lookahead token as an internal (translated) token number. */
+ int yytoken = 0;
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ yyssp = yyss = yyssa;
+ yyvsp = yyvs = yyvsa;
+ yystacksize = YYINITDEPTH;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+ 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_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, 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));
+
+ if (yystate == YYFINAL)
+ YYACCEPT;
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+ lookahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to lookahead token. */
+ yyn = yypact[yystate];
+ if (yypact_value_is_default (yyn))
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead 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 (yytable_value_is_error (yyn))
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the lookahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ *++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+
+ 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 143 "deffilep.y" /* yacc.c:1661 */
+ { def_image_name ((yyvsp[-1].id), (yyvsp[0].vma), 0); }
+#line 1463 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 5:
+#line 144 "deffilep.y" /* yacc.c:1661 */
+ { def_image_name ((yyvsp[-1].id), (yyvsp[0].vma), 1); }
+#line 1469 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 6:
+#line 145 "deffilep.y" /* yacc.c:1661 */
+ { def_description ((yyvsp[0].id));}
+#line 1475 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 7:
+#line 146 "deffilep.y" /* yacc.c:1661 */
+ { def_stacksize ((yyvsp[-1].number), (yyvsp[0].number));}
+#line 1481 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 8:
+#line 147 "deffilep.y" /* yacc.c:1661 */
+ { def_heapsize ((yyvsp[-1].number), (yyvsp[0].number));}
+#line 1487 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 9:
+#line 148 "deffilep.y" /* yacc.c:1661 */
+ { def_section ("CODE", (yyvsp[0].number));}
+#line 1493 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 10:
+#line 149 "deffilep.y" /* yacc.c:1661 */
+ { def_section ("DATA", (yyvsp[0].number));}
+#line 1499 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 14:
+#line 153 "deffilep.y" /* yacc.c:1661 */
+ { def_version ((yyvsp[0].number), 0);}
+#line 1505 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 15:
+#line 154 "deffilep.y" /* yacc.c:1661 */
+ { def_version ((yyvsp[-2].number), (yyvsp[0].number));}
+#line 1511 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 16:
+#line 155 "deffilep.y" /* yacc.c:1661 */
+ { def_directive ((yyvsp[0].id));}
+#line 1517 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 17:
+#line 156 "deffilep.y" /* yacc.c:1661 */
+ { def_aligncomm ((yyvsp[-2].id), (yyvsp[0].number));}
+#line 1523 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 21:
+#line 171 "deffilep.y" /* yacc.c:1661 */
+ { def_exports ((yyvsp[-6].id), (yyvsp[-5].id), (yyvsp[-4].number), (yyvsp[-2].number), (yyvsp[0].id)); }
+#line 1529 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 22:
+#line 177 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number) = (yyvsp[-2].number) | (yyvsp[0].number); }
+#line 1535 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 23:
+#line 178 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number) = 0; }
+#line 1541 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 24:
+#line 181 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number) = 1; }
+#line 1547 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 25:
+#line 182 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number) = 1; }
+#line 1553 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 26:
+#line 183 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number) = 2; }
+#line 1559 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 27:
+#line 184 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number) = 2; }
+#line 1565 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 28:
+#line 185 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number) = 4; }
+#line 1571 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 29:
+#line 186 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number) = 4; }
+#line 1577 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 30:
+#line 187 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number) = 8; }
+#line 1583 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 31:
+#line 188 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number) = 8; }
+#line 1589 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 34:
+#line 197 "deffilep.y" /* yacc.c:1661 */
+ { def_import ((yyvsp[-7].id), (yyvsp[-5].id), (yyvsp[-3].id), (yyvsp[-1].id), -1, (yyvsp[0].id)); }
+#line 1595 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 35:
+#line 199 "deffilep.y" /* yacc.c:1661 */
+ { def_import ((yyvsp[-7].id), (yyvsp[-5].id), (yyvsp[-3].id), 0, (yyvsp[-1].number), (yyvsp[0].id)); }
+#line 1601 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 36:
+#line 201 "deffilep.y" /* yacc.c:1661 */
+ { def_import ((yyvsp[-5].id), (yyvsp[-3].id), 0, (yyvsp[-1].id), -1, (yyvsp[0].id)); }
+#line 1607 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 37:
+#line 203 "deffilep.y" /* yacc.c:1661 */
+ { def_import ((yyvsp[-5].id), (yyvsp[-3].id), 0, 0, (yyvsp[-1].number), (yyvsp[0].id)); }
+#line 1613 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 38:
+#line 205 "deffilep.y" /* yacc.c:1661 */
+ { def_import( 0, (yyvsp[-5].id), (yyvsp[-3].id), (yyvsp[-1].id), -1, (yyvsp[0].id)); }
+#line 1619 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 39:
+#line 207 "deffilep.y" /* yacc.c:1661 */
+ { def_import ( 0, (yyvsp[-3].id), 0, (yyvsp[-1].id), -1, (yyvsp[0].id)); }
+#line 1625 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 42:
+#line 216 "deffilep.y" /* yacc.c:1661 */
+ { def_section ((yyvsp[-1].id), (yyvsp[0].number));}
+#line 1631 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 43:
+#line 217 "deffilep.y" /* yacc.c:1661 */
+ { def_section_alt ((yyvsp[-1].id), (yyvsp[0].id));}
+#line 1637 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 44:
+#line 221 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number) = (yyvsp[-2].number) | (yyvsp[0].number); }
+#line 1643 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 45:
+#line 222 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number) = (yyvsp[0].number); }
+#line 1649 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 48:
+#line 229 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number)=(yyvsp[0].number);}
+#line 1655 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 49:
+#line 230 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number)=-1;}
+#line 1661 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 50:
+#line 234 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number) = 1;}
+#line 1667 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 51:
+#line 235 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number) = 2;}
+#line 1673 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 52:
+#line 236 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number)=4;}
+#line 1679 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 53:
+#line 237 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number)=8;}
+#line 1685 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 54:
+#line 241 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "BASE"; }
+#line 1691 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 55:
+#line 242 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "CODE"; }
+#line 1697 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 56:
+#line 243 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "CONSTANT"; }
+#line 1703 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 57:
+#line 244 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "constant"; }
+#line 1709 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 58:
+#line 245 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "DATA"; }
+#line 1715 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 59:
+#line 246 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "data"; }
+#line 1721 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 60:
+#line 247 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "DESCRIPTION"; }
+#line 1727 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 61:
+#line 248 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "DIRECTIVE"; }
+#line 1733 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 62:
+#line 249 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "EXECUTE"; }
+#line 1739 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 63:
+#line 250 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "EXPORTS"; }
+#line 1745 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 64:
+#line 251 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "HEAPSIZE"; }
+#line 1751 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 65:
+#line 252 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "IMPORTS"; }
+#line 1757 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 66:
+#line 259 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "NAME"; }
+#line 1763 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 67:
+#line 260 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "NONAME"; }
+#line 1769 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 68:
+#line 261 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "noname"; }
+#line 1775 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 69:
+#line 262 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "PRIVATE"; }
+#line 1781 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 70:
+#line 263 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "private"; }
+#line 1787 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 71:
+#line 264 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "READ"; }
+#line 1793 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 72:
+#line 265 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "SHARED"; }
+#line 1799 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 73:
+#line 266 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "STACKSIZE"; }
+#line 1805 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 74:
+#line 267 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "VERSION"; }
+#line 1811 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 75:
+#line 268 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id_const) = "WRITE"; }
+#line 1817 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 76:
+#line 271 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id) = (yyvsp[0].id); }
+#line 1823 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 77:
+#line 273 "deffilep.y" /* yacc.c:1661 */
+ {
+ char *name = xmalloc (strlen ((yyvsp[0].id_const)) + 2);
+ sprintf (name, ".%s", (yyvsp[0].id_const));
+ (yyval.id) = name;
+ }
+#line 1833 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 78:
+#line 279 "deffilep.y" /* yacc.c:1661 */
+ {
+ char *name = def_pool_alloc (strlen ((yyvsp[0].id)) + 2);
+ sprintf (name, ".%s", (yyvsp[0].id));
+ (yyval.id) = name;
+ }
+#line 1843 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 79:
+#line 285 "deffilep.y" /* yacc.c:1661 */
+ {
+ char *name = def_pool_alloc (strlen ((yyvsp[-2].id_const)) + 1 + strlen ((yyvsp[0].id)) + 1);
+ sprintf (name, "%s.%s", (yyvsp[-2].id_const), (yyvsp[0].id));
+ (yyval.id) = name;
+ }
+#line 1853 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 80:
+#line 291 "deffilep.y" /* yacc.c:1661 */
+ {
+ char *name = def_pool_alloc (strlen ((yyvsp[-2].id)) + 1 + strlen ((yyvsp[0].id)) + 1);
+ sprintf (name, "%s.%s", (yyvsp[-2].id), (yyvsp[0].id));
+ (yyval.id) = name;
+ }
+#line 1863 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 81:
+#line 298 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id) = (yyvsp[0].id); }
+#line 1869 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 82:
+#line 299 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id) = ""; }
+#line 1875 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 83:
+#line 302 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id) = (yyvsp[0].id); }
+#line 1881 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 84:
+#line 303 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id) = 0; }
+#line 1887 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 85:
+#line 307 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number) = (yyvsp[0].number);}
+#line 1893 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 86:
+#line 308 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number) = -1;}
+#line 1899 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 87:
+#line 312 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id) = (yyvsp[0].id); }
+#line 1905 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 88:
+#line 313 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id) = 0; }
+#line 1911 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 89:
+#line 316 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.vma) = (yyvsp[0].vma);}
+#line 1917 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 90:
+#line 317 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.vma) = (bfd_vma) -1;}
+#line 1923 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 91:
+#line 320 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id) = (yyvsp[0].id); }
+#line 1929 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 92:
+#line 322 "deffilep.y" /* yacc.c:1661 */
+ {
+ char *id = def_pool_alloc (strlen ((yyvsp[0].id)) + 2);
+ sprintf (id, ".%s", (yyvsp[0].id));
+ (yyval.id) = id;
+ }
+#line 1939 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 93:
+#line 328 "deffilep.y" /* yacc.c:1661 */
+ {
+ char *id = def_pool_alloc (strlen ((yyvsp[-3].id)) + 1 + strlen ((yyvsp[-1].digits)) + strlen ((yyvsp[0].id)) + 1);
+ sprintf (id, "%s.%s%s", (yyvsp[-3].id), (yyvsp[-1].digits), (yyvsp[0].id));
+ (yyval.id) = id;
+ }
+#line 1949 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 94:
+#line 335 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.digits) = (yyvsp[0].digits); }
+#line 1955 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 95:
+#line 336 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.digits) = ""; }
+#line 1961 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 96:
+#line 339 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id) = (yyvsp[0].id); }
+#line 1967 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 97:
+#line 340 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.id) = ""; }
+#line 1973 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 98:
+#line 343 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.number) = strtoul ((yyvsp[0].digits), 0, 0); }
+#line 1979 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+ case 99:
+#line 345 "deffilep.y" /* yacc.c:1661 */
+ { (yyval.vma) = (bfd_vma) strtoull ((yyvsp[0].digits), 0, 0); }
+#line 1985 "deffilep.c" /* yacc.c:1661 */
+ break;
+
+
+#line 1989 "deffilep.c" /* yacc.c:1661 */
+ default: break;
+ }
+ /* User semantic actions sometimes alter yychar, and that requires
+ that yytoken be updated with the new translation. We take the
+ approach of translating immediately before every use of yytoken.
+ One alternative is translating here after every semantic action,
+ but that translation would be missed if the semantic action invokes
+ YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+ if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
+ incorrect destructor might then be invoked immediately. In the
+ case of YYERROR or YYBACKUP, subsequent parser actions might lead
+ to an incorrect destructor call or verbose syntax error message
+ before the lookahead is translated. */
+ 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:
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ yyerror (YY_("syntax error"));
+#else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+ yyssp, yytoken)
+ {
+ char const *yymsgp = YY_("syntax error");
+ int yysyntax_error_status;
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ if (yysyntax_error_status == 0)
+ yymsgp = yymsg;
+ else if (yysyntax_error_status == 1)
+ {
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+ if (!yymsg)
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ yysyntax_error_status = 2;
+ }
+ else
+ {
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ yymsgp = yymsg;
+ }
+ }
+ yyerror (yymsgp);
+ if (yysyntax_error_status == 2)
+ goto yyexhaustedlab;
+ }
+# undef YYSYNTAX_ERROR
+#endif
+ }
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead 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 lookahead 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 whose 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 (!yypact_value_is_default (yyn))
+ {
+ 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);
+ }
+
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ *++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+
+
+ /* 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;
+
+#if !defined yyoverflow || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+yyreturn:
+ if (yychar != YYEMPTY)
+ {
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = YYTRANSLATE (yychar);
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ }
+ /* Do not reclaim the symbols of the rule whose 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
+ return yyresult;
+}
+#line 347 "deffilep.y" /* yacc.c:1906 */
+
+
+/*****************************************************************************
+ 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);
+ def_pool_free ();
+ return 0;
+ }
+
+ fclose (the_file);
+
+ while ((d = directives) != NULL)
+ {
+#if TRACE
+ printf ("Adding directive %08x `%s'\n", d->name, d->name);
+#endif
+ def_file_add_directive (def, d->name, d->len);
+ directives = d->next;
+ free (d->name);
+ free (d);
+ }
+ def_pool_free ();
+
+ return def;
+}
+
+void
+def_file_free (def_file *fdef)
+{
+ int i;
+
+ if (!fdef)
+ return;
+ if (fdef->name)
+ free (fdef->name);
+ if (fdef->description)
+ free (fdef->description);
+
+ if (fdef->section_defs)
+ {
+ for (i = 0; i < fdef->num_section_defs; i++)
+ {
+ if (fdef->section_defs[i].name)
+ free (fdef->section_defs[i].name);
+ if (fdef->section_defs[i].class)
+ free (fdef->section_defs[i].class);
+ }
+ free (fdef->section_defs);
+ }
+
+ if (fdef->exports)
+ {
+ for (i = 0; i < fdef->num_exports; i++)
+ {
+ if (fdef->exports[i].internal_name
+ && fdef->exports[i].internal_name != fdef->exports[i].name)
+ free (fdef->exports[i].internal_name);
+ if (fdef->exports[i].name)
+ free (fdef->exports[i].name);
+ if (fdef->exports[i].its_name)
+ free (fdef->exports[i].its_name);
+ }
+ free (fdef->exports);
+ }
+
+ if (fdef->imports)
+ {
+ for (i = 0; i < fdef->num_imports; i++)
+ {
+ if (fdef->imports[i].internal_name
+ && fdef->imports[i].internal_name != fdef->imports[i].name)
+ free (fdef->imports[i].internal_name);
+ if (fdef->imports[i].name)
+ free (fdef->imports[i].name);
+ if (fdef->imports[i].its_name)
+ free (fdef->imports[i].its_name);
+ }
+ free (fdef->imports);
+ }
+
+ while (fdef->modules)
+ {
+ def_file_module *m = fdef->modules;
+
+ fdef->modules = fdef->modules->next;
+ free (m);
+ }
+
+ while (fdef->aligncomms)
+ {
+ def_file_aligncomm *c = fdef->aligncomms;
+
+ fdef->aligncomms = fdef->aligncomms->next;
+ free (c->symbol_name);
+ free (c);
+ }
+
+ free (fdef);
+}
+
+#ifdef DEF_FILE_PRINT
+void
+def_file_print (FILE *file, def_file *fdef)
+{
+ int i;
+
+ fprintf (file, ">>>> def_file at 0x%08x\n", fdef);
+ if (fdef->name)
+ fprintf (file, " name: %s\n", fdef->name ? fdef->name : "(unspecified)");
+ if (fdef->is_dll != -1)
+ fprintf (file, " is dll: %s\n", fdef->is_dll ? "yes" : "no");
+ if (fdef->base_address != (bfd_vma) -1)
+ {
+ fprintf (file, " base address: 0x");
+ fprintf_vma (file, fdef->base_address);
+ fprintf (file, "\n");
+ }
+ if (fdef->description)
+ fprintf (file, " description: `%s'\n", fdef->description);
+ if (fdef->stack_reserve != -1)
+ fprintf (file, " stack reserve: 0x%08x\n", fdef->stack_reserve);
+ if (fdef->stack_commit != -1)
+ fprintf (file, " stack commit: 0x%08x\n", fdef->stack_commit);
+ if (fdef->heap_reserve != -1)
+ fprintf (file, " heap reserve: 0x%08x\n", fdef->heap_reserve);
+ if (fdef->heap_commit != -1)
+ fprintf (file, " heap commit: 0x%08x\n", fdef->heap_commit);
+
+ if (fdef->num_section_defs > 0)
+ {
+ fprintf (file, " section defs:\n");
+
+ for (i = 0; i < fdef->num_section_defs; i++)
+ {
+ fprintf (file, " name: `%s', class: `%s', flags:",
+ fdef->section_defs[i].name, fdef->section_defs[i].class);
+ if (fdef->section_defs[i].flag_read)
+ fprintf (file, " R");
+ if (fdef->section_defs[i].flag_write)
+ fprintf (file, " W");
+ if (fdef->section_defs[i].flag_execute)
+ fprintf (file, " X");
+ if (fdef->section_defs[i].flag_shared)
+ fprintf (file, " S");
+ fprintf (file, "\n");
+ }
+ }
+
+ if (fdef->num_exports > 0)
+ {
+ fprintf (file, " exports:\n");
+
+ for (i = 0; i < fdef->num_exports; i++)
+ {
+ fprintf (file, " name: `%s', int: `%s', ordinal: %d, flags:",
+ fdef->exports[i].name, fdef->exports[i].internal_name,
+ fdef->exports[i].ordinal);
+ if (fdef->exports[i].flag_private)
+ fprintf (file, " P");
+ if (fdef->exports[i].flag_constant)
+ fprintf (file, " C");
+ if (fdef->exports[i].flag_noname)
+ fprintf (file, " N");
+ if (fdef->exports[i].flag_data)
+ fprintf (file, " D");
+ fprintf (file, "\n");
+ }
+ }
+
+ if (fdef->num_imports > 0)
+ {
+ fprintf (file, " imports:\n");
+
+ for (i = 0; i < fdef->num_imports; i++)
+ {
+ fprintf (file, " int: %s, from: `%s', name: `%s', ordinal: %d\n",
+ fdef->imports[i].internal_name,
+ fdef->imports[i].module,
+ fdef->imports[i].name,
+ fdef->imports[i].ordinal);
+ }
+ }
+
+ if (fdef->version_major != -1)
+ fprintf (file, " version: %d.%d\n", fdef->version_major, fdef->version_minor);
+
+ fprintf (file, "<<<< def_file at 0x%08x\n", fdef);
+}
+#endif
+
+/* Helper routine to check for identity of string pointers,
+ which might be NULL. */
+
+static int
+are_names_equal (const char *s1, const char *s2)
+{
+ if (!s1 && !s2)
+ return 0;
+ if (!s1 || !s2)
+ return (!s1 ? -1 : 1);
+ return strcmp (s1, s2);
+}
+
+static int
+cmp_export_elem (const def_file_export *e, const char *ex_name,
+ const char *in_name, const char *its_name,
+ int ord)
+{
+ int r;
+
+ if ((r = are_names_equal (ex_name, e->name)) != 0)
+ return r;
+ if ((r = are_names_equal (in_name, e->internal_name)) != 0)
+ return r;
+ if ((r = are_names_equal (its_name, e->its_name)) != 0)
+ return r;
+ return (ord - e->ordinal);
+}
+
+/* Search the position of the identical element, or returns the position
+ of the next higher element. If last valid element is smaller, then MAX
+ is returned. */
+
+static int
+find_export_in_list (def_file_export *b, int max,
+ const char *ex_name, const char *in_name,
+ const char *its_name, int ord, int *is_ident)
+{
+ int e, l, r, p;
+
+ *is_ident = 0;
+ if (!max)
+ return 0;
+ if ((e = cmp_export_elem (b, ex_name, in_name, its_name, ord)) <= 0)
+ {
+ if (!e)
+ *is_ident = 1;
+ return 0;
+ }
+ if (max == 1)
+ return 1;
+ if ((e = cmp_export_elem (b + (max - 1), ex_name, in_name, its_name, ord)) > 0)
+ return max;
+ else if (!e || max == 2)
+ {
+ if (!e)
+ *is_ident = 1;
+ return max - 1;
+ }
+ l = 0; r = max - 1;
+ while (l < r)
+ {
+ p = (l + r) / 2;
+ e = cmp_export_elem (b + p, ex_name, in_name, its_name, ord);
+ if (!e)
+ {
+ *is_ident = 1;
+ return p;
+ }
+ else if (e < 0)
+ r = p - 1;
+ else if (e > 0)
+ l = p + 1;
+ }
+ if ((e = cmp_export_elem (b + l, ex_name, in_name, its_name, ord)) > 0)
+ ++l;
+ else if (!e)
+ *is_ident = 1;
+ return l;
+}
+
+def_file_export *
+def_file_add_export (def_file *fdef,
+ const char *external_name,
+ const char *internal_name,
+ int ordinal,
+ const char *its_name,
+ int *is_dup)
+{
+ def_file_export *e;
+ int pos;
+ int max_exports = ROUND_UP(fdef->num_exports, 32);
+
+ if (internal_name && !external_name)
+ external_name = internal_name;
+ if (external_name && !internal_name)
+ internal_name = external_name;
+
+ /* We need to avoid duplicates. */
+ *is_dup = 0;
+ pos = find_export_in_list (fdef->exports, fdef->num_exports,
+ external_name, internal_name,
+ its_name, ordinal, is_dup);
+
+ if (*is_dup != 0)
+ return (fdef->exports + pos);
+
+ if (fdef->num_exports >= max_exports)
+ {
+ max_exports = ROUND_UP(fdef->num_exports + 1, 32);
+ if (fdef->exports)
+ fdef->exports = xrealloc (fdef->exports,
+ max_exports * sizeof (def_file_export));
+ else
+ fdef->exports = xmalloc (max_exports * sizeof (def_file_export));
+ }
+
+ e = fdef->exports + pos;
+ if (pos != fdef->num_exports)
+ memmove (&e[1], e, (sizeof (def_file_export) * (fdef->num_exports - pos)));
+ memset (e, 0, sizeof (def_file_export));
+ e->name = xstrdup (external_name);
+ e->internal_name = xstrdup (internal_name);
+ e->its_name = (its_name ? xstrdup (its_name) : NULL);
+ e->ordinal = ordinal;
+ fdef->num_exports++;
+ return e;
+}
+
+def_file_module *
+def_get_module (def_file *fdef, const char *name)
+{
+ def_file_module *s;
+
+ for (s = fdef->modules; s; s = s->next)
+ if (strcmp (s->name, name) == 0)
+ return s;
+
+ return NULL;
+}
+
+static def_file_module *
+def_stash_module (def_file *fdef, const char *name)
+{
+ def_file_module *s;
+
+ if ((s = def_get_module (fdef, name)) != NULL)
+ return s;
+ s = xmalloc (sizeof (def_file_module) + strlen (name));
+ s->next = fdef->modules;
+ fdef->modules = s;
+ s->user_data = 0;
+ strcpy (s->name, name);
+ return s;
+}
+
+static int
+cmp_import_elem (const def_file_import *e, const char *ex_name,
+ const char *in_name, const char *module,
+ int ord)
+{
+ int r;
+
+ if ((r = are_names_equal (module, (e->module ? e->module->name : NULL))))
+ return r;
+ if ((r = are_names_equal (ex_name, e->name)) != 0)
+ return r;
+ if ((r = are_names_equal (in_name, e->internal_name)) != 0)
+ return r;
+ if (ord != e->ordinal)
+ return (ord < e->ordinal ? -1 : 1);
+ return 0;
+}
+
+/* Search the position of the identical element, or returns the position
+ of the next higher element. If last valid element is smaller, then MAX
+ is returned. */
+
+static int
+find_import_in_list (def_file_import *b, int max,
+ const char *ex_name, const char *in_name,
+ const char *module, int ord, int *is_ident)
+{
+ int e, l, r, p;
+
+ *is_ident = 0;
+ if (!max)
+ return 0;
+ if ((e = cmp_import_elem (b, ex_name, in_name, module, ord)) <= 0)
+ {
+ if (!e)
+ *is_ident = 1;
+ return 0;
+ }
+ if (max == 1)
+ return 1;
+ if ((e = cmp_import_elem (b + (max - 1), ex_name, in_name, module, ord)) > 0)
+ return max;
+ else if (!e || max == 2)
+ {
+ if (!e)
+ *is_ident = 1;
+ return max - 1;
+ }
+ l = 0; r = max - 1;
+ while (l < r)
+ {
+ p = (l + r) / 2;
+ e = cmp_import_elem (b + p, ex_name, in_name, module, ord);
+ if (!e)
+ {
+ *is_ident = 1;
+ return p;
+ }
+ else if (e < 0)
+ r = p - 1;
+ else if (e > 0)
+ l = p + 1;
+ }
+ if ((e = cmp_import_elem (b + l, ex_name, in_name, module, ord)) > 0)
+ ++l;
+ else if (!e)
+ *is_ident = 1;
+ return l;
+}
+
+def_file_import *
+def_file_add_import (def_file *fdef,
+ const char *name,
+ const char *module,
+ int ordinal,
+ const char *internal_name,
+ const char *its_name,
+ int *is_dup)
+{
+ def_file_import *i;
+ int pos;
+ int max_imports = ROUND_UP (fdef->num_imports, 16);
+
+ /* We need to avoid here duplicates. */
+ *is_dup = 0;
+ pos = find_import_in_list (fdef->imports, fdef->num_imports,
+ name,
+ (!internal_name ? name : internal_name),
+ module, ordinal, is_dup);
+ if (*is_dup != 0)
+ return fdef->imports + pos;
+
+ if (fdef->num_imports >= max_imports)
+ {
+ max_imports = ROUND_UP (fdef->num_imports+1, 16);
+
+ if (fdef->imports)
+ fdef->imports = xrealloc (fdef->imports,
+ max_imports * sizeof (def_file_import));
+ else
+ fdef->imports = xmalloc (max_imports * sizeof (def_file_import));
+ }
+ i = fdef->imports + pos;
+ if (pos != fdef->num_imports)
+ memmove (&i[1], i, (sizeof (def_file_import) * (fdef->num_imports - pos)));
+ memset (i, 0, sizeof (def_file_import));
+ if (name)
+ i->name = xstrdup (name);
+ if (module)
+ i->module = def_stash_module (fdef, module);
+ i->ordinal = ordinal;
+ if (internal_name)
+ i->internal_name = xstrdup (internal_name);
+ else
+ i->internal_name = i->name;
+ i->its_name = (its_name ? xstrdup (its_name) : NULL);
+ fdef->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 separating options
+ - a NUL separating options. */
+ for (tend = (char *) (param + 1);
+ (tend < pend
+ && !(ISSPACE (tend[-1]) && *tend == '-')
+ && *tend != '\n' && *tend != 0);
+ tend++)
+ ;
+
+ for (i = 0; diropts[i].param; i++)
+ {
+ 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)
+ {
+ if (tend < pend)
+ {
+ char saved;
+
+ saved = * tend;
+ * tend = 0;
+ /* xgettext:c-format */
+ einfo (_("Warning: .drectve `%s' unrecognized\n"), param);
+ * tend = saved;
+ }
+ else
+ {
+ einfo (_("Warning: corrupt .drectve at end of def file\n"));
+ }
+ }
+
+ lex_parse_string = 0;
+ param = tend;
+ }
+
+ def = save_def;
+ def_pool_free ();
+}
+
+/* Parser Callbacks. */
+
+static void
+def_image_name (const char *name, bfd_vma 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,
+ const char *its_name)
+{
+ def_file_export *dfe;
+ int is_dup = 0;
+
+ 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,
+ its_name, &is_dup);
+
+ /* We might check here for flag redefinition and warn. For now we
+ ignore duplicates silently. */
+ if (is_dup)
+ return;
+
+ 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,
+ const char *its_name)
+{
+ char *buf = 0;
+ const char *ext = dllext ? dllext : "dll";
+ int is_dup = 0;
+
+ 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, its_name,
+ &is_dup);
+ 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, *p;
+
+ p = NULL;
+ c = def->aligncomms;
+ while (c != NULL)
+ {
+ int e = strcmp (c->symbol_name, str);
+ if (!e)
+ {
+ /* Not sure if we want to allow here duplicates with
+ different alignments, but for now we keep them. */
+ e = (int) c->alignment - align;
+ if (!e)
+ return;
+ }
+ if (e > 0)
+ break;
+ c = (p = c)->next;
+ }
+
+ c = xmalloc (sizeof (def_file_aligncomm));
+ c->symbol_name = xstrdup (str);
+ c->alignment = (unsigned int) align;
+ if (!p)
+ {
+ c->next = def->aligncomms;
+ def->aligncomms = c;
+ }
+ else
+ {
+ c->next = p->next;
+ p->next = 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 = def_pool_strdup (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 = def_pool_strdup (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 = def_pool_strdup (buffer);
+#if TRACE
+ printf ("lex: `%s' returns ID\n", buffer);
+#endif
+ return ID;
+ }
+
+ if ( c == '=')
+ {
+ c = def_getc ();
+ if (c == '=')
+ {
+#if TRACE
+ printf ("lex: `==' returns EQUAL\n");
+#endif
+ return EQUAL;
+ }
+ def_ungetc (c);
+#if TRACE
+ printf ("lex: `=' returns itself\n");
+#endif
+ return '=';
+ }
+ if (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 ();
+}
+
+static char *
+def_pool_alloc (size_t sz)
+{
+ def_pool_str *e;
+
+ e = (def_pool_str *) xmalloc (sizeof (def_pool_str) + sz);
+ e->next = pool_strs;
+ pool_strs = e;
+ return e->data;
+}
+
+static char *
+def_pool_strdup (const char *str)
+{
+ char *s;
+ size_t len;
+ if (!str)
+ return NULL;
+ len = strlen (str) + 1;
+ s = def_pool_alloc (len);
+ memcpy (s, str, len);
+ return s;
+}
+
+static void
+def_pool_free (void)
+{
+ def_pool_str *p;
+ while ((p = pool_strs) != NULL)
+ {
+ pool_strs = p->next;
+ free (p);
+ }
+}
diff --git a/ld/deffilep.h b/ld/deffilep.h
new file mode 100644
index 0000000..04644f7
--- /dev/null
+++ b/ld/deffilep.h
@@ -0,0 +1,132 @@
+/* A Bison parser, made by GNU Bison 3.0. */
+
+/* Bison interface for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2013 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 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, see <http://www.gnu.org/licenses/>. */
+
+/* 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. */
+
+#ifndef YY_YY_DEFFILEP_H_INCLUDED
+# define YY_YY_DEFFILEP_H_INCLUDED
+/* Debug traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
+
+/* Token type. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ 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,
+ EQUAL = 283,
+ ID = 284,
+ DIGITS = 285
+ };
+#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 EQUAL 283
+#define ID 284
+#define DIGITS 285
+
+/* Value type. */
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE YYSTYPE;
+union YYSTYPE
+{
+#line 113 "deffilep.y" /* yacc.c:1915 */
+
+ char *id;
+ const char *id_const;
+ int number;
+ bfd_vma vma;
+ char *digits;
+
+#line 122 "deffilep.h" /* yacc.c:1915 */
+};
+# define YYSTYPE_IS_TRIVIAL 1
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+extern YYSTYPE yylval;
+
+int yyparse (void);
+
+#endif /* !YY_YY_DEFFILEP_H_INCLUDED */
diff --git a/ld/ld.1 b/ld/ld.1
new file mode 100644
index 0000000..9a9bedd
--- /dev/null
+++ b/ld/ld.1
@@ -0,0 +1,2747 @@
+.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.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" ''
+. ds C`
+. ds C'
+'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 (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" 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 "2017-03-02" "binutils-2.28" "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\-\-audit\fR \fI\s-1AUDITLIB\s0\fR" 4
+.IX Item "--audit AUDITLIB"
+Adds \fI\s-1AUDITLIB\s0\fR to the \f(CW\*(C`DT_AUDIT\*(C'\fR entry of the dynamic section.
+\&\fI\s-1AUDITLIB\s0\fR is not checked for existence, nor will it use the \s-1DT_SONAME\s0
+specified in the library. If specified multiple times \f(CW\*(C`DT_AUDIT\*(C'\fR
+will contain a colon separated list of audit interfaces to use. If the linker
+finds an object with an audit entry while searching for shared libraries,
+it will add a corresponding \f(CW\*(C`DT_DEPAUDIT\*(C'\fR entry in the output file.
+This option is only meaningful on \s-1ELF\s0 platforms supporting the rtld-audit
+interface.
+.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\-\-depaudit\fR \fI\s-1AUDITLIB\s0\fR" 4
+.IX Item "--depaudit AUDITLIB"
+.PD 0
+.IP "\fB\-P\fR \fI\s-1AUDITLIB\s0\fR" 4
+.IX Item "-P AUDITLIB"
+.PD
+Adds \fI\s-1AUDITLIB\s0\fR to the \f(CW\*(C`DT_DEPAUDIT\*(C'\fR entry of the dynamic section.
+\&\fI\s-1AUDITLIB\s0\fR is not checked for existence, nor will it use the \s-1DT_SONAME\s0
+specified in the library. If specified multiple times \f(CW\*(C`DT_DEPAUDIT\*(C'\fR
+will contain a colon separated list of audit interfaces to use. This
+option is only meaningful on \s-1ELF\s0 platforms supporting the rtld-audit interface.
+The \-P option is provided for Solaris compatibility.
+.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 ELF\s0 that support 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, controlled by the \fB\-\-sysroot\fR option, or
+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 disable linking against shared
+libraries. If the output format supports Unix style magic numbers,
+mark the output as \f(CW\*(C`NMAGIC\*(C'\fR.
+.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\-\-push\-state\fR" 4
+.IX Item "--push-state"
+The \fB\-\-push\-state\fR allows to preserve the current state of the
+flags which govern the input file handling so that they can all be
+restored with one corresponding \fB\-\-pop\-state\fR option.
+.Sp
+The option which are covered are: \fB\-Bdynamic\fR, \fB\-Bstatic\fR,
+\&\fB\-dn\fR, \fB\-dy\fR, \fB\-call_shared\fR, \fB\-non_shared\fR,
+\&\fB\-static\fR, \fB\-N\fR, \fB\-n\fR, \fB\-\-whole\-archive\fR,
+\&\fB\-\-no\-whole\-archive\fR, \fB\-r\fR, \fB\-Ur\fR,
+\&\fB\-\-copy\-dt\-needed\-entries\fR, \fB\-\-no\-copy\-dt\-needed\-entries\fR,
+\&\fB\-\-as\-needed\fR, \fB\-\-no\-as\-needed\fR, and \fB\-a\fR.
+.Sp
+One target for this option are specifications for \fIpkg-config\fR. When
+used with the \fB\-\-libs\fR option all possibly needed libraries are
+listed and then possibly linked with all the time. It is better to return
+something as follows:
+.Sp
+.Vb 1
+\& \-Wl,\-\-push\-state,\-\-as\-needed \-libone \-libtwo \-Wl,\-\-pop\-state
+.Ve
+.Sp
+Undoes the effect of \-\-push\-state, restores the previous values of the
+flags governing input file handling.
+.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.
+.Sp
+If this option is being used to force additional modules to be pulled
+into the link, and if it is an error for the symbol to remain
+undefined, then the option \fB\-\-require\-defined\fR should be used
+instead.
+.IP "\fB\-\-require\-defined=\fR\fIsymbol\fR" 4
+.IX Item "--require-defined=symbol"
+Require that \fIsymbol\fR is defined in the output file. This option
+is the same as option \fB\-\-undefined\fR except that if \fIsymbol\fR
+is not defined in the output file then the linker will issue an error
+and exit. The same effect can be achieved in a linker script by using
+\&\f(CW\*(C`EXTERN\*(C'\fR, \f(CW\*(C`ASSERT\*(C'\fR and \f(CW\*(C`DEFINED\*(C'\fR together. This option
+can be used multiple times to require additional symbols.
+.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\-\-orphan\-handling=\fR\fI\s-1MODE\s0\fR" 4
+.IX Item "--orphan-handling=MODE"
+Control how orphan sections are handled. An orphan section is one not
+specifically mentioned in a linker script.
+.Sp
+\&\fI\s-1MODE\s0\fR can have any of the following values:
+.RS 4
+.ie n .IP """place""" 4
+.el .IP "\f(CWplace\fR" 4
+.IX Item "place"
+Orphan sections are placed into a suitable output section following
+the strategy described in \fBOrphan Sections\fR. The option
+\&\fB\-\-unique\fR also effects how sections are placed.
+.ie n .IP """discard""" 4
+.el .IP "\f(CWdiscard\fR" 4
+.IX Item "discard"
+All orphan sections are discarded, by placing them in the
+\&\fB/DISCARD/\fR section.
+.ie n .IP """warn""" 4
+.el .IP "\f(CWwarn\fR" 4
+.IX Item "warn"
+The linker will place the orphan section as for \f(CW\*(C`place\*(C'\fR and also
+issue a warning.
+.ie n .IP """error""" 4
+.el .IP "\f(CWerror\fR" 4
+.IX Item "error"
+The linker will exit with an error if any orphan section is found.
+.RE
+.RS 4
+.Sp
+The default if \fB\-\-orphan\-handling\fR is not given is \f(CW\*(C`place\*(C'\fR.
+.RE
+.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 "\fBcommon\fR" 4
+.IX Item "common"
+Generate common symbols with the \s-1STT_COMMON\s0 type druing a relocatable
+link.
+.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 "\fBglobal\fR" 4
+.IX Item "global"
+This option is only meaningful when building a shared object. It makes
+the symbols defined by this shared object available for symbol resolution
+of subsequently loaded libraries.
+.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 "\fBnocommon\fR" 4
+.IX Item "nocommon"
+Generate common symbols with the \s-1STT_OBJECT\s0 type druing a relocatable
+link.
+.IP "\fBnocopyreloc\fR" 4
+.IX Item "nocopyreloc"
+Disable linker generated .dynbss variables used in place of variables
+defined in shared libraries. May result in dynamic text relocations.
+.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 "\fBtext\fR" 4
+.IX Item "text"
+Treat \s-1DT_TEXTREL\s0 in shared object as error.
+.IP "\fBnotext\fR" 4
+.IX Item "notext"
+Don't treat \s-1DT_TEXTREL\s0 in shared object as error.
+.IP "\fBtextoff\fR" 4
+.IX Item "textoff"
+Don't treat \s-1DT_TEXTREL\s0 in shared object as error.
+.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.
+.IP "\fBstack\-size=\fR\fIvalue\fR" 4
+.IX Item "stack-size=value"
+Specify a stack size for in an \s-1ELF \s0\f(CW\*(C`PT_GNU_STACK\*(C'\fR segment.
+Specifying zero will override any default non-zero sized
+\&\f(CW\*(C`PT_GNU_STACK\*(C'\fR segment creation.
+.IP "\fBbndplt\fR" 4
+.IX Item "bndplt"
+Always generate \s-1BND\s0 prefix in \s-1PLT\s0 entries. Supported for Linux/x86_64.
+.IP "\fBnoextern-protected-data\fR" 4
+.IX Item "noextern-protected-data"
+Don't treat protected data symbol as external when building shared
+library. This option overrides linker backend default. It can be used
+to workaround incorrect relocations against protected data symbols
+generated by compiler. Updates on protected data symbols by another
+module aren't visible to the resulting shared library. Supported for
+i386 and x86\-64.
+.IP "\fBnodynamic-undefined-weak\fR" 4
+.IX Item "nodynamic-undefined-weak"
+Don't treat undefined weak symbols as dynamic when building executable.
+This option overrides linker backend default. It can be used to avoid
+dynamic relocations against undefined weak symbols in executable.
+Supported for i386 and x86\-64.
+.IP "\fBnoreloc-overflow\fR" 4
+.IX Item "noreloc-overflow"
+Disable relocation overflow check. This can be used to disable
+relocation overflow check if there will be no dynamic relocation
+overflow at run-time. Supported for x86_64.
+.IP "\fBcall\-nop=prefix\-addr\fR" 4
+.IX Item "call-nop=prefix-addr"
+.PD 0
+.IP "\fBcall\-nop=prefix\-nop\fR" 4
+.IX Item "call-nop=prefix-nop"
+.IP "\fBcall\-nop=suffix\-nop\fR" 4
+.IX Item "call-nop=suffix-nop"
+.IP "\fBcall\-nop=prefix\-\fR\fIbyte\fR" 4
+.IX Item "call-nop=prefix-byte"
+.IP "\fBcall\-nop=suffix\-\fR\fIbyte\fR" 4
+.IX Item "call-nop=suffix-byte"
+.PD
+Specify the 1\-byte \f(CW\*(C`NOP\*(C'\fR padding when transforming indirect call
+to a locally defined function, foo, via its \s-1GOT\s0 slot.
+\&\fBcall\-nop=prefix\-addr\fR generates \f(CW\*(C`0x67 call foo\*(C'\fR.
+\&\fBcall\-nop=prefix\-nop\fR generates \f(CW\*(C`0x90 call foo\*(C'\fR.
+\&\fBcall\-nop=suffix\-nop\fR generates \f(CW\*(C`call foo 0x90\*(C'\fR.
+\&\fBcall\-nop=prefix\-\fR\fIbyte\fR generates \f(CW\*(C`\f(CIbyte\f(CW call foo\*(C'\fR.
+\&\fBcall\-nop=suffix\-\fR\fIbyte\fR generates \f(CW\*(C`call foo \f(CIbyte\f(CW\*(C'\fR.
+Supported for i386 and x86_64.
+.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 DT_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 or not. \fB\-\-as\-needed\fR causes a \s-1DT_NEEDED\s0 tag to only be
+emitted for a library that \fIat that point in the link\fR satisfies a
+non-weak undefined symbol reference from a regular object file or, if
+the library is not found in the \s-1DT_NEEDED\s0 lists of other needed libraries, a
+non-weak undefined symbol reference from another needed dynamic library.
+Object files or libraries appearing on the command line \fIafter\fR
+the library in question do not affect whether the library is seen as
+needed. This is similar to the rules for extraction of object files
+from archives. \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
+These two options have been deprecated because of the similarity of
+their names to the \fB\-\-as\-needed\fR and \fB\-\-no\-as\-needed\fR
+options. They have been replaced by \fB\-\-copy\-dt\-needed\-entries\fR
+and \fB\-\-no\-copy\-dt\-needed\-entries\fR.
+.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 can also be used with the
+\&\fB\-\-export\-dynamic\fR option, when creating a position independent
+executable, to bind references to global symbols to the definition within
+the executable. This option is only meaningful on \s-1ELF\s0 platforms which
+support shared libraries and position independent executables.
+.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 can also be used with the \fB\-\-export\-dynamic\fR option,
+when creating a position independent executable, to bind references
+to global function symbols to the definition within the executable.
+This option is only meaningful on \s-1ELF\s0 platforms which support shared
+libraries and position independent executables.
+.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\-\-copy\-dt\-needed\-entries\fR" 4
+.IX Item "--copy-dt-needed-entries"
+.PD 0
+.IP "\fB\-\-no\-copy\-dt\-needed\-entries\fR" 4
+.IX Item "--no-copy-dt-needed-entries"
+.PD
+This option affects the treatment of dynamic libraries referred to
+by \s-1DT_NEEDED\s0 tags \fIinside\fR \s-1ELF\s0 dynamic libraries mentioned on the
+command line. Normally the linker won't add a \s-1DT_NEEDED\s0 tag to the
+output binary for each library mentioned in a \s-1DT_NEEDED\s0 tag in an
+input dynamic library. With \fB\-\-copy\-dt\-needed\-entries\fR
+specified on the command line however any dynamic libraries that
+follow it will have their \s-1DT_NEEDED\s0 entries added. The default
+behaviour can be restored with \fB\-\-no\-copy\-dt\-needed\-entries\fR.
+.Sp
+This option also has an effect on the resolution of symbols in dynamic
+libraries. With \fB\-\-copy\-dt\-needed\-entries\fR dynamic libraries
+mentioned on the command line will be recursively searched, following
+their \s-1DT_NEEDED\s0 tags to other libraries, in order to resolve symbols
+required by the output binary. With the default setting however
+the searching of dynamic libraries that follow it will stop with the
+dynamic library itself. No \s-1DT_NEEDED\s0 links will be traversed to resolve
+symbols.
+.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. If the symbol is defined as a common value then any files
+where this happens appear next. Finally any files that reference the
+symbol are listed.
+.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\-\-no\-dynamic\-linker\fR" 4
+.IX Item "--no-dynamic-linker"
+When producing an executable file, omit the request for a dynamic
+linker to be used at load-time. This is only meaningful for \s-1ELF\s0
+executables that contain dynamic relocations, and usually requires
+entry point code that is capable of processing these relocations.
+.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. Note that garbage
+collection for \s-1COFF\s0 and \s-1PE\s0 format targets is supported, but the
+implementation is currently considered to be experimental.
+.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 explicitly
+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\-\-gc\-keep\-exported\fR" 4
+.IX Item "--gc-keep-exported"
+When \fB\-\-gc\-sections\fR is enabled, this option prevents garbage
+collection of unused input sections that contain global symbols having
+default or protected visibility. This option is intended to be used for
+executables where unreferenced sections would otherwise be garbage
+collected regardless of the external visibility of contained symbols.
+Note that this option has no effect when linking shared objects since
+it is already the default behaviour. This option is only supported for
+\&\s-1ELF\s0 format targets.
+.IP "\fB\-\-print\-output\-format\fR" 4
+.IX Item "--print-output-format"
+Print the name of the default output format (perhaps influenced by
+other command-line options). This is the string that would appear
+in an \f(CW\*(C`OUTPUT_FORMAT\*(C'\fR linker script command.
+.IP "\fB\-\-print\-memory\-usage\fR" 4
+.IX Item "--print-memory-usage"
+Print used size, total size and used size of memory regions created with
+the \fB\s-1MEMORY\s0\fR command. This is useful on embedded targets to have a
+quick view of amount of free memory. The format of the output has one
+headline and one line per region. It is both human readable and easily
+parsable by tools. Here is an example of an output:
+.Sp
+.Vb 3
+\& Memory region Used Size Region Size %age Used
+\& ROM: 256 KB 1 MB 25.00%
+\& RAM: 32 B 2 GB 0.00%
+.Ve
+.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\-\-out\-implib\fR \fIfile\fR" 4
+.IX Item "--out-implib file"
+Create an import library in \fIfile\fR corresponding to the executable
+the linker is generating (eg. a \s-1DLL\s0 or \s-1ELF\s0 program). This import
+library (which should be called \f(CW\*(C`*.dll.a\*(C'\fR or \f(CW\*(C`*.a\*(C'\fR for DLLs)
+may be used to link clients against the generated executable; this
+behaviour makes it possible to skip a separate import library creation
+step (eg. \f(CW\*(C`dlltool\*(C'\fR for DLLs). This option is only available for
+the i386 \s-1PE\s0 and \s-1ELF\s0 targetted ports of the linker.
+.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"
+.PD 0
+.IP "\fB\-\-no\-relax\fR" 4
+.IX Item "--no-relax"
+.PD
+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 target specific,
+global optimizations that become possible when the linker resolves
+addressing in the program, such as relaxing address modes,
+synthesizing new instructions, selecting shorter version of current
+instructions, and combining constant values.
+.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.
+.Sp
+On platforms where \fB\-\-relax\fR is accepted the option
+\&\fB\-\-no\-relax\fR can be used to disable the feature.
+.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 path 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
+The tokens \fI\f(CI$ORIGIN\fI\fR and \fI\f(CI$LIB\fI\fR can appear in these search
+directories. They will be replaced by the full path to the directory
+containing the program or shared object in the case of \fI\f(CI$ORIGIN\fI\fR
+and either \fBlib\fR \- for 32\-bit binaries \- or \fBlib64\fR \- for
+64\-bit binaries \- in the case of \fI\f(CI$LIB\fI\fR.
+.Sp
+The alternative form of these tokens \- \fI${\s-1ORIGIN\s0}\fR and
+\&\fI${\s-1LIB\s0}\fR can also be used. The token \fI\f(CI$PLATFORM\fI\fR is not
+supported.
+.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, 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, XCOFF\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, it will set the address of the first
+byte of the text segment.
+.IP "\fB\-Trodata\-segment=\fR\fIorg\fR" 4
+.IX Item "-Trodata-segment=org"
+When creating an \s-1ELF\s0 executable or shared object for a target where
+the read-only data is in its own segment separate from the executable
+text, it will set the address of the first byte of the read-only data segment.
+.IP "\fB\-Tldata\-segment=\fR\fIorg\fR" 4
+.IX Item "-Tldata-segment=org"
+When creating an \s-1ELF\s0 executable or shared object for x86\-64 medium memory
+model, it will set the address of the first byte of the ldata 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\fI\s-1NUMBER\s0\fR\fB]\fR" 4
+.IX Item "--verbose[=NUMBER]"
+.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. If the optional \fI\s-1NUMBER\s0\fR
+argument > 1, plugin symbol status will also be displayed.
+.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 practice,
+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 practice, 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"
+.PD 0
+.IP "\fB\-\-no\-eh\-frame\-hdr\fR" 4
+.IX Item "--no-eh-frame-hdr"
+.PD
+Request (\fB\-\-eh\-frame\-hdr\fR) or suppress
+(\fB\-\-no\-eh\-frame\-hdr\fR) the 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\-\-no\-ld\-generated\-unwind\-info\fR" 4
+.IX Item "--no-ld-generated-unwind-info"
+Request creation of \f(CW\*(C`.eh_frame\*(C'\fR unwind info for linker
+generated code sections like \s-1PLT. \s0 This option is on by default
+if linker generated unwind info is supported.
+.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 new dynamic tags will be created as needed
+and older dynamic tags will be omitted.
+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\-\-compress\-debug\-sections=none\fR" 4
+.IX Item "--compress-debug-sections=none"
+.PD 0
+.IP "\fB\-\-compress\-debug\-sections=zlib\fR" 4
+.IX Item "--compress-debug-sections=zlib"
+.IP "\fB\-\-compress\-debug\-sections=zlib\-gnu\fR" 4
+.IX Item "--compress-debug-sections=zlib-gnu"
+.IP "\fB\-\-compress\-debug\-sections=zlib\-gabi\fR" 4
+.IX Item "--compress-debug-sections=zlib-gabi"
+.PD
+On \s-1ELF\s0 platforms, these options control how \s-1DWARF\s0 debug sections are
+compressed using zlib.
+.Sp
+\&\fB\-\-compress\-debug\-sections=none\fR doesn't compress \s-1DWARF\s0 debug
+sections. \fB\-\-compress\-debug\-sections=zlib\-gnu\fR compresses
+\&\s-1DWARF\s0 debug sections and renames them to begin with \fB.zdebug\fR
+instead of \fB.debug\fR. \fB\-\-compress\-debug\-sections=zlib\-gabi\fR
+also compresses \s-1DWARF\s0 debug sections, but rather than renaming them it
+sets the \s-1SHF_COMPRESSED\s0 flag in the sections' headers.
+.Sp
+The \fB\-\-compress\-debug\-sections=zlib\fR option is an alias for
+\&\fB\-\-compress\-debug\-sections=zlib\-gabi\fR.
+.Sp
+Note that this option overrides any compression in input debug
+sections, so if a binary is linked with \fB\-\-compress\-debug\-sections=none\fR
+for example, then any compressed debug sections in input files will be
+uncompressed before they are copied into the output binary.
+.Sp
+The default compression behaviour varies depending upon the target
+involved and the configure options used to build the toolchain. The
+default can be determined by examining the output from the linker's
+\&\fB\-\-help\fR option.
+.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 the creation of a \f(CW\*(C`.note.gnu.build\-id\*(C'\fR \s-1ELF\s0 note section
+or a \f(CW\*(C`.buildid\*(C'\fR \s-1COFF\s0 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 \s-1COFF\s0 object format add an extension that permits
+the use of section names longer than eight characters, the normal limit
+for \s-1COFF. \s0 By default, these names are only allowed in object files, as
+fully-linked executable images do not carry the \s-1COFF\s0 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\-\-leading\-underscore\fR" 4
+.IX Item "--leading-underscore"
+.PD 0
+.IP "\fB\-\-no\-leading\-underscore\fR" 4
+.IX Item "--no-leading-underscore"
+.PD
+For most targets default symbol-prefix is an underscore and is defined
+in target's description. By this option it is possible to
+disable/enable the default underscore symbol-prefix.
+.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\-\-exclude\-all\-symbols\fR" 4
+.IX Item "--exclude-all-symbols"
+Specifies no symbols should be automatically exported.
+[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.INI. \s0 Otherwise, this bit has no effect.
+[This option is specific to \s-1PE\s0 targeted ports of the linker]
+.IP "\fB\-\-disable\-large\-address\-aware\fR" 4
+.IX Item "--disable-large-address-aware"
+Reverts the effect of a previous \fB\-\-large\-address\-aware\fR option.
+This is useful if \fB\-\-large\-address\-aware\fR is always set by the compiler
+driver (e.g. Cygwin gcc) and the executable does not support virtual
+addresses greater than 2 gigabytes.
+[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\-\-enable\-auto\-image\-base\fR" 4
+.IX Item "--enable-auto-image-base"
+.PD 0
+.IP "\fB\-\-enable\-auto\-image\-base=\fR\fIvalue\fR" 4
+.IX Item "--enable-auto-image-base=value"
+.PD
+Automatically choose the image base for DLLs, optionally starting with base
+\&\fIvalue\fR, 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 practice 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 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\-\-high\-entropy\-va\fR" 4
+.IX Item "--high-entropy-va"
+Image is compatible with 64\-bit address space layout randomization
+(\s-1ASLR\s0).
+.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 SP2\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.
+.IP "\fB\-\-insert\-timestamp\fR" 4
+.IX Item "--insert-timestamp"
+.PD 0
+.IP "\fB\-\-no\-insert\-timestamp\fR" 4
+.IX Item "--no-insert-timestamp"
+.PD
+Insert a real timestamp into the image. This is the default behaviour
+as it matches legacy code and it means that the image will work with
+other, proprietary tools. The problem with this default is that it
+will result in slightly different images being produced each time the
+same sources are linked. The option \fB\-\-no\-insert\-timestamp\fR
+can be used to insert a zero value for the timestamp, this ensuring
+that binaries produced from identical sources will compare
+identically.
+.PP
+The C6X uClinux target uses a binary format called \s-1DSBT\s0 to support shared
+libraries. Each shared library in the system needs to have a unique index;
+all executables use an index of 0.
+.IP "\fB\-\-dsbt\-size\fR \fIsize\fR" 4
+.IX Item "--dsbt-size size"
+This option sets the number of entries in the \s-1DSBT\s0 of the current executable
+or shared library to \fIsize\fR. The default is to create a table with 64
+entries.
+.IP "\fB\-\-dsbt\-index\fR \fIindex\fR" 4
+.IX Item "--dsbt-index index"
+This option sets the \s-1DSBT\s0 index of the current executable or shared library
+to \fIindex\fR. The default is 0, which is appropriate for generating
+executables. If a shared library is generated with a \s-1DSBT\s0 index of 0, the
+\&\f(CW\*(C`R_C6000_DSBT_INDEX\*(C'\fR relocs are copied into the output file.
+.Sp
+The \fB\-\-no\-merge\-exidx\-entries\fR switch disables the merging of adjacent
+exidx entries in frame unwind info.
+.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.
+.PP
+The following options are supported to control microMIPS instruction
+generation and branch relocation checks for \s-1ISA\s0 mode transitions when
+linking for \s-1MIPS\s0 targets.
+.IP "\fB\-\-insn32\fR" 4
+.IX Item "--insn32"
+.PD 0
+.IP "\fB\-\-no\-insn32\fR" 4
+.IX Item "--no-insn32"
+.PD
+These options control the choice of microMIPS instructions used in code
+generated by the linker, such as that in the \s-1PLT\s0 or lazy binding stubs,
+or in relaxation. If \fB\-\-insn32\fR is used, then the linker only uses
+32\-bit instruction encodings. By default or if \fB\-\-no\-insn32\fR is
+used, all instruction encodings are used, including 16\-bit ones where
+possible.
+.IP "\fB\-\-ignore\-branch\-isa\fR" 4
+.IX Item "--ignore-branch-isa"
+.PD 0
+.IP "\fB\-\-no\-ignore\-branch\-isa\fR" 4
+.IX Item "--no-ignore-branch-isa"
+.PD
+These options control branch relocation checks for invalid \s-1ISA\s0 mode
+transitions. If \fB\-\-ignore\-branch\-isa\fR is used, then the linker
+accepts any branch relocations and any \s-1ISA\s0 mode transition required
+is lost in relocation calculation, except for some cases of \f(CW\*(C`BAL\*(C'\fR
+instructions which meet relaxation conditions and are converted to
+equivalent \f(CW\*(C`JALX\*(C'\fR instructions as the associated relocation is
+calculated. By default or if \fB\-\-no\-ignore\-branch\-isa\fR is used
+a check is made causing the loss of an \s-1ISA\s0 mode transition to produce
+an error.
+.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\-2017 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..e137535
--- /dev/null
+++ b/ld/ld.info
@@ -0,0 +1,8693 @@
+This is ld.info, produced by makeinfo version 4.8 from ld.texinfo.
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Ld: (ld). The GNU linker.
+END-INFO-DIR-ENTRY
+
+ This file documents the GNU linker LD (GNU Binutils) version 2.28.
+
+ Copyright (C) 1991-2017 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.28.
+
+ 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.
+
+`--audit AUDITLIB'
+ Adds AUDITLIB to the `DT_AUDIT' entry of the dynamic section.
+ AUDITLIB is not checked for existence, nor will it use the
+ DT_SONAME specified in the library. If specified multiple times
+ `DT_AUDIT' will contain a colon separated list of audit interfaces
+ to use. If the linker finds an object with an audit entry while
+ searching for shared libraries, it will add a corresponding
+ `DT_DEPAUDIT' entry in the output file. This option is only
+ meaningful on ELF platforms supporting the rtld-audit interface.
+
+`-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::.
+
+`--depaudit AUDITLIB'
+`-P AUDITLIB'
+ Adds AUDITLIB to the `DT_DEPAUDIT' entry of the dynamic section.
+ AUDITLIB is not checked for existence, nor will it use the
+ DT_SONAME specified in the library. If specified multiple times
+ `DT_DEPAUDIT' will contain a colon separated list of audit
+ interfaces to use. This option is only meaningful on ELF
+ platforms supporting the rtld-audit interface. The -P option is
+ provided for Solaris compatibility.
+
+`-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 ELF that support 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", controlled by the `--sysroot' option, or
+ 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 disable linking against
+ shared libraries. If the output format supports Unix style magic
+ numbers, mark the output as `NMAGIC'.
+
+`-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.
+
+`--push-state'
+ The `--push-state' allows to preserve the current state of the
+ flags which govern the input file handling so that they can all be
+ restored with one corresponding `--pop-state' option.
+
+ The option which are covered are: `-Bdynamic', `-Bstatic', `-dn',
+ `-dy', `-call_shared', `-non_shared', `-static', `-N', `-n',
+ `--whole-archive', `--no-whole-archive', `-r', `-Ur',
+ `--copy-dt-needed-entries', `--no-copy-dt-needed-entries',
+ `--as-needed', `--no-as-needed', and `-a'.
+
+ One target for this option are specifications for `pkg-config'.
+ When used with the `--libs' option all possibly needed libraries
+ are listed and then possibly linked with all the time. It is
+ better to return something as follows:
+
+ -Wl,--push-state,--as-needed -libone -libtwo -Wl,--pop-state
+
+ Undoes the effect of -push-state, restores the previous values of
+ the flags governing input file handling.
+
+`-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.
+
+ If this option is being used to force additional modules to be
+ pulled into the link, and if it is an error for the symbol to
+ remain undefined, then the option `--require-defined' should be
+ used instead.
+
+`--require-defined=SYMBOL'
+ Require that SYMBOL is defined in the output file. This option is
+ the same as option `--undefined' except that if SYMBOL is not
+ defined in the output file then the linker will issue an error and
+ exit. The same effect can be achieved in a linker script by using
+ `EXTERN', `ASSERT' and `DEFINED' together. This option can be
+ used multiple times to require additional symbols.
+
+`-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.
+
+`--orphan-handling=MODE'
+ Control how orphan sections are handled. An orphan section is one
+ not specifically mentioned in a linker script. *Note Orphan
+ Sections::.
+
+ MODE can have any of the following values:
+
+ `place'
+ Orphan sections are placed into a suitable output section
+ following the strategy described in *Note Orphan Sections::.
+ The option `--unique' also effects how sections are placed.
+
+ `discard'
+ All orphan sections are discarded, by placing them in the
+ `/DISCARD/' section (*note Output Section Discarding::).
+
+ `warn'
+ The linker will place the orphan section as for `place' and
+ also issue a warning.
+
+ `error'
+ The linker will exit with an error if any orphan section is
+ found.
+
+ The default if `--orphan-handling' is not given is `place'.
+
+`--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.
+
+ `common'
+ Generate common symbols with the STT_COMMON type druing a
+ relocatable link.
+
+ `defs'
+ Disallows undefined symbols in object files. Undefined
+ symbols in shared libraries are still allowed.
+
+ `execstack'
+ Marks the object as requiring executable stack.
+
+ `global'
+ This option is only meaningful when building a shared object.
+ It makes the symbols defined by this shared object available
+ for symbol resolution of subsequently loaded libraries.
+
+ `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.
+
+ `nocommon'
+ Generate common symbols with the STT_OBJECT type druing a
+ relocatable link.
+
+ `nocopyreloc'
+ Disable linker generated .dynbss variables used in place of
+ variables defined in shared libraries. May result in dynamic
+ text relocations.
+
+ `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.
+
+ `text'
+ Treat DT_TEXTREL in shared object as error.
+
+ `notext'
+ Don't treat DT_TEXTREL in shared object as error.
+
+ `textoff'
+ Don't treat DT_TEXTREL in shared object as error.
+
+ `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.
+
+ `stack-size=VALUE'
+ Specify a stack size for in an ELF `PT_GNU_STACK' segment.
+ Specifying zero will override any default non-zero sized
+ `PT_GNU_STACK' segment creation.
+
+ `bndplt'
+ Always generate BND prefix in PLT entries. Supported for
+ Linux/x86_64.
+
+ `noextern-protected-data'
+ Don't treat protected data symbol as external when building
+ shared library. This option overrides linker backend
+ default. It can be used to workaround incorrect relocations
+ against protected data symbols generated by compiler.
+ Updates on protected data symbols by another module aren't
+ visible to the resulting shared library. Supported for i386
+ and x86-64.
+
+ `nodynamic-undefined-weak'
+ Don't treat undefined weak symbols as dynamic when building
+ executable. This option overrides linker backend default.
+ It can be used to avoid dynamic relocations against undefined
+ weak symbols in executable. Supported for i386 and x86-64.
+
+ `noreloc-overflow'
+ Disable relocation overflow check. This can be used to
+ disable relocation overflow check if there will be no dynamic
+ relocation overflow at run-time. Supported for x86_64.
+
+ `call-nop=prefix-addr'
+ `call-nop=prefix-nop'
+ `call-nop=suffix-nop'
+ `call-nop=prefix-BYTE'
+ `call-nop=suffix-BYTE'
+ Specify the 1-byte `NOP' padding when transforming indirect
+ call to a locally defined function, foo, via its GOT slot.
+ `call-nop=prefix-addr' generates `0x67 call foo'.
+ `call-nop=prefix-nop' generates `0x90 call foo'.
+ `call-nop=suffix-nop' generates `call foo 0x90'.
+ `call-nop=prefix-BYTE' generates `BYTE call foo'.
+ `call-nop=suffix-BYTE' generates `call foo BYTE'. Supported
+ for i386 and x86_64.
+
+
+ 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 or not. `--as-needed' causes a
+ DT_NEEDED tag to only be emitted for a library that _at that point
+ in the link_ satisfies a non-weak undefined symbol reference from
+ a regular object file or, if the library is not found in the
+ DT_NEEDED lists of other needed libraries, a non-weak undefined
+ symbol reference from another needed dynamic library. Object
+ files or libraries appearing on the command line _after_ the
+ library in question do not affect whether the library is seen as
+ needed. This is similar to the rules for extraction of object
+ files from archives. `--no-as-needed' restores the default
+ behaviour.
+
+`--add-needed'
+`--no-add-needed'
+ These two options have been deprecated because of the similarity of
+ their names to the `--as-needed' and `--no-as-needed' options.
+ They have been replaced by `--copy-dt-needed-entries' and
+ `--no-copy-dt-needed-entries'.
+
+`-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
+ can also be used with the `--export-dynamic' option, when creating
+ a position independent executable, to bind references to global
+ symbols to the definition within the executable. This option is
+ only meaningful on ELF platforms which support shared libraries
+ and position independent executables.
+
+`-Bsymbolic-functions'
+ When creating a shared library, bind references to global function
+ symbols to the definition within the shared library, if any. This
+ option can also be used with the `--export-dynamic' option, when
+ creating a position independent executable, to bind references to
+ global function symbols to the definition within the executable.
+ This option is only meaningful on ELF platforms which support
+ shared libraries and position independent executables.
+
+`--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.
+
+`--copy-dt-needed-entries'
+`--no-copy-dt-needed-entries'
+ This option affects the treatment of dynamic libraries referred to
+ by DT_NEEDED tags _inside_ ELF dynamic libraries mentioned on the
+ command line. Normally the linker won't add a DT_NEEDED tag to the
+ output binary for each library mentioned in a DT_NEEDED tag in an
+ input dynamic library. With `--copy-dt-needed-entries' specified
+ on the command line however any dynamic libraries that follow it
+ will have their DT_NEEDED entries added. The default behaviour
+ can be restored with `--no-copy-dt-needed-entries'.
+
+ This option also has an effect on the resolution of symbols in
+ dynamic libraries. With `--copy-dt-needed-entries' dynamic
+ libraries mentioned on the command line will be recursively
+ searched, following their DT_NEEDED tags to other libraries, in
+ order to resolve symbols required by the output binary. With the
+ default setting however the searching of dynamic libraries that
+ follow it will stop with the dynamic library itself. No DT_NEEDED
+ links will be traversed to resolve symbols.
+
+`--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. If the symbol is defined as a
+ common value then any files where this happens appear next.
+ Finally any files that reference the symbol are listed.
+
+`--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 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.
+
+`--no-dynamic-linker'
+ When producing an executable file, omit the request for a dynamic
+ linker to be used at load-time. This is only meaningful for ELF
+ executables that contain dynamic relocations, and usually requires
+ entry point code that is capable of processing these relocations.
+
+`--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. Note that
+ garbage collection for COFF and PE format targets is supported,
+ but the implementation is currently considered to be experimental.
+
+ `--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
+ explicitly 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.
+
+`--gc-keep-exported'
+ When `--gc-sections' is enabled, this option prevents garbage
+ collection of unused input sections that contain global symbols
+ having default or protected visibility. This option is intended
+ to be used for executables where unreferenced sections would
+ otherwise be garbage collected regardless of the external
+ visibility of contained symbols. Note that this option has no
+ effect when linking shared objects since it is already the default
+ behaviour. This option is only supported for ELF format targets.
+
+`--print-output-format'
+ Print the name of the default output format (perhaps influenced by
+ other command-line options). This is the string that would appear
+ in an `OUTPUT_FORMAT' linker script command (*note File
+ Commands::).
+
+`--print-memory-usage'
+ Print used size, total size and used size of memory regions
+ created with the *Note MEMORY:: command. This is useful on
+ embedded targets to have a quick view of amount of free memory.
+ The format of the output has one headline and one line per region.
+ It is both human readable and easily parsable by tools. Here is
+ an example of an output:
+
+ Memory region Used Size Region Size %age Used
+ ROM: 256 KB 1 MB 25.00%
+ RAM: 32 B 2 GB 0.00%
+
+`--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::.
+
+`--out-implib FILE'
+ Create an import library in FILE corresponding to the executable
+ the linker is generating (eg. a DLL or ELF program). This import
+ library (which should be called `*.dll.a' or `*.a' for DLLs) may
+ be used to link clients against the generated executable; this
+ behaviour makes it possible to skip a separate import library
+ creation step (eg. `dlltool' for DLLs). This option is only
+ available for the i386 PE and ELF targetted ports of the linker.
+
+`-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'
+`--no-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 the Altera Nios II: Nios II.
+ *Note `ld' and PowerPC 32-bit ELF Support: PowerPC ELF32.
+
+ On some platforms the `--relax' option performs target specific,
+ global optimizations that become possible when the linker resolves
+ addressing in the program, such as relaxing address modes,
+ synthesizing new instructions, selecting shorter version of current
+ instructions, and combining constant values.
+
+ 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.
+
+ On platforms where `--relax' is accepted the option `--no-relax'
+ can be used to disable the feature.
+
+`--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 path 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.
+
+ The tokens $ORIGIN and $LIB can appear in these search
+ directories. They will be replaced by the full path to the
+ directory containing the program or shared object in the case of
+ $ORIGIN and either `lib' - for 32-bit binaries - or `lib64' - for
+ 64-bit binaries - in the case of $LIB.
+
+ The alternative form of these tokens - ${ORIGIN} and ${LIB} can
+ also be used. The token $PLATFORM is not supported.
+
+ 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, 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, it will set the address of the
+ first byte of the text segment.
+
+`-Trodata-segment=ORG'
+ When creating an ELF executable or shared object for a target where
+ the read-only data is in its own segment separate from the
+ executable text, it will set the address of the first byte of the
+ read-only data segment.
+
+`-Tldata-segment=ORG'
+ When creating an ELF executable or shared object for x86-64 medium
+ memory model, it will set the address of the first byte of the
+ ldata 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[=NUMBER]'
+ 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. If the
+ optional NUMBER argument > 1, plugin symbol status will also be
+ displayed.
+
+`--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 practice, 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 practice, 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'
+`--no-eh-frame-hdr'
+ Request (`--eh-frame-hdr') or suppress (`--no-eh-frame-hdr') the
+ creation of `.eh_frame_hdr' section and ELF `PT_GNU_EH_FRAME'
+ segment header.
+
+`--no-ld-generated-unwind-info'
+ Request creation of `.eh_frame' unwind info for linker generated
+ code sections like PLT. This option is on by default if linker
+ generated unwind info is supported.
+
+`--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 new dynamic tags will be created as
+ needed and older dynamic tags will be omitted. 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'.
+
+`--compress-debug-sections=none'
+`--compress-debug-sections=zlib'
+`--compress-debug-sections=zlib-gnu'
+`--compress-debug-sections=zlib-gabi'
+ On ELF platforms, these options control how DWARF debug sections
+ are compressed using zlib.
+
+ `--compress-debug-sections=none' doesn't compress DWARF debug
+ sections. `--compress-debug-sections=zlib-gnu' compresses DWARF
+ debug sections and renames them to begin with `.zdebug' instead of
+ `.debug'. `--compress-debug-sections=zlib-gabi' also compresses
+ DWARF debug sections, but rather than renaming them it sets the
+ SHF_COMPRESSED flag in the sections' headers.
+
+ The `--compress-debug-sections=zlib' option is an alias for
+ `--compress-debug-sections=zlib-gabi'.
+
+ Note that this option overrides any compression in input debug
+ sections, so if a binary is linked with
+ `--compress-debug-sections=none' for example, then any compressed
+ debug sections in input files will be uncompressed before they are
+ copied into the output binary.
+
+ The default compression behaviour varies depending upon the target
+ involved and the configure options used to build the toolchain.
+ The default can be determined by examining the output from the
+ linker's `--help' option.
+
+`--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 the creation of a `.note.gnu.build-id' ELF note section or
+ a `.buildid' COFF 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]
+
+`--leading-underscore'
+`--no-leading-underscore'
+ For most targets default symbol-prefix is an underscore and is
+ defined in target's description. By this option it is possible to
+ disable/enable the default underscore symbol-prefix.
+
+`--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]
+
+`--exclude-all-symbols'
+ Specifies no symbols should be automatically exported. [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]
+
+`--disable-large-address-aware'
+ Reverts the effect of a previous `--large-address-aware' option.
+ This is useful if `--large-address-aware' is always set by the
+ compiler driver (e.g. Cygwin gcc) and the executable does not
+ support virtual addresses greater than 2 gigabytes. [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]
+
+`--enable-auto-image-base'
+`--enable-auto-image-base=VALUE'
+ Automatically choose the image base for DLLs, optionally starting
+ with base VALUE, 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 practice 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 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]
+
+`--high-entropy-va'
+ Image is compatible with 64-bit address space layout randomization
+ (ASLR).
+
+`--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.
+
+`--insert-timestamp'
+`--no-insert-timestamp'
+ Insert a real timestamp into the image. This is the default
+ behaviour as it matches legacy code and it means that the image
+ will work with other, proprietary tools. The problem with this
+ default is that it will result in slightly different images being
+ produced each time the same sources are linked. The option
+ `--no-insert-timestamp' can be used to insert a zero value for the
+ timestamp, this ensuring that binaries produced from identical
+ sources will compare identically.
+
+2.1.2 Options specific to C6X uClinux targets
+---------------------------------------------
+
+The C6X uClinux target uses a binary format called DSBT to support
+shared libraries. Each shared library in the system needs to have a
+unique index; all executables use an index of 0.
+
+`--dsbt-size SIZE'
+ This option sets the number of entries in the DSBT of the current
+ executable or shared library to SIZE. The default is to create a
+ table with 64 entries.
+
+`--dsbt-index INDEX'
+ This option sets the DSBT index of the current executable or
+ shared library to INDEX. The default is 0, which is appropriate
+ for generating executables. If a shared library is generated with
+ a DSBT index of 0, the `R_C6000_DSBT_INDEX' relocs are copied into
+ the output file.
+
+ The `--no-merge-exidx-entries' switch disables the merging of
+ adjacent exidx entries in frame unwind info.
+
+
+2.1.3 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.4 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'.
+
+
+2.1.5 Options specific to MIPS targets
+--------------------------------------
+
+The following options are supported to control microMIPS instruction
+generation and branch relocation checks for ISA mode transitions when
+linking for MIPS targets.
+
+`--insn32'
+`--no-insn32'
+ These options control the choice of microMIPS instructions used in
+ code generated by the linker, such as that in the PLT or lazy
+ binding stubs, or in relaxation. If `--insn32' is used, then the
+ linker only uses 32-bit instruction encodings. By default or if
+ `--no-insn32' is used, all instruction encodings are used,
+ including 16-bit ones where possible.
+
+`--ignore-branch-isa'
+`--no-ignore-branch-isa'
+ These options control branch relocation checks for invalid ISA mode
+ transitions. If `--ignore-branch-isa' is used, then the linker
+ accepts any branch relocations and any ISA mode transition required
+ is lost in relocation calculation, except for some cases of `BAL'
+ instructions which meet relaxation conditions and are converted to
+ equivalent `JALX' instructions as the associated relocation is
+ calculated. By default or if `--no-ignore-branch-isa' is used a
+ check is made causing the loss of an ISA mode transition to produce
+ an error.
+
+
+
+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 means 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 a target specific symbol, if it is defined; For many
+ targets this is `start', but PE and BeOS based systems for example
+ check a list of possible entry symbols, matching the first one
+ found.
+
+ * 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. The "sysroot
+ prefix" can also be forced by specifying `=' as the first
+ character in the filename path. See also 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.
+
+ Note that assertions are checked before the final stages of linking
+ take place. This means that expressions involving symbols PROVIDEd
+ inside section definitions will fail if the user has not set values
+ for those symbols. The only exception to this rule is PROVIDEd
+ symbols that just reference dot. Thus an assertion like this:
+
+ .stack :
+ {
+ PROVIDE (__stack = .);
+ PROVIDE (__stack_size = 0x100);
+ ASSERT ((__stack > (_end + __stack_size)), "Error: No room left for the stack");
+ }
+
+ will fail if `__stack_size' is not defined elsewhere. Symbols
+ PROVIDEd outside of section definitions are evaluated earlier, so
+ they can be used inside ASSERTions. Thus:
+
+ PROVIDE (__stack_size = 0x100);
+ .stack :
+ {
+ PROVIDE (__stack = .);
+ ASSERT ((__stack > (_end + __stack_size)), "Error: No room left for the stack");
+ }
+
+ will work.
+
+`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.
+
+`NOCROSSREFS_TO(TOSECTION FROMSECTION ...)'
+ This command may be used to tell `ld' to issue an error about any
+ references to one section from a list of other sections.
+
+ The `NOCROSSREFS' command is useful when ensuring that two or more
+ output sections are entirely independent but there are situations
+ where a one-way dependency is needed. For example, in a multi-core
+ application there may be shared code that can be called from each
+ core but for safety must never call back.
+
+ The `NOCROSSREFS_TO' command takes a list of output section names.
+ The first section can not be referenced from any of the other
+ sections. If `ld' detects any references to the first section
+ from any of the other sections, it reports an error and returns a
+ non-zero exit status. Note that the `NOCROSSREFS_TO' 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.
+
+`LD_FEATURE(STRING)'
+ This command may be used to modify `ld' behavior. If STRING is
+ `"SANE_EXPR"' then absolute symbols and numbers in a script are
+ simply treated as numbers everywhere. *Note Expression Section::.
+
+
+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
+* HIDDEN:: HIDDEN
+* 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: HIDDEN, 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: HIDDEN, Next: PROVIDE, Prev: Simple Assignments, Up: Assignments
+
+3.5.2 HIDDEN
+------------
+
+For ELF targeted ports, define a symbol that will be hidden and won't be
+exported. The syntax is `HIDDEN(SYMBOL = EXPRESSION)'.
+
+ Here is the example from *Note Simple Assignments::, rewritten to use
+`HIDDEN':
+
+ HIDDEN(floating_point = 0);
+ SECTIONS
+ {
+ .text :
+ {
+ *(.text)
+ HIDDEN(_etext = .);
+ }
+ HIDDEN(_bdata = (. + 3) & ~ 3);
+ .data : { *(.data) }
+ }
+ In this case none of the three symbols will be visible outside this
+module.
+
+
+File: ld.info, Node: PROVIDE, Next: PROVIDE_HIDDEN, Prev: HIDDEN, Up: Assignments
+
+3.5.3 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.4 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.5 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 an 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 its 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);
+ 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.
+Alternatively the symbols can be treated as the names of vectors or
+arrays and then the code will again work as expected:
+
+ 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 how using this method does not require the use of `&' operators.
+
+
+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) | ALIGN_WITH_INPUT]
+ [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
+comma at the end may be required if a FILLEXP is used and the next
+SECTIONS-COMMAND looks like a continuation of the expression. 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. This address is optional, but if it is provided
+then the output address will be set exactly as specified.
+
+ If the output address is not specified then one will be chosen for
+the section, based on the heuristic below. This address will be
+adjusted to fit the alignment requirement of the output section. The
+alignment requirement is the strictest alignment of any input section
+contained within the output section.
+
+ The output section address heuristic is as follows:
+
+ * If an output memory REGION is set for the section then it is added
+ to this region and its address will be the next free address in
+ that region.
+
+ * If the MEMORY command has been used to create a list of memory
+ regions then the first region which has attributes compatible with
+ the section is selected to contain it. The section's output
+ address will be the next free address in that region; *Note
+ MEMORY::.
+
+ * If no memory regions were specified, or none match the section then
+ the output address will be based on the current value of the
+ location counter.
+
+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 any of the `.text' input sections.
+
+ 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. The EXCLUDE_FILE can also be placed
+inside the section list, for example:
+ *(EXCLUDE_FILE (*crtend.o *otherfile.o) .ctors)
+ The result of this is identically to the previous example.
+Supporting two syntaxes for EXCLUDE_FILE is useful if the section list
+contains more than one section, as described below.
+
+ 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.
+
+ When using EXCLUDE_FILE with more than one section, if the exclusion
+is within the section list then the exclusion only applies to the
+immediately following section, for example:
+ *(EXCLUDE_FILE (*somefile.o) .text .rdata)
+ will cause all `.text' sections from all files except `somefile.o'
+to be included, while all `.rdata' sections from all files, including
+`somefile.o', will be included. To exclude the `.rdata' sections from
+`somefile.o' the example could be modified to:
+ *(EXCLUDE_FILE (*somefile.o) .text EXCLUDE_FILE (*somefile.o) .rdata)
+ Alternatively, placing the EXCLUDE_FILE outside of the section list,
+before the input file selection, will cause the exclusion to apply for
+all sections. Thus the previous example can be rewritten as:
+ EXCLUDE_FILE (*somefile.o) *(.text .rdata)
+
+ 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)
+
+ To refine the sections that are included based on the section flags
+of an input section, INPUT_SECTION_FLAGS may be used.
+
+ Here is a simple example for using Section header flags for ELF
+sections:
+
+ SECTIONS {
+ .text : { INPUT_SECTION_FLAGS (SHF_MERGE & SHF_STRINGS) *(.text) }
+ .text2 : { INPUT_SECTION_FLAGS (!SHF_WRITE) *(.text) }
+ }
+
+ In this example, the output section `.text' will be comprised of any
+input section matching the name *(.text) whose section header flags
+`SHF_MERGE' and `SHF_STRINGS' are set. The output section `.text2'
+will be comprised of any input section matching the name *(.text) whose
+section header flag `SHF_WRITE' is clear.
+
+ 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 descending
+order by alignment before placing them in the output file. Larger
+alignments are placed before smaller alignments in order to reduce the
+amount of padding necessary.
+
+ `SORT_BY_INIT_PRIORITY' is very similar to `SORT_BY_NAME'. The
+difference is `SORT_BY_INIT_PRIORITY' will sort sections into ascending
+order by numerical value of the GCC init_priority attribute encoded in
+the section name 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 two 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 two 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.
+
+ `SORT_NONE' disables section sorting by ignoring the command line
+section sorting option.
+
+ 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 normally 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. So too will
+assignments to dot even if the assignment does not create space, except
+for `. = 0', `. = . + 0', `. = sym', `. = . + sym' and `. = ALIGN (. !=
+0, expr, 1)' when `sym' is an absolute symbol of value 0 defined in the
+script. This allows you to force output of an empty section with `. =
+.'.
+
+ 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.
+ 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 virtual address is specified by the
+*note Output Section Address:: described earlier. The load address is
+specified by the `AT' or `AT>' keywords. Specifying a load address is
+optional.
+
+ The `AT' keyword takes an expression as an argument. This specifies
+the exact load address of the section. The `AT>' keyword takes the
+name of a memory region as an argument. *Note MEMORY::. The load
+address of the section is set to the next free address in the region,
+aligned to the section's alignment requirements.
+
+ If neither `AT' nor `AT>' is specified for an allocatable section,
+the linker will use the following heuristic to determine the load
+address:
+
+ * If the section has a specific VMA address, then this is used as
+ the LMA address as well.
+
+ * If the section is not allocatable then its LMA is set to its VMA.
+
+ * Otherwise if a memory region can be found that is compatible with
+ the current section, and this region contains at least one
+ section, then the LMA is set so the difference between the VMA and
+ LMA is the same as the difference between the VMA and LMA of the
+ last section in the located region.
+
+ * If no memory regions have been declared then a default region that
+ covers the entire address space is used in the previous step.
+
+ * If no suitable region could be found, or there was no previous
+ section then the LMA is set equal to the VMA.
+
+ 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. As an
+alternative you can enforce that the difference between the VMA and LMA
+remains intact throughout this output section with the ALIGN_WITH_INPUT
+attribute.
+
+
+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' construct (*note SECTIONS::), except that
+no addresses and no memory regions may be defined for sections within
+an `OVERLAY'.
+
+ The comma at the end may be required if a FILL is used and the next
+SECTIONS-COMMAND looks like a continuation of the expression.
+
+ 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 are 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 many uses of the `MEMORY' command,
+however, all memory blocks defined are treated as if they were
+specified inside a single `MEMORY' command. The syntax for `MEMORY' 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 attributes that follow
+
+ 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. The headers are processed in order and it is
+usual for them to map to sections in ascending load address order.
+
+ 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 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. If applied to a loadable segment
+(`PT_LOAD'), all prior loadable segments must have one of these
+keywords.
+
+ 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.
+
+`PT_TLS' (7)
+ Indicates a segment containing thread local storage.
+
+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::*;
+ "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'. The default `lang' is `C'.
+
+ 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
+hexadecimal, `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.
+
+ The command line options `--orphan-handling' and `--unique' (*note
+Command Line Options: Options.) can be used to control which output
+sections an orphan is placed in.
+
+ If an orphaned section's name is representable as a C identifier then
+the linker will automatically *note PROVIDE:: two symbols:
+__start_SECNAME and __stop_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
+-----------------------------------
+
+Addresses and symbols may be section relative, or absolute. A section
+relative symbol is relocatable. If you request relocatable output
+using the `-r' option, a further link operation may change the value of
+a section relative symbol. On the other hand, an absolute symbol will
+retain the same value throughout any further link operations.
+
+ Some terms in linker expressions are addresses. This is true of
+section relative symbols and for builtin functions that return an
+address, such as `ADDR', `LOADADDR', `ORIGIN' and `SEGMENT_START'.
+Other terms are simply numbers, or are builtin functions that return a
+non-address value, such as `LENGTH'. One complication is that unless
+you set `LD_FEATURE ("SANE_EXPR")' (*note Miscellaneous Commands::),
+numbers and absolute symbols are treated differently depending on their
+location, for compatibility with older versions of `ld'. Expressions
+appearing outside an output section definition treat all numbers as
+absolute addresses. Expressions appearing inside an output section
+definition treat absolute symbols as numbers. If `LD_FEATURE
+("SANE_EXPR")' is given, then absolute symbols and numbers are simply
+treated as numbers everywhere.
+
+ In the following simple example,
+
+ SECTIONS
+ {
+ . = 0x100;
+ __executable_start = 0x100;
+ .data :
+ {
+ . = 0x10;
+ __data_start = 0x10;
+ *(.data)
+ }
+ ...
+ }
+
+ both `.' and `__executable_start' are set to the absolute address
+0x100 in the first two assignments, then both `.' and `__data_start'
+are set to 0x10 relative to the `.data' section in the second two
+assignments.
+
+ For expressions involving numbers, relative addresses and absolute
+addresses, ld follows these rules to evaluate terms:
+
+ * Unary operations on an absolute address or number, and binary
+ operations on two absolute addresses or two numbers, or between one
+ absolute address and a number, apply the operator to the value(s).
+
+ * Unary operations on a relative address, and binary operations on
+ two relative addresses in the same section or between one relative
+ address and a number, apply the operator to the offset part of the
+ address(es).
+
+ * Other binary operations, that is, between two relative addresses
+ not in the same section, or between a relative address and an
+ absolute address, first convert any non-absolute term to an
+ absolute address before applying the operator.
+
+ The result section of each sub-expression is as follows:
+
+ * An operation involving only numbers results in a number.
+
+ * The result of comparisons, `&&' and `||' is also a number.
+
+ * The result of other binary arithmetic and logical operations on two
+ relative addresses in the same section or two absolute addresses
+ (after above conversions) is also a number when `LD_FEATURE
+ ("SANE_EXPR")' or inside an output section definition but an
+ absolute address otherwise.
+
+ * The result of other operations on relative addresses or one
+ relative address and a number, is a relative address in the same
+ section as the relative operand(s).
+
+ * The result of other operations on absolute addresses (after above
+ conversions) is an absolute address.
+
+ 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.
+
+ Using `LOADADDR' also forces an expression absolute, since this
+particular builtin function returns an absolute address.
+
+
+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 address (VMA) of the named SECTION. Your script must
+ previously have defined the location of that section. In the
+ following example, `start_of_output_1', `symbol_1' and `symbol_2'
+ are assigned equivalent values, except that `symbol_1' will be
+ relative to the `.output1' section while the other two will be
+ absolute:
+ 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(ABSOLUTE(.), 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)
+ + ((. + COMMONPAGESIZE - 1) & (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. 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'. Evaluates to the
+ second argument plus any padding needed at the end of the
+ `PT_GNU_RELRO' segment due to section alignment.
+
+ . = 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. (*note Output
+ Section LMA::).
+
+`LOG2CEIL(EXP)'
+ Return the binary logarithm of EXP rounded towards infinity.
+ `LOG2CEIL(0)' returns 0.
+
+`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 already been given for this segment (with a command-line
+ `-T' option) then 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 can 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
+
+* M68HC11/68HC12:: `ld' and the Motorola 68HC11 and 68HC12 families
+
+* ARM:: `ld' and the ARM family
+
+* HPPA ELF32:: `ld' and HPPA 32-bit ELF
+
+* M68K:: `ld' and the Motorola 68K family
+
+* MIPS:: `ld' and the MIPS family
+
+* MMIX:: `ld' and MMIX
+
+* MSP430:: `ld' and MSP430
+
+* NDS32:: `ld' and NDS32
+
+* Nios II:: `ld' and the Altera Nios II
+
+* 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).
+
+ `ld' finds all `mov' instructions which use the register indirect
+ with 32-bit displacement addressing mode, but use a small
+ displacement inside 16-bit displacement range, and changes them to
+ use the 16-bit displacement form. (That is: the linker turns
+ `mov.b `@'D:32,ERx' into `mov.b `@'D:16,ERx' whenever the
+ displacement D is in the 16 bit signed integer range. Only
+ implemented in ELF-format ld).
+
+_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: M68HC11/68HC12, 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).
+
+
+File: ld.info, Node: M68HC11/68HC12, Next: ARM, Prev: i960, 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: M68HC11/68HC12, 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
+element 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
+- ie ones which have been assembled with the `-EB' option. 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 program 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 `--fix-arm1176' switch enables a link-time workaround for an
+erratum in certain ARM1176 processors. The workaround is enabled by
+default if you are targeting ARM v6 (excluding ARM v6T2) or earlier.
+It can be disabled unconditionally by specifying `--no-fix-arm1176'.
+
+ Further information is available in the "ARM1176JZ-S and ARM1176JZF-S
+Programmer Advice Notice" available on the ARM documentation website at:
+http://infocenter.arm.com/.
+
+ The `--fix-stm32l4xx-629360' switch enables a link-time workaround
+for a bug in the bus matrix / memory controller for some of the STM32
+Cortex-M4 based products (STM32L4xx). When accessing off-chip memory
+via the affected bus for bus reads of 9 words or more, the bus can
+generate corrupt data and/or abort. These are only core-initiated
+accesses (not DMA), and might affect any access: integer loads such as
+LDM, POP and floating-point loads such as VLDM, VPOP. Stores are not
+affected.
+
+ The bug can be avoided by splitting memory accesses into the
+necessary chunks to keep bus reads below 8 words.
+
+ The workaround is not enabled by default, this is equivalent to use
+`--fix-stm32l4xx-629360=none'. If you know you are using buggy
+STM32L4xx hardware, you can enable the workaround by specifying the
+linker option `--fix-stm32l4xx-629360', or the equivalent
+`--fix-stm32l4xx-629360=default'.
+
+ 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 in a
+replacement sequence emulating the behaviour of the original one and a
+branch back to the subsequent instruction. The original instruction is
+then replaced with a branch to the veneer.
+
+ The workaround does not always preserve the memory access order for
+the LDMDB instruction, when the instruction loads the PC.
+
+ The workaround is not able to handle problematic instructions when
+they are in the middle of an IT block, since a branch is not allowed
+there. In that case, the linker reports a warning and no replacement
+occurs.
+
+ The workaround is not able to replace problematic instructions with a
+PC-relative branch instruction if the `.text' section is too large. In
+that case, when the branch that replaces the original code cannot be
+encoded, the linker reports a warning and no replacement occurs.
+
+ 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 size. 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.
+
+ 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.
+
+ The `--fix-cortex-a53-835769' switch enables a link-time workaround
+for erratum 835769 present on certain early revisions of Cortex-A53
+processors. The workaround is disabled by default. It can be enabled
+by specifying `--fix-cortex-a53-835769', or disabled unconditionally by
+specifying `--no-fix-cortex-a53-835769'.
+
+ Please contact ARM for further details.
+
+ The `--no-merge-exidx-entries' switch disables the merging of
+adjacent exidx entries in debuginfo.
+
+ The `--long-plt' option enables the use of 16 byte PLT entries which
+support up to 4Gb of code. The default is to use 12 byte PLT entries
+which only support 512Mb of code.
+
+ The `--no-apply-dynamic-relocs' option makes AArch64 linker do not
+apply link-time values for dynamic relocations.
+
+ All SG veneers are placed in the special output section
+`.gnu.sgstubs'. Its start address must be set, either with the command
+line option `--section-start' or in a linker script, to indicate where
+to place these veneers in memory.
+
+ The `--cmse-implib' option requests that the import libraries
+specified by the `--out-implib' and `--in-implib' options are secure
+gateway import libraries, suitable for linking a non-secure executable
+against secure code as per ARMv8-M Security Extensions.
+
+ The `--in-implib=file' specifies an input import library whose
+symbols must keep the same address in the executable being produced. A
+warning is given if no `--out-implib' is given but new symbols have
+been introduced in the executable that should be listed in its import
+library. Otherwise, if `--out-implib' is specified, the symbols are
+added to the output import library. A warning is also given if some
+symbols present in the input import library have disappeared from the
+executable. This option is only effective for Secure Gateway import
+libraries, ie. when `--cmse-implib' is specified.
+
+
+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: MIPS, 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: MIPS, Next: MMIX, Prev: M68K, Up: Machine Dependent
+
+4.7 `ld' and the MIPS family
+============================
+
+The `--insn32' and `--no-insn32' options control the choice of
+microMIPS instructions used in code generated by the linker, such as
+that in the PLT or lazy binding stubs, or in relaxation. If `--insn32'
+is used, then the linker only uses 32-bit instruction encodings. By
+default or if `--no-insn32' is used, all instruction encodings are used,
+including 16-bit ones where possible.
+
+ The `--ignore-branch-isa' and `--no-ignore-branch-isa' options
+control branch relocation checks for invalid ISA mode transitions. If
+`--ignore-branch-isa' is used, then the linker accepts any branch
+relocations and any ISA mode transition required is lost in relocation
+calculation, except for some cases of `BAL' instructions which meet
+relaxation conditions and are converted to equivalent `JALX'
+instructions as the associated relocation is calculated. By default or
+if `--no-ignore-branch-isa' is used a check is made causing the loss of
+an ISA mode transition to produce an error.
+
+
+File: ld.info, Node: MMIX, Next: MSP430, Prev: MIPS, Up: Machine Dependent
+
+4.8 `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: NDS32, Prev: MMIX, Up: Machine Dependent
+
+4.9 `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: NDS32, Next: Nios II, Prev: MSP430, Up: Machine Dependent
+
+4.10 `ld' and NDS32
+===================
+
+For NDS32, there are some options to select relaxation behavior. The
+linker relaxes objects according to these options.
+
+``--m[no-]fp-as-gp''
+ Disable/enable fp-as-gp relaxation.
+
+``--mexport-symbols=FILE''
+ Exporting symbols and their address into FILE as linker script.
+
+``--m[no-]ex9''
+ Disable/enable link-time EX9 relaxation.
+
+``--mexport-ex9=FILE''
+ Export the EX9 table after linking.
+
+``--mimport-ex9=FILE''
+ Import the Ex9 table for EX9 relaxation.
+
+``--mupdate-ex9''
+ Update the existing EX9 table.
+
+``--mex9-limit=NUM''
+ Maximum number of entries in the ex9 table.
+
+``--mex9-loop-aware''
+ Avoid generating the EX9 instruction inside the loop.
+
+``--m[no-]ifc''
+ Disable/enable the link-time IFC optimization.
+
+``--mifc-loop-aware''
+ Avoid generating the IFC instruction inside the loop.
+
+
+File: ld.info, Node: Nios II, Next: PowerPC ELF32, Prev: NDS32, Up: Machine Dependent
+
+4.11 `ld' and the Altera Nios II
+================================
+
+Call and immediate jump instructions on Nios II processors are limited
+to transferring control to addresses in the same 256MB memory segment,
+which may result in `ld' giving `relocation truncated to fit' errors
+with very large programs. The command-line option `--relax' enables
+the generation of trampolines that can access the entire 32-bit address
+space for calls outside the normal `call' and `jmpi' address range.
+These trampolines are inserted at section boundaries, so may not
+themselves be reachable if an input section and its associated call
+trampolines are larger than 256MB.
+
+ The `--relax' option is enabled by default unless `-r' is also
+specified. You can disable trampoline generation by using the
+`--no-relax' linker option. You can also disable this optimization
+locally by using the `set .noat' directive in assembly-language source
+files, as the linker-inserted trampolines use the `at' register as a
+temporary.
+
+ Note that the linker `--relax' option is independent of assembler
+relaxation options, and that using the GNU assembler's `-relax-all'
+option interferes with the linker's more selective call instruction
+relaxation.
+
+
+File: ld.info, Node: PowerPC ELF32, Next: PowerPC64 ELF64, Prev: Nios II, Up: Machine Dependent
+
+4.12 `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.13 `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.
+
+`--save-restore-funcs'
+`--no-save-restore-funcs'
+ These two options control whether PowerPC64 `ld' automatically
+ provides out-of-line register save and restore functions used by
+ `-Os' code. The default is to provide any such referenced
+ function for a normal final link, and to not do so for a
+ relocatable link.
+
+`--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.
+
+`--tls-get-addr-optimize'
+`--no-tls-get-addr-optimize'
+ These options control whether PowerPC64 `ld' uses a special stub
+ to call __tls_get_addr. PowerPC64 glibc 2.22 and later support an
+ optimization that allows the second and subsequent calls to
+ `__tls_get_addr' for a given symbol to be resolved by the special
+ stub without calling in to glibc. By default the linker enables
+ this option when glibc advertises the availability of
+ __tls_get_addr_opt. Forcing this option on when using an older
+ glibc won't do much besides slow down your applications, but may
+ be useful if linking an application against an older glibc with
+ the expectation that it will normally be used on systems having a
+ newer glibc.
+
+`--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'
+ If given any toc option besides `-mcmodel=medium' or
+ `-mcmodel=large', 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.
+
+`--no-toc-sort'
+ By default, `ld' sorts TOC sections so that those whose file
+ happens to have a section called `.init' or `.fini' are placed
+ first, followed by TOC sections referenced by code generated with
+ PowerPC64 gcc's `-mcmodel=small', and lastly TOC sections
+ referenced only by code generated with PowerPC64 gcc's
+ `-mcmodel=medium' or `-mcmodel=large' options. Doing this results
+ in better TOC grouping for multi-TOC. Use this option to turn off
+ this feature.
+
+`--plt-align'
+`--no-plt-align'
+ Use these options to control whether individual PLT call stubs are
+ padded so that they don't cross a 32-byte boundary, or to the
+ specified power of two boundary when using `--plt-align='. Note
+ that this isn't alignment in the usual sense. By default PLT call
+ stubs are packed tightly.
+
+`--plt-static-chain'
+`--no-plt-static-chain'
+ Use these options to control whether PLT call stubs load the static
+ chain pointer (r11). `ld' defaults to not loading the static
+ chain since there is never any need to do so on a PLT call.
+
+`--plt-thread-safe'
+`--no-thread-safe'
+ With power7's weakly ordered memory model, it is possible when
+ using lazy binding for ld.so to update a plt entry in one thread
+ and have another thread see the individual plt entry words update
+ in the wrong order, despite ld.so carefully writing in the correct
+ order and using memory write barriers. To avoid this we need some
+ sort of read barrier in the call stub, or use LD_BIND_NOW=1. By
+ default, `ld' looks for calls to commonly used functions that
+ create threads, and if seen, adds the necessary barriers. Use
+ these options to change the default behaviour.
+
+
+File: ld.info, Node: SPU ELF, Next: TI COFF, Prev: PowerPC64 ELF64, Up: Machine Dependent
+
+4.14 `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.15 `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.16 `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
+ doo = foo == foo2
+ eoo DATA == var1
+
+ This example defines a DLL with a non-default base address
+ and seven 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 `doo' symbol in export library is an alias of
+ `foo', which gets the string name in export table `foo2'. The
+ `eoo' symbol is an data export symbol, which gets in export
+ table the name `var1'.
+
+ 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] [== <name3>] ) *
+
+ 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 `<name3>' is the to be used
+ string in import/export table for the symbol.
+
+ 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.17 `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:
+
+`--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.3, 3 November 2008
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ `http://fsf.org/'
+
+ 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
+ functional and useful 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, in any medium,
+ that contains a notice placed by the copyright holder saying it
+ can be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ "Document", below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as "you". You
+ accept the license if you copy, modify or distribute the work in a
+ way requiring permission under copyright law.
+
+ 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. (Thus, 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. If a section does not fit the above definition of
+ Secondary then it is not allowed to be designated as Invariant.
+ The Document may contain zero Invariant Sections. If the Document
+ does not identify any Invariant Sections then there are none.
+
+ 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
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ 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, or absence of
+ markup, has been arranged to thwart or discourage subsequent
+ modification by readers is not Transparent. An image format is
+ not Transparent if used for any substantial amount of text. 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, PostScript or PDF designed for
+ human modification. Examples of transparent image formats include
+ PNG, XCF and JPG. Opaque formats include 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, PostScript or PDF
+ 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.
+
+ The "publisher" means any person or entity that distributes copies
+ of the Document to the public.
+
+ A section "Entitled XYZ" means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ "Acknowledgements", "Dedications", "Endorsements", or "History".)
+ To "Preserve the Title" of such a section when you modify the
+ Document means that it remains a section "Entitled XYZ" according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 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 (or copies in media that commonly
+ have printed covers) 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 computer-network location from
+ which the general network-using public has access to download
+ using public-standard network protocols a complete Transparent
+ copy of the Document, free of added material. 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 fewer than five), unless they release you
+ from this requirement.
+
+ 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", Preserve 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. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, 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 to be Entitled
+ "Endorsements" or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ 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, and that you preserve all
+ their Warranty Disclaimers.
+
+ 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, is called an "aggregate" if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation's users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ 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 half
+ of the entire aggregate, the Document's Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ 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, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, or distribute it is void,
+ and will automatically terminate your rights under this License.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly
+ and finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate
+ the licenses of parties who have received copies or rights from
+ you under this License. If your rights have been terminated and
+ not permanently reinstated, receipt of a copy of some or all of
+ the same material does not give you any rights to use it.
+
+ 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. If the Document specifies that a proxy
+ can decide which future versions of this License can be used, that
+ proxy's public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+ "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works. A
+ public wiki that anybody can edit is an example of such a server.
+ A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+ site means any set of copyrightable works thus published on the MMC
+ site.
+
+ "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+
+ "Incorporate" means to publish or republish a Document, in whole or
+ in part, as part of another Document.
+
+ An MMC is "eligible for relicensing" if it is licensed under this
+ License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently
+ incorporated in whole or in part into the MMC, (1) had no cover
+ texts or invariant sections, and (2) were thus incorporated prior
+ to November 1, 2008.
+
+ The operator of an MMC Site may republish an MMC contained in the
+ site under CC-BY-SA on the same site at any time before August 1,
+ 2009, provided the MMC is eligible for relicensing.
+
+
+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.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ 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 823)
+* --accept-unknown-input-arch: Options. (line 841)
+* --add-needed: Options. (line 869)
+* --add-stdcall-alias: Options. (line 1811)
+* --allow-multiple-definition: Options. (line 1157)
+* --allow-shlib-undefined: Options. (line 1163)
+* --architecture=ARCH: Options. (line 123)
+* --as-needed: Options. (line 851)
+* --audit AUDITLIB: Options. (line 112)
+* --auxiliary=NAME: Options. (line 255)
+* --bank-window: Options. (line 2256)
+* --base-file: Options. (line 1816)
+* --be8: ARM. (line 28)
+* --bss-plt: PowerPC ELF32. (line 16)
+* --build-id: Options. (line 1773)
+* --build-id=STYLE: Options. (line 1773)
+* --check-sections: Options. (line 955)
+* --cmse-implib: ARM. (line 236)
+* --compress-debug-sections=none: Options. (line 1731)
+* --compress-debug-sections=zlib: Options. (line 1731)
+* --compress-debug-sections=zlib-gabi: Options. (line 1731)
+* --compress-debug-sections=zlib-gnu: Options. (line 1731)
+* --copy-dt-needed-entries: Options. (line 967)
+* --cref: Options. (line 987)
+* --default-imported-symver: Options. (line 1200)
+* --default-script=SCRIPT: Options. (line 562)
+* --default-symver: Options. (line 1196)
+* --defsym=SYMBOL=EXP: Options. (line 1016)
+* --demangle[=STYLE]: Options. (line 1028)
+* --depaudit AUDITLIB: Options. (line 177)
+* --disable-auto-image-base: Options. (line 1994)
+* --disable-auto-import: Options. (line 2129)
+* --disable-large-address-aware: Options. (line 1942)
+* --disable-long-section-names: Options. (line 1826)
+* --disable-new-dtags: Options. (line 1707)
+* --disable-runtime-pseudo-reloc: Options. (line 2142)
+* --disable-stdcall-fixup: Options. (line 1848)
+* --discard-all: Options. (line 647)
+* --discard-locals: Options. (line 651)
+* --dll: Options. (line 1821)
+* --dll-search-prefix: Options. (line 2000)
+* --dotsyms: PowerPC64 ELF64. (line 33)
+* --dsbt-index: Options. (line 2233)
+* --dsbt-size: Options. (line 2228)
+* --dynamic-linker=FILE: Options. (line 1041)
+* --dynamic-list-cpp-new: Options. (line 947)
+* --dynamic-list-cpp-typeinfo: Options. (line 951)
+* --dynamic-list-data: Options. (line 944)
+* --dynamic-list=DYNAMIC-LIST-FILE: Options. (line 931)
+* --dynamicbase: Options. (line 2182)
+* --eh-frame-hdr: Options. (line 1696)
+* --emit-relocs: Options. (line 497)
+* --emit-stack-syms: SPU ELF. (line 46)
+* --emit-stub-syms <1>: SPU ELF. (line 15)
+* --emit-stub-syms <2>: PowerPC ELF32. (line 47)
+* --emit-stub-syms: PowerPC64 ELF64. (line 29)
+* --enable-auto-image-base: Options. (line 1985)
+* --enable-auto-import: Options. (line 2009)
+* --enable-extra-pe-debug: Options. (line 2147)
+* --enable-long-section-names: Options. (line 1826)
+* --enable-new-dtags: Options. (line 1707)
+* --enable-runtime-pseudo-reloc: Options. (line 2134)
+* --enable-stdcall-fixup: Options. (line 1848)
+* --entry=ENTRY: Options. (line 187)
+* --error-unresolved-symbols: Options. (line 1649)
+* --exclude-all-symbols: Options. (line 1902)
+* --exclude-libs: Options. (line 197)
+* --exclude-modules-for-implib: Options. (line 208)
+* --exclude-symbols: Options. (line 1896)
+* --export-all-symbols: Options. (line 1872)
+* --export-dynamic: Options. (line 221)
+* --extra-overlay-stubs: SPU ELF. (line 19)
+* --fatal-warnings: Options. (line 1054)
+* --file-alignment: Options. (line 1906)
+* --filter=NAME: Options. (line 276)
+* --fix-arm1176: ARM. (line 112)
+* --fix-cortex-a53-835769: ARM. (line 213)
+* --fix-cortex-a8: ARM. (line 204)
+* --fix-stm32l4xx-629360: ARM. (line 121)
+* --fix-v4bx: ARM. (line 50)
+* --fix-v4bx-interworking: ARM. (line 63)
+* --force-dynamic: Options. (line 506)
+* --force-exe-suffix: Options. (line 1059)
+* --forceinteg: Options. (line 2187)
+* --format=FORMAT: Options. (line 134)
+* --format=VERSION: TI COFF. (line 6)
+* --gc-keep-exported: Options. (line 1102)
+* --gc-sections: Options. (line 1069)
+* --got: Options. (line 2269)
+* --got=TYPE: M68K. (line 6)
+* --gpsize=VALUE: Options. (line 309)
+* --hash-size=NUMBER: Options. (line 1717)
+* --hash-style=STYLE: Options. (line 1725)
+* --heap: Options. (line 1912)
+* --help: Options. (line 1130)
+* --high-entropy-va: Options. (line 2178)
+* --ignore-branch-isa <1>: Options. (line 2291)
+* --ignore-branch-isa: MIPS. (line 13)
+* --image-base: Options. (line 1919)
+* --in-implib=FILE: ARM. (line 241)
+* --insert-timestamp: Options. (line 2210)
+* --insn32 <1>: Options. (line 2282)
+* --insn32: MIPS. (line 6)
+* --just-symbols=FILE: Options. (line 529)
+* --kill-at: Options. (line 1928)
+* --large-address-aware: Options. (line 1933)
+* --ld-generated-unwind-info: Options. (line 1702)
+* --leading-underscore: Options. (line 1866)
+* --library-path=DIR: Options. (line 367)
+* --library=NAMESPEC: Options. (line 334)
+* --local-store=lo:hi: SPU ELF. (line 24)
+* --long-plt: ARM. (line 224)
+* --major-image-version: Options. (line 1949)
+* --major-os-version: Options. (line 1954)
+* --major-subsystem-version: Options. (line 1958)
+* --merge-exidx-entries: ARM. (line 221)
+* --minor-image-version: Options. (line 1963)
+* --minor-os-version: Options. (line 1968)
+* --minor-subsystem-version: Options. (line 1972)
+* --mri-script=MRI-CMDFILE: Options. (line 158)
+* --multi-subspace: HPPA ELF32. (line 6)
+* --nmagic: Options. (line 439)
+* --no-accept-unknown-input-arch: Options. (line 841)
+* --no-add-needed: Options. (line 869)
+* --no-allow-shlib-undefined: Options. (line 1163)
+* --no-apply-dynamic-relocs: ARM. (line 228)
+* --no-as-needed: Options. (line 851)
+* --no-bind: Options. (line 2201)
+* --no-check-sections: Options. (line 955)
+* --no-copy-dt-needed-entries: Options. (line 967)
+* --no-define-common: Options. (line 1000)
+* --no-demangle: Options. (line 1028)
+* --no-dotsyms: PowerPC64 ELF64. (line 33)
+* --no-dynamic-linker: Options. (line 1048)
+* --no-eh-frame-hdr: Options. (line 1696)
+* --no-enum-size-warning: ARM. (line 159)
+* --no-export-dynamic: Options. (line 221)
+* --no-fatal-warnings: Options. (line 1054)
+* --no-fix-arm1176: ARM. (line 112)
+* --no-fix-cortex-a53-835769: ARM. (line 213)
+* --no-fix-cortex-a8: ARM. (line 204)
+* --no-gc-sections: Options. (line 1069)
+* --no-ignore-branch-isa <1>: Options. (line 2292)
+* --no-ignore-branch-isa: MIPS. (line 13)
+* --no-insn32 <1>: MIPS. (line 6)
+* --no-insn32: Options. (line 2283)
+* --no-isolation: Options. (line 2194)
+* --no-keep-memory: Options. (line 1142)
+* --no-leading-underscore: Options. (line 1866)
+* --no-merge-exidx-entries <1>: Options. (line 2240)
+* --no-merge-exidx-entries: ARM. (line 221)
+* --no-multi-toc: PowerPC64 ELF64. (line 97)
+* --no-omagic: Options. (line 454)
+* --no-opd-optimize: PowerPC64 ELF64. (line 71)
+* --no-overlays: SPU ELF. (line 9)
+* --no-plt-align: PowerPC64 ELF64. (line 119)
+* --no-plt-static-chain: PowerPC64 ELF64. (line 127)
+* --no-plt-thread-safe: PowerPC64 ELF64. (line 133)
+* --no-print-gc-sections: Options. (line 1093)
+* --no-save-restore-funcs: PowerPC64 ELF64. (line 44)
+* --no-seh: Options. (line 2197)
+* --no-tls-get-addr-optimize: PowerPC64 ELF64. (line 57)
+* --no-tls-optimize <1>: PowerPC64 ELF64. (line 52)
+* --no-tls-optimize: PowerPC ELF32. (line 51)
+* --no-toc-optimize: PowerPC64 ELF64. (line 83)
+* --no-toc-sort: PowerPC64 ELF64. (line 109)
+* --no-trampoline: Options. (line 2250)
+* --no-undefined: Options. (line 1149)
+* --no-undefined-version: Options. (line 1191)
+* --no-warn-mismatch: Options. (line 1204)
+* --no-warn-search-mismatch: Options. (line 1213)
+* --no-wchar-size-warning: ARM. (line 166)
+* --no-whole-archive: Options. (line 1217)
+* --noinhibit-exec: Options. (line 1221)
+* --non-overlapping-opd: PowerPC64 ELF64. (line 77)
+* --nxcompat: Options. (line 2190)
+* --oformat=OUTPUT-FORMAT: Options. (line 1233)
+* --omagic: Options. (line 445)
+* --orphan-handling=MODE: Options. (line 606)
+* --out-implib: Options. (line 1246)
+* --output-def: Options. (line 1977)
+* --output=OUTPUT: Options. (line 460)
+* --pic-executable: Options. (line 1255)
+* --pic-veneer: ARM. (line 172)
+* --plt-align: PowerPC64 ELF64. (line 119)
+* --plt-static-chain: PowerPC64 ELF64. (line 127)
+* --plt-thread-safe: PowerPC64 ELF64. (line 133)
+* --plugin: SPU ELF. (line 6)
+* --pop-state: Options. (line 494)
+* --print-gc-sections: Options. (line 1093)
+* --print-map: Options. (line 402)
+* --print-memory-usage: Options. (line 1118)
+* --print-output-format: Options. (line 1112)
+* --push-state: Options. (line 476)
+* --reduce-memory-overheads: Options. (line 1759)
+* --relax: Options. (line 1271)
+* --relax on i960: i960. (line 31)
+* --relax on Nios II: Nios II. (line 6)
+* --relax on PowerPC: PowerPC ELF32. (line 6)
+* --relax on Xtensa: Xtensa. (line 27)
+* --relocatable: Options. (line 510)
+* --require-defined=SYMBOL: Options. (line 588)
+* --retain-symbols-file=FILENAME: Options. (line 1297)
+* --save-restore-funcs: PowerPC64 ELF64. (line 44)
+* --script=SCRIPT: Options. (line 553)
+* --sdata-got: PowerPC ELF32. (line 33)
+* --section-alignment: Options. (line 2152)
+* --section-start=SECTIONNAME=ORG: Options. (line 1462)
+* --secure-plt: PowerPC ELF32. (line 26)
+* --sort-common: Options. (line 1404)
+* --sort-section=alignment: Options. (line 1419)
+* --sort-section=name: Options. (line 1415)
+* --split-by-file: Options. (line 1423)
+* --split-by-reloc: Options. (line 1428)
+* --stack: Options. (line 2158)
+* --stack-analysis: SPU ELF. (line 29)
+* --stats: Options. (line 1441)
+* --strip-all: Options. (line 540)
+* --strip-debug: Options. (line 544)
+* --stub-group-size: PowerPC64 ELF64. (line 6)
+* --stub-group-size=N <1>: ARM. (line 177)
+* --stub-group-size=N: HPPA ELF32. (line 12)
+* --subsystem: Options. (line 2165)
+* --support-old-code: ARM. (line 6)
+* --sysroot=DIRECTORY: Options. (line 1445)
+* --target-help: Options. (line 1134)
+* --target1-abs: ARM. (line 33)
+* --target1-rel: ARM. (line 33)
+* --target2=TYPE: ARM. (line 38)
+* --thumb-entry=ENTRY: ARM. (line 17)
+* --tls-get-addr-optimize: PowerPC64 ELF64. (line 57)
+* --trace: Options. (line 549)
+* --trace-symbol=SYMBOL: Options. (line 657)
+* --traditional-format: Options. (line 1450)
+* --tsaware: Options. (line 2207)
+* --undefined=SYMBOL: Options. (line 575)
+* --unique[=SECTION]: Options. (line 632)
+* --unresolved-symbols: Options. (line 1492)
+* --use-blx: ARM. (line 75)
+* --use-nul-prefixed-import-tables: ARM. (line 23)
+* --verbose[=NUMBER]: Options. (line 1521)
+* --version: Options. (line 641)
+* --version-script=VERSION-SCRIPTFILE: Options. (line 1529)
+* --vfp11-denorm-fix: ARM. (line 84)
+* --warn-alternate-em: Options. (line 1641)
+* --warn-common: Options. (line 1540)
+* --warn-constructors: Options. (line 1608)
+* --warn-multiple-gp: Options. (line 1613)
+* --warn-once: Options. (line 1627)
+* --warn-section-align: Options. (line 1631)
+* --warn-shared-textrel: Options. (line 1638)
+* --warn-unresolved-symbols: Options. (line 1644)
+* --wdmdriver: Options. (line 2204)
+* --whole-archive: Options. (line 1653)
+* --wrap=SYMBOL: Options. (line 1667)
+* -A ARCH: Options. (line 122)
+* -a KEYWORD: Options. (line 105)
+* -assert KEYWORD: Options. (line 876)
+* -b FORMAT: Options. (line 134)
+* -Bdynamic: Options. (line 879)
+* -Bgroup: Options. (line 889)
+* -Bshareable: Options. (line 1397)
+* -Bstatic: Options. (line 896)
+* -Bsymbolic: Options. (line 911)
+* -Bsymbolic-functions: Options. (line 922)
+* -c MRI-CMDFILE: Options. (line 158)
+* -call_shared: Options. (line 879)
+* -d: Options. (line 168)
+* -dc: Options. (line 168)
+* -dn: Options. (line 896)
+* -dp: Options. (line 168)
+* -dT SCRIPT: Options. (line 562)
+* -dy: Options. (line 879)
+* -E: Options. (line 221)
+* -e ENTRY: Options. (line 187)
+* -EB: Options. (line 248)
+* -EL: Options. (line 251)
+* -F NAME: Options. (line 276)
+* -f NAME: Options. (line 255)
+* -fini=NAME: Options. (line 300)
+* -g: Options. (line 306)
+* -G VALUE: Options. (line 309)
+* -h NAME: Options. (line 316)
+* -i: Options. (line 325)
+* -IFILE: Options. (line 1041)
+* -init=NAME: Options. (line 328)
+* -L DIR: Options. (line 367)
+* -l NAMESPEC: Options. (line 334)
+* -M: Options. (line 402)
+* -m EMULATION: Options. (line 392)
+* -Map=MAPFILE: Options. (line 1138)
+* -N: Options. (line 445)
+* -n: Options. (line 439)
+* -no-relax: Options. (line 1271)
+* -non_shared: Options. (line 896)
+* -nostdlib: Options. (line 1227)
+* -O LEVEL: Options. (line 466)
+* -o OUTPUT: Options. (line 460)
+* -P AUDITLIB: Options. (line 177)
+* -pie: Options. (line 1255)
+* -q: Options. (line 497)
+* -qmagic: Options. (line 1265)
+* -Qy: Options. (line 1268)
+* -r: Options. (line 510)
+* -R FILE: Options. (line 529)
+* -rpath-link=DIR: Options. (line 1333)
+* -rpath=DIR: Options. (line 1311)
+* -S: Options. (line 544)
+* -s: Options. (line 540)
+* -shared: Options. (line 1397)
+* -soname=NAME: Options. (line 316)
+* -static: Options. (line 896)
+* -t: Options. (line 549)
+* -T SCRIPT: Options. (line 553)
+* -Tbss=ORG: Options. (line 1471)
+* -Tdata=ORG: Options. (line 1471)
+* -Tldata-segment=ORG: Options. (line 1487)
+* -Trodata-segment=ORG: Options. (line 1481)
+* -Ttext-segment=ORG: Options. (line 1477)
+* -Ttext=ORG: Options. (line 1471)
+* -u SYMBOL: Options. (line 575)
+* -Ur: Options. (line 596)
+* -V: Options. (line 641)
+* -v: Options. (line 641)
+* -X: Options. (line 651)
+* -x: Options. (line 647)
+* -Y PATH: Options. (line 666)
+* -y SYMBOL: Options. (line 657)
+* -z defs: Options. (line 1149)
+* -z KEYWORD: Options. (line 670)
+* -z muldefs: Options. (line 1157)
+* .: Location Counter. (line 6)
+* /DISCARD/: Output Section Discarding.
+ (line 26)
+* 32-bit PLT entries: ARM. (line 224)
+* :PHDR: Output Section Phdr.
+ (line 6)
+* =FILLEXP: Output Section Fill.
+ (line 6)
+* >REGION: Output Section Region.
+ (line 6)
+* [COMMON]: Input Section Common.
+ (line 29)
+* AArch64 rela addend: ARM. (line 228)
+* 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 38)
+* align location counter: Builtin Functions. (line 38)
+* ALIGN(ALIGN): Builtin Functions. (line 38)
+* ALIGN(EXP,ALIGN): Builtin Functions. (line 38)
+* ALIGN(SECTION_ALIGN): Forced Output Alignment.
+ (line 6)
+* aligned common symbols: WIN32. (line 424)
+* ALIGNOF(SECTION): Builtin Functions. (line 64)
+* allocating memory: MEMORY. (line 6)
+* architecture: Miscellaneous Commands.
+ (line 115)
+* architectures: Options. (line 122)
+* archive files, from cmd line: Options. (line 334)
+* archive search path in linker script: File Commands. (line 76)
+* arithmetic: Expressions. (line 6)
+* arithmetic operators: Operators. (line 6)
+* ARM interworking support: ARM. (line 6)
+* ARM1176 erratum workaround: ARM. (line 112)
+* AS_NEEDED(FILES): File Commands. (line 56)
+* 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 191)
+* 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 248)
+* binary input format: Options. (line 134)
+* BLOCK(EXP): Builtin Functions. (line 77)
+* 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 1540)
+* command files: Scripts. (line 6)
+* command line: Options. (line 6)
+* common allocation: Options. (line 168)
+* common allocation in linker script: Miscellaneous Commands.
+ (line 51)
+* common symbol placement: Input Section Common.
+ (line 6)
+* COMMONPAGESIZE: Symbolic Constants. (line 13)
+* compatibility, MRI: Options. (line 158)
+* 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 596)
+* constructors, arranging in link: Output Section Keywords.
+ (line 19)
+* Cortex-A53 erratum 835769 workaround: ARM. (line 213)
+* Cortex-A8 erratum workaround: ARM. (line 204)
+* crash of linker: Bug Criteria. (line 9)
+* CREATE_OBJECT_SYMBOLS: Output Section Keywords.
+ (line 9)
+* creating a DEF file: WIN32. (line 158)
+* cross reference table: Options. (line 987)
+* cross references: Miscellaneous Commands.
+ (line 82)
+* current output location: Location Counter. (line 6)
+* data: Output Section Data.
+ (line 6)
+* DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE): Builtin Functions.
+ (line 82)
+* DATA_SEGMENT_END(EXP): Builtin Functions. (line 104)
+* DATA_SEGMENT_RELRO_END(OFFSET, EXP): Builtin Functions. (line 110)
+* dbx: Options. (line 1455)
+* DEF files, creating: Options. (line 1977)
+* default emulation: Environment. (line 21)
+* default input format: Environment. (line 9)
+* defined symbol: Options. (line 588)
+* DEFINED(SYMBOL): Builtin Functions. (line 123)
+* deleting local symbols: Options. (line 647)
+* demangling, default: Environment. (line 29)
+* demangling, from command line: Options. (line 1028)
+* direct linking to a dll: WIN32. (line 239)
+* discarding sections: Output Section Discarding.
+ (line 6)
+* discontinuous memory: MEMORY. (line 6)
+* DLLs, creating: Options. (line 1977)
+* DLLs, linking to: Options. (line 2000)
+* 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 1041)
+* dynamic symbol table: Options. (line 221)
+* ELF program headers: PHDRS. (line 6)
+* emulation: Options. (line 392)
+* emulation, default: Environment. (line 21)
+* END (MRI): MRI. (line 62)
+* endianness: Options. (line 248)
+* entry point: Entry Point. (line 6)
+* entry point, from command line: Options. (line 187)
+* 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)
+* EXCLUDE_FILE: Input Section Basics.
+ (line 17)
+* 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 39)
+* fatal signal: Bug Criteria. (line 9)
+* file name wildcard patterns: Input Section Wildcards.
+ (line 6)
+* FILEHDR: PHDRS. (line 62)
+* 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 300)
+* first input file: File Commands. (line 84)
+* first instruction: Entry Point. (line 6)
+* FIX_V4BX: ARM. (line 50)
+* FIX_V4BX_INTERWORKING: ARM. (line 63)
+* FORCE_COMMON_ALLOCATION: Miscellaneous Commands.
+ (line 46)
+* 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 506)
+* FORMAT (MRI): MRI. (line 66)
+* functions in expressions: Builtin Functions. (line 6)
+* garbage collection <1>: Options. (line 1093)
+* garbage collection <2>: Input Section Keep. (line 6)
+* garbage collection: Options. (line 1069)
+* generating optimized output: Options. (line 466)
+* GNU linker: Overview. (line 6)
+* GNUTARGET: Environment. (line 9)
+* GROUP(FILES): File Commands. (line 49)
+* grouping input files: File Commands. (line 49)
+* groups of archives: Options. (line 823)
+* H8/300 support: H8/300. (line 6)
+* header size: Builtin Functions. (line 191)
+* heap size: Options. (line 1912)
+* help: Options. (line 1130)
+* HIDDEN: HIDDEN. (line 6)
+* 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 1919)
+* 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 1653)
+* incremental link: Options. (line 325)
+* INHIBIT_COMMON_ALLOCATION: Miscellaneous Commands.
+ (line 51)
+* initialization function: Options. (line 328)
+* initialized data in ROM: Output Section LMA. (line 39)
+* 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 549)
+* input format: Options. (line 134)
+* Input import library: ARM. (line 241)
+* 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 56)
+* insert user script into default script: Miscellaneous Commands.
+ (line 56)
+* 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)
+* LD_FEATURE(STRING): Miscellaneous Commands.
+ (line 121)
+* ldata segment origin, cmd line: Options. (line 1488)
+* LDEMULATION: Environment. (line 21)
+* len =: MEMORY. (line 74)
+* LENGTH =: MEMORY. (line 74)
+* LENGTH(MEMORY): Builtin Functions. (line 140)
+* library search path in linker script: File Commands. (line 76)
+* link map: Options. (line 402)
+* link-time runtime library search path: Options. (line 1333)
+* 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 251)
+* LOAD (MRI): MRI. (line 84)
+* load address: Output Section LMA. (line 6)
+* LOADADDR(SECTION): Builtin Functions. (line 143)
+* loading, preventing: Output Section Type.
+ (line 22)
+* local symbols, deleting: Options. (line 651)
+* location counter: Location Counter. (line 6)
+* LOG2CEIL(EXP): Builtin Functions. (line 147)
+* 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 115)
+* machine dependencies: Machine Dependent. (line 6)
+* mapping input sections to output sections: Input Section. (line 6)
+* MAX: Builtin Functions. (line 150)
+* 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 1118)
+* Merging exidx entries: ARM. (line 221)
+* MIN: Builtin Functions. (line 153)
+* MIPS branch relocation check control: MIPS. (line 13)
+* MIPS microMIPS instruction choice selection: MIPS. (line 6)
+* 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 460)
+* NEXT(EXP): Builtin Functions. (line 157)
+* Nios II call relaxation: Nios II. (line 6)
+* NMAGIC: Options. (line 439)
+* NO_ENUM_SIZE_WARNING: ARM. (line 159)
+* NO_WCHAR_SIZE_WARNING: ARM. (line 166)
+* NOCROSSREFS(SECTIONS): Miscellaneous Commands.
+ (line 82)
+* NOCROSSREFS_TO(TOSECTION FROMSECTIONS): Miscellaneous Commands.
+ (line 98)
+* NOLOAD: Output Section Type.
+ (line 22)
+* not enough room for program headers: Builtin Functions. (line 196)
+* 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 309)
+* OMAGIC: Options. (line 454)
+* 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 163)
+* orphan: Orphan Sections. (line 6)
+* orphan sections: Options. (line 606)
+* output file after errors: Options. (line 1221)
+* output file format in linker script: Format Commands. (line 10)
+* output file name in linker script: File Commands. (line 66)
+* output format: Options. (line 1112)
+* 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 66)
+* OUTPUT_ARCH(BFDARCH): Miscellaneous Commands.
+ (line 115)
+* OUTPUT_FORMAT(BFDNAME): Format Commands. (line 10)
+* OVERLAY: Overlay Description.
+ (line 6)
+* overlays: Overlay Description.
+ (line 6)
+* partial link: Options. (line 510)
+* PE import table prefixing: ARM. (line 23)
+* PHDRS: PHDRS. (line 62)
+* PIC_VENEER: ARM. (line 172)
+* Placement of SG veneers: ARM. (line 231)
+* pop state governing input file handling: Options. (line 494)
+* position independent executables: Options. (line 1257)
+* 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 __tls_get_addr optimization: PowerPC64 ELF64. (line 57)
+* PowerPC64 dot symbols: PowerPC64 ELF64. (line 33)
+* PowerPC64 ELF64 options: PowerPC64 ELF64. (line 6)
+* PowerPC64 multi-TOC: PowerPC64 ELF64. (line 97)
+* PowerPC64 OPD optimization: PowerPC64 ELF64. (line 71)
+* PowerPC64 OPD spacing: PowerPC64 ELF64. (line 77)
+* PowerPC64 PLT call stub static chain: PowerPC64 ELF64. (line 127)
+* PowerPC64 PLT call stub thread safety: PowerPC64 ELF64. (line 133)
+* PowerPC64 PLT stub alignment: PowerPC64 ELF64. (line 119)
+* PowerPC64 register save/restore functions: PowerPC64 ELF64.
+ (line 44)
+* PowerPC64 stub grouping: PowerPC64 ELF64. (line 6)
+* PowerPC64 stub symbols: PowerPC64 ELF64. (line 29)
+* PowerPC64 TLS optimization: PowerPC64 ELF64. (line 52)
+* PowerPC64 TOC optimization: PowerPC64 ELF64. (line 83)
+* PowerPC64 TOC sorting: PowerPC64 ELF64. (line 109)
+* 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 196)
+* program segments: PHDRS. (line 6)
+* PROVIDE: PROVIDE. (line 6)
+* PROVIDE_HIDDEN: PROVIDE_HIDDEN. (line 6)
+* PUBLIC (MRI): MRI. (line 103)
+* push state governing input file handling: Options. (line 476)
+* QUAD(EXPRESSION): Output Section Data.
+ (line 6)
+* quoted symbol names: Symbols. (line 6)
+* read-only text: Options. (line 439)
+* read/write from cmd line: Options. (line 445)
+* 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 1271)
+* relaxing on H8/300: H8/300. (line 9)
+* relaxing on i960: i960. (line 31)
+* relaxing on M68HC11: M68HC11/68HC12. (line 12)
+* relaxing on NDS32: NDS32. (line 6)
+* relaxing on Xtensa: Xtensa. (line 27)
+* relocatable and absolute symbols: Expression Section. (line 6)
+* relocatable output: Options. (line 510)
+* 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 497)
+* retaining specified symbols: Options. (line 1297)
+* rodata segment origin, cmd line: Options. (line 1482)
+* ROM initialized data: Output Section LMA. (line 39)
+* round up expression: Builtin Functions. (line 38)
+* round up location counter: Builtin Functions. (line 38)
+* runtime library name: Options. (line 316)
+* runtime library search path: Options. (line 1311)
+* runtime pseudo-relocation: WIN32. (line 217)
+* scaled integers: Constants. (line 15)
+* scommon section: Input Section Common.
+ (line 20)
+* script files: Options. (line 553)
+* scripts: Scripts. (line 6)
+* search directory, from cmd line: Options. (line 367)
+* search path in linker script: File Commands. (line 76)
+* SEARCH_DIR(PATH): File Commands. (line 76)
+* 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 64)
+* section alignment, warnings on: Options. (line 1631)
+* 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 143)
+* section name: Output Section Name.
+ (line 6)
+* section name wildcard patterns: Input Section Wildcards.
+ (line 6)
+* section size: Builtin Functions. (line 175)
+* 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)
+* sections, orphan: Options. (line 606)
+* Secure gateway import library: ARM. (line 236)
+* segment origins, cmd line: Options. (line 1471)
+* SEGMENT_START(SEGMENT, DEFAULT): Builtin Functions. (line 166)
+* segments, ELF: PHDRS. (line 6)
+* shared libraries: Options. (line 1399)
+* SHORT(EXPRESSION): Output Section Data.
+ (line 6)
+* SIZEOF(SECTION): Builtin Functions. (line 175)
+* SIZEOF_HEADERS: Builtin Functions. (line 191)
+* small common symbols: Input Section Common.
+ (line 20)
+* SORT: Input Section Wildcards.
+ (line 65)
+* SORT_BY_ALIGNMENT: Input Section Wildcards.
+ (line 54)
+* SORT_BY_INIT_PRIORITY: Input Section Wildcards.
+ (line 60)
+* SORT_BY_NAME: Input Section Wildcards.
+ (line 46)
+* SORT_NONE: Input Section Wildcards.
+ (line 106)
+* 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 2158)
+* standard Unix system: Options. (line 7)
+* start of execution: Entry Point. (line 6)
+* STARTUP(FILENAME): File Commands. (line 84)
+* STM32L4xx erratum workaround: ARM. (line 121)
+* strip all symbols: Options. (line 540)
+* strip debugger symbols: Options. (line 544)
+* stripping all but some symbols: Options. (line 1297)
+* STUB_GROUP_SIZE: ARM. (line 177)
+* SUBALIGN(SUBSECTION_ALIGN): Forced Input Alignment.
+ (line 6)
+* suffixes for integers: Constants. (line 15)
+* symbol defaults: Builtin Functions. (line 123)
+* symbol definition, scripts: Assignments. (line 6)
+* symbol names: Symbols. (line 6)
+* symbol tracing: Options. (line 657)
+* symbol versions: VERSION. (line 6)
+* symbol-only input: Options. (line 529)
+* symbolic constants: Symbolic Constants. (line 6)
+* symbols, from command line: Options. (line 1016)
+* symbols, relocatable and absolute: Expression Section. (line 6)
+* symbols, require defined: Options. (line 588)
+* symbols, retaining selectively: Options. (line 1297)
+* synthesizing linker: Options. (line 1271)
+* synthesizing on H8/300: H8/300. (line 14)
+* TARGET(BFDNAME): Format Commands. (line 35)
+* TARGET1: ARM. (line 33)
+* TARGET2: ARM. (line 38)
+* text segment origin, cmd line: Options. (line 1478)
+* thumb entry point: ARM. (line 17)
+* TI COFF versions: TI COFF. (line 6)
+* traditional format: Options. (line 1450)
+* trampoline generation on M68HC11: M68HC11/68HC12. (line 31)
+* trampoline generation on M68HC12: M68HC11/68HC12. (line 31)
+* unallocated address, next: Builtin Functions. (line 157)
+* undefined symbol: Options. (line 575)
+* undefined symbol in linker script: Miscellaneous Commands.
+ (line 39)
+* undefined symbols, warnings on: Options. (line 1627)
+* uninitialized data placement: Input Section Common.
+ (line 6)
+* unspecified memory: Output Section Data.
+ (line 39)
+* usage: Options. (line 1130)
+* USE_BLX: ARM. (line 75)
+* using a DEF file: WIN32. (line 57)
+* using auto-export functionality: WIN32. (line 22)
+* Using decorations: WIN32. (line 162)
+* variables, defining: Assignments. (line 6)
+* verbose[=NUMBER]: Options. (line 1521)
+* version: Options. (line 641)
+* version script: VERSION. (line 6)
+* version script, symbol versions: Options. (line 1529)
+* VERSION {script text}: VERSION. (line 6)
+* versions of symbols: VERSION. (line 6)
+* VFP11_DENORM_FIX: ARM. (line 84)
+* warnings, on combining symbols: Options. (line 1540)
+* warnings, on section alignment: Options. (line 1631)
+* warnings, on undefined symbols: Options. (line 1627)
+* weak externals: WIN32. (line 407)
+* 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: Top710
+Node: Overview1493
+Node: Invocation2607
+Node: Options3015
+Node: Environment107171
+Node: Scripts108931
+Node: Basic Script Concepts110665
+Node: Script Format113373
+Node: Simple Example114236
+Node: Simple Commands117332
+Node: Entry Point117838
+Node: File Commands118771
+Node: Format Commands122891
+Node: REGION_ALIAS124847
+Node: Miscellaneous Commands129679
+Node: Assignments135218
+Node: Simple Assignments135729
+Node: HIDDEN137464
+Node: PROVIDE138094
+Node: PROVIDE_HIDDEN139287
+Node: Source Code Reference139531
+Node: SECTIONS143447
+Node: Output Section Description145338
+Node: Output Section Name146582
+Node: Output Section Address147458
+Node: Input Section149693
+Node: Input Section Basics150494
+Node: Input Section Wildcards155530
+Node: Input Section Common160737
+Node: Input Section Keep162219
+Node: Input Section Example162709
+Node: Output Section Data163677
+Node: Output Section Keywords166454
+Node: Output Section Discarding170023
+Node: Output Section Attributes171516
+Node: Output Section Type172617
+Node: Output Section LMA173688
+Node: Forced Output Alignment176759
+Node: Forced Input Alignment177189
+Node: Output Section Constraint177578
+Node: Output Section Region178006
+Node: Output Section Phdr178439
+Node: Output Section Fill179103
+Node: Overlay Description180245
+Node: MEMORY184691
+Node: PHDRS189068
+Node: VERSION194394
+Node: Expressions202487
+Node: Constants203416
+Node: Symbolic Constants204291
+Node: Symbols204842
+Node: Orphan Sections205589
+Node: Location Counter206926
+Node: Operators211362
+Node: Evaluation212284
+Node: Expression Section213648
+Node: Builtin Functions217627
+Node: Implicit Linker Scripts225867
+Node: Machine Dependent226642
+Node: H8/300227766
+Node: i960229828
+Node: M68HC11/68HC12231524
+Node: ARM232966
+Node: HPPA ELF32245208
+Node: M68K246831
+Node: MIPS247740
+Node: MMIX248856
+Node: MSP430250021
+Node: NDS32251061
+Node: Nios II252027
+Node: PowerPC ELF32253343
+Node: PowerPC64 ELF64256174
+Node: SPU ELF263506
+Node: TI COFF266138
+Node: WIN32266664
+Node: Xtensa286790
+Node: BFD289755
+Node: BFD outline291210
+Node: BFD information loss292496
+Node: Canonical format295013
+Node: Reporting Bugs299370
+Node: Bug Criteria300064
+Node: Bug Reporting300763
+Node: MRI307802
+Node: GNU Free Documentation License312445
+Node: LD Index337601
+
+End Tag Table
diff --git a/ld/ldgram.c b/ld/ldgram.c
new file mode 100644
index 0000000..faed416
--- /dev/null
+++ b/ld/ldgram.c
@@ -0,0 +1,4770 @@
+/* A Bison parser, made by GNU Bison 3.0. */
+
+/* Bison implementation for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2013 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 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, see <http://www.gnu.org/licenses/>. */
+
+/* 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 "3.0"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Push parsers. */
+#define YYPUSH 0
+
+/* Pull parsers. */
+#define YYPULL 1
+
+
+
+
+/* Copy the first part of user declarations. */
+#line 22 "ldgram.y" /* yacc.c:339 */
+
+/*
+
+ */
+
+#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--;
+
+#line 105 "ldgram.c" /* yacc.c:339 */
+
+# ifndef YY_NULL
+# if defined __cplusplus && 201103L <= __cplusplus
+# define YY_NULL nullptr
+# else
+# define YY_NULL 0
+# endif
+# endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* In a future release of Bison, this section will be replaced
+ by #include "y.tab.h". */
+#ifndef YY_YY_LDGRAM_H_INCLUDED
+# define YY_YY_LDGRAM_H_INCLUDED
+/* Debug traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
+
+/* Token type. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ enum yytokentype
+ {
+ INT = 258,
+ NAME = 259,
+ LNAME = 260,
+ PLUSEQ = 261,
+ MINUSEQ = 262,
+ MULTEQ = 263,
+ DIVEQ = 264,
+ LSHIFTEQ = 265,
+ RSHIFTEQ = 266,
+ ANDEQ = 267,
+ OREQ = 268,
+ OROR = 269,
+ ANDAND = 270,
+ EQ = 271,
+ NE = 272,
+ LE = 273,
+ GE = 274,
+ LSHIFT = 275,
+ RSHIFT = 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,
+ SORT_NONE = 297,
+ SORT_BY_INIT_PRIORITY = 298,
+ SIZEOF_HEADERS = 299,
+ OUTPUT_FORMAT = 300,
+ FORCE_COMMON_ALLOCATION = 301,
+ OUTPUT_ARCH = 302,
+ INHIBIT_COMMON_ALLOCATION = 303,
+ SEGMENT_START = 304,
+ INCLUDE = 305,
+ MEMORY = 306,
+ REGION_ALIAS = 307,
+ LD_FEATURE = 308,
+ NOLOAD = 309,
+ DSECT = 310,
+ COPY = 311,
+ INFO = 312,
+ OVERLAY = 313,
+ DEFINED = 314,
+ TARGET_K = 315,
+ SEARCH_DIR = 316,
+ MAP = 317,
+ ENTRY = 318,
+ NEXT = 319,
+ SIZEOF = 320,
+ ALIGNOF = 321,
+ ADDR = 322,
+ LOADADDR = 323,
+ MAX_K = 324,
+ MIN_K = 325,
+ STARTUP = 326,
+ HLL = 327,
+ SYSLIB = 328,
+ FLOAT = 329,
+ NOFLOAT = 330,
+ NOCROSSREFS = 331,
+ NOCROSSREFS_TO = 332,
+ ORIGIN = 333,
+ FILL = 334,
+ LENGTH = 335,
+ CREATE_OBJECT_SYMBOLS = 336,
+ INPUT = 337,
+ GROUP = 338,
+ OUTPUT = 339,
+ CONSTRUCTORS = 340,
+ ALIGNMOD = 341,
+ AT = 342,
+ SUBALIGN = 343,
+ HIDDEN = 344,
+ PROVIDE = 345,
+ PROVIDE_HIDDEN = 346,
+ AS_NEEDED = 347,
+ CHIP = 348,
+ LIST = 349,
+ SECT = 350,
+ ABSOLUTE = 351,
+ LOAD = 352,
+ NEWLINE = 353,
+ ENDWORD = 354,
+ ORDER = 355,
+ NAMEWORD = 356,
+ ASSERT_K = 357,
+ LOG2CEIL = 358,
+ FORMAT = 359,
+ PUBLIC = 360,
+ DEFSYMEND = 361,
+ BASE = 362,
+ ALIAS = 363,
+ TRUNCATE = 364,
+ REL = 365,
+ INPUT_SCRIPT = 366,
+ INPUT_MRI_SCRIPT = 367,
+ INPUT_DEFSYM = 368,
+ CASE = 369,
+ EXTERN = 370,
+ START = 371,
+ VERS_TAG = 372,
+ VERS_IDENTIFIER = 373,
+ GLOBAL = 374,
+ LOCAL = 375,
+ VERSIONK = 376,
+ INPUT_VERSION_SCRIPT = 377,
+ KEEP = 378,
+ ONLY_IF_RO = 379,
+ ONLY_IF_RW = 380,
+ SPECIAL = 381,
+ INPUT_SECTION_FLAGS = 382,
+ ALIGN_WITH_INPUT = 383,
+ EXCLUDE_FILE = 384,
+ CONSTANT = 385,
+ INPUT_DYNAMIC_LIST = 386
+ };
+#endif
+/* Tokens. */
+#define INT 258
+#define NAME 259
+#define LNAME 260
+#define PLUSEQ 261
+#define MINUSEQ 262
+#define MULTEQ 263
+#define DIVEQ 264
+#define LSHIFTEQ 265
+#define RSHIFTEQ 266
+#define ANDEQ 267
+#define OREQ 268
+#define OROR 269
+#define ANDAND 270
+#define EQ 271
+#define NE 272
+#define LE 273
+#define GE 274
+#define LSHIFT 275
+#define RSHIFT 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 SORT_NONE 297
+#define SORT_BY_INIT_PRIORITY 298
+#define SIZEOF_HEADERS 299
+#define OUTPUT_FORMAT 300
+#define FORCE_COMMON_ALLOCATION 301
+#define OUTPUT_ARCH 302
+#define INHIBIT_COMMON_ALLOCATION 303
+#define SEGMENT_START 304
+#define INCLUDE 305
+#define MEMORY 306
+#define REGION_ALIAS 307
+#define LD_FEATURE 308
+#define NOLOAD 309
+#define DSECT 310
+#define COPY 311
+#define INFO 312
+#define OVERLAY 313
+#define DEFINED 314
+#define TARGET_K 315
+#define SEARCH_DIR 316
+#define MAP 317
+#define ENTRY 318
+#define NEXT 319
+#define SIZEOF 320
+#define ALIGNOF 321
+#define ADDR 322
+#define LOADADDR 323
+#define MAX_K 324
+#define MIN_K 325
+#define STARTUP 326
+#define HLL 327
+#define SYSLIB 328
+#define FLOAT 329
+#define NOFLOAT 330
+#define NOCROSSREFS 331
+#define NOCROSSREFS_TO 332
+#define ORIGIN 333
+#define FILL 334
+#define LENGTH 335
+#define CREATE_OBJECT_SYMBOLS 336
+#define INPUT 337
+#define GROUP 338
+#define OUTPUT 339
+#define CONSTRUCTORS 340
+#define ALIGNMOD 341
+#define AT 342
+#define SUBALIGN 343
+#define HIDDEN 344
+#define PROVIDE 345
+#define PROVIDE_HIDDEN 346
+#define AS_NEEDED 347
+#define CHIP 348
+#define LIST 349
+#define SECT 350
+#define ABSOLUTE 351
+#define LOAD 352
+#define NEWLINE 353
+#define ENDWORD 354
+#define ORDER 355
+#define NAMEWORD 356
+#define ASSERT_K 357
+#define LOG2CEIL 358
+#define FORMAT 359
+#define PUBLIC 360
+#define DEFSYMEND 361
+#define BASE 362
+#define ALIAS 363
+#define TRUNCATE 364
+#define REL 365
+#define INPUT_SCRIPT 366
+#define INPUT_MRI_SCRIPT 367
+#define INPUT_DEFSYM 368
+#define CASE 369
+#define EXTERN 370
+#define START 371
+#define VERS_TAG 372
+#define VERS_IDENTIFIER 373
+#define GLOBAL 374
+#define LOCAL 375
+#define VERSIONK 376
+#define INPUT_VERSION_SCRIPT 377
+#define KEEP 378
+#define ONLY_IF_RO 379
+#define ONLY_IF_RW 380
+#define SPECIAL 381
+#define INPUT_SECTION_FLAGS 382
+#define ALIGN_WITH_INPUT 383
+#define EXCLUDE_FILE 384
+#define CONSTANT 385
+#define INPUT_DYNAMIC_LIST 386
+
+/* Value type. */
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE YYSTYPE;
+union YYSTYPE
+{
+#line 60 "ldgram.y" /* yacc.c:355 */
+
+ 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;
+ struct flag_info_list *flag_info_list;
+ struct flag_info *flag_info;
+ 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 438 "ldgram.c" /* yacc.c:355 */
+};
+# define YYSTYPE_IS_TRIVIAL 1
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+extern YYSTYPE yylval;
+
+int yyparse (void);
+
+#endif /* !YY_YY_LDGRAM_H_INCLUDED */
+
+/* Copy the second part of user declarations. */
+
+#line 453 "ldgram.c" /* yacc.c:358 */
+
+#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;
+#else
+typedef signed char 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
+# 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
+
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later. */
+# if (! defined __GNUC__ || __GNUC__ < 2 \
+ || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
+# define __attribute__(Spec) /* empty */
+# 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
+
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized. */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+ _Pragma ("GCC diagnostic pop")
+#else
+# define YY_INITIAL_VALUE(Value) Value
+#endif
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
+#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 EXIT_SUCCESS
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+ /* Use EXIT_SUCCESS as a witness for stdlib.h. */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's 'empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (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 EXIT_SUCCESS \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined EXIT_SUCCESS
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined EXIT_SUCCESS
+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_alloc;
+ YYSTYPE yyvs_alloc;
+};
+
+/* 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)
+
+# define YYCOPY_NEEDED 1
+
+/* 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_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (0)
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from SRC to DST. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(Dst, Src, Count) \
+ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+# else
+# define YYCOPY(Dst, Src, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (Dst)[yyi] = (Src)[yyi]; \
+ } \
+ while (0)
+# endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 17
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 2031
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 155
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 131
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 372
+/* YYNSTATES -- Number of states. */
+#define YYNSTATES 809
+
+/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
+ by yylex, with out-of-bounds checking. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 386
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+ as returned by yylex, without out-of-bounds checking. */
+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, 153, 2, 2, 2, 34, 21, 2,
+ 37, 150, 32, 30, 148, 31, 2, 33, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 16, 149,
+ 24, 10, 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, 151, 2, 152, 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, 58, 19, 59, 154, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 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, 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, 56, 57, 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, 140,
+ 141, 142, 143, 144, 145, 146, 147
+};
+
+#if YYDEBUG
+ /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
+static const yytype_uint16 yyrline[] =
+{
+ 0, 166, 166, 167, 168, 169, 170, 174, 178, 178,
+ 188, 188, 201, 202, 206, 207, 208, 211, 214, 215,
+ 216, 218, 220, 222, 224, 226, 228, 230, 232, 234,
+ 236, 238, 239, 240, 242, 244, 246, 248, 250, 251,
+ 253, 252, 256, 258, 262, 263, 264, 268, 270, 274,
+ 276, 281, 282, 283, 288, 288, 293, 295, 297, 302,
+ 302, 308, 309, 314, 315, 316, 317, 318, 319, 320,
+ 321, 322, 323, 324, 326, 328, 330, 333, 335, 337,
+ 339, 341, 343, 342, 346, 349, 348, 352, 356, 360,
+ 361, 363, 365, 367, 372, 372, 377, 380, 383, 386,
+ 389, 392, 396, 395, 401, 400, 406, 405, 413, 417,
+ 418, 419, 423, 425, 426, 426, 434, 438, 442, 449,
+ 456, 463, 470, 477, 484, 491, 498, 505, 512, 519,
+ 528, 546, 567, 580, 589, 600, 609, 620, 629, 638,
+ 642, 651, 655, 663, 665, 664, 671, 672, 676, 677,
+ 682, 687, 688, 693, 697, 697, 701, 700, 707, 708,
+ 711, 713, 717, 719, 721, 723, 725, 730, 737, 739,
+ 743, 745, 747, 749, 751, 753, 755, 757, 762, 762,
+ 767, 771, 779, 783, 787, 795, 795, 799, 802, 802,
+ 805, 806, 811, 810, 816, 815, 822, 830, 838, 839,
+ 843, 844, 848, 850, 855, 860, 861, 866, 868, 874,
+ 876, 878, 882, 884, 890, 893, 902, 913, 913, 919,
+ 921, 923, 925, 927, 929, 932, 934, 936, 938, 940,
+ 942, 944, 946, 948, 950, 952, 954, 956, 958, 960,
+ 962, 964, 966, 968, 970, 972, 974, 977, 979, 981,
+ 983, 985, 987, 989, 991, 993, 995, 997, 999, 1008,
+ 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1028, 1029, 1033,
+ 1034, 1038, 1039, 1043, 1044, 1048, 1049, 1053, 1054, 1055,
+ 1056, 1059, 1064, 1067, 1073, 1075, 1059, 1082, 1084, 1086,
+ 1091, 1093, 1081, 1103, 1105, 1103, 1111, 1110, 1117, 1118,
+ 1119, 1120, 1121, 1125, 1126, 1127, 1131, 1132, 1137, 1138,
+ 1143, 1144, 1149, 1150, 1155, 1157, 1162, 1165, 1178, 1182,
+ 1187, 1189, 1180, 1197, 1200, 1202, 1206, 1207, 1206, 1216,
+ 1261, 1264, 1277, 1286, 1289, 1296, 1296, 1308, 1309, 1313,
+ 1317, 1326, 1326, 1340, 1340, 1350, 1351, 1355, 1359, 1363,
+ 1370, 1374, 1382, 1385, 1389, 1393, 1397, 1404, 1408, 1412,
+ 1416, 1421, 1420, 1434, 1433, 1443, 1447, 1451, 1455, 1459,
+ 1463, 1469, 1471
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || 0
+/* 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", "PLUSEQ",
+ "MINUSEQ", "MULTEQ", "DIVEQ", "'='", "LSHIFTEQ", "RSHIFTEQ", "ANDEQ",
+ "OREQ", "'?'", "':'", "OROR", "ANDAND", "'|'", "'^'", "'&'", "EQ", "NE",
+ "'<'", "'>'", "LE", "GE", "LSHIFT", "RSHIFT", "'+'", "'-'", "'*'", "'/'",
+ "'%'", "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", "SORT_NONE",
+ "SORT_BY_INIT_PRIORITY", "'{'", "'}'", "SIZEOF_HEADERS", "OUTPUT_FORMAT",
+ "FORCE_COMMON_ALLOCATION", "OUTPUT_ARCH", "INHIBIT_COMMON_ALLOCATION",
+ "SEGMENT_START", "INCLUDE", "MEMORY", "REGION_ALIAS", "LD_FEATURE",
+ "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", "NOCROSSREFS_TO", "ORIGIN", "FILL", "LENGTH",
+ "CREATE_OBJECT_SYMBOLS", "INPUT", "GROUP", "OUTPUT", "CONSTRUCTORS",
+ "ALIGNMOD", "AT", "SUBALIGN", "HIDDEN", "PROVIDE", "PROVIDE_HIDDEN",
+ "AS_NEEDED", "CHIP", "LIST", "SECT", "ABSOLUTE", "LOAD", "NEWLINE",
+ "ENDWORD", "ORDER", "NAMEWORD", "ASSERT_K", "LOG2CEIL", "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",
+ "INPUT_SECTION_FLAGS", "ALIGN_WITH_INPUT", "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",
+ "input_list1", "@9", "@10", "@11", "sections", "sec_or_group_p1",
+ "statement_anywhere", "$@12", "wildcard_name", "wildcard_spec",
+ "sect_flag_list", "sect_flags", "exclude_name_list", "section_NAME_list",
+ "input_section_spec_no_keep", "input_section_spec", "$@13", "statement",
+ "$@14", "$@15", "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",
+ "$@16", "$@17", "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", "$@18", "exp", "memspec_at_opt",
+ "opt_at", "opt_align", "opt_align_with_input", "opt_subalign",
+ "sect_constraint", "section", "$@19", "$@20", "$@21", "$@22", "$@23",
+ "$@24", "$@25", "$@26", "$@27", "$@28", "$@29", "$@30", "$@31", "type",
+ "atype", "opt_exp_with_type", "opt_exp_without_type", "opt_nocrossrefs",
+ "memspec_opt", "phdr_opt", "overlay_section", "$@32", "$@33", "$@34",
+ "phdrs", "phdr_list", "phdr", "$@35", "$@36", "phdr_type",
+ "phdr_qualifiers", "phdr_val", "dynamic_list_file", "$@37",
+ "dynamic_list_nodes", "dynamic_list_node", "dynamic_list_tag",
+ "version_script_file", "$@38", "version", "$@39", "vers_nodes",
+ "vers_node", "verdep", "vers_tag", "vers_defns", "@40", "@41",
+ "opt_semicolon", YY_NULL
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+ (internal) symbol number NUM (which must be that of a token). */
+static const yytype_uint16 yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 61, 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, 297, 298, 123, 125,
+ 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,
+ 379, 380, 381, 382, 383, 384, 385, 386, 44, 59,
+ 41, 91, 93, 33, 126
+};
+# endif
+
+#define YYPACT_NINF -664
+
+#define yypact_value_is_default(Yystate) \
+ (!!((Yystate) == (-664)))
+
+#define YYTABLE_NINF -344
+
+#define yytable_value_is_error(Yytable_value) \
+ 0
+
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+static const yytype_int16 yypact[] =
+{
+ 282, -664, -664, -664, -664, -664, 65, -664, -664, -664,
+ -664, -664, 49, -664, -23, -664, 58, -664, 932, 1765,
+ 125, 105, 67, -23, -664, 111, 58, -664, 479, 103,
+ 167, 89, 119, -664, 195, -664, 80, 179, 213, 242,
+ 243, 259, 261, 262, 270, 271, 285, -664, -664, 288,
+ 295, 299, -664, 300, 302, 303, 304, -664, 306, -664,
+ -664, -664, -664, 42, -664, -664, -664, -664, -664, -664,
+ -664, 197, -664, 340, 80, 342, 766, -664, 343, 357,
+ 362, -664, -664, 363, 373, 374, 766, 375, 382, 388,
+ -664, 390, 231, 766, -664, 392, -664, 370, 383, 339,
+ 253, 105, -664, -664, -664, 344, 255, -664, -664, -664,
+ -664, -664, -664, -664, -664, -664, -664, -664, -664, -664,
+ 401, 402, 403, 410, -664, -664, 53, 413, 414, 415,
+ 80, 80, 417, 80, 28, -664, 421, 421, -664, 389,
+ 80, 423, 424, 426, 394, -664, -664, -664, -664, 376,
+ 51, -664, 52, -664, -664, 766, 766, 766, 395, 396,
+ 398, 404, 405, -664, 407, 409, 411, 412, 416, 418,
+ 420, 422, 425, 427, 435, 436, 437, 438, 441, 766,
+ 766, 1553, 385, -664, 291, -664, 292, 15, -664, -664,
+ 514, 1817, 310, -664, -664, 313, -664, 443, -664, -664,
+ 1817, 440, 111, 111, 305, 117, 393, 331, 117, -664,
+ 766, -664, 1852, 34, -664, -664, -59, 346, -664, -664,
+ 80, 446, 0, -664, 351, 350, 352, 356, 358, 360,
+ 361, -664, -664, -37, 115, 23, 365, 366, 369, 39,
+ -664, 372, 484, 510, 513, 766, 378, -23, 766, 766,
+ -664, 766, 766, -664, -664, 942, 766, 766, 766, 766,
+ 766, 521, 522, 766, 523, 525, 526, 528, 766, 766,
+ 530, 531, 766, 766, 766, 532, -664, -664, 766, 766,
+ 766, 766, 766, 766, 766, 766, 766, 766, 766, 766,
+ 766, 766, 766, 766, 766, 766, 766, 766, 766, 766,
+ 1817, 533, 536, -664, 537, 766, 766, 1817, 146, 539,
+ -664, 41, -664, 397, 399, -664, -664, 543, -664, -664,
+ -664, 94, -664, 1817, 479, -664, 80, -664, -664, -664,
+ -664, -664, -664, -664, 546, -664, -664, 998, 517, -664,
+ -664, -664, 53, 551, -664, -664, -664, -664, -664, -664,
+ -664, 80, -664, 80, 421, -664, -664, -664, -664, -664,
+ -664, 519, 47, 408, -664, -664, -664, -664, 1573, -664,
+ 68, 1817, 1817, 1789, 1817, 1817, -664, 1131, 1151, 1593,
+ 1613, 1171, 428, 419, 1191, 430, 431, 432, 433, 1633,
+ 1685, 434, 442, 1211, 1705, 1231, 453, 1960, 1997, 1111,
+ 759, 1379, 1244, 675, 675, 341, 341, 341, 341, 297,
+ 297, 98, 98, -664, -664, -664, 1817, 1817, 1817, -664,
+ -664, -664, 1817, 1817, -664, -664, -664, -664, 553, 111,
+ 142, 117, 501, -664, -664, 95, 598, -664, 682, 598,
+ 766, 429, -664, 7, 544, 53, -664, 456, -664, -664,
+ -664, -664, -664, -664, 534, 44, -664, 457, 459, 461,
+ 564, -664, -664, 766, -664, -664, 766, 766, -664, 766,
+ -664, -664, -664, -664, -664, -664, 766, 766, -664, -664,
+ -664, 568, -664, -664, 766, -664, 439, 559, -664, -664,
+ -664, 230, 541, 1787, 571, 487, -664, -664, 1980, 520,
+ -664, 1817, 26, 609, -664, 610, 1, -664, 527, 579,
+ -664, 39, -664, -664, -664, 582, -664, -664, -664, 466,
+ 1265, 1285, 1305, 1325, 1345, 1365, 474, 1817, 117, 566,
+ 111, 111, -664, -664, -664, -664, -664, -664, 477, 766,
+ 247, 614, -664, 594, 601, 377, -664, -664, 487, 583,
+ 603, 605, -664, 493, -664, -664, -664, 635, 498, -664,
+ 16, 39, -664, -664, -664, -664, -664, -664, -664, -664,
+ -664, -664, 499, 439, -664, 1399, -664, 766, 615, 509,
+ -664, 550, -664, 766, 26, 766, 506, -664, -664, 560,
+ -664, 20, 39, 117, 600, 248, 1419, 766, -664, 550,
+ 620, -664, 1856, 1439, -664, 1459, -664, -664, 651, -664,
+ -664, 29, -664, 628, 650, -664, 1479, -664, 766, 611,
+ -664, -664, 26, -664, -664, 766, -664, -664, 130, 1499,
+ -664, -664, -664, 1533, -664, -664, -664, 612, -664, -664,
+ 634, -664, 37, 656, 838, -664, -664, -664, 345, -664,
+ -664, -664, -664, -664, -664, -664, 637, 638, 639, 640,
+ 80, 652, -664, -664, -664, 653, 654, 658, -664, 86,
+ -664, 659, 43, -664, -664, -664, 838, 629, 660, 42,
+ 657, 662, 22, 234, 70, 70, -664, -664, 674, -664,
+ 689, 70, -664, 677, -664, -66, 86, 681, 86, 685,
+ -664, -664, -664, -664, 838, 719, 621, 688, 690, 576,
+ 691, 580, 692, 694, 586, 587, 588, 838, 589, -664,
+ 766, 14, -664, 74, -664, 8, 90, -664, 86, 143,
+ -65, 86, 662, 590, 673, -664, 716, -664, 70, 70,
+ -664, 70, -664, 70, 70, -664, -664, -664, 707, -664,
+ 1725, 595, 596, 744, -664, 70, -664, -664, -664, -664,
+ 144, 621, -664, -664, 745, 62, 604, 606, 24, 608,
+ 622, -664, 746, -664, -664, -664, -664, -664, -664, -664,
+ -664, 749, -664, 623, 624, 70, 625, 627, 645, 62,
+ 62, -664, -664, 498, -664, -664, 648, -664, -664, 42,
+ -664, -664, -664, -664, -664, 498, 498, -664, -664
+};
+
+ /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE does not specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint16 yydefact[] =
+{
+ 0, 59, 10, 8, 341, 335, 0, 2, 62, 3,
+ 13, 6, 0, 4, 0, 5, 0, 1, 60, 11,
+ 0, 352, 0, 342, 345, 0, 336, 337, 0, 0,
+ 0, 0, 0, 79, 0, 80, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 212, 213, 0,
+ 0, 0, 82, 0, 0, 0, 0, 114, 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, 358, 369, 357, 365, 367, 0,
+ 0, 352, 346, 365, 367, 0, 0, 338, 170, 171,
+ 172, 173, 217, 174, 175, 176, 177, 217, 111, 324,
+ 0, 0, 0, 0, 7, 85, 189, 0, 0, 0,
+ 0, 0, 0, 0, 0, 211, 214, 214, 94, 0,
+ 0, 0, 0, 0, 0, 54, 179, 178, 113, 0,
+ 0, 40, 0, 245, 260, 0, 0, 0, 0, 0,
+ 0, 0, 0, 246, 0, 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, 353, 0, 0, 340, 180,
+ 0, 181, 0, 0, 90, 91, 0, 0, 62, 192,
+ 0, 0, 186, 191, 0, 0, 0, 0, 0, 0,
+ 0, 206, 208, 186, 186, 214, 0, 0, 0, 0,
+ 94, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 0, 0, 223, 219, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 222, 224, 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, 363, 0, 0, 347, 360, 370, 359, 366,
+ 368, 0, 339, 218, 281, 108, 0, 287, 293, 110,
+ 109, 326, 323, 325, 0, 76, 78, 343, 198, 194,
+ 187, 185, 0, 0, 93, 73, 74, 84, 112, 204,
+ 205, 0, 209, 0, 214, 215, 87, 88, 81, 96,
+ 99, 0, 95, 0, 75, 217, 217, 217, 0, 89,
+ 0, 27, 28, 43, 29, 30, 220, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 243, 242,
+ 240, 239, 238, 232, 233, 236, 237, 234, 235, 230,
+ 231, 228, 229, 225, 226, 227, 15, 26, 24, 50,
+ 48, 44, 20, 21, 35, 34, 53, 57, 0, 0,
+ 354, 355, 0, 350, 348, 0, 304, 296, 0, 304,
+ 0, 0, 86, 0, 0, 189, 190, 0, 207, 210,
+ 216, 102, 98, 101, 0, 0, 83, 0, 0, 0,
+ 0, 344, 41, 0, 253, 259, 0, 0, 257, 0,
+ 244, 221, 248, 247, 249, 250, 0, 0, 264, 265,
+ 252, 0, 266, 251, 0, 58, 371, 368, 361, 351,
+ 349, 0, 0, 304, 0, 270, 111, 311, 0, 312,
+ 294, 329, 330, 0, 202, 0, 0, 200, 0, 0,
+ 92, 0, 106, 97, 100, 0, 182, 183, 184, 0,
+ 0, 0, 0, 0, 0, 0, 0, 241, 372, 0,
+ 0, 0, 298, 299, 300, 301, 302, 305, 0, 0,
+ 0, 0, 307, 0, 272, 0, 310, 313, 270, 0,
+ 333, 0, 327, 0, 203, 199, 201, 0, 186, 195,
+ 0, 0, 104, 115, 254, 255, 256, 258, 261, 262,
+ 263, 364, 0, 371, 303, 0, 306, 0, 0, 274,
+ 297, 276, 111, 0, 330, 0, 0, 77, 217, 0,
+ 103, 0, 0, 356, 0, 304, 0, 0, 273, 276,
+ 0, 288, 0, 0, 331, 0, 328, 196, 0, 193,
+ 107, 0, 362, 0, 0, 269, 0, 282, 0, 0,
+ 295, 334, 330, 217, 105, 0, 308, 271, 280, 0,
+ 289, 332, 197, 0, 277, 278, 279, 0, 275, 318,
+ 304, 283, 0, 0, 160, 319, 290, 309, 137, 118,
+ 117, 162, 163, 164, 165, 166, 0, 0, 0, 0,
+ 0, 0, 147, 149, 154, 0, 0, 0, 148, 0,
+ 119, 0, 0, 143, 151, 159, 161, 0, 0, 0,
+ 0, 315, 0, 0, 0, 0, 156, 217, 0, 144,
+ 0, 0, 116, 0, 136, 186, 0, 138, 0, 0,
+ 158, 284, 217, 146, 160, 0, 268, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 160, 0, 167,
+ 0, 0, 130, 0, 134, 0, 0, 139, 0, 186,
+ 186, 0, 315, 0, 0, 314, 0, 316, 0, 0,
+ 150, 0, 121, 0, 0, 122, 123, 129, 0, 153,
+ 0, 116, 0, 0, 132, 0, 133, 135, 141, 140,
+ 186, 268, 152, 320, 0, 169, 0, 0, 0, 0,
+ 0, 157, 0, 145, 131, 120, 142, 316, 316, 267,
+ 217, 0, 291, 0, 0, 0, 0, 0, 0, 169,
+ 169, 168, 317, 186, 125, 124, 0, 126, 127, 0,
+ 285, 321, 292, 128, 155, 186, 186, 286, 322
+};
+
+ /* YYPGOTO[NTERM-NUM]. */
+static const yytype_int16 yypgoto[] =
+{
+ -664, -664, -67, -664, -664, -664, -664, 505, -664, -664,
+ -664, -664, -664, -664, 616, -664, -664, -664, -664, 542,
+ -664, -664, -664, 562, -664, -480, -664, -664, -664, -664,
+ -474, -14, -664, -121, -363, -664, -664, 18, -434, 50,
+ -664, -664, 123, -664, -664, -664, -662, -664, 27, -532,
+ -664, -663, -584, -220, -664, 364, -664, 464, -664, -664,
+ -664, -664, -664, -664, 307, -664, -664, -664, -664, -664,
+ -664, -128, -111, -664, -76, 54, 260, -664, -664, 211,
+ -664, -664, -664, -664, -664, -664, -664, -664, -664, -664,
+ -664, -664, -664, -664, -664, -664, -478, 381, -664, -664,
+ 79, -503, -664, -664, -664, -664, -664, -664, -664, -664,
+ -664, -664, -534, -664, -664, -664, -664, 786, -664, -664,
+ -664, -664, -664, 567, -20, -664, 715, -17, -664, -664,
+ 249
+};
+
+ /* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int16 yydefgoto[] =
+{
+ -1, 6, 125, 11, 12, 9, 10, 19, 92, 250,
+ 187, 186, 184, 195, 196, 197, 311, 7, 8, 18,
+ 60, 139, 218, 238, 239, 362, 511, 592, 561, 61,
+ 212, 329, 144, 670, 671, 723, 672, 725, 695, 673,
+ 674, 721, 675, 688, 717, 676, 677, 678, 718, 782,
+ 117, 148, 63, 728, 64, 221, 222, 223, 338, 445,
+ 558, 609, 444, 506, 507, 65, 66, 233, 67, 234,
+ 68, 236, 719, 210, 255, 737, 544, 579, 599, 601,
+ 637, 330, 436, 628, 644, 732, 805, 438, 619, 639,
+ 681, 793, 439, 549, 496, 538, 494, 495, 499, 548,
+ 706, 765, 642, 680, 778, 806, 69, 213, 333, 440,
+ 586, 502, 552, 584, 15, 16, 26, 27, 105, 13,
+ 14, 70, 71, 23, 24, 435, 99, 100, 531, 429,
+ 529
+};
+
+ /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule whose
+ number is the opposite. If YYTABLE_NINF, syntax error. */
+static const yytype_int16 yytable[] =
+{
+ 181, 209, 342, 102, 62, 504, 211, 151, 106, 237,
+ 191, 504, 692, 351, 353, 541, 703, 200, 751, 303,
+ 452, 453, 545, 649, 452, 453, 692, 235, 692, 649,
+ 550, 560, 124, 452, 453, 21, -188, 649, 331, 649,
+ 650, 645, 734, 359, 360, 427, 650, 697, 513, 514,
+ 604, 452, 453, 20, 650, 748, 650, 219, 649, -188,
+ 679, 248, 251, 227, 228, 17, 230, 232, 693, 657,
+ 658, 659, 780, 241, 692, 650, 707, 708, 781, 253,
+ 254, 591, 341, 341, 124, 649, 727, 759, 631, 334,
+ 692, 335, 679, 332, 692, 753, 646, 693, 657, 658,
+ 659, 649, 650, 276, 277, 649, 300, 355, 602, 94,
+ 22, 341, 611, 350, 307, 94, 25, 614, 650, 220,
+ 679, 316, 650, 709, 454, 101, 21, 461, 454, 551,
+ 294, 295, 296, 679, 323, 93, 804, 454, 120, 121,
+ 693, 657, 658, 659, 707, 708, 316, 361, 341, 424,
+ 425, 555, 515, 339, 505, 454, 122, 666, 755, 667,
+ 505, 118, 643, 304, 455, 669, 590, 710, 455, 368,
+ 610, 354, 371, 372, 785, 374, 375, 455, 231, 624,
+ 377, 378, 379, 380, 381, 313, 314, 384, 667, 428,
+ 146, 147, 389, 390, 698, 455, 393, 394, 395, 249,
+ 252, 22, 397, 398, 399, 400, 401, 402, 403, 404,
+ 405, 406, 407, 408, 409, 410, 411, 412, 413, 414,
+ 415, 416, 417, 418, 754, 119, 450, 433, 489, 422,
+ 423, 667, 123, 153, 154, 710, 95, 126, 692, 96,
+ 97, 98, 95, 434, 490, 96, 103, 104, 317, 649,
+ 127, 318, 319, 320, 457, 458, 459, 800, 801, 437,
+ 155, 156, 729, 341, 730, 352, 650, 157, 158, 159,
+ 634, 635, 636, 317, 789, 790, 318, 319, 487, 128,
+ 129, 160, 161, 162, 448, 540, 449, 613, 712, 713,
+ 163, 341, 341, 758, 776, 164, 130, 760, 131, 132,
+ 532, 533, 534, 535, 536, 165, 694, 133, 134, 699,
+ 166, 167, 168, 169, 170, 171, 172, 532, 533, 534,
+ 535, 536, 135, 62, 173, 136, 174, 292, 293, 294,
+ 295, 296, 137, 694, 149, 694, 138, 140, 589, 141,
+ 142, 143, 175, 145, 150, 199, 152, 182, 176, 177,
+ 102, 108, 109, 110, 111, 112, 113, 114, 115, 116,
+ 493, 183, 498, 493, 501, 757, 185, 188, 694, 290,
+ 291, 292, 293, 294, 295, 296, 178, 189, 190, 192,
+ 537, 324, -116, 179, 180, 193, 202, 520, 153, 154,
+ 521, 522, 194, 523, 198, 298, 201, 537, 204, 203,
+ 524, 525, 205, 207, 208, 214, 215, 216, 527, 1,
+ 2, 3, 486, 580, 217, 155, 156, 224, 225, 226,
+ 4, 229, 157, 158, 159, 235, 240, 242, 243, 5,
+ 244, 245, 256, 257, 247, 258, 160, 161, 162, 301,
+ 302, 259, 260, 326, 261, 163, 262, 310, 263, 264,
+ 164, 327, 321, 265, 315, 266, 43, 267, 308, 268,
+ 165, 309, 269, 575, 270, 166, 167, 168, 169, 170,
+ 171, 172, 271, 272, 273, 274, 328, 607, 275, 173,
+ 322, 174, 54, 55, 56, 108, 109, 110, 111, 112,
+ 113, 114, 115, 116, 365, 57, 336, 175, 312, 343,
+ 344, 596, 345, 176, 177, 340, 346, 603, 347, 605,
+ 348, 349, 632, 572, 573, 356, 357, 153, 154, 358,
+ 366, 616, 364, 367, 305, 382, 383, 385, 369, 386,
+ 387, 178, 388, 299, 391, 392, 396, 419, 179, 180,
+ 420, 421, 629, 426, 155, 156, 430, 432, 431, 633,
+ 441, 157, 158, 159, 443, 447, 451, 485, 456, 488,
+ 508, 711, 714, 715, 716, 160, 161, 162, 519, 470,
+ 724, 512, 526, 802, 163, 530, 469, 503, 539, 164,
+ 472, 473, 474, 475, 478, 807, 808, 542, 528, 165,
+ 543, 733, 479, 686, 166, 167, 168, 169, 170, 171,
+ 172, 153, 154, 483, 756, 711, 510, 516, 173, 517,
+ 174, 518, 547, 553, 554, 559, 563, 766, 767, 562,
+ 724, 557, 769, 770, 570, 571, 175, 574, 155, 156,
+ 576, 577, 176, 177, 775, 491, 158, 159, 492, 578,
+ 583, 582, 585, 587, 750, 588, 341, 756, 593, 160,
+ 161, 162, 597, 598, 600, 606, 608, 618, 163, 612,
+ 178, 623, 306, 164, 796, 625, 626, 179, 180, 630,
+ 641, 540, 647, 165, 682, 683, 684, 685, 166, 167,
+ 168, 169, 170, 171, 172, 153, 154, 705, 701, 687,
+ 689, 690, 173, 722, 174, 691, 696, 702, 497, 286,
+ 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
+ 175, 720, 155, 156, 726, 704, 176, 177, -116, 157,
+ 158, 159, 731, 735, 736, 738, 740, 739, 741, 743,
+ 742, 744, 763, 160, 161, 162, 745, 746, 747, 749,
+ 762, 764, 163, 771, 178, -137, 773, 164, 774, 779,
+ 788, 179, 180, 792, 783, 373, 784, 165, 786, 768,
+ 337, 246, 166, 167, 168, 169, 170, 171, 172, 153,
+ 154, 752, 787, 794, 795, 797, 173, 798, 174, 282,
+ 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
+ 293, 294, 295, 296, 175, 799, 155, 156, 803, 700,
+ 176, 177, 363, 157, 158, 159, 446, 791, 581, 509,
+ 617, 761, 107, 556, 370, 777, 206, 160, 161, 162,
+ 500, 0, 594, 0, 0, 0, 163, 0, 178, 0,
+ 0, 164, 0, 0, 0, 179, 180, 0, 0, 0,
+ 0, 165, 648, 0, 0, 0, 166, 167, 168, 169,
+ 170, 171, 172, 649, 0, 0, 0, 0, 0, 0,
+ 173, 0, 174, 0, 0, 0, 0, 0, 0, 0,
+ 650, 0, 0, 0, 0, 0, 0, 0, 175, 651,
+ 652, 653, 654, 655, 176, 177, 0, 0, 0, 0,
+ 0, 0, 656, 657, 658, 659, 0, 0, 0, 0,
+ 0, 0, 0, 0, 660, 0, 0, 0, 0, 0,
+ 0, 0, 178, 0, 0, 0, 0, 0, 0, 179,
+ 180, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 661, 0, 662, 28, 0, 0, 663,
+ 0, 0, 0, 54, 55, 56, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 664, 278, 0, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, 295, 296, 665, 29, 30,
+ 31, 666, 0, 667, 0, 0, 0, 668, 0, 669,
+ 0, 0, 0, 32, 33, 34, 35, 0, 36, 37,
+ 38, 39, 28, 0, 0, 0, 0, 0, 40, 41,
+ 42, 43, 0, 0, 0, 0, 0, 0, 0, 44,
+ 45, 46, 47, 48, 49, 50, 0, 0, 0, 0,
+ 51, 52, 53, 0, 442, 0, 0, 54, 55, 56,
+ 0, 0, 0, 0, 29, 30, 31, 0, 0, 0,
+ 57, 0, 0, 0, 0, 0, 0, 0, 0, 32,
+ 33, 34, 35, 58, 36, 37, 38, 39, 0, -343,
+ 0, 0, 0, 0, 40, 41, 42, 43, 0, 0,
+ 0, 59, 0, 0, 0, 44, 45, 46, 47, 48,
+ 49, 50, 376, 0, 0, 0, 51, 52, 53, 0,
+ 0, 0, 0, 54, 55, 56, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 57, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,
+ 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
+ 291, 292, 293, 294, 295, 296, 278, 59, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
+ 291, 292, 293, 294, 295, 296, 278, 0, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
+ 291, 292, 293, 294, 295, 296, 278, 0, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
+ 291, 292, 293, 294, 295, 296, 278, 0, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
+ 291, 292, 293, 294, 295, 296, 278, 0, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
+ 291, 292, 293, 294, 295, 296, 278, 0, 279, 280,
+ 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
+ 291, 292, 293, 294, 295, 296, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 295, 296, 463,
+ 278, 464, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
+ 278, 465, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
+ 278, 468, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
+ 278, 471, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
+ 278, 480, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
+ 278, 482, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
+ 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
+ 293, 294, 295, 296, 278, 564, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
+ 293, 294, 295, 296, 278, 565, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
+ 293, 294, 295, 296, 278, 566, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
+ 293, 294, 295, 296, 278, 567, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
+ 293, 294, 295, 296, 278, 568, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
+ 293, 294, 295, 296, 278, 569, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
+ 293, 294, 295, 296, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 278, 595,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
+ 289, 290, 291, 292, 293, 294, 295, 296, 278, 615,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
+ 289, 290, 291, 292, 293, 294, 295, 296, 278, 621,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
+ 289, 290, 291, 292, 293, 294, 295, 296, 278, 622,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
+ 289, 290, 291, 292, 293, 294, 295, 296, 278, 627,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
+ 289, 290, 291, 292, 293, 294, 295, 296, 278, 638,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
+ 289, 290, 291, 292, 293, 294, 295, 296, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 640, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 278, 297, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
+ 278, 460, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
+ 278, 466, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
+ 0, 467, 0, 0, 0, 0, 0, 0, 0, 72,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 476, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 72, 0, 0, 0, 0, 0, 0,
+ 0, 0, 278, 73, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 0, 0, 540, 462, 0, 73, 0, 0,
+ 0, 74, 278, 477, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 0, 481, 0, 74, 324, 0, 0, 0,
+ 324, 0, 0, 0, 0, 0, 0, 75, 0, 0,
+ 0, 0, 0, 772, 76, 77, 78, 79, 80, -43,
+ 81, 82, 83, 0, 0, 84, 85, 0, 86, 87,
+ 88, 75, 0, 0, 0, 89, 90, 91, 76, 77,
+ 78, 79, 80, 0, 81, 82, 83, 0, 0, 84,
+ 85, 325, 86, 87, 88, 620, 0, 0, 326, 89,
+ 90, 91, 326, 0, 0, 0, 327, 0, 0, 0,
+ 327, 43, 0, 0, 0, 43, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 328, 0, 0, 0, 328, 0, 54, 55, 56,
+ 0, 54, 55, 56, 0, 0, 0, 0, 0, 0,
+ 57, 0, 0, 0, 57, 278, 484, 279, 280, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 278, 546, 279, 280, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296
+};
+
+static const yytype_int16 yycheck[] =
+{
+ 76, 112, 222, 23, 18, 4, 117, 74, 25, 137,
+ 86, 4, 4, 233, 234, 493, 679, 93, 4, 4,
+ 4, 5, 496, 15, 4, 5, 4, 4, 4, 15,
+ 4, 511, 4, 4, 5, 58, 36, 15, 4, 15,
+ 32, 4, 704, 4, 5, 4, 32, 4, 4, 5,
+ 584, 4, 5, 4, 32, 717, 32, 4, 15, 59,
+ 644, 10, 10, 130, 131, 0, 133, 134, 54, 55,
+ 56, 57, 10, 140, 4, 32, 54, 55, 16, 155,
+ 156, 561, 148, 148, 4, 15, 152, 152, 622, 148,
+ 4, 150, 676, 59, 4, 21, 59, 54, 55, 56,
+ 57, 15, 32, 179, 180, 15, 182, 235, 582, 4,
+ 133, 148, 592, 150, 190, 4, 58, 595, 32, 66,
+ 704, 4, 32, 101, 108, 58, 58, 59, 108, 103,
+ 32, 33, 34, 717, 210, 10, 799, 108, 49, 50,
+ 54, 55, 56, 57, 54, 55, 4, 108, 148, 3,
+ 4, 150, 108, 220, 153, 108, 37, 143, 150, 145,
+ 153, 58, 640, 148, 148, 151, 150, 145, 148, 245,
+ 150, 148, 248, 249, 150, 251, 252, 148, 150, 150,
+ 256, 257, 258, 259, 260, 202, 203, 263, 145, 148,
+ 148, 149, 268, 269, 151, 148, 272, 273, 274, 148,
+ 148, 133, 278, 279, 280, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
+ 296, 297, 298, 299, 150, 58, 354, 133, 133, 305,
+ 306, 145, 37, 3, 4, 145, 131, 58, 4, 134,
+ 135, 136, 131, 149, 149, 134, 135, 136, 131, 15,
+ 37, 134, 135, 136, 365, 366, 367, 789, 790, 326,
+ 30, 31, 696, 148, 698, 150, 32, 37, 38, 39,
+ 140, 141, 142, 131, 777, 778, 134, 135, 136, 37,
+ 37, 51, 52, 53, 351, 37, 353, 39, 54, 55,
+ 60, 148, 148, 150, 150, 65, 37, 731, 37, 37,
+ 70, 71, 72, 73, 74, 75, 669, 37, 37, 672,
+ 80, 81, 82, 83, 84, 85, 86, 70, 71, 72,
+ 73, 74, 37, 337, 94, 37, 96, 30, 31, 32,
+ 33, 34, 37, 696, 137, 698, 37, 37, 558, 37,
+ 37, 37, 112, 37, 4, 114, 4, 4, 118, 119,
+ 370, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 436, 4, 438, 439, 440, 728, 4, 4, 731, 28,
+ 29, 30, 31, 32, 33, 34, 146, 4, 4, 4,
+ 150, 4, 37, 153, 154, 3, 16, 463, 3, 4,
+ 466, 467, 4, 469, 4, 10, 4, 150, 59, 16,
+ 476, 477, 149, 59, 149, 4, 4, 4, 484, 127,
+ 128, 129, 429, 36, 4, 30, 31, 4, 4, 4,
+ 138, 4, 37, 38, 39, 4, 37, 4, 4, 147,
+ 4, 37, 37, 37, 58, 37, 51, 52, 53, 148,
+ 148, 37, 37, 66, 37, 60, 37, 4, 37, 37,
+ 65, 74, 59, 37, 149, 37, 79, 37, 148, 37,
+ 75, 148, 37, 539, 37, 80, 81, 82, 83, 84,
+ 85, 86, 37, 37, 37, 37, 99, 588, 37, 94,
+ 149, 96, 105, 106, 107, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 10, 118, 150, 112, 58, 148,
+ 150, 577, 150, 118, 119, 59, 150, 583, 150, 585,
+ 150, 150, 623, 530, 531, 150, 150, 3, 4, 150,
+ 10, 597, 150, 10, 10, 4, 4, 4, 150, 4,
+ 4, 146, 4, 148, 4, 4, 4, 4, 153, 154,
+ 4, 4, 618, 4, 30, 31, 149, 4, 149, 625,
+ 4, 37, 38, 39, 37, 4, 37, 4, 150, 58,
+ 16, 682, 683, 684, 685, 51, 52, 53, 4, 150,
+ 691, 37, 4, 793, 60, 16, 148, 148, 37, 65,
+ 150, 150, 150, 150, 150, 805, 806, 16, 149, 75,
+ 103, 702, 150, 660, 80, 81, 82, 83, 84, 85,
+ 86, 3, 4, 150, 725, 726, 150, 150, 94, 150,
+ 96, 150, 92, 4, 4, 36, 150, 738, 739, 37,
+ 741, 94, 743, 744, 150, 59, 112, 150, 30, 31,
+ 16, 37, 118, 119, 755, 37, 38, 39, 40, 38,
+ 37, 58, 37, 150, 720, 10, 148, 768, 149, 51,
+ 52, 53, 37, 144, 104, 149, 96, 37, 60, 59,
+ 146, 10, 148, 65, 785, 37, 16, 153, 154, 58,
+ 58, 37, 16, 75, 37, 37, 37, 37, 80, 81,
+ 82, 83, 84, 85, 86, 3, 4, 25, 59, 37,
+ 37, 37, 94, 4, 96, 37, 37, 37, 16, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 112, 37, 30, 31, 37, 58, 118, 119, 37, 37,
+ 38, 39, 37, 4, 103, 37, 150, 37, 37, 37,
+ 150, 37, 59, 51, 52, 53, 150, 150, 150, 150,
+ 150, 25, 60, 36, 146, 150, 150, 65, 4, 4,
+ 4, 153, 154, 4, 150, 250, 150, 75, 150, 741,
+ 218, 145, 80, 81, 82, 83, 84, 85, 86, 3,
+ 4, 721, 150, 150, 150, 150, 94, 150, 96, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 112, 150, 30, 31, 150, 676,
+ 118, 119, 240, 37, 38, 39, 342, 780, 548, 445,
+ 599, 732, 26, 506, 247, 761, 101, 51, 52, 53,
+ 439, -1, 573, -1, -1, -1, 60, -1, 146, -1,
+ -1, 65, -1, -1, -1, 153, 154, -1, -1, -1,
+ -1, 75, 4, -1, -1, -1, 80, 81, 82, 83,
+ 84, 85, 86, 15, -1, -1, -1, -1, -1, -1,
+ 94, -1, 96, -1, -1, -1, -1, -1, -1, -1,
+ 32, -1, -1, -1, -1, -1, -1, -1, 112, 41,
+ 42, 43, 44, 45, 118, 119, -1, -1, -1, -1,
+ -1, -1, 54, 55, 56, 57, -1, -1, -1, -1,
+ -1, -1, -1, -1, 66, -1, -1, -1, -1, -1,
+ -1, -1, 146, -1, -1, -1, -1, -1, -1, 153,
+ 154, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 95, -1, 97, 4, -1, -1, 101,
+ -1, -1, -1, 105, 106, 107, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 118, 15, -1, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 139, 46, 47,
+ 48, 143, -1, 145, -1, -1, -1, 149, -1, 151,
+ -1, -1, -1, 61, 62, 63, 64, -1, 66, 67,
+ 68, 69, 4, -1, -1, -1, -1, -1, 76, 77,
+ 78, 79, -1, -1, -1, -1, -1, -1, -1, 87,
+ 88, 89, 90, 91, 92, 93, -1, -1, -1, -1,
+ 98, 99, 100, -1, 36, -1, -1, 105, 106, 107,
+ -1, -1, -1, -1, 46, 47, 48, -1, -1, -1,
+ 118, -1, -1, -1, -1, -1, -1, -1, -1, 61,
+ 62, 63, 64, 131, 66, 67, 68, 69, -1, 137,
+ -1, -1, -1, -1, 76, 77, 78, 79, -1, -1,
+ -1, 149, -1, -1, -1, 87, 88, 89, 90, 91,
+ 92, 93, 150, -1, -1, -1, 98, 99, 100, -1,
+ -1, -1, -1, 105, 106, 107, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 118, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 131,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, 15, 149, 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, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 148,
+ 15, 150, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 15, 150, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 15, 150, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 15, 150, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 15, 150, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 15, 150, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 15, 150, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 15, 150, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 15, 150, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 15, 150, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 15, 150, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 15, 150, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 15, 150,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 15, 150,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 15, 150,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 15, 150,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 15, 150,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 15, 150,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 150, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 15, 148, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 15, 148, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 15, 148, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ -1, 148, -1, -1, -1, -1, -1, -1, -1, 4,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 148, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 4, -1, -1, -1, -1, -1, -1,
+ -1, -1, 15, 38, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, -1, -1, 37, 36, -1, 38, -1, -1,
+ -1, 66, 15, 148, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, -1, 148, -1, 66, 4, -1, -1, -1,
+ 4, -1, -1, -1, -1, -1, -1, 102, -1, -1,
+ -1, -1, -1, 148, 109, 110, 111, 112, 113, 114,
+ 115, 116, 117, -1, -1, 120, 121, -1, 123, 124,
+ 125, 102, -1, -1, -1, 130, 131, 132, 109, 110,
+ 111, 112, 113, -1, 115, 116, 117, -1, -1, 120,
+ 121, 59, 123, 124, 125, 59, -1, -1, 66, 130,
+ 131, 132, 66, -1, -1, -1, 74, -1, -1, -1,
+ 74, 79, -1, -1, -1, 79, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 99, -1, -1, -1, 99, -1, 105, 106, 107,
+ -1, 105, 106, 107, -1, -1, -1, -1, -1, -1,
+ 118, -1, -1, -1, 118, 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, 18, 19, 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, 127, 128, 129, 138, 147, 156, 172, 173, 160,
+ 161, 158, 159, 274, 275, 269, 270, 0, 174, 162,
+ 4, 58, 133, 278, 279, 58, 271, 272, 4, 46,
+ 47, 48, 61, 62, 63, 64, 66, 67, 68, 69,
+ 76, 77, 78, 79, 87, 88, 89, 90, 91, 92,
+ 93, 98, 99, 100, 105, 106, 107, 118, 131, 149,
+ 175, 184, 186, 207, 209, 220, 221, 223, 225, 261,
+ 276, 277, 4, 38, 66, 102, 109, 110, 111, 112,
+ 113, 115, 116, 117, 120, 121, 123, 124, 125, 130,
+ 131, 132, 163, 10, 4, 131, 134, 135, 136, 281,
+ 282, 58, 279, 135, 136, 273, 282, 272, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, 205, 58, 58,
+ 49, 50, 37, 37, 4, 157, 58, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37, 37, 176,
+ 37, 37, 37, 37, 187, 37, 148, 149, 206, 137,
+ 4, 157, 4, 3, 4, 30, 31, 37, 38, 39,
+ 51, 52, 53, 60, 65, 75, 80, 81, 82, 83,
+ 84, 85, 86, 94, 96, 112, 118, 119, 146, 153,
+ 154, 229, 4, 4, 167, 4, 166, 165, 4, 4,
+ 4, 229, 4, 3, 4, 168, 169, 170, 4, 114,
+ 229, 4, 16, 16, 59, 149, 281, 59, 149, 227,
+ 228, 227, 185, 262, 4, 4, 4, 4, 177, 4,
+ 66, 210, 211, 212, 4, 4, 4, 157, 157, 4,
+ 157, 150, 157, 222, 224, 4, 226, 226, 178, 179,
+ 37, 157, 4, 4, 4, 37, 169, 58, 10, 148,
+ 164, 10, 148, 229, 229, 229, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 229, 229, 15, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 148, 10, 148,
+ 229, 148, 148, 4, 148, 10, 148, 229, 148, 148,
+ 4, 171, 58, 282, 282, 149, 4, 131, 134, 135,
+ 136, 59, 149, 229, 4, 59, 66, 74, 99, 186,
+ 236, 4, 59, 263, 148, 150, 150, 174, 213, 157,
+ 59, 148, 208, 148, 150, 150, 150, 150, 150, 150,
+ 150, 208, 150, 208, 148, 226, 150, 150, 150, 4,
+ 5, 108, 180, 178, 150, 10, 10, 10, 229, 150,
+ 278, 229, 229, 162, 229, 229, 150, 229, 229, 229,
+ 229, 229, 4, 4, 229, 4, 4, 4, 4, 229,
+ 229, 4, 4, 229, 229, 229, 4, 229, 229, 229,
+ 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
+ 229, 229, 229, 229, 229, 229, 229, 229, 229, 4,
+ 4, 4, 229, 229, 3, 4, 4, 4, 148, 284,
+ 149, 149, 4, 133, 149, 280, 237, 157, 242, 247,
+ 264, 4, 36, 37, 217, 214, 212, 4, 157, 157,
+ 226, 37, 4, 5, 108, 148, 150, 227, 227, 227,
+ 148, 59, 36, 148, 150, 150, 148, 148, 150, 148,
+ 150, 150, 150, 150, 150, 150, 148, 148, 150, 150,
+ 150, 148, 150, 150, 16, 4, 282, 136, 58, 133,
+ 149, 37, 40, 229, 251, 252, 249, 16, 229, 253,
+ 252, 229, 266, 148, 4, 153, 218, 219, 16, 210,
+ 150, 181, 37, 4, 5, 108, 150, 150, 150, 4,
+ 229, 229, 229, 229, 229, 229, 4, 229, 149, 285,
+ 16, 283, 70, 71, 72, 73, 74, 150, 250, 37,
+ 37, 251, 16, 103, 231, 185, 16, 92, 254, 248,
+ 4, 103, 267, 4, 4, 150, 219, 94, 215, 36,
+ 180, 183, 37, 150, 150, 150, 150, 150, 150, 150,
+ 150, 59, 282, 282, 150, 229, 16, 37, 38, 232,
+ 36, 231, 58, 37, 268, 37, 265, 150, 10, 208,
+ 150, 180, 182, 149, 285, 150, 229, 37, 144, 233,
+ 104, 234, 185, 229, 267, 229, 149, 227, 96, 216,
+ 150, 180, 59, 39, 251, 150, 229, 234, 37, 243,
+ 59, 150, 150, 10, 150, 37, 16, 150, 238, 229,
+ 58, 267, 227, 229, 140, 141, 142, 235, 150, 244,
+ 150, 58, 257, 251, 239, 4, 59, 16, 4, 15,
+ 32, 41, 42, 43, 44, 45, 54, 55, 56, 57,
+ 66, 95, 97, 101, 118, 139, 143, 145, 149, 151,
+ 188, 189, 191, 194, 195, 197, 200, 201, 202, 207,
+ 258, 245, 37, 37, 37, 37, 157, 37, 198, 37,
+ 37, 37, 4, 54, 189, 193, 37, 4, 151, 189,
+ 197, 59, 37, 206, 58, 25, 255, 54, 55, 101,
+ 145, 188, 54, 55, 188, 188, 188, 199, 203, 227,
+ 37, 196, 4, 190, 188, 192, 37, 152, 208, 193,
+ 193, 37, 240, 227, 201, 4, 103, 230, 37, 37,
+ 150, 37, 150, 37, 37, 150, 150, 150, 201, 150,
+ 229, 4, 194, 21, 150, 150, 188, 189, 150, 152,
+ 193, 255, 150, 59, 25, 256, 188, 188, 192, 188,
+ 188, 36, 148, 150, 4, 188, 150, 230, 259, 4,
+ 10, 16, 204, 150, 150, 150, 150, 150, 4, 256,
+ 256, 203, 4, 246, 150, 150, 188, 150, 150, 150,
+ 204, 204, 208, 150, 206, 241, 260, 208, 208
+};
+
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint16 yyr1[] =
+{
+ 0, 155, 156, 156, 156, 156, 156, 157, 159, 158,
+ 161, 160, 162, 162, 163, 163, 163, 163, 163, 163,
+ 163, 163, 163, 163, 163, 163, 163, 163, 163, 163,
+ 163, 163, 163, 163, 163, 163, 163, 163, 163, 163,
+ 164, 163, 163, 163, 165, 165, 165, 166, 166, 167,
+ 167, 168, 168, 168, 170, 169, 171, 171, 171, 173,
+ 172, 174, 174, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 175, 176, 175, 175, 177, 175, 175, 175, 175,
+ 175, 175, 175, 175, 179, 178, 180, 180, 180, 180,
+ 180, 180, 181, 180, 182, 180, 183, 180, 184, 185,
+ 185, 185, 186, 186, 187, 186, 188, 188, 188, 189,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 190, 190, 191, 192, 192, 193, 193, 194, 194, 194,
+ 194, 194, 194, 195, 196, 195, 197, 197, 197, 197,
+ 197, 197, 197, 197, 198, 197, 199, 197, 200, 200,
+ 201, 201, 202, 202, 202, 202, 202, 203, 204, 204,
+ 205, 205, 205, 205, 205, 205, 205, 205, 206, 206,
+ 207, 207, 207, 207, 207, 208, 208, 209, 210, 210,
+ 211, 211, 213, 212, 214, 212, 215, 216, 217, 217,
+ 218, 218, 219, 219, 220, 221, 221, 222, 222, 223,
+ 224, 224, 225, 225, 226, 226, 226, 228, 227, 229,
+ 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
+ 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
+ 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
+ 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
+ 229, 229, 229, 229, 229, 229, 229, 230, 230, 231,
+ 231, 232, 232, 233, 233, 234, 234, 235, 235, 235,
+ 235, 237, 238, 239, 240, 241, 236, 242, 243, 244,
+ 245, 246, 236, 247, 248, 236, 249, 236, 250, 250,
+ 250, 250, 250, 251, 251, 251, 252, 252, 252, 252,
+ 253, 253, 254, 254, 255, 255, 256, 256, 257, 258,
+ 259, 260, 257, 261, 262, 262, 264, 265, 263, 266,
+ 267, 267, 267, 268, 268, 270, 269, 271, 271, 272,
+ 273, 275, 274, 277, 276, 278, 278, 279, 279, 279,
+ 280, 280, 281, 281, 281, 281, 281, 282, 282, 282,
+ 282, 283, 282, 284, 282, 282, 282, 282, 282, 282,
+ 282, 285, 285
+};
+
+ /* YYR2[YYN] -- Number of symbols on the 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, 4,
+ 3, 3, 6, 4, 0, 2, 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, 4, 7, 7, 7, 7, 8, 4,
+ 1, 3, 4, 2, 1, 3, 1, 1, 2, 3,
+ 4, 4, 5, 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, 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, 4, 3, 0, 4,
+ 0, 4, 0, 1, 0, 4, 0, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 20, 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
+};
+
+
+#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
+
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ YYPOPSTACK (yylen); \
+ yystate = *yyssp; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (0)
+
+/* Error token number */
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+
+/* 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 (0)
+
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
+
+
+# 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 (0)
+
+
+/*----------------------------------------.
+| Print this symbol's value on YYOUTPUT. |
+`----------------------------------------*/
+
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+{
+ FILE *yyo = yyoutput;
+ YYUSE (yyo);
+ if (!yyvaluep)
+ return;
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# endif
+ YYUSE (yytype);
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+{
+ YYFPRINTF (yyoutput, "%s %s (",
+ yytype < YYNTOKENS ? "token" : "nterm", 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). |
+`------------------------------------------------------------------*/
+
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; yybottom <= yytop; yybottom++)
+ {
+ int yybot = *yybottom;
+ YYFPRINTF (stderr, " %d", yybot);
+ }
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (0)
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+static void
+yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
+{
+ unsigned long int yylno = yyrline[yyrule];
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ YYFPRINTF (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr,
+ yystos[yyssp[yyi + 1 - yynrhs]],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ );
+ YYFPRINTF (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyssp, yyvsp, Rule); \
+} while (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. */
+static YYSIZE_T
+yystrlen (const char *yystr)
+{
+ 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. */
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+{
+ 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 *YYMSG, which is of size *YYMSG_ALLOC, an error message
+ about the unexpected token YYTOKEN for the state stack whose top is
+ YYSSP.
+
+ Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
+ not large enough to hold the message. In that case, also set
+ *YYMSG_ALLOC to the required number of bytes. Return 2 if the
+ required number of bytes is too large to store. */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+ yytype_int16 *yyssp, int yytoken)
+{
+ YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
+ YYSIZE_T yysize = yysize0;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ /* Internationalized format string. */
+ const char *yyformat = YY_NULL;
+ /* Arguments of yyformat. */
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ /* Number of reported tokens (one for the "unexpected", one per
+ "expected"). */
+ int yycount = 0;
+
+ /* There are many possibilities here to consider:
+ - If this state is a consistent state with a default action, then
+ the only way this function was invoked is if the default action
+ is an error action. In that case, don't check for expected
+ tokens because there are none.
+ - The only way there can be no lookahead present (in yychar) is if
+ this state is a consistent state with a default action. Thus,
+ detecting the absence of a lookahead is sufficient to determine
+ that there is no unexpected or expected token to report. In that
+ case, just report a simple "syntax error".
+ - Don't assume there isn't a lookahead just because this state is a
+ consistent state with a default action. There might have been a
+ previous inconsistent state, consistent state with a non-default
+ action, or user semantic action that manipulated yychar.
+ - Of course, the expected token list depends on states to have
+ correct lookahead information, and it depends on the parser not
+ to perform extra reductions after fetching a lookahead from the
+ scanner and before detecting a syntax error. Thus, state merging
+ (from LALR or IELR) and default reductions corrupt the expected
+ token list. However, the list is correct for canonical LR with
+ one exception: it will still contain any token that will not be
+ accepted due to an error action in a later state.
+ */
+ if (yytoken != YYEMPTY)
+ {
+ int yyn = yypact[*yyssp];
+ yyarg[yycount++] = yytname[yytoken];
+ if (!yypact_value_is_default (yyn))
+ {
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ 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 yyx;
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+ && !yytable_value_is_error (yytable[yyx + yyn]))
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ {
+ YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
+ if (! (yysize <= yysize1
+ && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
+ }
+ }
+ }
+
+ switch (yycount)
+ {
+# define YYCASE_(N, S) \
+ case N: \
+ yyformat = S; \
+ break
+ YYCASE_(0, YY_("syntax error"));
+ YYCASE_(1, YY_("syntax error, unexpected %s"));
+ YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+ YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+ YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+ YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+ }
+
+ {
+ YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
+ if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
+
+ if (*yymsg_alloc < yysize)
+ {
+ *yymsg_alloc = 2 * yysize;
+ if (! (yysize <= *yymsg_alloc
+ && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+ *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+ return 1;
+ }
+
+ /* 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 = *yymsg;
+ int yyi = 0;
+ while ((*yyp = *yyformat) != '\0')
+ if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyformat += 2;
+ }
+ else
+ {
+ yyp++;
+ yyformat++;
+ }
+ }
+ return 0;
+}
+#endif /* YYERROR_VERBOSE */
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+{
+ YYUSE (yyvaluep);
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ YYUSE (yytype);
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+}
+
+
+
+
+/* The lookahead symbol. */
+int yychar;
+
+/* The semantic value of the lookahead symbol. */
+YYSTYPE yylval;
+/* Number of syntax errors so far. */
+int yynerrs;
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+int
+yyparse (void)
+{
+ int yystate;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+
+ /* The stacks and their tools:
+ 'yyss': related to states.
+ 'yyvs': related to semantic values.
+
+ Refer to the stacks through separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs;
+ YYSTYPE *yyvsp;
+
+ YYSIZE_T yystacksize;
+
+ int yyn;
+ int yyresult;
+ /* Lookahead token as an internal (translated) token number. */
+ int yytoken = 0;
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ yyssp = yyss = yyssa;
+ yyvsp = yyvs = yyvsa;
+ yystacksize = YYINITDEPTH;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+ 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_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, 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));
+
+ if (yystate == YYFINAL)
+ YYACCEPT;
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+ lookahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to lookahead token. */
+ yyn = yypact[yystate];
+ if (yypact_value_is_default (yyn))
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead 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 (yytable_value_is_error (yyn))
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the lookahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ *++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+
+ 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 178 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_defsym(); }
+#line 2361 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 9:
+#line 180 "ldgram.y" /* yacc.c:1661 */
+ {
+ ldlex_popstate();
+ lang_add_assignment (exp_defsym ((yyvsp[-2].name), (yyvsp[0].etree)));
+ }
+#line 2370 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 10:
+#line 188 "ldgram.y" /* yacc.c:1661 */
+ {
+ ldlex_mri_script ();
+ PUSH_ERROR (_("MRI style script"));
+ }
+#line 2379 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 11:
+#line 193 "ldgram.y" /* yacc.c:1661 */
+ {
+ ldlex_popstate ();
+ mri_draw_tree ();
+ POP_ERROR ();
+ }
+#line 2389 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 16:
+#line 208 "ldgram.y" /* yacc.c:1661 */
+ {
+ einfo(_("%P%F: unrecognised keyword in MRI style script '%s'\n"),(yyvsp[0].name));
+ }
+#line 2397 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 17:
+#line 211 "ldgram.y" /* yacc.c:1661 */
+ {
+ config.map_filename = "-";
+ }
+#line 2405 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 20:
+#line 217 "ldgram.y" /* yacc.c:1661 */
+ { mri_public((yyvsp[-2].name), (yyvsp[0].etree)); }
+#line 2411 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 21:
+#line 219 "ldgram.y" /* yacc.c:1661 */
+ { mri_public((yyvsp[-2].name), (yyvsp[0].etree)); }
+#line 2417 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 22:
+#line 221 "ldgram.y" /* yacc.c:1661 */
+ { mri_public((yyvsp[-1].name), (yyvsp[0].etree)); }
+#line 2423 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 23:
+#line 223 "ldgram.y" /* yacc.c:1661 */
+ { mri_format((yyvsp[0].name)); }
+#line 2429 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 24:
+#line 225 "ldgram.y" /* yacc.c:1661 */
+ { mri_output_section((yyvsp[-2].name), (yyvsp[0].etree));}
+#line 2435 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 25:
+#line 227 "ldgram.y" /* yacc.c:1661 */
+ { mri_output_section((yyvsp[-1].name), (yyvsp[0].etree));}
+#line 2441 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 26:
+#line 229 "ldgram.y" /* yacc.c:1661 */
+ { mri_output_section((yyvsp[-2].name), (yyvsp[0].etree));}
+#line 2447 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 27:
+#line 231 "ldgram.y" /* yacc.c:1661 */
+ { mri_align((yyvsp[-2].name),(yyvsp[0].etree)); }
+#line 2453 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 28:
+#line 233 "ldgram.y" /* yacc.c:1661 */
+ { mri_align((yyvsp[-2].name),(yyvsp[0].etree)); }
+#line 2459 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 29:
+#line 235 "ldgram.y" /* yacc.c:1661 */
+ { mri_alignmod((yyvsp[-2].name),(yyvsp[0].etree)); }
+#line 2465 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 30:
+#line 237 "ldgram.y" /* yacc.c:1661 */
+ { mri_alignmod((yyvsp[-2].name),(yyvsp[0].etree)); }
+#line 2471 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 33:
+#line 241 "ldgram.y" /* yacc.c:1661 */
+ { mri_name((yyvsp[0].name)); }
+#line 2477 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 34:
+#line 243 "ldgram.y" /* yacc.c:1661 */
+ { mri_alias((yyvsp[-2].name),(yyvsp[0].name),0);}
+#line 2483 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 35:
+#line 245 "ldgram.y" /* yacc.c:1661 */
+ { mri_alias ((yyvsp[-2].name), 0, (int) (yyvsp[0].bigint).integer); }
+#line 2489 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 36:
+#line 247 "ldgram.y" /* yacc.c:1661 */
+ { mri_base((yyvsp[0].etree)); }
+#line 2495 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 37:
+#line 249 "ldgram.y" /* yacc.c:1661 */
+ { mri_truncate ((unsigned int) (yyvsp[0].bigint).integer); }
+#line 2501 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 40:
+#line 253 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_script (); ldfile_open_command_file((yyvsp[0].name)); }
+#line 2507 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 41:
+#line 255 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_popstate (); }
+#line 2513 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 42:
+#line 257 "ldgram.y" /* yacc.c:1661 */
+ { lang_add_entry ((yyvsp[0].name), FALSE); }
+#line 2519 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 44:
+#line 262 "ldgram.y" /* yacc.c:1661 */
+ { mri_order((yyvsp[0].name)); }
+#line 2525 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 45:
+#line 263 "ldgram.y" /* yacc.c:1661 */
+ { mri_order((yyvsp[0].name)); }
+#line 2531 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 47:
+#line 269 "ldgram.y" /* yacc.c:1661 */
+ { mri_load((yyvsp[0].name)); }
+#line 2537 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 48:
+#line 270 "ldgram.y" /* yacc.c:1661 */
+ { mri_load((yyvsp[0].name)); }
+#line 2543 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 49:
+#line 275 "ldgram.y" /* yacc.c:1661 */
+ { mri_only_load((yyvsp[0].name)); }
+#line 2549 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 50:
+#line 277 "ldgram.y" /* yacc.c:1661 */
+ { mri_only_load((yyvsp[0].name)); }
+#line 2555 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 51:
+#line 281 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.name) = NULL; }
+#line 2561 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 54:
+#line 288 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_expression (); }
+#line 2567 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 55:
+#line 290 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_popstate (); }
+#line 2573 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 56:
+#line 294 "ldgram.y" /* yacc.c:1661 */
+ { ldlang_add_undef ((yyvsp[0].name), FALSE); }
+#line 2579 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 57:
+#line 296 "ldgram.y" /* yacc.c:1661 */
+ { ldlang_add_undef ((yyvsp[0].name), FALSE); }
+#line 2585 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 58:
+#line 298 "ldgram.y" /* yacc.c:1661 */
+ { ldlang_add_undef ((yyvsp[0].name), FALSE); }
+#line 2591 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 59:
+#line 302 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_both(); }
+#line 2597 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 60:
+#line 304 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_popstate(); }
+#line 2603 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 73:
+#line 325 "ldgram.y" /* yacc.c:1661 */
+ { lang_add_target((yyvsp[-1].name)); }
+#line 2609 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 74:
+#line 327 "ldgram.y" /* yacc.c:1661 */
+ { ldfile_add_library_path ((yyvsp[-1].name), FALSE); }
+#line 2615 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 75:
+#line 329 "ldgram.y" /* yacc.c:1661 */
+ { lang_add_output((yyvsp[-1].name), 1); }
+#line 2621 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 76:
+#line 331 "ldgram.y" /* yacc.c:1661 */
+ { lang_add_output_format ((yyvsp[-1].name), (char *) NULL,
+ (char *) NULL, 1); }
+#line 2628 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 77:
+#line 334 "ldgram.y" /* yacc.c:1661 */
+ { lang_add_output_format ((yyvsp[-5].name), (yyvsp[-3].name), (yyvsp[-1].name), 1); }
+#line 2634 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 78:
+#line 336 "ldgram.y" /* yacc.c:1661 */
+ { ldfile_set_output_arch ((yyvsp[-1].name), bfd_arch_unknown); }
+#line 2640 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 79:
+#line 338 "ldgram.y" /* yacc.c:1661 */
+ { command_line.force_common_definition = TRUE ; }
+#line 2646 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 80:
+#line 340 "ldgram.y" /* yacc.c:1661 */
+ { command_line.inhibit_common_definition = TRUE ; }
+#line 2652 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 82:
+#line 343 "ldgram.y" /* yacc.c:1661 */
+ { lang_enter_group (); }
+#line 2658 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 83:
+#line 345 "ldgram.y" /* yacc.c:1661 */
+ { lang_leave_group (); }
+#line 2664 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 84:
+#line 347 "ldgram.y" /* yacc.c:1661 */
+ { lang_add_map((yyvsp[-1].name)); }
+#line 2670 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 85:
+#line 349 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_script (); ldfile_open_command_file((yyvsp[0].name)); }
+#line 2676 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 86:
+#line 351 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_popstate (); }
+#line 2682 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 87:
+#line 353 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_add_nocrossref ((yyvsp[-1].nocrossref));
+ }
+#line 2690 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 88:
+#line 357 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_add_nocrossref_to ((yyvsp[-1].nocrossref));
+ }
+#line 2698 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 90:
+#line 362 "ldgram.y" /* yacc.c:1661 */
+ { lang_add_insert ((yyvsp[0].name), 0); }
+#line 2704 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 91:
+#line 364 "ldgram.y" /* yacc.c:1661 */
+ { lang_add_insert ((yyvsp[0].name), 1); }
+#line 2710 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 92:
+#line 366 "ldgram.y" /* yacc.c:1661 */
+ { lang_memory_region_alias ((yyvsp[-3].name), (yyvsp[-1].name)); }
+#line 2716 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 93:
+#line 368 "ldgram.y" /* yacc.c:1661 */
+ { lang_ld_feature ((yyvsp[-1].name)); }
+#line 2722 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 94:
+#line 372 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_inputlist(); }
+#line 2728 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 95:
+#line 374 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_popstate(); }
+#line 2734 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 96:
+#line 378 "ldgram.y" /* yacc.c:1661 */
+ { lang_add_input_file((yyvsp[0].name),lang_input_file_is_search_file_enum,
+ (char *)NULL); }
+#line 2741 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 97:
+#line 381 "ldgram.y" /* yacc.c:1661 */
+ { lang_add_input_file((yyvsp[0].name),lang_input_file_is_search_file_enum,
+ (char *)NULL); }
+#line 2748 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 98:
+#line 384 "ldgram.y" /* yacc.c:1661 */
+ { lang_add_input_file((yyvsp[0].name),lang_input_file_is_search_file_enum,
+ (char *)NULL); }
+#line 2755 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 99:
+#line 387 "ldgram.y" /* yacc.c:1661 */
+ { lang_add_input_file((yyvsp[0].name),lang_input_file_is_l_enum,
+ (char *)NULL); }
+#line 2762 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 100:
+#line 390 "ldgram.y" /* yacc.c:1661 */
+ { lang_add_input_file((yyvsp[0].name),lang_input_file_is_l_enum,
+ (char *)NULL); }
+#line 2769 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 101:
+#line 393 "ldgram.y" /* yacc.c:1661 */
+ { lang_add_input_file((yyvsp[0].name),lang_input_file_is_l_enum,
+ (char *)NULL); }
+#line 2776 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 102:
+#line 396 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.integer) = input_flags.add_DT_NEEDED_for_regular;
+ input_flags.add_DT_NEEDED_for_regular = TRUE; }
+#line 2783 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 103:
+#line 399 "ldgram.y" /* yacc.c:1661 */
+ { input_flags.add_DT_NEEDED_for_regular = (yyvsp[-2].integer); }
+#line 2789 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 104:
+#line 401 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.integer) = input_flags.add_DT_NEEDED_for_regular;
+ input_flags.add_DT_NEEDED_for_regular = TRUE; }
+#line 2796 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 105:
+#line 404 "ldgram.y" /* yacc.c:1661 */
+ { input_flags.add_DT_NEEDED_for_regular = (yyvsp[-2].integer); }
+#line 2802 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 106:
+#line 406 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.integer) = input_flags.add_DT_NEEDED_for_regular;
+ input_flags.add_DT_NEEDED_for_regular = TRUE; }
+#line 2809 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 107:
+#line 409 "ldgram.y" /* yacc.c:1661 */
+ { input_flags.add_DT_NEEDED_for_regular = (yyvsp[-2].integer); }
+#line 2815 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 112:
+#line 424 "ldgram.y" /* yacc.c:1661 */
+ { lang_add_entry ((yyvsp[-1].name), FALSE); }
+#line 2821 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 114:
+#line 426 "ldgram.y" /* yacc.c:1661 */
+ {ldlex_expression ();}
+#line 2827 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 115:
+#line 427 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_popstate ();
+ lang_add_assignment (exp_assert ((yyvsp[-3].etree), (yyvsp[-1].name))); }
+#line 2834 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 116:
+#line 435 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.cname) = (yyvsp[0].name);
+ }
+#line 2842 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 117:
+#line 439 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.cname) = "*";
+ }
+#line 2850 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 118:
+#line 443 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.cname) = "?";
+ }
+#line 2858 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 119:
+#line 450 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.wildcard).name = (yyvsp[0].cname);
+ (yyval.wildcard).sorted = none;
+ (yyval.wildcard).exclude_name_list = NULL;
+ (yyval.wildcard).section_flag_list = NULL;
+ }
+#line 2869 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 120:
+#line 457 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.wildcard).name = (yyvsp[0].cname);
+ (yyval.wildcard).sorted = none;
+ (yyval.wildcard).exclude_name_list = (yyvsp[-2].name_list);
+ (yyval.wildcard).section_flag_list = NULL;
+ }
+#line 2880 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 121:
+#line 464 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.wildcard).name = (yyvsp[-1].cname);
+ (yyval.wildcard).sorted = by_name;
+ (yyval.wildcard).exclude_name_list = NULL;
+ (yyval.wildcard).section_flag_list = NULL;
+ }
+#line 2891 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 122:
+#line 471 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.wildcard).name = (yyvsp[-1].cname);
+ (yyval.wildcard).sorted = by_alignment;
+ (yyval.wildcard).exclude_name_list = NULL;
+ (yyval.wildcard).section_flag_list = NULL;
+ }
+#line 2902 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 123:
+#line 478 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.wildcard).name = (yyvsp[-1].cname);
+ (yyval.wildcard).sorted = by_none;
+ (yyval.wildcard).exclude_name_list = NULL;
+ (yyval.wildcard).section_flag_list = NULL;
+ }
+#line 2913 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 124:
+#line 485 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.wildcard).name = (yyvsp[-2].cname);
+ (yyval.wildcard).sorted = by_name_alignment;
+ (yyval.wildcard).exclude_name_list = NULL;
+ (yyval.wildcard).section_flag_list = NULL;
+ }
+#line 2924 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 125:
+#line 492 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.wildcard).name = (yyvsp[-2].cname);
+ (yyval.wildcard).sorted = by_name;
+ (yyval.wildcard).exclude_name_list = NULL;
+ (yyval.wildcard).section_flag_list = NULL;
+ }
+#line 2935 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 126:
+#line 499 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.wildcard).name = (yyvsp[-2].cname);
+ (yyval.wildcard).sorted = by_alignment_name;
+ (yyval.wildcard).exclude_name_list = NULL;
+ (yyval.wildcard).section_flag_list = NULL;
+ }
+#line 2946 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 127:
+#line 506 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.wildcard).name = (yyvsp[-2].cname);
+ (yyval.wildcard).sorted = by_alignment;
+ (yyval.wildcard).exclude_name_list = NULL;
+ (yyval.wildcard).section_flag_list = NULL;
+ }
+#line 2957 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 128:
+#line 513 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.wildcard).name = (yyvsp[-1].cname);
+ (yyval.wildcard).sorted = by_name;
+ (yyval.wildcard).exclude_name_list = (yyvsp[-3].name_list);
+ (yyval.wildcard).section_flag_list = NULL;
+ }
+#line 2968 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 129:
+#line 520 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.wildcard).name = (yyvsp[-1].cname);
+ (yyval.wildcard).sorted = by_init_priority;
+ (yyval.wildcard).exclude_name_list = NULL;
+ (yyval.wildcard).section_flag_list = NULL;
+ }
+#line 2979 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 130:
+#line 529 "ldgram.y" /* yacc.c:1661 */
+ {
+ struct flag_info_list *n;
+ n = ((struct flag_info_list *) xmalloc (sizeof *n));
+ if ((yyvsp[0].name)[0] == '!')
+ {
+ n->with = without_flags;
+ n->name = &(yyvsp[0].name)[1];
+ }
+ else
+ {
+ n->with = with_flags;
+ n->name = (yyvsp[0].name);
+ }
+ n->valid = FALSE;
+ n->next = NULL;
+ (yyval.flag_info_list) = n;
+ }
+#line 3001 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 131:
+#line 547 "ldgram.y" /* yacc.c:1661 */
+ {
+ struct flag_info_list *n;
+ n = ((struct flag_info_list *) xmalloc (sizeof *n));
+ if ((yyvsp[0].name)[0] == '!')
+ {
+ n->with = without_flags;
+ n->name = &(yyvsp[0].name)[1];
+ }
+ else
+ {
+ n->with = with_flags;
+ n->name = (yyvsp[0].name);
+ }
+ n->valid = FALSE;
+ n->next = (yyvsp[-2].flag_info_list);
+ (yyval.flag_info_list) = n;
+ }
+#line 3023 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 132:
+#line 568 "ldgram.y" /* yacc.c:1661 */
+ {
+ struct flag_info *n;
+ n = ((struct flag_info *) xmalloc (sizeof *n));
+ n->flag_list = (yyvsp[-1].flag_info_list);
+ n->flags_initialized = FALSE;
+ n->not_with_flags = 0;
+ n->only_with_flags = 0;
+ (yyval.flag_info) = n;
+ }
+#line 3037 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 133:
+#line 581 "ldgram.y" /* yacc.c:1661 */
+ {
+ struct name_list *tmp;
+ tmp = (struct name_list *) xmalloc (sizeof *tmp);
+ tmp->name = (yyvsp[0].cname);
+ tmp->next = (yyvsp[-1].name_list);
+ (yyval.name_list) = tmp;
+ }
+#line 3049 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 134:
+#line 590 "ldgram.y" /* yacc.c:1661 */
+ {
+ struct name_list *tmp;
+ tmp = (struct name_list *) xmalloc (sizeof *tmp);
+ tmp->name = (yyvsp[0].cname);
+ tmp->next = NULL;
+ (yyval.name_list) = tmp;
+ }
+#line 3061 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 135:
+#line 601 "ldgram.y" /* yacc.c:1661 */
+ {
+ struct wildcard_list *tmp;
+ tmp = (struct wildcard_list *) xmalloc (sizeof *tmp);
+ tmp->next = (yyvsp[-2].wildcard_list);
+ tmp->spec = (yyvsp[0].wildcard);
+ (yyval.wildcard_list) = tmp;
+ }
+#line 3073 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 136:
+#line 610 "ldgram.y" /* yacc.c:1661 */
+ {
+ struct wildcard_list *tmp;
+ tmp = (struct wildcard_list *) xmalloc (sizeof *tmp);
+ tmp->next = NULL;
+ tmp->spec = (yyvsp[0].wildcard);
+ (yyval.wildcard_list) = tmp;
+ }
+#line 3085 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 137:
+#line 621 "ldgram.y" /* yacc.c:1661 */
+ {
+ struct wildcard_spec tmp;
+ tmp.name = (yyvsp[0].name);
+ tmp.exclude_name_list = NULL;
+ tmp.sorted = none;
+ tmp.section_flag_list = NULL;
+ lang_add_wild (&tmp, NULL, ldgram_had_keep);
+ }
+#line 3098 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 138:
+#line 630 "ldgram.y" /* yacc.c:1661 */
+ {
+ struct wildcard_spec tmp;
+ tmp.name = (yyvsp[0].name);
+ tmp.exclude_name_list = NULL;
+ tmp.sorted = none;
+ tmp.section_flag_list = (yyvsp[-1].flag_info);
+ lang_add_wild (&tmp, NULL, ldgram_had_keep);
+ }
+#line 3111 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 139:
+#line 639 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_add_wild (NULL, (yyvsp[-1].wildcard_list), ldgram_had_keep);
+ }
+#line 3119 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 140:
+#line 643 "ldgram.y" /* yacc.c:1661 */
+ {
+ struct wildcard_spec tmp;
+ tmp.name = NULL;
+ tmp.exclude_name_list = NULL;
+ tmp.sorted = none;
+ tmp.section_flag_list = (yyvsp[-3].flag_info);
+ lang_add_wild (&tmp, (yyvsp[-1].wildcard_list), ldgram_had_keep);
+ }
+#line 3132 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 141:
+#line 652 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_add_wild (&(yyvsp[-3].wildcard), (yyvsp[-1].wildcard_list), ldgram_had_keep);
+ }
+#line 3140 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 142:
+#line 656 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyvsp[-3].wildcard).section_flag_list = (yyvsp[-4].flag_info);
+ lang_add_wild (&(yyvsp[-3].wildcard), (yyvsp[-1].wildcard_list), ldgram_had_keep);
+ }
+#line 3149 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 144:
+#line 665 "ldgram.y" /* yacc.c:1661 */
+ { ldgram_had_keep = TRUE; }
+#line 3155 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 145:
+#line 667 "ldgram.y" /* yacc.c:1661 */
+ { ldgram_had_keep = FALSE; }
+#line 3161 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 147:
+#line 673 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_add_attribute(lang_object_symbols_statement_enum);
+ }
+#line 3169 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 149:
+#line 678 "ldgram.y" /* yacc.c:1661 */
+ {
+
+ lang_add_attribute(lang_constructors_statement_enum);
+ }
+#line 3178 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 150:
+#line 683 "ldgram.y" /* yacc.c:1661 */
+ {
+ constructors_sorted = TRUE;
+ lang_add_attribute (lang_constructors_statement_enum);
+ }
+#line 3187 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 152:
+#line 689 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_add_data ((int) (yyvsp[-3].integer), (yyvsp[-1].etree));
+ }
+#line 3195 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 153:
+#line 694 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_add_fill ((yyvsp[-1].fill));
+ }
+#line 3203 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 154:
+#line 697 "ldgram.y" /* yacc.c:1661 */
+ {ldlex_expression ();}
+#line 3209 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 155:
+#line 698 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_popstate ();
+ lang_add_assignment (exp_assert ((yyvsp[-4].etree), (yyvsp[-2].name))); }
+#line 3216 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 156:
+#line 701 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_script (); ldfile_open_command_file((yyvsp[0].name)); }
+#line 3222 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 157:
+#line 703 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_popstate (); }
+#line 3228 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 162:
+#line 718 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.integer) = (yyvsp[0].token); }
+#line 3234 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 163:
+#line 720 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.integer) = (yyvsp[0].token); }
+#line 3240 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 164:
+#line 722 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.integer) = (yyvsp[0].token); }
+#line 3246 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 165:
+#line 724 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.integer) = (yyvsp[0].token); }
+#line 3252 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 166:
+#line 726 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.integer) = (yyvsp[0].token); }
+#line 3258 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 167:
+#line 731 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.fill) = exp_get_fill ((yyvsp[0].etree), 0, "fill value");
+ }
+#line 3266 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 168:
+#line 738 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.fill) = (yyvsp[0].fill); }
+#line 3272 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 169:
+#line 739 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.fill) = (fill_type *) 0; }
+#line 3278 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 170:
+#line 744 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.token) = '+'; }
+#line 3284 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 171:
+#line 746 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.token) = '-'; }
+#line 3290 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 172:
+#line 748 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.token) = '*'; }
+#line 3296 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 173:
+#line 750 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.token) = '/'; }
+#line 3302 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 174:
+#line 752 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.token) = LSHIFT; }
+#line 3308 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 175:
+#line 754 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.token) = RSHIFT; }
+#line 3314 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 176:
+#line 756 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.token) = '&'; }
+#line 3320 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 177:
+#line 758 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.token) = '|'; }
+#line 3326 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 180:
+#line 768 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_add_assignment (exp_assign ((yyvsp[-2].name), (yyvsp[0].etree), FALSE));
+ }
+#line 3334 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 181:
+#line 772 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_add_assignment (exp_assign ((yyvsp[-2].name),
+ exp_binop ((yyvsp[-1].token),
+ exp_nameop (NAME,
+ (yyvsp[-2].name)),
+ (yyvsp[0].etree)), FALSE));
+ }
+#line 3346 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 182:
+#line 780 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_add_assignment (exp_assign ((yyvsp[-3].name), (yyvsp[-1].etree), TRUE));
+ }
+#line 3354 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 183:
+#line 784 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_add_assignment (exp_provide ((yyvsp[-3].name), (yyvsp[-1].etree), FALSE));
+ }
+#line 3362 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 184:
+#line 788 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_add_assignment (exp_provide ((yyvsp[-3].name), (yyvsp[-1].etree), TRUE));
+ }
+#line 3370 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 192:
+#line 811 "ldgram.y" /* yacc.c:1661 */
+ { region = lang_memory_region_lookup ((yyvsp[0].name), TRUE); }
+#line 3376 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 193:
+#line 814 "ldgram.y" /* yacc.c:1661 */
+ {}
+#line 3382 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 194:
+#line 816 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_script (); ldfile_open_command_file((yyvsp[0].name)); }
+#line 3388 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 195:
+#line 818 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_popstate (); }
+#line 3394 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 196:
+#line 823 "ldgram.y" /* yacc.c:1661 */
+ {
+ region->origin_exp = (yyvsp[0].etree);
+ region->current = region->origin;
+ }
+#line 3403 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 197:
+#line 831 "ldgram.y" /* yacc.c:1661 */
+ {
+ region->length_exp = (yyvsp[0].etree);
+ }
+#line 3411 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 198:
+#line 838 "ldgram.y" /* yacc.c:1661 */
+ { /* dummy action to avoid bison 1.25 error message */ }
+#line 3417 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 202:
+#line 849 "ldgram.y" /* yacc.c:1661 */
+ { lang_set_flags (region, (yyvsp[0].name), 0); }
+#line 3423 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 203:
+#line 851 "ldgram.y" /* yacc.c:1661 */
+ { lang_set_flags (region, (yyvsp[0].name), 1); }
+#line 3429 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 204:
+#line 856 "ldgram.y" /* yacc.c:1661 */
+ { lang_startup((yyvsp[-1].name)); }
+#line 3435 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 206:
+#line 862 "ldgram.y" /* yacc.c:1661 */
+ { ldemul_hll((char *)NULL); }
+#line 3441 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 207:
+#line 867 "ldgram.y" /* yacc.c:1661 */
+ { ldemul_hll((yyvsp[0].name)); }
+#line 3447 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 208:
+#line 869 "ldgram.y" /* yacc.c:1661 */
+ { ldemul_hll((yyvsp[0].name)); }
+#line 3453 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 210:
+#line 877 "ldgram.y" /* yacc.c:1661 */
+ { ldemul_syslib((yyvsp[0].name)); }
+#line 3459 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 212:
+#line 883 "ldgram.y" /* yacc.c:1661 */
+ { lang_float(TRUE); }
+#line 3465 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 213:
+#line 885 "ldgram.y" /* yacc.c:1661 */
+ { lang_float(FALSE); }
+#line 3471 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 214:
+#line 890 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.nocrossref) = NULL;
+ }
+#line 3479 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 215:
+#line 894 "ldgram.y" /* yacc.c:1661 */
+ {
+ struct lang_nocrossref *n;
+
+ n = (struct lang_nocrossref *) xmalloc (sizeof *n);
+ n->name = (yyvsp[-1].name);
+ n->next = (yyvsp[0].nocrossref);
+ (yyval.nocrossref) = n;
+ }
+#line 3492 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 216:
+#line 903 "ldgram.y" /* yacc.c:1661 */
+ {
+ struct lang_nocrossref *n;
+
+ n = (struct lang_nocrossref *) xmalloc (sizeof *n);
+ n->name = (yyvsp[-2].name);
+ n->next = (yyvsp[0].nocrossref);
+ (yyval.nocrossref) = n;
+ }
+#line 3505 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 217:
+#line 913 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_expression (); }
+#line 3511 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 218:
+#line 915 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_popstate (); (yyval.etree)=(yyvsp[0].etree);}
+#line 3517 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 219:
+#line 920 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_unop ('-', (yyvsp[0].etree)); }
+#line 3523 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 220:
+#line 922 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = (yyvsp[-1].etree); }
+#line 3529 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 221:
+#line 924 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_unop ((int) (yyvsp[-3].integer),(yyvsp[-1].etree)); }
+#line 3535 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 222:
+#line 926 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_unop ('!', (yyvsp[0].etree)); }
+#line 3541 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 223:
+#line 928 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = (yyvsp[0].etree); }
+#line 3547 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 224:
+#line 930 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_unop ('~', (yyvsp[0].etree));}
+#line 3553 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 225:
+#line 933 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop ('*', (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3559 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 226:
+#line 935 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop ('/', (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3565 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 227:
+#line 937 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop ('%', (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3571 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 228:
+#line 939 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop ('+', (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3577 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 229:
+#line 941 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop ('-' , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3583 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 230:
+#line 943 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop (LSHIFT , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3589 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 231:
+#line 945 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop (RSHIFT , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3595 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 232:
+#line 947 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop (EQ , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3601 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 233:
+#line 949 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop (NE , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3607 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 234:
+#line 951 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop (LE , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3613 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 235:
+#line 953 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop (GE , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3619 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 236:
+#line 955 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop ('<' , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3625 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 237:
+#line 957 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop ('>' , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3631 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 238:
+#line 959 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop ('&' , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3637 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 239:
+#line 961 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop ('^' , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3643 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 240:
+#line 963 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop ('|' , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3649 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 241:
+#line 965 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_trinop ('?' , (yyvsp[-4].etree), (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3655 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 242:
+#line 967 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop (ANDAND , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3661 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 243:
+#line 969 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop (OROR , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+#line 3667 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 244:
+#line 971 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_nameop (DEFINED, (yyvsp[-1].name)); }
+#line 3673 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 245:
+#line 973 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_bigintop ((yyvsp[0].bigint).integer, (yyvsp[0].bigint).str); }
+#line 3679 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 246:
+#line 975 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_nameop (SIZEOF_HEADERS,0); }
+#line 3685 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 247:
+#line 978 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_nameop (ALIGNOF,(yyvsp[-1].name)); }
+#line 3691 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 248:
+#line 980 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_nameop (SIZEOF,(yyvsp[-1].name)); }
+#line 3697 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 249:
+#line 982 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_nameop (ADDR,(yyvsp[-1].name)); }
+#line 3703 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 250:
+#line 984 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_nameop (LOADADDR,(yyvsp[-1].name)); }
+#line 3709 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 251:
+#line 986 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_nameop (CONSTANT,(yyvsp[-1].name)); }
+#line 3715 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 252:
+#line 988 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_unop (ABSOLUTE, (yyvsp[-1].etree)); }
+#line 3721 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 253:
+#line 990 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_unop (ALIGN_K,(yyvsp[-1].etree)); }
+#line 3727 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 254:
+#line 992 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop (ALIGN_K,(yyvsp[-3].etree),(yyvsp[-1].etree)); }
+#line 3733 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 255:
+#line 994 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop (DATA_SEGMENT_ALIGN, (yyvsp[-3].etree), (yyvsp[-1].etree)); }
+#line 3739 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 256:
+#line 996 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop (DATA_SEGMENT_RELRO_END, (yyvsp[-1].etree), (yyvsp[-3].etree)); }
+#line 3745 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 257:
+#line 998 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_unop (DATA_SEGMENT_END, (yyvsp[-1].etree)); }
+#line 3751 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 258:
+#line 1000 "ldgram.y" /* yacc.c:1661 */
+ { /* 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[-1].etree),
+ exp_nameop (NAME, (yyvsp[-3].name))); }
+#line 3764 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 259:
+#line 1009 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_unop (ALIGN_K,(yyvsp[-1].etree)); }
+#line 3770 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 260:
+#line 1011 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_nameop (NAME,(yyvsp[0].name)); }
+#line 3776 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 261:
+#line 1013 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop (MAX_K, (yyvsp[-3].etree), (yyvsp[-1].etree) ); }
+#line 3782 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 262:
+#line 1015 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_binop (MIN_K, (yyvsp[-3].etree), (yyvsp[-1].etree) ); }
+#line 3788 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 263:
+#line 1017 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_assert ((yyvsp[-3].etree), (yyvsp[-1].name)); }
+#line 3794 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 264:
+#line 1019 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_nameop (ORIGIN, (yyvsp[-1].name)); }
+#line 3800 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 265:
+#line 1021 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_nameop (LENGTH, (yyvsp[-1].name)); }
+#line 3806 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 266:
+#line 1023 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = exp_unop (LOG2CEIL, (yyvsp[-1].etree)); }
+#line 3812 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 267:
+#line 1028 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.name) = (yyvsp[0].name); }
+#line 3818 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 268:
+#line 1029 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.name) = 0; }
+#line 3824 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 269:
+#line 1033 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = (yyvsp[-1].etree); }
+#line 3830 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 270:
+#line 1034 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = 0; }
+#line 3836 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 271:
+#line 1038 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = (yyvsp[-1].etree); }
+#line 3842 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 272:
+#line 1039 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = 0; }
+#line 3848 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 273:
+#line 1043 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.token) = ALIGN_WITH_INPUT; }
+#line 3854 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 274:
+#line 1044 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.token) = 0; }
+#line 3860 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 275:
+#line 1048 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = (yyvsp[-1].etree); }
+#line 3866 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 276:
+#line 1049 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = 0; }
+#line 3872 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 277:
+#line 1053 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.token) = ONLY_IF_RO; }
+#line 3878 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 278:
+#line 1054 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.token) = ONLY_IF_RW; }
+#line 3884 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 279:
+#line 1055 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.token) = SPECIAL; }
+#line 3890 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 280:
+#line 1056 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.token) = 0; }
+#line 3896 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 281:
+#line 1059 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_expression(); }
+#line 3902 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 282:
+#line 1064 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_popstate (); ldlex_script (); }
+#line 3908 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 283:
+#line 1067 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_enter_output_section_statement((yyvsp[-9].name), (yyvsp[-7].etree),
+ sectype,
+ (yyvsp[-5].etree), (yyvsp[-3].etree), (yyvsp[-6].etree), (yyvsp[-1].token), (yyvsp[-4].token));
+ }
+#line 3918 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 284:
+#line 1073 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_popstate (); ldlex_expression (); }
+#line 3924 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 285:
+#line 1075 "ldgram.y" /* yacc.c:1661 */
+ {
+ ldlex_popstate ();
+ lang_leave_output_section_statement ((yyvsp[0].fill), (yyvsp[-3].name), (yyvsp[-1].section_phdr), (yyvsp[-2].name));
+ }
+#line 3933 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 286:
+#line 1080 "ldgram.y" /* yacc.c:1661 */
+ {}
+#line 3939 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 287:
+#line 1082 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_expression (); }
+#line 3945 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 288:
+#line 1084 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_popstate (); ldlex_script (); }
+#line 3951 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 289:
+#line 1086 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_enter_overlay ((yyvsp[-5].etree), (yyvsp[-2].etree));
+ }
+#line 3959 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 290:
+#line 1091 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_popstate (); ldlex_expression (); }
+#line 3965 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 291:
+#line 1093 "ldgram.y" /* yacc.c:1661 */
+ {
+ ldlex_popstate ();
+ lang_leave_overlay ((yyvsp[-11].etree), (int) (yyvsp[-12].integer),
+ (yyvsp[0].fill), (yyvsp[-3].name), (yyvsp[-1].section_phdr), (yyvsp[-2].name));
+ }
+#line 3975 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 293:
+#line 1103 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_expression (); }
+#line 3981 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 294:
+#line 1105 "ldgram.y" /* yacc.c:1661 */
+ {
+ ldlex_popstate ();
+ lang_add_assignment (exp_assign (".", (yyvsp[0].etree), FALSE));
+ }
+#line 3990 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 296:
+#line 1111 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_script (); ldfile_open_command_file((yyvsp[0].name)); }
+#line 3996 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 297:
+#line 1113 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_popstate (); }
+#line 4002 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 298:
+#line 1117 "ldgram.y" /* yacc.c:1661 */
+ { sectype = noload_section; }
+#line 4008 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 299:
+#line 1118 "ldgram.y" /* yacc.c:1661 */
+ { sectype = noalloc_section; }
+#line 4014 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 300:
+#line 1119 "ldgram.y" /* yacc.c:1661 */
+ { sectype = noalloc_section; }
+#line 4020 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 301:
+#line 1120 "ldgram.y" /* yacc.c:1661 */
+ { sectype = noalloc_section; }
+#line 4026 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 302:
+#line 1121 "ldgram.y" /* yacc.c:1661 */
+ { sectype = noalloc_section; }
+#line 4032 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 304:
+#line 1126 "ldgram.y" /* yacc.c:1661 */
+ { sectype = normal_section; }
+#line 4038 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 305:
+#line 1127 "ldgram.y" /* yacc.c:1661 */
+ { sectype = normal_section; }
+#line 4044 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 306:
+#line 1131 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = (yyvsp[-2].etree); }
+#line 4050 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 307:
+#line 1132 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = (etree_type *)NULL; }
+#line 4056 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 308:
+#line 1137 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = (yyvsp[-3].etree); }
+#line 4062 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 309:
+#line 1139 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = (yyvsp[-7].etree); }
+#line 4068 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 310:
+#line 1143 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = (yyvsp[-1].etree); }
+#line 4074 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 311:
+#line 1144 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.etree) = (etree_type *) NULL; }
+#line 4080 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 312:
+#line 1149 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.integer) = 0; }
+#line 4086 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 313:
+#line 1151 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.integer) = 1; }
+#line 4092 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 314:
+#line 1156 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.name) = (yyvsp[0].name); }
+#line 4098 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 315:
+#line 1157 "ldgram.y" /* yacc.c:1661 */
+ { (yyval.name) = DEFAULT_MEMORY_REGION; }
+#line 4104 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 316:
+#line 1162 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.section_phdr) = NULL;
+ }
+#line 4112 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 317:
+#line 1166 "ldgram.y" /* yacc.c:1661 */
+ {
+ struct lang_output_section_phdr_list *n;
+
+ n = ((struct lang_output_section_phdr_list *)
+ xmalloc (sizeof *n));
+ n->name = (yyvsp[0].name);
+ n->used = FALSE;
+ n->next = (yyvsp[-2].section_phdr);
+ (yyval.section_phdr) = n;
+ }
+#line 4127 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 319:
+#line 1182 "ldgram.y" /* yacc.c:1661 */
+ {
+ ldlex_script ();
+ lang_enter_overlay_section ((yyvsp[0].name));
+ }
+#line 4136 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 320:
+#line 1187 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_popstate (); ldlex_expression (); }
+#line 4142 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 321:
+#line 1189 "ldgram.y" /* yacc.c:1661 */
+ {
+ ldlex_popstate ();
+ lang_leave_overlay_section ((yyvsp[0].fill), (yyvsp[-1].section_phdr));
+ }
+#line 4151 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 326:
+#line 1206 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_expression (); }
+#line 4157 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 327:
+#line 1207 "ldgram.y" /* yacc.c:1661 */
+ { ldlex_popstate (); }
+#line 4163 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 328:
+#line 1209 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_new_phdr ((yyvsp[-5].name), (yyvsp[-3].etree), (yyvsp[-2].phdr).filehdr, (yyvsp[-2].phdr).phdrs, (yyvsp[-2].phdr).at,
+ (yyvsp[-2].phdr).flags);
+ }
+#line 4172 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 329:
+#line 1217 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.etree) = (yyvsp[0].etree);
+
+ if ((yyvsp[0].etree)->type.node_class == etree_name
+ && (yyvsp[0].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[0].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"),
+ NULL, s);
+ (yyval.etree) = exp_intop (0);
+ }
+ }
+ }
+ }
+#line 4217 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 330:
+#line 1261 "ldgram.y" /* yacc.c:1661 */
+ {
+ memset (&(yyval.phdr), 0, sizeof (struct phdr_info));
+ }
+#line 4225 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 331:
+#line 1265 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.phdr) = (yyvsp[0].phdr);
+ if (strcmp ((yyvsp[-2].name), "FILEHDR") == 0 && (yyvsp[-1].etree) == NULL)
+ (yyval.phdr).filehdr = TRUE;
+ else if (strcmp ((yyvsp[-2].name), "PHDRS") == 0 && (yyvsp[-1].etree) == NULL)
+ (yyval.phdr).phdrs = TRUE;
+ else if (strcmp ((yyvsp[-2].name), "FLAGS") == 0 && (yyvsp[-1].etree) != NULL)
+ (yyval.phdr).flags = (yyvsp[-1].etree);
+ else
+ einfo (_("%X%P:%S: PHDRS syntax error at `%s'\n"),
+ NULL, (yyvsp[-2].name));
+ }
+#line 4242 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 332:
+#line 1278 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.phdr) = (yyvsp[0].phdr);
+ (yyval.phdr).at = (yyvsp[-2].etree);
+ }
+#line 4251 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 333:
+#line 1286 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.etree) = NULL;
+ }
+#line 4259 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 334:
+#line 1290 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.etree) = (yyvsp[-1].etree);
+ }
+#line 4267 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 335:
+#line 1296 "ldgram.y" /* yacc.c:1661 */
+ {
+ ldlex_version_file ();
+ PUSH_ERROR (_("dynamic list"));
+ }
+#line 4276 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 336:
+#line 1301 "ldgram.y" /* yacc.c:1661 */
+ {
+ ldlex_popstate ();
+ POP_ERROR ();
+ }
+#line 4285 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 340:
+#line 1318 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_append_dynamic_list ((yyvsp[-1].versyms));
+ }
+#line 4293 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 341:
+#line 1326 "ldgram.y" /* yacc.c:1661 */
+ {
+ ldlex_version_file ();
+ PUSH_ERROR (_("VERSION script"));
+ }
+#line 4302 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 342:
+#line 1331 "ldgram.y" /* yacc.c:1661 */
+ {
+ ldlex_popstate ();
+ POP_ERROR ();
+ }
+#line 4311 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 343:
+#line 1340 "ldgram.y" /* yacc.c:1661 */
+ {
+ ldlex_version_script ();
+ }
+#line 4319 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 344:
+#line 1344 "ldgram.y" /* yacc.c:1661 */
+ {
+ ldlex_popstate ();
+ }
+#line 4327 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 347:
+#line 1356 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_register_vers_node (NULL, (yyvsp[-2].versnode), NULL);
+ }
+#line 4335 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 348:
+#line 1360 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_register_vers_node ((yyvsp[-4].name), (yyvsp[-2].versnode), NULL);
+ }
+#line 4343 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 349:
+#line 1364 "ldgram.y" /* yacc.c:1661 */
+ {
+ lang_register_vers_node ((yyvsp[-5].name), (yyvsp[-3].versnode), (yyvsp[-1].deflist));
+ }
+#line 4351 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 350:
+#line 1371 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.deflist) = lang_add_vers_depend (NULL, (yyvsp[0].name));
+ }
+#line 4359 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 351:
+#line 1375 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.deflist) = lang_add_vers_depend ((yyvsp[-1].deflist), (yyvsp[0].name));
+ }
+#line 4367 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 352:
+#line 1382 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.versnode) = lang_new_vers_node (NULL, NULL);
+ }
+#line 4375 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 353:
+#line 1386 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.versnode) = lang_new_vers_node ((yyvsp[-1].versyms), NULL);
+ }
+#line 4383 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 354:
+#line 1390 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.versnode) = lang_new_vers_node ((yyvsp[-1].versyms), NULL);
+ }
+#line 4391 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 355:
+#line 1394 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.versnode) = lang_new_vers_node (NULL, (yyvsp[-1].versyms));
+ }
+#line 4399 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 356:
+#line 1398 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.versnode) = lang_new_vers_node ((yyvsp[-5].versyms), (yyvsp[-1].versyms));
+ }
+#line 4407 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 357:
+#line 1405 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, (yyvsp[0].name), ldgram_vers_current_lang, FALSE);
+ }
+#line 4415 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 358:
+#line 1409 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, (yyvsp[0].name), ldgram_vers_current_lang, TRUE);
+ }
+#line 4423 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 359:
+#line 1413 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[-2].versyms), (yyvsp[0].name), ldgram_vers_current_lang, FALSE);
+ }
+#line 4431 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 360:
+#line 1417 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[-2].versyms), (yyvsp[0].name), ldgram_vers_current_lang, TRUE);
+ }
+#line 4439 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 361:
+#line 1421 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.name) = ldgram_vers_current_lang;
+ ldgram_vers_current_lang = (yyvsp[-1].name);
+ }
+#line 4448 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 362:
+#line 1426 "ldgram.y" /* yacc.c:1661 */
+ {
+ struct bfd_elf_version_expr *pat;
+ for (pat = (yyvsp[-2].versyms); pat->next != NULL; pat = pat->next);
+ pat->next = (yyvsp[-8].versyms);
+ (yyval.versyms) = (yyvsp[-2].versyms);
+ ldgram_vers_current_lang = (yyvsp[-3].name);
+ }
+#line 4460 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 363:
+#line 1434 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.name) = ldgram_vers_current_lang;
+ ldgram_vers_current_lang = (yyvsp[-1].name);
+ }
+#line 4469 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 364:
+#line 1439 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.versyms) = (yyvsp[-2].versyms);
+ ldgram_vers_current_lang = (yyvsp[-3].name);
+ }
+#line 4478 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 365:
+#line 1444 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, "global", ldgram_vers_current_lang, FALSE);
+ }
+#line 4486 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 366:
+#line 1448 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[-2].versyms), "global", ldgram_vers_current_lang, FALSE);
+ }
+#line 4494 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 367:
+#line 1452 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, "local", ldgram_vers_current_lang, FALSE);
+ }
+#line 4502 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 368:
+#line 1456 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[-2].versyms), "local", ldgram_vers_current_lang, FALSE);
+ }
+#line 4510 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 369:
+#line 1460 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, "extern", ldgram_vers_current_lang, FALSE);
+ }
+#line 4518 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+ case 370:
+#line 1464 "ldgram.y" /* yacc.c:1661 */
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[-2].versyms), "extern", ldgram_vers_current_lang, FALSE);
+ }
+#line 4526 "ldgram.c" /* yacc.c:1661 */
+ break;
+
+
+#line 4530 "ldgram.c" /* yacc.c:1661 */
+ default: break;
+ }
+ /* User semantic actions sometimes alter yychar, and that requires
+ that yytoken be updated with the new translation. We take the
+ approach of translating immediately before every use of yytoken.
+ One alternative is translating here after every semantic action,
+ but that translation would be missed if the semantic action invokes
+ YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+ if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
+ incorrect destructor might then be invoked immediately. In the
+ case of YYERROR or YYBACKUP, subsequent parser actions might lead
+ to an incorrect destructor call or verbose syntax error message
+ before the lookahead is translated. */
+ 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:
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ yyerror (YY_("syntax error"));
+#else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+ yyssp, yytoken)
+ {
+ char const *yymsgp = YY_("syntax error");
+ int yysyntax_error_status;
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ if (yysyntax_error_status == 0)
+ yymsgp = yymsg;
+ else if (yysyntax_error_status == 1)
+ {
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+ if (!yymsg)
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ yysyntax_error_status = 2;
+ }
+ else
+ {
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ yymsgp = yymsg;
+ }
+ }
+ yyerror (yymsgp);
+ if (yysyntax_error_status == 2)
+ goto yyexhaustedlab;
+ }
+# undef YYSYNTAX_ERROR
+#endif
+ }
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead 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 lookahead 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 whose 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 (!yypact_value_is_default (yyn))
+ {
+ 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);
+ }
+
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ *++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+
+
+ /* 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;
+
+#if !defined yyoverflow || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+yyreturn:
+ if (yychar != YYEMPTY)
+ {
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = YYTRANSLATE (yychar);
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ }
+ /* Do not reclaim the symbols of the rule whose 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
+ return yyresult;
+}
+#line 1474 "ldgram.y" /* yacc.c:1906 */
+
+void
+yyerror(arg)
+ const char *arg;
+{
+ if (ldfile_assumed_script)
+ einfo (_("%P:%s: file format not recognized; treating as linker script\n"),
+ ldlex_filename ());
+ if (error_index > 0 && error_index < ERROR_NAME_MAX)
+ einfo ("%P%F:%S: %s in %s\n", NULL, arg, error_names[error_index - 1]);
+ else
+ einfo ("%P%F:%S: %s\n", NULL, arg);
+}
diff --git a/ld/ldgram.h b/ld/ldgram.h
new file mode 100644
index 0000000..73bf5e7
--- /dev/null
+++ b/ld/ldgram.h
@@ -0,0 +1,357 @@
+/* A Bison parser, made by GNU Bison 3.0. */
+
+/* Bison interface for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2013 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 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, see <http://www.gnu.org/licenses/>. */
+
+/* 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. */
+
+#ifndef YY_YY_LDGRAM_H_INCLUDED
+# define YY_YY_LDGRAM_H_INCLUDED
+/* Debug traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
+
+/* Token type. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ enum yytokentype
+ {
+ INT = 258,
+ NAME = 259,
+ LNAME = 260,
+ PLUSEQ = 261,
+ MINUSEQ = 262,
+ MULTEQ = 263,
+ DIVEQ = 264,
+ LSHIFTEQ = 265,
+ RSHIFTEQ = 266,
+ ANDEQ = 267,
+ OREQ = 268,
+ OROR = 269,
+ ANDAND = 270,
+ EQ = 271,
+ NE = 272,
+ LE = 273,
+ GE = 274,
+ LSHIFT = 275,
+ RSHIFT = 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,
+ SORT_NONE = 297,
+ SORT_BY_INIT_PRIORITY = 298,
+ SIZEOF_HEADERS = 299,
+ OUTPUT_FORMAT = 300,
+ FORCE_COMMON_ALLOCATION = 301,
+ OUTPUT_ARCH = 302,
+ INHIBIT_COMMON_ALLOCATION = 303,
+ SEGMENT_START = 304,
+ INCLUDE = 305,
+ MEMORY = 306,
+ REGION_ALIAS = 307,
+ LD_FEATURE = 308,
+ NOLOAD = 309,
+ DSECT = 310,
+ COPY = 311,
+ INFO = 312,
+ OVERLAY = 313,
+ DEFINED = 314,
+ TARGET_K = 315,
+ SEARCH_DIR = 316,
+ MAP = 317,
+ ENTRY = 318,
+ NEXT = 319,
+ SIZEOF = 320,
+ ALIGNOF = 321,
+ ADDR = 322,
+ LOADADDR = 323,
+ MAX_K = 324,
+ MIN_K = 325,
+ STARTUP = 326,
+ HLL = 327,
+ SYSLIB = 328,
+ FLOAT = 329,
+ NOFLOAT = 330,
+ NOCROSSREFS = 331,
+ NOCROSSREFS_TO = 332,
+ ORIGIN = 333,
+ FILL = 334,
+ LENGTH = 335,
+ CREATE_OBJECT_SYMBOLS = 336,
+ INPUT = 337,
+ GROUP = 338,
+ OUTPUT = 339,
+ CONSTRUCTORS = 340,
+ ALIGNMOD = 341,
+ AT = 342,
+ SUBALIGN = 343,
+ HIDDEN = 344,
+ PROVIDE = 345,
+ PROVIDE_HIDDEN = 346,
+ AS_NEEDED = 347,
+ CHIP = 348,
+ LIST = 349,
+ SECT = 350,
+ ABSOLUTE = 351,
+ LOAD = 352,
+ NEWLINE = 353,
+ ENDWORD = 354,
+ ORDER = 355,
+ NAMEWORD = 356,
+ ASSERT_K = 357,
+ LOG2CEIL = 358,
+ FORMAT = 359,
+ PUBLIC = 360,
+ DEFSYMEND = 361,
+ BASE = 362,
+ ALIAS = 363,
+ TRUNCATE = 364,
+ REL = 365,
+ INPUT_SCRIPT = 366,
+ INPUT_MRI_SCRIPT = 367,
+ INPUT_DEFSYM = 368,
+ CASE = 369,
+ EXTERN = 370,
+ START = 371,
+ VERS_TAG = 372,
+ VERS_IDENTIFIER = 373,
+ GLOBAL = 374,
+ LOCAL = 375,
+ VERSIONK = 376,
+ INPUT_VERSION_SCRIPT = 377,
+ KEEP = 378,
+ ONLY_IF_RO = 379,
+ ONLY_IF_RW = 380,
+ SPECIAL = 381,
+ INPUT_SECTION_FLAGS = 382,
+ ALIGN_WITH_INPUT = 383,
+ EXCLUDE_FILE = 384,
+ CONSTANT = 385,
+ INPUT_DYNAMIC_LIST = 386
+ };
+#endif
+/* Tokens. */
+#define INT 258
+#define NAME 259
+#define LNAME 260
+#define PLUSEQ 261
+#define MINUSEQ 262
+#define MULTEQ 263
+#define DIVEQ 264
+#define LSHIFTEQ 265
+#define RSHIFTEQ 266
+#define ANDEQ 267
+#define OREQ 268
+#define OROR 269
+#define ANDAND 270
+#define EQ 271
+#define NE 272
+#define LE 273
+#define GE 274
+#define LSHIFT 275
+#define RSHIFT 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 SORT_NONE 297
+#define SORT_BY_INIT_PRIORITY 298
+#define SIZEOF_HEADERS 299
+#define OUTPUT_FORMAT 300
+#define FORCE_COMMON_ALLOCATION 301
+#define OUTPUT_ARCH 302
+#define INHIBIT_COMMON_ALLOCATION 303
+#define SEGMENT_START 304
+#define INCLUDE 305
+#define MEMORY 306
+#define REGION_ALIAS 307
+#define LD_FEATURE 308
+#define NOLOAD 309
+#define DSECT 310
+#define COPY 311
+#define INFO 312
+#define OVERLAY 313
+#define DEFINED 314
+#define TARGET_K 315
+#define SEARCH_DIR 316
+#define MAP 317
+#define ENTRY 318
+#define NEXT 319
+#define SIZEOF 320
+#define ALIGNOF 321
+#define ADDR 322
+#define LOADADDR 323
+#define MAX_K 324
+#define MIN_K 325
+#define STARTUP 326
+#define HLL 327
+#define SYSLIB 328
+#define FLOAT 329
+#define NOFLOAT 330
+#define NOCROSSREFS 331
+#define NOCROSSREFS_TO 332
+#define ORIGIN 333
+#define FILL 334
+#define LENGTH 335
+#define CREATE_OBJECT_SYMBOLS 336
+#define INPUT 337
+#define GROUP 338
+#define OUTPUT 339
+#define CONSTRUCTORS 340
+#define ALIGNMOD 341
+#define AT 342
+#define SUBALIGN 343
+#define HIDDEN 344
+#define PROVIDE 345
+#define PROVIDE_HIDDEN 346
+#define AS_NEEDED 347
+#define CHIP 348
+#define LIST 349
+#define SECT 350
+#define ABSOLUTE 351
+#define LOAD 352
+#define NEWLINE 353
+#define ENDWORD 354
+#define ORDER 355
+#define NAMEWORD 356
+#define ASSERT_K 357
+#define LOG2CEIL 358
+#define FORMAT 359
+#define PUBLIC 360
+#define DEFSYMEND 361
+#define BASE 362
+#define ALIAS 363
+#define TRUNCATE 364
+#define REL 365
+#define INPUT_SCRIPT 366
+#define INPUT_MRI_SCRIPT 367
+#define INPUT_DEFSYM 368
+#define CASE 369
+#define EXTERN 370
+#define START 371
+#define VERS_TAG 372
+#define VERS_IDENTIFIER 373
+#define GLOBAL 374
+#define LOCAL 375
+#define VERSIONK 376
+#define INPUT_VERSION_SCRIPT 377
+#define KEEP 378
+#define ONLY_IF_RO 379
+#define ONLY_IF_RW 380
+#define SPECIAL 381
+#define INPUT_SECTION_FLAGS 382
+#define ALIGN_WITH_INPUT 383
+#define EXCLUDE_FILE 384
+#define CONSTANT 385
+#define INPUT_DYNAMIC_LIST 386
+
+/* Value type. */
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE YYSTYPE;
+union YYSTYPE
+{
+#line 60 "ldgram.y" /* yacc.c:1915 */
+
+ 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;
+ struct flag_info_list *flag_info_list;
+ struct flag_info *flag_info;
+ 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 347 "ldgram.h" /* yacc.c:1915 */
+};
+# define YYSTYPE_IS_TRIVIAL 1
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+extern YYSTYPE yylval;
+
+int yyparse (void);
+
+#endif /* !YY_YY_LDGRAM_H_INCLUDED */
diff --git a/ld/ldlex.c b/ld/ldlex.c
new file mode 100644
index 0000000..2a8ea47
--- /dev/null
+++ b/ld/ldlex.c
@@ -0,0 +1,4425 @@
+
+#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;
+typedef uint64_t flex_uint64_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 */
+
+#define yywrap(n) 1
+#define YY_SKIP_YYWRAP
+
+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 = (yy_size_t) (yy_cp - yy_bp); \
+ (yy_hold_char) = *yy_cp; \
+ *yy_cp = '\0'; \
+ (yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 199
+#define YY_END_OF_BUFFER 200
+/* 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[1775] =
+ { 0,
+ 0, 0, 179, 179, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 200, 199, 197, 182, 181, 32, 197, 179, 38, 29,
+ 44, 43, 34, 35, 28, 36, 179, 37, 8, 8,
+ 45, 46, 39, 40, 27, 33, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 10, 9, 179, 120,
+ 118, 179, 42, 30, 41, 31, 196, 194, 199, 174,
+ 44, 43, 28, 199, 174, 199, 174, 198, 182, 32,
+ 198, 177, 38, 29, 44, 43, 34, 35, 28, 36,
+
+ 177, 37, 8, 8, 45, 46, 39, 40, 27, 33,
+ 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
+ 177, 177, 177, 177, 177, 177, 10, 9, 177, 177,
+ 42, 30, 41, 31, 174, 36, 174, 37, 8, 8,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 120, 118, 174, 31, 4, 3, 2, 4, 5,
+ 135, 32, 134, 173, 34, 35, 28, 36, 173, 37,
+ 8, 8, 45, 46, 40, 33, 173, 173, 173, 173,
+ 173, 173, 173, 173, 173, 173, 173, 173, 10, 9,
+
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 173, 31, 196, 195, 197, 189, 188, 183, 190, 191,
+ 187, 187, 187, 187, 192, 193, 182, 179, 15, 0,
+ 180, 8, 26, 24, 22, 20, 21, 1, 23, 8,
+ 8, 179, 18, 17, 14, 16, 19, 179, 179, 179,
+ 179, 179, 125, 179, 179, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+
+ 179, 179, 25, 13, 196, 174, 0, 1, 175, 174,
+ 15, 177, 6, 22, 20, 21, 0, 23, 8, 0,
+ 7, 7, 8, 7, 14, 177, 7, 7, 7, 177,
+ 177, 125, 7, 177, 177, 7, 177, 177, 177, 7,
+ 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
+ 177, 177, 177, 177, 177, 177, 177, 177, 7, 177,
+ 8, 23, 8, 0, 174, 174, 174, 174, 174, 125,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 4, 4, 134, 134, 173, 6, 136, 22, 137, 173,
+ 7, 7, 7, 173, 173, 173, 7, 173, 7, 7,
+ 173, 173, 173, 173, 173, 173, 173, 173, 7, 173,
+ 173, 173, 7, 173, 7, 7, 173, 173, 173, 173,
+ 173, 173, 173, 173, 195, 188, 187, 0, 187, 187,
+ 187, 11, 12, 179, 179, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 179, 93, 179, 179,
+
+ 179, 179, 179, 179, 179, 179, 179, 179, 72, 179,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 121, 119, 179, 176,
+ 175, 174, 8, 178, 8, 177, 7, 177, 177, 177,
+ 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
+ 177, 177, 177, 177, 177, 177, 177, 62, 63, 177,
+ 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
+ 177, 177, 8, 174, 174, 174, 174, 174, 174, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+
+ 174, 174, 174, 174, 174, 174, 93, 174, 174, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 72, 62,
+ 174, 63, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 121, 119,
+ 174, 4, 8, 173, 173, 173, 173, 173, 138, 173,
+ 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
+ 173, 173, 173, 173, 155, 173, 173, 173, 173, 173,
+ 173, 173, 173, 173, 173, 187, 187, 187, 179, 59,
+ 179, 179, 179, 179, 179, 53, 179, 100, 179, 112,
+
+ 179, 179, 179, 179, 179, 179, 179, 89, 179, 179,
+ 179, 179, 179, 113, 179, 179, 179, 131, 179, 179,
+ 179, 98, 179, 68, 179, 179, 179, 179, 179, 179,
+ 179, 179, 179, 96, 179, 179, 179, 179, 179, 179,
+ 107, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 174, 177, 59, 177, 177, 177, 53, 177, 177, 112,
+ 177, 177, 177, 177, 177, 177, 177, 113, 177, 131,
+ 177, 177, 177, 68, 177, 177, 177, 177, 177, 177,
+ 177, 177, 177, 177, 177, 177, 174, 59, 174, 174,
+ 174, 174, 53, 174, 100, 174, 112, 174, 174, 174,
+
+ 174, 174, 174, 174, 89, 174, 174, 174, 174, 174,
+ 113, 174, 174, 174, 131, 174, 174, 174, 174, 98,
+ 174, 68, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 96, 174, 174, 174, 174, 174, 174, 107, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 173, 173,
+ 173, 142, 150, 141, 173, 173, 152, 145, 148, 173,
+ 173, 153, 173, 173, 173, 173, 173, 159, 167, 158,
+ 173, 173, 170, 162, 165, 173, 173, 171, 173, 173,
+ 187, 187, 187, 179, 87, 55, 179, 179, 179, 52,
+ 179, 179, 179, 179, 111, 66, 179, 179, 95, 179,
+
+ 78, 179, 179, 179, 77, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 179, 124, 179, 179,
+ 179, 179, 179, 99, 179, 179, 179, 97, 179, 179,
+ 179, 179, 179, 179, 179, 174, 177, 55, 177, 177,
+ 52, 177, 177, 177, 111, 177, 78, 177, 177, 177,
+ 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
+ 177, 177, 177, 177, 177, 174, 87, 55, 174, 174,
+ 52, 174, 174, 174, 174, 111, 66, 174, 174, 95,
+ 174, 78, 174, 174, 174, 77, 174, 174, 174, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 124,
+
+ 174, 174, 174, 174, 174, 99, 174, 174, 174, 97,
+ 174, 174, 174, 174, 174, 174, 174, 173, 143, 140,
+ 173, 173, 152, 152, 147, 173, 151, 173, 173, 160,
+ 157, 173, 173, 170, 170, 164, 173, 169, 173, 187,
+ 187, 185, 179, 179, 179, 65, 179, 88, 179, 179,
+ 179, 179, 179, 179, 67, 179, 128, 179, 179, 179,
+ 86, 179, 54, 179, 47, 179, 179, 110, 179, 50,
+ 76, 179, 179, 179, 179, 179, 179, 73, 179, 179,
+ 179, 179, 179, 94, 74, 179, 179, 179, 174, 177,
+ 177, 177, 65, 177, 177, 177, 177, 177, 128, 177,
+
+ 177, 54, 177, 177, 177, 110, 177, 50, 177, 177,
+ 177, 73, 177, 177, 177, 177, 174, 174, 174, 65,
+ 88, 174, 174, 174, 174, 174, 174, 67, 174, 128,
+ 174, 174, 174, 86, 174, 54, 174, 174, 47, 174,
+ 174, 110, 174, 50, 76, 174, 174, 174, 174, 174,
+ 174, 73, 174, 174, 174, 174, 174, 94, 74, 174,
+ 174, 174, 173, 173, 67, 149, 146, 173, 173, 173,
+ 168, 166, 163, 173, 186, 184, 179, 61, 179, 179,
+ 179, 179, 179, 179, 80, 179, 179, 123, 179, 179,
+ 179, 179, 179, 101, 179, 179, 104, 129, 179, 179,
+
+ 179, 179, 179, 179, 179, 117, 90, 179, 51, 179,
+ 179, 174, 177, 61, 177, 177, 177, 177, 80, 177,
+ 123, 177, 177, 177, 177, 177, 114, 129, 177, 177,
+ 117, 177, 177, 177, 174, 61, 174, 174, 174, 174,
+ 174, 80, 174, 174, 123, 174, 174, 174, 174, 174,
+ 174, 101, 174, 174, 104, 129, 174, 174, 174, 174,
+ 174, 174, 174, 117, 90, 174, 51, 174, 174, 173,
+ 173, 173, 173, 173, 173, 154, 179, 179, 133, 179,
+ 179, 179, 179, 179, 179, 179, 179, 60, 179, 179,
+ 179, 179, 179, 179, 179, 85, 179, 179, 179, 179,
+
+ 127, 172, 179, 174, 154, 177, 177, 133, 177, 177,
+ 177, 60, 64, 177, 177, 177, 177, 177, 127, 172,
+ 177, 154, 174, 133, 174, 174, 174, 174, 174, 174,
+ 174, 174, 60, 64, 174, 174, 174, 174, 174, 174,
+ 174, 85, 174, 174, 174, 174, 127, 172, 174, 154,
+ 139, 144, 172, 156, 161, 179, 79, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 179, 109, 179, 79,
+ 177, 79, 177, 177, 177, 177, 177, 177, 177, 177,
+ 177, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 174, 109, 174, 179, 179, 179, 179, 179, 179,
+ 179, 179, 49, 179, 115, 116, 179, 179, 179, 179,
+ 75, 179, 179, 179, 179, 179, 179, 177, 177, 177,
+ 177, 177, 115, 116, 177, 177, 177, 177, 174, 174,
+ 174, 174, 174, 174, 174, 174, 49, 174, 115, 116,
+ 174, 174, 174, 174, 75, 174, 174, 174, 174, 174,
+ 174, 179, 179, 179, 179, 179, 179, 179, 179, 102,
+ 92, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 177, 177, 177, 177, 102, 177, 177, 177, 177, 174,
+
+ 174, 174, 174, 174, 174, 174, 174, 102, 92, 174,
+ 174, 174, 174, 174, 174, 174, 174, 174, 179, 82,
+ 179, 179, 132, 179, 179, 179, 179, 179, 179, 48,
+ 179, 179, 179, 179, 105, 179, 177, 177, 132, 177,
+ 177, 177, 177, 177, 177, 174, 82, 174, 174, 132,
+ 174, 174, 174, 174, 174, 174, 48, 174, 174, 174,
+ 174, 105, 174, 179, 179, 179, 179, 179, 179, 179,
+ 91, 179, 71, 179, 179, 179, 179, 177, 177, 177,
+ 177, 177, 71, 177, 177, 174, 174, 174, 174, 174,
+ 174, 174, 91, 174, 71, 174, 174, 174, 174, 179,
+
+ 179, 179, 179, 179, 179, 179, 179, 103, 130, 70,
+ 179, 179, 69, 177, 177, 177, 177, 177, 103, 130,
+ 70, 69, 174, 174, 174, 174, 174, 174, 174, 174,
+ 103, 130, 70, 174, 174, 69, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 177, 177, 177, 177,
+ 177, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 126, 179, 179, 58, 179, 179, 179, 179, 179,
+ 179, 126, 177, 58, 177, 177, 126, 174, 174, 58,
+ 174, 174, 174, 174, 174, 174, 179, 179, 179, 179,
+ 179, 179, 106, 179, 177, 177, 177, 174, 174, 174,
+
+ 174, 174, 174, 106, 174, 179, 56, 179, 179, 179,
+ 179, 179, 56, 177, 177, 174, 56, 174, 174, 174,
+ 174, 174, 179, 179, 179, 179, 122, 179, 177, 122,
+ 174, 174, 174, 174, 122, 174, 179, 179, 179, 179,
+ 179, 177, 174, 174, 174, 174, 174, 81, 179, 179,
+ 179, 108, 177, 81, 174, 174, 174, 108, 57, 179,
+ 179, 57, 57, 174, 174, 83, 179, 83, 174, 179,
+ 174, 84, 84, 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, 20,
+ 19, 19, 19, 19, 19, 19, 19, 21, 22, 23,
+ 24, 25, 26, 1, 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, 57, 1, 58, 59, 60, 61,
+
+ 62, 63, 64, 65, 66, 16, 67, 68, 69, 70,
+ 71, 72, 16, 73, 74, 75, 76, 16, 16, 77,
+ 16, 78, 79, 80, 81, 82, 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[83] =
+ { 0,
+ 1, 1, 2, 3, 1, 1, 4, 1, 1, 1,
+ 1, 3, 5, 6, 7, 8, 9, 10, 10, 10,
+ 7, 1, 1, 6, 1, 3, 11, 11, 11, 11,
+ 11, 11, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 7, 4, 7, 3, 8, 11, 11, 11,
+ 11, 11, 11, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 1, 1,
+ 1, 9
+ } ;
+
+static yyconst flex_int16_t yy_base[1807] =
+ { 0,
+ 0, 0, 0, 0, 82, 163, 244, 0, 326, 0,
+ 408, 489, 570, 0, 112, 114, 652, 734, 816, 898,
+ 2856, 2857, 2857, 2853, 2857, 2830, 2848, 963, 2857, 89,
+ 2857, 2857, 2828, 2827, 0, 2826, 0, 98, 743, 417,
+ 0, 2857, 88, 2825, 99, 0, 98, 119, 98, 114,
+ 106, 114, 2804, 113, 2807, 2815, 164, 94, 161, 156,
+ 163, 2798, 2813, 179, 2816, 2811, 0, 0, 2782, 2778,
+ 2766, 2772, 2857, 129, 2857, 0, 2835, 2857, 2831, 0,
+ 2857, 2857, 2857, 2767, 2822, 0, 2788, 2857, 2830, 2807,
+ 2825, 1009, 2857, 110, 2857, 2857, 2805, 2804, 2857, 65,
+
+ 0, 187, 1055, 129, 2857, 2857, 200, 2803, 203, 2857,
+ 1115, 412, 421, 489, 493, 502, 2782, 2790, 2784, 2792,
+ 167, 105, 198, 192, 2778, 413, 2857, 2857, 651, 2755,
+ 2857, 400, 2857, 0, 1175, 401, 0, 429, 825, 906,
+ 521, 649, 171, 491, 191, 430, 2776, 199, 2779, 2787,
+ 442, 443, 444, 510, 512, 2770, 2785, 678, 2788, 2783,
+ 2754, 2750, 2738, 2744, 0, 1221, 2857, 2857, 0, 2857,
+ 2857, 2785, 2805, 1267, 2783, 2782, 2857, 2781, 0, 2780,
+ 0, 402, 2857, 0, 2779, 2857, 1313, 655, 664, 524,
+ 676, 689, 404, 2775, 2757, 2753, 495, 2755, 2857, 2857,
+
+ 736, 657, 738, 804, 737, 167, 2740, 2724, 2720, 85,
+ 2722, 0, 2792, 0, 2781, 2857, 0, 2857, 2857, 2857,
+ 2771, 456, 460, 484, 2857, 2857, 2789, 0, 0, 2785,
+ 2857, 730, 2857, 2857, 0, 0, 0, 0, 0, 917,
+ 0, 0, 2765, 2857, 0, 2857, 2764, 2742, 2756, 2739,
+ 2749, 480, 0, 2751, 2742, 2740, 2734, 521, 2748, 2732,
+ 2745, 2745, 2729, 657, 2736, 2732, 2728, 2730, 2740, 2731,
+ 739, 2737, 2710, 2726, 661, 2723, 2725, 2713, 754, 2724,
+ 2726, 2714, 2728, 2728, 2716, 2729, 2722, 773, 2713, 2701,
+ 2708, 2720, 2703, 2722, 2720, 2702, 2702, 2701, 2670, 2673,
+
+ 2678, 2663, 2857, 2857, 2738, 0, 0, 2857, 0, 2682,
+ 2857, 0, 1373, 2857, 2857, 2857, 0, 2857, 673, 920,
+ 0, 2857, 2857, 0, 2857, 820, 823, 903, 0, 2703,
+ 654, 0, 923, 2697, 2695, 730, 968, 971, 2704, 2705,
+ 2692, 2702, 769, 2700, 2690, 449, 2679, 2688, 2677, 630,
+ 2688, 2690, 2693, 2682, 2689, 2669, 2689, 2691, 974, 2640,
+ 740, 0, 1012, 0, 2672, 2686, 2669, 2679, 802, 0,
+ 2681, 2672, 2670, 2664, 812, 2678, 2662, 2675, 2675, 2659,
+ 817, 2666, 2662, 2658, 2660, 2670, 2661, 1013, 2667, 2640,
+ 2656, 843, 396, 2656, 2654, 2643, 850, 2654, 2656, 2644,
+
+ 2658, 2658, 2646, 2659, 2652, 844, 2643, 2631, 2638, 2650,
+ 2633, 2652, 2650, 2632, 2632, 2631, 2600, 2603, 2608, 2593,
+ 0, 1425, 2667, 2857, 0, 1477, 0, 0, 0, 1529,
+ 2624, 0, 0, 2633, 2622, 2621, 2630, 2634, 2617, 2618,
+ 2616, 2633, 2620, 2628, 2629, 2627, 2628, 2607, 2579, 2586,
+ 2577, 2576, 2583, 2587, 2572, 2573, 2571, 2586, 2574, 2581,
+ 2582, 2580, 2581, 2562, 0, 0, 2616, 2615, 485, 707,
+ 807, 2857, 2857, 2594, 2590, 2602, 2599, 2600, 2590, 2588,
+ 2598, 2598, 2595, 2580, 2573, 2596, 2595, 2586, 2591, 2575,
+ 2580, 2586, 2578, 2588, 2585, 2566, 2582, 0, 2573, 2569,
+
+ 2574, 2561, 2576, 2564, 2573, 2571, 2573, 2569, 0, 2560,
+ 2554, 2555, 2560, 2556, 2545, 2562, 2552, 2549, 2548, 2543,
+ 2560, 2554, 2544, 2541, 2547, 2541, 2553, 2537, 2553, 2554,
+ 2536, 2552, 2540, 2544, 2531, 2504, 0, 0, 2512, 0,
+ 0, 2533, 0, 0, 818, 2531, 1016, 2538, 2539, 2529,
+ 2538, 2538, 2521, 2514, 2537, 1063, 2534, 2524, 2514, 2530,
+ 2521, 2517, 2510, 2514, 2522, 2524, 2533, 0, 0, 2506,
+ 2507, 2509, 2498, 2515, 2503, 2498, 2506, 2513, 2514, 2515,
+ 2470, 2478, 0, 2498, 2494, 2506, 2503, 2504, 2493, 2503,
+ 2503, 2500, 2485, 2478, 2501, 2500, 2491, 2496, 2480, 2485,
+
+ 2491, 2483, 2493, 2490, 2471, 2487, 0, 2478, 2474, 2479,
+ 2466, 2481, 2469, 2478, 2476, 2478, 2487, 2473, 0, 0,
+ 2464, 0, 2458, 2459, 2464, 2460, 2449, 2466, 2456, 2453,
+ 2452, 2447, 2464, 2458, 2448, 2445, 2451, 2445, 2457, 2441,
+ 2457, 2458, 2440, 2456, 2444, 2448, 2435, 2408, 0, 0,
+ 2416, 0, 0, 2436, 758, 2445, 2444, 2432, 0, 2442,
+ 2433, 2425, 2440, 2438, 2437, 2429, 2420, 2421, 2424, 2392,
+ 870, 2400, 2399, 2388, 0, 2397, 2389, 2382, 2395, 2393,
+ 2392, 2385, 2377, 2378, 2380, 503, 851, 773, 2411, 0,
+ 2404, 2407, 2402, 2414, 2400, 0, 2406, 0, 2396, 0,
+
+ 2395, 2383, 2399, 2392, 2386, 2389, 2391, 0, 2388, 2402,
+ 2390, 2400, 2383, 0, 2401, 2382, 2383, 0, 2395, 2379,
+ 2397, 0, 2379, 0, 2381, 2380, 2393, 2362, 2383, 2370,
+ 2378, 2370, 2379, 0, 2372, 2383, 2376, 2379, 2363, 2367,
+ 2350, 2371, 2375, 2358, 2365, 2367, 2370, 2365, 2331, 2327,
+ 2366, 2358, 0, 2355, 2350, 2362, 0, 2355, 2345, 0,
+ 2333, 2349, 2342, 2340, 2344, 2345, 2318, 0, 2308, 0,
+ 2297, 2312, 2307, 0, 2294, 2303, 2262, 2273, 2259, 2253,
+ 2236, 2223, 2228, 2220, 2179, 2165, 2187, 0, 2174, 2160,
+ 2155, 2154, 0, 2154, 0, 2141, 0, 2138, 2126, 2142,
+
+ 81, 107, 154, 173, 0, 189, 412, 487, 533, 643,
+ 0, 666, 672, 678, 0, 710, 759, 796, 820, 0,
+ 812, 0, 819, 845, 862, 833, 856, 846, 867, 868,
+ 879, 0, 886, 900, 895, 901, 896, 903, 889, 912,
+ 920, 906, 917, 923, 932, 929, 897, 896, 933, 927,
+ 934, 0, 0, 0, 932, 958, 1606, 0, 0, 944,
+ 965, 0, 959, 978, 940, 936, 941, 0, 0, 0,
+ 942, 960, 1687, 0, 0, 960, 968, 0, 960, 983,
+ 1029, 1032, 1031, 1009, 0, 1023, 1011, 1028, 1032, 0,
+ 1051, 1034, 1021, 1045, 0, 0, 1047, 1048, 0, 1040,
+
+ 0, 1060, 1073, 1069, 1049, 1061, 1083, 1077, 1082, 1068,
+ 1076, 1096, 1095, 1092, 1088, 1083, 1103, 0, 1101, 1096,
+ 1103, 1097, 1099, 0, 1108, 1122, 1114, 0, 1101, 1116,
+ 1124, 1108, 1114, 1081, 1095, 1128, 1116, 1125, 1118, 1136,
+ 0, 1141, 1124, 1139, 0, 1141, 0, 1132, 1149, 1124,
+ 1149, 1154, 1154, 1142, 1158, 1154, 1150, 1164, 1166, 1157,
+ 1166, 1172, 1165, 1125, 1145, 1162, 0, 1169, 1165, 1181,
+ 0, 1186, 1183, 1170, 1185, 0, 0, 1187, 1178, 0,
+ 1162, 0, 1180, 1191, 1187, 1166, 1178, 1198, 1193, 1198,
+ 1198, 1180, 1187, 1215, 1213, 1209, 1205, 1200, 1220, 0,
+
+ 1224, 1215, 1222, 1216, 1218, 0, 1227, 1232, 1234, 0,
+ 1215, 1228, 1236, 1219, 1225, 1191, 1205, 1222, 0, 1231,
+ 1231, 1227, 0, 1768, 0, 1245, 0, 1248, 1200, 0,
+ 1208, 1208, 1213, 0, 1849, 0, 1229, 0, 1232, 1279,
+ 1270, 1271, 1247, 1269, 1253, 0, 1273, 0, 1264, 1258,
+ 1249, 1276, 1278, 1278, 0, 1281, 0, 1280, 1266, 1268,
+ 0, 1268, 0, 1285, 0, 1271, 1271, 0, 1286, 0,
+ 1262, 1269, 1290, 1265, 1266, 1284, 1288, 1278, 1285, 1296,
+ 1301, 1304, 1315, 0, 0, 1310, 1277, 1296, 1325, 1310,
+ 1325, 1309, 0, 1329, 1320, 1330, 1332, 1333, 0, 1334,
+
+ 1321, 0, 1337, 1333, 1324, 0, 1338, 0, 1326, 1348,
+ 1334, 1324, 1344, 1350, 1310, 1329, 1341, 1356, 1340, 0,
+ 0, 1354, 1348, 1339, 1366, 1368, 1368, 0, 1377, 0,
+ 1376, 1362, 1364, 0, 1365, 0, 1383, 1379, 0, 1370,
+ 1370, 0, 1385, 0, 1361, 1368, 1389, 1364, 1365, 1383,
+ 1378, 1368, 1375, 1386, 1390, 1387, 1397, 0, 0, 1397,
+ 1363, 1382, 1395, 1405, 0, 0, 0, 1401, 1373, 1378,
+ 0, 0, 0, 1375, 1430, 1437, 1428, 0, 1425, 1430,
+ 1417, 1436, 1425, 1434, 0, 1411, 1428, 0, 1413, 1440,
+ 1425, 1429, 1430, 0, 1418, 1449, 0, 1420, 1451, 1449,
+
+ 1435, 1425, 1455, 1433, 1451, 0, 0, 1453, 0, 1436,
+ 1434, 1469, 1470, 0, 1467, 1472, 1464, 1478, 0, 1455,
+ 0, 1482, 1471, 1479, 1474, 1462, 0, 1463, 1464, 1488,
+ 0, 1483, 1462, 1460, 1495, 0, 1492, 1482, 1500, 1489,
+ 1498, 0, 1475, 1492, 0, 1477, 1510, 1495, 1499, 1507,
+ 1506, 0, 1494, 1535, 0, 1495, 1526, 1524, 1510, 1507,
+ 1531, 1509, 1528, 0, 0, 1529, 0, 1509, 1507, 1542,
+ 1544, 1544, 1514, 1516, 1516, 0, 1534, 1551, 0, 1536,
+ 1555, 1545, 1553, 1547, 1564, 1566, 1552, 0, 1566, 1554,
+ 1555, 1560, 1568, 1565, 1569, 0, 1560, 1578, 1586, 1588,
+
+ 0, 0, 1560, 1593, 0, 1578, 1595, 0, 1588, 1601,
+ 1605, 0, 0, 1604, 1592, 1603, 1593, 1608, 0, 0,
+ 1578, 0, 1595, 0, 1596, 1615, 1605, 1613, 1607, 1618,
+ 1619, 1605, 0, 0, 1619, 1607, 1608, 1612, 1620, 1617,
+ 1621, 0, 1612, 1627, 1632, 1629, 0, 0, 1599, 0,
+ 0, 0, 0, 0, 0, 1629, 0, 1623, 1629, 1635,
+ 1633, 1630, 1629, 1625, 1642, 1642, 1634, 1647, 1633, 1643,
+ 1644, 1636, 1635, 1655, 1646, 1650, 1667, 0, 1642, 0,
+ 1668, 0, 1672, 1669, 1659, 1674, 1666, 1673, 1668, 1689,
+ 1659, 1684, 1678, 1684, 1690, 1687, 1684, 1683, 1679, 1695,
+
+ 1695, 1687, 1700, 1686, 1696, 1697, 1689, 1688, 1708, 1699,
+ 1698, 1712, 0, 1682, 1684, 1698, 1713, 1705, 1708, 1706,
+ 1709, 1714, 0, 1705, 0, 0, 1717, 1713, 1723, 1727,
+ 0, 1728, 1726, 1722, 1723, 1720, 1699, 1704, 1722, 1725,
+ 1729, 1720, 0, 0, 1741, 1748, 1751, 1722, 1727, 1741,
+ 1755, 1747, 1750, 1748, 1756, 1761, 0, 1752, 0, 0,
+ 1764, 1760, 1770, 1774, 0, 1775, 1773, 1769, 1770, 1767,
+ 1746, 1773, 1764, 1781, 1765, 1781, 1773, 1775, 1774, 1759,
+ 0, 1790, 1788, 1774, 1776, 1790, 1789, 1777, 1794, 1764,
+ 1792, 1782, 1798, 1789, 1774, 1802, 1789, 1803, 1773, 1801,
+
+ 1792, 1809, 1793, 1809, 1801, 1803, 1802, 1787, 0, 1818,
+ 1816, 1807, 1812, 1831, 1831, 1819, 1835, 1805, 1828, 0,
+ 1823, 1813, 0, 1819, 1836, 1838, 1833, 1834, 1850, 0,
+ 1836, 1839, 1844, 1828, 0, 1813, 1847, 1831, 0, 1849,
+ 1844, 1860, 1846, 1849, 1821, 1855, 0, 1850, 1840, 0,
+ 1841, 1858, 1860, 1855, 1856, 1872, 0, 1858, 1862, 1867,
+ 1851, 0, 1836, 1868, 1854, 1887, 1885, 1873, 1858, 1875,
+ 0, 1877, 0, 1874, 1881, 1879, 1848, 1881, 1905, 1867,
+ 1884, 1886, 0, 1882, 1859, 1892, 1878, 1910, 1911, 1899,
+ 1883, 1901, 0, 1903, 0, 1899, 1906, 1904, 1873, 1901,
+
+ 1905, 1913, 1912, 1922, 1917, 1899, 1925, 0, 0, 0,
+ 1927, 1915, 0, 1913, 1923, 1922, 1932, 1932, 0, 0,
+ 0, 0, 1918, 1921, 1929, 1928, 1938, 1932, 1914, 1940,
+ 0, 0, 0, 1942, 1930, 0, 1929, 1925, 1942, 1948,
+ 1941, 1942, 1954, 1944, 1943, 1949, 1939, 1951, 1957, 1950,
+ 1951, 1944, 1940, 1957, 1963, 1956, 1957, 1969, 1959, 1958,
+ 1964, 0, 1961, 1968, 0, 1958, 1962, 1966, 1978, 1960,
+ 1966, 0, 1975, 0, 1965, 1983, 0, 1972, 1979, 0,
+ 1969, 1973, 1977, 1989, 1971, 1977, 1991, 1980, 1980, 1993,
+ 1985, 1991, 0, 1981, 1986, 1986, 1995, 2001, 1990, 1990,
+
+ 2003, 1995, 2001, 0, 1991, 1995, 0, 1980, 2011, 1998,
+ 1995, 2006, 0, 1985, 1998, 2003, 0, 1988, 2019, 2006,
+ 2003, 2014, 2012, 2020, 2006, 2024, 0, 2008, 2024, 0,
+ 2018, 2026, 2012, 2030, 0, 2014, 2016, 2022, 2028, 2037,
+ 2014, 2026, 2022, 2028, 2034, 2043, 2020, 0, 2042, 2032,
+ 2028, 0, 2045, 0, 2046, 2036, 2032, 0, 0, 2039,
+ 2045, 0, 0, 2041, 2047, 0, 2042, 0, 2043, 2045,
+ 2046, 0, 0, 2857, 2086, 2097, 2108, 2119, 2130, 2141,
+ 2150, 2161, 2169, 2177, 2185, 2193, 2204, 2212, 2223, 2234,
+ 2245, 2249, 2258, 2266, 2274, 2282, 2284, 2295, 2306, 2317,
+
+ 2321, 2330, 2341, 2352, 2363, 2374
+ } ;
+
+static yyconst flex_int16_t yy_def[1807] =
+ { 0,
+ 1775, 1775, 1774, 3, 1776, 1776, 1774, 7, 1774, 9,
+ 1777, 1777, 1774, 13, 1778, 1778, 1779, 1779, 1780, 1780,
+ 1774, 1774, 1774, 1774, 1774, 1781, 1782, 1781, 1774, 1774,
+ 1774, 1774, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1774, 1774, 1781, 1774, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1774, 1774, 1774, 1781, 1774, 1774, 1782, 1783,
+ 1774, 1774, 1774, 1774, 1783, 1784, 1783, 1774, 1774, 1774,
+ 1782, 1785, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+
+ 1785, 1785, 1774, 103, 1774, 1774, 1774, 1774, 1774, 1774,
+ 1785, 111, 111, 111, 111, 111, 1785, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1785, 1774, 1774, 111, 1785,
+ 1774, 1774, 1774, 1785, 1783, 1774, 1783, 1783, 1774, 1774,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1786, 1774, 1774, 1786, 1774,
+ 1774, 1774, 1787, 1788, 1789, 1774, 1774, 1774, 1788, 1788,
+ 103, 103, 1774, 1790, 1774, 1774, 1788, 187, 187, 187,
+ 187, 187, 1788, 1788, 1788, 1788, 1788, 1788, 1774, 1774,
+
+ 187, 187, 187, 187, 187, 1788, 1788, 1788, 1788, 1788,
+ 1788, 1788, 1774, 1791, 1774, 1774, 1792, 1774, 1774, 1774,
+ 1793, 1793, 1793, 1793, 1774, 1774, 1774, 1781, 1781, 1782,
+ 1774, 28, 1774, 1774, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 28, 1774, 1774, 1781, 1774, 1774, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+
+ 1781, 1781, 1774, 1774, 1774, 1783, 1794, 1774, 1795, 1783,
+ 1774, 1785, 1785, 1774, 1774, 1774, 1796, 1774, 103, 103,
+ 320, 1774, 1774, 1797, 1774, 111, 111, 111, 1785, 1785,
+ 1785, 1785, 111, 1785, 1785, 1785, 111, 111, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 111, 1785,
+ 135, 1783, 1774, 1797, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1786, 1786, 1787, 1774, 1788, 1788, 1798, 1798, 1799, 1788,
+ 430, 430, 1788, 1788, 430, 430, 1788, 1788, 1788, 1788,
+ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 430, 1788,
+ 430, 430, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
+ 1788, 1788, 1788, 1788, 1800, 1801, 1802, 1774, 1802, 1802,
+ 1802, 1774, 1774, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1794,
+ 1795, 1783, 1785, 1796, 1797, 1785, 111, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 111, 1785, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+ 1785, 1785, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1786, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
+ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
+ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
+ 1788, 1788, 1788, 1788, 1788, 1802, 1802, 1802, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1783, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1785, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1788, 1788,
+ 1788, 1788, 1788, 1788, 1788, 1788, 1803, 1788, 1788, 1788,
+ 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
+ 1788, 1788, 1804, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
+ 1802, 1802, 1802, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1783, 1785, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1788, 1788, 1788,
+ 1788, 1788, 1805, 1803, 1788, 1788, 1788, 1788, 1788, 1788,
+ 1788, 1788, 1788, 1806, 1804, 1788, 1788, 1788, 1788, 1802,
+ 1802, 1802, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1783, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+
+ 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1785, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
+ 1788, 1788, 1788, 1788, 1802, 1802, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1783, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1788,
+ 1788, 1788, 1788, 1788, 1788, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+
+ 1781, 1781, 1781, 1783, 1785, 1785, 1785, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+ 1785, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1788,
+ 1788, 1788, 1788, 1788, 1788, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1783,
+ 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+ 1785, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1783,
+
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1785, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1785, 1785, 1785,
+ 1785, 1785, 1785, 1785, 1785, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1781,
+
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+ 1785, 1785, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1785, 1785, 1785, 1785,
+ 1785, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1785, 1785, 1785, 1785, 1785, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1785, 1785, 1785, 1783, 1783, 1783,
+
+ 1783, 1783, 1783, 1783, 1783, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1785, 1785, 1785, 1783, 1783, 1783, 1783, 1783,
+ 1783, 1783, 1781, 1781, 1781, 1781, 1781, 1781, 1785, 1785,
+ 1783, 1783, 1783, 1783, 1783, 1783, 1781, 1781, 1781, 1781,
+ 1781, 1785, 1783, 1783, 1783, 1783, 1783, 1781, 1781, 1781,
+ 1781, 1781, 1785, 1783, 1783, 1783, 1783, 1783, 1781, 1781,
+ 1781, 1785, 1783, 1783, 1783, 1781, 1781, 1783, 1783, 1781,
+ 1783, 1781, 1783, 0, 1774, 1774, 1774, 1774, 1774, 1774,
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+
+ 1774, 1774, 1774, 1774, 1774, 1774
+ } ;
+
+static yyconst flex_int16_t yy_nxt[2940] =
+ { 0,
+ 23, 24, 25, 26, 27, 23, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 37, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 37, 66, 37, 37,
+ 37, 37, 67, 37, 68, 37, 37, 69, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 70, 37, 37,
+ 71, 37, 37, 72, 37, 37, 37, 37, 73, 74,
+ 75, 76, 22, 77, 78, 22, 79, 22, 316, 22,
+ 22, 81, 82, 22, 22, 83, 84, 233, 85, 22,
+
+ 22, 22, 22, 22, 22, 86, 22, 22, 87, 238,
+ 243, 244, 234, 213, 78, 213, 78, 214, 233, 214,
+ 276, 239, 246, 247, 277, 248, 976, 249, 215, 250,
+ 215, 347, 317, 234, 22, 251, 22, 22, 258, 348,
+ 260, 259, 252, 253, 261, 263, 462, 269, 265, 254,
+ 270, 266, 303, 255, 267, 264, 256, 977, 262, 463,
+ 22, 22, 22, 22, 77, 78, 22, 79, 22, 257,
+ 22, 22, 81, 82, 22, 22, 83, 84, 322, 85,
+ 22, 22, 22, 22, 22, 22, 86, 22, 22, 87,
+ 216, 278, 216, 273, 274, 280, 284, 345, 308, 281,
+
+ 978, 279, 282, 283, 275, 322, 285, 346, 304, 288,
+ 318, 375, 289, 290, 376, 22, 979, 22, 22, 291,
+ 292, 293, 243, 244, 294, 295, 246, 247, 349, 296,
+ 380, 351, 457, 386, 980, 352, 387, 458, 350, 353,
+ 381, 22, 22, 22, 88, 89, 25, 90, 91, 88,
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
+ 102, 103, 104, 104, 105, 106, 107, 108, 109, 110,
+ 111, 112, 113, 114, 115, 116, 117, 118, 119, 101,
+ 120, 121, 122, 123, 124, 125, 101, 101, 126, 101,
+ 101, 101, 101, 101, 101, 101, 127, 101, 128, 88,
+
+ 101, 129, 116, 116, 116, 116, 116, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 130, 101, 101,
+ 101, 101, 131, 132, 133, 134, 88, 89, 25, 90,
+ 91, 88, 135, 93, 94, 95, 96, 97, 98, 99,
+ 136, 137, 138, 139, 140, 140, 105, 106, 107, 108,
+ 109, 110, 141, 142, 143, 144, 145, 146, 147, 148,
+ 149, 137, 150, 151, 152, 153, 154, 155, 156, 157,
+ 158, 159, 137, 160, 137, 137, 137, 137, 127, 137,
+ 128, 88, 137, 161, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 162, 137, 137, 163, 137, 137, 164,
+
+ 137, 137, 137, 137, 131, 132, 133, 165, 88, 88,
+ 22, 88, 88, 88, 166, 88, 88, 88, 88, 88,
+ 167, 88, 168, 303, 316, 139, 140, 140, 88, 88,
+ 88, 170, 88, 88, 240, 240, 240, 619, 441, 333,
+ 308, 333, 981, 355, 442, 620, 334, 356, 333, 335,
+ 333, 322, 362, 241, 357, 241, 312, 312, 312, 358,
+ 88, 336, 88, 88, 382, 312, 312, 383, 307, 393,
+ 384, 390, 391, 394, 396, 566, 468, 395, 322, 304,
+ 468, 567, 392, 241, 397, 241, 88, 88, 88, 88,
+ 88, 22, 88, 88, 88, 166, 88, 88, 88, 88,
+
+ 88, 167, 88, 168, 468, 468, 139, 140, 140, 88,
+ 88, 88, 170, 88, 88, 337, 333, 377, 333, 338,
+ 333, 378, 333, 468, 478, 446, 312, 470, 982, 333,
+ 312, 333, 469, 339, 312, 379, 479, 312, 312, 312,
+ 447, 88, 340, 88, 88, 402, 312, 312, 365, 398,
+ 366, 432, 367, 399, 471, 403, 400, 401, 368, 686,
+ 484, 425, 485, 983, 881, 369, 370, 88, 88, 88,
+ 23, 24, 171, 172, 23, 173, 174, 29, 30, 31,
+ 32, 175, 176, 177, 178, 179, 180, 181, 182, 182,
+ 183, 184, 43, 185, 45, 186, 187, 188, 189, 190,
+
+ 191, 192, 179, 179, 179, 179, 179, 193, 179, 194,
+ 195, 196, 179, 179, 197, 198, 179, 179, 179, 179,
+ 179, 179, 199, 179, 200, 23, 179, 201, 202, 203,
+ 190, 204, 205, 179, 179, 179, 179, 206, 179, 207,
+ 208, 209, 179, 210, 211, 179, 179, 179, 73, 74,
+ 75, 212, 23, 213, 78, 23, 23, 214, 571, 23,
+ 23, 23, 23, 23, 23, 218, 23, 572, 215, 23,
+ 23, 23, 218, 218, 23, 23, 23, 23, 333, 371,
+ 333, 435, 432, 372, 432, 491, 373, 507, 312, 984,
+ 436, 432, 425, 985, 425, 312, 312, 437, 549, 374,
+
+ 508, 425, 492, 432, 23, 23, 23, 23, 406, 359,
+ 550, 407, 408, 425, 451, 438, 432, 986, 409, 410,
+ 411, 987, 322, 412, 413, 439, 425, 468, 414, 440,
+ 219, 23, 220, 23, 23, 213, 78, 23, 23, 214,
+ 988, 23, 23, 23, 23, 23, 23, 218, 23, 322,
+ 215, 23, 23, 23, 218, 218, 23, 23, 23, 23,
+ 240, 240, 240, 432, 432, 432, 241, 499, 241, 553,
+ 500, 554, 501, 425, 425, 425, 583, 687, 583, 241,
+ 502, 241, 512, 503, 850, 513, 23, 23, 23, 23,
+ 851, 514, 242, 468, 449, 452, 241, 561, 241, 523,
+
+ 562, 524, 453, 450, 989, 525, 583, 456, 583, 241,
+ 563, 241, 219, 23, 220, 23, 23, 213, 78, 242,
+ 27, 214, 990, 23, 23, 23, 23, 468, 23, 218,
+ 883, 432, 215, 23, 23, 23, 218, 218, 23, 23,
+ 23, 425, 363, 363, 363, 600, 588, 333, 991, 333,
+ 333, 593, 333, 594, 323, 992, 323, 312, 542, 993,
+ 312, 323, 601, 323, 312, 312, 688, 546, 312, 616,
+ 635, 468, 636, 454, 364, 617, 637, 222, 624, 223,
+ 455, 625, 618, 224, 323, 994, 323, 626, 995, 996,
+ 997, 323, 998, 323, 225, 23, 226, 23, 23, 213,
+
+ 78, 364, 27, 214, 999, 23, 23, 23, 23, 882,
+ 23, 218, 1000, 1001, 215, 23, 23, 23, 218, 218,
+ 23, 23, 23, 363, 363, 363, 1002, 866, 1003, 1004,
+ 333, 1005, 547, 867, 240, 240, 240, 320, 320, 320,
+ 312, 1006, 323, 1007, 323, 1008, 1009, 312, 312, 1010,
+ 333, 1011, 333, 241, 1012, 241, 1774, 1013, 1774, 222,
+ 312, 223, 1014, 1015, 1016, 224, 1017, 312, 312, 322,
+ 1018, 1019, 323, 1020, 323, 1021, 225, 23, 226, 23,
+ 232, 232, 232, 241, 1022, 241, 1774, 1025, 1774, 232,
+ 232, 232, 232, 232, 232, 333, 322, 333, 333, 1026,
+
+ 333, 333, 556, 333, 1027, 312, 1028, 1029, 312, 1030,
+ 1031, 312, 312, 555, 1032, 312, 312, 1033, 312, 312,
+ 232, 232, 232, 232, 232, 232, 313, 313, 313, 363,
+ 363, 363, 1036, 1037, 1038, 313, 313, 313, 313, 313,
+ 313, 608, 1039, 333, 609, 333, 610, 581, 323, 468,
+ 323, 468, 468, 312, 611, 1043, 1046, 612, 1047, 753,
+ 312, 312, 1048, 1044, 1051, 1052, 313, 313, 313, 313,
+ 313, 313, 319, 319, 319, 1053, 1054, 1049, 323, 1045,
+ 323, 320, 321, 320, 321, 320, 320, 1055, 322, 1041,
+ 333, 323, 333, 323, 1050, 322, 1056, 762, 1042, 1057,
+
+ 312, 1040, 1058, 1059, 324, 1060, 1061, 312, 312, 1062,
+ 1063, 1064, 320, 321, 320, 321, 320, 320, 1065, 322,
+ 1066, 323, 1067, 323, 1068, 322, 1069, 1070, 1071, 1072,
+ 1073, 324, 326, 326, 326, 1074, 1075, 1076, 1077, 1078,
+ 1081, 326, 327, 326, 328, 326, 326, 1082, 329, 1079,
+ 1083, 1084, 330, 1085, 1086, 329, 1087, 1088, 1089, 331,
+ 332, 1080, 1090, 1093, 329, 1091, 1094, 1095, 1096, 1097,
+ 1098, 1099, 326, 333, 326, 333, 326, 326, 1100, 329,
+ 1101, 1092, 1102, 1103, 1104, 329, 1105, 1106, 1107, 1108,
+ 1109, 329, 361, 361, 361, 1110, 1111, 1112, 1113, 1114,
+
+ 1115, 361, 361, 361, 361, 361, 361, 1116, 1117, 1118,
+ 1120, 1121, 1122, 1124, 1125, 1126, 1127, 1128, 1129, 1130,
+ 1131, 1132, 1133, 1134, 1135, 1119, 1136, 1137, 1138, 1123,
+ 1139, 1140, 361, 361, 361, 361, 361, 361, 422, 422,
+ 422, 1141, 1142, 1143, 1144, 1145, 1146, 422, 422, 422,
+ 422, 422, 422, 1147, 1148, 1149, 1150, 1151, 1152, 1153,
+ 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164,
+ 1165, 1154, 1166, 1167, 1168, 1169, 1170, 1171, 422, 422,
+ 422, 422, 422, 422, 426, 426, 426, 1172, 1173, 1174,
+ 468, 468, 1177, 426, 426, 426, 426, 426, 426, 468,
+
+ 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187,
+ 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197,
+ 1198, 1199, 1200, 1201, 426, 426, 426, 426, 426, 426,
+ 430, 430, 430, 1202, 1203, 1204, 1205, 1176, 1206, 430,
+ 431, 430, 432, 430, 430, 1207, 433, 1208, 1175, 1209,
+ 434, 1210, 1211, 433, 1212, 1213, 1214, 1215, 1216, 1217,
+ 1218, 1219, 433, 1220, 1221, 1222, 1223, 1224, 1225, 1226,
+ 430, 432, 430, 432, 430, 430, 1227, 433, 1228, 1229,
+ 1230, 1231, 1232, 433, 1233, 1234, 1235, 1236, 1237, 433,
+ 313, 313, 313, 1238, 1239, 1240, 1241, 1242, 1243, 313,
+
+ 313, 313, 313, 313, 313, 1244, 1245, 1246, 1247, 543,
+ 1248, 543, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256,
+ 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266,
+ 313, 313, 313, 313, 313, 313, 1267, 1268, 1269, 543,
+ 1270, 543, 422, 422, 422, 1271, 1272, 1273, 1274, 1275,
+ 468, 422, 422, 422, 422, 422, 422, 468, 1276, 1277,
+ 1278, 652, 1279, 652, 1280, 1281, 1282, 1283, 1284, 1285,
+ 1286, 1287, 1288, 1289, 1290, 1291, 1293, 1294, 1295, 1296,
+ 1292, 1297, 422, 422, 422, 422, 422, 422, 1298, 1299,
+ 1300, 652, 1301, 652, 426, 426, 426, 1302, 1303, 1304,
+
+ 1305, 1306, 1307, 426, 426, 426, 426, 426, 426, 1308,
+ 1309, 1310, 1311, 653, 1312, 653, 1313, 1314, 1315, 1316,
+ 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326,
+ 1327, 1328, 1329, 1330, 426, 426, 426, 426, 426, 426,
+ 1331, 1332, 1333, 653, 1334, 653, 430, 430, 430, 1335,
+ 1336, 1339, 1340, 1341, 1342, 430, 432, 430, 432, 430,
+ 430, 1337, 433, 1343, 1344, 1345, 1338, 1346, 1347, 433,
+ 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 433, 1356,
+ 1357, 1358, 1359, 1360, 1361, 1362, 430, 432, 430, 432,
+ 430, 430, 1363, 433, 1364, 1365, 1366, 1367, 1368, 433,
+
+ 1369, 1370, 1371, 1372, 1373, 433, 1023, 1023, 1374, 1023,
+ 1023, 1023, 1375, 1023, 1023, 1023, 1023, 1023, 1378, 1023,
+ 1376, 1379, 1380, 1381, 1382, 1377, 1383, 1023, 1023, 1023,
+ 1023, 1023, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391,
+ 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401,
+ 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1413,
+ 1414, 1023, 1415, 1416, 1417, 1418, 1411, 1419, 1420, 1421,
+ 1422, 1412, 1423, 1424, 1425, 1427, 1428, 1429, 1430, 1431,
+ 1432, 1433, 1426, 1434, 1023, 1023, 1023, 1034, 1034, 1435,
+ 1034, 1034, 1034, 1436, 1034, 1034, 1034, 1034, 1034, 1437,
+
+ 1034, 1438, 1439, 1440, 1441, 1442, 1443, 1445, 1034, 1034,
+ 1034, 1034, 1034, 1446, 1444, 1447, 1448, 1449, 1450, 1451,
+ 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1461, 1462,
+ 1463, 1464, 1465, 1466, 1467, 1460, 1468, 1469, 1470, 1471,
+ 1472, 1473, 1034, 1474, 1475, 1476, 1477, 1478, 1479, 1480,
+ 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490,
+ 1491, 1492, 1493, 1494, 1495, 1034, 1034, 1034, 1023, 1023,
+ 1496, 1023, 1023, 1023, 1497, 1023, 1023, 1023, 1023, 1023,
+ 1498, 1023, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1023,
+ 1023, 1023, 1023, 1023, 1506, 1507, 1508, 1509, 1510, 1511,
+
+ 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521,
+ 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531,
+ 1532, 1533, 1534, 1023, 1535, 1536, 1537, 1538, 1539, 1540,
+ 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550,
+ 1551, 1552, 1553, 1554, 1555, 1556, 1023, 1023, 1023, 1034,
+ 1034, 1557, 1034, 1034, 1034, 1558, 1034, 1034, 1034, 1034,
+ 1034, 1559, 1034, 1560, 1561, 1562, 1563, 1564, 1565, 1566,
+ 1034, 1034, 1034, 1034, 1034, 1567, 1568, 1569, 1570, 1571,
+ 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581,
+ 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591,
+
+ 1592, 1593, 1594, 1595, 1034, 1596, 1597, 1598, 1599, 1600,
+ 1601, 1605, 1606, 1602, 1607, 1608, 1609, 1603, 1610, 1611,
+ 1612, 1613, 1614, 1618, 1619, 1620, 1621, 1034, 1034, 1034,
+ 1604, 1615, 1622, 1623, 1624, 1616, 1625, 1628, 1629, 1630,
+ 1626, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1617, 1638,
+ 1639, 1640, 1641, 1627, 1642, 1643, 1644, 1645, 1646, 1647,
+ 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657,
+ 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667,
+ 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677,
+ 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687,
+
+ 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697,
+ 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707,
+ 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717,
+ 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727,
+ 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737,
+ 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747,
+ 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757,
+ 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767,
+ 1768, 1769, 1770, 1771, 1772, 1773, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 80, 80, 80,
+
+ 80, 80, 80, 80, 80, 80, 80, 80, 169, 169,
+ 169, 169, 169, 169, 169, 169, 169, 169, 169, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 217, 217, 217, 217, 217, 217, 217, 217, 217, 217,
+ 217, 221, 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 228, 228, 228, 228, 228, 228, 228, 228,
+ 228, 230, 230, 230, 230, 230, 230, 230, 230, 230,
+ 230, 230, 306, 306, 306, 306, 306, 306, 306, 306,
+ 309, 975, 974, 973, 309, 309, 972, 309, 312, 312,
+ 971, 312, 312, 312, 312, 312, 421, 970, 969, 968,
+
+ 421, 421, 421, 421, 423, 423, 423, 423, 423, 423,
+ 423, 423, 423, 423, 423, 425, 425, 967, 425, 425,
+ 425, 425, 425, 427, 966, 427, 427, 427, 427, 427,
+ 427, 427, 427, 427, 429, 965, 429, 429, 429, 429,
+ 429, 429, 429, 429, 429, 465, 964, 465, 465, 465,
+ 465, 465, 465, 465, 465, 465, 466, 963, 466, 466,
+ 467, 467, 962, 961, 467, 467, 960, 467, 467, 540,
+ 540, 540, 540, 540, 540, 540, 540, 541, 541, 541,
+ 541, 541, 541, 541, 541, 544, 544, 959, 544, 544,
+ 544, 544, 544, 545, 545, 427, 958, 427, 427, 427,
+
+ 427, 427, 427, 427, 427, 427, 429, 957, 429, 429,
+ 429, 429, 429, 429, 429, 429, 429, 465, 956, 465,
+ 465, 465, 465, 465, 465, 465, 465, 465, 466, 955,
+ 466, 466, 467, 467, 954, 953, 467, 467, 952, 467,
+ 467, 1024, 951, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
+ 1024, 1024, 1035, 950, 1035, 1035, 1035, 1035, 1035, 1035,
+ 1035, 1035, 1035, 1023, 949, 1023, 1023, 1023, 1023, 1023,
+ 1023, 1023, 1023, 1023, 1034, 948, 1034, 1034, 1034, 1034,
+ 1034, 1034, 1034, 1034, 1034, 947, 946, 945, 944, 943,
+ 942, 941, 940, 939, 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, 880,
+ 879, 878, 877, 876, 875, 874, 873, 872, 871, 870,
+ 869, 868, 865, 864, 863, 862, 861, 860, 859, 858,
+ 857, 856, 855, 854, 853, 852, 849, 848, 847, 846,
+ 845, 844, 843, 842, 841, 840, 839, 838, 837, 836,
+ 835, 834, 833, 832, 831, 830, 829, 828, 827, 826,
+
+ 825, 824, 823, 822, 821, 820, 819, 818, 817, 816,
+ 815, 814, 813, 812, 811, 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, 761, 760, 759, 758, 757, 756, 755,
+ 754, 752, 751, 750, 749, 748, 747, 746, 745, 744,
+ 743, 742, 741, 740, 739, 738, 737, 736, 735, 734,
+ 733, 732, 731, 730, 729, 728, 727, 726, 725, 724,
+
+ 723, 722, 721, 720, 719, 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, 467, 468, 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, 657, 656, 655, 654, 424,
+ 651, 650, 649, 648, 647, 646, 645, 644, 643, 642,
+ 641, 640, 639, 638, 634, 633, 632, 631, 630, 629,
+ 628, 627, 623, 622, 621, 615, 614, 613, 607, 606,
+
+ 605, 604, 603, 602, 599, 598, 597, 596, 595, 592,
+ 591, 590, 589, 587, 586, 585, 584, 582, 580, 579,
+ 578, 577, 576, 575, 574, 573, 570, 569, 568, 565,
+ 564, 560, 559, 558, 557, 552, 551, 548, 542, 305,
+ 539, 538, 537, 536, 535, 534, 533, 532, 531, 530,
+ 529, 528, 527, 526, 522, 521, 520, 519, 518, 517,
+ 516, 515, 511, 510, 509, 506, 505, 504, 498, 497,
+ 496, 495, 494, 493, 490, 489, 488, 487, 486, 483,
+ 482, 481, 480, 477, 476, 475, 474, 473, 472, 231,
+ 227, 468, 308, 305, 464, 461, 460, 459, 448, 445,
+
+ 444, 443, 325, 318, 316, 315, 428, 424, 311, 420,
+ 419, 418, 417, 416, 415, 405, 404, 389, 388, 385,
+ 360, 354, 344, 343, 342, 341, 325, 315, 314, 231,
+ 311, 227, 310, 308, 307, 231, 305, 302, 301, 300,
+ 299, 298, 297, 287, 286, 272, 271, 268, 245, 237,
+ 236, 235, 231, 229, 227, 1774, 21, 1774, 1774, 1774,
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774
+ } ;
+
+static yyconst flex_int16_t yy_chk[2940] =
+ { 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, 3, 5, 5, 5, 5, 5, 5, 100, 5,
+ 5, 5, 5, 5, 5, 5, 5, 30, 5, 5,
+
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 38,
+ 43, 43, 30, 15, 15, 16, 16, 15, 94, 16,
+ 58, 38, 45, 45, 58, 47, 801, 47, 15, 47,
+ 16, 122, 100, 94, 5, 47, 5, 5, 49, 122,
+ 50, 49, 47, 47, 50, 51, 210, 54, 52, 48,
+ 54, 52, 74, 48, 52, 51, 48, 802, 50, 210,
+ 5, 5, 5, 6, 6, 6, 6, 6, 6, 48,
+ 6, 6, 6, 6, 6, 6, 6, 6, 104, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 15, 59, 16, 57, 57, 60, 61, 121, 102, 60,
+
+ 803, 59, 60, 60, 57, 104, 61, 121, 74, 64,
+ 102, 143, 64, 64, 143, 6, 804, 6, 6, 64,
+ 64, 64, 107, 107, 64, 64, 109, 109, 123, 64,
+ 145, 124, 206, 148, 806, 124, 148, 206, 123, 124,
+ 145, 6, 6, 6, 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, 7, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+
+ 9, 9, 9, 9, 9, 9, 9, 9, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 132, 136, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 40, 40, 40, 393, 193, 112,
+ 138, 112, 807, 126, 193, 393, 112, 126, 113, 112,
+ 113, 182, 138, 40, 126, 40, 112, 112, 113, 126,
+ 11, 113, 11, 11, 146, 113, 113, 146, 136, 152,
+ 146, 151, 151, 152, 153, 346, 222, 152, 182, 132,
+ 223, 346, 151, 40, 153, 40, 11, 11, 11, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+
+ 12, 12, 12, 12, 224, 469, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 114, 114, 144, 114, 114,
+ 115, 144, 115, 686, 252, 197, 114, 223, 808, 116,
+ 115, 116, 222, 114, 114, 144, 252, 115, 115, 116,
+ 197, 12, 115, 12, 12, 155, 116, 116, 141, 154,
+ 141, 190, 141, 154, 224, 155, 154, 154, 141, 469,
+ 258, 190, 258, 809, 686, 141, 141, 12, 12, 12,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 17, 17, 17, 17, 17, 17, 350, 17,
+ 17, 17, 17, 17, 17, 17, 17, 350, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 129, 142,
+ 129, 188, 188, 142, 202, 264, 142, 275, 129, 810,
+ 189, 189, 188, 812, 202, 129, 129, 189, 331, 142,
+
+ 275, 189, 264, 191, 17, 17, 17, 17, 158, 129,
+ 331, 158, 158, 191, 202, 191, 192, 813, 158, 158,
+ 158, 814, 319, 158, 158, 191, 192, 470, 158, 192,
+ 17, 17, 17, 17, 18, 18, 18, 18, 18, 18,
+ 816, 18, 18, 18, 18, 18, 18, 18, 18, 319,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 39, 39, 39, 201, 205, 203, 232, 271, 232, 336,
+ 271, 336, 271, 201, 205, 203, 361, 470, 361, 39,
+ 271, 39, 279, 271, 655, 279, 18, 18, 18, 18,
+ 655, 279, 39, 688, 201, 203, 232, 343, 232, 288,
+
+ 343, 288, 203, 201, 817, 288, 361, 205, 361, 39,
+ 343, 39, 18, 18, 18, 18, 19, 19, 19, 39,
+ 19, 19, 818, 19, 19, 19, 19, 471, 19, 19,
+ 688, 204, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 204, 139, 139, 139, 381, 369, 326, 819, 326,
+ 327, 375, 327, 375, 545, 821, 545, 326, 369, 823,
+ 327, 139, 381, 139, 326, 326, 471, 327, 327, 392,
+ 406, 687, 406, 204, 139, 392, 406, 19, 397, 19,
+ 204, 397, 392, 19, 545, 824, 545, 397, 825, 826,
+ 827, 139, 828, 139, 19, 19, 19, 19, 20, 20,
+
+ 20, 139, 20, 20, 829, 20, 20, 20, 20, 687,
+ 20, 20, 830, 831, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 140, 140, 140, 833, 671, 834, 835,
+ 328, 836, 328, 671, 240, 240, 240, 320, 320, 320,
+ 328, 837, 140, 838, 140, 839, 840, 328, 328, 841,
+ 333, 842, 333, 240, 843, 240, 320, 844, 320, 20,
+ 333, 20, 845, 846, 847, 20, 848, 333, 333, 320,
+ 849, 850, 140, 851, 140, 855, 20, 20, 20, 20,
+ 28, 28, 28, 240, 856, 240, 320, 860, 320, 28,
+ 28, 28, 28, 28, 28, 337, 320, 337, 338, 861,
+
+ 338, 359, 338, 359, 863, 337, 864, 865, 338, 866,
+ 867, 359, 337, 337, 871, 338, 338, 872, 359, 359,
+ 28, 28, 28, 28, 28, 28, 92, 92, 92, 363,
+ 363, 363, 876, 877, 879, 92, 92, 92, 92, 92,
+ 92, 388, 880, 547, 388, 547, 388, 359, 363, 881,
+ 363, 883, 882, 547, 388, 884, 887, 388, 888, 547,
+ 547, 547, 889, 886, 892, 893, 92, 92, 92, 92,
+ 92, 92, 103, 103, 103, 894, 897, 891, 363, 886,
+ 363, 103, 103, 103, 103, 103, 103, 898, 103, 882,
+ 556, 103, 556, 103, 891, 103, 900, 556, 883, 902,
+
+ 556, 881, 903, 904, 103, 905, 906, 556, 556, 907,
+ 908, 909, 103, 103, 103, 103, 103, 103, 910, 103,
+ 911, 103, 912, 103, 913, 103, 914, 915, 916, 917,
+ 919, 103, 111, 111, 111, 920, 921, 922, 923, 925,
+ 927, 111, 111, 111, 111, 111, 111, 929, 111, 926,
+ 930, 931, 111, 932, 933, 111, 934, 935, 936, 111,
+ 111, 926, 937, 939, 111, 938, 940, 942, 943, 944,
+ 946, 948, 111, 111, 111, 111, 111, 111, 949, 111,
+ 950, 938, 951, 952, 953, 111, 954, 955, 956, 957,
+ 958, 111, 135, 135, 135, 959, 960, 961, 962, 963,
+
+ 964, 135, 135, 135, 135, 135, 135, 965, 966, 968,
+ 969, 970, 972, 973, 974, 975, 978, 979, 981, 983,
+ 984, 985, 986, 987, 988, 968, 989, 990, 991, 972,
+ 992, 993, 135, 135, 135, 135, 135, 135, 166, 166,
+ 166, 994, 995, 996, 997, 998, 999, 166, 166, 166,
+ 166, 166, 166, 1001, 1002, 1003, 1004, 1005, 1007, 1008,
+ 1009, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1020,
+ 1021, 1008, 1022, 1026, 1028, 1029, 1031, 1032, 166, 166,
+ 166, 166, 166, 166, 174, 174, 174, 1033, 1037, 1039,
+ 1041, 1042, 1043, 174, 174, 174, 174, 174, 174, 1040,
+
+ 1044, 1045, 1047, 1049, 1050, 1051, 1052, 1053, 1054, 1056,
+ 1058, 1059, 1060, 1062, 1064, 1066, 1067, 1069, 1071, 1072,
+ 1073, 1074, 1075, 1076, 174, 174, 174, 174, 174, 174,
+ 187, 187, 187, 1077, 1078, 1079, 1080, 1041, 1081, 187,
+ 187, 187, 187, 187, 187, 1082, 187, 1083, 1040, 1086,
+ 187, 1087, 1088, 187, 1089, 1090, 1091, 1092, 1094, 1095,
+ 1096, 1097, 187, 1098, 1100, 1101, 1103, 1104, 1105, 1107,
+ 187, 187, 187, 187, 187, 187, 1109, 187, 1110, 1111,
+ 1112, 1113, 1114, 187, 1115, 1116, 1117, 1118, 1119, 187,
+ 313, 313, 313, 1122, 1123, 1124, 1125, 1126, 1127, 313,
+
+ 313, 313, 313, 313, 313, 1129, 1131, 1132, 1133, 313,
+ 1135, 313, 1137, 1138, 1140, 1141, 1143, 1145, 1146, 1147,
+ 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157,
+ 313, 313, 313, 313, 313, 313, 1160, 1161, 1162, 313,
+ 1163, 313, 422, 422, 422, 1164, 1168, 1169, 1170, 1174,
+ 1175, 422, 422, 422, 422, 422, 422, 1176, 1177, 1179,
+ 1180, 422, 1181, 422, 1182, 1183, 1184, 1186, 1187, 1189,
+ 1190, 1191, 1192, 1193, 1195, 1196, 1198, 1199, 1200, 1201,
+ 1196, 1202, 422, 422, 422, 422, 422, 422, 1203, 1204,
+ 1205, 422, 1208, 422, 426, 426, 426, 1210, 1211, 1212,
+
+ 1213, 1215, 1216, 426, 426, 426, 426, 426, 426, 1217,
+ 1218, 1220, 1222, 426, 1223, 426, 1224, 1225, 1226, 1228,
+ 1229, 1230, 1232, 1233, 1234, 1235, 1237, 1238, 1239, 1240,
+ 1241, 1243, 1244, 1246, 426, 426, 426, 426, 426, 426,
+ 1247, 1248, 1249, 426, 1250, 426, 430, 430, 430, 1251,
+ 1253, 1256, 1257, 1258, 1259, 430, 430, 430, 430, 430,
+ 430, 1254, 430, 1260, 1261, 1262, 1254, 1263, 1266, 430,
+ 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 430, 1277,
+ 1278, 1280, 1281, 1282, 1283, 1284, 430, 430, 430, 430,
+ 430, 430, 1285, 430, 1286, 1287, 1289, 1290, 1291, 430,
+
+ 1292, 1293, 1294, 1295, 1297, 430, 857, 857, 1298, 857,
+ 857, 857, 1299, 857, 857, 857, 857, 857, 1300, 857,
+ 1299, 1303, 1304, 1306, 1307, 1299, 1309, 857, 857, 857,
+ 857, 857, 1310, 1311, 1314, 1315, 1316, 1317, 1318, 1321,
+ 1323, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1335,
+ 1336, 1337, 1338, 1339, 1340, 1341, 1343, 1344, 1345, 1346,
+ 1349, 857, 1356, 1358, 1359, 1360, 1345, 1361, 1362, 1363,
+ 1364, 1345, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372,
+ 1373, 1374, 1367, 1375, 857, 857, 857, 873, 873, 1376,
+ 873, 873, 873, 1377, 873, 873, 873, 873, 873, 1379,
+
+ 873, 1381, 1383, 1384, 1385, 1386, 1387, 1388, 873, 873,
+ 873, 873, 873, 1389, 1387, 1390, 1391, 1392, 1393, 1394,
+ 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404,
+ 1405, 1406, 1407, 1408, 1409, 1402, 1410, 1411, 1412, 1414,
+ 1415, 1416, 873, 1417, 1418, 1419, 1420, 1421, 1422, 1424,
+ 1427, 1428, 1429, 1430, 1432, 1433, 1434, 1435, 1436, 1437,
+ 1438, 1439, 1440, 1441, 1442, 873, 873, 873, 1024, 1024,
+ 1445, 1024, 1024, 1024, 1446, 1024, 1024, 1024, 1024, 1024,
+ 1447, 1024, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1024,
+ 1024, 1024, 1024, 1024, 1455, 1456, 1458, 1461, 1462, 1463,
+
+ 1464, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474,
+ 1475, 1476, 1477, 1478, 1479, 1480, 1482, 1483, 1484, 1485,
+ 1486, 1487, 1488, 1024, 1489, 1490, 1491, 1492, 1493, 1494,
+ 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504,
+ 1505, 1506, 1507, 1508, 1510, 1511, 1024, 1024, 1024, 1035,
+ 1035, 1512, 1035, 1035, 1035, 1513, 1035, 1035, 1035, 1035,
+ 1035, 1514, 1035, 1515, 1516, 1517, 1518, 1519, 1521, 1522,
+ 1035, 1035, 1035, 1035, 1035, 1524, 1525, 1526, 1527, 1528,
+ 1529, 1531, 1532, 1533, 1534, 1536, 1537, 1538, 1540, 1541,
+ 1542, 1543, 1544, 1545, 1546, 1548, 1549, 1551, 1552, 1553,
+
+ 1554, 1555, 1556, 1558, 1035, 1559, 1560, 1561, 1563, 1564,
+ 1565, 1567, 1568, 1566, 1569, 1570, 1572, 1566, 1574, 1575,
+ 1576, 1577, 1578, 1580, 1581, 1582, 1584, 1035, 1035, 1035,
+ 1566, 1579, 1585, 1586, 1587, 1579, 1588, 1589, 1590, 1591,
+ 1588, 1592, 1594, 1596, 1597, 1598, 1599, 1600, 1579, 1601,
+ 1602, 1603, 1604, 1588, 1605, 1606, 1607, 1611, 1612, 1614,
+ 1615, 1616, 1617, 1618, 1623, 1624, 1625, 1626, 1627, 1628,
+ 1629, 1630, 1634, 1635, 1637, 1638, 1639, 1640, 1641, 1642,
+ 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652,
+ 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1663,
+
+ 1664, 1666, 1667, 1668, 1669, 1670, 1671, 1673, 1675, 1676,
+ 1678, 1679, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688,
+ 1689, 1690, 1691, 1692, 1694, 1695, 1696, 1697, 1698, 1699,
+ 1700, 1701, 1702, 1703, 1705, 1706, 1708, 1709, 1710, 1711,
+ 1712, 1714, 1715, 1716, 1718, 1719, 1720, 1721, 1722, 1723,
+ 1724, 1725, 1726, 1728, 1729, 1731, 1732, 1733, 1734, 1736,
+ 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746,
+ 1747, 1749, 1750, 1751, 1753, 1755, 1756, 1757, 1760, 1761,
+ 1764, 1765, 1767, 1769, 1770, 1771, 1775, 1775, 1775, 1775,
+ 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1776, 1776, 1776,
+
+ 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1777, 1777,
+ 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1778,
+ 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778,
+ 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779,
+ 1779, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780,
+ 1780, 1780, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
+ 1782, 1782, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783,
+ 1784, 800, 799, 798, 1784, 1784, 796, 1784, 1785, 1785,
+ 794, 1785, 1785, 1785, 1785, 1785, 1786, 792, 791, 790,
+
+ 1786, 1786, 1786, 1786, 1787, 1787, 1787, 1787, 1787, 1787,
+ 1787, 1787, 1787, 1787, 1787, 1788, 1788, 789, 1788, 1788,
+ 1788, 1788, 1788, 1789, 787, 1789, 1789, 1789, 1789, 1789,
+ 1789, 1789, 1789, 1789, 1790, 786, 1790, 1790, 1790, 1790,
+ 1790, 1790, 1790, 1790, 1790, 1791, 785, 1791, 1791, 1791,
+ 1791, 1791, 1791, 1791, 1791, 1791, 1792, 784, 1792, 1792,
+ 1793, 1793, 783, 782, 1793, 1793, 781, 1793, 1793, 1794,
+ 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1795, 1795, 1795,
+ 1795, 1795, 1795, 1795, 1795, 1796, 1796, 780, 1796, 1796,
+ 1796, 1796, 1796, 1797, 1797, 1798, 779, 1798, 1798, 1798,
+
+ 1798, 1798, 1798, 1798, 1798, 1798, 1799, 778, 1799, 1799,
+ 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1800, 777, 1800,
+ 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1801, 776,
+ 1801, 1801, 1802, 1802, 775, 773, 1802, 1802, 772, 1802,
+ 1802, 1803, 771, 1803, 1803, 1803, 1803, 1803, 1803, 1803,
+ 1803, 1803, 1804, 769, 1804, 1804, 1804, 1804, 1804, 1804,
+ 1804, 1804, 1804, 1805, 767, 1805, 1805, 1805, 1805, 1805,
+ 1805, 1805, 1805, 1805, 1806, 766, 1806, 1806, 1806, 1806,
+ 1806, 1806, 1806, 1806, 1806, 765, 764, 763, 762, 761,
+ 759, 758, 756, 755, 754, 752, 751, 750, 749, 748,
+
+ 747, 746, 745, 744, 743, 742, 741, 740, 739, 738,
+ 737, 736, 735, 733, 732, 731, 730, 729, 728, 727,
+ 726, 725, 723, 721, 720, 719, 717, 716, 715, 713,
+ 712, 711, 710, 709, 707, 706, 705, 704, 703, 702,
+ 701, 699, 697, 695, 694, 693, 692, 691, 689, 685,
+ 684, 683, 682, 681, 680, 679, 678, 677, 676, 674,
+ 673, 672, 670, 669, 668, 667, 666, 665, 664, 663,
+ 662, 661, 660, 658, 657, 656, 654, 651, 648, 647,
+ 646, 645, 644, 643, 642, 641, 640, 639, 638, 637,
+ 636, 635, 634, 633, 632, 631, 630, 629, 628, 627,
+
+ 626, 625, 624, 623, 621, 618, 617, 616, 615, 614,
+ 613, 612, 611, 610, 609, 608, 606, 605, 604, 603,
+ 602, 601, 600, 599, 598, 597, 596, 595, 594, 593,
+ 592, 591, 590, 589, 588, 587, 586, 585, 584, 582,
+ 581, 580, 579, 578, 577, 576, 575, 574, 573, 572,
+ 571, 570, 567, 566, 565, 564, 563, 562, 561, 560,
+ 559, 558, 557, 555, 554, 553, 552, 551, 550, 549,
+ 548, 546, 542, 539, 536, 535, 534, 533, 532, 531,
+ 530, 529, 528, 527, 526, 525, 524, 523, 522, 521,
+ 520, 519, 518, 517, 516, 515, 514, 513, 512, 511,
+
+ 510, 508, 507, 506, 505, 504, 503, 502, 501, 500,
+ 499, 497, 496, 495, 494, 493, 492, 491, 490, 489,
+ 488, 487, 486, 485, 484, 483, 482, 481, 480, 479,
+ 478, 477, 476, 475, 474, 468, 467, 464, 463, 462,
+ 461, 460, 459, 458, 457, 456, 455, 454, 453, 452,
+ 451, 450, 449, 448, 447, 446, 445, 444, 443, 442,
+ 441, 440, 439, 438, 437, 436, 435, 434, 431, 423,
+ 420, 419, 418, 417, 416, 415, 414, 413, 412, 411,
+ 410, 409, 408, 407, 405, 404, 403, 402, 401, 400,
+ 399, 398, 396, 395, 394, 391, 390, 389, 387, 386,
+
+ 385, 384, 383, 382, 380, 379, 378, 377, 376, 374,
+ 373, 372, 371, 368, 367, 366, 365, 360, 358, 357,
+ 356, 355, 354, 353, 352, 351, 349, 348, 347, 345,
+ 344, 342, 341, 340, 339, 335, 334, 330, 310, 305,
+ 302, 301, 300, 299, 298, 297, 296, 295, 294, 293,
+ 292, 291, 290, 289, 287, 286, 285, 284, 283, 282,
+ 281, 280, 278, 277, 276, 274, 273, 272, 270, 269,
+ 268, 267, 266, 265, 263, 262, 261, 260, 259, 257,
+ 256, 255, 254, 251, 250, 249, 248, 247, 243, 230,
+ 227, 221, 215, 213, 211, 209, 208, 207, 198, 196,
+
+ 195, 194, 185, 180, 178, 176, 175, 173, 172, 164,
+ 163, 162, 161, 160, 159, 157, 156, 150, 149, 147,
+ 130, 125, 120, 119, 118, 117, 108, 98, 97, 91,
+ 90, 89, 87, 85, 84, 79, 77, 72, 71, 70,
+ 69, 66, 65, 63, 62, 56, 55, 53, 44, 36,
+ 34, 33, 27, 26, 24, 21, 1774, 1774, 1774, 1774,
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+ 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774
+ } ;
+
+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 4 "ldlex.l"
+
+/* Copyright (C) 1991-2017 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 "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. */
+unsigned int lineno;
+
+/* 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)
+
+#ifndef YY_NO_UNPUT
+#define YY_NO_UNPUT
+#endif
+
+#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 sysrooted_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
+ INPUTLIST definitely in a script, a filename-list
+ 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; }
+
+
+
+
+
+
+
+
+
+
+#line 1790 "ldlex.c"
+
+#define INITIAL 0
+#define SCRIPT 1
+#define INPUTLIST 2
+#define EXPRESSION 3
+#define BOTH 4
+#define DEFSYMEXP 5
+#define MRI 6
+#define VERS_START 7
+#define VERS_SCRIPT 8
+#define VERS_NODE 9
+
+#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
+
+#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 116 "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 1998 "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 >= 1775 )
+ 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] != 2857 );
+
+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 134 "ldlex.l"
+{ comment (); }
+ YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 137 "ldlex.l"
+{ RTOKEN('-');}
+ YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 138 "ldlex.l"
+{ RTOKEN('+');}
+ YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 139 "ldlex.l"
+{ yylval.name = xstrdup (yytext); return NAME; }
+ YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 140 "ldlex.l"
+{ RTOKEN('='); }
+ YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 142 "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 148 "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 173 "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 202 "ldlex.l"
+{ RTOKEN(']');}
+ YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 203 "ldlex.l"
+{ RTOKEN('[');}
+ YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 204 "ldlex.l"
+{ RTOKEN(LSHIFTEQ);}
+ YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 205 "ldlex.l"
+{ RTOKEN(RSHIFTEQ);}
+ YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 206 "ldlex.l"
+{ RTOKEN(OROR);}
+ YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 207 "ldlex.l"
+{ RTOKEN(EQ);}
+ YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 208 "ldlex.l"
+{ RTOKEN(NE);}
+ YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 209 "ldlex.l"
+{ RTOKEN(GE);}
+ YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 210 "ldlex.l"
+{ RTOKEN(LE);}
+ YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 211 "ldlex.l"
+{ RTOKEN(LSHIFT);}
+ YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 212 "ldlex.l"
+{ RTOKEN(RSHIFT);}
+ YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 213 "ldlex.l"
+{ RTOKEN(PLUSEQ);}
+ YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 214 "ldlex.l"
+{ RTOKEN(MINUSEQ);}
+ YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 215 "ldlex.l"
+{ RTOKEN(MULTEQ);}
+ YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 216 "ldlex.l"
+{ RTOKEN(DIVEQ);}
+ YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 217 "ldlex.l"
+{ RTOKEN(ANDEQ);}
+ YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 218 "ldlex.l"
+{ RTOKEN(OREQ);}
+ YY_BREAK
+case 26:
+YY_RULE_SETUP
+#line 219 "ldlex.l"
+{ RTOKEN(ANDAND);}
+ YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 220 "ldlex.l"
+{ RTOKEN('>');}
+ YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 221 "ldlex.l"
+{ RTOKEN(',');}
+ YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 222 "ldlex.l"
+{ RTOKEN('&');}
+ YY_BREAK
+case 30:
+YY_RULE_SETUP
+#line 223 "ldlex.l"
+{ RTOKEN('|');}
+ YY_BREAK
+case 31:
+YY_RULE_SETUP
+#line 224 "ldlex.l"
+{ RTOKEN('~');}
+ YY_BREAK
+case 32:
+YY_RULE_SETUP
+#line 225 "ldlex.l"
+{ RTOKEN('!');}
+ YY_BREAK
+case 33:
+YY_RULE_SETUP
+#line 226 "ldlex.l"
+{ RTOKEN('?');}
+ YY_BREAK
+case 34:
+YY_RULE_SETUP
+#line 227 "ldlex.l"
+{ RTOKEN('*');}
+ YY_BREAK
+case 35:
+YY_RULE_SETUP
+#line 228 "ldlex.l"
+{ RTOKEN('+');}
+ YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 229 "ldlex.l"
+{ RTOKEN('-');}
+ YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 230 "ldlex.l"
+{ RTOKEN('/');}
+ YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 231 "ldlex.l"
+{ RTOKEN('%');}
+ YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 232 "ldlex.l"
+{ RTOKEN('<');}
+ YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 233 "ldlex.l"
+{ RTOKEN('=');}
+ YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 234 "ldlex.l"
+{ RTOKEN('}') ; }
+ YY_BREAK
+case 42:
+YY_RULE_SETUP
+#line 235 "ldlex.l"
+{ RTOKEN('{'); }
+ YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 236 "ldlex.l"
+{ RTOKEN(')');}
+ YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 237 "ldlex.l"
+{ RTOKEN('(');}
+ YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 238 "ldlex.l"
+{ RTOKEN(':'); }
+ YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 239 "ldlex.l"
+{ RTOKEN(';');}
+ YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 240 "ldlex.l"
+{ RTOKEN(MEMORY);}
+ YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 241 "ldlex.l"
+{ RTOKEN(REGION_ALIAS);}
+ YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 242 "ldlex.l"
+{ RTOKEN(LD_FEATURE);}
+ YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 243 "ldlex.l"
+{ RTOKEN(ORIGIN);}
+ YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 244 "ldlex.l"
+{ RTOKEN(VERSIONK);}
+ YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 245 "ldlex.l"
+{ RTOKEN(BLOCK);}
+ YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 246 "ldlex.l"
+{ RTOKEN(BIND);}
+ YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 247 "ldlex.l"
+{ RTOKEN(LENGTH);}
+ YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 248 "ldlex.l"
+{ RTOKEN(ALIGN_K);}
+ YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 249 "ldlex.l"
+{ RTOKEN(DATA_SEGMENT_ALIGN);}
+ YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 250 "ldlex.l"
+{ RTOKEN(DATA_SEGMENT_RELRO_END);}
+ YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 251 "ldlex.l"
+{ RTOKEN(DATA_SEGMENT_END);}
+ YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 252 "ldlex.l"
+{ RTOKEN(ADDR);}
+ YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 253 "ldlex.l"
+{ RTOKEN(LOADADDR);}
+ YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 254 "ldlex.l"
+{ RTOKEN(ALIGNOF); }
+ YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 255 "ldlex.l"
+{ RTOKEN(MAX_K); }
+ YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 256 "ldlex.l"
+{ RTOKEN(MIN_K); }
+ YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 257 "ldlex.l"
+{ RTOKEN(LOG2CEIL); }
+ YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 258 "ldlex.l"
+{ RTOKEN(ASSERT_K); }
+ YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 259 "ldlex.l"
+{ RTOKEN(ENTRY);}
+ YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 260 "ldlex.l"
+{ RTOKEN(EXTERN);}
+ YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 261 "ldlex.l"
+{ RTOKEN(NEXT);}
+ YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 262 "ldlex.l"
+{ RTOKEN(SIZEOF_HEADERS);}
+ YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 263 "ldlex.l"
+{ RTOKEN(SIZEOF_HEADERS);}
+ YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 264 "ldlex.l"
+{ RTOKEN(SEGMENT_START);}
+ YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 265 "ldlex.l"
+{ RTOKEN(MAP);}
+ YY_BREAK
+case 73:
+YY_RULE_SETUP
+#line 266 "ldlex.l"
+{ RTOKEN(SIZEOF);}
+ YY_BREAK
+case 74:
+YY_RULE_SETUP
+#line 267 "ldlex.l"
+{ RTOKEN(TARGET_K);}
+ YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 268 "ldlex.l"
+{ RTOKEN(SEARCH_DIR);}
+ YY_BREAK
+case 76:
+YY_RULE_SETUP
+#line 269 "ldlex.l"
+{ RTOKEN(OUTPUT);}
+ YY_BREAK
+case 77:
+YY_RULE_SETUP
+#line 270 "ldlex.l"
+{ RTOKEN(INPUT);}
+ YY_BREAK
+case 78:
+YY_RULE_SETUP
+#line 271 "ldlex.l"
+{ RTOKEN(GROUP);}
+ YY_BREAK
+case 79:
+YY_RULE_SETUP
+#line 272 "ldlex.l"
+{ RTOKEN(AS_NEEDED);}
+ YY_BREAK
+case 80:
+YY_RULE_SETUP
+#line 273 "ldlex.l"
+{ RTOKEN(DEFINED);}
+ YY_BREAK
+case 81:
+YY_RULE_SETUP
+#line 274 "ldlex.l"
+{ RTOKEN(CREATE_OBJECT_SYMBOLS);}
+ YY_BREAK
+case 82:
+YY_RULE_SETUP
+#line 275 "ldlex.l"
+{ RTOKEN( CONSTRUCTORS);}
+ YY_BREAK
+case 83:
+YY_RULE_SETUP
+#line 276 "ldlex.l"
+{ RTOKEN(FORCE_COMMON_ALLOCATION);}
+ YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 277 "ldlex.l"
+{ RTOKEN(INHIBIT_COMMON_ALLOCATION);}
+ YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 278 "ldlex.l"
+{ RTOKEN(SECTIONS);}
+ YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 279 "ldlex.l"
+{ RTOKEN(INSERT_K);}
+ YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 280 "ldlex.l"
+{ RTOKEN(AFTER);}
+ YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 281 "ldlex.l"
+{ RTOKEN(BEFORE);}
+ YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 282 "ldlex.l"
+{ RTOKEN(FILL);}
+ YY_BREAK
+case 90:
+YY_RULE_SETUP
+#line 283 "ldlex.l"
+{ RTOKEN(STARTUP);}
+ YY_BREAK
+case 91:
+YY_RULE_SETUP
+#line 284 "ldlex.l"
+{ RTOKEN(OUTPUT_FORMAT);}
+ YY_BREAK
+case 92:
+YY_RULE_SETUP
+#line 285 "ldlex.l"
+{ RTOKEN( OUTPUT_ARCH);}
+ YY_BREAK
+case 93:
+YY_RULE_SETUP
+#line 286 "ldlex.l"
+{ RTOKEN(HLL);}
+ YY_BREAK
+case 94:
+YY_RULE_SETUP
+#line 287 "ldlex.l"
+{ RTOKEN(SYSLIB);}
+ YY_BREAK
+case 95:
+YY_RULE_SETUP
+#line 288 "ldlex.l"
+{ RTOKEN(FLOAT);}
+ YY_BREAK
+case 96:
+YY_RULE_SETUP
+#line 289 "ldlex.l"
+{ RTOKEN( QUAD);}
+ YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 290 "ldlex.l"
+{ RTOKEN( SQUAD);}
+ YY_BREAK
+case 98:
+YY_RULE_SETUP
+#line 291 "ldlex.l"
+{ RTOKEN( LONG);}
+ YY_BREAK
+case 99:
+YY_RULE_SETUP
+#line 292 "ldlex.l"
+{ RTOKEN( SHORT);}
+ YY_BREAK
+case 100:
+YY_RULE_SETUP
+#line 293 "ldlex.l"
+{ RTOKEN( BYTE);}
+ YY_BREAK
+case 101:
+YY_RULE_SETUP
+#line 294 "ldlex.l"
+{ RTOKEN(NOFLOAT);}
+ YY_BREAK
+case 102:
+YY_RULE_SETUP
+#line 295 "ldlex.l"
+{ RTOKEN(NOCROSSREFS);}
+ YY_BREAK
+case 103:
+YY_RULE_SETUP
+#line 296 "ldlex.l"
+{ RTOKEN(NOCROSSREFS_TO);}
+ YY_BREAK
+case 104:
+YY_RULE_SETUP
+#line 297 "ldlex.l"
+{ RTOKEN(OVERLAY); }
+ YY_BREAK
+case 105:
+YY_RULE_SETUP
+#line 298 "ldlex.l"
+{ RTOKEN(SORT_BY_NAME); }
+ YY_BREAK
+case 106:
+YY_RULE_SETUP
+#line 299 "ldlex.l"
+{ RTOKEN(SORT_BY_ALIGNMENT); }
+ YY_BREAK
+case 107:
+YY_RULE_SETUP
+#line 300 "ldlex.l"
+{ RTOKEN(SORT_BY_NAME); }
+ YY_BREAK
+case 108:
+YY_RULE_SETUP
+#line 301 "ldlex.l"
+{ RTOKEN(SORT_BY_INIT_PRIORITY); }
+ YY_BREAK
+case 109:
+YY_RULE_SETUP
+#line 302 "ldlex.l"
+{ RTOKEN(SORT_NONE); }
+ YY_BREAK
+case 110:
+YY_RULE_SETUP
+#line 303 "ldlex.l"
+{ RTOKEN(NOLOAD);}
+ YY_BREAK
+case 111:
+YY_RULE_SETUP
+#line 304 "ldlex.l"
+{ RTOKEN(DSECT);}
+ YY_BREAK
+case 112:
+YY_RULE_SETUP
+#line 305 "ldlex.l"
+{ RTOKEN(COPY);}
+ YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 306 "ldlex.l"
+{ RTOKEN(INFO);}
+ YY_BREAK
+case 114:
+YY_RULE_SETUP
+#line 307 "ldlex.l"
+{ RTOKEN(OVERLAY);}
+ YY_BREAK
+case 115:
+YY_RULE_SETUP
+#line 308 "ldlex.l"
+{ RTOKEN(ONLY_IF_RO); }
+ YY_BREAK
+case 116:
+YY_RULE_SETUP
+#line 309 "ldlex.l"
+{ RTOKEN(ONLY_IF_RW); }
+ YY_BREAK
+case 117:
+YY_RULE_SETUP
+#line 310 "ldlex.l"
+{ RTOKEN(SPECIAL); }
+ YY_BREAK
+case 118:
+YY_RULE_SETUP
+#line 311 "ldlex.l"
+{ RTOKEN(ORIGIN);}
+ YY_BREAK
+case 119:
+YY_RULE_SETUP
+#line 312 "ldlex.l"
+{ RTOKEN(ORIGIN);}
+ YY_BREAK
+case 120:
+YY_RULE_SETUP
+#line 313 "ldlex.l"
+{ RTOKEN( LENGTH);}
+ YY_BREAK
+case 121:
+YY_RULE_SETUP
+#line 314 "ldlex.l"
+{ RTOKEN( LENGTH);}
+ YY_BREAK
+case 122:
+YY_RULE_SETUP
+#line 315 "ldlex.l"
+{ RTOKEN(INPUT_SECTION_FLAGS); }
+ YY_BREAK
+case 123:
+YY_RULE_SETUP
+#line 316 "ldlex.l"
+{ RTOKEN(INCLUDE);}
+ YY_BREAK
+case 124:
+YY_RULE_SETUP
+#line 317 "ldlex.l"
+{ RTOKEN (PHDRS); }
+ YY_BREAK
+case 125:
+YY_RULE_SETUP
+#line 318 "ldlex.l"
+{ RTOKEN(AT);}
+ YY_BREAK
+case 126:
+YY_RULE_SETUP
+#line 319 "ldlex.l"
+{ RTOKEN(ALIGN_WITH_INPUT);}
+ YY_BREAK
+case 127:
+YY_RULE_SETUP
+#line 320 "ldlex.l"
+{ RTOKEN(SUBALIGN);}
+ YY_BREAK
+case 128:
+YY_RULE_SETUP
+#line 321 "ldlex.l"
+{ RTOKEN(HIDDEN); }
+ YY_BREAK
+case 129:
+YY_RULE_SETUP
+#line 322 "ldlex.l"
+{ RTOKEN(PROVIDE); }
+ YY_BREAK
+case 130:
+YY_RULE_SETUP
+#line 323 "ldlex.l"
+{ RTOKEN(PROVIDE_HIDDEN); }
+ YY_BREAK
+case 131:
+YY_RULE_SETUP
+#line 324 "ldlex.l"
+{ RTOKEN(KEEP); }
+ YY_BREAK
+case 132:
+YY_RULE_SETUP
+#line 325 "ldlex.l"
+{ RTOKEN(EXCLUDE_FILE); }
+ YY_BREAK
+case 133:
+YY_RULE_SETUP
+#line 326 "ldlex.l"
+{ RTOKEN(CONSTANT);}
+ YY_BREAK
+case 134:
+/* rule 134 can match eol */
+YY_RULE_SETUP
+#line 327 "ldlex.l"
+{ ++ lineno; }
+ YY_BREAK
+case 135:
+/* rule 135 can match eol */
+YY_RULE_SETUP
+#line 328 "ldlex.l"
+{ ++ lineno; RTOKEN(NEWLINE); }
+ YY_BREAK
+case 136:
+YY_RULE_SETUP
+#line 329 "ldlex.l"
+{ /* Mri comment line */ }
+ YY_BREAK
+case 137:
+YY_RULE_SETUP
+#line 330 "ldlex.l"
+{ /* Mri comment line */ }
+ YY_BREAK
+case 138:
+YY_RULE_SETUP
+#line 331 "ldlex.l"
+{ RTOKEN(ENDWORD); }
+ YY_BREAK
+case 139:
+YY_RULE_SETUP
+#line 332 "ldlex.l"
+{ RTOKEN(ALIGNMOD);}
+ YY_BREAK
+case 140:
+YY_RULE_SETUP
+#line 333 "ldlex.l"
+{ RTOKEN(ALIGN_K);}
+ YY_BREAK
+case 141:
+YY_RULE_SETUP
+#line 334 "ldlex.l"
+{ RTOKEN(CHIP); }
+ YY_BREAK
+case 142:
+YY_RULE_SETUP
+#line 335 "ldlex.l"
+{ RTOKEN(BASE); }
+ YY_BREAK
+case 143:
+YY_RULE_SETUP
+#line 336 "ldlex.l"
+{ RTOKEN(ALIAS); }
+ YY_BREAK
+case 144:
+YY_RULE_SETUP
+#line 337 "ldlex.l"
+{ RTOKEN(TRUNCATE); }
+ YY_BREAK
+case 145:
+YY_RULE_SETUP
+#line 338 "ldlex.l"
+{ RTOKEN(LOAD); }
+ YY_BREAK
+case 146:
+YY_RULE_SETUP
+#line 339 "ldlex.l"
+{ RTOKEN(PUBLIC); }
+ YY_BREAK
+case 147:
+YY_RULE_SETUP
+#line 340 "ldlex.l"
+{ RTOKEN(ORDER); }
+ YY_BREAK
+case 148:
+YY_RULE_SETUP
+#line 341 "ldlex.l"
+{ RTOKEN(NAMEWORD); }
+ YY_BREAK
+case 149:
+YY_RULE_SETUP
+#line 342 "ldlex.l"
+{ RTOKEN(FORMAT); }
+ YY_BREAK
+case 150:
+YY_RULE_SETUP
+#line 343 "ldlex.l"
+{ RTOKEN(CASE); }
+ YY_BREAK
+case 151:
+YY_RULE_SETUP
+#line 344 "ldlex.l"
+{ RTOKEN(START); }
+ YY_BREAK
+case 152:
+YY_RULE_SETUP
+#line 345 "ldlex.l"
+{ RTOKEN(LIST); /* LIST and ignore to end of line */ }
+ YY_BREAK
+case 153:
+YY_RULE_SETUP
+#line 346 "ldlex.l"
+{ RTOKEN(SECT); }
+ YY_BREAK
+case 154:
+YY_RULE_SETUP
+#line 347 "ldlex.l"
+{ RTOKEN(ABSOLUTE); }
+ YY_BREAK
+case 155:
+YY_RULE_SETUP
+#line 348 "ldlex.l"
+{ RTOKEN(ENDWORD); }
+ YY_BREAK
+case 156:
+YY_RULE_SETUP
+#line 349 "ldlex.l"
+{ RTOKEN(ALIGNMOD);}
+ YY_BREAK
+case 157:
+YY_RULE_SETUP
+#line 350 "ldlex.l"
+{ RTOKEN(ALIGN_K);}
+ YY_BREAK
+case 158:
+YY_RULE_SETUP
+#line 351 "ldlex.l"
+{ RTOKEN(CHIP); }
+ YY_BREAK
+case 159:
+YY_RULE_SETUP
+#line 352 "ldlex.l"
+{ RTOKEN(BASE); }
+ YY_BREAK
+case 160:
+YY_RULE_SETUP
+#line 353 "ldlex.l"
+{ RTOKEN(ALIAS); }
+ YY_BREAK
+case 161:
+YY_RULE_SETUP
+#line 354 "ldlex.l"
+{ RTOKEN(TRUNCATE); }
+ YY_BREAK
+case 162:
+YY_RULE_SETUP
+#line 355 "ldlex.l"
+{ RTOKEN(LOAD); }
+ YY_BREAK
+case 163:
+YY_RULE_SETUP
+#line 356 "ldlex.l"
+{ RTOKEN(PUBLIC); }
+ YY_BREAK
+case 164:
+YY_RULE_SETUP
+#line 357 "ldlex.l"
+{ RTOKEN(ORDER); }
+ YY_BREAK
+case 165:
+YY_RULE_SETUP
+#line 358 "ldlex.l"
+{ RTOKEN(NAMEWORD); }
+ YY_BREAK
+case 166:
+YY_RULE_SETUP
+#line 359 "ldlex.l"
+{ RTOKEN(FORMAT); }
+ YY_BREAK
+case 167:
+YY_RULE_SETUP
+#line 360 "ldlex.l"
+{ RTOKEN(CASE); }
+ YY_BREAK
+case 168:
+YY_RULE_SETUP
+#line 361 "ldlex.l"
+{ RTOKEN(EXTERN); }
+ YY_BREAK
+case 169:
+YY_RULE_SETUP
+#line 362 "ldlex.l"
+{ RTOKEN(START); }
+ YY_BREAK
+case 170:
+YY_RULE_SETUP
+#line 363 "ldlex.l"
+{ RTOKEN(LIST); /* LIST and ignore to end of line */ }
+ YY_BREAK
+case 171:
+YY_RULE_SETUP
+#line 364 "ldlex.l"
+{ RTOKEN(SECT); }
+ YY_BREAK
+case 172:
+YY_RULE_SETUP
+#line 365 "ldlex.l"
+{ RTOKEN(ABSOLUTE); }
+ YY_BREAK
+case 173:
+YY_RULE_SETUP
+#line 367 "ldlex.l"
+{
+/* Filename without commas, needed to parse mri stuff */
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+ YY_BREAK
+case 174:
+YY_RULE_SETUP
+#line 374 "ldlex.l"
+{
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+ YY_BREAK
+case 175:
+YY_RULE_SETUP
+#line 378 "ldlex.l"
+{
+/* Filename to be prefixed by --sysroot or when non-sysrooted, nothing. */
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+ YY_BREAK
+case 176:
+YY_RULE_SETUP
+#line 383 "ldlex.l"
+{
+ yylval.name = xstrdup (yytext + 2);
+ return LNAME;
+ }
+ YY_BREAK
+case 177:
+YY_RULE_SETUP
+#line 387 "ldlex.l"
+{
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+ YY_BREAK
+case 178:
+YY_RULE_SETUP
+#line 391 "ldlex.l"
+{
+ yylval.name = xstrdup (yytext + 2);
+ return LNAME;
+ }
+ YY_BREAK
+case 179:
+YY_RULE_SETUP
+#line 395 "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 180:
+/* rule 180 can match eol */
+YY_RULE_SETUP
+#line 412 "ldlex.l"
+{
+ /* No matter the state, quotes
+ give what's inside. */
+ bfd_size_type len;
+ yylval.name = xstrdup (yytext + 1);
+ /* PR ld/20906. A corrupt input file
+ can contain bogus strings. */
+ len = strlen (yylval.name);
+ if (len > yyleng - 2)
+ len = yyleng - 2;
+ yylval.name[len] = 0;
+ return NAME;
+ }
+ YY_BREAK
+case 181:
+/* rule 181 can match eol */
+YY_RULE_SETUP
+#line 425 "ldlex.l"
+{ lineno++;}
+ YY_BREAK
+case 182:
+YY_RULE_SETUP
+#line 426 "ldlex.l"
+{ }
+ YY_BREAK
+case 183:
+YY_RULE_SETUP
+#line 428 "ldlex.l"
+{ return *yytext; }
+ YY_BREAK
+case 184:
+YY_RULE_SETUP
+#line 430 "ldlex.l"
+{ RTOKEN(GLOBAL); }
+ YY_BREAK
+case 185:
+YY_RULE_SETUP
+#line 432 "ldlex.l"
+{ RTOKEN(LOCAL); }
+ YY_BREAK
+case 186:
+YY_RULE_SETUP
+#line 434 "ldlex.l"
+{ RTOKEN(EXTERN); }
+ YY_BREAK
+case 187:
+YY_RULE_SETUP
+#line 436 "ldlex.l"
+{ yylval.name = xstrdup (yytext);
+ return VERS_IDENTIFIER; }
+ YY_BREAK
+case 188:
+YY_RULE_SETUP
+#line 439 "ldlex.l"
+{ yylval.name = xstrdup (yytext);
+ return VERS_TAG; }
+ YY_BREAK
+case 189:
+YY_RULE_SETUP
+#line 442 "ldlex.l"
+{ BEGIN(VERS_SCRIPT); return *yytext; }
+ YY_BREAK
+case 190:
+YY_RULE_SETUP
+#line 444 "ldlex.l"
+{ BEGIN(VERS_NODE);
+ vers_node_nesting = 0;
+ return *yytext;
+ }
+ YY_BREAK
+case 191:
+YY_RULE_SETUP
+#line 448 "ldlex.l"
+{ return *yytext; }
+ YY_BREAK
+case 192:
+YY_RULE_SETUP
+#line 449 "ldlex.l"
+{ vers_node_nesting++; return *yytext; }
+ YY_BREAK
+case 193:
+YY_RULE_SETUP
+#line 450 "ldlex.l"
+{ if (--vers_node_nesting < 0)
+ BEGIN(VERS_SCRIPT);
+ return *yytext;
+ }
+ YY_BREAK
+case 194:
+/* rule 194 can match eol */
+YY_RULE_SETUP
+#line 455 "ldlex.l"
+{ lineno++; }
+ YY_BREAK
+case 195:
+YY_RULE_SETUP
+#line 457 "ldlex.l"
+{ /* Eat up comments */ }
+ YY_BREAK
+case 196:
+YY_RULE_SETUP
+#line 459 "ldlex.l"
+{ /* Eat up whitespace */ }
+ YY_BREAK
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(SCRIPT):
+case YY_STATE_EOF(INPUTLIST):
+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 461 "ldlex.l"
+{
+ include_stack_ptr--;
+ if (include_stack_ptr == 0)
+ {
+ lineno = 0;
+ yyterminate ();
+ }
+ else
+ yy_switch_to_buffer (include_stack[include_stack_ptr]);
+
+ lineno = lineno_stack[include_stack_ptr];
+ input_flags.sysrooted = sysrooted_stack[include_stack_ptr];
+
+ return END;
+}
+ YY_BREAK
+case 197:
+YY_RULE_SETUP
+#line 477 "ldlex.l"
+lex_warn_invalid (" in script", yytext);
+ YY_BREAK
+case 198:
+YY_RULE_SETUP
+#line 478 "ldlex.l"
+lex_warn_invalid (" in expression", yytext);
+ YY_BREAK
+case 199:
+YY_RULE_SETUP
+#line 480 "ldlex.l"
+ECHO;
+ YY_BREAK
+#line 3219 "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 >= 1775 )
+ 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 >= 1775 )
+ 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 == 1774);
+
+ return yy_is_jam ? 0 : yy_current_state;
+}
+
+#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 480 "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, unsigned int sysrooted)
+{
+ 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;
+ sysrooted_stack[include_stack_ptr] = input_flags.sysrooted;
+ include_stack[include_stack_ptr] = YY_CURRENT_BUFFER;
+
+ include_stack_ptr++;
+ lineno = 1;
+ input_flags.sysrooted = sysrooted;
+ 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, const char *fake_filename, unsigned int count)
+{
+ 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] = fake_filename;
+ lineno_stack[include_stack_ptr] = lineno;
+ include_stack[include_stack_ptr] = YY_CURRENT_BUFFER;
+ include_stack_ptr++;
+ lineno = count;
+ 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_inputlist (void)
+{
+ *(state_stack_p)++ = yy_start;
+ BEGIN (INPUTLIST);
+}
+
+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);
+}
+
+/* Return the current file name, or the previous file if no file is
+ current. */
+
+const char*
+ldlex_filename (void)
+{
+ return file_name_stack[include_stack_ptr - (include_stack_ptr != 0)];
+}
+
+
+/* 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", ldlex_filename ());
+ }
+
+ if (! ISPRINT (*what))
+ {
+ sprintf (buf, "\\%03o", *(unsigned char *) what);
+ what = buf;
+ }
+
+ einfo ("%P:%S: ignoring invalid character `%s'%s\n", NULL, what, where);
+}
+
diff --git a/ld/po/bg.gmo b/ld/po/bg.gmo
new file mode 100644
index 0000000..e187f8f
--- /dev/null
+++ b/ld/po/bg.gmo
Binary files differ
diff --git a/ld/po/da.gmo b/ld/po/da.gmo
new file mode 100644
index 0000000..f54a23f
--- /dev/null
+++ b/ld/po/da.gmo
Binary files differ
diff --git a/ld/po/es.gmo b/ld/po/es.gmo
new file mode 100644
index 0000000..feea374
--- /dev/null
+++ b/ld/po/es.gmo
Binary files differ
diff --git a/ld/po/fi.gmo b/ld/po/fi.gmo
new file mode 100644
index 0000000..d1b25bb
--- /dev/null
+++ b/ld/po/fi.gmo
Binary files differ
diff --git a/ld/po/fr.gmo b/ld/po/fr.gmo
new file mode 100644
index 0000000..b59a5cc
--- /dev/null
+++ b/ld/po/fr.gmo
Binary files differ
diff --git a/ld/po/ga.gmo b/ld/po/ga.gmo
new file mode 100644
index 0000000..b308044
--- /dev/null
+++ b/ld/po/ga.gmo
Binary files differ
diff --git a/ld/po/id.gmo b/ld/po/id.gmo
new file mode 100644
index 0000000..155f607
--- /dev/null
+++ b/ld/po/id.gmo
Binary files differ
diff --git a/ld/po/it.gmo b/ld/po/it.gmo
new file mode 100644
index 0000000..e6cb2dd
--- /dev/null
+++ b/ld/po/it.gmo
Binary files differ
diff --git a/ld/po/ja.gmo b/ld/po/ja.gmo
new file mode 100644
index 0000000..703df64
--- /dev/null
+++ b/ld/po/ja.gmo
Binary files differ
diff --git a/ld/po/sv.gmo b/ld/po/sv.gmo
new file mode 100644
index 0000000..f7038a8
--- /dev/null
+++ b/ld/po/sv.gmo
Binary files differ
diff --git a/ld/po/tr.gmo b/ld/po/tr.gmo
new file mode 100644
index 0000000..96d567b
--- /dev/null
+++ b/ld/po/tr.gmo
Binary files differ
diff --git a/ld/po/uk.gmo b/ld/po/uk.gmo
new file mode 100644
index 0000000..231915b
--- /dev/null
+++ b/ld/po/uk.gmo
Binary files differ
diff --git a/ld/po/vi.gmo b/ld/po/vi.gmo
new file mode 100644
index 0000000..fce15ce
--- /dev/null
+++ b/ld/po/vi.gmo
Binary files differ
diff --git a/ld/po/zh_CN.gmo b/ld/po/zh_CN.gmo
new file mode 100644
index 0000000..e658ce3
--- /dev/null
+++ b/ld/po/zh_CN.gmo
Binary files differ
diff --git a/ld/po/zh_TW.gmo b/ld/po/zh_TW.gmo
new file mode 100644
index 0000000..02b9942
--- /dev/null
+++ b/ld/po/zh_TW.gmo
Binary files differ