summaryrefslogtreecommitdiffstats
path: root/upstream/opensuse-leap-15-6/man1/ld.1
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/opensuse-leap-15-6/man1/ld.1')
-rw-r--r--upstream/opensuse-leap-15-6/man1/ld.13488
1 files changed, 3488 insertions, 0 deletions
diff --git a/upstream/opensuse-leap-15-6/man1/ld.1 b/upstream/opensuse-leap-15-6/man1/ld.1
new file mode 100644
index 00000000..69069c16
--- /dev/null
+++ b/upstream/opensuse-leap-15-6/man1/ld.1
@@ -0,0 +1,3488 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
+.\"
+.\" 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
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. 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 >0, 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
+.\" ========================================================================
+.\"
+.IX Title "LD 1"
+.TH LD 1 2023-07-30 binutils-2.41 "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 AT&T'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 GNU linker.
+.PP
+This version of \fBld\fR uses the general purpose BFD libraries
+to operate on object files. This allows \fBld\fR to read, combine, and
+write object files in many different formats\-\-\-for example, COFF 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 GNU 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 GNU 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 NMAGIC 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 GNU
+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 HP/UX 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 \fIAUDITLIB\fR" 4
+.IX Item "--audit AUDITLIB"
+Adds \fIAUDITLIB\fR to the \f(CW\*(C`DT_AUDIT\*(C'\fR entry of the dynamic section.
+\&\fIAUDITLIB\fR is not checked for existence, nor will it use the DT_SONAME
+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 ELF platforms supporting the rtld-audit
+interface.
+.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 BFD 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 MRI, \fBld\fR accepts script
+files written in an alternate, restricted command language, described in
+the MRI Compatible Script Files section of GNU ld documentation.
+Introduce MRI 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 \fIAUDITLIB\fR" 4
+.IX Item "--depaudit AUDITLIB"
+.PD 0
+.IP "\fB\-P\fR \fIAUDITLIB\fR" 4
+.IX Item "-P AUDITLIB"
+.PD
+Adds \fIAUDITLIB\fR to the \f(CW\*(C`DT_DEPAUDIT\*(C'\fR entry of the dynamic section.
+\&\fIAUDITLIB\fR is not checked for existence, nor will it use the DT_SONAME
+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 ELF platforms supporting the rtld-audit interface.
+The \-P option is provided for Solaris compatibility.
+.IP \fB\-\-enable\-linker\-version\fR 4
+.IX Item "--enable-linker-version"
+Enables the \f(CW\*(C`LINKER_VERSION\*(C'\fR linker script directive, described
+in \fBOutput Section Data\fR. If this directive is used in a linker
+script and this option has been enabled then a string containing the
+linker version will be inserted at the current point.
+.Sp
+Note \- this location of this option on the linker command line is
+significant. It will only affect linker scripts that come after it on
+the command line, or which are built into the linker.
+.IP \fB\-\-disable\-linker\-version\fR 4
+.IX Item "--disable-linker-version"
+Disables the \f(CW\*(C`LINKER_VERSION\*(C'\fR linker script directive, so that it
+does not insert a version string. This is the default.
+.IP \fB\-\-enable\-non\-contiguous\-regions\fR 4
+.IX Item "--enable-non-contiguous-regions"
+This option avoids generating an error if an input section does not
+fit a matching output section. The linker tries to allocate the input
+section to subseque nt matching output sections, and generates an
+error only if no output section is large enough. This is useful when
+several non-contiguous memory regions are available and the input
+section does not require a particular one. The order in which input
+sections are evaluated does not change, for instance:
+.Sp
+.Vb 10
+\& MEMORY {
+\& MEM1 (rwx) : ORIGIN = 0x1000, LENGTH = 0x14
+\& MEM2 (rwx) : ORIGIN = 0x1000, LENGTH = 0x40
+\& MEM3 (rwx) : ORIGIN = 0x2000, LENGTH = 0x40
+\& }
+\& SECTIONS {
+\& mem1 : { *(.data.*); } > MEM1
+\& mem2 : { *(.data.*); } > MEM2
+\& mem3 : { *(.data.*); } > MEM3
+\& }
+\&
+\& with input sections:
+\& .data.1: size 8
+\& .data.2: size 0x10
+\& .data.3: size 4
+\&
+\& results in .data.1 affected to mem1, and .data.2 and .data.3
+\& affected to mem2, even though .data.3 would fit in mem3.
+.Ve
+.Sp
+This option is incompatible with INSERT statements because it changes
+the way input sections are mapped to output sections.
+.IP \fB\-\-enable\-non\-contiguous\-regions\-warnings\fR 4
+.IX Item "--enable-non-contiguous-regions-warnings"
+This option enables warnings when
+\&\f(CW\*(C`\-\-enable\-non\-contiguous\-regions\*(C'\fR allows possibly unexpected
+matches in sections mapping, potentially leading to silently
+discarding a section instead of failing because it does not fit any
+output region.
+.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 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.
+.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 PE 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 ELF targeted ports. PE targets
+support a similar function to export all symbols from a DLL or EXE; see
+the description of \fB\-\-export\-all\-symbols\fR below.
+.IP \fB\-\-export\-dynamic\-symbol=\fR\fIglob\fR 4
+.IX Item "--export-dynamic-symbol=glob"
+When creating a dynamically linked executable, symbols matching
+\&\fIglob\fR will be added to the dynamic symbol table. When creating a
+shared library, references to symbols matching \fIglob\fR will not be
+bound to the definitions within the shared library. This option is a
+no-op when creating a shared library and \fB\-Bsymbolic\fR or
+\&\fB\-\-dynamic\-list\fR are not specified. This option is only meaningful
+on ELF platforms which support shared libraries.
+.IP \fB\-\-export\-dynamic\-symbol\-list=\fR\fIfile\fR 4
+.IX Item "--export-dynamic-symbol-list=file"
+Specify a \fB\-\-export\-dynamic\-symbol\fR for each pattern in the file.
+The format of the file is the same as the version node without
+scope and node name. See \fBVERSION\fR for more information.
+.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 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 \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 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
+\&\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 DT_AUXILIARY 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 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 \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 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 \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 GNU 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 GNU linker will ignore the \fB\-F\fR option when not
+creating an ELF shared object.
+.IP \fB\-fini=\fR\fIname\fR 4
+.IX Item "-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 \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 GP register to
+\&\fIsize\fR. 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.
+.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 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 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 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 \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:filename\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 \fIlibnamespec.a\fR.
+.Sp
+On systems which support shared libraries, \fBld\fR may also search for
+files other than \fIlibnamespec.a\fR. Specifically, on ELF
+and SunOS systems, \fBld\fR will search a directory for a library
+called \fIlibnamespec.so\fR before searching for one called
+\&\fIlibnamespec.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:filename\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 AIX, note that it is different from the
+behaviour of the AIX 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 or \f(CW$SYSROOT\fR, then this
+prefix 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\-\-remap\-inputs=\fR\f(BIpattern\fR\fB=\fR\f(BIfilename\fR 4
+.IX Item "--remap-inputs=pattern=filename"
+.PD 0
+.IP \fB\-\-remap\-inputs\-file=\fR\f(BIfile\fR 4
+.IX Item "--remap-inputs-file=file"
+.PD
+These options allow the names of input files to be changed before the
+linker attempts to open them. The option
+\&\fB\-\-remap\-inputs=foo.o=bar.o\fR will cause any attempt to load a
+file called \fIfoo.o\fR to instead try to load a file called
+\&\fIbar.o\fR. Wildcard patterns are permitted in the first filename,
+so \fB\-\-remap\-inputs=foo*.o=bar.o\fR will rename any input file that
+matches \fIfoo*.o\fR to \fIbar.o\fR.
+.Sp
+An alternative form of the option
+\&\fB\-\-remap\-inputs\-file=filename\fR allows the remappings to be read
+from a file. Each line in the file can contain a single remapping.
+Blank lines are ignored. Anything from a hash character (\fB#\fR) to
+the end of a line is considered to be a comment and is also ignored.
+The mapping pattern can be separated from the filename by whitespace
+or an equals (\fB=\fR) character.
+.Sp
+The options can be specified multiple times. Their contents
+accumulate. The remappings will be processed in the order in which
+they occur on the command line, and if they come from a file, in the
+order in which they occur in the file. If a match is made, no further
+checking for that filename will be performed.
+.Sp
+If the replacement filename is \fI/dev/null\fR or just \fINUL\fR
+then the remapping will actually cause the input file to be ignored.
+This can be a convenient way to experiment with removing input files
+from a complicated build environment.
+.Sp
+Note that this option is position dependent and only affects filenames
+that come after it on the command line. Thus:
+.Sp
+.Vb 1
+\& ld foo.o \-\-remap\-inputs=foo.o=bar.o
+.Ve
+.Sp
+Will have no effect, whereas:
+.Sp
+.Vb 1
+\& ld \-\-remap\-inputs=foo.o=bar.o foo.o
+.Ve
+.Sp
+Will rename the input file \fIfoo.o\fR to \fIbar.o\fR.
+.Sp
+Note \- these options also affect files referenced by \fIINPUT\fR
+statements in linker scripts. But since linker scripts are processed
+after the entire command line is read, the position of the remap
+options on the command line is not significant.
+.Sp
+If the \fBverbose\fR option is enabled then any mappings that match
+will be reported, although again the \fBverbose\fR option needs to
+be enabled on the command line \fIbefore\fR the remaped filenames
+appear.
+.Sp
+If the \fB\-Map\fR or \fB\-\-print\-map\fR options are enabled then
+the remapping list will be included in the map output.
+.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.
+.IP \(bu 4
+How GNU properties are merged.
+.Sp
+When the linker merges input .note.gnu.property sections into one output
+\&.note.gnu.property section, some properties are removed or updated.
+These actions are reported in the link map. For example:
+.Sp
+.Vb 1
+\& Removed property 0xc0000002 to merge foo.o (0x1) and bar.o (not found)
+.Ve
+.Sp
+This indicates that property 0xc0000002 is removed from output when
+merging properties in \fIfoo.o\fR, whose property 0xc0000002 value
+is 0x1, and \fIbar.o\fR, which doesn't have property 0xc0000002.
+.Sp
+.Vb 1
+\& Updated property 0xc0010001 (0x1) to merge foo.o (0x1) and bar.o (0x1)
+.Ve
+.Sp
+This indicates that property 0xc0010001 value is updated to 0x1 in output
+when merging properties in \fIfoo.o\fR, whose 0xc0010001 property value
+is 0x1, and \fIbar.o\fR, whose 0xc0010001 property value is 0x1.
+.RE
+.RS 4
+.RE
+.IP \fB\-\-print\-map\-discarded\fR 4
+.IX Item "--print-map-discarded"
+.PD 0
+.IP \fB\-\-no\-print\-map\-discarded\fR 4
+.IX Item "--no-print-map-discarded"
+.PD
+Print (or do not print) the list of discarded and garbage collected sections
+in the link map. Enabled by default.
+.IP \fB\-\-print\-map\-locals\fR 4
+.IX Item "--print-map-locals"
+.PD 0
+.IP \fB\-\-no\-print\-map\-locals\fR 4
+.IX Item "--no-print-map-locals"
+.PD
+Print (or do not print) local symbols in the link map. Local symbols
+will have the text \fB(local)\fR printed before their name, and will
+be listed after all of the global symbols in a given section.
+Temporary local symbols (typically those that start with \fB.L\fR)
+will not be included in the output. Disabled by default.
+.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\-\-dependency\-file=\fR\fIdepfile\fR 4
+.IX Item "--dependency-file=depfile"
+Write a \fIdependency file\fR to \fIdepfile\fR. This file contains a rule
+suitable for \f(CW\*(C`make\*(C'\fR describing the output file and all the input files
+that were read to produce it. The output is similar to the compiler's
+output with \fB\-M \-MP\fR. Note that there is no option like the compiler's \fB\-MM\fR,
+to exclude "system files" (which is not a well-specified concept in the
+linker, unlike "system headers" in the compiler). So the output from
+\&\fB\-\-dependency\-file\fR is always specific to the exact state of the
+installation where it was produced, and should not be copied into
+distributed makefiles without careful editing.
+.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 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.
+.IP "\fB\-plugin\fR \fIname\fR" 4
+.IX Item "-plugin name"
+Involve a plugin in the linking process. The \fIname\fR parameter is
+the absolute filename of the plugin. Usually this parameter is
+automatically added by the complier, when using link time
+optimization, but users can also add their own plugins if they so
+wish.
+.Sp
+Note that the location of the compiler originated plugins is different
+from the place where the \fBar\fR, \fBnm\fR and
+\&\fBranlib\fR programs search for their plugins. In order for
+those commands to make use of a compiler based plugin it must first be
+copied into the \fI${libdir}/bfd\-plugins\fR directory. All gcc
+based linker plugins are backward compatible, so it is sufficient to
+just copy in the newest one.
+.IP \fB\-\-push\-state\fR 4
+.IX Item "--push-state"
+The \fB\-\-push\-state\fR allows one 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
+.IP \fB\-\-pop\-state\fR 4
+.IX Item "--pop-state"
+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 ELF 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 ELF 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\-\-strip\-discarded\fR 4
+.IX Item "--strip-discarded"
+.PD 0
+.IP \fB\-\-no\-strip\-discarded\fR 4
+.IX Item "--no-strip-discarded"
+.PD
+Omit (or do not omit) global symbols defined in discarded sections.
+Enabled by default.
+.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. If
+\&\fB\-t\fR is given twice then members within archives are also printed.
+\&\fB\-t\fR output is useful to generate a list of all the object files
+and scripts involved in linking, for example, when packaging files for
+a linker bug report.
+.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),
+unless the script contains \f(CW\*(C`INSERT\*(C'\fR, 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 programs that do not use constructors or destructors, or for ELF
+based systems 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. For other binaries however the \fB\-Ur\fR
+option is similar to \fB\-r\fR but it also resolves references to
+constructors and destructors.
+.Sp
+For those systems where \fB\-r\fR and \fB\-Ur\fR behave
+differently, 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\fIMODE\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
+\&\fIMODE\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 affects 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\fISECTION\fR\fB]\fR 4
+.IX Item "--unique[=SECTION]"
+Creates a separate output section for every input section matching
+\&\fISECTION\fR, or if the optional wildcard \fISECTION\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. See also the description of the
+\&\fB\-\-enable\-linker\-version\fR in \fBOptions,,Command\-line Options\fR
+which can be used to insert the linker version string into a binary.
+.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 ELF 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 \fBcall\-nop=prefix\-addr\fR 4
+.IX Item "call-nop=prefix-addr"
+.PD 0
+.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 GOT slot.
+\&\fBcall\-nop=prefix\-addr\fR generates \f(CW\*(C`0x67 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`\fR\f(CIbyte\fR\f(CW call foo\*(C'\fR.
+\&\fBcall\-nop=suffix\-\fR\fIbyte\fR generates \f(CW\*(C`call foo \fR\f(CIbyte\fR\f(CW\*(C'\fR.
+Supported for i386 and x86_64.
+.IP \fBcet\-report=none\fR 4
+.IX Item "cet-report=none"
+.PD 0
+.IP \fBcet\-report=warning\fR 4
+.IX Item "cet-report=warning"
+.IP \fBcet\-report=error\fR 4
+.IX Item "cet-report=error"
+.PD
+Specify how to report the missing GNU_PROPERTY_X86_FEATURE_1_IBT and
+GNU_PROPERTY_X86_FEATURE_1_SHSTK properties in input .note.gnu.property
+section. \fBcet\-report=none\fR, which is the default, will make the
+linker not report missing properties in input files.
+\&\fBcet\-report=warning\fR will make the linker issue a warning for
+missing properties in input files. \fBcet\-report=error\fR will make
+the linker issue an error for missing properties in input files.
+Note that \fBibt\fR will turn off the missing
+GNU_PROPERTY_X86_FEATURE_1_IBT property report and \fBshstk\fR will
+turn off the missing GNU_PROPERTY_X86_FEATURE_1_SHSTK property report.
+Supported for Linux/i386 and Linux/x86_64.
+.IP \fBcombreloc\fR 4
+.IX Item "combreloc"
+.PD 0
+.IP \fBnocombreloc\fR 4
+.IX Item "nocombreloc"
+.PD
+Combine multiple dynamic relocation sections and sort to improve
+dynamic symbol lookup caching. Do not do this if \fBnocombreloc\fR.
+.IP \fBcommon\fR 4
+.IX Item "common"
+.PD 0
+.IP \fBnocommon\fR 4
+.IX Item "nocommon"
+.PD
+Generate common symbols with STT_COMMON type during a relocatable
+link. Use STT_OBJECT type if \fBnocommon\fR.
+.IP \fBcommon\-page\-size=\fR\fIvalue\fR 4
+.IX Item "common-page-size=value"
+Set the page size most commonly used to \fIvalue\fR. Memory image
+layout will be optimized to minimize memory pages if the system is
+using pages of this size.
+.IP \fBdefs\fR 4
+.IX Item "defs"
+Report unresolved symbol references from regular object files. This
+is done even if the linker is creating a non-symbolic shared library.
+This option is the inverse of \fB\-z undefs\fR.
+.IP \fBdynamic-undefined-weak\fR 4
+.IX Item "dynamic-undefined-weak"
+.PD 0
+.IP \fBnodynamic-undefined-weak\fR 4
+.IX Item "nodynamic-undefined-weak"
+.PD
+Make undefined weak symbols dynamic when building a dynamic object,
+if they are referenced from a regular object file and not forced local
+by symbol visibility or versioning. Do not make them dynamic if
+\&\fBnodynamic-undefined-weak\fR. If neither option is given, a target
+may default to either option being in force, or make some other
+selection of undefined weak symbols dynamic. Not all targets support
+these options.
+.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 \fBglobalaudit\fR 4
+.IX Item "globalaudit"
+This option is only meaningful when building a dynamic executable.
+This option marks the executable as requiring global auditing by
+setting the \f(CW\*(C`DF_1_GLOBAUDIT\*(C'\fR bit in the \f(CW\*(C`DT_FLAGS_1\*(C'\fR dynamic
+tag. Global auditing requires that any auditing library defined via
+the \fB\-\-depaudit\fR or \fB\-P\fR command-line options be run for
+all dynamic objects loaded by the application.
+.IP \fBibtplt\fR 4
+.IX Item "ibtplt"
+Generate Intel Indirect Branch Tracking (IBT) enabled PLT entries.
+Supported for Linux/i386 and Linux/x86_64.
+.IP \fBibt\fR 4
+.IX Item "ibt"
+Generate GNU_PROPERTY_X86_FEATURE_1_IBT in .note.gnu.property section
+to indicate compatibility with IBT. This also implies \fBibtplt\fR.
+Supported for Linux/i386 and Linux/x86_64.
+.IP \fBindirect-extern-access\fR 4
+.IX Item "indirect-extern-access"
+.PD 0
+.IP \fBnoindirect-extern-access\fR 4
+.IX Item "noindirect-extern-access"
+.PD
+Generate GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS in
+\&.note.gnu.property section to indicate that object file requires
+canonical function pointers and cannot be used with copy relocation.
+This option also implies \fBnoextern-protected-data\fR and
+\&\fBnocopyreloc\fR. Supported for i386 and x86\-64.
+.Sp
+\&\fBnoindirect-extern-access\fR removes
+GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS from .note.gnu.property
+section.
+.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"
+Specify that the dynamic loader should modify its symbol search order
+so that symbols in this shared library interpose all other shared
+libraries not so marked.
+.IP \fBunique\fR 4
+.IX Item "unique"
+.PD 0
+.IP \fBnounique\fR 4
+.IX Item "nounique"
+.PD
+When generating a shared library or other dynamically loadable ELF
+object mark it as one that should (by default) only ever be loaded once,
+and only in the main namespace (when using \f(CW\*(C`dlmopen\*(C'\fR). This is
+primarily used to mark fundamental libraries such as libc, libpthread et
+al which do not usually function correctly unless they are the sole instances
+of themselves. This behaviour can be overridden by the \f(CW\*(C`dlmopen\*(C'\fR caller
+and does not apply to certain loading mechanisms (such as audit libraries).
+.IP \fBlam\-u48\fR 4
+.IX Item "lam-u48"
+Generate GNU_PROPERTY_X86_FEATURE_1_LAM_U48 in .note.gnu.property section
+to indicate compatibility with Intel LAM_U48. Supported for Linux/x86_64.
+.IP \fBlam\-u57\fR 4
+.IX Item "lam-u57"
+Generate GNU_PROPERTY_X86_FEATURE_1_LAM_U57 in .note.gnu.property section
+to indicate compatibility with Intel LAM_U57. Supported for Linux/x86_64.
+.IP \fBlam\-u48\-report=none\fR 4
+.IX Item "lam-u48-report=none"
+.PD 0
+.IP \fBlam\-u48\-report=warning\fR 4
+.IX Item "lam-u48-report=warning"
+.IP \fBlam\-u48\-report=error\fR 4
+.IX Item "lam-u48-report=error"
+.PD
+Specify how to report the missing GNU_PROPERTY_X86_FEATURE_1_LAM_U48
+property in input .note.gnu.property section.
+\&\fBlam\-u48\-report=none\fR, which is the default, will make the
+linker not report missing properties in input files.
+\&\fBlam\-u48\-report=warning\fR will make the linker issue a warning for
+missing properties in input files. \fBlam\-u48\-report=error\fR will
+make the linker issue an error for missing properties in input files.
+Supported for Linux/x86_64.
+.IP \fBlam\-u57\-report=none\fR 4
+.IX Item "lam-u57-report=none"
+.PD 0
+.IP \fBlam\-u57\-report=warning\fR 4
+.IX Item "lam-u57-report=warning"
+.IP \fBlam\-u57\-report=error\fR 4
+.IX Item "lam-u57-report=error"
+.PD
+Specify how to report the missing GNU_PROPERTY_X86_FEATURE_1_LAM_U57
+property in input .note.gnu.property section.
+\&\fBlam\-u57\-report=none\fR, which is the default, will make the
+linker not report missing properties in input files.
+\&\fBlam\-u57\-report=warning\fR will make the linker issue a warning for
+missing properties in input files. \fBlam\-u57\-report=error\fR will
+make the linker issue an error for missing properties in input files.
+Supported for Linux/x86_64.
+.IP \fBlam\-report=none\fR 4
+.IX Item "lam-report=none"
+.PD 0
+.IP \fBlam\-report=warning\fR 4
+.IX Item "lam-report=warning"
+.IP \fBlam\-report=error\fR 4
+.IX Item "lam-report=error"
+.PD
+Specify how to report the missing GNU_PROPERTY_X86_FEATURE_1_LAM_U48 and
+GNU_PROPERTY_X86_FEATURE_1_LAM_U57 properties in input .note.gnu.property
+section. \fBlam\-report=none\fR, which is the default, will make the
+linker not report missing properties in input files.
+\&\fBlam\-report=warning\fR will make the linker issue a warning for
+missing properties in input files. \fBlam\-report=error\fR will make
+the linker issue an error for missing properties in input files.
+Supported for Linux/x86_64.
+.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"
+Specify that the object's filters be processed immediately at runtime.
+.IP \fBmax\-page\-size=\fR\fIvalue\fR 4
+.IX Item "max-page-size=value"
+Set the maximum memory page size supported to \fIvalue\fR.
+.IP \fBmuldefs\fR 4
+.IX Item "muldefs"
+Allow multiple definitions.
+.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"
+Specify that the dynamic loader search for dependencies of this object
+should ignore any default library search paths.
+.IP \fBnodelete\fR 4
+.IX Item "nodelete"
+Specify that the object shouldn't be unloaded at runtime.
+.IP \fBnodlopen\fR 4
+.IX Item "nodlopen"
+Specify that the object is not available to \f(CW\*(C`dlopen\*(C'\fR.
+.IP \fBnodump\fR 4
+.IX Item "nodump"
+Specify that 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 \fBnoextern-protected-data\fR 4
+.IX Item "noextern-protected-data"
+Don't treat protected data symbols as external when building a shared
+library. This option overrides the linker backend default. It can be
+used to work around 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 \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 \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 loaded by dlopen, instead of deferring
+function call resolution to the point when the function is first
+called.
+.IP \fBorigin\fR 4
+.IX Item "origin"
+Specify that the object requires \fR\f(CB$ORIGIN\fR\fB\fR handling in paths.
+.IP \fBpack-relative-relocs\fR 4
+.IX Item "pack-relative-relocs"
+.PD 0
+.IP \fBnopack-relative-relocs\fR 4
+.IX Item "nopack-relative-relocs"
+.PD
+Generate compact relative relocation in position-independent executable
+and shared library. It adds \f(CW\*(C`DT_RELR\*(C'\fR, \f(CW\*(C`DT_RELRSZ\*(C'\fR and
+\&\f(CW\*(C`DT_RELRENT\*(C'\fR entries to the dynamic section. It is ignored when
+building position-dependent executable and relocatable output.
+\&\fBnopack-relative-relocs\fR is the default, which disables compact
+relative relocation. When linked against the GNU C Library, a
+GLIBC_ABI_DT_RELR symbol version dependency on the shared C Library is
+added to the output. Supported for i386 and x86\-64.
+.IP \fBrelro\fR 4
+.IX Item "relro"
+.PD 0
+.IP \fBnorelro\fR 4
+.IX Item "norelro"
+.PD
+Create an ELF \f(CW\*(C`PT_GNU_RELRO\*(C'\fR segment header in the object. This
+specifies a memory segment that should be made read-only after
+relocation, if supported. Specifying \fBcommon-page-size\fR smaller
+than the system page size will render this protection ineffective.
+Don't create an ELF \f(CW\*(C`PT_GNU_RELRO\*(C'\fR segment if \fBnorelro\fR.
+.IP \fBreport-relative-reloc\fR 4
+.IX Item "report-relative-reloc"
+Report dynamic relative relocations generated by linker. Supported for
+Linux/i386 and Linux/x86_64.
+.IP \fBsectionheader\fR 4
+.IX Item "sectionheader"
+.PD 0
+.IP \fBnosectionheader\fR 4
+.IX Item "nosectionheader"
+.PD
+Generate section header. Don't generate section header if
+\&\fBnosectionheader\fR is used. \fBsectionheader\fR is the default.
+.IP \fBseparate-code\fR 4
+.IX Item "separate-code"
+.PD 0
+.IP \fBnoseparate-code\fR 4
+.IX Item "noseparate-code"
+.PD
+Create separate code \f(CW\*(C`PT_LOAD\*(C'\fR segment header in the object. This
+specifies a memory segment that should contain only instructions and must
+be in wholly disjoint pages from any other data. Don't create separate
+code \f(CW\*(C`PT_LOAD\*(C'\fR segment if \fBnoseparate-code\fR is used.
+.IP \fBshstk\fR 4
+.IX Item "shstk"
+Generate GNU_PROPERTY_X86_FEATURE_1_SHSTK in .note.gnu.property section
+to indicate compatibility with Intel Shadow Stack. Supported for
+Linux/i386 and Linux/x86_64.
+.IP \fBstack\-size=\fR\fIvalue\fR 4
+.IX Item "stack-size=value"
+Specify a stack size for an ELF \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 \fBstart-stop-gc\fR 4
+.IX Item "start-stop-gc"
+.PD 0
+.IP \fBnostart-stop-gc\fR 4
+.IX Item "nostart-stop-gc"
+.PD
+When \fB\-\-gc\-sections\fR is in effect, a reference from a retained
+section to \f(CW\*(C`_\|_start_SECNAME\*(C'\fR or \f(CW\*(C`_\|_stop_SECNAME\*(C'\fR causes all
+input sections named \f(CW\*(C`SECNAME\*(C'\fR to also be retained, if
+\&\f(CW\*(C`SECNAME\*(C'\fR is representable as a C identifier and either
+\&\f(CW\*(C`_\|_start_SECNAME\*(C'\fR or \f(CW\*(C`_\|_stop_SECNAME\*(C'\fR is synthesized by the
+linker. \fB\-z start-stop-gc\fR disables this effect, allowing
+sections to be garbage collected as if the special synthesized symbols
+were not defined. \fB\-z start-stop-gc\fR has no effect on a
+definition of \f(CW\*(C`_\|_start_SECNAME\*(C'\fR or \f(CW\*(C`_\|_stop_SECNAME\*(C'\fR in an
+object file or linker script. Such a definition will prevent the
+linker providing a synthesized \f(CW\*(C`_\|_start_SECNAME\*(C'\fR or
+\&\f(CW\*(C`_\|_stop_SECNAME\*(C'\fR respectively, and therefore the special
+treatment by garbage collection for those references.
+.IP \fBstart\-stop\-visibility=\fR\fIvalue\fR 4
+.IX Item "start-stop-visibility=value"
+Specify the ELF symbol visibility for synthesized
+\&\f(CW\*(C`_\|_start_SECNAME\*(C'\fR and \f(CW\*(C`_\|_stop_SECNAME\*(C'\fR symbols. \fIvalue\fR must be exactly \fBdefault\fR,
+\&\fBinternal\fR, \fBhidden\fR, or \fBprotected\fR. If no \fB\-z
+start-stop-visibility\fR option is given, \fBprotected\fR is used for
+compatibility with historical practice. However, it's highly
+recommended to use \fB\-z start\-stop\-visibility=hidden\fR in new
+programs and shared libraries so that these symbols are not exported
+between shared objects, which is not usually what's intended.
+.IP \fBtext\fR 4
+.IX Item "text"
+.PD 0
+.IP \fBnotext\fR 4
+.IX Item "notext"
+.IP \fBtextoff\fR 4
+.IX Item "textoff"
+.PD
+Report an error if DT_TEXTREL is set, i.e., if the position-independent
+or shared object has dynamic relocations in read-only sections. Don't
+report an error if \fBnotext\fR or \fBtextoff\fR.
+.IP \fBundefs\fR 4
+.IX Item "undefs"
+Do not report unresolved symbol references from regular object files,
+either when creating an executable, or when creating a shared library.
+This option is the inverse of \fB\-z defs\fR.
+.IP \fBunique-symbol\fR 4
+.IX Item "unique-symbol"
+.PD 0
+.IP \fBnounique-symbol\fR 4
+.IX Item "nounique-symbol"
+.PD
+Avoid duplicated local symbol names in the symbol string table. Append
+".\f(CW\*(C`number\*(C'\fR" to duplicated local symbol names if \fBunique-symbol\fR
+is used. \fBnounique-symbol\fR is the default.
+.IP \fBx86\-64\-baseline\fR 4
+.IX Item "x86-64-baseline"
+.PD 0
+.IP \fBx86\-64\-v2\fR 4
+.IX Item "x86-64-v2"
+.IP \fBx86\-64\-v3\fR 4
+.IX Item "x86-64-v3"
+.IP \fBx86\-64\-v4\fR 4
+.IX Item "x86-64-v4"
+.PD
+Specify the x86\-64 ISA level needed in .note.gnu.property section.
+\&\fBx86\-64\-baseline\fR generates \f(CW\*(C`GNU_PROPERTY_X86_ISA_1_BASELINE\*(C'\fR.
+\&\fBx86\-64\-v2\fR generates \f(CW\*(C`GNU_PROPERTY_X86_ISA_1_V2\*(C'\fR.
+\&\fBx86\-64\-v3\fR generates \f(CW\*(C`GNU_PROPERTY_X86_ISA_1_V3\*(C'\fR.
+\&\fBx86\-64\-v4\fR generates \f(CW\*(C`GNU_PROPERTY_X86_ISA_1_V4\*(C'\fR.
+Supported for Linux/i386 and Linux/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 will 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 ELF DT_NEEDED tags for dynamic libraries mentioned
+on the command line after the \fB\-\-as\-needed\fR 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. \fB\-\-as\-needed\fR causes a DT_NEEDED 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 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 \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.
+.Sp
+Note: On Linux based systems the \fB\-\-as\-needed\fR option also has
+an affect on the behaviour of the \fB\-\-rpath\fR and
+\&\fB\-\-rpath\-link\fR options. See the description of
+\&\fB\-\-rpath\-link\fR for more details.
+.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 ELF platforms which support shared libraries.
+.IP \fB\-Bstatic\fR 4
+.IX Item "-Bstatic"
+.PD 0
+.IP \fB\-dn\fR 4
+.IX Item "-dn"
+.IP \fB\-non_shared\fR 4
+.IX Item "-non_shared"
+.IP \fB\-static\fR 4
+.IX Item "-static"
+.PD
+Do not link against shared libraries. This is only meaningful on
+platforms for which shared libraries are supported. The different
+variants of this option are for compatibility with various systems. You
+may use this option multiple times on the command line: it affects
+library searching for \fB\-l\fR options which follow it. This
+option also implies \fB\-\-unresolved\-symbols=report\-all\fR. This
+option can be used with \fB\-shared\fR. Doing so means that a
+shared library is being created but that all of the library's external
+references must be resolved by pulling in entries from static
+libraries.
+.IP \fB\-Bsymbolic\fR 4
+.IX Item "-Bsymbolic"
+When creating a shared library, bind references to global symbols to the
+definition within the shared library, if any. Normally, it is possible
+for a program linked against a shared library to override the definition
+within the shared library. This option is only meaningful on ELF
+platforms which support shared libraries.
+.IP \fB\-Bsymbolic\-functions\fR 4
+.IX Item "-Bsymbolic-functions"
+When creating a shared library, bind references to global function
+symbols to the definition within the shared library, if any.
+This option is only meaningful on ELF platforms which support shared
+libraries.
+.IP \fB\-Bno\-symbolic\fR 4
+.IX Item "-Bno-symbolic"
+This option can cancel previously specified \fB\-Bsymbolic\fR and
+\&\fB\-Bsymbolic\-functions\fR.
+.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 ELF 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 \fBVERSION\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 DT_NEEDED tags \fIinside\fR 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 \fB\-\-copy\-dt\-needed\-entries\fR
+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 \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 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.
+.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\-\-ctf\-variables\fR 4
+.IX Item "--ctf-variables"
+.PD 0
+.IP \fB\-\-no\-ctf\-variables\fR 4
+.IX Item "--no-ctf-variables"
+.PD
+The CTF debuginfo format supports a section which encodes the names and
+types of variables found in the program which do not appear in any symbol
+table. These variables clearly cannot be looked up by address by
+conventional debuggers, so the space used for their types and names is
+usually wasted: the types are usually small but the names are often not.
+\&\fB\-\-ctf\-variables\fR causes the generation of such a section.
+The default behaviour can be restored with \fB\-\-no\-ctf\-variables\fR.
+.IP \fB\-\-ctf\-share\-types=\fR\fImethod\fR 4
+.IX Item "--ctf-share-types=method"
+Adjust the method used to share types between translation units in CTF.
+.RS 4
+.IP \fBshare-unconflicted\fR 4
+.IX Item "share-unconflicted"
+Put all types that do not have ambiguous definitions into the shared dictionary,
+where debuggers can easily access them, even if they only occur in one
+translation unit. This is the default.
+.IP \fBshare-duplicated\fR 4
+.IX Item "share-duplicated"
+Put only types that occur in multiple translation units into the shared
+dictionary: types with only one definition go into per-translation-unit
+dictionaries. Types with ambiguous definitions in multiple translation units
+always go into per-translation-unit dictionaries. This tends to make the CTF
+larger, but may reduce the amount of CTF in the shared dictionary. For very
+large projects this may speed up opening the CTF and save memory in the CTF
+consumer at runtime.
+.RE
+.RS 4
+.RE
+.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\-\-force\-group\-allocation\fR 4
+.IX Item "--force-group-allocation"
+This option causes the linker to place section group members like
+normal input sections, and to delete the section groups. This is the
+default behaviour for a final link but this option can be used to
+change the behaviour of a relocatable link (\fB\-r\fR). The script
+command \f(CW\*(C`FORCE_GROUP_ALLOCATION\*(C'\fR has the same
+effect.
+.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.
+.Sp
+The linker processes \fB\-\-defsym\fR arguments and \fB\-T\fR arguments
+in order, placing \fB\-\-defsym\fR before \fB\-T\fR will define the
+symbol before the linker script from \fB\-T\fR is processed, while
+placing \fB\-\-defsym\fR after \fB\-T\fR will define the symbol after
+the linker script has been processed. This difference has
+consequences for expressions within the linker script that use the
+\&\fB\-\-defsym\fR symbols, which order is correct will depend on what
+you are trying to achieve.
+.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 \fBCOLLECT_NO_DEMANGLE\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 ELF 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 ELF
+executables that contain dynamic relocations, and usually requires
+entry point code that is capable of processing these relocations.
+.IP \fB\-\-embedded\-relocs\fR 4
+.IX Item "--embedded-relocs"
+This option is similar to the \fB\-\-emit\-relocs\fR option except
+that the relocs are stored in a target-specific section. This option
+is only supported by the \fBBFIN\fR, \fBCR16\fR and \fIM68K\fR
+targets.
+.IP \fB\-\-disable\-multiple\-abs\-defs\fR 4
+.IX Item "--disable-multiple-abs-defs"
+Do not allow multiple definitions with symbols included
+in filename invoked by \-R or \-\-just\-symbols
+.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\-w\fR 4
+.IX Item "-w"
+.PD 0
+.IP \fB\-\-no\-warnings\fR 4
+.IX Item "--no-warnings"
+.PD
+Do not display any warning or error messages. This overrides
+\&\fB\-\-fatal\-warnings\fR if it has been enabled. This option can be
+used when it is known that the output binary will not work, but there
+is still a need to create it.
+.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 COFF and PE 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, \fB\-\-undefined\fR, and
+\&\fB\-\-gc\-keep\-exported\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 one of the options \fB\-\-entry\fR,
+\&\fB\-\-undefined\fR, or \fB\-\-gc\-keep\-exported\fR or by a \f(CW\*(C`ENTRY\*(C'\fR
+command in the linker script.
+.Sp
+As a GNU extension, ELF input sections marked with the
+\&\f(CW\*(C`SHF_GNU_RETAIN\*(C'\fR flag will not be garbage collected.
+.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
+ELF 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 \fBMEMORY\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. If \fImapfile\fR is just the character
+\&\f(CW\*(C`\-\*(C'\fR then the map will be written to stdout.
+.Sp
+Specifying a directory as \fImapfile\fR causes the linker map to be
+written as a file inside the directory. Normally name of the file
+inside the directory is computed as the basename of the \fIoutput\fR
+file with \f(CW\*(C`.map\*(C'\fR appended. If however the special character
+\&\f(CW\*(C`%\*(C'\fR is used then this will be replaced by the full path of the
+output file. Additionally if there are any characters after the
+\&\fI%\fR symbol then \f(CW\*(C`.map\*(C'\fR will no longer be appended.
+.Sp
+.Vb 10
+\& \-o foo.exe \-Map=bar [Creates ./bar]
+\& \-o ../dir/foo.exe \-Map=bar [Creates ./bar]
+\& \-o foo.exe \-Map=../dir [Creates ../dir/foo.exe.map]
+\& \-o ../dir2/foo.exe \-Map=../dir [Creates ../dir/foo.exe.map]
+\& \-o foo.exe \-Map=% [Creates ./foo.exe.map]
+\& \-o ../dir/foo.exe \-Map=% [Creates ../dir/foo.exe.map]
+\& \-o foo.exe \-Map=%.bar [Creates ./foo.exe.bar]
+\& \-o ../dir/foo.exe \-Map=%.bar [Creates ../dir/foo.exe.bar]
+\& \-o ../dir2/foo.exe \-Map=../dir/% [Creates ../dir/../dir2/foo.exe.map]
+\& \-o ../dir2/foo.exe \-Map=../dir/%.bar [Creates ../dir/../dir2/foo.exe.bar]
+.Ve
+.Sp
+It is an error to specify more than one \f(CW\*(C`%\*(C'\fR character.
+.Sp
+If the map file already exists then it will be overwritten by this
+operation.
+.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.
+.Sp
+The effects of this option can be reverted by using \f(CW\*(C`\-z undefs\*(C'\fR.
+.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 HPPA, 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\-\-error\-handling\-script=\fR\fIscriptname\fR 4
+.IX Item "--error-handling-script=scriptname"
+If this option is provided then the linker will invoke
+\&\fIscriptname\fR whenever an error is encountered. Currently however
+only two kinds of error are supported: missing symbols and missing
+libraries. Two arguments will be passed to script: the keyword
+"undefined-symbol" or `missing\-lib" and the \fIname\fR of the
+undefined symbol or missing library. The intention is that the script
+will provide suggestions to the user as to where the symbol or library
+might be found. After the script has finished then the normal linker
+error message will be displayed.
+.Sp
+The availability of this option is controlled by a configure time
+switch, so it may not be present in specific implementations.
+.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 BFD 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 DLL or ELF 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 PE and ELF 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
+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.
+.IP \fB\-no\-pie\fR 4
+.IX Item "-no-pie"
+Create a position dependent executable. This is the default.
+.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 SVR4 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 MN10200 and MN10300
+family of processors.
+.Sp
+On platforms where the feature is supported, the option
+\&\fB\-\-no\-relax\fR will disable it.
+.Sp
+On platforms where the feature is not supported, both \fB\-\-relax\fR
+and \fB\-\-no\-relax\fR are accepted, but ignored.
+.IP \fB\-\-retain\-symbols\-file=\fR\fIfilename\fR 4
+.IX Item "--retain-symbols-file=filename"
+Retain \fIonly\fR the symbols listed in the file \fIfilename\fR,
+discarding all others. \fIfilename\fR is simply a flat file, with one
+symbol name per line. This option is especially useful in environments
+(such as VxWorks)
+where a large global symbol table is accumulated gradually, to conserve
+run-time memory.
+.Sp
+\&\fB\-\-retain\-symbols\-file\fR does \fInot\fR discard undefined symbols,
+or symbols needed for relocations.
+.Sp
+You may only specify \fB\-\-retain\-symbols\-file\fR once in the command
+line. It overrides \fB\-s\fR and \fB\-S\fR.
+.IP \fB\-rpath=\fR\fIdir\fR 4
+.IX Item "-rpath=dir"
+Add a directory to the runtime library search path. This is used when
+linking an ELF 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.
+.Sp
+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. 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.
+.Sp
+If \fB\-rpath\fR is not used when linking an ELF 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 NFS mounted
+file systems.
+.Sp
+For compatibility with other ELF 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 ELF 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 \fR\f(CI$ORIGIN\fR\fI\fR and \fI\fR\f(CI$LIB\fR\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\fR\f(CI$ORIGIN\fR\fI\fR
+and either \fBlib\fR \- for 32\-bit binaries \- or \fBlib64\fR \- for
+64\-bit binaries \- in the case of \fI\fR\f(CI$LIB\fR\fI\fR.
+.Sp
+The alternative form of these tokens \- \fI${ORIGIN}\fR and
+\&\fI${LIB}\fR can also be used. The token \fR\f(CI$PLATFORM\fR\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 ELF 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 ELF 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
+For a linker for a Linux system, if the file \fI/etc/ld.so.conf\fR
+exists, the list of directories found in that file. Note: the path
+to this file is prefixed with the \f(CW\*(C`sysroot\*(C'\fR value, if that is
+defined, and then any \f(CW\*(C`prefix\*(C'\fR string if the linker was
+configured with the \fB\-\-prefix=<path>\fR option.
+.IP 8. 4
+For a native linker on a FreeBSD system, any directories specified by
+the \f(CW\*(C`_PATH_ELF_HINTS\*(C'\fR macro defined in the \fIelf\-hints.h\fR
+header file.
+.IP 9. 4
+Any directories specified by a \f(CW\*(C`SEARCH_DIR\*(C'\fR command in a
+linker script given on the command line, including scripts specified
+by \fB\-T\fR (but not \fB\-dT\fR).
+.IP 10. 4
+The default directories, normally \fI/lib\fR and \fI/usr/lib\fR.
+.IP 11. 4
+Any directories specified by a plugin LDPT_SET_EXTRA_LIBRARY_PATH.
+.IP 12. 4
+Any directories specified by a \f(CW\*(C`SEARCH_DIR\*(C'\fR command in a default
+linker script.
+.RE
+.RS 4
+.Sp
+Note however on Linux based systems there is an additional caveat: If
+the \fB\-\-as\-needed\fR option is active \fIand\fR a shared library
+is located which would normally satisfy the search \fIand\fR this
+library does not have DT_NEEDED tag for \fIlibc.so\fR
+\&\fIand\fR there is a shared library later on in the set of search
+directories which also satisfies the search \fIand\fR
+this second shared library does have a DT_NEEDED tag for
+\&\fIlibc.so\fR \fIthen\fR the second library will be selected instead
+of the first.
+.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 ELF, XCOFF
+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\-\-spare\-dynamic\-tags=\fR\fIcount\fR 4
+.IX Item "--spare-dynamic-tags=count"
+This option specifies the number of empty slots to leave in the
+\&.dynamic section of ELF shared objects. Empty slots may be needed by
+post processing tools, such as the prelinker. The default is 5.
+.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 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 \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\-\-task\-link\fR 4
+.IX Item "--task-link"
+This is used by COFF/PE based targets to create a task-linked object
+file where all of the global symbols have been converted to statics.
+.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 ELF 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 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.
+.IP \fB\-Tldata\-segment=\fR\fIorg\fR 4
+.IX Item "-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.
+.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\fINUMBER\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 \fINUMBER\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 ELF platforms which support shared libraries;
+see \fBVERSION\fR. It is partially supported on PE 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 COFF or ELF, the linker can not
+detect the use of global constructors.
+.IP \fB\-\-warn\-execstack\fR 4
+.IX Item "--warn-execstack"
+.PD 0
+.IP \fB\-\-no\-warn\-execstack\fR 4
+.IX Item "--no-warn-execstack"
+.PD
+On ELF platforms this option controls how the linker generates warning
+messages when it creates an output file with an executable stack. By
+default the linker will not warn if the \fB\-z execstack\fR command
+line option has been used, but this behaviour can be overridden by the
+\&\fB\-\-warn\-execstack\fR option.
+.Sp
+On the other hand the linker will normally warn if the stack is made
+executable because one or more of the input files need an execuable
+stack and neither of the \fB\-z execstack\fR or \fB\-z
+noexecstack\fR command line options have been specified. This warning
+can be disabled via the \fB\-\-no\-warn\-execstack\fR option.
+.Sp
+Note: ELF format input files specify that they need an executable
+stack by having a \fI.note.GNU\-stack\fR section with the executable
+bit set in its section flags. They can specify that they do not need
+an executable stack by having that section, but without the executable
+flag bit set. If an input file does not have a \fI.note.GNU\-stack\fR
+section present then the default behaviour is target specific. For
+some targets, then absence of such a section implies that an
+executable stack \fIis\fR required. This is often a problem for hand
+crafted assembler files.
+.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\-rwx\-segments\fR 4
+.IX Item "--warn-rwx-segments"
+.PD 0
+.IP \fB\-\-no\-warn\-rwx\-segments\fR 4
+.IX Item "--no-warn-rwx-segments"
+.PD
+Warn if the linker creates a loadable, non-zero sized segment that has
+all three of the read, write and execute permission flags set. Such a
+segment represents a potential security vulnerability. In addition
+warnings will be generated if a thread local storage segment is
+created with the execute permission flag set, regardless of whether or
+not it has the read and/or write flags set.
+.Sp
+These warnings are enabled by default. They can be disabled via the
+\&\fB\-\-no\-warn\-rwx\-segments\fR option and re-enabled via the
+\&\fB\-\-warn\-rwx\-segments\fR option.
+.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\-textrel\fR 4
+.IX Item "--warn-textrel"
+Warn if the linker adds DT_TEXTREL to a position-independent executable
+or shared object.
+.IP \fB\-\-warn\-alternate\-em\fR 4
+.IX Item "--warn-alternate-em"
+Warn if an object has alternate ELF 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_\fR\f(CIsymbol\fR\f(CW\*(C'\fR. Any
+undefined reference to \f(CW\*(C`_\|_real_\fR\f(CIsymbol\fR\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_\fR\f(CIsymbol\fR\f(CW\*(C'\fR. If it
+wishes to call the system function, it should call
+\&\f(CW\*(C`_\|_real_\fR\f(CIsymbol\fR\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.
+.Sp
+Only undefined references are replaced by the linker. So, translation unit
+internal references to \fIsymbol\fR are not resolved to
+\&\f(CW\*(C`_\|_wrap_\fR\f(CIsymbol\fR\f(CW\*(C'\fR. In the next example, the call to \f(CW\*(C`f\*(C'\fR in
+\&\f(CW\*(C`g\*(C'\fR is not resolved to \f(CW\*(C`_\|_wrap_f\*(C'\fR.
+.Sp
+.Vb 5
+\& int
+\& f (void)
+\& {
+\& return 123;
+\& }
+\&
+\& int
+\& g (void)
+\& {
+\& return f();
+\& }
+.Ve
+.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 ELF \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 PLT. This option is on by default
+if linker generated unwind info is supported. This option also
+controls the generation of \f(CW\*(C`.sframe\*(C'\fR stack trace info for linker
+generated code sections like PLT.
+.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 ELF. But the older ELF
+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 ELF 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 ELF \f(CW\*(C`.hash\*(C'\fR section, \f(CW\*(C`gnu\*(C'\fR for
+new style GNU \f(CW\*(C`.gnu.hash\*(C'\fR section or \f(CW\*(C`both\*(C'\fR for both
+the classic ELF \f(CW\*(C`.hash\*(C'\fR and new style GNU \f(CW\*(C`.gnu.hash\*(C'\fR
+hash tables. The default depends upon how the linker was configured,
+but for most Linux based systems it will be \f(CW\*(C`both\*(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"
+.IP \fB\-\-compress\-debug\-sections=zstd\fR 4
+.IX Item "--compress-debug-sections=zstd"
+.PD
+On ELF platforms, these options control how DWARF debug sections are
+compressed using zlib.
+.Sp
+\&\fB\-\-compress\-debug\-sections=none\fR doesn't compress DWARF debug
+sections. \fB\-\-compress\-debug\-sections=zlib\-gnu\fR compresses
+DWARF 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 DWARF debug sections, but rather than renaming them it
+sets the SHF_COMPRESSED 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
+\&\fB\-\-compress\-debug\-sections=zstd\fR compresses DWARF debug sections using
+zstd.
+.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\-\-max\-cache\-size=\fR\fIsize\fR 4
+.IX Item "--max-cache-size=size"
+\&\fBld\fR normally caches the relocation information and symbol tables
+of input files in memory with the unlimited size. This option sets the
+maximum cache size to \fIsize\fR.
+.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 ELF note section
+or a \f(CW\*(C`.buildid\*(C'\fR COFF 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
+SHA1 hash on the normative parts of the output contents,
+\&\f(CW\*(C`md5\*(C'\fR to use a 128\-bit MD5 hash on the normative parts of
+the output contents, or \f(CW\*(C`0x\fR\f(CIhexstring\fR\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 ID 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.
+.IP \fB\-\-package\-metadata=\fR\fIJSON\fR 4
+.IX Item "--package-metadata=JSON"
+Request the creation of a \f(CW\*(C`.note.package\*(C'\fR ELF note section. The
+contents of the note are in JSON format, as per the package metadata
+specification. For more information see:
+https://systemd.io/ELF_PACKAGE_METADATA/
+If the JSON argument is missing/empty then this will disable the
+creation of the metadata note, if one had been enabled by an earlier
+occurrence of the \-\-package\-metdata option.
+If the linker has been built with libjansson, then the JSON string
+will be validated.
+.PP
+The i386 PE linker supports the \fB\-shared\fR option, which causes
+the output to be a dynamically linked library (DLL) 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 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.
+.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 PE 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 PE specific option]
+.IP \fB\-\-dll\fR 4
+.IX Item "--dll"
+Create a DLL 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 PE 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 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, \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 PE 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 "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 \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 PE 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 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 \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 DLL'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 PE 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 PE 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 PE 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 PE 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 PE 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 PE 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 PE targeted port of the linker]
+.IP \fB\-\-large\-address\-aware\fR 4
+.IX Item "--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=\fIvalue\fR 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]
+.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 PE 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 "image version". Defaults to 1.
+[This option is specific to the i386 PE 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 "os version". Defaults to 4.
+[This option is specific to the i386 PE 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 "subsystem version". Defaults to 4.
+[This option is specific to the i386 PE 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 "image version". Defaults to 0.
+[This option is specific to the i386 PE 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 "os version". Defaults to 0.
+[This option is specific to the i386 PE 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 "subsystem version". Defaults to 0.
+[This option is specific to the i386 PE 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 DEF
+file corresponding to the DLL the linker is generating. This DEF 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 PE 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 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]
+.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 PE 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 "subplatforms": 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 PE 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
+DATA imports from DLLs, thus making it possible to bypass the dllimport
+mechanism on the user side and to reference unmangled symbol names.
+[This option is specific to the i386 PE targeted port of the linker]
+.Sp
+The following remarks pertain to the original implementation of the
+feature and are obsolete nowadays for Cygwin and MinGW targets.
+.Sp
+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 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.
+.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 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:
+.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. \fBset_foo()\fR and \fBget_foo()\fR accessor
+functions).
+.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 DATA imports from DLLs.
+[This option is specific to the i386 PE 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, 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]
+.IP \fB\-\-disable\-runtime\-pseudo\-reloc\fR 4
+.IX Item "--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]
+.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 PE 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 PE 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 PE 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 PE targeted port of the linker]
+.Sp
+The following options set flags in the \f(CW\*(C`DllCharacteristics\*(C'\fR field
+of the PE file header:
+[These options are specific to PE targeted ports of the linker]
+.IP \fB\-\-high\-entropy\-va\fR 4
+.IX Item "--high-entropy-va"
+.PD 0
+.IP \fB\-\-disable\-high\-entropy\-va\fR 4
+.IX Item "--disable-high-entropy-va"
+.PD
+Image is compatible with 64\-bit address space layout randomization
+(ASLR). This option is enabled by default for 64\-bit PE images.
+.Sp
+This option also implies \fB\-\-dynamicbase\fR and
+\&\fB\-\-enable\-reloc\-section\fR.
+.IP \fB\-\-dynamicbase\fR 4
+.IX Item "--dynamicbase"
+.PD 0
+.IP \fB\-\-disable\-dynamicbase\fR 4
+.IX Item "--disable-dynamicbase"
+.PD
+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. This option is enabled by default but
+can be disabled via the \fB\-\-disable\-dynamicbase\fR option.
+This option also implies \fB\-\-enable\-reloc\-section\fR.
+.IP \fB\-\-forceinteg\fR 4
+.IX Item "--forceinteg"
+.PD 0
+.IP \fB\-\-disable\-forceinteg\fR 4
+.IX Item "--disable-forceinteg"
+.PD
+Code integrity checks are enforced. This option is disabled by
+default.
+.IP \fB\-\-nxcompat\fR 4
+.IX Item "--nxcompat"
+.PD 0
+.IP \fB\-\-disable\-nxcompat\fR 4
+.IX Item "--disable-nxcompat"
+.PD
+The image is compatible with the Data Execution Prevention.
+This feature was introduced with MS Windows XP SP2 for i386 PE
+targets. The option is enabled by default.
+.IP \fB\-\-no\-isolation\fR 4
+.IX Item "--no-isolation"
+.PD 0
+.IP \fB\-\-disable\-no\-isolation\fR 4
+.IX Item "--disable-no-isolation"
+.PD
+Although the image understands isolation, do not isolate the image.
+This option is disabled by default.
+.IP \fB\-\-no\-seh\fR 4
+.IX Item "--no-seh"
+.PD 0
+.IP \fB\-\-disable\-no\-seh\fR 4
+.IX Item "--disable-no-seh"
+.PD
+The image does not use SEH. No SE handler may be called from
+this image. This option is disabled by default.
+.IP \fB\-\-no\-bind\fR 4
+.IX Item "--no-bind"
+.PD 0
+.IP \fB\-\-disable\-no\-bind\fR 4
+.IX Item "--disable-no-bind"
+.PD
+Do not bind this image. This option is disabled by default.
+.IP \fB\-\-wdmdriver\fR 4
+.IX Item "--wdmdriver"
+.PD 0
+.IP \fB\-\-disable\-wdmdriver\fR 4
+.IX Item "--disable-wdmdriver"
+.PD
+The driver uses the MS Windows Driver Model. This option is disabled
+by default.
+.IP \fB\-\-tsaware\fR 4
+.IX Item "--tsaware"
+.PD 0
+.IP \fB\-\-disable\-tsaware\fR 4
+.IX Item "--disable-tsaware"
+.PD
+The image is Terminal Server aware. This option is disabled by
+default.
+.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.
+.IP \fB\-\-enable\-reloc\-section\fR 4
+.IX Item "--enable-reloc-section"
+.PD 0
+.IP \fB\-\-disable\-reloc\-section\fR 4
+.IX Item "--disable-reloc-section"
+.PD
+Create the base relocation table, which is necessary if the image
+is loaded at a different image base than specified in the PE header.
+This option is enabled by default.
+.PP
+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.
+.IP "\fB\-\-dsbt\-size\fR \fIsize\fR" 4
+.IX Item "--dsbt-size size"
+This option sets the number of entries in the DSBT 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 DSBT 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 DSBT 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.
+.IP \fB\-\-branch\-stub\fR 4
+.IX Item "--branch-stub"
+This option enables linker branch relaxation by inserting branch stub
+sections when needed to extend the range of branches. This option is
+usually not required since C\-SKY supports branch and call instructions that
+can access the full memory range and branch relaxation is normally handled by
+the compiler or assembler.
+.IP \fB\-\-stub\-group\-size=\fR\fIN\fR 4
+.IX Item "--stub-group-size=N"
+This option allows finer control of linker branch stub creation.
+It sets the maximum size of a group of input sections that can
+be handled by one stub section. A negative value of \fIN\fR locates
+stub sections after their branches, while a positive value allows stub
+sections to appear either before or after the branches. Values of
+\&\fB1\fR or \fB\-1\fR indicate that the
+linker should choose suitable defaults.
+.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 \fBMEMORY\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 GOT generation
+when linking for 68K targets.
+.IP \fB\-\-got=\fR\fItype\fR 4
+.IX Item "--got=type"
+This option tells the linker which GOT 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 ISA mode transitions when
+linking for MIPS 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 PLT 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 ISA mode
+transitions. If \fB\-\-ignore\-branch\-isa\fR 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 \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 ISA mode transition to produce
+an error.
+.IP \fB\-\-compact\-branches\fR 4
+.IX Item "--compact-branches"
+.PD 0
+.IP \fB\-\-no\-compact\-branches\fR 4
+.IX Item "--no-compact-branches"
+.PD
+These options control the generation of compact instructions by the linker
+in the PLT entries for MIPS R6.
+.PP
+For the pdp11\-aout target, three variants of the output format can be
+produced as selected by the following options. The default variant
+for pdp11\-aout is the \fB\-\-omagic\fR option, whereas for other
+targets \fB\-\-nmagic\fR is the default. The \fB\-\-imagic\fR option is
+defined only for the pdp11\-aout target, while the others are described
+here as they apply to the pdp11\-aout target.
+.IP \fB\-N\fR 4
+.IX Item "-N"
+.PD 0
+.IP \fB\-\-omagic\fR 4
+.IX Item "--omagic"
+.PD
+Mark the output as \f(CW\*(C`OMAGIC\*(C'\fR (0407) in the \fIa.out\fR header to
+indicate that the text segment is not to be write-protected and
+shared. Since the text and data sections are both readable and
+writable, the data section is allocated immediately contiguous after
+the text segment. This is the oldest format for PDP11 executable
+programs and is the default for \fBld\fR on PDP11 Unix systems
+from the beginning through 2.11BSD.
+.IP \fB\-n\fR 4
+.IX Item "-n"
+.PD 0
+.IP \fB\-\-nmagic\fR 4
+.IX Item "--nmagic"
+.PD
+Mark the output as \f(CW\*(C`NMAGIC\*(C'\fR (0410) in the \fIa.out\fR header to
+indicate that when the output file is executed, the text portion will
+be read-only and shareable among all processes executing the same
+file. This involves moving the data areas up to the first possible 8K
+byte page boundary following the end of the text. This option creates
+a \fIpure executable\fR format.
+.IP \fB\-z\fR 4
+.IX Item "-z"
+.PD 0
+.IP \fB\-\-imagic\fR 4
+.IX Item "--imagic"
+.PD
+Mark the output as \f(CW\*(C`IMAGIC\*(C'\fR (0411) in the \fIa.out\fR header to
+indicate that when the output file is executed, the program text and
+data areas will be loaded into separate address spaces using the split
+instruction and data space feature of the memory management unit in
+larger models of the PDP11. This doubles the address space available
+to the program. The text segment is again pure, write-protected, and
+shareable. The only difference in the output format between this
+option and the others, besides the magic number, is that both the text
+and data sections start at location 0. The \fB\-z\fR option selected
+this format in 2.11BSD. This option creates a \fIseparate
+executable\fR format.
+.IP \fB\-\-no\-omagic\fR 4
+.IX Item "--no-omagic"
+Equivalent to \fB\-\-nmagic\fR for pdp11\-aout.
+.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 BFD 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 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.
+.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"
+\&\fBar\fR\|(1), \fBnm\fR\|(1), \fBobjcopy\fR\|(1), \fBobjdump\fR\|(1), \fBreadelf\fR\|(1) and
+the Info entries for \fIbinutils\fR and
+\&\fIld\fR.
+.SH COPYRIGHT
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2023 Free Software Foundation, Inc.
+.PP
+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".