.\" Automatically generated by Pod::Man 2.23 (Pod::Simple 3.14)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings.  \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD.  Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
.    de IX
.    tm Index:\\$1\t\\n%\t"\\$2"
..
.    nr % 0
.    rr F
.\}
.el \{\
.    de IX
..
.\}
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
.    \" fudge factors for nroff and troff
.if n \{\
.    ds #H 0
.    ds #V .8m
.    ds #F .3m
.    ds #[ \f1
.    ds #] \fP
.\}
.if t \{\
.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.    ds #V .6m
.    ds #F 0
.    ds #[ \&
.    ds #] \&
.\}
.    \" simple accents for nroff and troff
.if n \{\
.    ds ' \&
.    ds ` \&
.    ds ^ \&
.    ds , \&
.    ds ~ ~
.    ds /
.\}
.if t \{\
.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
.    \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.    \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.    \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.    ds : e
.    ds 8 ss
.    ds o a
.    ds d- d\h'-1'\(ga
.    ds D- D\h'-1'\(hy
.    ds th \o'bp'
.    ds Th \o'LP'
.    ds ae ae
.    ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "LD 1"
.TH LD 1 "2011-11-21" "binutils-2.21.90" "GNU Development Tools"
.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
ld \- The GNU linker
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
ld [\fBoptions\fR] \fIobjfile\fR ...
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
\&\fBld\fR combines a number of object and archive files, relocates
their data and ties up symbol references. Usually the last step in
compiling a program is to run \fBld\fR.
.PP
\&\fBld\fR accepts Linker Command Language files written in
a superset of \s-1AT&T\s0's Link Editor Command Language syntax,
to provide explicit and total control over the linking process.
.PP
This man page does not describe the command language; see the
\&\fBld\fR entry in \f(CW\*(C`info\*(C'\fR for full details on the command
language and on other aspects of the \s-1GNU\s0 linker.
.PP
This version of \fBld\fR uses the general purpose \s-1BFD\s0 libraries
to operate on object files. This allows \fBld\fR to read, combine, and
write object files in many different formats\-\-\-for example, \s-1COFF\s0 or
\&\f(CW\*(C`a.out\*(C'\fR.  Different formats may be linked together to produce any
available kind of object file.
.PP
Aside from its flexibility, the \s-1GNU\s0 linker is more helpful than other
linkers in providing diagnostic information.  Many linkers abandon
execution immediately upon encountering an error; whenever possible,
\&\fBld\fR continues executing, allowing you to identify other errors
(or, in some cases, to get an output file in spite of the error).
.PP
The \s-1GNU\s0 linker \fBld\fR is meant to cover a broad range of situations,
and to be as compatible as possible with other linkers.  As a result,
you have many choices to control its behavior.
.SH "OPTIONS"
.IX Header "OPTIONS"
The linker supports a plethora of command-line options, but in actual
practice few of them are used in any particular context.
For instance, a frequent use of \fBld\fR is to link standard Unix
object files on a standard, supported Unix system.  On such a system, to
link a file \f(CW\*(C`hello.o\*(C'\fR:
.PP
.Vb 1
\&        ld \-o <output> /lib/crt0.o hello.o \-lc
.Ve
.PP
This tells \fBld\fR to produce a file called \fIoutput\fR as the
result of linking the file \f(CW\*(C`/lib/crt0.o\*(C'\fR with \f(CW\*(C`hello.o\*(C'\fR and
the library \f(CW\*(C`libc.a\*(C'\fR, which will come from the standard search
directories.  (See the discussion of the \fB\-l\fR option below.)
.PP
Some of the command-line options to \fBld\fR may be specified at any
point in the command line.  However, options which refer to files, such
as \fB\-l\fR or \fB\-T\fR, cause the file to be read at the point at
which the option appears in the command line, relative to the object
files and other file options.  Repeating non-file options with a
different argument will either have no further effect, or override prior
occurrences (those further to the left on the command line) of that
option.  Options which may be meaningfully specified more than once are
noted in the descriptions below.
.PP
Non-option arguments are object files or archives which are to be linked
together.  They may follow, precede, or be mixed in with command-line
options, except that an object file argument may not be placed between
an option and its argument.
.PP
Usually the linker is invoked with at least one object file, but you can
specify other forms of binary input files using \fB\-l\fR, \fB\-R\fR,
and the script command language.  If \fIno\fR binary input files at all
are specified, the linker does not produce any output, and issues the
message \fBNo input files\fR.
.PP
If the linker cannot recognize the format of an object file, it will
assume that it is a linker script.  A script specified in this way
augments the main linker script used for the link (either the default
linker script or the one specified by using \fB\-T\fR).  This feature
permits the linker to link against a file which appears to be an object
or an archive, but actually merely defines some symbol values, or uses
\&\f(CW\*(C`INPUT\*(C'\fR or \f(CW\*(C`GROUP\*(C'\fR to load other objects.  Specifying a
script in this way merely augments the main linker script, with the
extra commands placed after the main script; use the \fB\-T\fR option
to replace the default linker script entirely, but note the effect of
the \f(CW\*(C`INSERT\*(C'\fR command.
.PP
For options whose names are a single letter,
option arguments must either follow the option letter without intervening
whitespace, or be given as separate arguments immediately following the
option that requires them.
.PP
For options whose names are multiple letters, either one dash or two can
precede the option name; for example, \fB\-trace\-symbol\fR and
\&\fB\-\-trace\-symbol\fR are equivalent.  Note\-\-\-there is one exception to
this rule.  Multiple letter options that start with a lower case 'o' can
only be preceded by two dashes.  This is to reduce confusion with the
\&\fB\-o\fR option.  So for example \fB\-omagic\fR sets the output file
name to \fBmagic\fR whereas \fB\-\-omagic\fR sets the \s-1NMAGIC\s0 flag on the
output.
.PP
Arguments to multiple-letter options must either be separated from the
option name by an equals sign, or be given as separate arguments
immediately following the option that requires them.  For example,
\&\fB\-\-trace\-symbol foo\fR and \fB\-\-trace\-symbol=foo\fR are equivalent.
Unique abbreviations of the names of multiple-letter options are
accepted.
.PP
Note\-\-\-if the linker is being invoked indirectly, via a compiler driver
(e.g. \fBgcc\fR) then all the linker command line options should be
prefixed by \fB\-Wl,\fR (or whatever is appropriate for the particular
compiler driver) like this:
.PP
.Vb 1
\&          gcc \-Wl,\-\-start\-group foo.o bar.o \-Wl,\-\-end\-group
.Ve
.PP
This is important, because otherwise the compiler driver program may
silently drop the linker options, resulting in a bad link.  Confusion
may also arise when passing options that require values through a
driver, as the use of a space between option and argument acts as
a separator, and causes the driver to pass only the option to the linker
and the argument to the compiler.  In this case, it is simplest to use
the joined forms of both single\- and multiple-letter options, such as:
.PP
.Vb 1
\&          gcc foo.o bar.o \-Wl,\-eENTRY \-Wl,\-Map=a.map
.Ve
.PP
Here is a table of the generic command line switches accepted by the \s-1GNU\s0
linker:
.IP "\fB@\fR\fIfile\fR" 4
.IX Item "@file"
Read command-line options from \fIfile\fR.  The options read are
inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
does not exist, or cannot be read, then the option will be treated
literally, and not removed.
.Sp
Options in \fIfile\fR are separated by whitespace.  A whitespace
character may be included in an option by surrounding the entire
option in either single or double quotes.  Any character (including a
backslash) may be included by prefixing the character to be included
with a backslash.  The \fIfile\fR may itself contain additional
@\fIfile\fR options; any such options will be processed recursively.
.IP "\fB\-a\fR \fIkeyword\fR" 4
.IX Item "-a keyword"
This option is supported for \s-1HP/UX\s0 compatibility.  The \fIkeyword\fR
argument must be one of the strings \fBarchive\fR, \fBshared\fR, or
\&\fBdefault\fR.  \fB\-aarchive\fR is functionally equivalent to
\&\fB\-Bstatic\fR, and the other two keywords are functionally equivalent
to \fB\-Bdynamic\fR.  This option may be used any number of times.
.IP "\fB\-\-audit\fR \fI\s-1AUDITLIB\s0\fR" 4
.IX Item "--audit AUDITLIB"
Adds \fI\s-1AUDITLIB\s0\fR to the \f(CW\*(C`DT_AUDIT\*(C'\fR entry of the dynamic section.
\&\fI\s-1AUDITLIB\s0\fR is not checked for existence, nor will it use the \s-1DT_SONAME\s0
specified in the library.  If specified multiple times \f(CW\*(C`DT_AUDIT\*(C'\fR
will contain a colon separated list of audit interfaces to use. If the linker
finds an object with an audit entry while searching for shared libraries,
it will add a corresponding \f(CW\*(C`DT_DEPAUDIT\*(C'\fR entry in the output file.  
This option is only meaningful on \s-1ELF\s0 platforms supporting the rtld-audit
interface.
.IP "\fB\-A\fR \fIarchitecture\fR" 4
.IX Item "-A architecture"
.PD 0
.IP "\fB\-\-architecture=\fR\fIarchitecture\fR" 4
.IX Item "--architecture=architecture"
.PD
In the current release of \fBld\fR, this option is useful only for the
Intel 960 family of architectures.  In that \fBld\fR configuration, the
\&\fIarchitecture\fR argument identifies the particular architecture in
the 960 family, enabling some safeguards and modifying the
archive-library search path.
.Sp
Future releases of \fBld\fR may support similar functionality for
other architecture families.
.IP "\fB\-b\fR \fIinput-format\fR" 4
.IX Item "-b input-format"
.PD 0
.IP "\fB\-\-format=\fR\fIinput-format\fR" 4
.IX Item "--format=input-format"
.PD
\&\fBld\fR may be configured to support more than one kind of object
file.  If your \fBld\fR is configured this way, you can use the
\&\fB\-b\fR option to specify the binary format for input object files
that follow this option on the command line.  Even when \fBld\fR is
configured to support alternative object formats, you don't usually need
to specify this, as \fBld\fR should be configured to expect as a
default input format the most usual format on each machine.
\&\fIinput-format\fR is a text string, the name of a particular format
supported by the \s-1BFD\s0 libraries.  (You can list the available binary
formats with \fBobjdump \-i\fR.)
.Sp
You may want to use this option if you are linking files with an unusual
binary format.  You can also use \fB\-b\fR to switch formats explicitly (when
linking object files of different formats), by including
\&\fB\-b\fR \fIinput-format\fR before each group of object files in a
particular format.
.Sp
The default format is taken from the environment variable
\&\f(CW\*(C`GNUTARGET\*(C'\fR.
.Sp
You can also define the input format from a script, using the command
\&\f(CW\*(C`TARGET\*(C'\fR;
.IP "\fB\-c\fR \fIMRI-commandfile\fR" 4
.IX Item "-c MRI-commandfile"
.PD 0
.IP "\fB\-\-mri\-script=\fR\fIMRI-commandfile\fR" 4
.IX Item "--mri-script=MRI-commandfile"
.PD
For compatibility with linkers produced by \s-1MRI\s0, \fBld\fR accepts script
files written in an alternate, restricted command language, described in
the \s-1MRI\s0 Compatible Script Files section of \s-1GNU\s0 ld documentation.
Introduce \s-1MRI\s0 script files with
the option \fB\-c\fR; use the \fB\-T\fR option to run linker
scripts written in the general-purpose \fBld\fR scripting language.
If \fIMRI-cmdfile\fR does not exist, \fBld\fR looks for it in the directories
specified by any \fB\-L\fR options.
.IP "\fB\-d\fR" 4
.IX Item "-d"
.PD 0
.IP "\fB\-dc\fR" 4
.IX Item "-dc"
.IP "\fB\-dp\fR" 4
.IX Item "-dp"
.PD
These three options are equivalent; multiple forms are supported for
compatibility with other linkers.  They assign space to common symbols
even if a relocatable output file is specified (with \fB\-r\fR).  The
script command \f(CW\*(C`FORCE_COMMON_ALLOCATION\*(C'\fR has the same effect.
.IP "\fB\-\-depaudit\fR \fI\s-1AUDITLIB\s0\fR" 4
.IX Item "--depaudit AUDITLIB"
.PD 0
.IP "\fB\-P\fR \fI\s-1AUDITLIB\s0\fR" 4
.IX Item "-P AUDITLIB"
.PD
Adds \fI\s-1AUDITLIB\s0\fR to the \f(CW\*(C`DT_DEPAUDIT\*(C'\fR entry of the dynamic section.
\&\fI\s-1AUDITLIB\s0\fR is not checked for existence, nor will it use the \s-1DT_SONAME\s0
specified in the library.  If specified multiple times \f(CW\*(C`DT_DEPAUDIT\*(C'\fR
will contain a colon separated list of audit interfaces to use.  This
option is only meaningful on \s-1ELF\s0 platforms supporting the rtld-audit interface.
The \-P option is provided for Solaris compatibility.
.IP "\fB\-e\fR \fIentry\fR" 4
.IX Item "-e entry"
.PD 0
.IP "\fB\-\-entry=\fR\fIentry\fR" 4
.IX Item "--entry=entry"
.PD
Use \fIentry\fR as the explicit symbol for beginning execution of your
program, rather than the default entry point.  If there is no symbol
named \fIentry\fR, the linker will try to parse \fIentry\fR as a number,
and use that as the entry address (the number will be interpreted in
base 10; you may use a leading \fB0x\fR for base 16, or a leading
\&\fB0\fR for base 8).
.IP "\fB\-\-exclude\-libs\fR \fIlib\fR\fB,\fR\fIlib\fR\fB,...\fR" 4
.IX Item "--exclude-libs lib,lib,..."
Specifies a list of archive libraries from which symbols should not be automatically
exported.  The library names may be delimited by commas or colons.  Specifying
\&\f(CW\*(C`\-\-exclude\-libs ALL\*(C'\fR excludes symbols in all archive libraries from
automatic export.  This option is available only for the i386 \s-1PE\s0 targeted
port of the linker and for \s-1ELF\s0 targeted ports.  For i386 \s-1PE\s0, symbols
explicitly listed in a .def file are still exported, regardless of this
option.  For \s-1ELF\s0 targeted ports, symbols affected by this option will
be treated as hidden.
.IP "\fB\-\-exclude\-modules\-for\-implib\fR \fImodule\fR\fB,\fR\fImodule\fR\fB,...\fR" 4
.IX Item "--exclude-modules-for-implib module,module,..."
Specifies a list of object files or archive members, from which symbols
should not be automatically exported, but which should be copied wholesale
into the import library being generated during the link.  The module names
may be delimited by commas or colons, and must match exactly the filenames
used by \fBld\fR to open the files; for archive members, this is simply
the member name, but for object files the name listed must include and
match precisely any path used to specify the input file on the linker's
command-line.  This option is available only for the i386 \s-1PE\s0 targeted port
of the linker.  Symbols explicitly listed in a .def file are still exported,
regardless of this option.
.IP "\fB\-E\fR" 4
.IX Item "-E"
.PD 0
.IP "\fB\-\-export\-dynamic\fR" 4
.IX Item "--export-dynamic"
.IP "\fB\-\-no\-export\-dynamic\fR" 4
.IX Item "--no-export-dynamic"
.PD
When creating a dynamically linked executable, using the \fB\-E\fR
option or the \fB\-\-export\-dynamic\fR option causes the linker to add
all symbols to the dynamic symbol table.  The dynamic symbol table is the
set of symbols which are visible from dynamic objects at run time.
.Sp
If you do not use either of these options (or use the
\&\fB\-\-no\-export\-dynamic\fR option to restore the default behavior), the
dynamic symbol table will normally contain only those symbols which are
referenced by some dynamic object mentioned in the link.
.Sp
If you use \f(CW\*(C`dlopen\*(C'\fR to load a dynamic object which needs to refer
back to the symbols defined by the program, rather than some other
dynamic object, then you will probably need to use this option when
linking the program itself.
.Sp
You can also use the dynamic list to control what symbols should
be added to the dynamic symbol table if the output format supports it.
See the description of \fB\-\-dynamic\-list\fR.
.Sp
Note that this option is specific to \s-1ELF\s0 targeted ports.  \s-1PE\s0 targets
support a similar function to export all symbols from a \s-1DLL\s0 or \s-1EXE\s0; see
the description of \fB\-\-export\-all\-symbols\fR below.
.IP "\fB\-EB\fR" 4
.IX Item "-EB"
Link big-endian objects.  This affects the default output format.
.IP "\fB\-EL\fR" 4
.IX Item "-EL"
Link little-endian objects.  This affects the default output format.
.IP "\fB\-f\fR \fIname\fR" 4
.IX Item "-f name"
.PD 0
.IP "\fB\-\-auxiliary=\fR\fIname\fR" 4
.IX Item "--auxiliary=name"
.PD
When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_AUXILIARY\s0 field
to the specified name.  This tells the dynamic linker that the symbol
table of the shared object should be used as an auxiliary filter on the
symbol table of the shared object \fIname\fR.
.Sp
If you later link a program against this filter object, then, when you
run the program, the dynamic linker will see the \s-1DT_AUXILIARY\s0 field.  If
the dynamic linker resolves any symbols from the filter object, it will
first check whether there is a definition in the shared object
\&\fIname\fR.  If there is one, it will be used instead of the definition
in the filter object.  The shared object \fIname\fR need not exist.
Thus the shared object \fIname\fR may be used to provide an alternative
implementation of certain functions, perhaps for debugging or for
machine specific performance.
.Sp
This option may be specified more than once.  The \s-1DT_AUXILIARY\s0 entries
will be created in the order in which they appear on the command line.
.IP "\fB\-F\fR \fIname\fR" 4
.IX Item "-F name"
.PD 0
.IP "\fB\-\-filter=\fR\fIname\fR" 4
.IX Item "--filter=name"
.PD
When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_FILTER\s0 field to
the specified name.  This tells the dynamic linker that the symbol table
of the shared object which is being created should be used as a filter
on the symbol table of the shared object \fIname\fR.
.Sp
If you later link a program against this filter object, then, when you
run the program, the dynamic linker will see the \s-1DT_FILTER\s0 field.  The
dynamic linker will resolve symbols according to the symbol table of the
filter object as usual, but it will actually link to the definitions
found in the shared object \fIname\fR.  Thus the filter object can be
used to select a subset of the symbols provided by the object
\&\fIname\fR.
.Sp
Some older linkers used the \fB\-F\fR option throughout a compilation
toolchain for specifying object-file format for both input and output
object files.
The \s-1GNU\s0 linker uses other mechanisms for this purpose: the
\&\fB\-b\fR, \fB\-\-format\fR, \fB\-\-oformat\fR options, the
\&\f(CW\*(C`TARGET\*(C'\fR command in linker scripts, and the \f(CW\*(C`GNUTARGET\*(C'\fR
environment variable.
The \s-1GNU\s0 linker will ignore the \fB\-F\fR option when not
creating an \s-1ELF\s0 shared object.
.IP "\fB\-fini=\fR\fIname\fR" 4
.IX Item "-fini=name"
When creating an \s-1ELF\s0 executable or shared object, call \s-1NAME\s0 when the
executable or shared object is unloaded, by setting \s-1DT_FINI\s0 to the
address of the function.  By default, the linker uses \f(CW\*(C`_fini\*(C'\fR as
the function to call.
.IP "\fB\-g\fR" 4
.IX Item "-g"
Ignored.  Provided for compatibility with other tools.
.IP "\fB\-G\fR \fIvalue\fR" 4
.IX Item "-G value"
.PD 0
.IP "\fB\-\-gpsize=\fR\fIvalue\fR" 4
.IX Item "--gpsize=value"
.PD
Set the maximum size of objects to be optimized using the \s-1GP\s0 register to
\&\fIsize\fR.  This is only meaningful for object file formats such as
\&\s-1MIPS\s0 \s-1ECOFF\s0 which supports putting large and small objects into different
sections.  This is ignored for other object file formats.
.IP "\fB\-h\fR \fIname\fR" 4
.IX Item "-h name"
.PD 0
.IP "\fB\-soname=\fR\fIname\fR" 4
.IX Item "-soname=name"
.PD
When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_SONAME\s0 field to
the specified name.  When an executable is linked with a shared object
which has a \s-1DT_SONAME\s0 field, then when the executable is run the dynamic
linker will attempt to load the shared object specified by the \s-1DT_SONAME\s0
field rather than the using the file name given to the linker.
.IP "\fB\-i\fR" 4
.IX Item "-i"
Perform an incremental link (same as option \fB\-r\fR).
.IP "\fB\-init=\fR\fIname\fR" 4
.IX Item "-init=name"
When creating an \s-1ELF\s0 executable or shared object, call \s-1NAME\s0 when the
executable or shared object is loaded, by setting \s-1DT_INIT\s0 to the address
of the function.  By default, the linker uses \f(CW\*(C`_init\*(C'\fR as the
function to call.
.IP "\fB\-l\fR \fInamespec\fR" 4
.IX Item "-l namespec"
.PD 0
.IP "\fB\-\-library=\fR\fInamespec\fR" 4
.IX Item "--library=namespec"
.PD
Add the archive or object file specified by \fInamespec\fR to the
list of files to link.  This option may be used any number of times.
If \fInamespec\fR is of the form \fI:\fIfilename\fI\fR, \fBld\fR
will search the library path for a file called \fIfilename\fR, otherwise it
will search the library path for a file called \fIlib\fInamespec\fI.a\fR.
.Sp
On systems which support shared libraries, \fBld\fR may also search for
files other than \fIlib\fInamespec\fI.a\fR.  Specifically, on \s-1ELF\s0
and SunOS systems, \fBld\fR will search a directory for a library
called \fIlib\fInamespec\fI.so\fR before searching for one called
\&\fIlib\fInamespec\fI.a\fR.  (By convention, a \f(CW\*(C`.so\*(C'\fR extension
indicates a shared library.)  Note that this behavior does not apply
to \fI:\fIfilename\fI\fR, which always specifies a file called
\&\fIfilename\fR.
.Sp
The linker will search an archive only once, at the location where it is
specified on the command line.  If the archive defines a symbol which
was undefined in some object which appeared before the archive on the
command line, the linker will include the appropriate file(s) from the
archive.  However, an undefined symbol in an object appearing later on
the command line will not cause the linker to search the archive again.
.Sp
See the \fB\-(\fR option for a way to force the linker to search
archives multiple times.
.Sp
You may list the same archive multiple times on the command line.
.Sp
This type of archive searching is standard for Unix linkers.  However,
if you are using \fBld\fR on \s-1AIX\s0, note that it is different from the
behaviour of the \s-1AIX\s0 linker.
.IP "\fB\-L\fR \fIsearchdir\fR" 4
.IX Item "-L searchdir"
.PD 0
.IP "\fB\-\-library\-path=\fR\fIsearchdir\fR" 4
.IX Item "--library-path=searchdir"
.PD
Add path \fIsearchdir\fR to the list of paths that \fBld\fR will search
for archive libraries and \fBld\fR control scripts.  You may use this
option any number of times.  The directories are searched in the order
in which they are specified on the command line.  Directories specified
on the command line are searched before the default directories.  All
\&\fB\-L\fR options apply to all \fB\-l\fR options, regardless of the
order in which the options appear.  \fB\-L\fR options do not affect
how \fBld\fR searches for a linker script unless \fB\-T\fR
option is specified.
.Sp
If \fIsearchdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
by the \fIsysroot prefix\fR, a path specified when the linker is configured.
.Sp
The default set of paths searched (without being specified with
\&\fB\-L\fR) depends on which emulation mode \fBld\fR is using, and in
some cases also on how it was configured.
.Sp
The paths can also be specified in a link script with the
\&\f(CW\*(C`SEARCH_DIR\*(C'\fR command.  Directories specified this way are searched
at the point in which the linker script appears in the command line.
.IP "\fB\-m\fR \fIemulation\fR" 4
.IX Item "-m emulation"
Emulate the \fIemulation\fR linker.  You can list the available
emulations with the \fB\-\-verbose\fR or \fB\-V\fR options.
.Sp
If the \fB\-m\fR option is not used, the emulation is taken from the
\&\f(CW\*(C`LDEMULATION\*(C'\fR environment variable, if that is defined.
.Sp
Otherwise, the default emulation depends upon how the linker was
configured.
.IP "\fB\-M\fR" 4
.IX Item "-M"
.PD 0
.IP "\fB\-\-print\-map\fR" 4
.IX Item "--print-map"
.PD
Print a link map to the standard output.  A link map provides
information about the link, including the following:
.RS 4
.IP "\(bu" 4
Where object files are mapped into memory.
.IP "\(bu" 4
How common symbols are allocated.
.IP "\(bu" 4
All archive members included in the link, with a mention of the symbol
which caused the archive member to be brought in.
.IP "\(bu" 4
The values assigned to symbols.
.Sp
Note \- symbols whose values are computed by an expression which
involves a reference to a previous value of the same symbol may not
have correct result displayed in the link map.  This is because the
linker discards intermediate results and only retains the final value
of an expression.  Under such circumstances the linker will display
the final value enclosed by square brackets.  Thus for example a
linker script containing:
.Sp
.Vb 3
\&           foo = 1
\&           foo = foo * 4
\&           foo = foo + 8
.Ve
.Sp
will produce the following output in the link map if the \fB\-M\fR
option is used:
.Sp
.Vb 3
\&           0x00000001                foo = 0x1
\&           [0x0000000c]                foo = (foo * 0x4)
\&           [0x0000000c]                foo = (foo + 0x8)
.Ve
.Sp
See \fBExpressions\fR for more information about expressions in linker
scripts.
.RE
.RS 4
.RE
.IP "\fB\-n\fR" 4
.IX Item "-n"
.PD 0
.IP "\fB\-\-nmagic\fR" 4
.IX Item "--nmagic"
.PD
Turn off page alignment of sections, and disable linking against shared
libraries.  If the output format supports Unix style magic numbers,
mark the output as \f(CW\*(C`NMAGIC\*(C'\fR.
.IP "\fB\-N\fR" 4
.IX Item "-N"
.PD 0
.IP "\fB\-\-omagic\fR" 4
.IX Item "--omagic"
.PD
Set the text and data sections to be readable and writable.  Also, do
not page-align the data segment, and disable linking against shared
libraries.  If the output format supports Unix style magic numbers,
mark the output as \f(CW\*(C`OMAGIC\*(C'\fR. Note: Although a writable text section
is allowed for PE-COFF targets, it does not conform to the format
specification published by Microsoft.
.IP "\fB\-\-no\-omagic\fR" 4
.IX Item "--no-omagic"
This option negates most of the effects of the \fB\-N\fR option.  It
sets the text section to be read-only, and forces the data segment to
be page-aligned.  Note \- this option does not enable linking against
shared libraries.  Use \fB\-Bdynamic\fR for this.
.IP "\fB\-o\fR \fIoutput\fR" 4
.IX Item "-o output"
.PD 0
.IP "\fB\-\-output=\fR\fIoutput\fR" 4
.IX Item "--output=output"
.PD
Use \fIoutput\fR as the name for the program produced by \fBld\fR; if this
option is not specified, the name \fIa.out\fR is used by default.  The
script command \f(CW\*(C`OUTPUT\*(C'\fR can also specify the output file name.
.IP "\fB\-O\fR \fIlevel\fR" 4
.IX Item "-O level"
If \fIlevel\fR is a numeric values greater than zero \fBld\fR optimizes
the output.  This might take significantly longer and therefore probably
should only be enabled for the final binary.  At the moment this
option only affects \s-1ELF\s0 shared library generation.  Future releases of
the linker may make more use of this option.  Also currently there is
no difference in the linker's behaviour for different non-zero values
of this option.  Again this may change with future releases.
.IP "\fB\-q\fR" 4
.IX Item "-q"
.PD 0
.IP "\fB\-\-emit\-relocs\fR" 4
.IX Item "--emit-relocs"
.PD
Leave relocation sections and contents in fully linked executables.
Post link analysis and optimization tools may need this information in
order to perform correct modifications of executables.  This results
in larger executables.
.Sp
This option is currently only supported on \s-1ELF\s0 platforms.
.IP "\fB\-\-force\-dynamic\fR" 4
.IX Item "--force-dynamic"
Force the output file to have dynamic sections.  This option is specific
to VxWorks targets.
.IP "\fB\-r\fR" 4
.IX Item "-r"
.PD 0
.IP "\fB\-\-relocatable\fR" 4
.IX Item "--relocatable"
.PD
Generate relocatable output\-\-\-i.e., generate an output file that can in
turn serve as input to \fBld\fR.  This is often called \fIpartial
linking\fR.  As a side effect, in environments that support standard Unix
magic numbers, this option also sets the output file's magic number to
\&\f(CW\*(C`OMAGIC\*(C'\fR.
If this option is not specified, an absolute file is produced.  When
linking \*(C+ programs, this option \fIwill not\fR resolve references to
constructors; to do that, use \fB\-Ur\fR.
.Sp
When an input file does not have the same format as the output file,
partial linking is only supported if that input file does not contain any
relocations.  Different output formats can have further restrictions; for
example some \f(CW\*(C`a.out\*(C'\fR\-based formats do not support partial linking
with input files in other formats at all.
.Sp
This option does the same thing as \fB\-i\fR.
.IP "\fB\-R\fR \fIfilename\fR" 4
.IX Item "-R filename"
.PD 0
.IP "\fB\-\-just\-symbols=\fR\fIfilename\fR" 4
.IX Item "--just-symbols=filename"
.PD
Read symbol names and their addresses from \fIfilename\fR, but do not
relocate it or include it in the output.  This allows your output file
to refer symbolically to absolute locations of memory defined in other
programs.  You may use this option more than once.
.Sp
For compatibility with other \s-1ELF\s0 linkers, if the \fB\-R\fR option is
followed by a directory name, rather than a file name, it is treated as
the \fB\-rpath\fR option.
.IP "\fB\-s\fR" 4
.IX Item "-s"
.PD 0
.IP "\fB\-\-strip\-all\fR" 4
.IX Item "--strip-all"
.PD
Omit all symbol information from the output file.
.IP "\fB\-S\fR" 4
.IX Item "-S"
.PD 0
.IP "\fB\-\-strip\-debug\fR" 4
.IX Item "--strip-debug"
.PD
Omit debugger symbol information (but not all symbols) from the output file.
.IP "\fB\-t\fR" 4
.IX Item "-t"
.PD 0
.IP "\fB\-\-trace\fR" 4
.IX Item "--trace"
.PD
Print the names of the input files as \fBld\fR processes them.
.IP "\fB\-T\fR \fIscriptfile\fR" 4
.IX Item "-T scriptfile"
.PD 0
.IP "\fB\-\-script=\fR\fIscriptfile\fR" 4
.IX Item "--script=scriptfile"
.PD
Use \fIscriptfile\fR as the linker script.  This script replaces
\&\fBld\fR's default linker script (rather than adding to it), so
\&\fIcommandfile\fR must specify everything necessary to describe the
output file.    If \fIscriptfile\fR does not exist in
the current directory, \f(CW\*(C`ld\*(C'\fR looks for it in the directories
specified by any preceding \fB\-L\fR options.  Multiple \fB\-T\fR
options accumulate.
.IP "\fB\-dT\fR \fIscriptfile\fR" 4
.IX Item "-dT scriptfile"
.PD 0
.IP "\fB\-\-default\-script=\fR\fIscriptfile\fR" 4
.IX Item "--default-script=scriptfile"
.PD
Use \fIscriptfile\fR as the default linker script.
.Sp
This option is similar to the \fB\-\-script\fR option except that
processing of the script is delayed until after the rest of the
command line has been processed.  This allows options placed after the
\&\fB\-\-default\-script\fR option on the command line to affect the
behaviour of the linker script, which can be important when the linker
command line cannot be directly controlled by the user.  (eg because
the command line is being constructed by another tool, such as
\&\fBgcc\fR).
.IP "\fB\-u\fR \fIsymbol\fR" 4
.IX Item "-u symbol"
.PD 0
.IP "\fB\-\-undefined=\fR\fIsymbol\fR" 4
.IX Item "--undefined=symbol"
.PD
Force \fIsymbol\fR to be entered in the output file as an undefined
symbol.  Doing this may, for example, trigger linking of additional
modules from standard libraries.  \fB\-u\fR may be repeated with
different option arguments to enter additional undefined symbols.  This
option is equivalent to the \f(CW\*(C`EXTERN\*(C'\fR linker script command.
.IP "\fB\-Ur\fR" 4
.IX Item "-Ur"
For anything other than \*(C+ programs, this option is equivalent to
\&\fB\-r\fR: it generates relocatable output\-\-\-i.e., an output file that can in
turn serve as input to \fBld\fR.  When linking \*(C+ programs, \fB\-Ur\fR
\&\fIdoes\fR resolve references to constructors, unlike \fB\-r\fR.
It does not work to use \fB\-Ur\fR on files that were themselves linked
with \fB\-Ur\fR; once the constructor table has been built, it cannot
be added to.  Use \fB\-Ur\fR only for the last partial link, and
\&\fB\-r\fR for the others.
.IP "\fB\-\-unique[=\fR\fI\s-1SECTION\s0\fR\fB]\fR" 4
.IX Item "--unique[=SECTION]"
Creates a separate output section for every input section matching
\&\fI\s-1SECTION\s0\fR, or if the optional wildcard \fI\s-1SECTION\s0\fR argument is
missing, for every orphan input section.  An orphan section is one not
specifically mentioned in a linker script.  You may use this option
multiple times on the command line;  It prevents the normal merging of
input sections with the same name, overriding output section assignments
in a linker script.
.IP "\fB\-v\fR" 4
.IX Item "-v"
.PD 0
.IP "\fB\-\-version\fR" 4
.IX Item "--version"
.IP "\fB\-V\fR" 4
.IX Item "-V"
.PD
Display the version number for \fBld\fR.  The \fB\-V\fR option also
lists the supported emulations.
.IP "\fB\-x\fR" 4
.IX Item "-x"
.PD 0
.IP "\fB\-\-discard\-all\fR" 4
.IX Item "--discard-all"
.PD
Delete all local symbols.
.IP "\fB\-X\fR" 4
.IX Item "-X"
.PD 0
.IP "\fB\-\-discard\-locals\fR" 4
.IX Item "--discard-locals"
.PD
Delete all temporary local symbols.  (These symbols start with
system-specific local label prefixes, typically \fB.L\fR for \s-1ELF\s0 systems
or \fBL\fR for traditional a.out systems.)
.IP "\fB\-y\fR \fIsymbol\fR" 4
.IX Item "-y symbol"
.PD 0
.IP "\fB\-\-trace\-symbol=\fR\fIsymbol\fR" 4
.IX Item "--trace-symbol=symbol"
.PD
Print the name of each linked file in which \fIsymbol\fR appears.  This
option may be given any number of times.  On many systems it is necessary
to prepend an underscore.
.Sp
This option is useful when you have an undefined symbol in your link but
don't know where the reference is coming from.
.IP "\fB\-Y\fR \fIpath\fR" 4
.IX Item "-Y path"
Add \fIpath\fR to the default library search path.  This option exists
for Solaris compatibility.
.IP "\fB\-z\fR \fIkeyword\fR" 4
.IX Item "-z keyword"
The recognized keywords are:
.RS 4
.IP "\fBcombreloc\fR" 4
.IX Item "combreloc"
Combines multiple reloc sections and sorts them to make dynamic symbol
lookup caching possible.
.IP "\fBdefs\fR" 4
.IX Item "defs"
Disallows undefined symbols in object files.  Undefined symbols in
shared libraries are still allowed.
.IP "\fBexecstack\fR" 4
.IX Item "execstack"
Marks the object as requiring executable stack.
.IP "\fBinitfirst\fR" 4
.IX Item "initfirst"
This option is only meaningful when building a shared object.
It marks the object so that its runtime initialization will occur
before the runtime initialization of any other objects brought into
the process at the same time.  Similarly the runtime finalization of
the object will occur after the runtime finalization of any other
objects.
.IP "\fBinterpose\fR" 4
.IX Item "interpose"
Marks the object that its symbol table interposes before all symbols
but the primary executable.
.IP "\fBlazy\fR" 4
.IX Item "lazy"
When generating an executable or shared library, mark it to tell the
dynamic linker to defer function call resolution to the point when
the function is called (lazy binding), rather than at load time.
Lazy binding is the default.
.IP "\fBloadfltr\fR" 4
.IX Item "loadfltr"
Marks  the object that its filters be processed immediately at
runtime.
.IP "\fBmuldefs\fR" 4
.IX Item "muldefs"
Allows multiple definitions.
.IP "\fBnocombreloc\fR" 4
.IX Item "nocombreloc"
Disables multiple reloc sections combining.
.IP "\fBnocopyreloc\fR" 4
.IX Item "nocopyreloc"
Disables production of copy relocs.
.IP "\fBnodefaultlib\fR" 4
.IX Item "nodefaultlib"
Marks the object that the search for dependencies of this object will
ignore any default library search paths.
.IP "\fBnodelete\fR" 4
.IX Item "nodelete"
Marks the object shouldn't be unloaded at runtime.
.IP "\fBnodlopen\fR" 4
.IX Item "nodlopen"
Marks the object not available to \f(CW\*(C`dlopen\*(C'\fR.
.IP "\fBnodump\fR" 4
.IX Item "nodump"
Marks the object can not be dumped by \f(CW\*(C`dldump\*(C'\fR.
.IP "\fBnoexecstack\fR" 4
.IX Item "noexecstack"
Marks the object as not requiring executable stack.
.IP "\fBnorelro\fR" 4
.IX Item "norelro"
Don't create an \s-1ELF\s0 \f(CW\*(C`PT_GNU_RELRO\*(C'\fR segment header in the object.
.IP "\fBnow\fR" 4
.IX Item "now"
When generating an executable or shared library, mark it to tell the
dynamic linker to resolve all symbols when the program is started, or
when the shared library is linked to using dlopen, instead of
deferring function call resolution to the point when the function is
first called.
.IP "\fBorigin\fR" 4
.IX Item "origin"
Marks the object may contain \f(CW$ORIGIN\fR.
.IP "\fBrelro\fR" 4
.IX Item "relro"
Create an \s-1ELF\s0 \f(CW\*(C`PT_GNU_RELRO\*(C'\fR segment header in the object.
.IP "\fBmax\-page\-size=\fR\fIvalue\fR" 4
.IX Item "max-page-size=value"
Set the emulation maximum page size to \fIvalue\fR.
.IP "\fBcommon\-page\-size=\fR\fIvalue\fR" 4
.IX Item "common-page-size=value"
Set the emulation common page size to \fIvalue\fR.
.RE
.RS 4
.Sp
Other keywords are ignored for Solaris compatibility.
.RE
.IP "\fB\-(\fR \fIarchives\fR \fB\-)\fR" 4
.IX Item "-( archives -)"
.PD 0
.IP "\fB\-\-start\-group\fR \fIarchives\fR \fB\-\-end\-group\fR" 4
.IX Item "--start-group archives --end-group"
.PD
The \fIarchives\fR should be a list of archive files.  They may be
either explicit file names, or \fB\-l\fR options.
.Sp
The specified archives are searched repeatedly until no new undefined
references are created.  Normally, an archive is searched only once in
the order that it is specified on the command line.  If a symbol in that
archive is needed to resolve an undefined symbol referred to by an
object in an archive that appears later on the command line, the linker
would not be able to resolve that reference.  By grouping the archives,
they all be searched repeatedly until all possible references are
resolved.
.Sp
Using this option has a significant performance cost.  It is best to use
it only when there are unavoidable circular references between two or
more archives.
.IP "\fB\-\-accept\-unknown\-input\-arch\fR" 4
.IX Item "--accept-unknown-input-arch"
.PD 0
.IP "\fB\-\-no\-accept\-unknown\-input\-arch\fR" 4
.IX Item "--no-accept-unknown-input-arch"
.PD
Tells the linker to accept input files whose architecture cannot be
recognised.  The assumption is that the user knows what they are doing
and deliberately wants to link in these unknown input files.  This was
the default behaviour of the linker, before release 2.14.  The default
behaviour from release 2.14 onwards is to reject such input files, and
so the \fB\-\-accept\-unknown\-input\-arch\fR option has been added to
restore the old behaviour.
.IP "\fB\-\-as\-needed\fR" 4
.IX Item "--as-needed"
.PD 0
.IP "\fB\-\-no\-as\-needed\fR" 4
.IX Item "--no-as-needed"
.PD
This option affects \s-1ELF\s0 \s-1DT_NEEDED\s0 tags for dynamic libraries mentioned
on the command line after the \fB\-\-as\-needed\fR option.  Normally
the linker will add a \s-1DT_NEEDED\s0 tag for each dynamic library mentioned
on the command line, regardless of whether the library is actually
needed or not.  \fB\-\-as\-needed\fR causes a \s-1DT_NEEDED\s0 tag to only be
emitted for a library that satisfies an undefined symbol reference
from a regular object file or, if the library is not found in the
\&\s-1DT_NEEDED\s0 lists of other libraries linked up to that point, an
undefined symbol reference from another dynamic library.
\&\fB\-\-no\-as\-needed\fR restores the default behaviour.
.IP "\fB\-\-add\-needed\fR" 4
.IX Item "--add-needed"
.PD 0
.IP "\fB\-\-no\-add\-needed\fR" 4
.IX Item "--no-add-needed"
.PD
These two options have been deprecated because of the similarity of
their names to the \fB\-\-as\-needed\fR and \fB\-\-no\-as\-needed\fR
options.  They have been replaced by \fB\-\-copy\-dt\-needed\-entries\fR
and \fB\-\-no\-copy\-dt\-needed\-entries\fR.
.IP "\fB\-assert\fR \fIkeyword\fR" 4
.IX Item "-assert keyword"
This option is ignored for SunOS compatibility.
.IP "\fB\-Bdynamic\fR" 4
.IX Item "-Bdynamic"
.PD 0
.IP "\fB\-dy\fR" 4
.IX Item "-dy"
.IP "\fB\-call_shared\fR" 4
.IX Item "-call_shared"
.PD
Link against dynamic libraries.  This is only meaningful on platforms
for which shared libraries are supported.  This option is normally the
default on such platforms.  The different variants of this option are
for compatibility with various systems.  You may use this option
multiple times on the command line: it affects library searching for
\&\fB\-l\fR options which follow it.
.IP "\fB\-Bgroup\fR" 4
.IX Item "-Bgroup"
Set the \f(CW\*(C`DF_1_GROUP\*(C'\fR flag in the \f(CW\*(C`DT_FLAGS_1\*(C'\fR entry in the dynamic
section.  This causes the runtime linker to handle lookups in this
object and its dependencies to be performed only inside the group.
\&\fB\-\-unresolved\-symbols=report\-all\fR is implied.  This option is
only meaningful on \s-1ELF\s0 platforms which support shared libraries.
.IP "\fB\-Bstatic\fR" 4
.IX Item "-Bstatic"
.PD 0
.IP "\fB\-dn\fR" 4
.IX Item "-dn"
.IP "\fB\-non_shared\fR" 4
.IX Item "-non_shared"
.IP "\fB\-static\fR" 4
.IX Item "-static"
.PD
Do not link against shared libraries.  This is only meaningful on
platforms for which shared libraries are supported.  The different
variants of this option are for compatibility with various systems.  You
may use this option multiple times on the command line: it affects
library searching for \fB\-l\fR options which follow it.  This
option also implies \fB\-\-unresolved\-symbols=report\-all\fR.  This
option can be used with \fB\-shared\fR.  Doing so means that a
shared library is being created but that all of the library's external
references must be resolved by pulling in entries from static
libraries.
.IP "\fB\-Bsymbolic\fR" 4
.IX Item "-Bsymbolic"
When creating a shared library, bind references to global symbols to the
definition within the shared library, if any.  Normally, it is possible
for a program linked against a shared library to override the definition
within the shared library.  This option is only meaningful on \s-1ELF\s0
platforms which support shared libraries.
.IP "\fB\-Bsymbolic\-functions\fR" 4
.IX Item "-Bsymbolic-functions"
When creating a shared library, bind references to global function
symbols to the definition within the shared library, if any.
This option is only meaningful on \s-1ELF\s0 platforms which support shared
libraries.
.IP "\fB\-\-dynamic\-list=\fR\fIdynamic-list-file\fR" 4
.IX Item "--dynamic-list=dynamic-list-file"
Specify the name of a dynamic list file to the linker.  This is
typically used when creating shared libraries to specify a list of
global symbols whose references shouldn't be bound to the definition
within the shared library, or creating dynamically linked executables
to specify a list of symbols which should be added to the symbol table
in the executable.  This option is only meaningful on \s-1ELF\s0 platforms
which support shared libraries.
.Sp
The format of the dynamic list is the same as the version node without
scope and node name.  See \fB\s-1VERSION\s0\fR for more information.
.IP "\fB\-\-dynamic\-list\-data\fR" 4
.IX Item "--dynamic-list-data"
Include all global data symbols to the dynamic list.
.IP "\fB\-\-dynamic\-list\-cpp\-new\fR" 4
.IX Item "--dynamic-list-cpp-new"
Provide the builtin dynamic list for \*(C+ operator new and delete.  It
is mainly useful for building shared libstdc++.
.IP "\fB\-\-dynamic\-list\-cpp\-typeinfo\fR" 4
.IX Item "--dynamic-list-cpp-typeinfo"
Provide the builtin dynamic list for \*(C+ runtime type identification.
.IP "\fB\-\-check\-sections\fR" 4
.IX Item "--check-sections"
.PD 0
.IP "\fB\-\-no\-check\-sections\fR" 4
.IX Item "--no-check-sections"
.PD
Asks the linker \fInot\fR to check section addresses after they have
been assigned to see if there are any overlaps.  Normally the linker will
perform this check, and if it finds any overlaps it will produce
suitable error messages.  The linker does know about, and does make
allowances for sections in overlays.  The default behaviour can be
restored by using the command line switch \fB\-\-check\-sections\fR.
Section overlap is not usually checked for relocatable links.  You can
force checking in that case by using the \fB\-\-check\-sections\fR
option.
.IP "\fB\-\-copy\-dt\-needed\-entries\fR" 4
.IX Item "--copy-dt-needed-entries"
.PD 0
.IP "\fB\-\-no\-copy\-dt\-needed\-entries\fR" 4
.IX Item "--no-copy-dt-needed-entries"
.PD
This option affects the treatment of dynamic libraries referred to 
by \s-1DT_NEEDED\s0 tags \fIinside\fR \s-1ELF\s0 dynamic libraries mentioned on the
command line.  Normally the linker won't add a \s-1DT_NEEDED\s0 tag to the
output binary for each library mentioned in a \s-1DT_NEEDED\s0 tag in an
input dynamic library.  With \fB\-\-copy\-dt\-needed\-entries\fR
specified on the command line however any dynamic libraries that
follow it will have their \s-1DT_NEEDED\s0 entries added.  The default
behaviour can be restored with \fB\-\-no\-copy\-dt\-needed\-entries\fR.
.Sp
This option also has an effect on the resolution of symbols in dynamic
libraries.  With \fB\-\-copy\-dt\-needed\-entries\fR dynamic libraries
mentioned on the command line will be recursively searched, following
their \s-1DT_NEEDED\s0 tags to other libraries, in order to resolve symbols
required by the output binary.  With the default setting however
the searching of dynamic libraries that follow it will stop with the
dynamic library itself.  No \s-1DT_NEEDED\s0 links will be traversed to resolve
symbols.
.IP "\fB\-\-cref\fR" 4
.IX Item "--cref"
Output a cross reference table.  If a linker map file is being
generated, the cross reference table is printed to the map file.
Otherwise, it is printed on the standard output.
.Sp
The format of the table is intentionally simple, so that it may be
easily processed by a script if necessary.  The symbols are printed out,
sorted by name.  For each symbol, a list of file names is given.  If the
symbol is defined, the first file listed is the location of the
definition.  The remaining files contain references to the symbol.
.IP "\fB\-\-no\-define\-common\fR" 4
.IX Item "--no-define-common"
This option inhibits the assignment of addresses to common symbols.
The script command \f(CW\*(C`INHIBIT_COMMON_ALLOCATION\*(C'\fR has the same effect.
.Sp
The \fB\-\-no\-define\-common\fR option allows decoupling
the decision to assign addresses to Common symbols from the choice
of the output file type; otherwise a non-Relocatable output type
forces assigning addresses to Common symbols.
Using \fB\-\-no\-define\-common\fR allows Common symbols that are referenced
from a shared library to be assigned addresses only in the main program.
This eliminates the unused duplicate space in the shared library,
and also prevents any possible confusion over resolving to the wrong
duplicate when there are many dynamic modules with specialized search
paths for runtime symbol resolution.
.IP "\fB\-\-defsym=\fR\fIsymbol\fR\fB=\fR\fIexpression\fR" 4
.IX Item "--defsym=symbol=expression"
Create a global symbol in the output file, containing the absolute
address given by \fIexpression\fR.  You may use this option as many
times as necessary to define multiple symbols in the command line.  A
limited form of arithmetic is supported for the \fIexpression\fR in this
context: you may give a hexadecimal constant or the name of an existing
symbol, or use \f(CW\*(C`+\*(C'\fR and \f(CW\*(C`\-\*(C'\fR to add or subtract hexadecimal
constants or symbols.  If you need more elaborate expressions, consider
using the linker command language from a script.  \fINote:\fR there should be no white
space between \fIsymbol\fR, the equals sign ("\fB=\fR"), and
\&\fIexpression\fR.
.IP "\fB\-\-demangle[=\fR\fIstyle\fR\fB]\fR" 4
.IX Item "--demangle[=style]"
.PD 0
.IP "\fB\-\-no\-demangle\fR" 4
.IX Item "--no-demangle"
.PD
These options control whether to demangle symbol names in error messages
and other output.  When the linker is told to demangle, it tries to
present symbol names in a readable fashion: it strips leading
underscores if they are used by the object file format, and converts \*(C+
mangled symbol names into user readable names.  Different compilers have
different mangling styles.  The optional demangling style argument can be used
to choose an appropriate demangling style for your compiler.  The linker will
demangle by default unless the environment variable \fB\s-1COLLECT_NO_DEMANGLE\s0\fR
is set.  These options may be used to override the default.
.IP "\fB\-I\fR\fIfile\fR" 4
.IX Item "-Ifile"
.PD 0
.IP "\fB\-\-dynamic\-linker=\fR\fIfile\fR" 4
.IX Item "--dynamic-linker=file"
.PD
Set the name of the dynamic linker.  This is only meaningful when
generating dynamically linked \s-1ELF\s0 executables.  The default dynamic
linker is normally correct; don't use this unless you know what you are
doing.
.IP "\fB\-\-fatal\-warnings\fR" 4
.IX Item "--fatal-warnings"
.PD 0
.IP "\fB\-\-no\-fatal\-warnings\fR" 4
.IX Item "--no-fatal-warnings"
.PD
Treat all warnings as errors.  The default behaviour can be restored
with the option \fB\-\-no\-fatal\-warnings\fR.
.IP "\fB\-\-force\-exe\-suffix\fR" 4
.IX Item "--force-exe-suffix"
Make sure that an output file has a .exe suffix.
.Sp
If a successfully built fully linked output file does not have a
\&\f(CW\*(C`.exe\*(C'\fR or \f(CW\*(C`.dll\*(C'\fR suffix, this option forces the linker to copy
the output file to one of the same name with a \f(CW\*(C`.exe\*(C'\fR suffix. This
option is useful when using unmodified Unix makefiles on a Microsoft
Windows host, since some versions of Windows won't run an image unless
it ends in a \f(CW\*(C`.exe\*(C'\fR suffix.
.IP "\fB\-\-gc\-sections\fR" 4
.IX Item "--gc-sections"
.PD 0
.IP "\fB\-\-no\-gc\-sections\fR" 4
.IX Item "--no-gc-sections"
.PD
Enable garbage collection of unused input sections.  It is ignored on
targets that do not support this option.  The default behaviour (of not
performing this garbage collection) can be restored by specifying
\&\fB\-\-no\-gc\-sections\fR on the command line.
.Sp
\&\fB\-\-gc\-sections\fR decides which input sections are used by
examining symbols and relocations.  The section containing the entry
symbol and all sections containing symbols undefined on the
command-line will be kept, as will sections containing symbols
referenced by dynamic objects.  Note that when building shared
libraries, the linker must assume that any visible symbol is
referenced.  Once this initial set of sections has been determined,
the linker recursively marks as used any section referenced by their
relocations.  See \fB\-\-entry\fR and \fB\-\-undefined\fR.
.Sp
This option can be set when doing a partial link (enabled with option
\&\fB\-r\fR).  In this case the root of symbols kept must be explicitly 
specified either by an \fB\-\-entry\fR or \fB\-\-undefined\fR option or by
a \f(CW\*(C`ENTRY\*(C'\fR command in the linker script.
.IP "\fB\-\-print\-gc\-sections\fR" 4
.IX Item "--print-gc-sections"
.PD 0
.IP "\fB\-\-no\-print\-gc\-sections\fR" 4
.IX Item "--no-print-gc-sections"
.PD
List all sections removed by garbage collection.  The listing is
printed on stderr.  This option is only effective if garbage
collection has been enabled via the \fB\-\-gc\-sections\fR) option.  The
default behaviour (of not listing the sections that are removed) can
be restored by specifying \fB\-\-no\-print\-gc\-sections\fR on the command
line.
.IP "\fB\-\-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\-\-help\fR" 4
.IX Item "--help"
Print a summary of the command-line options on the standard output and exit.
.IP "\fB\-\-target\-help\fR" 4
.IX Item "--target-help"
Print a summary of all target specific options on the standard output and exit.
.IP "\fB\-Map=\fR\fImapfile\fR" 4
.IX Item "-Map=mapfile"
Print a link map to the file \fImapfile\fR.  See the description of the
\&\fB\-M\fR option, above.
.IP "\fB\-\-no\-keep\-memory\fR" 4
.IX Item "--no-keep-memory"
\&\fBld\fR normally optimizes for speed over memory usage by caching the
symbol tables of input files in memory.  This option tells \fBld\fR to
instead optimize for memory usage, by rereading the symbol tables as
necessary.  This may be required if \fBld\fR runs out of memory space
while linking a large executable.
.IP "\fB\-\-no\-undefined\fR" 4
.IX Item "--no-undefined"
.PD 0
.IP "\fB\-z defs\fR" 4
.IX Item "-z defs"
.PD
Report unresolved symbol references from regular object files.  This
is done even if the linker is creating a non-symbolic shared library.
The switch \fB\-\-[no\-]allow\-shlib\-undefined\fR controls the
behaviour for reporting unresolved references found in shared
libraries being linked in.
.IP "\fB\-\-allow\-multiple\-definition\fR" 4
.IX Item "--allow-multiple-definition"
.PD 0
.IP "\fB\-z muldefs\fR" 4
.IX Item "-z muldefs"
.PD
Normally when a symbol is defined multiple times, the linker will
report a fatal error. These options allow multiple definitions and the
first definition will be used.
.IP "\fB\-\-allow\-shlib\-undefined\fR" 4
.IX Item "--allow-shlib-undefined"
.PD 0
.IP "\fB\-\-no\-allow\-shlib\-undefined\fR" 4
.IX Item "--no-allow-shlib-undefined"
.PD
Allows or disallows undefined symbols in shared libraries.
This switch is similar to \fB\-\-no\-undefined\fR except that it
determines the behaviour when the undefined symbols are in a
shared library rather than a regular object file.  It does not affect
how undefined symbols in regular object files are handled.
.Sp
The default behaviour is to report errors for any undefined symbols
referenced in shared libraries if the linker is being used to create
an executable, but to allow them if the linker is being used to create
a shared library.
.Sp
The reasons for allowing undefined symbol references in shared
libraries specified at link time are that:
.RS 4
.IP "\(bu" 4
A shared library specified at link time may not be the same as the one
that is available at load time, so the symbol might actually be
resolvable at load time.
.IP "\(bu" 4
There are some operating systems, eg BeOS and \s-1HPPA\s0, where undefined
symbols in shared libraries are normal.
.Sp
The BeOS kernel for example patches shared libraries at load time to
select whichever function is most appropriate for the current
architecture.  This is used, for example, to dynamically select an
appropriate memset function.
.RE
.RS 4
.RE
.IP "\fB\-\-no\-undefined\-version\fR" 4
.IX Item "--no-undefined-version"
Normally when a symbol has an undefined version, the linker will ignore
it. This option disallows symbols with undefined version and a fatal error
will be issued instead.
.IP "\fB\-\-default\-symver\fR" 4
.IX Item "--default-symver"
Create and use a default symbol version (the soname) for unversioned
exported symbols.
.IP "\fB\-\-default\-imported\-symver\fR" 4
.IX Item "--default-imported-symver"
Create and use a default symbol version (the soname) for unversioned
imported symbols.
.IP "\fB\-\-no\-warn\-mismatch\fR" 4
.IX Item "--no-warn-mismatch"
Normally \fBld\fR will give an error if you try to link together input
files that are mismatched for some reason, perhaps because they have
been compiled for different processors or for different endiannesses.
This option tells \fBld\fR that it should silently permit such possible
errors.  This option should only be used with care, in cases when you
have taken some special action that ensures that the linker errors are
inappropriate.
.IP "\fB\-\-no\-warn\-search\-mismatch\fR" 4
.IX Item "--no-warn-search-mismatch"
Normally \fBld\fR will give a warning if it finds an incompatible
library during a library search.  This option silences the warning.
.IP "\fB\-\-no\-whole\-archive\fR" 4
.IX Item "--no-whole-archive"
Turn off the effect of the \fB\-\-whole\-archive\fR option for subsequent
archive files.
.IP "\fB\-\-noinhibit\-exec\fR" 4
.IX Item "--noinhibit-exec"
Retain the executable output file whenever it is still usable.
Normally, the linker will not produce an output file if it encounters
errors during the link process; it exits without writing an output file
when it issues any error whatsoever.
.IP "\fB\-nostdlib\fR" 4
.IX Item "-nostdlib"
Only search library directories explicitly specified on the
command line.  Library directories specified in linker scripts
(including linker scripts specified on the command line) are ignored.
.IP "\fB\-\-oformat=\fR\fIoutput-format\fR" 4
.IX Item "--oformat=output-format"
\&\fBld\fR may be configured to support more than one kind of object
file.  If your \fBld\fR is configured this way, you can use the
\&\fB\-\-oformat\fR option to specify the binary format for the output
object file.  Even when \fBld\fR is configured to support alternative
object formats, you don't usually need to specify this, as \fBld\fR
should be configured to produce as a default output format the most
usual format on each machine.  \fIoutput-format\fR is a text string, the
name of a particular format supported by the \s-1BFD\s0 libraries.  (You can
list the available binary formats with \fBobjdump \-i\fR.)  The script
command \f(CW\*(C`OUTPUT_FORMAT\*(C'\fR can also specify the output format, but
this option overrides it.
.IP "\fB\-pie\fR" 4
.IX Item "-pie"
.PD 0
.IP "\fB\-\-pic\-executable\fR" 4
.IX Item "--pic-executable"
.PD
Create a position independent executable.  This is currently only supported on
\&\s-1ELF\s0 platforms.  Position independent executables are similar to shared
libraries in that they are relocated by the dynamic linker to the virtual
address the \s-1OS\s0 chooses for them (which can vary between invocations).  Like
normal dynamically linked executables they can be executed and symbols
defined in the executable cannot be overridden by shared libraries.
.IP "\fB\-qmagic\fR" 4
.IX Item "-qmagic"
This option is ignored for Linux compatibility.
.IP "\fB\-Qy\fR" 4
.IX Item "-Qy"
This option is ignored for \s-1SVR4\s0 compatibility.
.IP "\fB\-\-relax\fR" 4
.IX Item "--relax"
.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 combinig constant values.
.Sp
On some platforms these link time global optimizations may make symbolic
debugging of the resulting executable impossible.
This is known to be the case for the Matsushita \s-1MN10200\s0 and \s-1MN10300\s0
family of processors.
.Sp
On platforms where this is not supported, \fB\-\-relax\fR is accepted,
but ignored.
.Sp
On platforms where \fB\-\-relax\fR is accepted the option
\&\fB\-\-no\-relax\fR can be used to disable the feature.
.IP "\fB\-\-retain\-symbols\-file=\fR\fIfilename\fR" 4
.IX Item "--retain-symbols-file=filename"
Retain \fIonly\fR the symbols listed in the file \fIfilename\fR,
discarding all others.  \fIfilename\fR is simply a flat file, with one
symbol name per line.  This option is especially useful in environments
(such as VxWorks)
where a large global symbol table is accumulated gradually, to conserve
run-time memory.
.Sp
\&\fB\-\-retain\-symbols\-file\fR does \fInot\fR discard undefined symbols,
or symbols needed for relocations.
.Sp
You may only specify \fB\-\-retain\-symbols\-file\fR once in the command
line.  It overrides \fB\-s\fR and \fB\-S\fR.
.IP "\fB\-rpath=\fR\fIdir\fR" 4
.IX Item "-rpath=dir"
Add a directory to the runtime library search path.  This is used when
linking an \s-1ELF\s0 executable with shared objects.  All \fB\-rpath\fR
arguments are concatenated and passed to the runtime linker, which uses
them to locate shared objects at runtime.  The \fB\-rpath\fR option is
also used when locating shared objects which are needed by shared
objects explicitly included in the link; see the description of the
\&\fB\-rpath\-link\fR option.  If \fB\-rpath\fR is not used when linking an
\&\s-1ELF\s0 executable, the contents of the environment variable
\&\f(CW\*(C`LD_RUN_PATH\*(C'\fR will be used if it is defined.
.Sp
The \fB\-rpath\fR option may also be used on SunOS.  By default, on
SunOS, the linker will form a runtime search patch out of all the
\&\fB\-L\fR options it is given.  If a \fB\-rpath\fR option is used, the
runtime search path will be formed exclusively using the \fB\-rpath\fR
options, ignoring the \fB\-L\fR options.  This can be useful when using
gcc, which adds many \fB\-L\fR options which may be on \s-1NFS\s0 mounted
file systems.
.Sp
For compatibility with other \s-1ELF\s0 linkers, if the \fB\-R\fR option is
followed by a directory name, rather than a file name, it is treated as
the \fB\-rpath\fR option.
.IP "\fB\-rpath\-link=\fR\fIdir\fR" 4
.IX Item "-rpath-link=dir"
When using \s-1ELF\s0 or SunOS, one shared library may require another.  This
happens when an \f(CW\*(C`ld \-shared\*(C'\fR link includes a shared library as one
of the input files.
.Sp
When the linker encounters such a dependency when doing a non-shared,
non-relocatable link, it will automatically try to locate the required
shared library and include it in the link, if it is not included
explicitly.  In such a case, the \fB\-rpath\-link\fR option
specifies the first set of directories to search.  The
\&\fB\-rpath\-link\fR option may specify a sequence of directory names
either by specifying a list of names separated by colons, or by
appearing multiple times.
.Sp
This option should be used with caution as it overrides the search path
that may have been hard compiled into a shared library. In such a case it
is possible to use unintentionally a different search path than the
runtime linker would do.
.Sp
The linker uses the following search paths to locate required shared
libraries:
.RS 4
.IP "1." 4
Any directories specified by \fB\-rpath\-link\fR options.
.IP "2." 4
Any directories specified by \fB\-rpath\fR options.  The difference
between \fB\-rpath\fR and \fB\-rpath\-link\fR is that directories
specified by \fB\-rpath\fR options are included in the executable and
used at runtime, whereas the \fB\-rpath\-link\fR option is only effective
at link time. Searching \fB\-rpath\fR in this way is only supported
by native linkers and cross linkers which have been configured with
the \fB\-\-with\-sysroot\fR option.
.IP "3." 4
On an \s-1ELF\s0 system, for native linkers, if the \fB\-rpath\fR and
\&\fB\-rpath\-link\fR options were not used, search the contents of the
environment variable \f(CW\*(C`LD_RUN_PATH\*(C'\fR.
.IP "4." 4
On SunOS, if the \fB\-rpath\fR option was not used, search any
directories specified using \fB\-L\fR options.
.IP "5." 4
For a native linker, the search the contents of the environment
variable \f(CW\*(C`LD_LIBRARY_PATH\*(C'\fR.
.IP "6." 4
For a native \s-1ELF\s0 linker, the directories in \f(CW\*(C`DT_RUNPATH\*(C'\fR or
\&\f(CW\*(C`DT_RPATH\*(C'\fR of a shared library are searched for shared
libraries needed by it. The \f(CW\*(C`DT_RPATH\*(C'\fR entries are ignored if
\&\f(CW\*(C`DT_RUNPATH\*(C'\fR entries exist.
.IP "7." 4
The default directories, normally \fI/lib\fR and \fI/usr/lib\fR.
.IP "8." 4
For a native linker on an \s-1ELF\s0 system, if the file \fI/etc/ld.so.conf\fR
exists, the list of directories found in that file.
.RE
.RS 4
.Sp
If the required shared library is not found, the linker will issue a
warning and continue with the link.
.RE
.IP "\fB\-shared\fR" 4
.IX Item "-shared"
.PD 0
.IP "\fB\-Bshareable\fR" 4
.IX Item "-Bshareable"
.PD
Create a shared library.  This is currently only supported on \s-1ELF\s0, \s-1XCOFF\s0
and SunOS platforms.  On SunOS, the linker will automatically create a
shared library if the \fB\-e\fR option is not used and there are
undefined symbols in the link.
.IP "\fB\-\-sort\-common\fR" 4
.IX Item "--sort-common"
.PD 0
.IP "\fB\-\-sort\-common=ascending\fR" 4
.IX Item "--sort-common=ascending"
.IP "\fB\-\-sort\-common=descending\fR" 4
.IX Item "--sort-common=descending"
.PD
This option tells \fBld\fR to sort the common symbols by alignment in
ascending or descending order when it places them in the appropriate output
sections.  The symbol alignments considered are sixteen-byte or larger,
eight-byte, four-byte, two-byte, and one-byte. This is to prevent gaps
between symbols due to alignment constraints.  If no sorting order is
specified, then descending order is assumed.
.IP "\fB\-\-sort\-section=name\fR" 4
.IX Item "--sort-section=name"
This option will apply \f(CW\*(C`SORT_BY_NAME\*(C'\fR to all wildcard section
patterns in the linker script.
.IP "\fB\-\-sort\-section=alignment\fR" 4
.IX Item "--sort-section=alignment"
This option will apply \f(CW\*(C`SORT_BY_ALIGNMENT\*(C'\fR to all wildcard section
patterns in the linker script.
.IP "\fB\-\-split\-by\-file[=\fR\fIsize\fR\fB]\fR" 4
.IX Item "--split-by-file[=size]"
Similar to \fB\-\-split\-by\-reloc\fR but creates a new output section for
each input file when \fIsize\fR is reached.  \fIsize\fR defaults to a
size of 1 if not given.
.IP "\fB\-\-split\-by\-reloc[=\fR\fIcount\fR\fB]\fR" 4
.IX Item "--split-by-reloc[=count]"
Tries to creates extra sections in the output file so that no single
output section in the file contains more than \fIcount\fR relocations.
This is useful when generating huge relocatable files for downloading into
certain real time kernels with the \s-1COFF\s0 object file format; since \s-1COFF\s0
cannot represent more than 65535 relocations in a single section.  Note
that this will fail to work with object file formats which do not
support arbitrary sections.  The linker will not split up individual
input sections for redistribution, so if a single input section contains
more than \fIcount\fR relocations one output section will contain that
many relocations.  \fIcount\fR defaults to a value of 32768.
.IP "\fB\-\-stats\fR" 4
.IX Item "--stats"
Compute and display statistics about the operation of the linker, such
as execution time and memory usage.
.IP "\fB\-\-sysroot=\fR\fIdirectory\fR" 4
.IX Item "--sysroot=directory"
Use \fIdirectory\fR as the location of the sysroot, overriding the
configure-time default.  This option is only supported by linkers
that were configured using \fB\-\-with\-sysroot\fR.
.IP "\fB\-\-traditional\-format\fR" 4
.IX Item "--traditional-format"
For some targets, the output of \fBld\fR is different in some ways from
the output of some existing linker.  This switch requests \fBld\fR to
use the traditional format instead.
.Sp
For example, on SunOS, \fBld\fR combines duplicate entries in the
symbol string table.  This can reduce the size of an output file with
full debugging information by over 30 percent.  Unfortunately, the SunOS
\&\f(CW\*(C`dbx\*(C'\fR program can not read the resulting program (\f(CW\*(C`gdb\*(C'\fR has no
trouble).  The \fB\-\-traditional\-format\fR switch tells \fBld\fR to not
combine duplicate entries.
.IP "\fB\-\-section\-start=\fR\fIsectionname\fR\fB=\fR\fIorg\fR" 4
.IX Item "--section-start=sectionname=org"
Locate a section in the output file at the absolute
address given by \fIorg\fR.  You may use this option as many
times as necessary to locate multiple sections in the command
line.
\&\fIorg\fR must be a single hexadecimal integer;
for compatibility with other linkers, you may omit the leading
\&\fB0x\fR usually associated with hexadecimal values.  \fINote:\fR there
should be no white space between \fIsectionname\fR, the equals
sign ("\fB=\fR"), and \fIorg\fR.
.IP "\fB\-Tbss=\fR\fIorg\fR" 4
.IX Item "-Tbss=org"
.PD 0
.IP "\fB\-Tdata=\fR\fIorg\fR" 4
.IX Item "-Tdata=org"
.IP "\fB\-Ttext=\fR\fIorg\fR" 4
.IX Item "-Ttext=org"
.PD
Same as \fB\-\-section\-start\fR, with \f(CW\*(C`.bss\*(C'\fR, \f(CW\*(C`.data\*(C'\fR or
\&\f(CW\*(C`.text\*(C'\fR as the \fIsectionname\fR.
.IP "\fB\-Ttext\-segment=\fR\fIorg\fR" 4
.IX Item "-Ttext-segment=org"
When creating an \s-1ELF\s0 executable or shared object, it will set the address
of the first byte of the text segment.
.IP "\fB\-\-unresolved\-symbols=\fR\fImethod\fR" 4
.IX Item "--unresolved-symbols=method"
Determine how to handle unresolved symbols.  There are four possible
values for \fBmethod\fR:
.RS 4
.IP "\fBignore-all\fR" 4
.IX Item "ignore-all"
Do not report any unresolved symbols.
.IP "\fBreport-all\fR" 4
.IX Item "report-all"
Report all unresolved symbols.  This is the default.
.IP "\fBignore-in-object-files\fR" 4
.IX Item "ignore-in-object-files"
Report unresolved symbols that are contained in shared libraries, but
ignore them if they come from regular object files.
.IP "\fBignore-in-shared-libs\fR" 4
.IX Item "ignore-in-shared-libs"
Report unresolved symbols that come from regular object files, but
ignore them if they come from shared libraries.  This can be useful
when creating a dynamic binary and it is known that all the shared
libraries that it should be referencing are included on the linker's
command line.
.RE
.RS 4
.Sp
The behaviour for shared libraries on their own can also be controlled
by the \fB\-\-[no\-]allow\-shlib\-undefined\fR option.
.Sp
Normally the linker will generate an error message for each reported
unresolved symbol but the option \fB\-\-warn\-unresolved\-symbols\fR
can change this to a warning.
.RE
.IP "\fB\-\-dll\-verbose\fR" 4
.IX Item "--dll-verbose"
.PD 0
.IP "\fB\-\-verbose[=\fR\fI\s-1NUMBER\s0\fR\fB]\fR" 4
.IX Item "--verbose[=NUMBER]"
.PD
Display the version number for \fBld\fR and list the linker emulations
supported.  Display which input files can and cannot be opened.  Display
the linker script being used by the linker. If the optional \fI\s-1NUMBER\s0\fR
argument > 1, plugin symbol status will also be displayed.
.IP "\fB\-\-version\-script=\fR\fIversion-scriptfile\fR" 4
.IX Item "--version-script=version-scriptfile"
Specify the name of a version script to the linker.  This is typically
used when creating shared libraries to specify additional information
about the version hierarchy for the library being created.  This option
is only fully supported on \s-1ELF\s0 platforms which support shared libraries;
see \fB\s-1VERSION\s0\fR.  It is partially supported on \s-1PE\s0 platforms, which can
use version scripts to filter symbol visibility in auto-export mode: any
symbols marked \fBlocal\fR in the version script will not be exported.
.IP "\fB\-\-warn\-common\fR" 4
.IX Item "--warn-common"
Warn when a common symbol is combined with another common symbol or with
a symbol definition.  Unix linkers allow this somewhat sloppy practise,
but linkers on some other operating systems do not.  This option allows
you to find potential problems from combining global symbols.
Unfortunately, some C libraries use this practise, so you may get some
warnings about symbols in the libraries as well as in your programs.
.Sp
There are three kinds of global symbols, illustrated here by C examples:
.RS 4
.IP "\fBint i = 1;\fR" 4
.IX Item "int i = 1;"
A definition, which goes in the initialized data section of the output
file.
.IP "\fBextern int i;\fR" 4
.IX Item "extern int i;"
An undefined reference, which does not allocate space.
There must be either a definition or a common symbol for the
variable somewhere.
.IP "\fBint i;\fR" 4
.IX Item "int i;"
A common symbol.  If there are only (one or more) common symbols for a
variable, it goes in the uninitialized data area of the output file.
The linker merges multiple common symbols for the same variable into a
single symbol.  If they are of different sizes, it picks the largest
size.  The linker turns a common symbol into a declaration, if there is
a definition of the same variable.
.RE
.RS 4
.Sp
The \fB\-\-warn\-common\fR option can produce five kinds of warnings.
Each warning consists of a pair of lines: the first describes the symbol
just encountered, and the second describes the previous symbol
encountered with the same name.  One or both of the two symbols will be
a common symbol.
.IP "1." 4
Turning a common symbol into a reference, because there is already a
definition for the symbol.
.Sp
.Vb 3
\&        <file>(<section>): warning: common of \`<symbol>\*(Aq
\&           overridden by definition
\&        <file>(<section>): warning: defined here
.Ve
.IP "2." 4
Turning a common symbol into a reference, because a later definition for
the symbol is encountered.  This is the same as the previous case,
except that the symbols are encountered in a different order.
.Sp
.Vb 3
\&        <file>(<section>): warning: definition of \`<symbol>\*(Aq
\&           overriding common
\&        <file>(<section>): warning: common is here
.Ve
.IP "3." 4
Merging a common symbol with a previous same-sized common symbol.
.Sp
.Vb 3
\&        <file>(<section>): warning: multiple common
\&           of \`<symbol>\*(Aq
\&        <file>(<section>): warning: previous common is here
.Ve
.IP "4." 4
Merging a common symbol with a previous larger common symbol.
.Sp
.Vb 3
\&        <file>(<section>): warning: common of \`<symbol>\*(Aq
\&           overridden by larger common
\&        <file>(<section>): warning: larger common is here
.Ve
.IP "5." 4
Merging a common symbol with a previous smaller common symbol.  This is
the same as the previous case, except that the symbols are
encountered in a different order.
.Sp
.Vb 3
\&        <file>(<section>): warning: common of \`<symbol>\*(Aq
\&           overriding smaller common
\&        <file>(<section>): warning: smaller common is here
.Ve
.RE
.RS 4
.RE
.IP "\fB\-\-warn\-constructors\fR" 4
.IX Item "--warn-constructors"
Warn if any global constructors are used.  This is only useful for a few
object file formats.  For formats like \s-1COFF\s0 or \s-1ELF\s0, the linker can not
detect the use of global constructors.
.IP "\fB\-\-warn\-multiple\-gp\fR" 4
.IX Item "--warn-multiple-gp"
Warn if multiple global pointer values are required in the output file.
This is only meaningful for certain processors, such as the Alpha.
Specifically, some processors put large-valued constants in a special
section.  A special register (the global pointer) points into the middle
of this section, so that constants can be loaded efficiently via a
base-register relative addressing mode.  Since the offset in
base-register relative mode is fixed and relatively small (e.g., 16
bits), this limits the maximum size of the constant pool.  Thus, in
large programs, it is often necessary to use multiple global pointer
values in order to be able to address all possible constants.  This
option causes a warning to be issued whenever this case occurs.
.IP "\fB\-\-warn\-once\fR" 4
.IX Item "--warn-once"
Only warn once for each undefined symbol, rather than once per module
which refers to it.
.IP "\fB\-\-warn\-section\-align\fR" 4
.IX Item "--warn-section-align"
Warn if the address of an output section is changed because of
alignment.  Typically, the alignment will be set by an input section.
The address will only be changed if it not explicitly specified; that
is, if the \f(CW\*(C`SECTIONS\*(C'\fR command does not specify a start address for
the section.
.IP "\fB\-\-warn\-shared\-textrel\fR" 4
.IX Item "--warn-shared-textrel"
Warn if the linker adds a \s-1DT_TEXTREL\s0 to a shared object.
.IP "\fB\-\-warn\-alternate\-em\fR" 4
.IX Item "--warn-alternate-em"
Warn if an object has alternate \s-1ELF\s0 machine code.
.IP "\fB\-\-warn\-unresolved\-symbols\fR" 4
.IX Item "--warn-unresolved-symbols"
If the linker is going to report an unresolved symbol (see the option
\&\fB\-\-unresolved\-symbols\fR) it will normally generate an error.
This option makes it generate a warning instead.
.IP "\fB\-\-error\-unresolved\-symbols\fR" 4
.IX Item "--error-unresolved-symbols"
This restores the linker's default behaviour of generating errors when
it is reporting unresolved symbols.
.IP "\fB\-\-whole\-archive\fR" 4
.IX Item "--whole-archive"
For each archive mentioned on the command line after the
\&\fB\-\-whole\-archive\fR option, include every object file in the archive
in the link, rather than searching the archive for the required object
files.  This is normally used to turn an archive file into a shared
library, forcing every object to be included in the resulting shared
library.  This option may be used more than once.
.Sp
Two notes when using this option from gcc: First, gcc doesn't know
about this option, so you have to use \fB\-Wl,\-whole\-archive\fR.
Second, don't forget to use \fB\-Wl,\-no\-whole\-archive\fR after your
list of archives, because gcc will add its own list of archives to
your link and you may not want this flag to affect those as well.
.IP "\fB\-\-wrap=\fR\fIsymbol\fR" 4
.IX Item "--wrap=symbol"
Use a wrapper function for \fIsymbol\fR.  Any undefined reference to
\&\fIsymbol\fR will be resolved to \f(CW\*(C`_\|_wrap_\f(CIsymbol\f(CW\*(C'\fR.  Any
undefined reference to \f(CW\*(C`_\|_real_\f(CIsymbol\f(CW\*(C'\fR will be resolved to
\&\fIsymbol\fR.
.Sp
This can be used to provide a wrapper for a system function.  The
wrapper function should be called \f(CW\*(C`_\|_wrap_\f(CIsymbol\f(CW\*(C'\fR.  If it
wishes to call the system function, it should call
\&\f(CW\*(C`_\|_real_\f(CIsymbol\f(CW\*(C'\fR.
.Sp
Here is a trivial example:
.Sp
.Vb 6
\&        void *
\&        _\|_wrap_malloc (size_t c)
\&        {
\&          printf ("malloc called with %zu\en", c);
\&          return _\|_real_malloc (c);
\&        }
.Ve
.Sp
If you link other code with this file using \fB\-\-wrap malloc\fR, then
all calls to \f(CW\*(C`malloc\*(C'\fR will call the function \f(CW\*(C`_\|_wrap_malloc\*(C'\fR
instead.  The call to \f(CW\*(C`_\|_real_malloc\*(C'\fR in \f(CW\*(C`_\|_wrap_malloc\*(C'\fR will
call the real \f(CW\*(C`malloc\*(C'\fR function.
.Sp
You may wish to provide a \f(CW\*(C`_\|_real_malloc\*(C'\fR function as well, so that
links without the \fB\-\-wrap\fR option will succeed.  If you do this,
you should not put the definition of \f(CW\*(C`_\|_real_malloc\*(C'\fR in the same
file as \f(CW\*(C`_\|_wrap_malloc\*(C'\fR; if you do, the assembler may resolve the
call before the linker has a chance to wrap it to \f(CW\*(C`malloc\*(C'\fR.
.IP "\fB\-\-eh\-frame\-hdr\fR" 4
.IX Item "--eh-frame-hdr"
Request creation of \f(CW\*(C`.eh_frame_hdr\*(C'\fR section and \s-1ELF\s0
\&\f(CW\*(C`PT_GNU_EH_FRAME\*(C'\fR segment header.
.IP "\fB\-\-no\-ld\-generated\-unwind\-info\fR" 4
.IX Item "--no-ld-generated-unwind-info"
Request creation of \f(CW\*(C`.eh_frame\*(C'\fR unwind info for linker
generated code sections like \s-1PLT\s0.  This option is on by default
if linker generated unwind info is supported.
.IP "\fB\-\-enable\-new\-dtags\fR" 4
.IX Item "--enable-new-dtags"
.PD 0
.IP "\fB\-\-disable\-new\-dtags\fR" 4
.IX Item "--disable-new-dtags"
.PD
This linker can create the new dynamic tags in \s-1ELF\s0. But the older \s-1ELF\s0
systems may not understand them. If you specify
\&\fB\-\-enable\-new\-dtags\fR, the dynamic tags will be created as needed.
If you specify \fB\-\-disable\-new\-dtags\fR, no new dynamic tags will be
created. By default, the new dynamic tags are not created. Note that
those options are only available for \s-1ELF\s0 systems.
.IP "\fB\-\-hash\-size=\fR\fInumber\fR" 4
.IX Item "--hash-size=number"
Set the default size of the linker's hash tables to a prime number
close to \fInumber\fR.  Increasing this value can reduce the length of
time it takes the linker to perform its tasks, at the expense of
increasing the linker's memory requirements.  Similarly reducing this
value can reduce the memory requirements at the expense of speed.
.IP "\fB\-\-hash\-style=\fR\fIstyle\fR" 4
.IX Item "--hash-style=style"
Set the type of linker's hash table(s).  \fIstyle\fR can be either
\&\f(CW\*(C`sysv\*(C'\fR for classic \s-1ELF\s0 \f(CW\*(C`.hash\*(C'\fR section, \f(CW\*(C`gnu\*(C'\fR for
new style \s-1GNU\s0 \f(CW\*(C`.gnu.hash\*(C'\fR section or \f(CW\*(C`both\*(C'\fR for both
the classic \s-1ELF\s0 \f(CW\*(C`.hash\*(C'\fR and new style \s-1GNU\s0 \f(CW\*(C`.gnu.hash\*(C'\fR
hash tables.  The default is \f(CW\*(C`sysv\*(C'\fR.
.IP "\fB\-\-reduce\-memory\-overheads\fR" 4
.IX Item "--reduce-memory-overheads"
This option reduces memory requirements at ld runtime, at the expense of
linking speed.  This was introduced to select the old O(n^2) algorithm
for link map file generation, rather than the new O(n) algorithm which uses
about 40% more memory for symbol storage.
.Sp
Another effect of the switch is to set the default hash table size to
1021, which again saves memory at the cost of lengthening the linker's
run time.  This is not done however if the \fB\-\-hash\-size\fR switch
has been used.
.Sp
The \fB\-\-reduce\-memory\-overheads\fR switch may be also be used to
enable other tradeoffs in future versions of the linker.
.IP "\fB\-\-build\-id\fR" 4
.IX Item "--build-id"
.PD 0
.IP "\fB\-\-build\-id=\fR\fIstyle\fR" 4
.IX Item "--build-id=style"
.PD
Request creation of \f(CW\*(C`.note.gnu.build\-id\*(C'\fR \s-1ELF\s0 note section.
The contents of the note are unique bits identifying this linked
file.  \fIstyle\fR can be \f(CW\*(C`uuid\*(C'\fR to use 128 random bits,
\&\f(CW\*(C`sha1\*(C'\fR to use a 160\-bit \s-1SHA1\s0 hash on the normative
parts of the output contents, \f(CW\*(C`md5\*(C'\fR to use a 128\-bit
\&\s-1MD5\s0 hash on the normative parts of the output contents, or
\&\f(CW\*(C`0x\f(CIhexstring\f(CW\*(C'\fR to use a chosen bit string specified as
an even number of hexadecimal digits (\f(CW\*(C`\-\*(C'\fR and \f(CW\*(C`:\*(C'\fR
characters between digit pairs are ignored).  If \fIstyle\fR is
omitted, \f(CW\*(C`sha1\*(C'\fR is used.
.Sp
The \f(CW\*(C`md5\*(C'\fR and \f(CW\*(C`sha1\*(C'\fR styles produces an identifier
that is always the same in an identical output file, but will be
unique among all nonidentical output files.  It is not intended
to be compared as a checksum for the file's contents.  A linked
file may be changed later by other tools, but the build \s-1ID\s0 bit
string identifying the original linked file does not change.
.Sp
Passing \f(CW\*(C`none\*(C'\fR for \fIstyle\fR disables the setting from any
\&\f(CW\*(C`\-\-build\-id\*(C'\fR options earlier on the command line.
.PP
The i386 \s-1PE\s0 linker supports the \fB\-shared\fR option, which causes
the output to be a dynamically linked library (\s-1DLL\s0) instead of a
normal executable.  You should name the output \f(CW\*(C`*.dll\*(C'\fR when you
use this option.  In addition, the linker fully supports the standard
\&\f(CW\*(C`*.def\*(C'\fR files, which may be specified on the linker command line
like an object file (in fact, it should precede archives it exports
symbols from, to ensure that they get linked in, just like a normal
object file).
.PP
In addition to the options common to all targets, the i386 \s-1PE\s0 linker
support additional command line options that are specific to the i386
\&\s-1PE\s0 target.  Options that take values may be separated from their
values by either a space or an equals sign.
.IP "\fB\-\-add\-stdcall\-alias\fR" 4
.IX Item "--add-stdcall-alias"
If given, symbols with a stdcall suffix (@\fInn\fR) will be exported
as-is and also with the suffix stripped.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-base\-file\fR \fIfile\fR" 4
.IX Item "--base-file file"
Use \fIfile\fR as the name of a file in which to save the base
addresses of all the relocations needed for generating DLLs with
\&\fIdlltool\fR.
[This is an i386 \s-1PE\s0 specific option]
.IP "\fB\-\-dll\fR" 4
.IX Item "--dll"
Create a \s-1DLL\s0 instead of a regular executable.  You may also use
\&\fB\-shared\fR or specify a \f(CW\*(C`LIBRARY\*(C'\fR in a given \f(CW\*(C`.def\*(C'\fR
file.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-enable\-long\-section\-names\fR" 4
.IX Item "--enable-long-section-names"
.PD 0
.IP "\fB\-\-disable\-long\-section\-names\fR" 4
.IX Item "--disable-long-section-names"
.PD
The \s-1PE\s0 variants of the Coff object format add an extension that permits
the use of section names longer than eight characters, the normal limit
for Coff.  By default, these names are only allowed in object files, as
fully-linked executable images do not carry the Coff string table required
to support the longer names.  As a \s-1GNU\s0 extension, it is possible to
allow their use in executable images as well, or to (probably pointlessly!)
disallow it in object files, by using these two options.  Executable images
generated with these long section names are slightly non-standard, carrying
as they do a string table, and may generate confusing output when examined
with non-GNU PE-aware tools, such as file viewers and dumpers.  However, 
\&\s-1GDB\s0 relies on the use of \s-1PE\s0 long section names to find Dwarf\-2 debug 
information sections in an executable image at runtime, and so if neither
option is specified on the command-line, \fBld\fR will enable long
section names, overriding the default and technically correct behaviour,
when it finds the presence of debug information while linking an executable
image and not stripping symbols.
[This option is valid for all \s-1PE\s0 targeted ports of the linker]
.IP "\fB\-\-enable\-stdcall\-fixup\fR" 4
.IX Item "--enable-stdcall-fixup"
.PD 0
.IP "\fB\-\-disable\-stdcall\-fixup\fR" 4
.IX Item "--disable-stdcall-fixup"
.PD
If the link finds a symbol that it cannot resolve, it will attempt to
do \*(L"fuzzy linking\*(R" by looking for another defined symbol that differs
only in the format of the symbol name (cdecl vs stdcall) and will
resolve that symbol by linking to the match.  For example, the
undefined symbol \f(CW\*(C`_foo\*(C'\fR might be linked to the function
\&\f(CW\*(C`_foo@12\*(C'\fR, or the undefined symbol \f(CW\*(C`_bar@16\*(C'\fR might be linked
to the function \f(CW\*(C`_bar\*(C'\fR.  When the linker does this, it prints a
warning, since it normally should have failed to link, but sometimes
import libraries generated from third-party dlls may need this feature
to be usable.  If you specify \fB\-\-enable\-stdcall\-fixup\fR, this
feature is fully enabled and warnings are not printed.  If you specify
\&\fB\-\-disable\-stdcall\-fixup\fR, this feature is disabled and such
mismatches are considered to be errors.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-leading\-underscore\fR" 4
.IX Item "--leading-underscore"
.PD 0
.IP "\fB\-\-no\-leading\-underscore\fR" 4
.IX Item "--no-leading-underscore"
.PD
For most targets default symbol-prefix is an underscore and is defined
in target's description. By this option it is possible to
disable/enable the default underscore symbol-prefix.
.IP "\fB\-\-export\-all\-symbols\fR" 4
.IX Item "--export-all-symbols"
If given, all global symbols in the objects used to build a \s-1DLL\s0 will
be exported by the \s-1DLL\s0.  Note that this is the default if there
otherwise wouldn't be any exported symbols.  When symbols are
explicitly exported via \s-1DEF\s0 files or implicitly exported via function
attributes, the default is to not export anything else unless this
option is given.  Note that the symbols \f(CW\*(C`DllMain@12\*(C'\fR,
\&\f(CW\*(C`DllEntryPoint@0\*(C'\fR, \f(CW\*(C`DllMainCRTStartup@12\*(C'\fR, and
\&\f(CW\*(C`impure_ptr\*(C'\fR will not be automatically
exported.  Also, symbols imported from other DLLs will not be
re-exported, nor will symbols specifying the \s-1DLL\s0's internal layout
such as those beginning with \f(CW\*(C`_head_\*(C'\fR or ending with
\&\f(CW\*(C`_iname\*(C'\fR.  In addition, no symbols from \f(CW\*(C`libgcc\*(C'\fR,
\&\f(CW\*(C`libstd++\*(C'\fR, \f(CW\*(C`libmingw32\*(C'\fR, or \f(CW\*(C`crtX.o\*(C'\fR will be exported.
Symbols whose names begin with \f(CW\*(C`_\|_rtti_\*(C'\fR or \f(CW\*(C`_\|_builtin_\*(C'\fR will
not be exported, to help with \*(C+ DLLs.  Finally, there is an
extensive list of cygwin-private symbols that are not exported
(obviously, this applies on when building DLLs for cygwin targets).
These cygwin-excludes are: \f(CW\*(C`_cygwin_dll_entry@12\*(C'\fR,
\&\f(CW\*(C`_cygwin_crt0_common@8\*(C'\fR, \f(CW\*(C`_cygwin_noncygwin_dll_entry@12\*(C'\fR,
\&\f(CW\*(C`_fmode\*(C'\fR, \f(CW\*(C`_impure_ptr\*(C'\fR, \f(CW\*(C`cygwin_attach_dll\*(C'\fR,
\&\f(CW\*(C`cygwin_premain0\*(C'\fR, \f(CW\*(C`cygwin_premain1\*(C'\fR, \f(CW\*(C`cygwin_premain2\*(C'\fR,
\&\f(CW\*(C`cygwin_premain3\*(C'\fR, and \f(CW\*(C`environ\*(C'\fR.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-exclude\-symbols\fR \fIsymbol\fR\fB,\fR\fIsymbol\fR\fB,...\fR" 4
.IX Item "--exclude-symbols symbol,symbol,..."
Specifies a list of symbols which should not be automatically
exported.  The symbol names may be delimited by commas or colons.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-exclude\-all\-symbols\fR" 4
.IX Item "--exclude-all-symbols"
Specifies no symbols should be automatically exported.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-file\-alignment\fR" 4
.IX Item "--file-alignment"
Specify the file alignment.  Sections in the file will always begin at
file offsets which are multiples of this number.  This defaults to
512.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-heap\fR \fIreserve\fR" 4
.IX Item "--heap reserve"
.PD 0
.IP "\fB\-\-heap\fR \fIreserve\fR\fB,\fR\fIcommit\fR" 4
.IX Item "--heap reserve,commit"
.PD
Specify the number of bytes of memory to reserve (and optionally commit)
to be used as heap for this program.  The default is 1Mb reserved, 4K
committed.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-image\-base\fR \fIvalue\fR" 4
.IX Item "--image-base value"
Use \fIvalue\fR as the base address of your program or dll.  This is
the lowest memory location that will be used when your program or dll
is loaded.  To reduce the need to relocate and improve performance of
your dlls, each should have a unique base address and not overlap any
other dlls.  The default is 0x400000 for executables, and 0x10000000
for dlls.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-kill\-at\fR" 4
.IX Item "--kill-at"
If given, the stdcall suffixes (@\fInn\fR) will be stripped from
symbols before they are exported.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-large\-address\-aware\fR" 4
.IX Item "--large-address-aware"
If given, the appropriate bit in the \*(L"Characteristics\*(R" field of the \s-1COFF\s0
header is set to indicate that this executable supports virtual addresses
greater than 2 gigabytes.  This should be used in conjunction with the /3GB
or /USERVA=\fIvalue\fR megabytes switch in the \*(L"[operating systems]\*(R"
section of the \s-1BOOT\s0.INI.  Otherwise, this bit has no effect.
[This option is specific to \s-1PE\s0 targeted ports of the linker]
.IP "\fB\-\-major\-image\-version\fR \fIvalue\fR" 4
.IX Item "--major-image-version value"
Sets the major number of the \*(L"image version\*(R".  Defaults to 1.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-major\-os\-version\fR \fIvalue\fR" 4
.IX Item "--major-os-version value"
Sets the major number of the \*(L"os version\*(R".  Defaults to 4.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-major\-subsystem\-version\fR \fIvalue\fR" 4
.IX Item "--major-subsystem-version value"
Sets the major number of the \*(L"subsystem version\*(R".  Defaults to 4.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-minor\-image\-version\fR \fIvalue\fR" 4
.IX Item "--minor-image-version value"
Sets the minor number of the \*(L"image version\*(R".  Defaults to 0.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-minor\-os\-version\fR \fIvalue\fR" 4
.IX Item "--minor-os-version value"
Sets the minor number of the \*(L"os version\*(R".  Defaults to 0.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-minor\-subsystem\-version\fR \fIvalue\fR" 4
.IX Item "--minor-subsystem-version value"
Sets the minor number of the \*(L"subsystem version\*(R".  Defaults to 0.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-output\-def\fR \fIfile\fR" 4
.IX Item "--output-def file"
The linker will create the file \fIfile\fR which will contain a \s-1DEF\s0
file corresponding to the \s-1DLL\s0 the linker is generating.  This \s-1DEF\s0 file
(which should be called \f(CW\*(C`*.def\*(C'\fR) may be used to create an import
library with \f(CW\*(C`dlltool\*(C'\fR or may be used as a reference to
automatically or implicitly exported symbols.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-out\-implib\fR \fIfile\fR" 4
.IX Item "--out-implib file"
The linker will create the file \fIfile\fR which will contain an
import lib corresponding to the \s-1DLL\s0 the linker is generating. This
import lib (which should be called \f(CW\*(C`*.dll.a\*(C'\fR or \f(CW\*(C`*.a\*(C'\fR
may be used to link clients against the generated \s-1DLL\s0; this behaviour
makes it possible to skip a separate \f(CW\*(C`dlltool\*(C'\fR import library
creation step.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-enable\-auto\-image\-base\fR" 4
.IX Item "--enable-auto-image-base"
Automatically choose the image base for DLLs, unless one is specified
using the \f(CW\*(C`\-\-image\-base\*(C'\fR argument.  By using a hash generated
from the dllname to create unique image bases for each \s-1DLL\s0, in-memory
collisions and relocations which can delay program execution are
avoided.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-disable\-auto\-image\-base\fR" 4
.IX Item "--disable-auto-image-base"
Do not automatically generate a unique image base.  If there is no
user-specified image base (\f(CW\*(C`\-\-image\-base\*(C'\fR) then use the platform
default.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-dll\-search\-prefix\fR \fIstring\fR" 4
.IX Item "--dll-search-prefix string"
When linking dynamically to a dll without an import library,
search for \f(CW\*(C`<string><basename>.dll\*(C'\fR in preference to
\&\f(CW\*(C`lib<basename>.dll\*(C'\fR. This behaviour allows easy distinction
between DLLs built for the various \*(L"subplatforms\*(R": native, cygwin,
uwin, pw, etc.  For instance, cygwin DLLs typically use
\&\f(CW\*(C`\-\-dll\-search\-prefix=cyg\*(C'\fR.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-enable\-auto\-import\fR" 4
.IX Item "--enable-auto-import"
Do sophisticated linking of \f(CW\*(C`_symbol\*(C'\fR to \f(CW\*(C`_\|_imp_\|_symbol\*(C'\fR for
\&\s-1DATA\s0 imports from DLLs, and create the necessary thunking symbols when
building the import libraries with those \s-1DATA\s0 exports. Note: Use of the
\&'auto\-import' extension will cause the text section of the image file
to be made writable. This does not conform to the PE-COFF format
specification published by Microsoft.
.Sp
Note \- use of the 'auto\-import' extension will also cause read only
data which would normally be placed into the .rdata section to be
placed into the .data section instead.  This is in order to work
around a problem with consts that is described here:
http://www.cygwin.com/ml/cygwin/2004\-09/msg01101.html
.Sp
Using 'auto\-import' generally will 'just work' \*(-- but sometimes you may
see this message:
.Sp
"variable '<var>' can't be auto-imported. Please read the
documentation for ld's \f(CW\*(C`\-\-enable\-auto\-import\*(C'\fR for details."
.Sp
This message occurs when some (sub)expression accesses an address
ultimately given by the sum of two constants (Win32 import tables only
allow one).  Instances where this may occur include accesses to member
fields of struct variables imported from a \s-1DLL\s0, as well as using a
constant index into an array variable imported from a \s-1DLL\s0.  Any
multiword variable (arrays, structs, long long, etc) may trigger
this error condition.  However, regardless of the exact data type
of the offending exported variable, ld will always detect it, issue
the warning, and exit.
.Sp
There are several ways to address this difficulty, regardless of the
data type of the exported variable:
.Sp
One way is to use \-\-enable\-runtime\-pseudo\-reloc switch. This leaves the task
of adjusting references in your client code for runtime environment, so
this method works only when runtime environment supports this feature.
.Sp
A second solution is to force one of the 'constants' to be a variable \*(--
that is, unknown and un-optimizable at compile time.  For arrays,
there are two possibilities: a) make the indexee (the array's address)
a variable, or b) make the 'constant' index a variable.  Thus:
.Sp
.Vb 3
\&        extern type extern_array[];
\&        extern_array[1] \-\->
\&           { volatile type *t=extern_array; t[1] }
.Ve
.Sp
or
.Sp
.Vb 3
\&        extern type extern_array[];
\&        extern_array[1] \-\->
\&           { volatile int t=1; extern_array[t] }
.Ve
.Sp
For structs (and most other multiword data types) the only option
is to make the struct itself (or the long long, or the ...) variable:
.Sp
.Vb 3
\&        extern struct s extern_struct;
\&        extern_struct.field \-\->
\&           { volatile struct s *t=&extern_struct; t\->field }
.Ve
.Sp
or
.Sp
.Vb 3
\&        extern long long extern_ll;
\&        extern_ll \-\->
\&          { volatile long long * local_ll=&extern_ll; *local_ll }
.Ve
.Sp
A third method of dealing with this difficulty is to abandon
\&'auto\-import' for the offending symbol and mark it with
\&\f(CW\*(C`_\|_declspec(dllimport)\*(C'\fR.  However, in practise that
requires using compile-time #defines to indicate whether you are
building a \s-1DLL\s0, building client code that will link to the \s-1DLL\s0, or
merely building/linking to a static library.   In making the choice
between the various methods of resolving the 'direct address with
constant offset' problem, you should consider typical real-world usage:
.Sp
Original:
.Sp
.Vb 7
\&        \-\-foo.h
\&        extern int arr[];
\&        \-\-foo.c
\&        #include "foo.h"
\&        void main(int argc, char **argv){
\&          printf("%d\en",arr[1]);
\&        }
.Ve
.Sp
Solution 1:
.Sp
.Vb 9
\&        \-\-foo.h
\&        extern int arr[];
\&        \-\-foo.c
\&        #include "foo.h"
\&        void main(int argc, char **argv){
\&          /* This workaround is for win32 and cygwin; do not "optimize" */
\&          volatile int *parr = arr;
\&          printf("%d\en",parr[1]);
\&        }
.Ve
.Sp
Solution 2:
.Sp
.Vb 10
\&        \-\-foo.h
\&        /* Note: auto\-export is assumed (no _\|_declspec(dllexport)) */
\&        #if (defined(_WIN32) || defined(_\|_CYGWIN_\|_)) && \e
\&          !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC))
\&        #define FOO_IMPORT _\|_declspec(dllimport)
\&        #else
\&        #define FOO_IMPORT
\&        #endif
\&        extern FOO_IMPORT int arr[];
\&        \-\-foo.c
\&        #include "foo.h"
\&        void main(int argc, char **argv){
\&          printf("%d\en",arr[1]);
\&        }
.Ve
.Sp
A fourth way to avoid this problem is to re-code your
library to use a functional interface rather than a data interface
for the offending variables (e.g. \fIset_foo()\fR and \fIget_foo()\fR accessor
functions).
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-disable\-auto\-import\fR" 4
.IX Item "--disable-auto-import"
Do not attempt to do sophisticated linking of \f(CW\*(C`_symbol\*(C'\fR to
\&\f(CW\*(C`_\|_imp_\|_symbol\*(C'\fR for \s-1DATA\s0 imports from DLLs.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-enable\-runtime\-pseudo\-reloc\fR" 4
.IX Item "--enable-runtime-pseudo-reloc"
If your code contains expressions described in \-\-enable\-auto\-import section,
that is, \s-1DATA\s0 imports from \s-1DLL\s0 with non-zero offset, this switch will create
a vector of 'runtime pseudo relocations' which can be used by runtime
environment to adjust references to such data in your client code.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-disable\-runtime\-pseudo\-reloc\fR" 4
.IX Item "--disable-runtime-pseudo-reloc"
Do not create pseudo relocations for non-zero offset \s-1DATA\s0 imports from
DLLs.  This is the default.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-enable\-extra\-pe\-debug\fR" 4
.IX Item "--enable-extra-pe-debug"
Show additional debug info related to auto-import symbol thunking.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-section\-alignment\fR" 4
.IX Item "--section-alignment"
Sets the section alignment.  Sections in memory will always begin at
addresses which are a multiple of this number.  Defaults to 0x1000.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-stack\fR \fIreserve\fR" 4
.IX Item "--stack reserve"
.PD 0
.IP "\fB\-\-stack\fR \fIreserve\fR\fB,\fR\fIcommit\fR" 4
.IX Item "--stack reserve,commit"
.PD
Specify the number of bytes of memory to reserve (and optionally commit)
to be used as stack for this program.  The default is 2Mb reserved, 4K
committed.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.IP "\fB\-\-subsystem\fR \fIwhich\fR" 4
.IX Item "--subsystem which"
.PD 0
.IP "\fB\-\-subsystem\fR \fIwhich\fR\fB:\fR\fImajor\fR" 4
.IX Item "--subsystem which:major"
.IP "\fB\-\-subsystem\fR \fIwhich\fR\fB:\fR\fImajor\fR\fB.\fR\fIminor\fR" 4
.IX Item "--subsystem which:major.minor"
.PD
Specifies the subsystem under which your program will execute.  The
legal values for \fIwhich\fR are \f(CW\*(C`native\*(C'\fR, \f(CW\*(C`windows\*(C'\fR,
\&\f(CW\*(C`console\*(C'\fR, \f(CW\*(C`posix\*(C'\fR, and \f(CW\*(C`xbox\*(C'\fR.  You may optionally set
the subsystem version also.  Numeric values are also accepted for
\&\fIwhich\fR.
[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
.Sp
The following options set flags in the \f(CW\*(C`DllCharacteristics\*(C'\fR field
of the \s-1PE\s0 file header:
[These options are specific to \s-1PE\s0 targeted ports of the linker]
.IP "\fB\-\-dynamicbase\fR" 4
.IX Item "--dynamicbase"
The image base address may be relocated using address space layout
randomization (\s-1ASLR\s0).  This feature was introduced with \s-1MS\s0 Windows
Vista for i386 \s-1PE\s0 targets.
.IP "\fB\-\-forceinteg\fR" 4
.IX Item "--forceinteg"
Code integrity checks are enforced.
.IP "\fB\-\-nxcompat\fR" 4
.IX Item "--nxcompat"
The image is compatible with the Data Execution Prevention.
This feature was introduced with \s-1MS\s0 Windows \s-1XP\s0 \s-1SP2\s0 for i386 \s-1PE\s0 targets.
.IP "\fB\-\-no\-isolation\fR" 4
.IX Item "--no-isolation"
Although the image understands isolation, do not isolate the image.
.IP "\fB\-\-no\-seh\fR" 4
.IX Item "--no-seh"
The image does not use \s-1SEH\s0. No \s-1SE\s0 handler may be called from
this image.
.IP "\fB\-\-no\-bind\fR" 4
.IX Item "--no-bind"
Do not bind this image.
.IP "\fB\-\-wdmdriver\fR" 4
.IX Item "--wdmdriver"
The driver uses the \s-1MS\s0 Windows Driver Model.
.IP "\fB\-\-tsaware\fR" 4
.IX Item "--tsaware"
The image is Terminal Server aware.
.PP
The C6X uClinux target uses a binary format called \s-1DSBT\s0 to support shared
libraries.  Each shared library in the system needs to have a unique index;
all executables use an index of 0.
.IP "\fB\-\-dsbt\-size\fR \fIsize\fR" 4
.IX Item "--dsbt-size size"
This option sets the number of entires in the \s-1DSBT\s0 of the current executable
or shared library to \fIsize\fR.  The default is to create a table with 64
entries.
.IP "\fB\-\-dsbt\-index\fR \fIindex\fR" 4
.IX Item "--dsbt-index index"
This option sets the \s-1DSBT\s0 index of the current executable or shared library
to \fIindex\fR.  The default is 0, which is appropriate for generating
executables.  If a shared library is generated with a \s-1DSBT\s0 index of 0, the
\&\f(CW\*(C`R_C6000_DSBT_INDEX\*(C'\fR relocs are copied into the output file.
.Sp
The \fB\-\-no\-merge\-exidx\-entries\fR switch disables the merging of adjacent
exidx entries in frame unwind info.
.PP
The 68HC11 and 68HC12 linkers support specific options to control the
memory bank switching mapping and trampoline code generation.
.IP "\fB\-\-no\-trampoline\fR" 4
.IX Item "--no-trampoline"
This option disables the generation of trampoline. By default a trampoline
is generated for each far function which is called using a \f(CW\*(C`jsr\*(C'\fR
instruction (this happens when a pointer to a far function is taken).
.IP "\fB\-\-bank\-window\fR \fIname\fR" 4
.IX Item "--bank-window name"
This option indicates to the linker the name of the memory region in
the \fB\s-1MEMORY\s0\fR specification that describes the memory bank window.
The definition of such region is then used by the linker to compute
paging and addresses within the memory window.
.PP
The following options are supported to control handling of \s-1GOT\s0 generation
when linking for 68K targets.
.IP "\fB\-\-got=\fR\fItype\fR" 4
.IX Item "--got=type"
This option tells the linker which \s-1GOT\s0 generation scheme to use.
\&\fItype\fR should be one of \fBsingle\fR, \fBnegative\fR,
\&\fBmultigot\fR or \fBtarget\fR.  For more information refer to the
Info entry for \fIld\fR.
.SH "ENVIRONMENT"
.IX Header "ENVIRONMENT"
You can change the behaviour of \fBld\fR with the environment variables
\&\f(CW\*(C`GNUTARGET\*(C'\fR,
\&\f(CW\*(C`LDEMULATION\*(C'\fR and \f(CW\*(C`COLLECT_NO_DEMANGLE\*(C'\fR.
.PP
\&\f(CW\*(C`GNUTARGET\*(C'\fR determines the input-file object format if you don't
use \fB\-b\fR (or its synonym \fB\-\-format\fR).  Its value should be one
of the \s-1BFD\s0 names for an input format.  If there is no
\&\f(CW\*(C`GNUTARGET\*(C'\fR in the environment, \fBld\fR uses the natural format
of the target. If \f(CW\*(C`GNUTARGET\*(C'\fR is set to \f(CW\*(C`default\*(C'\fR then \s-1BFD\s0
attempts to discover the input format by examining binary input files;
this method often succeeds, but there are potential ambiguities, since
there is no method of ensuring that the magic number used to specify
object-file formats is unique.  However, the configuration procedure for
\&\s-1BFD\s0 on each system places the conventional format for that system first
in the search-list, so ambiguities are resolved in favor of convention.
.PP
\&\f(CW\*(C`LDEMULATION\*(C'\fR determines the default emulation if you don't use the
\&\fB\-m\fR option.  The emulation can affect various aspects of linker
behaviour, particularly the default linker script.  You can list the
available emulations with the \fB\-\-verbose\fR or \fB\-V\fR options.  If
the \fB\-m\fR option is not used, and the \f(CW\*(C`LDEMULATION\*(C'\fR environment
variable is not defined, the default emulation depends upon how the
linker was configured.
.PP
Normally, the linker will default to demangling symbols.  However, if
\&\f(CW\*(C`COLLECT_NO_DEMANGLE\*(C'\fR is set in the environment, then it will
default to not demangling symbols.  This environment variable is used in
a similar fashion by the \f(CW\*(C`gcc\*(C'\fR linker wrapper program.  The default
may be overridden by the \fB\-\-demangle\fR and \fB\-\-no\-demangle\fR
options.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
\&\fIar\fR\|(1), \fInm\fR\|(1), \fIobjcopy\fR\|(1), \fIobjdump\fR\|(1), \fIreadelf\fR\|(1) and
the Info entries for \fIbinutils\fR and
\&\fIld\fR.
.SH "COPYRIGHT"
.IX Header "COPYRIGHT"
Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free
Software Foundation, Inc.
.PP
Permission is granted to copy, distribute and/or modify this document
under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, with no Front-Cover Texts, and with no
Back-Cover Texts.  A copy of the license is included in the
section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
