]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - ld/ld.texinfo
[ld/ChangeLog]
[thirdparty/binutils-gdb.git] / ld / ld.texinfo
CommitLineData
252b5132
RH
1\input texinfo
2@setfilename ld.info
a2b64bed 3@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
8a308ae8
NC
4@c 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
5@c Free Software Foundation, Inc.
252b5132 6@syncodeindex ky cp
dff70155 7@c man begin INCLUDE
252b5132
RH
8@include configdoc.texi
9@c (configdoc.texi is generated by the Makefile)
c428fa83 10@include bfdver.texi
dff70155 11@c man end
252b5132
RH
12
13@c @smallbook
14
ff5dcc92
SC
15@macro gcctabopt{body}
16@code{\body\}
17@end macro
18
0285c67d
NC
19@c man begin NAME
20@ifset man
21@c Configure for the generation of man pages
22@set UsesEnvVars
23@set GENERIC
0285c67d 24@set ARM
49fa1e15 25@set H8300
0285c67d 26@set HPPA
0285c67d 27@set I960
0285c67d 28@set M68HC11
7fb9f789 29@set M68K
3c3bdf30 30@set MMIX
2469cfa2 31@set MSP430
2a60a7a8
AM
32@set POWERPC
33@set POWERPC64
49fa1e15
AM
34@set Renesas
35@set SPU
36@set TICOFF
2ca22b03 37@set WIN32
e0001a05 38@set XTENSA
0285c67d
NC
39@end ifset
40@c man end
41
252b5132
RH
42@ifinfo
43@format
44START-INFO-DIR-ENTRY
45* Ld: (ld). The GNU linker.
46END-INFO-DIR-ENTRY
47@end format
48@end ifinfo
49
0e9517a9 50@copying
e49e529d
JM
51This file documents the @sc{gnu} linker LD
52@ifset VERSION_PACKAGE
53@value{VERSION_PACKAGE}
54@end ifset
55version @value{VERSION}.
252b5132 56
0e9517a9 57Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000,
8a308ae8 582001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
252b5132 59
cf055d54 60Permission is granted to copy, distribute and/or modify this document
793c5807 61under the terms of the GNU Free Documentation License, Version 1.3
cf055d54
NC
62or any later version published by the Free Software Foundation;
63with no Invariant Sections, with no Front-Cover Texts, and with no
64Back-Cover Texts. A copy of the license is included in the
36f63dca 65section entitled ``GNU Free Documentation License''.
0e9517a9 66@end copying
252b5132
RH
67@iftex
68@finalout
69@setchapternewpage odd
71ba23f6 70@settitle The GNU linker
252b5132 71@titlepage
71ba23f6 72@title The GNU linker
252b5132 73@sp 1
e49e529d
JM
74@subtitle @code{ld}
75@ifset VERSION_PACKAGE
76@subtitle @value{VERSION_PACKAGE}
77@end ifset
252b5132
RH
78@subtitle Version @value{VERSION}
79@author Steve Chamberlain
80@author Ian Lance Taylor
252b5132
RH
81@page
82
83@tex
84{\parskip=0pt
704c465c
NC
85\hfill Red Hat Inc\par
86\hfill nickc\@credhat.com, doc\@redhat.com\par
71ba23f6 87\hfill {\it The GNU linker}\par
252b5132
RH
88\hfill Edited by Jeffrey Osier (jeffrey\@cygnus.com)\par
89}
90\global\parindent=0pt % Steve likes it this way.
91@end tex
92
93@vskip 0pt plus 1filll
0285c67d 94@c man begin COPYRIGHT
9c8ebd6a 95Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001,
903249d7 962002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
252b5132 97
0285c67d 98Permission is granted to copy, distribute and/or modify this document
793c5807 99under the terms of the GNU Free Documentation License, Version 1.3
0285c67d
NC
100or any later version published by the Free Software Foundation;
101with no Invariant Sections, with no Front-Cover Texts, and with no
102Back-Cover Texts. A copy of the license is included in the
36f63dca 103section entitled ``GNU Free Documentation License''.
0285c67d 104@c man end
252b5132 105
252b5132
RH
106@end titlepage
107@end iftex
4ecceb71 108@contents
252b5132
RH
109@c FIXME: Talk about importance of *order* of args, cmds to linker!
110
84ec0e6d 111@ifnottex
252b5132 112@node Top
71ba23f6 113@top LD
e49e529d
JM
114This file documents the @sc{gnu} linker ld
115@ifset VERSION_PACKAGE
116@value{VERSION_PACKAGE}
117@end ifset
118version @value{VERSION}.
252b5132 119
cf055d54 120This document is distributed under the terms of the GNU Free
793c5807
NC
121Documentation License version 1.3. A copy of the license is included
122in the section entitled ``GNU Free Documentation License''.
cf055d54 123
252b5132
RH
124@menu
125* Overview:: Overview
126* Invocation:: Invocation
127* Scripts:: Linker Scripts
128@ifset GENERIC
129* Machine Dependent:: Machine Dependent Features
130@end ifset
131@ifclear GENERIC
132@ifset H8300
133* H8/300:: ld and the H8/300
134@end ifset
c2dcd04e
NC
135@ifset Renesas
136* Renesas:: ld and other Renesas micros
252b5132
RH
137@end ifset
138@ifset I960
139* i960:: ld and the Intel 960 family
140@end ifset
36f63dca
NC
141@ifset ARM
142* ARM:: ld and the ARM family
143@end ifset
144@ifset HPPA
145* HPPA ELF32:: ld and HPPA 32-bit ELF
146@end ifset
93fd0973
SC
147@ifset M68HC11
148* M68HC11/68HC12:: ld and the Motorola 68HC11 and 68HC12 families
149@end ifset
7fb9f789
NC
150@ifset M68K
151* M68K:: ld and Motorola 68K family
152@end ifset
2a60a7a8
AM
153@ifset POWERPC
154* PowerPC ELF32:: ld and PowerPC 32-bit ELF Support
155@end ifset
156@ifset POWERPC64
157* PowerPC64 ELF64:: ld and PowerPC64 64-bit ELF Support
158@end ifset
49fa1e15
AM
159@ifset SPU
160* SPU ELF:: ld and SPU ELF Support
161@end ifset
74459f0e
TW
162@ifset TICOFF
163* TI COFF:: ld and the TI COFF
164@end ifset
2ca22b03
NC
165@ifset WIN32
166* Win32:: ld and WIN32 (cygwin/mingw)
167@end ifset
e0001a05
NC
168@ifset XTENSA
169* Xtensa:: ld and Xtensa Processors
170@end ifset
252b5132
RH
171@end ifclear
172@ifclear SingleFormat
173* BFD:: BFD
174@end ifclear
175@c Following blank line required for remaining bug in makeinfo conds/menus
176
177* Reporting Bugs:: Reporting Bugs
178* MRI:: MRI Compatible Script Files
704c465c 179* GNU Free Documentation License:: GNU Free Documentation License
370b66a1 180* LD Index:: LD Index
252b5132 181@end menu
84ec0e6d 182@end ifnottex
252b5132
RH
183
184@node Overview
185@chapter Overview
186
187@cindex @sc{gnu} linker
188@cindex what is this?
0285c67d 189
0879a67a 190@ifset man
0285c67d 191@c man begin SYNOPSIS
ff5dcc92 192ld [@b{options}] @var{objfile} @dots{}
0285c67d
NC
193@c man end
194
195@c man begin SEEALSO
196ar(1), nm(1), objcopy(1), objdump(1), readelf(1) and
197the Info entries for @file{binutils} and
198@file{ld}.
199@c man end
200@end ifset
201
202@c man begin DESCRIPTION
203
ff5dcc92 204@command{ld} combines a number of object and archive files, relocates
252b5132 205their data and ties up symbol references. Usually the last step in
ff5dcc92 206compiling a program is to run @command{ld}.
252b5132 207
ff5dcc92 208@command{ld} accepts Linker Command Language files written in
252b5132
RH
209a superset of AT&T's Link Editor Command Language syntax,
210to provide explicit and total control over the linking process.
211
0285c67d
NC
212@ifset man
213@c For the man only
ece2d90e 214This man page does not describe the command language; see the
71ba23f6
NC
215@command{ld} entry in @code{info} for full details on the command
216language and on other aspects of the GNU linker.
0285c67d
NC
217@end ifset
218
252b5132 219@ifclear SingleFormat
ff5dcc92
SC
220This version of @command{ld} uses the general purpose BFD libraries
221to operate on object files. This allows @command{ld} to read, combine, and
252b5132
RH
222write object files in many different formats---for example, COFF or
223@code{a.out}. Different formats may be linked together to produce any
224available kind of object file. @xref{BFD}, for more information.
225@end ifclear
226
227Aside from its flexibility, the @sc{gnu} linker is more helpful than other
228linkers in providing diagnostic information. Many linkers abandon
229execution immediately upon encountering an error; whenever possible,
ff5dcc92 230@command{ld} continues executing, allowing you to identify other errors
252b5132
RH
231(or, in some cases, to get an output file in spite of the error).
232
0285c67d
NC
233@c man end
234
252b5132
RH
235@node Invocation
236@chapter Invocation
237
0285c67d
NC
238@c man begin DESCRIPTION
239
ff5dcc92 240The @sc{gnu} linker @command{ld} is meant to cover a broad range of situations,
252b5132
RH
241and to be as compatible as possible with other linkers. As a result,
242you have many choices to control its behavior.
243
0285c67d
NC
244@c man end
245
252b5132
RH
246@ifset UsesEnvVars
247@menu
248* Options:: Command Line Options
249* Environment:: Environment Variables
250@end menu
251
252@node Options
253@section Command Line Options
254@end ifset
255
256@cindex command line
257@cindex options
0285c67d
NC
258
259@c man begin OPTIONS
260
252b5132
RH
261The linker supports a plethora of command-line options, but in actual
262practice few of them are used in any particular context.
263@cindex standard Unix system
ff5dcc92 264For instance, a frequent use of @command{ld} is to link standard Unix
252b5132
RH
265object files on a standard, supported Unix system. On such a system, to
266link a file @code{hello.o}:
267
268@smallexample
269ld -o @var{output} /lib/crt0.o hello.o -lc
270@end smallexample
271
ff5dcc92 272This tells @command{ld} to produce a file called @var{output} as the
252b5132
RH
273result of linking the file @code{/lib/crt0.o} with @code{hello.o} and
274the library @code{libc.a}, which will come from the standard search
275directories. (See the discussion of the @samp{-l} option below.)
276
ff5dcc92 277Some of the command-line options to @command{ld} may be specified at any
511ab9e9
ILT
278point in the command line. However, options which refer to files, such
279as @samp{-l} or @samp{-T}, cause the file to be read at the point at
280which the option appears in the command line, relative to the object
281files and other file options. Repeating non-file options with a
282different argument will either have no further effect, or override prior
252b5132
RH
283occurrences (those further to the left on the command line) of that
284option. Options which may be meaningfully specified more than once are
285noted in the descriptions below.
286
287@cindex object files
511ab9e9
ILT
288Non-option arguments are object files or archives which are to be linked
289together. They may follow, precede, or be mixed in with command-line
290options, except that an object file argument may not be placed between
291an option and its argument.
252b5132
RH
292
293Usually the linker is invoked with at least one object file, but you can
294specify other forms of binary input files using @samp{-l}, @samp{-R},
295and the script command language. If @emph{no} binary input files at all
296are specified, the linker does not produce any output, and issues the
297message @samp{No input files}.
298
36f63dca 299If the linker cannot recognize the format of an object file, it will
252b5132
RH
300assume that it is a linker script. A script specified in this way
301augments the main linker script used for the link (either the default
302linker script or the one specified by using @samp{-T}). This feature
303permits the linker to link against a file which appears to be an object
304or an archive, but actually merely defines some symbol values, or uses
53d25da6
AM
305@code{INPUT} or @code{GROUP} to load other objects. Specifying a
306script in this way merely augments the main linker script, with the
307extra commands placed after the main script; use the @samp{-T} option
308to replace the default linker script entirely, but note the effect of
309the @code{INSERT} command. @xref{Scripts}.
252b5132
RH
310
311For options whose names are a single letter,
312option arguments must either follow the option letter without intervening
313whitespace, or be given as separate arguments immediately following the
314option that requires them.
315
316For options whose names are multiple letters, either one dash or two can
e4897a32 317precede the option name; for example, @samp{-trace-symbol} and
36f63dca 318@samp{--trace-symbol} are equivalent. Note---there is one exception to
e4897a32 319this rule. Multiple letter options that start with a lower case 'o' can
ba1be17e 320only be preceded by two dashes. This is to reduce confusion with the
e4897a32
NC
321@samp{-o} option. So for example @samp{-omagic} sets the output file
322name to @samp{magic} whereas @samp{--omagic} sets the NMAGIC flag on the
323output.
324
325Arguments to multiple-letter options must either be separated from the
326option name by an equals sign, or be given as separate arguments
327immediately following the option that requires them. For example,
328@samp{--trace-symbol foo} and @samp{--trace-symbol=foo} are equivalent.
329Unique abbreviations of the names of multiple-letter options are
330accepted.
252b5132 331
36f63dca
NC
332Note---if the linker is being invoked indirectly, via a compiler driver
333(e.g. @samp{gcc}) then all the linker command line options should be
fa19fce0
NC
334prefixed by @samp{-Wl,} (or whatever is appropriate for the particular
335compiler driver) like this:
4e53152f
NC
336
337@smallexample
2509a395 338 gcc -Wl,--start-group foo.o bar.o -Wl,--end-group
4e53152f
NC
339@end smallexample
340
341This is important, because otherwise the compiler driver program may
2509a395
SL
342silently drop the linker options, resulting in a bad link. Confusion
343may also arise when passing options that require values through a
344driver, as the use of a space between option and argument acts as
345a separator, and causes the driver to pass only the option to the linker
346and the argument to the compiler. In this case, it is simplest to use
347the joined forms of both single- and multiple-letter options, such as:
348
349@smallexample
350 gcc foo.o bar.o -Wl,-eENTRY -Wl,-Map=a.map
351@end smallexample
4e53152f
NC
352
353Here is a table of the generic command line switches accepted by the GNU
354linker:
355
ff5dcc92 356@table @gcctabopt
38fc1cb1 357@include at-file.texi
dff70155 358
2509a395
SL
359@kindex -a @var{keyword}
360@item -a @var{keyword}
252b5132
RH
361This option is supported for HP/UX compatibility. The @var{keyword}
362argument must be one of the strings @samp{archive}, @samp{shared}, or
363@samp{default}. @samp{-aarchive} is functionally equivalent to
364@samp{-Bstatic}, and the other two keywords are functionally equivalent
365to @samp{-Bdynamic}. This option may be used any number of times.
366
367@ifset I960
368@cindex architectures
2509a395
SL
369@kindex -A @var{arch}
370@item -A @var{architecture}
252b5132
RH
371@kindex --architecture=@var{arch}
372@itemx --architecture=@var{architecture}
ff5dcc92
SC
373In the current release of @command{ld}, this option is useful only for the
374Intel 960 family of architectures. In that @command{ld} configuration, the
252b5132
RH
375@var{architecture} argument identifies the particular architecture in
376the 960 family, enabling some safeguards and modifying the
ff5dcc92 377archive-library search path. @xref{i960,,@command{ld} and the Intel 960
252b5132
RH
378family}, for details.
379
ff5dcc92 380Future releases of @command{ld} may support similar functionality for
252b5132
RH
381other architecture families.
382@end ifset
383
384@ifclear SingleFormat
385@cindex binary input format
386@kindex -b @var{format}
387@kindex --format=@var{format}
388@cindex input format
389@cindex input format
390@item -b @var{input-format}
391@itemx --format=@var{input-format}
ff5dcc92
SC
392@command{ld} may be configured to support more than one kind of object
393file. If your @command{ld} is configured this way, you can use the
252b5132 394@samp{-b} option to specify the binary format for input object files
ff5dcc92 395that follow this option on the command line. Even when @command{ld} is
252b5132 396configured to support alternative object formats, you don't usually need
ff5dcc92 397to specify this, as @command{ld} should be configured to expect as a
252b5132
RH
398default input format the most usual format on each machine.
399@var{input-format} is a text string, the name of a particular format
400supported by the BFD libraries. (You can list the available binary
401formats with @samp{objdump -i}.)
402@xref{BFD}.
403
404You may want to use this option if you are linking files with an unusual
405binary format. You can also use @samp{-b} to switch formats explicitly (when
406linking object files of different formats), by including
407@samp{-b @var{input-format}} before each group of object files in a
a1ab1d2a 408particular format.
252b5132
RH
409
410The default format is taken from the environment variable
411@code{GNUTARGET}.
412@ifset UsesEnvVars
413@xref{Environment}.
414@end ifset
415You can also define the input format from a script, using the command
0285c67d
NC
416@code{TARGET};
417@ifclear man
418see @ref{Format Commands}.
419@end ifclear
252b5132
RH
420@end ifclear
421
422@kindex -c @var{MRI-cmdfile}
423@kindex --mri-script=@var{MRI-cmdfile}
424@cindex compatibility, MRI
425@item -c @var{MRI-commandfile}
426@itemx --mri-script=@var{MRI-commandfile}
ff5dcc92 427For compatibility with linkers produced by MRI, @command{ld} accepts script
252b5132 428files written in an alternate, restricted command language, described in
0285c67d
NC
429@ifclear man
430@ref{MRI,,MRI Compatible Script Files}.
431@end ifclear
432@ifset man
433the MRI Compatible Script Files section of GNU ld documentation.
434@end ifset
435Introduce MRI script files with
252b5132 436the option @samp{-c}; use the @samp{-T} option to run linker
ff5dcc92
SC
437scripts written in the general-purpose @command{ld} scripting language.
438If @var{MRI-cmdfile} does not exist, @command{ld} looks for it in the directories
252b5132
RH
439specified by any @samp{-L} options.
440
441@cindex common allocation
442@kindex -d
443@kindex -dc
444@kindex -dp
a1ab1d2a 445@item -d
252b5132
RH
446@itemx -dc
447@itemx -dp
448These three options are equivalent; multiple forms are supported for
449compatibility with other linkers. They assign space to common symbols
450even if a relocatable output file is specified (with @samp{-r}). The
451script command @code{FORCE_COMMON_ALLOCATION} has the same effect.
452@xref{Miscellaneous Commands}.
453
454@cindex entry point, from command line
455@kindex -e @var{entry}
456@kindex --entry=@var{entry}
a1ab1d2a 457@item -e @var{entry}
252b5132
RH
458@itemx --entry=@var{entry}
459Use @var{entry} as the explicit symbol for beginning execution of your
460program, rather than the default entry point. If there is no symbol
461named @var{entry}, the linker will try to parse @var{entry} as a number,
462and use that as the entry address (the number will be interpreted in
463base 10; you may use a leading @samp{0x} for base 16, or a leading
464@samp{0} for base 8). @xref{Entry Point}, for a discussion of defaults
465and other ways of specifying the entry point.
466
b58f81ae
DJ
467@kindex --exclude-libs
468@item --exclude-libs @var{lib},@var{lib},...
469Specifies a list of archive libraries from which symbols should not be automatically
e1c37eb5 470exported. The library names may be delimited by commas or colons. Specifying
b58f81ae
DJ
471@code{--exclude-libs ALL} excludes symbols in all archive libraries from
472automatic export. This option is available only for the i386 PE targeted
473port of the linker and for ELF targeted ports. For i386 PE, symbols
474explicitly listed in a .def file are still exported, regardless of this
475option. For ELF targeted ports, symbols affected by this option will
476be treated as hidden.
477
e1c37eb5
DK
478@kindex --exclude-modules-for-implib
479@item --exclude-modules-for-implib @var{module},@var{module},...
480Specifies a list of object files or archive members, from which symbols
481should not be automatically exported, but which should be copied wholesale
482into the import library being generated during the link. The module names
483may be delimited by commas or colons, and must match exactly the filenames
484used by @command{ld} to open the files; for archive members, this is simply
485the member name, but for object files the name listed must include and
486match precisely any path used to specify the input file on the linker's
487command-line. This option is available only for the i386 PE targeted port
488of the linker. Symbols explicitly listed in a .def file are still exported,
489regardless of this option.
490
252b5132
RH
491@cindex dynamic symbol table
492@kindex -E
493@kindex --export-dynamic
267e2722 494@kindex --no-export-dynamic
252b5132
RH
495@item -E
496@itemx --export-dynamic
267e2722
CD
497@itemx --no-export-dynamic
498When creating a dynamically linked executable, using the @option{-E}
499option or the @option{--export-dynamic} option causes the linker to add
500all symbols to the dynamic symbol table. The dynamic symbol table is the
501set of symbols which are visible from dynamic objects at run time.
502
503If you do not use either of these options (or use the
504@option{--no-export-dynamic} option to restore the default behavior), the
505dynamic symbol table will normally contain only those symbols which are
506referenced by some dynamic object mentioned in the link.
252b5132
RH
507
508If you use @code{dlopen} to load a dynamic object which needs to refer
509back to the symbols defined by the program, rather than some other
510dynamic object, then you will probably need to use this option when
511linking the program itself.
512
55255dae 513You can also use the dynamic list to control what symbols should
cb840a31 514be added to the dynamic symbol table if the output format supports it.
55255dae 515See the description of @samp{--dynamic-list}.
cb840a31 516
8b747e1a
DK
517Note that this option is specific to ELF targeted ports. PE targets
518support a similar function to export all symbols from a DLL or EXE; see
519the description of @samp{--export-all-symbols} below.
520
36f63dca 521@ifclear SingleFormat
252b5132
RH
522@cindex big-endian objects
523@cindex endianness
524@kindex -EB
525@item -EB
526Link big-endian objects. This affects the default output format.
527
528@cindex little-endian objects
529@kindex -EL
530@item -EL
531Link little-endian objects. This affects the default output format.
36f63dca 532@end ifclear
252b5132 533
2509a395
SL
534@kindex -f @var{name}
535@kindex --auxiliary=@var{name}
536@item -f @var{name}
537@itemx --auxiliary=@var{name}
252b5132
RH
538When creating an ELF shared object, set the internal DT_AUXILIARY field
539to the specified name. This tells the dynamic linker that the symbol
540table of the shared object should be used as an auxiliary filter on the
541symbol table of the shared object @var{name}.
542
543If you later link a program against this filter object, then, when you
544run the program, the dynamic linker will see the DT_AUXILIARY field. If
545the dynamic linker resolves any symbols from the filter object, it will
546first check whether there is a definition in the shared object
547@var{name}. If there is one, it will be used instead of the definition
548in the filter object. The shared object @var{name} need not exist.
549Thus the shared object @var{name} may be used to provide an alternative
550implementation of certain functions, perhaps for debugging or for
551machine specific performance.
552
553This option may be specified more than once. The DT_AUXILIARY entries
554will be created in the order in which they appear on the command line.
555
2509a395
SL
556@kindex -F @var{name}
557@kindex --filter=@var{name}
252b5132 558@item -F @var{name}
2509a395 559@itemx --filter=@var{name}
252b5132
RH
560When creating an ELF shared object, set the internal DT_FILTER field to
561the specified name. This tells the dynamic linker that the symbol table
562of the shared object which is being created should be used as a filter
563on the symbol table of the shared object @var{name}.
564
565If you later link a program against this filter object, then, when you
566run the program, the dynamic linker will see the DT_FILTER field. The
567dynamic linker will resolve symbols according to the symbol table of the
568filter object as usual, but it will actually link to the definitions
569found in the shared object @var{name}. Thus the filter object can be
570used to select a subset of the symbols provided by the object
571@var{name}.
572
ff5dcc92 573Some older linkers used the @option{-F} option throughout a compilation
252b5132 574toolchain for specifying object-file format for both input and output
36f63dca
NC
575object files.
576@ifclear SingleFormat
577The @sc{gnu} linker uses other mechanisms for this purpose: the
ece2d90e 578@option{-b}, @option{--format}, @option{--oformat} options, the
252b5132 579@code{TARGET} command in linker scripts, and the @code{GNUTARGET}
36f63dca
NC
580environment variable.
581@end ifclear
582The @sc{gnu} linker will ignore the @option{-F} option when not
583creating an ELF shared object.
252b5132 584
3dbf70a2 585@cindex finalization function
2509a395
SL
586@kindex -fini=@var{name}
587@item -fini=@var{name}
3dbf70a2
MM
588When creating an ELF executable or shared object, call NAME when the
589executable or shared object is unloaded, by setting DT_FINI to the
590address of the function. By default, the linker uses @code{_fini} as
591the function to call.
592
252b5132
RH
593@kindex -g
594@item -g
595Ignored. Provided for compatibility with other tools.
596
2509a395
SL
597@kindex -G @var{value}
598@kindex --gpsize=@var{value}
252b5132 599@cindex object size
2509a395 600@item -G @var{value}
252b5132
RH
601@itemx --gpsize=@var{value}
602Set the maximum size of objects to be optimized using the GP register to
603@var{size}. This is only meaningful for object file formats such as
604MIPS ECOFF which supports putting large and small objects into different
605sections. This is ignored for other object file formats.
606
607@cindex runtime library name
2509a395 608@kindex -h @var{name}
252b5132 609@kindex -soname=@var{name}
2509a395 610@item -h @var{name}
252b5132
RH
611@itemx -soname=@var{name}
612When creating an ELF shared object, set the internal DT_SONAME field to
613the specified name. When an executable is linked with a shared object
614which has a DT_SONAME field, then when the executable is run the dynamic
615linker will attempt to load the shared object specified by the DT_SONAME
616field rather than the using the file name given to the linker.
617
618@kindex -i
619@cindex incremental link
620@item -i
621Perform an incremental link (same as option @samp{-r}).
622
3dbf70a2 623@cindex initialization function
2509a395
SL
624@kindex -init=@var{name}
625@item -init=@var{name}
3dbf70a2
MM
626When creating an ELF executable or shared object, call NAME when the
627executable or shared object is loaded, by setting DT_INIT to the address
628of the function. By default, the linker uses @code{_init} as the
629function to call.
630
252b5132 631@cindex archive files, from cmd line
2509a395 632@kindex -l @var{namespec}
bcb674cf 633@kindex --library=@var{namespec}
2509a395 634@item -l @var{namespec}
bcb674cf
RS
635@itemx --library=@var{namespec}
636Add the archive or object file specified by @var{namespec} to the
637list of files to link. This option may be used any number of times.
638If @var{namespec} is of the form @file{:@var{filename}}, @command{ld}
639will search the library path for a file called @var{filename}, otherise it
640will search the library path for a file called @file{lib@var{namespec}.a}.
252b5132 641
ff5dcc92 642On systems which support shared libraries, @command{ld} may also search for
bcb674cf
RS
643files other than @file{lib@var{namespec}.a}. Specifically, on ELF
644and SunOS systems, @command{ld} will search a directory for a library
645called @file{lib@var{namespec}.so} before searching for one called
646@file{lib@var{namespec}.a}. (By convention, a @code{.so} extension
647indicates a shared library.) Note that this behavior does not apply
648to @file{:@var{filename}}, which always specifies a file called
649@var{filename}.
252b5132
RH
650
651The linker will search an archive only once, at the location where it is
652specified on the command line. If the archive defines a symbol which
653was undefined in some object which appeared before the archive on the
654command line, the linker will include the appropriate file(s) from the
655archive. However, an undefined symbol in an object appearing later on
656the command line will not cause the linker to search the archive again.
657
ff5dcc92 658See the @option{-(} option for a way to force the linker to search
252b5132
RH
659archives multiple times.
660
661You may list the same archive multiple times on the command line.
662
663@ifset GENERIC
664This type of archive searching is standard for Unix linkers. However,
ff5dcc92 665if you are using @command{ld} on AIX, note that it is different from the
252b5132
RH
666behaviour of the AIX linker.
667@end ifset
668
669@cindex search directory, from cmd line
2509a395 670@kindex -L @var{dir}
252b5132 671@kindex --library-path=@var{dir}
2509a395 672@item -L @var{searchdir}
252b5132 673@itemx --library-path=@var{searchdir}
ff5dcc92
SC
674Add path @var{searchdir} to the list of paths that @command{ld} will search
675for archive libraries and @command{ld} control scripts. You may use this
252b5132
RH
676option any number of times. The directories are searched in the order
677in which they are specified on the command line. Directories specified
678on the command line are searched before the default directories. All
ff5dcc92 679@option{-L} options apply to all @option{-l} options, regardless of the
7d24f02c
KH
680order in which the options appear. @option{-L} options do not affect
681how @command{ld} searches for a linker script unless @option{-T}
682option is specified.
252b5132 683
9c8ebd6a
DJ
684If @var{searchdir} begins with @code{=}, then the @code{=} will be replaced
685by the @dfn{sysroot prefix}, a path specified when the linker is configured.
686
252b5132
RH
687@ifset UsesEnvVars
688The default set of paths searched (without being specified with
ff5dcc92 689@samp{-L}) depends on which emulation mode @command{ld} is using, and in
252b5132
RH
690some cases also on how it was configured. @xref{Environment}.
691@end ifset
692
693The paths can also be specified in a link script with the
694@code{SEARCH_DIR} command. Directories specified this way are searched
695at the point in which the linker script appears in the command line.
696
697@cindex emulation
698@kindex -m @var{emulation}
2509a395 699@item -m @var{emulation}
252b5132
RH
700Emulate the @var{emulation} linker. You can list the available
701emulations with the @samp{--verbose} or @samp{-V} options.
702
703If the @samp{-m} option is not used, the emulation is taken from the
704@code{LDEMULATION} environment variable, if that is defined.
705
706Otherwise, the default emulation depends upon how the linker was
707configured.
708
709@cindex link map
710@kindex -M
711@kindex --print-map
712@item -M
713@itemx --print-map
714Print a link map to the standard output. A link map provides
715information about the link, including the following:
716
717@itemize @bullet
718@item
3b83e13a 719Where object files are mapped into memory.
252b5132
RH
720@item
721How common symbols are allocated.
722@item
723All archive members included in the link, with a mention of the symbol
724which caused the archive member to be brought in.
3b83e13a
NC
725@item
726The values assigned to symbols.
727
728Note - symbols whose values are computed by an expression which
729involves a reference to a previous value of the same symbol may not
730have correct result displayed in the link map. This is because the
731linker discards intermediate results and only retains the final value
732of an expression. Under such circumstances the linker will display
733the final value enclosed by square brackets. Thus for example a
734linker script containing:
735
736@smallexample
737 foo = 1
738 foo = foo * 4
739 foo = foo + 8
740@end smallexample
741
742will produce the following output in the link map if the @option{-M}
743option is used:
744
745@smallexample
746 0x00000001 foo = 0x1
747 [0x0000000c] foo = (foo * 0x4)
748 [0x0000000c] foo = (foo + 0x8)
749@end smallexample
750
751See @ref{Expressions} for more information about expressions in linker
752scripts.
252b5132
RH
753@end itemize
754
755@kindex -n
756@cindex read-only text
757@cindex NMAGIC
758@kindex --nmagic
759@item -n
760@itemx --nmagic
fa19fce0 761Turn off page alignment of sections, and mark the output as
a1ab1d2a 762@code{NMAGIC} if possible.
252b5132
RH
763
764@kindex -N
765@kindex --omagic
766@cindex read/write from cmd line
767@cindex OMAGIC
a1ab1d2a 768@item -N
252b5132
RH
769@itemx --omagic
770Set the text and data sections to be readable and writable. Also, do
63fd3b82
NC
771not page-align the data segment, and disable linking against shared
772libraries. If the output format supports Unix style magic numbers,
4d8907ac
DS
773mark the output as @code{OMAGIC}. Note: Although a writable text section
774is allowed for PE-COFF targets, it does not conform to the format
775specification published by Microsoft.
63fd3b82
NC
776
777@kindex --no-omagic
778@cindex OMAGIC
779@item --no-omagic
780This option negates most of the effects of the @option{-N} option. It
781sets the text section to be read-only, and forces the data segment to
782be page-aligned. Note - this option does not enable linking against
783shared libraries. Use @option{-Bdynamic} for this.
252b5132
RH
784
785@kindex -o @var{output}
786@kindex --output=@var{output}
787@cindex naming the output file
788@item -o @var{output}
789@itemx --output=@var{output}
ff5dcc92 790Use @var{output} as the name for the program produced by @command{ld}; if this
252b5132
RH
791option is not specified, the name @file{a.out} is used by default. The
792script command @code{OUTPUT} can also specify the output file name.
793
794@kindex -O @var{level}
795@cindex generating optimized output
796@item -O @var{level}
ff5dcc92 797If @var{level} is a numeric values greater than zero @command{ld} optimizes
252b5132 798the output. This might take significantly longer and therefore probably
98c503ac
NC
799should only be enabled for the final binary. At the moment this
800option only affects ELF shared library generation. Future releases of
801the linker may make more use of this option. Also currently there is
802no difference in the linker's behaviour for different non-zero values
803of this option. Again this may change with future releases.
252b5132 804
a712da20
NC
805@kindex -q
806@kindex --emit-relocs
807@cindex retain relocations in final executable
808@item -q
809@itemx --emit-relocs
ba1be17e 810Leave relocation sections and contents in fully linked executables.
a712da20
NC
811Post link analysis and optimization tools may need this information in
812order to perform correct modifications of executables. This results
813in larger executables.
814
dbab7a7b
NC
815This option is currently only supported on ELF platforms.
816
4f471f39
RS
817@kindex --force-dynamic
818@cindex forcing the creation of dynamic sections
819@item --force-dynamic
820Force the output file to have dynamic sections. This option is specific
821to VxWorks targets.
822
252b5132
RH
823@cindex partial link
824@cindex relocatable output
825@kindex -r
1049f94e 826@kindex --relocatable
252b5132 827@item -r
1049f94e 828@itemx --relocatable
252b5132 829Generate relocatable output---i.e., generate an output file that can in
ff5dcc92 830turn serve as input to @command{ld}. This is often called @dfn{partial
252b5132
RH
831linking}. As a side effect, in environments that support standard Unix
832magic numbers, this option also sets the output file's magic number to
833@code{OMAGIC}.
ff5dcc92 834@c ; see @option{-N}.
252b5132
RH
835If this option is not specified, an absolute file is produced. When
836linking C++ programs, this option @emph{will not} resolve references to
837constructors; to do that, use @samp{-Ur}.
838
62bf86b4
HPN
839When an input file does not have the same format as the output file,
840partial linking is only supported if that input file does not contain any
841relocations. Different output formats can have further restrictions; for
842example some @code{a.out}-based formats do not support partial linking
843with input files in other formats at all.
844
252b5132
RH
845This option does the same thing as @samp{-i}.
846
847@kindex -R @var{file}
848@kindex --just-symbols=@var{file}
849@cindex symbol-only input
850@item -R @var{filename}
851@itemx --just-symbols=@var{filename}
852Read symbol names and their addresses from @var{filename}, but do not
853relocate it or include it in the output. This allows your output file
854to refer symbolically to absolute locations of memory defined in other
855programs. You may use this option more than once.
856
ff5dcc92 857For compatibility with other ELF linkers, if the @option{-R} option is
252b5132 858followed by a directory name, rather than a file name, it is treated as
ff5dcc92 859the @option{-rpath} option.
252b5132
RH
860
861@kindex -s
862@kindex --strip-all
863@cindex strip all symbols
a1ab1d2a 864@item -s
252b5132
RH
865@itemx --strip-all
866Omit all symbol information from the output file.
867
868@kindex -S
869@kindex --strip-debug
870@cindex strip debugger symbols
a1ab1d2a 871@item -S
252b5132
RH
872@itemx --strip-debug
873Omit debugger symbol information (but not all symbols) from the output file.
874
875@kindex -t
876@kindex --trace
877@cindex input files, displaying
a1ab1d2a 878@item -t
252b5132 879@itemx --trace
ff5dcc92 880Print the names of the input files as @command{ld} processes them.
252b5132
RH
881
882@kindex -T @var{script}
883@kindex --script=@var{script}
884@cindex script files
885@item -T @var{scriptfile}
886@itemx --script=@var{scriptfile}
887Use @var{scriptfile} as the linker script. This script replaces
ff5dcc92 888@command{ld}'s default linker script (rather than adding to it), so
252b5132 889@var{commandfile} must specify everything necessary to describe the
114283d8
NC
890output file. @xref{Scripts}. If @var{scriptfile} does not exist in
891the current directory, @code{ld} looks for it in the directories
892specified by any preceding @samp{-L} options. Multiple @samp{-T}
893options accumulate.
252b5132 894
14be8564
L
895@kindex -dT @var{script}
896@kindex --default-script=@var{script}
897@cindex script files
898@item -dT @var{scriptfile}
899@itemx --default-script=@var{scriptfile}
900Use @var{scriptfile} as the default linker script. @xref{Scripts}.
901
902This option is similar to the @option{--script} option except that
903processing of the script is delayed until after the rest of the
904command line has been processed. This allows options placed after the
905@option{--default-script} option on the command line to affect the
906behaviour of the linker script, which can be important when the linker
907command line cannot be directly controlled by the user. (eg because
908the command line is being constructed by another tool, such as
909@samp{gcc}).
910
252b5132
RH
911@kindex -u @var{symbol}
912@kindex --undefined=@var{symbol}
913@cindex undefined symbol
914@item -u @var{symbol}
915@itemx --undefined=@var{symbol}
916Force @var{symbol} to be entered in the output file as an undefined
917symbol. Doing this may, for example, trigger linking of additional
918modules from standard libraries. @samp{-u} may be repeated with
919different option arguments to enter additional undefined symbols. This
920option is equivalent to the @code{EXTERN} linker script command.
921
922@kindex -Ur
923@cindex constructors
a1ab1d2a 924@item -Ur
252b5132
RH
925For anything other than C++ programs, this option is equivalent to
926@samp{-r}: it generates relocatable output---i.e., an output file that can in
ff5dcc92 927turn serve as input to @command{ld}. When linking C++ programs, @samp{-Ur}
252b5132
RH
928@emph{does} resolve references to constructors, unlike @samp{-r}.
929It does not work to use @samp{-Ur} on files that were themselves linked
930with @samp{-Ur}; once the constructor table has been built, it cannot
931be added to. Use @samp{-Ur} only for the last partial link, and
932@samp{-r} for the others.
933
577a0623
AM
934@kindex --unique[=@var{SECTION}]
935@item --unique[=@var{SECTION}]
936Creates a separate output section for every input section matching
937@var{SECTION}, or if the optional wildcard @var{SECTION} argument is
938missing, for every orphan input section. An orphan section is one not
939specifically mentioned in a linker script. You may use this option
940multiple times on the command line; It prevents the normal merging of
941input sections with the same name, overriding output section assignments
942in a linker script.
a854a4a7 943
252b5132
RH
944@kindex -v
945@kindex -V
946@kindex --version
947@cindex version
948@item -v
949@itemx --version
950@itemx -V
ff5dcc92 951Display the version number for @command{ld}. The @option{-V} option also
252b5132
RH
952lists the supported emulations.
953
954@kindex -x
955@kindex --discard-all
956@cindex deleting local symbols
957@item -x
958@itemx --discard-all
959Delete all local symbols.
960
961@kindex -X
962@kindex --discard-locals
963@cindex local symbols, deleting
a1ab1d2a 964@item -X
252b5132 965@itemx --discard-locals
3c68c38f
BW
966Delete all temporary local symbols. (These symbols start with
967system-specific local label prefixes, typically @samp{.L} for ELF systems
968or @samp{L} for traditional a.out systems.)
252b5132
RH
969
970@kindex -y @var{symbol}
971@kindex --trace-symbol=@var{symbol}
972@cindex symbol tracing
973@item -y @var{symbol}
974@itemx --trace-symbol=@var{symbol}
975Print the name of each linked file in which @var{symbol} appears. This
976option may be given any number of times. On many systems it is necessary
977to prepend an underscore.
978
979This option is useful when you have an undefined symbol in your link but
980don't know where the reference is coming from.
981
982@kindex -Y @var{path}
983@item -Y @var{path}
984Add @var{path} to the default library search path. This option exists
985for Solaris compatibility.
986
987@kindex -z @var{keyword}
988@item -z @var{keyword}
cd6d6c15
NC
989The recognized keywords are:
990@table @samp
991
992@item combreloc
993Combines multiple reloc sections and sorts them to make dynamic symbol
994lookup caching possible.
995
996@item defs
560e09e9 997Disallows undefined symbols in object files. Undefined symbols in
07f3b6ad 998shared libraries are still allowed.
cd6d6c15 999
6aa29e7b
JJ
1000@item execstack
1001Marks the object as requiring executable stack.
1002
cd6d6c15
NC
1003@item initfirst
1004This option is only meaningful when building a shared object.
1005It marks the object so that its runtime initialization will occur
1006before the runtime initialization of any other objects brought into
1007the process at the same time. Similarly the runtime finalization of
1008the object will occur after the runtime finalization of any other
1009objects.
1010
1011@item interpose
1012Marks the object that its symbol table interposes before all symbols
1013but the primary executable.
1014
5fa222e4
AM
1015@item lazy
1016When generating an executable or shared library, mark it to tell the
1017dynamic linker to defer function call resolution to the point when
1018the function is called (lazy binding), rather than at load time.
1019Lazy binding is the default.
1020
cd6d6c15
NC
1021@item loadfltr
1022Marks the object that its filters be processed immediately at
1023runtime.
1024
1025@item muldefs
1026Allows multiple definitions.
1027
1028@item nocombreloc
1029Disables multiple reloc sections combining.
1030
1031@item nocopyreloc
1032Disables production of copy relocs.
1033
1034@item nodefaultlib
1035Marks the object that the search for dependencies of this object will
1036ignore any default library search paths.
1037
1038@item nodelete
1039Marks the object shouldn't be unloaded at runtime.
1040
1041@item nodlopen
1042Marks the object not available to @code{dlopen}.
1043
1044@item nodump
1045Marks the object can not be dumped by @code{dldump}.
1046
6aa29e7b
JJ
1047@item noexecstack
1048Marks the object as not requiring executable stack.
1049
1050@item norelro
1051Don't create an ELF @code{PT_GNU_RELRO} segment header in the object.
1052
cd6d6c15
NC
1053@item now
1054When generating an executable or shared library, mark it to tell the
1055dynamic linker to resolve all symbols when the program is started, or
1056when the shared library is linked to using dlopen, instead of
1057deferring function call resolution to the point when the function is
1058first called.
1059
1060@item origin
1061Marks the object may contain $ORIGIN.
1062
6aa29e7b
JJ
1063@item relro
1064Create an ELF @code{PT_GNU_RELRO} segment header in the object.
1065
24718e3b
L
1066@item max-page-size=@var{value}
1067Set the emulation maximum page size to @var{value}.
1068
1069@item common-page-size=@var{value}
1070Set the emulation common page size to @var{value}.
1071
cd6d6c15
NC
1072@end table
1073
ece2d90e 1074Other keywords are ignored for Solaris compatibility.
252b5132
RH
1075
1076@kindex -(
1077@cindex groups of archives
1078@item -( @var{archives} -)
1079@itemx --start-group @var{archives} --end-group
1080The @var{archives} should be a list of archive files. They may be
1081either explicit file names, or @samp{-l} options.
1082
1083The specified archives are searched repeatedly until no new undefined
1084references are created. Normally, an archive is searched only once in
1085the order that it is specified on the command line. If a symbol in that
1086archive is needed to resolve an undefined symbol referred to by an
1087object in an archive that appears later on the command line, the linker
1088would not be able to resolve that reference. By grouping the archives,
1089they all be searched repeatedly until all possible references are
1090resolved.
1091
1092Using this option has a significant performance cost. It is best to use
1093it only when there are unavoidable circular references between two or
1094more archives.
1095
69da35b5
NC
1096@kindex --accept-unknown-input-arch
1097@kindex --no-accept-unknown-input-arch
1098@item --accept-unknown-input-arch
1099@itemx --no-accept-unknown-input-arch
1100Tells the linker to accept input files whose architecture cannot be
2ca22b03 1101recognised. The assumption is that the user knows what they are doing
69da35b5
NC
1102and deliberately wants to link in these unknown input files. This was
1103the default behaviour of the linker, before release 2.14. The default
1104behaviour from release 2.14 onwards is to reject such input files, and
1105so the @samp{--accept-unknown-input-arch} option has been added to
1106restore the old behaviour.
2ca22b03 1107
4a43e768
AM
1108@kindex --as-needed
1109@kindex --no-as-needed
1110@item --as-needed
1111@itemx --no-as-needed
1112This option affects ELF DT_NEEDED tags for dynamic libraries mentioned
1113on the command line after the @option{--as-needed} option. Normally,
1114the linker will add a DT_NEEDED tag for each dynamic library mentioned
1115on the command line, regardless of whether the library is actually
010e5ae2
AM
1116needed. @option{--as-needed} causes a DT_NEEDED tag to only be emitted
1117for a library that satisfies a symbol reference from regular objects
1118which is undefined at the point that the library was linked, or, if
1119the library is not found in the DT_NEEDED lists of other libraries
1120linked up to that point, a reference from another dynamic library.
4a43e768
AM
1121@option{--no-as-needed} restores the default behaviour.
1122
e56f61be
L
1123@kindex --add-needed
1124@kindex --no-add-needed
1125@item --add-needed
1126@itemx --no-add-needed
1127This option affects the treatment of dynamic libraries from ELF
1128DT_NEEDED tags in dynamic libraries mentioned on the command line after
1129the @option{--no-add-needed} option. Normally, the linker will add
1130a DT_NEEDED tag for each dynamic library from DT_NEEDED tags.
1131@option{--no-add-needed} causes DT_NEEDED tags will never be emitted
1132for those libraries from DT_NEEDED tags. @option{--add-needed} restores
1133the default behaviour.
1134
252b5132
RH
1135@kindex -assert @var{keyword}
1136@item -assert @var{keyword}
1137This option is ignored for SunOS compatibility.
1138
1139@kindex -Bdynamic
1140@kindex -dy
1141@kindex -call_shared
1142@item -Bdynamic
1143@itemx -dy
1144@itemx -call_shared
1145Link against dynamic libraries. This is only meaningful on platforms
1146for which shared libraries are supported. This option is normally the
1147default on such platforms. The different variants of this option are
1148for compatibility with various systems. You may use this option
1149multiple times on the command line: it affects library searching for
da8bce14 1150@option{-l} options which follow it.
252b5132 1151
a1ab1d2a
UD
1152@kindex -Bgroup
1153@item -Bgroup
1154Set the @code{DF_1_GROUP} flag in the @code{DT_FLAGS_1} entry in the dynamic
1155section. This causes the runtime linker to handle lookups in this
1156object and its dependencies to be performed only inside the group.
560e09e9
NC
1157@option{--unresolved-symbols=report-all} is implied. This option is
1158only meaningful on ELF platforms which support shared libraries.
a1ab1d2a 1159
252b5132
RH
1160@kindex -Bstatic
1161@kindex -dn
1162@kindex -non_shared
1163@kindex -static
a1ab1d2a 1164@item -Bstatic
252b5132
RH
1165@itemx -dn
1166@itemx -non_shared
1167@itemx -static
1168Do not link against shared libraries. This is only meaningful on
1169platforms for which shared libraries are supported. The different
1170variants of this option are for compatibility with various systems. You
1171may use this option multiple times on the command line: it affects
560e09e9 1172library searching for @option{-l} options which follow it. This
e9156f74
NC
1173option also implies @option{--unresolved-symbols=report-all}. This
1174option can be used with @option{-shared}. Doing so means that a
1175shared library is being created but that all of the library's external
1176references must be resolved by pulling in entries from static
ece2d90e 1177libraries.
252b5132
RH
1178
1179@kindex -Bsymbolic
1180@item -Bsymbolic
1181When creating a shared library, bind references to global symbols to the
1182definition within the shared library, if any. Normally, it is possible
1183for a program linked against a shared library to override the definition
1184within the shared library. This option is only meaningful on ELF
1185platforms which support shared libraries.
1186
40b36307
L
1187@kindex -Bsymbolic-functions
1188@item -Bsymbolic-functions
1189When creating a shared library, bind references to global function
c0065db7 1190symbols to the definition within the shared library, if any.
40b36307
L
1191This option is only meaningful on ELF platforms which support shared
1192libraries.
1193
55255dae
L
1194@kindex --dynamic-list=@var{dynamic-list-file}
1195@item --dynamic-list=@var{dynamic-list-file}
1196Specify the name of a dynamic list file to the linker. This is
1197typically used when creating shared libraries to specify a list of
1198global symbols whose references shouldn't be bound to the definition
1199within the shared library, or creating dynamically linked executables
1200to specify a list of symbols which should be added to the symbol table
1201in the executable. This option is only meaningful on ELF platforms
1202which support shared libraries.
1203
1204The format of the dynamic list is the same as the version node without
1205scope and node name. See @ref{VERSION} for more information.
1206
40b36307
L
1207@kindex --dynamic-list-data
1208@item --dynamic-list-data
1209Include all global data symbols to the dynamic list.
1210
1211@kindex --dynamic-list-cpp-new
1212@item --dynamic-list-cpp-new
1213Provide the builtin dynamic list for C++ operator new and delete. It
1214is mainly useful for building shared libstdc++.
1215
0b8a70d9
L
1216@kindex --dynamic-list-cpp-typeinfo
1217@item --dynamic-list-cpp-typeinfo
1218Provide the builtin dynamic list for C++ runtime type identification.
1219
252b5132
RH
1220@kindex --check-sections
1221@kindex --no-check-sections
1222@item --check-sections
308b1ffd 1223@itemx --no-check-sections
252b5132 1224Asks the linker @emph{not} to check section addresses after they have
7d816a17 1225been assigned to see if there are any overlaps. Normally the linker will
252b5132
RH
1226perform this check, and if it finds any overlaps it will produce
1227suitable error messages. The linker does know about, and does make
1228allowances for sections in overlays. The default behaviour can be
560e09e9 1229restored by using the command line switch @option{--check-sections}.
02b0b1aa
NS
1230Section overlap is not usually checked for relocatable links. You can
1231force checking in that case by using the @option{--check-sections}
1232option.
252b5132
RH
1233
1234@cindex cross reference table
1235@kindex --cref
1236@item --cref
1237Output a cross reference table. If a linker map file is being
1238generated, the cross reference table is printed to the map file.
1239Otherwise, it is printed on the standard output.
1240
1241The format of the table is intentionally simple, so that it may be
1242easily processed by a script if necessary. The symbols are printed out,
1243sorted by name. For each symbol, a list of file names is given. If the
1244symbol is defined, the first file listed is the location of the
1245definition. The remaining files contain references to the symbol.
1246
4818e05f
AM
1247@cindex common allocation
1248@kindex --no-define-common
1249@item --no-define-common
1250This option inhibits the assignment of addresses to common symbols.
1251The script command @code{INHIBIT_COMMON_ALLOCATION} has the same effect.
1252@xref{Miscellaneous Commands}.
1253
1254The @samp{--no-define-common} option allows decoupling
1255the decision to assign addresses to Common symbols from the choice
1256of the output file type; otherwise a non-Relocatable output type
1257forces assigning addresses to Common symbols.
1258Using @samp{--no-define-common} allows Common symbols that are referenced
1259from a shared library to be assigned addresses only in the main program.
1260This eliminates the unused duplicate space in the shared library,
1261and also prevents any possible confusion over resolving to the wrong
1262duplicate when there are many dynamic modules with specialized search
1263paths for runtime symbol resolution.
1264
252b5132 1265@cindex symbols, from command line
2509a395
SL
1266@kindex --defsym=@var{symbol}=@var{exp}
1267@item --defsym=@var{symbol}=@var{expression}
252b5132
RH
1268Create a global symbol in the output file, containing the absolute
1269address given by @var{expression}. You may use this option as many
1270times as necessary to define multiple symbols in the command line. A
1271limited form of arithmetic is supported for the @var{expression} in this
1272context: you may give a hexadecimal constant or the name of an existing
1273symbol, or use @code{+} and @code{-} to add or subtract hexadecimal
1274constants or symbols. If you need more elaborate expressions, consider
1275using the linker command language from a script (@pxref{Assignments,,
1276Assignment: Symbol Definitions}). @emph{Note:} there should be no white
1277space between @var{symbol}, the equals sign (``@key{=}''), and
1278@var{expression}.
1279
1280@cindex demangling, from command line
28c309a2 1281@kindex --demangle[=@var{style}]
252b5132 1282@kindex --no-demangle
28c309a2 1283@item --demangle[=@var{style}]
252b5132
RH
1284@itemx --no-demangle
1285These options control whether to demangle symbol names in error messages
1286and other output. When the linker is told to demangle, it tries to
1287present symbol names in a readable fashion: it strips leading
1288underscores if they are used by the object file format, and converts C++
a1ab1d2a
UD
1289mangled symbol names into user readable names. Different compilers have
1290different mangling styles. The optional demangling style argument can be used
1291to choose an appropriate demangling style for your compiler. The linker will
28c309a2
NC
1292demangle by default unless the environment variable @samp{COLLECT_NO_DEMANGLE}
1293is set. These options may be used to override the default.
252b5132
RH
1294
1295@cindex dynamic linker, from command line
506eee22 1296@kindex -I@var{file}
2509a395
SL
1297@kindex --dynamic-linker=@var{file}
1298@item -I@var{file}
1299@itemx --dynamic-linker=@var{file}
252b5132
RH
1300Set the name of the dynamic linker. This is only meaningful when
1301generating dynamically linked ELF executables. The default dynamic
1302linker is normally correct; don't use this unless you know what you are
1303doing.
1304
7ce691ae 1305@kindex --fatal-warnings
0fe58ccd 1306@kindex --no-fatal-warnings
7ce691ae 1307@item --fatal-warnings
0fe58ccd
NC
1308@itemx --no-fatal-warnings
1309Treat all warnings as errors. The default behaviour can be restored
1310with the option @option{--no-fatal-warnings}.
7ce691ae 1311
252b5132
RH
1312@kindex --force-exe-suffix
1313@item --force-exe-suffix
1314Make sure that an output file has a .exe suffix.
1315
1316If a successfully built fully linked output file does not have a
1317@code{.exe} or @code{.dll} suffix, this option forces the linker to copy
1318the output file to one of the same name with a @code{.exe} suffix. This
1319option is useful when using unmodified Unix makefiles on a Microsoft
1320Windows host, since some versions of Windows won't run an image unless
1321it ends in a @code{.exe} suffix.
1322
1323@kindex --gc-sections
1324@kindex --no-gc-sections
1325@cindex garbage collection
c17d87de
NC
1326@item --gc-sections
1327@itemx --no-gc-sections
252b5132 1328Enable garbage collection of unused input sections. It is ignored on
ac69cbc6 1329targets that do not support this option. The default behaviour (of not
b3549761
NC
1330performing this garbage collection) can be restored by specifying
1331@samp{--no-gc-sections} on the command line.
252b5132 1332
d5465ba2
AM
1333@samp{--gc-sections} decides which input sections are used by
1334examining symbols and relocations. The section containing the entry
1335symbol and all sections containing symbols undefined on the
1336command-line will be kept, as will sections containing symbols
1337referenced by dynamic objects. Note that when building shared
1338libraries, the linker must assume that any visible symbol is
1339referenced. Once this initial set of sections has been determined,
1340the linker recursively marks as used any section referenced by their
1341relocations. See @samp{--entry} and @samp{--undefined}.
1342
ac69cbc6
TG
1343This option can be set when doing a partial link (enabled with option
1344@samp{-r}). In this case the root of symbols kept must be explicitely
1345specified either by an @samp{--entry} or @samp{--undefined} option or by
1346a @code{ENTRY} command in the linker script.
1347
c17d87de
NC
1348@kindex --print-gc-sections
1349@kindex --no-print-gc-sections
1350@cindex garbage collection
1351@item --print-gc-sections
1352@itemx --no-print-gc-sections
1353List all sections removed by garbage collection. The listing is
1354printed on stderr. This option is only effective if garbage
1355collection has been enabled via the @samp{--gc-sections}) option. The
1356default behaviour (of not listing the sections that are removed) can
1357be restored by specifying @samp{--no-print-gc-sections} on the command
1358line.
1359
252b5132
RH
1360@cindex help
1361@cindex usage
1362@kindex --help
1363@item --help
1364Print a summary of the command-line options on the standard output and exit.
1365
ea20a7da
CC
1366@kindex --target-help
1367@item --target-help
1368Print a summary of all target specific options on the standard output and exit.
1369
2509a395
SL
1370@kindex -Map=@var{mapfile}
1371@item -Map=@var{mapfile}
252b5132 1372Print a link map to the file @var{mapfile}. See the description of the
560e09e9 1373@option{-M} option, above.
252b5132
RH
1374
1375@cindex memory usage
1376@kindex --no-keep-memory
1377@item --no-keep-memory
ff5dcc92
SC
1378@command{ld} normally optimizes for speed over memory usage by caching the
1379symbol tables of input files in memory. This option tells @command{ld} to
252b5132 1380instead optimize for memory usage, by rereading the symbol tables as
ff5dcc92 1381necessary. This may be required if @command{ld} runs out of memory space
252b5132
RH
1382while linking a large executable.
1383
1384@kindex --no-undefined
a1ab1d2a 1385@kindex -z defs
252b5132 1386@item --no-undefined
a1ab1d2a 1387@itemx -z defs
560e09e9
NC
1388Report unresolved symbol references from regular object files. This
1389is done even if the linker is creating a non-symbolic shared library.
1390The switch @option{--[no-]allow-shlib-undefined} controls the
1391behaviour for reporting unresolved references found in shared
ece2d90e 1392libraries being linked in.
252b5132 1393
aa713662
L
1394@kindex --allow-multiple-definition
1395@kindex -z muldefs
1396@item --allow-multiple-definition
1397@itemx -z muldefs
1398Normally when a symbol is defined multiple times, the linker will
1399report a fatal error. These options allow multiple definitions and the
1400first definition will be used.
1401
b79e8c78 1402@kindex --allow-shlib-undefined
ae9a127f 1403@kindex --no-allow-shlib-undefined
b79e8c78 1404@item --allow-shlib-undefined
ae9a127f 1405@itemx --no-allow-shlib-undefined
903249d7 1406Allows or disallows undefined symbols in shared libraries.
560e09e9
NC
1407This switch is similar to @option{--no-undefined} except that it
1408determines the behaviour when the undefined symbols are in a
1409shared library rather than a regular object file. It does not affect
1410how undefined symbols in regular object files are handled.
1411
903249d7
NC
1412The default behaviour is to report errors for any undefined symbols
1413referenced in shared libraries if the linker is being used to create
1414an executable, but to allow them if the linker is being used to create
1415a shared library.
1416
1417The reasons for allowing undefined symbol references in shared
1418libraries specified at link time are that:
1419
1420@itemize @bullet
1421@item
1422A shared library specified at link time may not be the same as the one
1423that is available at load time, so the symbol might actually be
1424resolvable at load time.
1425@item
1426There are some operating systems, eg BeOS and HPPA, where undefined
1427symbols in shared libraries are normal.
1428
1429The BeOS kernel for example patches shared libraries at load time to
1430select whichever function is most appropriate for the current
1431architecture. This is used, for example, to dynamically select an
1432appropriate memset function.
1433@end itemize
b79e8c78 1434
31941635
L
1435@kindex --no-undefined-version
1436@item --no-undefined-version
1437Normally when a symbol has an undefined version, the linker will ignore
1438it. This option disallows symbols with undefined version and a fatal error
1439will be issued instead.
1440
3e3b46e5
PB
1441@kindex --default-symver
1442@item --default-symver
1443Create and use a default symbol version (the soname) for unversioned
fc0e6df6
PB
1444exported symbols.
1445
1446@kindex --default-imported-symver
1447@item --default-imported-symver
1448Create and use a default symbol version (the soname) for unversioned
1449imported symbols.
3e3b46e5 1450
252b5132
RH
1451@kindex --no-warn-mismatch
1452@item --no-warn-mismatch
ff5dcc92 1453Normally @command{ld} will give an error if you try to link together input
252b5132
RH
1454files that are mismatched for some reason, perhaps because they have
1455been compiled for different processors or for different endiannesses.
ff5dcc92 1456This option tells @command{ld} that it should silently permit such possible
252b5132
RH
1457errors. This option should only be used with care, in cases when you
1458have taken some special action that ensures that the linker errors are
1459inappropriate.
1460
fe7929ce
AM
1461@kindex --no-warn-search-mismatch
1462@item --no-warn-search-mismatch
1463Normally @command{ld} will give a warning if it finds an incompatible
1464library during a library search. This option silences the warning.
1465
252b5132
RH
1466@kindex --no-whole-archive
1467@item --no-whole-archive
ff5dcc92 1468Turn off the effect of the @option{--whole-archive} option for subsequent
252b5132
RH
1469archive files.
1470
1471@cindex output file after errors
1472@kindex --noinhibit-exec
1473@item --noinhibit-exec
1474Retain the executable output file whenever it is still usable.
1475Normally, the linker will not produce an output file if it encounters
1476errors during the link process; it exits without writing an output file
1477when it issues any error whatsoever.
1478
0a9c1c8e
CD
1479@kindex -nostdlib
1480@item -nostdlib
1481Only search library directories explicitly specified on the
1482command line. Library directories specified in linker scripts
1483(including linker scripts specified on the command line) are ignored.
1484
252b5132 1485@ifclear SingleFormat
2509a395
SL
1486@kindex --oformat=@var{output-format}
1487@item --oformat=@var{output-format}
ff5dcc92
SC
1488@command{ld} may be configured to support more than one kind of object
1489file. If your @command{ld} is configured this way, you can use the
252b5132 1490@samp{--oformat} option to specify the binary format for the output
ff5dcc92
SC
1491object file. Even when @command{ld} is configured to support alternative
1492object formats, you don't usually need to specify this, as @command{ld}
252b5132
RH
1493should be configured to produce as a default output format the most
1494usual format on each machine. @var{output-format} is a text string, the
1495name of a particular format supported by the BFD libraries. (You can
1496list the available binary formats with @samp{objdump -i}.) The script
1497command @code{OUTPUT_FORMAT} can also specify the output format, but
1498this option overrides it. @xref{BFD}.
1499@end ifclear
1500
36af4a4e
JJ
1501@kindex -pie
1502@kindex --pic-executable
1503@item -pie
1504@itemx --pic-executable
1505@cindex position independent executables
1506Create a position independent executable. This is currently only supported on
1507ELF platforms. Position independent executables are similar to shared
1508libraries in that they are relocated by the dynamic linker to the virtual
7e7d5768 1509address the OS chooses for them (which can vary between invocations). Like
36af4a4e
JJ
1510normal dynamically linked executables they can be executed and symbols
1511defined in the executable cannot be overridden by shared libraries.
1512
252b5132
RH
1513@kindex -qmagic
1514@item -qmagic
1515This option is ignored for Linux compatibility.
1516
1517@kindex -Qy
1518@item -Qy
1519This option is ignored for SVR4 compatibility.
1520
1521@kindex --relax
1522@cindex synthesizing linker
1523@cindex relaxing addressing modes
1524@item --relax
a1ab1d2a 1525An option with machine dependent effects.
252b5132
RH
1526@ifset GENERIC
1527This option is only supported on a few targets.
1528@end ifset
1529@ifset H8300
ff5dcc92 1530@xref{H8/300,,@command{ld} and the H8/300}.
252b5132
RH
1531@end ifset
1532@ifset I960
ff5dcc92 1533@xref{i960,, @command{ld} and the Intel 960 family}.
252b5132 1534@end ifset
e0001a05
NC
1535@ifset XTENSA
1536@xref{Xtensa,, @command{ld} and Xtensa Processors}.
1537@end ifset
93fd0973
SC
1538@ifset M68HC11
1539@xref{M68HC11/68HC12,,@command{ld} and the 68HC11 and 68HC12}.
1540@end ifset
2a60a7a8
AM
1541@ifset POWERPC
1542@xref{PowerPC ELF32,,@command{ld} and PowerPC 32-bit ELF Support}.
1543@end ifset
252b5132
RH
1544
1545On some platforms, the @samp{--relax} option performs global
1546optimizations that become possible when the linker resolves addressing
1547in the program, such as relaxing address modes and synthesizing new
1548instructions in the output object file.
1549
1550On some platforms these link time global optimizations may make symbolic
1551debugging of the resulting executable impossible.
1552@ifset GENERIC
1553This is known to be
1554the case for the Matsushita MN10200 and MN10300 family of processors.
1555@end ifset
1556
1557@ifset GENERIC
1558On platforms where this is not supported, @samp{--relax} is accepted,
1559but ignored.
1560@end ifset
1561
1562@cindex retaining specified symbols
1563@cindex stripping all but some symbols
1564@cindex symbols, retaining selectively
2509a395
SL
1565@kindex --retain-symbols-file=@var{filename}
1566@item --retain-symbols-file=@var{filename}
252b5132
RH
1567Retain @emph{only} the symbols listed in the file @var{filename},
1568discarding all others. @var{filename} is simply a flat file, with one
1569symbol name per line. This option is especially useful in environments
1570@ifset GENERIC
1571(such as VxWorks)
1572@end ifset
1573where a large global symbol table is accumulated gradually, to conserve
1574run-time memory.
1575
1576@samp{--retain-symbols-file} does @emph{not} discard undefined symbols,
1577or symbols needed for relocations.
1578
1579You may only specify @samp{--retain-symbols-file} once in the command
1580line. It overrides @samp{-s} and @samp{-S}.
1581
1582@ifset GENERIC
2509a395 1583@item -rpath=@var{dir}
252b5132 1584@cindex runtime library search path
2509a395 1585@kindex -rpath=@var{dir}
252b5132 1586Add a directory to the runtime library search path. This is used when
ff5dcc92 1587linking an ELF executable with shared objects. All @option{-rpath}
252b5132 1588arguments are concatenated and passed to the runtime linker, which uses
ff5dcc92 1589them to locate shared objects at runtime. The @option{-rpath} option is
252b5132
RH
1590also used when locating shared objects which are needed by shared
1591objects explicitly included in the link; see the description of the
ff5dcc92 1592@option{-rpath-link} option. If @option{-rpath} is not used when linking an
252b5132
RH
1593ELF executable, the contents of the environment variable
1594@code{LD_RUN_PATH} will be used if it is defined.
1595
ff5dcc92 1596The @option{-rpath} option may also be used on SunOS. By default, on
252b5132 1597SunOS, the linker will form a runtime search patch out of all the
ff5dcc92
SC
1598@option{-L} options it is given. If a @option{-rpath} option is used, the
1599runtime search path will be formed exclusively using the @option{-rpath}
1600options, ignoring the @option{-L} options. This can be useful when using
1601gcc, which adds many @option{-L} options which may be on NFS mounted
b45619c0 1602file systems.
252b5132 1603
ff5dcc92 1604For compatibility with other ELF linkers, if the @option{-R} option is
252b5132 1605followed by a directory name, rather than a file name, it is treated as
ff5dcc92 1606the @option{-rpath} option.
252b5132
RH
1607@end ifset
1608
1609@ifset GENERIC
1610@cindex link-time runtime library search path
2509a395
SL
1611@kindex -rpath-link=@var{dir}
1612@item -rpath-link=@var{dir}
252b5132
RH
1613When using ELF or SunOS, one shared library may require another. This
1614happens when an @code{ld -shared} link includes a shared library as one
1615of the input files.
1616
1617When the linker encounters such a dependency when doing a non-shared,
1618non-relocatable link, it will automatically try to locate the required
1619shared library and include it in the link, if it is not included
ff5dcc92 1620explicitly. In such a case, the @option{-rpath-link} option
252b5132 1621specifies the first set of directories to search. The
ff5dcc92 1622@option{-rpath-link} option may specify a sequence of directory names
252b5132
RH
1623either by specifying a list of names separated by colons, or by
1624appearing multiple times.
1625
28c309a2
NC
1626This option should be used with caution as it overrides the search path
1627that may have been hard compiled into a shared library. In such a case it
1628is possible to use unintentionally a different search path than the
1629runtime linker would do.
1630
252b5132 1631The linker uses the following search paths to locate required shared
ece2d90e 1632libraries:
252b5132
RH
1633@enumerate
1634@item
ff5dcc92 1635Any directories specified by @option{-rpath-link} options.
252b5132 1636@item
ff5dcc92
SC
1637Any directories specified by @option{-rpath} options. The difference
1638between @option{-rpath} and @option{-rpath-link} is that directories
1639specified by @option{-rpath} options are included in the executable and
1640used at runtime, whereas the @option{-rpath-link} option is only effective
ece2d90e
NC
1641at link time. Searching @option{-rpath} in this way is only supported
1642by native linkers and cross linkers which have been configured with
1643the @option{--with-sysroot} option.
252b5132 1644@item
e2a83dd0
NC
1645On an ELF system, for native linkers, if the @option{-rpath} and
1646@option{-rpath-link} options were not used, search the contents of the
1647environment variable @code{LD_RUN_PATH}.
252b5132 1648@item
ff5dcc92
SC
1649On SunOS, if the @option{-rpath} option was not used, search any
1650directories specified using @option{-L} options.
252b5132 1651@item
e2a83dd0
NC
1652For a native linker, the search the contents of the environment
1653variable @code{LD_LIBRARY_PATH}.
252b5132 1654@item
ec4eb78a
L
1655For a native ELF linker, the directories in @code{DT_RUNPATH} or
1656@code{DT_RPATH} of a shared library are searched for shared
1657libraries needed by it. The @code{DT_RPATH} entries are ignored if
1658@code{DT_RUNPATH} entries exist.
1659@item
252b5132
RH
1660The default directories, normally @file{/lib} and @file{/usr/lib}.
1661@item
1662For a native linker on an ELF system, if the file @file{/etc/ld.so.conf}
1663exists, the list of directories found in that file.
1664@end enumerate
1665
1666If the required shared library is not found, the linker will issue a
1667warning and continue with the link.
1668@end ifset
1669
1670@kindex -shared
1671@kindex -Bshareable
1672@item -shared
1673@itemx -Bshareable
1674@cindex shared libraries
1675Create a shared library. This is currently only supported on ELF, XCOFF
1676and SunOS platforms. On SunOS, the linker will automatically create a
ff5dcc92 1677shared library if the @option{-e} option is not used and there are
252b5132
RH
1678undefined symbols in the link.
1679
252b5132 1680@kindex --sort-common
2509a395
SL
1681@item --sort-common
1682@itemx --sort-common=ascending
1683@itemx --sort-common=descending
de7dd2bd
NC
1684This option tells @command{ld} to sort the common symbols by alignment in
1685ascending or descending order when it places them in the appropriate output
1686sections. The symbol alignments considered are sixteen-byte or larger,
1687eight-byte, four-byte, two-byte, and one-byte. This is to prevent gaps
1688between symbols due to alignment constraints. If no sorting order is
1689specified, then descending order is assumed.
252b5132 1690
2509a395
SL
1691@kindex --sort-section=name
1692@item --sort-section=name
bcaa7b3e
L
1693This option will apply @code{SORT_BY_NAME} to all wildcard section
1694patterns in the linker script.
1695
2509a395
SL
1696@kindex --sort-section=alignment
1697@item --sort-section=alignment
bcaa7b3e
L
1698This option will apply @code{SORT_BY_ALIGNMENT} to all wildcard section
1699patterns in the linker script.
1700
252b5132 1701@kindex --split-by-file
2509a395 1702@item --split-by-file[=@var{size}]
ff5dcc92 1703Similar to @option{--split-by-reloc} but creates a new output section for
a854a4a7
AM
1704each input file when @var{size} is reached. @var{size} defaults to a
1705size of 1 if not given.
252b5132
RH
1706
1707@kindex --split-by-reloc
2509a395 1708@item --split-by-reloc[=@var{count}]
a854a4a7 1709Tries to creates extra sections in the output file so that no single
252b5132 1710output section in the file contains more than @var{count} relocations.
a854a4a7 1711This is useful when generating huge relocatable files for downloading into
252b5132
RH
1712certain real time kernels with the COFF object file format; since COFF
1713cannot represent more than 65535 relocations in a single section. Note
1714that this will fail to work with object file formats which do not
1715support arbitrary sections. The linker will not split up individual
1716input sections for redistribution, so if a single input section contains
1717more than @var{count} relocations one output section will contain that
a854a4a7 1718many relocations. @var{count} defaults to a value of 32768.
252b5132
RH
1719
1720@kindex --stats
1721@item --stats
1722Compute and display statistics about the operation of the linker, such
1723as execution time and memory usage.
1724
2509a395 1725@kindex --sysroot=@var{directory}
e2243057
RS
1726@item --sysroot=@var{directory}
1727Use @var{directory} as the location of the sysroot, overriding the
1728configure-time default. This option is only supported by linkers
1729that were configured using @option{--with-sysroot}.
1730
252b5132
RH
1731@kindex --traditional-format
1732@cindex traditional format
1733@item --traditional-format
ff5dcc92
SC
1734For some targets, the output of @command{ld} is different in some ways from
1735the output of some existing linker. This switch requests @command{ld} to
252b5132
RH
1736use the traditional format instead.
1737
1738@cindex dbx
ff5dcc92 1739For example, on SunOS, @command{ld} combines duplicate entries in the
252b5132
RH
1740symbol string table. This can reduce the size of an output file with
1741full debugging information by over 30 percent. Unfortunately, the SunOS
1742@code{dbx} program can not read the resulting program (@code{gdb} has no
ff5dcc92 1743trouble). The @samp{--traditional-format} switch tells @command{ld} to not
252b5132
RH
1744combine duplicate entries.
1745
2509a395
SL
1746@kindex --section-start=@var{sectionname}=@var{org}
1747@item --section-start=@var{sectionname}=@var{org}
176355da
NC
1748Locate a section in the output file at the absolute
1749address given by @var{org}. You may use this option as many
1750times as necessary to locate multiple sections in the command
1751line.
1752@var{org} must be a single hexadecimal integer;
1753for compatibility with other linkers, you may omit the leading
1754@samp{0x} usually associated with hexadecimal values. @emph{Note:} there
1755should be no white space between @var{sectionname}, the equals
1756sign (``@key{=}''), and @var{org}.
1757
2509a395
SL
1758@kindex -Tbss=@var{org}
1759@kindex -Tdata=@var{org}
1760@kindex -Ttext=@var{org}
252b5132 1761@cindex segment origins, cmd line
2509a395
SL
1762@item -Tbss=@var{org}
1763@itemx -Tdata=@var{org}
1764@itemx -Ttext=@var{org}
1765Same as @option{--section-start}, with @code{.bss}, @code{.data} or
a6e02871 1766@code{.text} as the @var{sectionname}.
252b5132 1767
2509a395
SL
1768@kindex -Ttext-segment=@var{org}
1769@item -Ttext-segment=@var{org}
258795f5
L
1770@cindex text segment origin, cmd line
1771When creating an ELF executable or shared object, it will set the address
1772of the first byte of the text segment.
1773
560e09e9
NC
1774@kindex --unresolved-symbols
1775@item --unresolved-symbols=@var{method}
1776Determine how to handle unresolved symbols. There are four possible
1777values for @samp{method}:
1778
1779@table @samp
1780@item ignore-all
da8bce14 1781Do not report any unresolved symbols.
560e09e9
NC
1782
1783@item report-all
da8bce14 1784Report all unresolved symbols. This is the default.
560e09e9
NC
1785
1786@item ignore-in-object-files
1787Report unresolved symbols that are contained in shared libraries, but
1788ignore them if they come from regular object files.
1789
1790@item ignore-in-shared-libs
1791Report unresolved symbols that come from regular object files, but
1792ignore them if they come from shared libraries. This can be useful
1793when creating a dynamic binary and it is known that all the shared
1794libraries that it should be referencing are included on the linker's
1795command line.
1796@end table
1797
1798The behaviour for shared libraries on their own can also be controlled
1799by the @option{--[no-]allow-shlib-undefined} option.
1800
1801Normally the linker will generate an error message for each reported
1802unresolved symbol but the option @option{--warn-unresolved-symbols}
1803can change this to a warning.
1804
252b5132
RH
1805@kindex --verbose
1806@cindex verbose
1807@item --dll-verbose
308b1ffd 1808@itemx --verbose
ff5dcc92 1809Display the version number for @command{ld} and list the linker emulations
252b5132 1810supported. Display which input files can and cannot be opened. Display
b9a8de1e 1811the linker script being used by the linker.
252b5132
RH
1812
1813@kindex --version-script=@var{version-scriptfile}
1814@cindex version script, symbol versions
2509a395 1815@item --version-script=@var{version-scriptfile}
252b5132
RH
1816Specify the name of a version script to the linker. This is typically
1817used when creating shared libraries to specify additional information
36f63dca 1818about the version hierarchy for the library being created. This option
252b5132
RH
1819is only meaningful on ELF platforms which support shared libraries.
1820@xref{VERSION}.
1821
7ce691ae 1822@kindex --warn-common
252b5132
RH
1823@cindex warnings, on combining symbols
1824@cindex combining symbols, warnings on
1825@item --warn-common
1826Warn when a common symbol is combined with another common symbol or with
560e09e9 1827a symbol definition. Unix linkers allow this somewhat sloppy practise,
252b5132
RH
1828but linkers on some other operating systems do not. This option allows
1829you to find potential problems from combining global symbols.
560e09e9 1830Unfortunately, some C libraries use this practise, so you may get some
252b5132
RH
1831warnings about symbols in the libraries as well as in your programs.
1832
1833There are three kinds of global symbols, illustrated here by C examples:
1834
1835@table @samp
1836@item int i = 1;
1837A definition, which goes in the initialized data section of the output
1838file.
1839
1840@item extern int i;
1841An undefined reference, which does not allocate space.
1842There must be either a definition or a common symbol for the
1843variable somewhere.
1844
1845@item int i;
1846A common symbol. If there are only (one or more) common symbols for a
1847variable, it goes in the uninitialized data area of the output file.
1848The linker merges multiple common symbols for the same variable into a
1849single symbol. If they are of different sizes, it picks the largest
1850size. The linker turns a common symbol into a declaration, if there is
1851a definition of the same variable.
1852@end table
1853
1854The @samp{--warn-common} option can produce five kinds of warnings.
1855Each warning consists of a pair of lines: the first describes the symbol
1856just encountered, and the second describes the previous symbol
1857encountered with the same name. One or both of the two symbols will be
1858a common symbol.
1859
1860@enumerate
1861@item
1862Turning a common symbol into a reference, because there is already a
1863definition for the symbol.
1864@smallexample
1865@var{file}(@var{section}): warning: common of `@var{symbol}'
1866 overridden by definition
1867@var{file}(@var{section}): warning: defined here
1868@end smallexample
1869
1870@item
1871Turning a common symbol into a reference, because a later definition for
1872the symbol is encountered. This is the same as the previous case,
1873except that the symbols are encountered in a different order.
1874@smallexample
1875@var{file}(@var{section}): warning: definition of `@var{symbol}'
1876 overriding common
1877@var{file}(@var{section}): warning: common is here
1878@end smallexample
1879
1880@item
1881Merging a common symbol with a previous same-sized common symbol.
1882@smallexample
1883@var{file}(@var{section}): warning: multiple common
1884 of `@var{symbol}'
1885@var{file}(@var{section}): warning: previous common is here
1886@end smallexample
1887
1888@item
1889Merging a common symbol with a previous larger common symbol.
1890@smallexample
1891@var{file}(@var{section}): warning: common of `@var{symbol}'
1892 overridden by larger common
1893@var{file}(@var{section}): warning: larger common is here
1894@end smallexample
1895
1896@item
1897Merging a common symbol with a previous smaller common symbol. This is
1898the same as the previous case, except that the symbols are
1899encountered in a different order.
1900@smallexample
1901@var{file}(@var{section}): warning: common of `@var{symbol}'
1902 overriding smaller common
1903@var{file}(@var{section}): warning: smaller common is here
1904@end smallexample
1905@end enumerate
1906
1907@kindex --warn-constructors
1908@item --warn-constructors
1909Warn if any global constructors are used. This is only useful for a few
1910object file formats. For formats like COFF or ELF, the linker can not
1911detect the use of global constructors.
1912
1913@kindex --warn-multiple-gp
1914@item --warn-multiple-gp
1915Warn if multiple global pointer values are required in the output file.
1916This is only meaningful for certain processors, such as the Alpha.
1917Specifically, some processors put large-valued constants in a special
1918section. A special register (the global pointer) points into the middle
1919of this section, so that constants can be loaded efficiently via a
1920base-register relative addressing mode. Since the offset in
1921base-register relative mode is fixed and relatively small (e.g., 16
1922bits), this limits the maximum size of the constant pool. Thus, in
1923large programs, it is often necessary to use multiple global pointer
1924values in order to be able to address all possible constants. This
1925option causes a warning to be issued whenever this case occurs.
1926
1927@kindex --warn-once
1928@cindex warnings, on undefined symbols
1929@cindex undefined symbols, warnings on
1930@item --warn-once
1931Only warn once for each undefined symbol, rather than once per module
1932which refers to it.
1933
1934@kindex --warn-section-align
1935@cindex warnings, on section alignment
1936@cindex section alignment, warnings on
1937@item --warn-section-align
1938Warn if the address of an output section is changed because of
1939alignment. Typically, the alignment will be set by an input section.
1940The address will only be changed if it not explicitly specified; that
1941is, if the @code{SECTIONS} command does not specify a start address for
1942the section (@pxref{SECTIONS}).
1943
8fdd7217
NC
1944@kindex --warn-shared-textrel
1945@item --warn-shared-textrel
ece2d90e 1946Warn if the linker adds a DT_TEXTREL to a shared object.
8fdd7217 1947
a0c402a5
L
1948@kindex --warn-alternate-em
1949@item --warn-alternate-em
1950Warn if an object has alternate ELF machine code.
1951
560e09e9
NC
1952@kindex --warn-unresolved-symbols
1953@item --warn-unresolved-symbols
1954If the linker is going to report an unresolved symbol (see the option
1955@option{--unresolved-symbols}) it will normally generate an error.
1956This option makes it generate a warning instead.
1957
1958@kindex --error-unresolved-symbols
1959@item --error-unresolved-symbols
1960This restores the linker's default behaviour of generating errors when
1961it is reporting unresolved symbols.
1962
252b5132
RH
1963@kindex --whole-archive
1964@cindex including an entire archive
1965@item --whole-archive
1966For each archive mentioned on the command line after the
ff5dcc92 1967@option{--whole-archive} option, include every object file in the archive
252b5132
RH
1968in the link, rather than searching the archive for the required object
1969files. This is normally used to turn an archive file into a shared
1970library, forcing every object to be included in the resulting shared
1971library. This option may be used more than once.
1972
7ec229ce 1973Two notes when using this option from gcc: First, gcc doesn't know
ff5dcc92
SC
1974about this option, so you have to use @option{-Wl,-whole-archive}.
1975Second, don't forget to use @option{-Wl,-no-whole-archive} after your
7ec229ce
DD
1976list of archives, because gcc will add its own list of archives to
1977your link and you may not want this flag to affect those as well.
1978
2509a395
SL
1979@kindex --wrap=@var{symbol}
1980@item --wrap=@var{symbol}
252b5132
RH
1981Use a wrapper function for @var{symbol}. Any undefined reference to
1982@var{symbol} will be resolved to @code{__wrap_@var{symbol}}. Any
1983undefined reference to @code{__real_@var{symbol}} will be resolved to
1984@var{symbol}.
1985
1986This can be used to provide a wrapper for a system function. The
1987wrapper function should be called @code{__wrap_@var{symbol}}. If it
1988wishes to call the system function, it should call
1989@code{__real_@var{symbol}}.
1990
1991Here is a trivial example:
1992
1993@smallexample
1994void *
cc2f008e 1995__wrap_malloc (size_t c)
252b5132 1996@{
cc2f008e 1997 printf ("malloc called with %zu\n", c);
252b5132
RH
1998 return __real_malloc (c);
1999@}
2000@end smallexample
2001
ff5dcc92 2002If you link other code with this file using @option{--wrap malloc}, then
252b5132
RH
2003all calls to @code{malloc} will call the function @code{__wrap_malloc}
2004instead. The call to @code{__real_malloc} in @code{__wrap_malloc} will
2005call the real @code{malloc} function.
2006
2007You may wish to provide a @code{__real_malloc} function as well, so that
ff5dcc92 2008links without the @option{--wrap} option will succeed. If you do this,
252b5132
RH
2009you should not put the definition of @code{__real_malloc} in the same
2010file as @code{__wrap_malloc}; if you do, the assembler may resolve the
2011call before the linker has a chance to wrap it to @code{malloc}.
2012
6aa29e7b
JJ
2013@kindex --eh-frame-hdr
2014@item --eh-frame-hdr
2015Request creation of @code{.eh_frame_hdr} section and ELF
2016@code{PT_GNU_EH_FRAME} segment header.
2017
6c1439be
L
2018@kindex --enable-new-dtags
2019@kindex --disable-new-dtags
2020@item --enable-new-dtags
2021@itemx --disable-new-dtags
2022This linker can create the new dynamic tags in ELF. But the older ELF
2023systems may not understand them. If you specify
ff5dcc92
SC
2024@option{--enable-new-dtags}, the dynamic tags will be created as needed.
2025If you specify @option{--disable-new-dtags}, no new dynamic tags will be
6c1439be
L
2026created. By default, the new dynamic tags are not created. Note that
2027those options are only available for ELF systems.
2028
2d643429 2029@kindex --hash-size=@var{number}
e185dd51 2030@item --hash-size=@var{number}
2d643429
NC
2031Set the default size of the linker's hash tables to a prime number
2032close to @var{number}. Increasing this value can reduce the length of
2033time it takes the linker to perform its tasks, at the expense of
2034increasing the linker's memory requirements. Similarly reducing this
2035value can reduce the memory requirements at the expense of speed.
2036
fdc90cb4
JJ
2037@kindex --hash-style=@var{style}
2038@item --hash-style=@var{style}
2039Set the type of linker's hash table(s). @var{style} can be either
2040@code{sysv} for classic ELF @code{.hash} section, @code{gnu} for
2041new style GNU @code{.gnu.hash} section or @code{both} for both
2042the classic ELF @code{.hash} and new style GNU @code{.gnu.hash}
2043hash tables. The default is @code{sysv}.
2044
35835446
JR
2045@kindex --reduce-memory-overheads
2046@item --reduce-memory-overheads
2047This option reduces memory requirements at ld runtime, at the expense of
f2a8f148 2048linking speed. This was introduced to select the old O(n^2) algorithm
35835446 2049for link map file generation, rather than the new O(n) algorithm which uses
2d643429
NC
2050about 40% more memory for symbol storage.
2051
4f9c04f7 2052Another effect of the switch is to set the default hash table size to
2d643429 20531021, which again saves memory at the cost of lengthening the linker's
a85785bc 2054run time. This is not done however if the @option{--hash-size} switch
2d643429
NC
2055has been used.
2056
2057The @option{--reduce-memory-overheads} switch may be also be used to
2058enable other tradeoffs in future versions of the linker.
35835446 2059
c0065db7
RM
2060@kindex --build-id
2061@kindex --build-id=@var{style}
2062@item --build-id
2063@itemx --build-id=@var{style}
2064Request creation of @code{.note.gnu.build-id} ELF note section.
2065The contents of the note are unique bits identifying this linked
2066file. @var{style} can be @code{uuid} to use 128 random bits,
24382dca
RM
2067@code{sha1} to use a 160-bit @sc{SHA1} hash on the normative
2068parts of the output contents, @code{md5} to use a 128-bit
2069@sc{MD5} hash on the normative parts of the output contents, or
2070@code{0x@var{hexstring}} to use a chosen bit string specified as
2071an even number of hexadecimal digits (@code{-} and @code{:}
2072characters between digit pairs are ignored). If @var{style} is
2073omitted, @code{sha1} is used.
2074
2075The @code{md5} and @code{sha1} styles produces an identifier
2076that is always the same in an identical output file, but will be
2077unique among all nonidentical output files. It is not intended
2078to be compared as a checksum for the file's contents. A linked
2079file may be changed later by other tools, but the build ID bit
2080string identifying the original linked file does not change.
c0065db7
RM
2081
2082Passing @code{none} for @var{style} disables the setting from any
2083@code{--build-id} options earlier on the command line.
252b5132
RH
2084@end table
2085
0285c67d
NC
2086@c man end
2087
36f63dca 2088@subsection Options Specific to i386 PE Targets
252b5132 2089
0285c67d
NC
2090@c man begin OPTIONS
2091
ff5dcc92 2092The i386 PE linker supports the @option{-shared} option, which causes
252b5132
RH
2093the output to be a dynamically linked library (DLL) instead of a
2094normal executable. You should name the output @code{*.dll} when you
2095use this option. In addition, the linker fully supports the standard
2096@code{*.def} files, which may be specified on the linker command line
2097like an object file (in fact, it should precede archives it exports
2098symbols from, to ensure that they get linked in, just like a normal
2099object file).
2100
2101In addition to the options common to all targets, the i386 PE linker
2102support additional command line options that are specific to the i386
2103PE target. Options that take values may be separated from their
2104values by either a space or an equals sign.
2105
ff5dcc92 2106@table @gcctabopt
252b5132
RH
2107
2108@kindex --add-stdcall-alias
2109@item --add-stdcall-alias
2110If given, symbols with a stdcall suffix (@@@var{nn}) will be exported
2111as-is and also with the suffix stripped.
bb10df36 2112[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2113
2114@kindex --base-file
2115@item --base-file @var{file}
2116Use @var{file} as the name of a file in which to save the base
2117addresses of all the relocations needed for generating DLLs with
2118@file{dlltool}.
bb10df36 2119[This is an i386 PE specific option]
252b5132
RH
2120
2121@kindex --dll
2122@item --dll
2123Create a DLL instead of a regular executable. You may also use
ff5dcc92 2124@option{-shared} or specify a @code{LIBRARY} in a given @code{.def}
252b5132 2125file.
bb10df36 2126[This option is specific to the i386 PE targeted port of the linker]
252b5132 2127
88183869
DK
2128@kindex --enable-long-section-names
2129@kindex --disable-long-section-names
2130@item --enable-long-section-names
2131@itemx --disable-long-section-names
2132The PE variants of the Coff object format add an extension that permits
2133the use of section names longer than eight characters, the normal limit
2134for Coff. By default, these names are only allowed in object files, as
2135fully-linked executable images do not carry the Coff string table required
2136to support the longer names. As a GNU extension, it is possible to
2137allow their use in executable images as well, or to (probably pointlessly!)
2138disallow it in object files, by using these two options. Executable images
2139generated with these long section names are slightly non-standard, carrying
2140as they do a string table, and may generate confusing output when examined
3efd345c
DK
2141with non-GNU PE-aware tools, such as file viewers and dumpers. However,
2142GDB relies on the use of PE long section names to find Dwarf-2 debug
2143information sections in an executable image at runtime, and so if neither
2144option is specified on the command-line, @command{ld} will enable long
2145section names, overriding the default and technically correct behaviour,
2146when it finds the presence of debug information while linking an executable
2147image and not stripping symbols.
88183869
DK
2148[This option is valid for all PE targeted ports of the linker]
2149
252b5132
RH
2150@kindex --enable-stdcall-fixup
2151@kindex --disable-stdcall-fixup
2152@item --enable-stdcall-fixup
2153@itemx --disable-stdcall-fixup
2154If the link finds a symbol that it cannot resolve, it will attempt to
36f63dca 2155do ``fuzzy linking'' by looking for another defined symbol that differs
252b5132
RH
2156only in the format of the symbol name (cdecl vs stdcall) and will
2157resolve that symbol by linking to the match. For example, the
2158undefined symbol @code{_foo} might be linked to the function
2159@code{_foo@@12}, or the undefined symbol @code{_bar@@16} might be linked
2160to the function @code{_bar}. When the linker does this, it prints a
2161warning, since it normally should have failed to link, but sometimes
2162import libraries generated from third-party dlls may need this feature
ff5dcc92 2163to be usable. If you specify @option{--enable-stdcall-fixup}, this
252b5132 2164feature is fully enabled and warnings are not printed. If you specify
ff5dcc92 2165@option{--disable-stdcall-fixup}, this feature is disabled and such
252b5132 2166mismatches are considered to be errors.
bb10df36 2167[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2168
2169@cindex DLLs, creating
2170@kindex --export-all-symbols
2171@item --export-all-symbols
2172If given, all global symbols in the objects used to build a DLL will
2173be exported by the DLL. Note that this is the default if there
2174otherwise wouldn't be any exported symbols. When symbols are
2175explicitly exported via DEF files or implicitly exported via function
2176attributes, the default is to not export anything else unless this
2177option is given. Note that the symbols @code{DllMain@@12},
ece2d90e 2178@code{DllEntryPoint@@0}, @code{DllMainCRTStartup@@12}, and
b044cda1 2179@code{impure_ptr} will not be automatically
ece2d90e
NC
2180exported. Also, symbols imported from other DLLs will not be
2181re-exported, nor will symbols specifying the DLL's internal layout
2182such as those beginning with @code{_head_} or ending with
2183@code{_iname}. In addition, no symbols from @code{libgcc},
b044cda1
CW
2184@code{libstd++}, @code{libmingw32}, or @code{crtX.o} will be exported.
2185Symbols whose names begin with @code{__rtti_} or @code{__builtin_} will
2186not be exported, to help with C++ DLLs. Finally, there is an
ece2d90e 2187extensive list of cygwin-private symbols that are not exported
b044cda1 2188(obviously, this applies on when building DLLs for cygwin targets).
ece2d90e 2189These cygwin-excludes are: @code{_cygwin_dll_entry@@12},
b044cda1 2190@code{_cygwin_crt0_common@@8}, @code{_cygwin_noncygwin_dll_entry@@12},
ece2d90e 2191@code{_fmode}, @code{_impure_ptr}, @code{cygwin_attach_dll},
b044cda1 2192@code{cygwin_premain0}, @code{cygwin_premain1}, @code{cygwin_premain2},
ece2d90e 2193@code{cygwin_premain3}, and @code{environ}.
bb10df36 2194[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2195
2196@kindex --exclude-symbols
1d0a3c9c 2197@item --exclude-symbols @var{symbol},@var{symbol},...
252b5132
RH
2198Specifies a list of symbols which should not be automatically
2199exported. The symbol names may be delimited by commas or colons.
bb10df36 2200[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2201
2202@kindex --file-alignment
2203@item --file-alignment
2204Specify the file alignment. Sections in the file will always begin at
2205file offsets which are multiples of this number. This defaults to
2206512.
bb10df36 2207[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2208
2209@cindex heap size
2210@kindex --heap
2211@item --heap @var{reserve}
2212@itemx --heap @var{reserve},@var{commit}
a00b50c5
DS
2213Specify the number of bytes of memory to reserve (and optionally commit)
2214to be used as heap for this program. The default is 1Mb reserved, 4K
252b5132 2215committed.
bb10df36 2216[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2217
2218@cindex image base
2219@kindex --image-base
2220@item --image-base @var{value}
2221Use @var{value} as the base address of your program or dll. This is
2222the lowest memory location that will be used when your program or dll
2223is loaded. To reduce the need to relocate and improve performance of
2224your dlls, each should have a unique base address and not overlap any
2225other dlls. The default is 0x400000 for executables, and 0x10000000
2226for dlls.
bb10df36 2227[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2228
2229@kindex --kill-at
2230@item --kill-at
2231If given, the stdcall suffixes (@@@var{nn}) will be stripped from
2232symbols before they are exported.
bb10df36 2233[This option is specific to the i386 PE targeted port of the linker]
252b5132 2234
26d2d8a2
BF
2235@kindex --large-address-aware
2236@item --large-address-aware
b45619c0 2237If given, the appropriate bit in the ``Characteristics'' field of the COFF
26d2d8a2 2238header is set to indicate that this executable supports virtual addresses
b45619c0 2239greater than 2 gigabytes. This should be used in conjunction with the /3GB
26d2d8a2
BF
2240or /USERVA=@var{value} megabytes switch in the ``[operating systems]''
2241section of the BOOT.INI. Otherwise, this bit has no effect.
2242[This option is specific to PE targeted ports of the linker]
2243
252b5132
RH
2244@kindex --major-image-version
2245@item --major-image-version @var{value}
36f63dca 2246Sets the major number of the ``image version''. Defaults to 1.
bb10df36 2247[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2248
2249@kindex --major-os-version
2250@item --major-os-version @var{value}
36f63dca 2251Sets the major number of the ``os version''. Defaults to 4.
bb10df36 2252[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2253
2254@kindex --major-subsystem-version
2255@item --major-subsystem-version @var{value}
36f63dca 2256Sets the major number of the ``subsystem version''. Defaults to 4.
bb10df36 2257[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2258
2259@kindex --minor-image-version
2260@item --minor-image-version @var{value}
36f63dca 2261Sets the minor number of the ``image version''. Defaults to 0.
bb10df36 2262[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2263
2264@kindex --minor-os-version
2265@item --minor-os-version @var{value}
36f63dca 2266Sets the minor number of the ``os version''. Defaults to 0.
bb10df36 2267[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2268
2269@kindex --minor-subsystem-version
2270@item --minor-subsystem-version @var{value}
36f63dca 2271Sets the minor number of the ``subsystem version''. Defaults to 0.
bb10df36 2272[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2273
2274@cindex DEF files, creating
2275@cindex DLLs, creating
2276@kindex --output-def
2277@item --output-def @var{file}
2278The linker will create the file @var{file} which will contain a DEF
2279file corresponding to the DLL the linker is generating. This DEF file
2280(which should be called @code{*.def}) may be used to create an import
2281library with @code{dlltool} or may be used as a reference to
2282automatically or implicitly exported symbols.
bb10df36 2283[This option is specific to the i386 PE targeted port of the linker]
252b5132 2284
b044cda1
CW
2285@cindex DLLs, creating
2286@kindex --out-implib
2287@item --out-implib @var{file}
2288The linker will create the file @var{file} which will contain an
2289import lib corresponding to the DLL the linker is generating. This
2290import lib (which should be called @code{*.dll.a} or @code{*.a}
560e09e9 2291may be used to link clients against the generated DLL; this behaviour
b044cda1
CW
2292makes it possible to skip a separate @code{dlltool} import library
2293creation step.
bb10df36 2294[This option is specific to the i386 PE targeted port of the linker]
b044cda1
CW
2295
2296@kindex --enable-auto-image-base
2297@item --enable-auto-image-base
2298Automatically choose the image base for DLLs, unless one is specified
2299using the @code{--image-base} argument. By using a hash generated
2300from the dllname to create unique image bases for each DLL, in-memory
2301collisions and relocations which can delay program execution are
2302avoided.
bb10df36 2303[This option is specific to the i386 PE targeted port of the linker]
b044cda1
CW
2304
2305@kindex --disable-auto-image-base
2306@item --disable-auto-image-base
2307Do not automatically generate a unique image base. If there is no
2308user-specified image base (@code{--image-base}) then use the platform
2309default.
bb10df36 2310[This option is specific to the i386 PE targeted port of the linker]
b044cda1
CW
2311
2312@cindex DLLs, linking to
2313@kindex --dll-search-prefix
2314@item --dll-search-prefix @var{string}
489d0400 2315When linking dynamically to a dll without an import library,
ece2d90e 2316search for @code{<string><basename>.dll} in preference to
560e09e9 2317@code{lib<basename>.dll}. This behaviour allows easy distinction
b044cda1
CW
2318between DLLs built for the various "subplatforms": native, cygwin,
2319uwin, pw, etc. For instance, cygwin DLLs typically use
ece2d90e 2320@code{--dll-search-prefix=cyg}.
bb10df36 2321[This option is specific to the i386 PE targeted port of the linker]
b044cda1
CW
2322
2323@kindex --enable-auto-import
2324@item --enable-auto-import
ece2d90e
NC
2325Do sophisticated linking of @code{_symbol} to @code{__imp__symbol} for
2326DATA imports from DLLs, and create the necessary thunking symbols when
4d8907ac
DS
2327building the import libraries with those DATA exports. Note: Use of the
2328'auto-import' extension will cause the text section of the image file
2329to be made writable. This does not conform to the PE-COFF format
2330specification published by Microsoft.
2331
e2a83dd0
NC
2332Note - use of the 'auto-import' extension will also cause read only
2333data which would normally be placed into the .rdata section to be
2334placed into the .data section instead. This is in order to work
2335around a problem with consts that is described here:
2336http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html
2337
4d8907ac
DS
2338Using 'auto-import' generally will 'just work' -- but sometimes you may
2339see this message:
0d888aac 2340
ece2d90e 2341"variable '<var>' can't be auto-imported. Please read the
0d888aac
CW
2342documentation for ld's @code{--enable-auto-import} for details."
2343
ece2d90e
NC
2344This message occurs when some (sub)expression accesses an address
2345ultimately given by the sum of two constants (Win32 import tables only
c0065db7
RM
2346allow one). Instances where this may occur include accesses to member
2347fields of struct variables imported from a DLL, as well as using a
2348constant index into an array variable imported from a DLL. Any
2f8d8971
NC
2349multiword variable (arrays, structs, long long, etc) may trigger
2350this error condition. However, regardless of the exact data type
2351of the offending exported variable, ld will always detect it, issue
2352the warning, and exit.
2353
2354There are several ways to address this difficulty, regardless of the
2355data type of the exported variable:
0d888aac 2356
2fa9fc65
NC
2357One way is to use --enable-runtime-pseudo-reloc switch. This leaves the task
2358of adjusting references in your client code for runtime environment, so
560e09e9 2359this method works only when runtime environment supports this feature.
2fa9fc65 2360
c0065db7
RM
2361A second solution is to force one of the 'constants' to be a variable --
2362that is, unknown and un-optimizable at compile time. For arrays,
2363there are two possibilities: a) make the indexee (the array's address)
0d888aac
CW
2364a variable, or b) make the 'constant' index a variable. Thus:
2365
2366@example
2367extern type extern_array[];
c0065db7 2368extern_array[1] -->
0d888aac
CW
2369 @{ volatile type *t=extern_array; t[1] @}
2370@end example
2371
2372or
2373
2374@example
2375extern type extern_array[];
c0065db7 2376extern_array[1] -->
0d888aac
CW
2377 @{ volatile int t=1; extern_array[t] @}
2378@end example
2379
c0065db7 2380For structs (and most other multiword data types) the only option
2f8d8971 2381is to make the struct itself (or the long long, or the ...) variable:
0d888aac
CW
2382
2383@example
2384extern struct s extern_struct;
c0065db7 2385extern_struct.field -->
0d888aac
CW
2386 @{ volatile struct s *t=&extern_struct; t->field @}
2387@end example
2388
c406afaf
NC
2389or
2390
2391@example
2392extern long long extern_ll;
2393extern_ll -->
2394 @{ volatile long long * local_ll=&extern_ll; *local_ll @}
2395@end example
2396
2fa9fc65 2397A third method of dealing with this difficulty is to abandon
c0065db7 2398'auto-import' for the offending symbol and mark it with
560e09e9 2399@code{__declspec(dllimport)}. However, in practise that
0d888aac 2400requires using compile-time #defines to indicate whether you are
c0065db7
RM
2401building a DLL, building client code that will link to the DLL, or
2402merely building/linking to a static library. In making the choice
2403between the various methods of resolving the 'direct address with
0d888aac
CW
2404constant offset' problem, you should consider typical real-world usage:
2405
2406Original:
2407@example
2408--foo.h
2409extern int arr[];
2410--foo.c
2411#include "foo.h"
2412void main(int argc, char **argv)@{
2413 printf("%d\n",arr[1]);
2414@}
2415@end example
2416
2417Solution 1:
2418@example
2419--foo.h
2420extern int arr[];
2421--foo.c
2422#include "foo.h"
2423void main(int argc, char **argv)@{
2424 /* This workaround is for win32 and cygwin; do not "optimize" */
2425 volatile int *parr = arr;
2426 printf("%d\n",parr[1]);
2427@}
2428@end example
2429
2430Solution 2:
2431@example
2432--foo.h
2433/* Note: auto-export is assumed (no __declspec(dllexport)) */
2434#if (defined(_WIN32) || defined(__CYGWIN__)) && \
2435 !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC))
2436#define FOO_IMPORT __declspec(dllimport)
2437#else
2438#define FOO_IMPORT
2439#endif
2440extern FOO_IMPORT int arr[];
2441--foo.c
2442#include "foo.h"
2443void main(int argc, char **argv)@{
2444 printf("%d\n",arr[1]);
2445@}
2446@end example
2447
c0065db7 2448A fourth way to avoid this problem is to re-code your
0d888aac
CW
2449library to use a functional interface rather than a data interface
2450for the offending variables (e.g. set_foo() and get_foo() accessor
2451functions).
bb10df36 2452[This option is specific to the i386 PE targeted port of the linker]
b044cda1
CW
2453
2454@kindex --disable-auto-import
2455@item --disable-auto-import
c0065db7 2456Do not attempt to do sophisticated linking of @code{_symbol} to
b044cda1 2457@code{__imp__symbol} for DATA imports from DLLs.
bb10df36 2458[This option is specific to the i386 PE targeted port of the linker]
b044cda1 2459
2fa9fc65
NC
2460@kindex --enable-runtime-pseudo-reloc
2461@item --enable-runtime-pseudo-reloc
2462If your code contains expressions described in --enable-auto-import section,
2463that is, DATA imports from DLL with non-zero offset, this switch will create
2464a vector of 'runtime pseudo relocations' which can be used by runtime
c0065db7 2465environment to adjust references to such data in your client code.
bb10df36 2466[This option is specific to the i386 PE targeted port of the linker]
2fa9fc65
NC
2467
2468@kindex --disable-runtime-pseudo-reloc
2469@item --disable-runtime-pseudo-reloc
2470Do not create pseudo relocations for non-zero offset DATA imports from
2471DLLs. This is the default.
bb10df36 2472[This option is specific to the i386 PE targeted port of the linker]
2fa9fc65 2473
b044cda1
CW
2474@kindex --enable-extra-pe-debug
2475@item --enable-extra-pe-debug
2476Show additional debug info related to auto-import symbol thunking.
bb10df36 2477[This option is specific to the i386 PE targeted port of the linker]
b044cda1 2478
252b5132
RH
2479@kindex --section-alignment
2480@item --section-alignment
2481Sets the section alignment. Sections in memory will always begin at
2482addresses which are a multiple of this number. Defaults to 0x1000.
bb10df36 2483[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2484
2485@cindex stack size
2486@kindex --stack
2487@item --stack @var{reserve}
2488@itemx --stack @var{reserve},@var{commit}
a00b50c5
DS
2489Specify the number of bytes of memory to reserve (and optionally commit)
2490to be used as stack for this program. The default is 2Mb reserved, 4K
252b5132 2491committed.
bb10df36 2492[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2493
2494@kindex --subsystem
2495@item --subsystem @var{which}
2496@itemx --subsystem @var{which}:@var{major}
2497@itemx --subsystem @var{which}:@var{major}.@var{minor}
2498Specifies the subsystem under which your program will execute. The
2499legal values for @var{which} are @code{native}, @code{windows},
33f362e1
NC
2500@code{console}, @code{posix}, and @code{xbox}. You may optionally set
2501the subsystem version also. Numeric values are also accepted for
2502@var{which}.
bb10df36 2503[This option is specific to the i386 PE targeted port of the linker]
252b5132 2504
2f563b51
DK
2505The following options set flags in the @code{DllCharacteristics} field
2506of the PE file header:
2507[These options are specific to PE targeted ports of the linker]
2508
2509@kindex --dynamicbase
2510@item --dynamicbase
2511The image base address may be relocated using address space layout
2512randomization (ASLR). This feature was introduced with MS Windows
2513Vista for i386 PE targets.
2514
2515@kindex --forceinteg
2516@item --forceinteg
2517Code integrity checks are enforced.
2518
2519@kindex --nxcompat
2520@item --nxcompat
2521The image is compatible with the Data Execution Prevention.
2522This feature was introduced with MS Windows XP SP2 for i386 PE targets.
2523
2524@kindex --no-isolation
2525@item --no-isolation
2526Although the image understands isolation, do not isolate the image.
2527
2528@kindex --no-seh
2529@item --no-seh
2530The image does not use SEH. No SE handler may be called from
2531this image.
2532
2533@kindex --no-bind
2534@item --no-bind
2535Do not bind this image.
2536
2537@kindex --wdmdriver
2538@item --wdmdriver
2539The driver uses the MS Windows Driver Model.
2540
2541@kindex --tsaware
2542@item --tsaware
2543The image is Terminal Server aware.
2544
252b5132
RH
2545@end table
2546
0285c67d
NC
2547@c man end
2548
93fd0973
SC
2549@ifset M68HC11
2550@subsection Options specific to Motorola 68HC11 and 68HC12 targets
2551
2552@c man begin OPTIONS
2553
2554The 68HC11 and 68HC12 linkers support specific options to control the
2555memory bank switching mapping and trampoline code generation.
2556
2557@table @gcctabopt
2558
2559@kindex --no-trampoline
2560@item --no-trampoline
2561This option disables the generation of trampoline. By default a trampoline
2562is generated for each far function which is called using a @code{jsr}
2563instruction (this happens when a pointer to a far function is taken).
2564
2565@kindex --bank-window
2566@item --bank-window @var{name}
2567This option indicates to the linker the name of the memory region in
2568the @samp{MEMORY} specification that describes the memory bank window.
2569The definition of such region is then used by the linker to compute
2570paging and addresses within the memory window.
2571
2572@end table
2573
2574@c man end
2575@end ifset
2576
7fb9f789
NC
2577@ifset M68K
2578@subsection Options specific to Motorola 68K target
2579
2580@c man begin OPTIONS
2581
2582The following options are supported to control handling of GOT generation
2583when linking for 68K targets.
2584
2585@table @gcctabopt
2586
2587@kindex --got
2588@item --got=@var{type}
2589This option tells the linker which GOT generation scheme to use.
2590@var{type} should be one of @samp{single}, @samp{negative},
2591@samp{multigot} or @samp{target}. For more information refer to the
2592Info entry for @file{ld}.
2593
2594@end table
2595
2596@c man end
2597@end ifset
2598
252b5132
RH
2599@ifset UsesEnvVars
2600@node Environment
2601@section Environment Variables
2602
0285c67d
NC
2603@c man begin ENVIRONMENT
2604
560e09e9 2605You can change the behaviour of @command{ld} with the environment variables
36f63dca
NC
2606@ifclear SingleFormat
2607@code{GNUTARGET},
2608@end ifclear
2609@code{LDEMULATION} and @code{COLLECT_NO_DEMANGLE}.
252b5132 2610
36f63dca 2611@ifclear SingleFormat
252b5132
RH
2612@kindex GNUTARGET
2613@cindex default input format
2614@code{GNUTARGET} determines the input-file object format if you don't
2615use @samp{-b} (or its synonym @samp{--format}). Its value should be one
2616of the BFD names for an input format (@pxref{BFD}). If there is no
ff5dcc92 2617@code{GNUTARGET} in the environment, @command{ld} uses the natural format
252b5132
RH
2618of the target. If @code{GNUTARGET} is set to @code{default} then BFD
2619attempts to discover the input format by examining binary input files;
2620this method often succeeds, but there are potential ambiguities, since
2621there is no method of ensuring that the magic number used to specify
2622object-file formats is unique. However, the configuration procedure for
2623BFD on each system places the conventional format for that system first
2624in the search-list, so ambiguities are resolved in favor of convention.
36f63dca 2625@end ifclear
252b5132
RH
2626
2627@kindex LDEMULATION
2628@cindex default emulation
2629@cindex emulation, default
2630@code{LDEMULATION} determines the default emulation if you don't use the
2631@samp{-m} option. The emulation can affect various aspects of linker
2632behaviour, particularly the default linker script. You can list the
2633available emulations with the @samp{--verbose} or @samp{-V} options. If
2634the @samp{-m} option is not used, and the @code{LDEMULATION} environment
2635variable is not defined, the default emulation depends upon how the
2636linker was configured.
252b5132
RH
2637
2638@kindex COLLECT_NO_DEMANGLE
2639@cindex demangling, default
2640Normally, the linker will default to demangling symbols. However, if
2641@code{COLLECT_NO_DEMANGLE} is set in the environment, then it will
2642default to not demangling symbols. This environment variable is used in
2643a similar fashion by the @code{gcc} linker wrapper program. The default
2644may be overridden by the @samp{--demangle} and @samp{--no-demangle}
2645options.
2646
0285c67d
NC
2647@c man end
2648@end ifset
2649
252b5132
RH
2650@node Scripts
2651@chapter Linker Scripts
2652
2653@cindex scripts
2654@cindex linker scripts
2655@cindex command files
2656Every link is controlled by a @dfn{linker script}. This script is
2657written in the linker command language.
2658
2659The main purpose of the linker script is to describe how the sections in
2660the input files should be mapped into the output file, and to control
2661the memory layout of the output file. Most linker scripts do nothing
2662more than this. However, when necessary, the linker script can also
2663direct the linker to perform many other operations, using the commands
2664described below.
2665
2666The linker always uses a linker script. If you do not supply one
2667yourself, the linker will use a default script that is compiled into the
2668linker executable. You can use the @samp{--verbose} command line option
2669to display the default linker script. Certain command line options,
2670such as @samp{-r} or @samp{-N}, will affect the default linker script.
2671
2672You may supply your own linker script by using the @samp{-T} command
2673line option. When you do this, your linker script will replace the
2674default linker script.
2675
2676You may also use linker scripts implicitly by naming them as input files
2677to the linker, as though they were files to be linked. @xref{Implicit
2678Linker Scripts}.
2679
2680@menu
2681* Basic Script Concepts:: Basic Linker Script Concepts
2682* Script Format:: Linker Script Format
2683* Simple Example:: Simple Linker Script Example
2684* Simple Commands:: Simple Linker Script Commands
2685* Assignments:: Assigning Values to Symbols
2686* SECTIONS:: SECTIONS Command
2687* MEMORY:: MEMORY Command
2688* PHDRS:: PHDRS Command
2689* VERSION:: VERSION Command
2690* Expressions:: Expressions in Linker Scripts
2691* Implicit Linker Scripts:: Implicit Linker Scripts
2692@end menu
2693
2694@node Basic Script Concepts
2695@section Basic Linker Script Concepts
2696@cindex linker script concepts
2697We need to define some basic concepts and vocabulary in order to
2698describe the linker script language.
2699
2700The linker combines input files into a single output file. The output
2701file and each input file are in a special data format known as an
2702@dfn{object file format}. Each file is called an @dfn{object file}.
2703The output file is often called an @dfn{executable}, but for our
2704purposes we will also call it an object file. Each object file has,
2705among other things, a list of @dfn{sections}. We sometimes refer to a
2706section in an input file as an @dfn{input section}; similarly, a section
2707in the output file is an @dfn{output section}.
2708
2709Each section in an object file has a name and a size. Most sections
2710also have an associated block of data, known as the @dfn{section
2711contents}. A section may be marked as @dfn{loadable}, which mean that
2712the contents should be loaded into memory when the output file is run.
2713A section with no contents may be @dfn{allocatable}, which means that an
2714area in memory should be set aside, but nothing in particular should be
2715loaded there (in some cases this memory must be zeroed out). A section
2716which is neither loadable nor allocatable typically contains some sort
2717of debugging information.
2718
2719Every loadable or allocatable output section has two addresses. The
2720first is the @dfn{VMA}, or virtual memory address. This is the address
2721the section will have when the output file is run. The second is the
2722@dfn{LMA}, or load memory address. This is the address at which the
2723section will be loaded. In most cases the two addresses will be the
2724same. An example of when they might be different is when a data section
2725is loaded into ROM, and then copied into RAM when the program starts up
2726(this technique is often used to initialize global variables in a ROM
2727based system). In this case the ROM address would be the LMA, and the
2728RAM address would be the VMA.
2729
2730You can see the sections in an object file by using the @code{objdump}
2731program with the @samp{-h} option.
2732
2733Every object file also has a list of @dfn{symbols}, known as the
2734@dfn{symbol table}. A symbol may be defined or undefined. Each symbol
2735has a name, and each defined symbol has an address, among other
2736information. If you compile a C or C++ program into an object file, you
2737will get a defined symbol for every defined function and global or
2738static variable. Every undefined function or global variable which is
2739referenced in the input file will become an undefined symbol.
2740
2741You can see the symbols in an object file by using the @code{nm}
2742program, or by using the @code{objdump} program with the @samp{-t}
2743option.
2744
2745@node Script Format
2746@section Linker Script Format
2747@cindex linker script format
2748Linker scripts are text files.
2749
2750You write a linker script as a series of commands. Each command is
2751either a keyword, possibly followed by arguments, or an assignment to a
2752symbol. You may separate commands using semicolons. Whitespace is
2753generally ignored.
2754
2755Strings such as file or format names can normally be entered directly.
2756If the file name contains a character such as a comma which would
2757otherwise serve to separate file names, you may put the file name in
2758double quotes. There is no way to use a double quote character in a
2759file name.
2760
2761You may include comments in linker scripts just as in C, delimited by
2762@samp{/*} and @samp{*/}. As in C, comments are syntactically equivalent
2763to whitespace.
2764
2765@node Simple Example
2766@section Simple Linker Script Example
2767@cindex linker script example
2768@cindex example of linker script
2769Many linker scripts are fairly simple.
2770
2771The simplest possible linker script has just one command:
2772@samp{SECTIONS}. You use the @samp{SECTIONS} command to describe the
2773memory layout of the output file.
2774
2775The @samp{SECTIONS} command is a powerful command. Here we will
2776describe a simple use of it. Let's assume your program consists only of
2777code, initialized data, and uninitialized data. These will be in the
2778@samp{.text}, @samp{.data}, and @samp{.bss} sections, respectively.
2779Let's assume further that these are the only sections which appear in
2780your input files.
2781
2782For this example, let's say that the code should be loaded at address
27830x10000, and that the data should start at address 0x8000000. Here is a
2784linker script which will do that:
2785@smallexample
2786SECTIONS
2787@{
2788 . = 0x10000;
2789 .text : @{ *(.text) @}
2790 . = 0x8000000;
2791 .data : @{ *(.data) @}
2792 .bss : @{ *(.bss) @}
2793@}
2794@end smallexample
2795
2796You write the @samp{SECTIONS} command as the keyword @samp{SECTIONS},
2797followed by a series of symbol assignments and output section
2798descriptions enclosed in curly braces.
2799
252b5132
RH
2800The first line inside the @samp{SECTIONS} command of the above example
2801sets the value of the special symbol @samp{.}, which is the location
2802counter. If you do not specify the address of an output section in some
2803other way (other ways are described later), the address is set from the
2804current value of the location counter. The location counter is then
2805incremented by the size of the output section. At the start of the
2806@samp{SECTIONS} command, the location counter has the value @samp{0}.
2807
2808The second line defines an output section, @samp{.text}. The colon is
2809required syntax which may be ignored for now. Within the curly braces
2810after the output section name, you list the names of the input sections
2811which should be placed into this output section. The @samp{*} is a
2812wildcard which matches any file name. The expression @samp{*(.text)}
2813means all @samp{.text} input sections in all input files.
2814
2815Since the location counter is @samp{0x10000} when the output section
2816@samp{.text} is defined, the linker will set the address of the
2817@samp{.text} section in the output file to be @samp{0x10000}.
2818
2819The remaining lines define the @samp{.data} and @samp{.bss} sections in
2820the output file. The linker will place the @samp{.data} output section
2821at address @samp{0x8000000}. After the linker places the @samp{.data}
2822output section, the value of the location counter will be
2823@samp{0x8000000} plus the size of the @samp{.data} output section. The
2824effect is that the linker will place the @samp{.bss} output section
58434bc1 2825immediately after the @samp{.data} output section in memory.
252b5132
RH
2826
2827The linker will ensure that each output section has the required
2828alignment, by increasing the location counter if necessary. In this
2829example, the specified addresses for the @samp{.text} and @samp{.data}
2830sections will probably satisfy any alignment constraints, but the linker
2831may have to create a small gap between the @samp{.data} and @samp{.bss}
2832sections.
2833
2834That's it! That's a simple and complete linker script.
2835
2836@node Simple Commands
2837@section Simple Linker Script Commands
2838@cindex linker script simple commands
2839In this section we describe the simple linker script commands.
2840
2841@menu
2842* Entry Point:: Setting the entry point
2843* File Commands:: Commands dealing with files
2844@ifclear SingleFormat
2845* Format Commands:: Commands dealing with object file formats
2846@end ifclear
2847
4a93e180 2848* REGION_ALIAS:: Assign alias names to memory regions
252b5132
RH
2849* Miscellaneous Commands:: Other linker script commands
2850@end menu
2851
2852@node Entry Point
36f63dca 2853@subsection Setting the Entry Point
252b5132
RH
2854@kindex ENTRY(@var{symbol})
2855@cindex start of execution
2856@cindex first instruction
2857@cindex entry point
2858The first instruction to execute in a program is called the @dfn{entry
2859point}. You can use the @code{ENTRY} linker script command to set the
2860entry point. The argument is a symbol name:
2861@smallexample
2862ENTRY(@var{symbol})
2863@end smallexample
2864
2865There are several ways to set the entry point. The linker will set the
2866entry point by trying each of the following methods in order, and
2867stopping when one of them succeeds:
2868@itemize @bullet
a1ab1d2a 2869@item
252b5132 2870the @samp{-e} @var{entry} command-line option;
a1ab1d2a 2871@item
252b5132 2872the @code{ENTRY(@var{symbol})} command in a linker script;
a1ab1d2a 2873@item
252b5132 2874the value of the symbol @code{start}, if defined;
a1ab1d2a 2875@item
252b5132 2876the address of the first byte of the @samp{.text} section, if present;
a1ab1d2a 2877@item
252b5132
RH
2878The address @code{0}.
2879@end itemize
2880
2881@node File Commands
36f63dca 2882@subsection Commands Dealing with Files
252b5132
RH
2883@cindex linker script file commands
2884Several linker script commands deal with files.
2885
2886@table @code
2887@item INCLUDE @var{filename}
2888@kindex INCLUDE @var{filename}
2889@cindex including a linker script
2890Include the linker script @var{filename} at this point. The file will
2891be searched for in the current directory, and in any directory specified
ff5dcc92 2892with the @option{-L} option. You can nest calls to @code{INCLUDE} up to
252b5132
RH
289310 levels deep.
2894
4006703d
NS
2895You can place @code{INCLUDE} directives at the top level, in @code{MEMORY} or
2896@code{SECTIONS} commands, or in output section descriptions.
2897
252b5132
RH
2898@item INPUT(@var{file}, @var{file}, @dots{})
2899@itemx INPUT(@var{file} @var{file} @dots{})
2900@kindex INPUT(@var{files})
2901@cindex input files in linker scripts
2902@cindex input object files in linker scripts
2903@cindex linker script input object files
2904The @code{INPUT} command directs the linker to include the named files
2905in the link, as though they were named on the command line.
2906
2907For example, if you always want to include @file{subr.o} any time you do
2908a link, but you can't be bothered to put it on every link command line,
2909then you can put @samp{INPUT (subr.o)} in your linker script.
2910
2911In fact, if you like, you can list all of your input files in the linker
2912script, and then invoke the linker with nothing but a @samp{-T} option.
2913
e3f2db7f
AO
2914In case a @dfn{sysroot prefix} is configured, and the filename starts
2915with the @samp{/} character, and the script being processed was
2916located inside the @dfn{sysroot prefix}, the filename will be looked
2917for in the @dfn{sysroot prefix}. Otherwise, the linker will try to
2918open the file in the current directory. If it is not found, the
2919linker will search through the archive library search path. See the
2920description of @samp{-L} in @ref{Options,,Command Line Options}.
252b5132 2921
ff5dcc92 2922If you use @samp{INPUT (-l@var{file})}, @command{ld} will transform the
252b5132
RH
2923name to @code{lib@var{file}.a}, as with the command line argument
2924@samp{-l}.
2925
2926When you use the @code{INPUT} command in an implicit linker script, the
2927files will be included in the link at the point at which the linker
2928script file is included. This can affect archive searching.
2929
2930@item GROUP(@var{file}, @var{file}, @dots{})
2931@itemx GROUP(@var{file} @var{file} @dots{})
2932@kindex GROUP(@var{files})
2933@cindex grouping input files
2934The @code{GROUP} command is like @code{INPUT}, except that the named
2935files should all be archives, and they are searched repeatedly until no
2936new undefined references are created. See the description of @samp{-(}
2937in @ref{Options,,Command Line Options}.
2938
b717d30e
JJ
2939@item AS_NEEDED(@var{file}, @var{file}, @dots{})
2940@itemx AS_NEEDED(@var{file} @var{file} @dots{})
2941@kindex AS_NEEDED(@var{files})
2942This construct can appear only inside of the @code{INPUT} or @code{GROUP}
2943commands, among other filenames. The files listed will be handled
2944as if they appear directly in the @code{INPUT} or @code{GROUP} commands,
2945with the exception of ELF shared libraries, that will be added only
2946when they are actually needed. This construct essentially enables
2947@option{--as-needed} option for all the files listed inside of it
2948and restores previous @option{--as-needed} resp. @option{--no-as-needed}
2949setting afterwards.
2950
252b5132
RH
2951@item OUTPUT(@var{filename})
2952@kindex OUTPUT(@var{filename})
b45619c0 2953@cindex output file name in linker script
252b5132
RH
2954The @code{OUTPUT} command names the output file. Using
2955@code{OUTPUT(@var{filename})} in the linker script is exactly like using
2956@samp{-o @var{filename}} on the command line (@pxref{Options,,Command
2957Line Options}). If both are used, the command line option takes
2958precedence.
2959
2960You can use the @code{OUTPUT} command to define a default name for the
2961output file other than the usual default of @file{a.out}.
2962
2963@item SEARCH_DIR(@var{path})
2964@kindex SEARCH_DIR(@var{path})
2965@cindex library search path in linker script
2966@cindex archive search path in linker script
2967@cindex search path in linker script
2968The @code{SEARCH_DIR} command adds @var{path} to the list of paths where
ff5dcc92 2969@command{ld} looks for archive libraries. Using
252b5132
RH
2970@code{SEARCH_DIR(@var{path})} is exactly like using @samp{-L @var{path}}
2971on the command line (@pxref{Options,,Command Line Options}). If both
2972are used, then the linker will search both paths. Paths specified using
2973the command line option are searched first.
2974
2975@item STARTUP(@var{filename})
2976@kindex STARTUP(@var{filename})
2977@cindex first input file
2978The @code{STARTUP} command is just like the @code{INPUT} command, except
2979that @var{filename} will become the first input file to be linked, as
2980though it were specified first on the command line. This may be useful
2981when using a system in which the entry point is always the start of the
2982first file.
2983@end table
2984
2985@ifclear SingleFormat
2986@node Format Commands
36f63dca 2987@subsection Commands Dealing with Object File Formats
252b5132
RH
2988A couple of linker script commands deal with object file formats.
2989
2990@table @code
2991@item OUTPUT_FORMAT(@var{bfdname})
2992@itemx OUTPUT_FORMAT(@var{default}, @var{big}, @var{little})
2993@kindex OUTPUT_FORMAT(@var{bfdname})
2994@cindex output file format in linker script
2995The @code{OUTPUT_FORMAT} command names the BFD format to use for the
2996output file (@pxref{BFD}). Using @code{OUTPUT_FORMAT(@var{bfdname})} is
024531e2 2997exactly like using @samp{--oformat @var{bfdname}} on the command line
252b5132
RH
2998(@pxref{Options,,Command Line Options}). If both are used, the command
2999line option takes precedence.
3000
3001You can use @code{OUTPUT_FORMAT} with three arguments to use different
3002formats based on the @samp{-EB} and @samp{-EL} command line options.
3003This permits the linker script to set the output format based on the
3004desired endianness.
3005
3006If neither @samp{-EB} nor @samp{-EL} are used, then the output format
3007will be the first argument, @var{default}. If @samp{-EB} is used, the
3008output format will be the second argument, @var{big}. If @samp{-EL} is
3009used, the output format will be the third argument, @var{little}.
3010
3011For example, the default linker script for the MIPS ELF target uses this
3012command:
3013@smallexample
3014OUTPUT_FORMAT(elf32-bigmips, elf32-bigmips, elf32-littlemips)
3015@end smallexample
3016This says that the default format for the output file is
3017@samp{elf32-bigmips}, but if the user uses the @samp{-EL} command line
3018option, the output file will be created in the @samp{elf32-littlemips}
3019format.
3020
3021@item TARGET(@var{bfdname})
3022@kindex TARGET(@var{bfdname})
3023@cindex input file format in linker script
3024The @code{TARGET} command names the BFD format to use when reading input
3025files. It affects subsequent @code{INPUT} and @code{GROUP} commands.
3026This command is like using @samp{-b @var{bfdname}} on the command line
3027(@pxref{Options,,Command Line Options}). If the @code{TARGET} command
3028is used but @code{OUTPUT_FORMAT} is not, then the last @code{TARGET}
3029command is also used to set the format for the output file. @xref{BFD}.
3030@end table
3031@end ifclear
3032
4a93e180
NC
3033@node REGION_ALIAS
3034@subsection Assign alias names to memory regions
3035@kindex REGION_ALIAS(@var{alias}, @var{region})
3036@cindex region alias
3037@cindex region names
3038
3039Alias names can be added to existing memory regions created with the
3040@ref{MEMORY} command. Each name corresponds to at most one memory region.
3041
3042@smallexample
3043REGION_ALIAS(@var{alias}, @var{region})
3044@end smallexample
3045
3046The @code{REGION_ALIAS} function creates an alias name @var{alias} for the
3047memory region @var{region}. This allows a flexible mapping of output sections
3048to memory regions. An example follows.
3049
3050Suppose we have an application for embedded systems which come with various
3051memory storage devices. All have a general purpose, volatile memory @code{RAM}
3052that allows code execution or data storage. Some may have a read-only,
3053non-volatile memory @code{ROM} that allows code execution and read-only data
3054access. The last variant is a read-only, non-volatile memory @code{ROM2} with
3055read-only data access and no code execution capability. We have four output
3056sections:
3057
3058@itemize @bullet
3059@item
3060@code{.text} program code;
3061@item
3062@code{.rodata} read-only data;
3063@item
3064@code{.data} read-write initialized data;
3065@item
3066@code{.bss} read-write zero initialized data.
3067@end itemize
3068
3069The goal is to provide a linker command file that contains a system independent
3070part defining the output sections and a system dependent part mapping the
3071output sections to the memory regions available on the system. Our embedded
3072systems come with three different memory setups @code{A}, @code{B} and
3073@code{C}:
3074@multitable @columnfractions .25 .25 .25 .25
3075@item Section @tab Variant A @tab Variant B @tab Variant C
3076@item .text @tab RAM @tab ROM @tab ROM
3077@item .rodata @tab RAM @tab ROM @tab ROM2
3078@item .data @tab RAM @tab RAM/ROM @tab RAM/ROM2
3079@item .bss @tab RAM @tab RAM @tab RAM
3080@end multitable
3081The notation @code{RAM/ROM} or @code{RAM/ROM2} means that this section is
3082loaded into region @code{ROM} or @code{ROM2} respectively. Please note that
3083the load address of the @code{.data} section starts in all three variants at
3084the end of the @code{.rodata} section.
3085
3086The base linker script that deals with the output sections follows. It
3087includes the system dependent @code{linkcmds.memory} file that describes the
3088memory layout:
3089@smallexample
3090INCLUDE linkcmds.memory
3091
3092SECTIONS
3093 @{
3094 .text :
3095 @{
3096 *(.text)
3097 @} > REGION_TEXT
3098 .rodata :
3099 @{
3100 *(.rodata)
3101 rodata_end = .;
3102 @} > REGION_RODATA
3103 .data : AT (rodata_end)
3104 @{
3105 data_start = .;
3106 *(.data)
3107 @} > REGION_DATA
3108 data_size = SIZEOF(.data);
3109 data_load_start = LOADADDR(.data);
3110 .bss :
3111 @{
3112 *(.bss)
3113 @} > REGION_BSS
3114 @}
3115@end smallexample
3116
3117Now we need three different @code{linkcmds.memory} files to define memory
3118regions and alias names. The content of @code{linkcmds.memory} for the three
3119variants @code{A}, @code{B} and @code{C}:
3120@table @code
3121@item A
3122Here everything goes into the @code{RAM}.
3123@smallexample
3124MEMORY
3125 @{
3126 RAM : ORIGIN = 0, LENGTH = 4M
3127 @}
3128
3129REGION_ALIAS("REGION_TEXT", RAM);
3130REGION_ALIAS("REGION_RODATA", RAM);
3131REGION_ALIAS("REGION_DATA", RAM);
3132REGION_ALIAS("REGION_BSS", RAM);
3133@end smallexample
3134@item B
3135Program code and read-only data go into the @code{ROM}. Read-write data goes
3136into the @code{RAM}. An image of the initialized data is loaded into the
3137@code{ROM} and will be copied during system start into the @code{RAM}.
3138@smallexample
3139MEMORY
3140 @{
3141 ROM : ORIGIN = 0, LENGTH = 3M
3142 RAM : ORIGIN = 0x10000000, LENGTH = 1M
3143 @}
3144
3145REGION_ALIAS("REGION_TEXT", ROM);
3146REGION_ALIAS("REGION_RODATA", ROM);
3147REGION_ALIAS("REGION_DATA", RAM);
3148REGION_ALIAS("REGION_BSS", RAM);
3149@end smallexample
3150@item C
3151Program code goes into the @code{ROM}. Read-only data goes into the
3152@code{ROM2}. Read-write data goes into the @code{RAM}. An image of the
3153initialized data is loaded into the @code{ROM2} and will be copied during
3154system start into the @code{RAM}.
3155@smallexample
3156MEMORY
3157 @{
3158 ROM : ORIGIN = 0, LENGTH = 2M
3159 ROM2 : ORIGIN = 0x10000000, LENGTH = 1M
3160 RAM : ORIGIN = 0x20000000, LENGTH = 1M
3161 @}
3162
3163REGION_ALIAS("REGION_TEXT", ROM);
3164REGION_ALIAS("REGION_RODATA", ROM2);
3165REGION_ALIAS("REGION_DATA", RAM);
3166REGION_ALIAS("REGION_BSS", RAM);
3167@end smallexample
3168@end table
3169
3170It is possible to write a common system initialization routine to copy the
3171@code{.data} section from @code{ROM} or @code{ROM2} into the @code{RAM} if
3172necessary:
3173@smallexample
3174#include <string.h>
3175
3176extern char data_start [];
3177extern char data_size [];
3178extern char data_load_start [];
3179
3180void copy_data(void)
3181@{
3182 if (data_start != data_load_start)
3183 @{
3184 memcpy(data_start, data_load_start, (size_t) data_size);
3185 @}
3186@}
3187@end smallexample
3188
252b5132 3189@node Miscellaneous Commands
36f63dca 3190@subsection Other Linker Script Commands
252b5132
RH
3191There are a few other linker scripts commands.
3192
3193@table @code
3194@item ASSERT(@var{exp}, @var{message})
3195@kindex ASSERT
3196@cindex assertion in linker script
3197Ensure that @var{exp} is non-zero. If it is zero, then exit the linker
3198with an error code, and print @var{message}.
3199
3200@item EXTERN(@var{symbol} @var{symbol} @dots{})
3201@kindex EXTERN
3202@cindex undefined symbol in linker script
3203Force @var{symbol} to be entered in the output file as an undefined
3204symbol. Doing this may, for example, trigger linking of additional
3205modules from standard libraries. You may list several @var{symbol}s for
3206each @code{EXTERN}, and you may use @code{EXTERN} multiple times. This
3207command has the same effect as the @samp{-u} command-line option.
3208
3209@item FORCE_COMMON_ALLOCATION
3210@kindex FORCE_COMMON_ALLOCATION
3211@cindex common allocation in linker script
3212This command has the same effect as the @samp{-d} command-line option:
ff5dcc92 3213to make @command{ld} assign space to common symbols even if a relocatable
252b5132
RH
3214output file is specified (@samp{-r}).
3215
4818e05f
AM
3216@item INHIBIT_COMMON_ALLOCATION
3217@kindex INHIBIT_COMMON_ALLOCATION
3218@cindex common allocation in linker script
3219This command has the same effect as the @samp{--no-define-common}
3220command-line option: to make @code{ld} omit the assignment of addresses
3221to common symbols even for a non-relocatable output file.
3222
53d25da6
AM
3223@item INSERT [ AFTER | BEFORE ] @var{output_section}
3224@kindex INSERT
3225@cindex insert user script into default script
3226This command is typically used in a script specified by @samp{-T} to
3227augment the default @code{SECTIONS} with, for example, overlays. It
3228inserts all prior linker script statements after (or before)
3229@var{output_section}, and also causes @samp{-T} to not override the
3230default linker script. The exact insertion point is as for orphan
3231sections. @xref{Location Counter}. The insertion happens after the
3232linker has mapped input sections to output sections. Prior to the
3233insertion, since @samp{-T} scripts are parsed before the default
3234linker script, statements in the @samp{-T} script occur before the
3235default linker script statements in the internal linker representation
3236of the script. In particular, input section assignments will be made
3237to @samp{-T} output sections before those in the default script. Here
3238is an example of how a @samp{-T} script using @code{INSERT} might look:
3239
3240@smallexample
3241SECTIONS
3242@{
3243 OVERLAY :
3244 @{
3245 .ov1 @{ ov1*(.text) @}
3246 .ov2 @{ ov2*(.text) @}
3247 @}
3248@}
3249INSERT AFTER .text;
3250@end smallexample
3251
252b5132
RH
3252@item NOCROSSREFS(@var{section} @var{section} @dots{})
3253@kindex NOCROSSREFS(@var{sections})
3254@cindex cross references
ff5dcc92 3255This command may be used to tell @command{ld} to issue an error about any
252b5132
RH
3256references among certain output sections.
3257
3258In certain types of programs, particularly on embedded systems when
3259using overlays, when one section is loaded into memory, another section
3260will not be. Any direct references between the two sections would be
3261errors. For example, it would be an error if code in one section called
3262a function defined in the other section.
3263
3264The @code{NOCROSSREFS} command takes a list of output section names. If
ff5dcc92 3265@command{ld} detects any cross references between the sections, it reports
252b5132
RH
3266an error and returns a non-zero exit status. Note that the
3267@code{NOCROSSREFS} command uses output section names, not input section
3268names.
3269
3270@ifclear SingleFormat
3271@item OUTPUT_ARCH(@var{bfdarch})
3272@kindex OUTPUT_ARCH(@var{bfdarch})
3273@cindex machine architecture
3274@cindex architecture
3275Specify a particular output machine architecture. The argument is one
3276of the names used by the BFD library (@pxref{BFD}). You can see the
3277architecture of an object file by using the @code{objdump} program with
3278the @samp{-f} option.
3279@end ifclear
3280@end table
3281
3282@node Assignments
3283@section Assigning Values to Symbols
3284@cindex assignment in scripts
3285@cindex symbol definition, scripts
3286@cindex variables, defining
3287You may assign a value to a symbol in a linker script. This will define
73ae6183 3288the symbol and place it into the symbol table with a global scope.
252b5132
RH
3289
3290@menu
3291* Simple Assignments:: Simple Assignments
3292* PROVIDE:: PROVIDE
7af8e998 3293* PROVIDE_HIDDEN:: PROVIDE_HIDDEN
73ae6183 3294* Source Code Reference:: How to use a linker script defined symbol in source code
252b5132
RH
3295@end menu
3296
3297@node Simple Assignments
3298@subsection Simple Assignments
3299
3300You may assign to a symbol using any of the C assignment operators:
3301
3302@table @code
3303@item @var{symbol} = @var{expression} ;
3304@itemx @var{symbol} += @var{expression} ;
3305@itemx @var{symbol} -= @var{expression} ;
3306@itemx @var{symbol} *= @var{expression} ;
3307@itemx @var{symbol} /= @var{expression} ;
3308@itemx @var{symbol} <<= @var{expression} ;
3309@itemx @var{symbol} >>= @var{expression} ;
3310@itemx @var{symbol} &= @var{expression} ;
3311@itemx @var{symbol} |= @var{expression} ;
3312@end table
3313
3314The first case will define @var{symbol} to the value of
3315@var{expression}. In the other cases, @var{symbol} must already be
3316defined, and the value will be adjusted accordingly.
3317
3318The special symbol name @samp{.} indicates the location counter. You
b5666f2f 3319may only use this within a @code{SECTIONS} command. @xref{Location Counter}.
252b5132
RH
3320
3321The semicolon after @var{expression} is required.
3322
3323Expressions are defined below; see @ref{Expressions}.
3324
3325You may write symbol assignments as commands in their own right, or as
3326statements within a @code{SECTIONS} command, or as part of an output
3327section description in a @code{SECTIONS} command.
3328
3329The section of the symbol will be set from the section of the
3330expression; for more information, see @ref{Expression Section}.
3331
3332Here is an example showing the three different places that symbol
3333assignments may be used:
3334
3335@smallexample
3336floating_point = 0;
3337SECTIONS
3338@{
3339 .text :
3340 @{
3341 *(.text)
3342 _etext = .;
3343 @}
156e34dd 3344 _bdata = (. + 3) & ~ 3;
252b5132
RH
3345 .data : @{ *(.data) @}
3346@}
3347@end smallexample
3348@noindent
3349In this example, the symbol @samp{floating_point} will be defined as
3350zero. The symbol @samp{_etext} will be defined as the address following
3351the last @samp{.text} input section. The symbol @samp{_bdata} will be
3352defined as the address following the @samp{.text} output section aligned
3353upward to a 4 byte boundary.
3354
3355@node PROVIDE
3356@subsection PROVIDE
3357@cindex PROVIDE
3358In some cases, it is desirable for a linker script to define a symbol
3359only if it is referenced and is not defined by any object included in
3360the link. For example, traditional linkers defined the symbol
3361@samp{etext}. However, ANSI C requires that the user be able to use
3362@samp{etext} as a function name without encountering an error. The
3363@code{PROVIDE} keyword may be used to define a symbol, such as
3364@samp{etext}, only if it is referenced but not defined. The syntax is
3365@code{PROVIDE(@var{symbol} = @var{expression})}.
3366
3367Here is an example of using @code{PROVIDE} to define @samp{etext}:
3368@smallexample
3369SECTIONS
3370@{
3371 .text :
3372 @{
3373 *(.text)
3374 _etext = .;
3375 PROVIDE(etext = .);
3376 @}
3377@}
3378@end smallexample
3379
3380In this example, if the program defines @samp{_etext} (with a leading
3381underscore), the linker will give a multiple definition error. If, on
3382the other hand, the program defines @samp{etext} (with no leading
3383underscore), the linker will silently use the definition in the program.
3384If the program references @samp{etext} but does not define it, the
3385linker will use the definition in the linker script.
3386
7af8e998
L
3387@node PROVIDE_HIDDEN
3388@subsection PROVIDE_HIDDEN
3389@cindex PROVIDE_HIDDEN
3390Similar to @code{PROVIDE}. For ELF targeted ports, the symbol will be
3391hidden and won't be exported.
3392
73ae6183
NC
3393@node Source Code Reference
3394@subsection Source Code Reference
3395
3396Accessing a linker script defined variable from source code is not
3397intuitive. In particular a linker script symbol is not equivalent to
3398a variable declaration in a high level language, it is instead a
3399symbol that does not have a value.
3400
3401Before going further, it is important to note that compilers often
3402transform names in the source code into different names when they are
3403stored in the symbol table. For example, Fortran compilers commonly
3404prepend or append an underscore, and C++ performs extensive @samp{name
3405mangling}. Therefore there might be a discrepancy between the name
3406of a variable as it is used in source code and the name of the same
3407variable as it is defined in a linker script. For example in C a
3408linker script variable might be referred to as:
3409
3410@smallexample
3411 extern int foo;
3412@end smallexample
3413
3414But in the linker script it might be defined as:
3415
3416@smallexample
3417 _foo = 1000;
3418@end smallexample
3419
3420In the remaining examples however it is assumed that no name
3421transformation has taken place.
3422
3423When a symbol is declared in a high level language such as C, two
3424things happen. The first is that the compiler reserves enough space
3425in the program's memory to hold the @emph{value} of the symbol. The
3426second is that the compiler creates an entry in the program's symbol
3427table which holds the symbol's @emph{address}. ie the symbol table
3428contains the address of the block of memory holding the symbol's
3429value. So for example the following C declaration, at file scope:
3430
3431@smallexample
3432 int foo = 1000;
3433@end smallexample
3434
3435creates a entry called @samp{foo} in the symbol table. This entry
3436holds the address of an @samp{int} sized block of memory where the
3437number 1000 is initially stored.
3438
3439When a program references a symbol the compiler generates code that
3440first accesses the symbol table to find the address of the symbol's
3441memory block and then code to read the value from that memory block.
3442So:
3443
3444@smallexample
3445 foo = 1;
3446@end smallexample
3447
3448looks up the symbol @samp{foo} in the symbol table, gets the address
3449associated with this symbol and then writes the value 1 into that
3450address. Whereas:
3451
3452@smallexample
3453 int * a = & foo;
3454@end smallexample
3455
3456looks up the symbol @samp{foo} in the symbol table, gets it address
3457and then copies this address into the block of memory associated with
3458the variable @samp{a}.
3459
3460Linker scripts symbol declarations, by contrast, create an entry in
3461the symbol table but do not assign any memory to them. Thus they are
3462an address without a value. So for example the linker script definition:
3463
3464@smallexample
3465 foo = 1000;
3466@end smallexample
3467
3468creates an entry in the symbol table called @samp{foo} which holds
3469the address of memory location 1000, but nothing special is stored at
3470address 1000. This means that you cannot access the @emph{value} of a
3471linker script defined symbol - it has no value - all you can do is
3472access the @emph{address} of a linker script defined symbol.
3473
3474Hence when you are using a linker script defined symbol in source code
3475you should always take the address of the symbol, and never attempt to
3476use its value. For example suppose you want to copy the contents of a
3477section of memory called .ROM into a section called .FLASH and the
3478linker script contains these declarations:
3479
3480@smallexample
3481@group
3482 start_of_ROM = .ROM;
3483 end_of_ROM = .ROM + sizeof (.ROM) - 1;
3484 start_of_FLASH = .FLASH;
3485@end group
3486@end smallexample
3487
3488Then the C source code to perform the copy would be:
3489
3490@smallexample
3491@group
3492 extern char start_of_ROM, end_of_ROM, start_of_FLASH;
c0065db7 3493
73ae6183
NC
3494 memcpy (& start_of_FLASH, & start_of_ROM, & end_of_ROM - & start_of_ROM);
3495@end group
3496@end smallexample
3497
3498Note the use of the @samp{&} operators. These are correct.
3499
252b5132 3500@node SECTIONS
36f63dca 3501@section SECTIONS Command
252b5132
RH
3502@kindex SECTIONS
3503The @code{SECTIONS} command tells the linker how to map input sections
3504into output sections, and how to place the output sections in memory.
3505
3506The format of the @code{SECTIONS} command is:
3507@smallexample
3508SECTIONS
3509@{
3510 @var{sections-command}
3511 @var{sections-command}
3512 @dots{}
3513@}
3514@end smallexample
3515
3516Each @var{sections-command} may of be one of the following:
3517
3518@itemize @bullet
3519@item
3520an @code{ENTRY} command (@pxref{Entry Point,,Entry command})
3521@item
3522a symbol assignment (@pxref{Assignments})
3523@item
3524an output section description
3525@item
3526an overlay description
3527@end itemize
3528
3529The @code{ENTRY} command and symbol assignments are permitted inside the
3530@code{SECTIONS} command for convenience in using the location counter in
3531those commands. This can also make the linker script easier to
3532understand because you can use those commands at meaningful points in
3533the layout of the output file.
3534
3535Output section descriptions and overlay descriptions are described
3536below.
3537
3538If you do not use a @code{SECTIONS} command in your linker script, the
3539linker will place each input section into an identically named output
3540section in the order that the sections are first encountered in the
3541input files. If all input sections are present in the first file, for
3542example, the order of sections in the output file will match the order
3543in the first input file. The first section will be at address zero.
3544
3545@menu
3546* Output Section Description:: Output section description
3547* Output Section Name:: Output section name
3548* Output Section Address:: Output section address
3549* Input Section:: Input section description
3550* Output Section Data:: Output section data
3551* Output Section Keywords:: Output section keywords
3552* Output Section Discarding:: Output section discarding
3553* Output Section Attributes:: Output section attributes
3554* Overlay Description:: Overlay description
3555@end menu
3556
3557@node Output Section Description
36f63dca 3558@subsection Output Section Description
252b5132
RH
3559The full description of an output section looks like this:
3560@smallexample
a1ab1d2a 3561@group
7e7d5768 3562@var{section} [@var{address}] [(@var{type})] :
0c71d759
NC
3563 [AT(@var{lma})]
3564 [ALIGN(@var{section_align})]
3565 [SUBALIGN(@var{subsection_align})]
3566 [@var{constraint}]
252b5132
RH
3567 @{
3568 @var{output-section-command}
3569 @var{output-section-command}
3570 @dots{}
562d3460 3571 @} [>@var{region}] [AT>@var{lma_region}] [:@var{phdr} :@var{phdr} @dots{}] [=@var{fillexp}]
252b5132
RH
3572@end group
3573@end smallexample
3574
3575Most output sections do not use most of the optional section attributes.
3576
3577The whitespace around @var{section} is required, so that the section
3578name is unambiguous. The colon and the curly braces are also required.
3579The line breaks and other white space are optional.
3580
3581Each @var{output-section-command} may be one of the following:
3582
3583@itemize @bullet
3584@item
3585a symbol assignment (@pxref{Assignments})
3586@item
3587an input section description (@pxref{Input Section})
3588@item
3589data values to include directly (@pxref{Output Section Data})
3590@item
3591a special output section keyword (@pxref{Output Section Keywords})
3592@end itemize
3593
3594@node Output Section Name
36f63dca 3595@subsection Output Section Name
252b5132
RH
3596@cindex name, section
3597@cindex section name
3598The name of the output section is @var{section}. @var{section} must
3599meet the constraints of your output format. In formats which only
3600support a limited number of sections, such as @code{a.out}, the name
3601must be one of the names supported by the format (@code{a.out}, for
3602example, allows only @samp{.text}, @samp{.data} or @samp{.bss}). If the
3603output format supports any number of sections, but with numbers and not
3604names (as is the case for Oasys), the name should be supplied as a
3605quoted numeric string. A section name may consist of any sequence of
3606characters, but a name which contains any unusual characters such as
3607commas must be quoted.
3608
3609The output section name @samp{/DISCARD/} is special; @ref{Output Section
3610Discarding}.
3611
3612@node Output Section Address
2a16d82a 3613@subsection Output Section Address
252b5132
RH
3614@cindex address, section
3615@cindex section address
3616The @var{address} is an expression for the VMA (the virtual memory
3617address) of the output section. If you do not provide @var{address},
3618the linker will set it based on @var{region} if present, or otherwise
3619based on the current value of the location counter.
3620
3621If you provide @var{address}, the address of the output section will be
3622set to precisely that. If you provide neither @var{address} nor
3623@var{region}, then the address of the output section will be set to the
3624current value of the location counter aligned to the alignment
3625requirements of the output section. The alignment requirement of the
3626output section is the strictest alignment of any input section contained
3627within the output section.
3628
3629For example,
3630@smallexample
3631.text . : @{ *(.text) @}
3632@end smallexample
3633@noindent
3634and
3635@smallexample
3636.text : @{ *(.text) @}
3637@end smallexample
3638@noindent
3639are subtly different. The first will set the address of the
3640@samp{.text} output section to the current value of the location
3641counter. The second will set it to the current value of the location
3642counter aligned to the strictest alignment of a @samp{.text} input
3643section.
3644
3645The @var{address} may be an arbitrary expression; @ref{Expressions}.
3646For example, if you want to align the section on a 0x10 byte boundary,
3647so that the lowest four bits of the section address are zero, you could
3648do something like this:
3649@smallexample
3650.text ALIGN(0x10) : @{ *(.text) @}
3651@end smallexample
3652@noindent
3653This works because @code{ALIGN} returns the current location counter
3654aligned upward to the specified value.
3655
3656Specifying @var{address} for a section will change the value of the
6ce340f1
NC
3657location counter, provided that the section is non-empty. (Empty
3658sections are ignored).
252b5132
RH
3659
3660@node Input Section
36f63dca 3661@subsection Input Section Description
252b5132
RH
3662@cindex input sections
3663@cindex mapping input sections to output sections
3664The most common output section command is an input section description.
3665
3666The input section description is the most basic linker script operation.
3667You use output sections to tell the linker how to lay out your program
3668in memory. You use input section descriptions to tell the linker how to
3669map the input files into your memory layout.
3670
3671@menu
3672* Input Section Basics:: Input section basics
3673* Input Section Wildcards:: Input section wildcard patterns
3674* Input Section Common:: Input section for common symbols
3675* Input Section Keep:: Input section and garbage collection
3676* Input Section Example:: Input section example
3677@end menu
3678
3679@node Input Section Basics
36f63dca 3680@subsubsection Input Section Basics
252b5132
RH
3681@cindex input section basics
3682An input section description consists of a file name optionally followed
3683by a list of section names in parentheses.
3684
3685The file name and the section name may be wildcard patterns, which we
3686describe further below (@pxref{Input Section Wildcards}).
3687
3688The most common input section description is to include all input
3689sections with a particular name in the output section. For example, to
3690include all input @samp{.text} sections, you would write:
3691@smallexample
3692*(.text)
3693@end smallexample
3694@noindent
18625d54
CM
3695Here the @samp{*} is a wildcard which matches any file name. To exclude a list
3696of files from matching the file name wildcard, EXCLUDE_FILE may be used to
3697match all files except the ones specified in the EXCLUDE_FILE list. For
3698example:
252b5132 3699@smallexample
b4346c09 3700*(EXCLUDE_FILE (*crtend.o *otherfile.o) .ctors)
252b5132 3701@end smallexample
765b7cbe
JB
3702will cause all .ctors sections from all files except @file{crtend.o} and
3703@file{otherfile.o} to be included.
252b5132
RH
3704
3705There are two ways to include more than one section:
3706@smallexample
3707*(.text .rdata)
3708*(.text) *(.rdata)
3709@end smallexample
3710@noindent
3711The difference between these is the order in which the @samp{.text} and
3712@samp{.rdata} input sections will appear in the output section. In the
b6bf44ba
AM
3713first example, they will be intermingled, appearing in the same order as
3714they are found in the linker input. In the second example, all
252b5132
RH
3715@samp{.text} input sections will appear first, followed by all
3716@samp{.rdata} input sections.
3717
3718You can specify a file name to include sections from a particular file.
3719You would do this if one or more of your files contain special data that
3720needs to be at a particular location in memory. For example:
3721@smallexample
3722data.o(.data)
3723@end smallexample
3724
967928e9
AM
3725You can also specify files within archives by writing a pattern
3726matching the archive, a colon, then the pattern matching the file,
3727with no whitespace around the colon.
3728
3729@table @samp
3730@item archive:file
3731matches file within archive
3732@item archive:
3733matches the whole archive
3734@item :file
3735matches file but not one in an archive
3736@end table
3737
3738Either one or both of @samp{archive} and @samp{file} can contain shell
3739wildcards. On DOS based file systems, the linker will assume that a
3740single letter followed by a colon is a drive specifier, so
3741@samp{c:myfile.o} is a simple file specification, not @samp{myfile.o}
3742within an archive called @samp{c}. @samp{archive:file} filespecs may
3743also be used within an @code{EXCLUDE_FILE} list, but may not appear in
3744other linker script contexts. For instance, you cannot extract a file
3745from an archive by using @samp{archive:file} in an @code{INPUT}
3746command.
3747
252b5132
RH
3748If you use a file name without a list of sections, then all sections in
3749the input file will be included in the output section. This is not
3750commonly done, but it may by useful on occasion. For example:
3751@smallexample
3752data.o
3753@end smallexample
3754
967928e9
AM
3755When you use a file name which is not an @samp{archive:file} specifier
3756and does not contain any wild card
252b5132
RH
3757characters, the linker will first see if you also specified the file
3758name on the linker command line or in an @code{INPUT} command. If you
3759did not, the linker will attempt to open the file as an input file, as
3760though it appeared on the command line. Note that this differs from an
3761@code{INPUT} command, because the linker will not search for the file in
3762the archive search path.
3763
3764@node Input Section Wildcards
36f63dca 3765@subsubsection Input Section Wildcard Patterns
252b5132
RH
3766@cindex input section wildcards
3767@cindex wildcard file name patterns
3768@cindex file name wildcard patterns
3769@cindex section name wildcard patterns
3770In an input section description, either the file name or the section
3771name or both may be wildcard patterns.
3772
3773The file name of @samp{*} seen in many examples is a simple wildcard
3774pattern for the file name.
3775
3776The wildcard patterns are like those used by the Unix shell.
3777
3778@table @samp
3779@item *
3780matches any number of characters
3781@item ?
3782matches any single character
3783@item [@var{chars}]
3784matches a single instance of any of the @var{chars}; the @samp{-}
3785character may be used to specify a range of characters, as in
3786@samp{[a-z]} to match any lower case letter
3787@item \
3788quotes the following character
3789@end table
3790
3791When a file name is matched with a wildcard, the wildcard characters
3792will not match a @samp{/} character (used to separate directory names on
3793Unix). A pattern consisting of a single @samp{*} character is an
3794exception; it will always match any file name, whether it contains a
3795@samp{/} or not. In a section name, the wildcard characters will match
3796a @samp{/} character.
3797
3798File name wildcard patterns only match files which are explicitly
3799specified on the command line or in an @code{INPUT} command. The linker
3800does not search directories to expand wildcards.
3801
3802If a file name matches more than one wildcard pattern, or if a file name
3803appears explicitly and is also matched by a wildcard pattern, the linker
3804will use the first match in the linker script. For example, this
3805sequence of input section descriptions is probably in error, because the
3806@file{data.o} rule will not be used:
3807@smallexample
3808.data : @{ *(.data) @}
3809.data1 : @{ data.o(.data) @}
3810@end smallexample
3811
bcaa7b3e 3812@cindex SORT_BY_NAME
252b5132
RH
3813Normally, the linker will place files and sections matched by wildcards
3814in the order in which they are seen during the link. You can change
bcaa7b3e
L
3815this by using the @code{SORT_BY_NAME} keyword, which appears before a wildcard
3816pattern in parentheses (e.g., @code{SORT_BY_NAME(.text*)}). When the
3817@code{SORT_BY_NAME} keyword is used, the linker will sort the files or sections
252b5132
RH
3818into ascending order by name before placing them in the output file.
3819
bcaa7b3e
L
3820@cindex SORT_BY_ALIGNMENT
3821@code{SORT_BY_ALIGNMENT} is very similar to @code{SORT_BY_NAME}. The
3822difference is @code{SORT_BY_ALIGNMENT} will sort sections into
3823ascending order by alignment before placing them in the output file.
3824
3825@cindex SORT
3826@code{SORT} is an alias for @code{SORT_BY_NAME}.
3827
3828When there are nested section sorting commands in linker script, there
3829can be at most 1 level of nesting for section sorting commands.
3830
3831@enumerate
3832@item
3833@code{SORT_BY_NAME} (@code{SORT_BY_ALIGNMENT} (wildcard section pattern)).
3834It will sort the input sections by name first, then by alignment if 2
3835sections have the same name.
3836@item
3837@code{SORT_BY_ALIGNMENT} (@code{SORT_BY_NAME} (wildcard section pattern)).
3838It will sort the input sections by alignment first, then by name if 2
3839sections have the same alignment.
3840@item
c0065db7 3841@code{SORT_BY_NAME} (@code{SORT_BY_NAME} (wildcard section pattern)) is
bcaa7b3e
L
3842treated the same as @code{SORT_BY_NAME} (wildcard section pattern).
3843@item
3844@code{SORT_BY_ALIGNMENT} (@code{SORT_BY_ALIGNMENT} (wildcard section pattern))
3845is treated the same as @code{SORT_BY_ALIGNMENT} (wildcard section pattern).
3846@item
3847All other nested section sorting commands are invalid.
3848@end enumerate
3849
3850When both command line section sorting option and linker script
3851section sorting command are used, section sorting command always
3852takes precedence over the command line option.
3853
3854If the section sorting command in linker script isn't nested, the
3855command line option will make the section sorting command to be
3856treated as nested sorting command.
3857
3858@enumerate
3859@item
3860@code{SORT_BY_NAME} (wildcard section pattern ) with
3861@option{--sort-sections alignment} is equivalent to
3862@code{SORT_BY_NAME} (@code{SORT_BY_ALIGNMENT} (wildcard section pattern)).
3863@item
3864@code{SORT_BY_ALIGNMENT} (wildcard section pattern) with
3865@option{--sort-section name} is equivalent to
3866@code{SORT_BY_ALIGNMENT} (@code{SORT_BY_NAME} (wildcard section pattern)).
3867@end enumerate
3868
3869If the section sorting command in linker script is nested, the
3870command line option will be ignored.
3871
252b5132
RH
3872If you ever get confused about where input sections are going, use the
3873@samp{-M} linker option to generate a map file. The map file shows
3874precisely how input sections are mapped to output sections.
3875
3876This example shows how wildcard patterns might be used to partition
3877files. This linker script directs the linker to place all @samp{.text}
3878sections in @samp{.text} and all @samp{.bss} sections in @samp{.bss}.
3879The linker will place the @samp{.data} section from all files beginning
3880with an upper case character in @samp{.DATA}; for all other files, the
3881linker will place the @samp{.data} section in @samp{.data}.
3882@smallexample
3883@group
3884SECTIONS @{
3885 .text : @{ *(.text) @}
3886 .DATA : @{ [A-Z]*(.data) @}
3887 .data : @{ *(.data) @}
3888 .bss : @{ *(.bss) @}
3889@}
3890@end group
3891@end smallexample
3892
3893@node Input Section Common
36f63dca 3894@subsubsection Input Section for Common Symbols
252b5132
RH
3895@cindex common symbol placement
3896@cindex uninitialized data placement
3897A special notation is needed for common symbols, because in many object
3898file formats common symbols do not have a particular input section. The
3899linker treats common symbols as though they are in an input section
3900named @samp{COMMON}.
3901
3902You may use file names with the @samp{COMMON} section just as with any
3903other input sections. You can use this to place common symbols from a
3904particular input file in one section while common symbols from other
3905input files are placed in another section.
3906
3907In most cases, common symbols in input files will be placed in the
3908@samp{.bss} section in the output file. For example:
3909@smallexample
3910.bss @{ *(.bss) *(COMMON) @}
3911@end smallexample
3912
3913@cindex scommon section
3914@cindex small common symbols
3915Some object file formats have more than one type of common symbol. For
3916example, the MIPS ELF object file format distinguishes standard common
3917symbols and small common symbols. In this case, the linker will use a
3918different special section name for other types of common symbols. In
3919the case of MIPS ELF, the linker uses @samp{COMMON} for standard common
3920symbols and @samp{.scommon} for small common symbols. This permits you
3921to map the different types of common symbols into memory at different
3922locations.
3923
3924@cindex [COMMON]
3925You will sometimes see @samp{[COMMON]} in old linker scripts. This
3926notation is now considered obsolete. It is equivalent to
3927@samp{*(COMMON)}.
3928
3929@node Input Section Keep
36f63dca 3930@subsubsection Input Section and Garbage Collection
252b5132
RH
3931@cindex KEEP
3932@cindex garbage collection
3933When link-time garbage collection is in use (@samp{--gc-sections}),
a1ab1d2a 3934it is often useful to mark sections that should not be eliminated.
252b5132
RH
3935This is accomplished by surrounding an input section's wildcard entry
3936with @code{KEEP()}, as in @code{KEEP(*(.init))} or
bcaa7b3e 3937@code{KEEP(SORT_BY_NAME(*)(.ctors))}.
252b5132
RH
3938
3939@node Input Section Example
36f63dca 3940@subsubsection Input Section Example
252b5132
RH
3941The following example is a complete linker script. It tells the linker
3942to read all of the sections from file @file{all.o} and place them at the
3943start of output section @samp{outputa} which starts at location
3944@samp{0x10000}. All of section @samp{.input1} from file @file{foo.o}
3945follows immediately, in the same output section. All of section
3946@samp{.input2} from @file{foo.o} goes into output section
3947@samp{outputb}, followed by section @samp{.input1} from @file{foo1.o}.
3948All of the remaining @samp{.input1} and @samp{.input2} sections from any
3949files are written to output section @samp{outputc}.
3950
3951@smallexample
3952@group
3953SECTIONS @{
3954 outputa 0x10000 :
3955 @{
3956 all.o
3957 foo.o (.input1)
3958 @}
36f63dca
NC
3959@end group
3960@group
252b5132
RH
3961 outputb :
3962 @{
3963 foo.o (.input2)
3964 foo1.o (.input1)
3965 @}
36f63dca
NC
3966@end group
3967@group
252b5132
RH
3968 outputc :
3969 @{
3970 *(.input1)
3971 *(.input2)
3972 @}
3973@}
3974@end group
a1ab1d2a 3975@end smallexample
252b5132
RH
3976
3977@node Output Section Data
36f63dca 3978@subsection Output Section Data
252b5132
RH
3979@cindex data
3980@cindex section data
3981@cindex output section data
3982@kindex BYTE(@var{expression})
3983@kindex SHORT(@var{expression})
3984@kindex LONG(@var{expression})
3985@kindex QUAD(@var{expression})
3986@kindex SQUAD(@var{expression})
3987You can include explicit bytes of data in an output section by using
3988@code{BYTE}, @code{SHORT}, @code{LONG}, @code{QUAD}, or @code{SQUAD} as
3989an output section command. Each keyword is followed by an expression in
3990parentheses providing the value to store (@pxref{Expressions}). The
3991value of the expression is stored at the current value of the location
3992counter.
3993
3994The @code{BYTE}, @code{SHORT}, @code{LONG}, and @code{QUAD} commands
3995store one, two, four, and eight bytes (respectively). After storing the
3996bytes, the location counter is incremented by the number of bytes
3997stored.
3998
3999For example, this will store the byte 1 followed by the four byte value
4000of the symbol @samp{addr}:
4001@smallexample
4002BYTE(1)
4003LONG(addr)
4004@end smallexample
4005
4006When using a 64 bit host or target, @code{QUAD} and @code{SQUAD} are the
4007same; they both store an 8 byte, or 64 bit, value. When both host and
4008target are 32 bits, an expression is computed as 32 bits. In this case
4009@code{QUAD} stores a 32 bit value zero extended to 64 bits, and
4010@code{SQUAD} stores a 32 bit value sign extended to 64 bits.
4011
4012If the object file format of the output file has an explicit endianness,
4013which is the normal case, the value will be stored in that endianness.
4014When the object file format does not have an explicit endianness, as is
4015true of, for example, S-records, the value will be stored in the
4016endianness of the first input object file.
4017
36f63dca 4018Note---these commands only work inside a section description and not
2b5fc1f5
NC
4019between them, so the following will produce an error from the linker:
4020@smallexample
4021SECTIONS @{@ .text : @{@ *(.text) @}@ LONG(1) .data : @{@ *(.data) @}@ @}@
4022@end smallexample
4023whereas this will work:
4024@smallexample
4025SECTIONS @{@ .text : @{@ *(.text) ; LONG(1) @}@ .data : @{@ *(.data) @}@ @}@
4026@end smallexample
4027
252b5132
RH
4028@kindex FILL(@var{expression})
4029@cindex holes, filling
4030@cindex unspecified memory
4031You may use the @code{FILL} command to set the fill pattern for the
4032current section. It is followed by an expression in parentheses. Any
4033otherwise unspecified regions of memory within the section (for example,
4034gaps left due to the required alignment of input sections) are filled
a139d329 4035with the value of the expression, repeated as
252b5132
RH
4036necessary. A @code{FILL} statement covers memory locations after the
4037point at which it occurs in the section definition; by including more
4038than one @code{FILL} statement, you can have different fill patterns in
4039different parts of an output section.
4040
4041This example shows how to fill unspecified regions of memory with the
563e308f 4042value @samp{0x90}:
252b5132 4043@smallexample
563e308f 4044FILL(0x90909090)
252b5132
RH
4045@end smallexample
4046
4047The @code{FILL} command is similar to the @samp{=@var{fillexp}} output
9673c93c 4048section attribute, but it only affects the
252b5132
RH
4049part of the section following the @code{FILL} command, rather than the
4050entire section. If both are used, the @code{FILL} command takes
9673c93c 4051precedence. @xref{Output Section Fill}, for details on the fill
a139d329 4052expression.
252b5132
RH
4053
4054@node Output Section Keywords
36f63dca 4055@subsection Output Section Keywords
252b5132
RH
4056There are a couple of keywords which can appear as output section
4057commands.
4058
4059@table @code
4060@kindex CREATE_OBJECT_SYMBOLS
4061@cindex input filename symbols
4062@cindex filename symbols
4063@item CREATE_OBJECT_SYMBOLS
4064The command tells the linker to create a symbol for each input file.
4065The name of each symbol will be the name of the corresponding input
4066file. The section of each symbol will be the output section in which
4067the @code{CREATE_OBJECT_SYMBOLS} command appears.
4068
4069This is conventional for the a.out object file format. It is not
4070normally used for any other object file format.
4071
4072@kindex CONSTRUCTORS
4073@cindex C++ constructors, arranging in link
4074@cindex constructors, arranging in link
4075@item CONSTRUCTORS
4076When linking using the a.out object file format, the linker uses an
4077unusual set construct to support C++ global constructors and
4078destructors. When linking object file formats which do not support
4079arbitrary sections, such as ECOFF and XCOFF, the linker will
4080automatically recognize C++ global constructors and destructors by name.
4081For these object file formats, the @code{CONSTRUCTORS} command tells the
4082linker to place constructor information in the output section where the
4083@code{CONSTRUCTORS} command appears. The @code{CONSTRUCTORS} command is
4084ignored for other object file formats.
4085
4086The symbol @w{@code{__CTOR_LIST__}} marks the start of the global
7e69709c
AM
4087constructors, and the symbol @w{@code{__CTOR_END__}} marks the end.
4088Similarly, @w{@code{__DTOR_LIST__}} and @w{@code{__DTOR_END__}} mark
4089the start and end of the global destructors. The
252b5132
RH
4090first word in the list is the number of entries, followed by the address
4091of each constructor or destructor, followed by a zero word. The
4092compiler must arrange to actually run the code. For these object file
4093formats @sc{gnu} C++ normally calls constructors from a subroutine
4094@code{__main}; a call to @code{__main} is automatically inserted into
4095the startup code for @code{main}. @sc{gnu} C++ normally runs
4096destructors either by using @code{atexit}, or directly from the function
4097@code{exit}.
4098
4099For object file formats such as @code{COFF} or @code{ELF} which support
4100arbitrary section names, @sc{gnu} C++ will normally arrange to put the
4101addresses of global constructors and destructors into the @code{.ctors}
4102and @code{.dtors} sections. Placing the following sequence into your
4103linker script will build the sort of table which the @sc{gnu} C++
4104runtime code expects to see.
4105
4106@smallexample
4107 __CTOR_LIST__ = .;
4108 LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
4109 *(.ctors)
4110 LONG(0)
4111 __CTOR_END__ = .;
4112 __DTOR_LIST__ = .;
4113 LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
4114 *(.dtors)
4115 LONG(0)
4116 __DTOR_END__ = .;
4117@end smallexample
4118
4119If you are using the @sc{gnu} C++ support for initialization priority,
4120which provides some control over the order in which global constructors
4121are run, you must sort the constructors at link time to ensure that they
4122are executed in the correct order. When using the @code{CONSTRUCTORS}
bcaa7b3e
L
4123command, use @samp{SORT_BY_NAME(CONSTRUCTORS)} instead. When using the
4124@code{.ctors} and @code{.dtors} sections, use @samp{*(SORT_BY_NAME(.ctors))} and
4125@samp{*(SORT_BY_NAME(.dtors))} instead of just @samp{*(.ctors)} and
252b5132
RH
4126@samp{*(.dtors)}.
4127
4128Normally the compiler and linker will handle these issues automatically,
4129and you will not need to concern yourself with them. However, you may
4130need to consider this if you are using C++ and writing your own linker
4131scripts.
4132
4133@end table
4134
4135@node Output Section Discarding
36f63dca 4136@subsection Output Section Discarding
252b5132
RH
4137@cindex discarding sections
4138@cindex sections, discarding
4139@cindex removing sections
74541ad4
AM
4140The linker will not create output sections with no contents. This is
4141for convenience when referring to input sections that may or may not
4142be present in any of the input files. For example:
252b5132 4143@smallexample
49c13adb 4144.foo : @{ *(.foo) @}
252b5132
RH
4145@end smallexample
4146@noindent
4147will only create a @samp{.foo} section in the output file if there is a
74541ad4
AM
4148@samp{.foo} section in at least one input file, and if the input
4149sections are not all empty. Other link script directives that allocate
4150space in an output section will also create the output section.
4151
a0976ea4 4152The linker will ignore address assignments (@pxref{Output Section Address})
74541ad4
AM
4153on discarded output sections, except when the linker script defines
4154symbols in the output section. In that case the linker will obey
a0976ea4
AM
4155the address assignments, possibly advancing dot even though the
4156section is discarded.
252b5132
RH
4157
4158@cindex /DISCARD/
4159The special output section name @samp{/DISCARD/} may be used to discard
4160input sections. Any input sections which are assigned to an output
4161section named @samp{/DISCARD/} are not included in the output file.
4162
4163@node Output Section Attributes
36f63dca 4164@subsection Output Section Attributes
252b5132
RH
4165@cindex output section attributes
4166We showed above that the full description of an output section looked
4167like this:
0c71d759 4168
252b5132 4169@smallexample
a1ab1d2a 4170@group
7e7d5768 4171@var{section} [@var{address}] [(@var{type})] :
0c71d759
NC
4172 [AT(@var{lma})]
4173 [ALIGN(@var{section_align})]
4174 [SUBALIGN(@var{subsection_align})]
4175 [@var{constraint}]
252b5132
RH
4176 @{
4177 @var{output-section-command}
4178 @var{output-section-command}
4179 @dots{}
562d3460 4180 @} [>@var{region}] [AT>@var{lma_region}] [:@var{phdr} :@var{phdr} @dots{}] [=@var{fillexp}]
252b5132
RH
4181@end group
4182@end smallexample
0c71d759 4183
252b5132
RH
4184We've already described @var{section}, @var{address}, and
4185@var{output-section-command}. In this section we will describe the
4186remaining section attributes.
4187
a1ab1d2a 4188@menu
252b5132
RH
4189* Output Section Type:: Output section type
4190* Output Section LMA:: Output section LMA
bbf115d3 4191* Forced Output Alignment:: Forced Output Alignment
7e7d5768 4192* Forced Input Alignment:: Forced Input Alignment
0c71d759 4193* Output Section Constraint:: Output section constraint
252b5132
RH
4194* Output Section Region:: Output section region
4195* Output Section Phdr:: Output section phdr
4196* Output Section Fill:: Output section fill
4197@end menu
4198
4199@node Output Section Type
36f63dca 4200@subsubsection Output Section Type
252b5132
RH
4201Each output section may have a type. The type is a keyword in
4202parentheses. The following types are defined:
4203
4204@table @code
4205@item NOLOAD
4206The section should be marked as not loadable, so that it will not be
4207loaded into memory when the program is run.
4208@item DSECT
4209@itemx COPY
4210@itemx INFO
4211@itemx OVERLAY
4212These type names are supported for backward compatibility, and are
4213rarely used. They all have the same effect: the section should be
4214marked as not allocatable, so that no memory is allocated for the
4215section when the program is run.
4216@end table
4217
4218@kindex NOLOAD
4219@cindex prevent unnecessary loading
4220@cindex loading, preventing
4221The linker normally sets the attributes of an output section based on
4222the input sections which map into it. You can override this by using
4223the section type. For example, in the script sample below, the
4224@samp{ROM} section is addressed at memory location @samp{0} and does not
4225need to be loaded when the program is run. The contents of the
4226@samp{ROM} section will appear in the linker output file as usual.
4227@smallexample
4228@group
4229SECTIONS @{
4230 ROM 0 (NOLOAD) : @{ @dots{} @}
4231 @dots{}
4232@}
4233@end group
4234@end smallexample
4235
4236@node Output Section LMA
36f63dca 4237@subsubsection Output Section LMA
562d3460 4238@kindex AT>@var{lma_region}
252b5132
RH
4239@kindex AT(@var{lma})
4240@cindex load address
4241@cindex section load address
4242Every section has a virtual address (VMA) and a load address (LMA); see
4243@ref{Basic Script Concepts}. The address expression which may appear in
4244an output section description sets the VMA (@pxref{Output Section
4245Address}).
4246
dc0b6aa0
AM
4247The expression @var{lma} that follows the @code{AT} keyword specifies
4248the load address of the section.
6bdafbeb
NC
4249
4250Alternatively, with @samp{AT>@var{lma_region}} expression, you may
4251specify a memory region for the section's load address. @xref{MEMORY}.
4252Note that if the section has not had a VMA assigned to it then the
4253linker will use the @var{lma_region} as the VMA region as well.
dc0b6aa0
AM
4254
4255If neither @code{AT} nor @code{AT>} is specified for an allocatable
4256section, the linker will set the LMA such that the difference between
4257VMA and LMA for the section is the same as the preceding output
4258section in the same region. If there is no preceding output section
4259or the section is not allocatable, the linker will set the LMA equal
4260to the VMA.
6bdafbeb 4261@xref{Output Section Region}.
252b5132
RH
4262
4263@cindex ROM initialized data
4264@cindex initialized data in ROM
4265This feature is designed to make it easy to build a ROM image. For
4266example, the following linker script creates three output sections: one
4267called @samp{.text}, which starts at @code{0x1000}, one called
4268@samp{.mdata}, which is loaded at the end of the @samp{.text} section
4269even though its VMA is @code{0x2000}, and one called @samp{.bss} to hold
4270uninitialized data at address @code{0x3000}. The symbol @code{_data} is
4271defined with the value @code{0x2000}, which shows that the location
4272counter holds the VMA value, not the LMA value.
4273
4274@smallexample
4275@group
4276SECTIONS
4277 @{
4278 .text 0x1000 : @{ *(.text) _etext = . ; @}
a1ab1d2a 4279 .mdata 0x2000 :
252b5132
RH
4280 AT ( ADDR (.text) + SIZEOF (.text) )
4281 @{ _data = . ; *(.data); _edata = . ; @}
4282 .bss 0x3000 :
4283 @{ _bstart = . ; *(.bss) *(COMMON) ; _bend = . ;@}
4284@}
4285@end group
4286@end smallexample
4287
4288The run-time initialization code for use with a program generated with
4289this linker script would include something like the following, to copy
4290the initialized data from the ROM image to its runtime address. Notice
4291how this code takes advantage of the symbols defined by the linker
4292script.
4293
4294@smallexample
4295@group
4296extern char _etext, _data, _edata, _bstart, _bend;
4297char *src = &_etext;
4298char *dst = &_data;
4299
4300/* ROM has data at end of text; copy it. */
4301while (dst < &_edata) @{
4302 *dst++ = *src++;
4303@}
4304
4305/* Zero bss */
4306for (dst = &_bstart; dst< &_bend; dst++)
4307 *dst = 0;
4308@end group
4309@end smallexample
4310
bbf115d3
L
4311@node Forced Output Alignment
4312@subsubsection Forced Output Alignment
4313@kindex ALIGN(@var{section_align})
4314@cindex forcing output section alignment
4315@cindex output section alignment
7270c5ed 4316You can increase an output section's alignment by using ALIGN.
bbf115d3 4317
7e7d5768
AM
4318@node Forced Input Alignment
4319@subsubsection Forced Input Alignment
4320@kindex SUBALIGN(@var{subsection_align})
4321@cindex forcing input section alignment
4322@cindex input section alignment
4323You can force input section alignment within an output section by using
4324SUBALIGN. The value specified overrides any alignment given by input
4325sections, whether larger or smaller.
4326
0c71d759
NC
4327@node Output Section Constraint
4328@subsubsection Output Section Constraint
4329@kindex ONLY_IF_RO
4330@kindex ONLY_IF_RW
4331@cindex constraints on output sections
4332You can specify that an output section should only be created if all
4333of its input sections are read-only or all of its input sections are
4334read-write by using the keyword @code{ONLY_IF_RO} and
4335@code{ONLY_IF_RW} respectively.
4336
252b5132 4337@node Output Section Region
36f63dca 4338@subsubsection Output Section Region
252b5132
RH
4339@kindex >@var{region}
4340@cindex section, assigning to memory region
4341@cindex memory regions and sections
4342You can assign a section to a previously defined region of memory by
4343using @samp{>@var{region}}. @xref{MEMORY}.
4344
4345Here is a simple example:
4346@smallexample
4347@group
4348MEMORY @{ rom : ORIGIN = 0x1000, LENGTH = 0x1000 @}
4349SECTIONS @{ ROM : @{ *(.text) @} >rom @}
4350@end group
4351@end smallexample
4352
4353@node Output Section Phdr
36f63dca 4354@subsubsection Output Section Phdr
252b5132
RH
4355@kindex :@var{phdr}
4356@cindex section, assigning to program header
4357@cindex program headers and sections
4358You can assign a section to a previously defined program segment by
4359using @samp{:@var{phdr}}. @xref{PHDRS}. If a section is assigned to
4360one or more segments, then all subsequent allocated sections will be
4361assigned to those segments as well, unless they use an explicitly
4362@code{:@var{phdr}} modifier. You can use @code{:NONE} to tell the
4363linker to not put the section in any segment at all.
4364
4365Here is a simple example:
4366@smallexample
4367@group
4368PHDRS @{ text PT_LOAD ; @}
4369SECTIONS @{ .text : @{ *(.text) @} :text @}
4370@end group
4371@end smallexample
4372
4373@node Output Section Fill
36f63dca 4374@subsubsection Output Section Fill
252b5132
RH
4375@kindex =@var{fillexp}
4376@cindex section fill pattern
4377@cindex fill pattern, entire section
4378You can set the fill pattern for an entire section by using
4379@samp{=@var{fillexp}}. @var{fillexp} is an expression
4380(@pxref{Expressions}). Any otherwise unspecified regions of memory
4381within the output section (for example, gaps left due to the required
a139d329
AM
4382alignment of input sections) will be filled with the value, repeated as
4383necessary. If the fill expression is a simple hex number, ie. a string
9673c93c 4384of hex digit starting with @samp{0x} and without a trailing @samp{k} or @samp{M}, then
a139d329
AM
4385an arbitrarily long sequence of hex digits can be used to specify the
4386fill pattern; Leading zeros become part of the pattern too. For all
9673c93c 4387other cases, including extra parentheses or a unary @code{+}, the fill
a139d329
AM
4388pattern is the four least significant bytes of the value of the
4389expression. In all cases, the number is big-endian.
252b5132
RH
4390
4391You can also change the fill value with a @code{FILL} command in the
9673c93c 4392output section commands; (@pxref{Output Section Data}).
252b5132
RH
4393
4394Here is a simple example:
4395@smallexample
4396@group
563e308f 4397SECTIONS @{ .text : @{ *(.text) @} =0x90909090 @}
252b5132
RH
4398@end group
4399@end smallexample
4400
4401@node Overlay Description
36f63dca 4402@subsection Overlay Description
252b5132
RH
4403@kindex OVERLAY
4404@cindex overlays
4405An overlay description provides an easy way to describe sections which
4406are to be loaded as part of a single memory image but are to be run at
4407the same memory address. At run time, some sort of overlay manager will
4408copy the overlaid sections in and out of the runtime memory address as
4409required, perhaps by simply manipulating addressing bits. This approach
4410can be useful, for example, when a certain region of memory is faster
4411than another.
4412
4413Overlays are described using the @code{OVERLAY} command. The
4414@code{OVERLAY} command is used within a @code{SECTIONS} command, like an
4415output section description. The full syntax of the @code{OVERLAY}
4416command is as follows:
4417@smallexample
4418@group
4419OVERLAY [@var{start}] : [NOCROSSREFS] [AT ( @var{ldaddr} )]
4420 @{
4421 @var{secname1}
4422 @{
4423 @var{output-section-command}
4424 @var{output-section-command}
4425 @dots{}
4426 @} [:@var{phdr}@dots{}] [=@var{fill}]
4427 @var{secname2}
4428 @{
4429 @var{output-section-command}
4430 @var{output-section-command}
4431 @dots{}
4432 @} [:@var{phdr}@dots{}] [=@var{fill}]
4433 @dots{}
4434 @} [>@var{region}] [:@var{phdr}@dots{}] [=@var{fill}]
4435@end group
4436@end smallexample
4437
4438Everything is optional except @code{OVERLAY} (a keyword), and each
4439section must have a name (@var{secname1} and @var{secname2} above). The
4440section definitions within the @code{OVERLAY} construct are identical to
4441those within the general @code{SECTIONS} contruct (@pxref{SECTIONS}),
4442except that no addresses and no memory regions may be defined for
4443sections within an @code{OVERLAY}.
4444
4445The sections are all defined with the same starting address. The load
4446addresses of the sections are arranged such that they are consecutive in
4447memory starting at the load address used for the @code{OVERLAY} as a
4448whole (as with normal section definitions, the load address is optional,
4449and defaults to the start address; the start address is also optional,
4450and defaults to the current value of the location counter).
4451
4452If the @code{NOCROSSREFS} keyword is used, and there any references
4453among the sections, the linker will report an error. Since the sections
4454all run at the same address, it normally does not make sense for one
4455section to refer directly to another. @xref{Miscellaneous Commands,
4456NOCROSSREFS}.
4457
4458For each section within the @code{OVERLAY}, the linker automatically
34711ca3 4459provides two symbols. The symbol @code{__load_start_@var{secname}} is
252b5132
RH
4460defined as the starting load address of the section. The symbol
4461@code{__load_stop_@var{secname}} is defined as the final load address of
4462the section. Any characters within @var{secname} which are not legal
4463within C identifiers are removed. C (or assembler) code may use these
4464symbols to move the overlaid sections around as necessary.
4465
4466At the end of the overlay, the value of the location counter is set to
4467the start address of the overlay plus the size of the largest section.
4468
4469Here is an example. Remember that this would appear inside a
4470@code{SECTIONS} construct.
4471@smallexample
4472@group
4473 OVERLAY 0x1000 : AT (0x4000)
4474 @{
4475 .text0 @{ o1/*.o(.text) @}
4476 .text1 @{ o2/*.o(.text) @}
4477 @}
4478@end group
4479@end smallexample
4480@noindent
4481This will define both @samp{.text0} and @samp{.text1} to start at
4482address 0x1000. @samp{.text0} will be loaded at address 0x4000, and
4483@samp{.text1} will be loaded immediately after @samp{.text0}. The
34711ca3 4484following symbols will be defined if referenced: @code{__load_start_text0},
252b5132
RH
4485@code{__load_stop_text0}, @code{__load_start_text1},
4486@code{__load_stop_text1}.
4487
4488C code to copy overlay @code{.text1} into the overlay area might look
4489like the following.
4490
4491@smallexample
4492@group
4493 extern char __load_start_text1, __load_stop_text1;
4494 memcpy ((char *) 0x1000, &__load_start_text1,
4495 &__load_stop_text1 - &__load_start_text1);
4496@end group
4497@end smallexample
4498
4499Note that the @code{OVERLAY} command is just syntactic sugar, since
4500everything it does can be done using the more basic commands. The above
4501example could have been written identically as follows.
4502
4503@smallexample
4504@group
4505 .text0 0x1000 : AT (0x4000) @{ o1/*.o(.text) @}
34711ca3
AM
4506 PROVIDE (__load_start_text0 = LOADADDR (.text0));
4507 PROVIDE (__load_stop_text0 = LOADADDR (.text0) + SIZEOF (.text0));
252b5132 4508 .text1 0x1000 : AT (0x4000 + SIZEOF (.text0)) @{ o2/*.o(.text) @}
34711ca3
AM
4509 PROVIDE (__load_start_text1 = LOADADDR (.text1));
4510 PROVIDE (__load_stop_text1 = LOADADDR (.text1) + SIZEOF (.text1));
252b5132
RH
4511 . = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1));
4512@end group
4513@end smallexample
4514
4515@node MEMORY
36f63dca 4516@section MEMORY Command
252b5132
RH
4517@kindex MEMORY
4518@cindex memory regions
4519@cindex regions of memory
4520@cindex allocating memory
4521@cindex discontinuous memory
4522The linker's default configuration permits allocation of all available
4523memory. You can override this by using the @code{MEMORY} command.
4524
4525The @code{MEMORY} command describes the location and size of blocks of
4526memory in the target. You can use it to describe which memory regions
4527may be used by the linker, and which memory regions it must avoid. You
4528can then assign sections to particular memory regions. The linker will
4529set section addresses based on the memory regions, and will warn about
4530regions that become too full. The linker will not shuffle sections
4531around to fit into the available regions.
4532
4533A linker script may contain at most one use of the @code{MEMORY}
4534command. However, you can define as many blocks of memory within it as
4535you wish. The syntax is:
4536@smallexample
4537@group
a1ab1d2a 4538MEMORY
252b5132
RH
4539 @{
4540 @var{name} [(@var{attr})] : ORIGIN = @var{origin}, LENGTH = @var{len}
4541 @dots{}
4542 @}
4543@end group
4544@end smallexample
4545
4546The @var{name} is a name used in the linker script to refer to the
4547region. The region name has no meaning outside of the linker script.
4548Region names are stored in a separate name space, and will not conflict
4549with symbol names, file names, or section names. Each memory region
4a93e180
NC
4550must have a distinct name within the @code{MEMORY} command. However you can
4551add later alias names to existing memory regions with the @ref{REGION_ALIAS}
4552command.
252b5132
RH
4553
4554@cindex memory region attributes
4555The @var{attr} string is an optional list of attributes that specify
4556whether to use a particular memory region for an input section which is
4557not explicitly mapped in the linker script. As described in
4558@ref{SECTIONS}, if you do not specify an output section for some input
4559section, the linker will create an output section with the same name as
4560the input section. If you define region attributes, the linker will use
4561them to select the memory region for the output section that it creates.
4562
4563The @var{attr} string must consist only of the following characters:
4564@table @samp
4565@item R
4566Read-only section
4567@item W
4568Read/write section
4569@item X
4570Executable section
4571@item A
4572Allocatable section
4573@item I
4574Initialized section
4575@item L
4576Same as @samp{I}
4577@item !
4578Invert the sense of any of the preceding attributes
4579@end table
4580
4581If a unmapped section matches any of the listed attributes other than
4582@samp{!}, it will be placed in the memory region. The @samp{!}
4583attribute reverses this test, so that an unmapped section will be placed
4584in the memory region only if it does not match any of the listed
4585attributes.
4586
4587@kindex ORIGIN =
4588@kindex o =
4589@kindex org =
9cd6d51a
NC
4590The @var{origin} is an numerical expression for the start address of
4591the memory region. The expression must evaluate to a constant and it
4592cannot involve any symbols. The keyword @code{ORIGIN} may be
4593abbreviated to @code{org} or @code{o} (but not, for example,
4594@code{ORG}).
252b5132
RH
4595
4596@kindex LENGTH =
4597@kindex len =
4598@kindex l =
4599The @var{len} is an expression for the size in bytes of the memory
4600region. As with the @var{origin} expression, the expression must
9cd6d51a
NC
4601be numerical only and must evaluate to a constant. The keyword
4602@code{LENGTH} may be abbreviated to @code{len} or @code{l}.
252b5132
RH
4603
4604In the following example, we specify that there are two memory regions
4605available for allocation: one starting at @samp{0} for 256 kilobytes,
4606and the other starting at @samp{0x40000000} for four megabytes. The
4607linker will place into the @samp{rom} memory region every section which
4608is not explicitly mapped into a memory region, and is either read-only
4609or executable. The linker will place other sections which are not
4610explicitly mapped into a memory region into the @samp{ram} memory
4611region.
4612
4613@smallexample
4614@group
a1ab1d2a 4615MEMORY
252b5132
RH
4616 @{
4617 rom (rx) : ORIGIN = 0, LENGTH = 256K
4618 ram (!rx) : org = 0x40000000, l = 4M
4619 @}
4620@end group
4621@end smallexample
4622
4623Once you define a memory region, you can direct the linker to place
4624specific output sections into that memory region by using the
4625@samp{>@var{region}} output section attribute. For example, if you have
4626a memory region named @samp{mem}, you would use @samp{>mem} in the
4627output section definition. @xref{Output Section Region}. If no address
4628was specified for the output section, the linker will set the address to
4629the next available address within the memory region. If the combined
4630output sections directed to a memory region are too large for the
4631region, the linker will issue an error message.
4632
3ec57632 4633It is possible to access the origin and length of a memory in an
c0065db7 4634expression via the @code{ORIGIN(@var{memory})} and
3ec57632
NC
4635@code{LENGTH(@var{memory})} functions:
4636
4637@smallexample
4638@group
c0065db7 4639 _fstack = ORIGIN(ram) + LENGTH(ram) - 4;
3ec57632
NC
4640@end group
4641@end smallexample
4642
252b5132
RH
4643@node PHDRS
4644@section PHDRS Command
4645@kindex PHDRS
4646@cindex program headers
4647@cindex ELF program headers
4648@cindex program segments
4649@cindex segments, ELF
4650The ELF object file format uses @dfn{program headers}, also knows as
4651@dfn{segments}. The program headers describe how the program should be
4652loaded into memory. You can print them out by using the @code{objdump}
4653program with the @samp{-p} option.
4654
4655When you run an ELF program on a native ELF system, the system loader
4656reads the program headers in order to figure out how to load the
4657program. This will only work if the program headers are set correctly.
4658This manual does not describe the details of how the system loader
4659interprets program headers; for more information, see the ELF ABI.
4660
4661The linker will create reasonable program headers by default. However,
4662in some cases, you may need to specify the program headers more
4663precisely. You may use the @code{PHDRS} command for this purpose. When
4664the linker sees the @code{PHDRS} command in the linker script, it will
4665not create any program headers other than the ones specified.
4666
4667The linker only pays attention to the @code{PHDRS} command when
4668generating an ELF output file. In other cases, the linker will simply
4669ignore @code{PHDRS}.
4670
4671This is the syntax of the @code{PHDRS} command. The words @code{PHDRS},
4672@code{FILEHDR}, @code{AT}, and @code{FLAGS} are keywords.
4673
4674@smallexample
4675@group
4676PHDRS
4677@{
4678 @var{name} @var{type} [ FILEHDR ] [ PHDRS ] [ AT ( @var{address} ) ]
4679 [ FLAGS ( @var{flags} ) ] ;
4680@}
4681@end group
4682@end smallexample
4683
4684The @var{name} is used only for reference in the @code{SECTIONS} command
4685of the linker script. It is not put into the output file. Program
4686header names are stored in a separate name space, and will not conflict
4687with symbol names, file names, or section names. Each program header
4688must have a distinct name.
4689
4690Certain program header types describe segments of memory which the
4691system loader will load from the file. In the linker script, you
4692specify the contents of these segments by placing allocatable output
4693sections in the segments. You use the @samp{:@var{phdr}} output section
4694attribute to place a section in a particular segment. @xref{Output
4695Section Phdr}.
4696
4697It is normal to put certain sections in more than one segment. This
4698merely implies that one segment of memory contains another. You may
4699repeat @samp{:@var{phdr}}, using it once for each segment which should
4700contain the section.
4701
4702If you place a section in one or more segments using @samp{:@var{phdr}},
4703then the linker will place all subsequent allocatable sections which do
4704not specify @samp{:@var{phdr}} in the same segments. This is for
4705convenience, since generally a whole set of contiguous sections will be
4706placed in a single segment. You can use @code{:NONE} to override the
4707default segment and tell the linker to not put the section in any
4708segment at all.
4709
4710@kindex FILEHDR
4711@kindex PHDRS
4712You may use the @code{FILEHDR} and @code{PHDRS} keywords appear after
4713the program header type to further describe the contents of the segment.
4714The @code{FILEHDR} keyword means that the segment should include the ELF
4715file header. The @code{PHDRS} keyword means that the segment should
4716include the ELF program headers themselves.
4717
4718The @var{type} may be one of the following. The numbers indicate the
4719value of the keyword.
4720
4721@table @asis
4722@item @code{PT_NULL} (0)
4723Indicates an unused program header.
4724
4725@item @code{PT_LOAD} (1)
4726Indicates that this program header describes a segment to be loaded from
4727the file.
4728
4729@item @code{PT_DYNAMIC} (2)
4730Indicates a segment where dynamic linking information can be found.
4731
4732@item @code{PT_INTERP} (3)
4733Indicates a segment where the name of the program interpreter may be
4734found.
4735
4736@item @code{PT_NOTE} (4)
4737Indicates a segment holding note information.
4738
4739@item @code{PT_SHLIB} (5)
4740A reserved program header type, defined but not specified by the ELF
4741ABI.
4742
4743@item @code{PT_PHDR} (6)
4744Indicates a segment where the program headers may be found.
4745
4746@item @var{expression}
4747An expression giving the numeric type of the program header. This may
4748be used for types not defined above.
4749@end table
4750
4751You can specify that a segment should be loaded at a particular address
4752in memory by using an @code{AT} expression. This is identical to the
4753@code{AT} command used as an output section attribute (@pxref{Output
4754Section LMA}). The @code{AT} command for a program header overrides the
4755output section attribute.
4756
4757The linker will normally set the segment flags based on the sections
4758which comprise the segment. You may use the @code{FLAGS} keyword to
4759explicitly specify the segment flags. The value of @var{flags} must be
4760an integer. It is used to set the @code{p_flags} field of the program
4761header.
4762
4763Here is an example of @code{PHDRS}. This shows a typical set of program
4764headers used on a native ELF system.
4765
4766@example
4767@group
4768PHDRS
4769@{
4770 headers PT_PHDR PHDRS ;
4771 interp PT_INTERP ;
4772 text PT_LOAD FILEHDR PHDRS ;
4773 data PT_LOAD ;
4774 dynamic PT_DYNAMIC ;
4775@}
4776
4777SECTIONS
4778@{
4779 . = SIZEOF_HEADERS;
4780 .interp : @{ *(.interp) @} :text :interp
4781 .text : @{ *(.text) @} :text
4782 .rodata : @{ *(.rodata) @} /* defaults to :text */
4783 @dots{}
4784 . = . + 0x1000; /* move to a new page in memory */
4785 .data : @{ *(.data) @} :data
4786 .dynamic : @{ *(.dynamic) @} :data :dynamic
4787 @dots{}
4788@}
4789@end group
4790@end example
4791
4792@node VERSION
4793@section VERSION Command
4794@kindex VERSION @{script text@}
4795@cindex symbol versions
4796@cindex version script
4797@cindex versions of symbols
4798The linker supports symbol versions when using ELF. Symbol versions are
4799only useful when using shared libraries. The dynamic linker can use
4800symbol versions to select a specific version of a function when it runs
4801a program that may have been linked against an earlier version of the
4802shared library.
4803
4804You can include a version script directly in the main linker script, or
4805you can supply the version script as an implicit linker script. You can
4806also use the @samp{--version-script} linker option.
4807
4808The syntax of the @code{VERSION} command is simply
4809@smallexample
4810VERSION @{ version-script-commands @}
4811@end smallexample
4812
4813The format of the version script commands is identical to that used by
4814Sun's linker in Solaris 2.5. The version script defines a tree of
4815version nodes. You specify the node names and interdependencies in the
4816version script. You can specify which symbols are bound to which
4817version nodes, and you can reduce a specified set of symbols to local
4818scope so that they are not globally visible outside of the shared
4819library.
4820
4821The easiest way to demonstrate the version script language is with a few
4822examples.
4823
4824@smallexample
4825VERS_1.1 @{
4826 global:
4827 foo1;
4828 local:
a1ab1d2a
UD
4829 old*;
4830 original*;
4831 new*;
252b5132
RH
4832@};
4833
4834VERS_1.2 @{
4835 foo2;
4836@} VERS_1.1;
4837
4838VERS_2.0 @{
4839 bar1; bar2;
c0065db7 4840 extern "C++" @{
86043bbb
MM
4841 ns::*;
4842 "int f(int, double)";
c0065db7 4843 @}
252b5132
RH
4844@} VERS_1.2;
4845@end smallexample
4846
4847This example version script defines three version nodes. The first
4848version node defined is @samp{VERS_1.1}; it has no other dependencies.
4849The script binds the symbol @samp{foo1} to @samp{VERS_1.1}. It reduces
4850a number of symbols to local scope so that they are not visible outside
313e35ee
AM
4851of the shared library; this is done using wildcard patterns, so that any
4852symbol whose name begins with @samp{old}, @samp{original}, or @samp{new}
4853is matched. The wildcard patterns available are the same as those used
4854in the shell when matching filenames (also known as ``globbing'').
86043bbb
MM
4855However, if you specify the symbol name inside double quotes, then the
4856name is treated as literal, rather than as a glob pattern.
252b5132
RH
4857
4858Next, the version script defines node @samp{VERS_1.2}. This node
4859depends upon @samp{VERS_1.1}. The script binds the symbol @samp{foo2}
4860to the version node @samp{VERS_1.2}.
4861
4862Finally, the version script defines node @samp{VERS_2.0}. This node
4863depends upon @samp{VERS_1.2}. The scripts binds the symbols @samp{bar1}
4864and @samp{bar2} are bound to the version node @samp{VERS_2.0}.
4865
4866When the linker finds a symbol defined in a library which is not
4867specifically bound to a version node, it will effectively bind it to an
4868unspecified base version of the library. You can bind all otherwise
a981ed6f 4869unspecified symbols to a given version node by using @samp{global: *;}
ae5a3597
AM
4870somewhere in the version script. Note that it's slightly crazy to use
4871wildcards in a global spec except on the last version node. Global
4872wildcards elsewhere run the risk of accidentally adding symbols to the
4873set exported for an old version. That's wrong since older versions
4874ought to have a fixed set of symbols.
252b5132
RH
4875
4876The names of the version nodes have no specific meaning other than what
4877they might suggest to the person reading them. The @samp{2.0} version
4878could just as well have appeared in between @samp{1.1} and @samp{1.2}.
4879However, this would be a confusing way to write a version script.
4880
0f6bf451 4881Node name can be omitted, provided it is the only version node
6b9b879a
JJ
4882in the version script. Such version script doesn't assign any versions to
4883symbols, only selects which symbols will be globally visible out and which
4884won't.
4885
4886@smallexample
7c9c73be 4887@{ global: foo; bar; local: *; @};
9d201f2f 4888@end smallexample
6b9b879a 4889
252b5132
RH
4890When you link an application against a shared library that has versioned
4891symbols, the application itself knows which version of each symbol it
4892requires, and it also knows which version nodes it needs from each
4893shared library it is linked against. Thus at runtime, the dynamic
4894loader can make a quick check to make sure that the libraries you have
4895linked against do in fact supply all of the version nodes that the
4896application will need to resolve all of the dynamic symbols. In this
4897way it is possible for the dynamic linker to know with certainty that
4898all external symbols that it needs will be resolvable without having to
4899search for each symbol reference.
4900
4901The symbol versioning is in effect a much more sophisticated way of
4902doing minor version checking that SunOS does. The fundamental problem
4903that is being addressed here is that typically references to external
4904functions are bound on an as-needed basis, and are not all bound when
4905the application starts up. If a shared library is out of date, a
4906required interface may be missing; when the application tries to use
4907that interface, it may suddenly and unexpectedly fail. With symbol
4908versioning, the user will get a warning when they start their program if
4909the libraries being used with the application are too old.
4910
4911There are several GNU extensions to Sun's versioning approach. The
4912first of these is the ability to bind a symbol to a version node in the
4913source file where the symbol is defined instead of in the versioning
4914script. This was done mainly to reduce the burden on the library
4915maintainer. You can do this by putting something like:
4916@smallexample
4917__asm__(".symver original_foo,foo@@VERS_1.1");
4918@end smallexample
4919@noindent
4920in the C source file. This renames the function @samp{original_foo} to
4921be an alias for @samp{foo} bound to the version node @samp{VERS_1.1}.
4922The @samp{local:} directive can be used to prevent the symbol
96a94295
L
4923@samp{original_foo} from being exported. A @samp{.symver} directive
4924takes precedence over a version script.
252b5132
RH
4925
4926The second GNU extension is to allow multiple versions of the same
4927function to appear in a given shared library. In this way you can make
4928an incompatible change to an interface without increasing the major
4929version number of the shared library, while still allowing applications
4930linked against the old interface to continue to function.
4931
4932To do this, you must use multiple @samp{.symver} directives in the
4933source file. Here is an example:
4934
4935@smallexample
4936__asm__(".symver original_foo,foo@@");
4937__asm__(".symver old_foo,foo@@VERS_1.1");
4938__asm__(".symver old_foo1,foo@@VERS_1.2");
4939__asm__(".symver new_foo,foo@@@@VERS_2.0");
4940@end smallexample
4941
4942In this example, @samp{foo@@} represents the symbol @samp{foo} bound to the
4943unspecified base version of the symbol. The source file that contains this
4944example would define 4 C functions: @samp{original_foo}, @samp{old_foo},
4945@samp{old_foo1}, and @samp{new_foo}.
4946
4947When you have multiple definitions of a given symbol, there needs to be
4948some way to specify a default version to which external references to
4949this symbol will be bound. You can do this with the
4950@samp{foo@@@@VERS_2.0} type of @samp{.symver} directive. You can only
4951declare one version of a symbol as the default in this manner; otherwise
4952you would effectively have multiple definitions of the same symbol.
4953
4954If you wish to bind a reference to a specific version of the symbol
4955within the shared library, you can use the aliases of convenience
36f63dca 4956(i.e., @samp{old_foo}), or you can use the @samp{.symver} directive to
252b5132
RH
4957specifically bind to an external version of the function in question.
4958
cb840a31
L
4959You can also specify the language in the version script:
4960
4961@smallexample
4962VERSION extern "lang" @{ version-script-commands @}
4963@end smallexample
4964
c0065db7 4965The supported @samp{lang}s are @samp{C}, @samp{C++}, and @samp{Java}.
cb840a31
L
4966The linker will iterate over the list of symbols at the link time and
4967demangle them according to @samp{lang} before matching them to the
4968patterns specified in @samp{version-script-commands}.
4969
86043bbb
MM
4970Demangled names may contains spaces and other special characters. As
4971described above, you can use a glob pattern to match demangled names,
4972or you can use a double-quoted string to match the string exactly. In
4973the latter case, be aware that minor differences (such as differing
4974whitespace) between the version script and the demangler output will
4975cause a mismatch. As the exact string generated by the demangler
4976might change in the future, even if the mangled name does not, you
4977should check that all of your version directives are behaving as you
4978expect when you upgrade.
4979
252b5132
RH
4980@node Expressions
4981@section Expressions in Linker Scripts
4982@cindex expressions
4983@cindex arithmetic
4984The syntax for expressions in the linker script language is identical to
4985that of C expressions. All expressions are evaluated as integers. All
4986expressions are evaluated in the same size, which is 32 bits if both the
4987host and target are 32 bits, and is otherwise 64 bits.
4988
4989You can use and set symbol values in expressions.
4990
4991The linker defines several special purpose builtin functions for use in
4992expressions.
4993
4994@menu
4995* Constants:: Constants
0c71d759 4996* Symbolic Constants:: Symbolic constants
252b5132 4997* Symbols:: Symbol Names
ecca9871 4998* Orphan Sections:: Orphan Sections
252b5132
RH
4999* Location Counter:: The Location Counter
5000* Operators:: Operators
5001* Evaluation:: Evaluation
5002* Expression Section:: The Section of an Expression
5003* Builtin Functions:: Builtin Functions
5004@end menu
5005
5006@node Constants
5007@subsection Constants
5008@cindex integer notation
5009@cindex constants in linker scripts
5010All constants are integers.
5011
5012As in C, the linker considers an integer beginning with @samp{0} to be
5013octal, and an integer beginning with @samp{0x} or @samp{0X} to be
8a308ae8
NC
5014hexadecimal. Alternatively the linker accepts suffixes of @samp{h} or
5015@samp{H} for hexadeciaml, @samp{o} or @samp{O} for octal, @samp{b} or
5016@samp{B} for binary and @samp{d} or @samp{D} for decimal. Any integer
5017value without a prefix or a suffix is considered to be decimal.
252b5132
RH
5018
5019@cindex scaled integers
5020@cindex K and M integer suffixes
5021@cindex M and K integer suffixes
5022@cindex suffixes for integers
5023@cindex integer suffixes
5024In addition, you can use the suffixes @code{K} and @code{M} to scale a
5025constant by
5026@c TEXI2ROFF-KILL
36f63dca 5027@ifnottex
252b5132
RH
5028@c END TEXI2ROFF-KILL
5029@code{1024} or @code{1024*1024}
5030@c TEXI2ROFF-KILL
36f63dca 5031@end ifnottex
252b5132
RH
5032@tex
5033${\rm 1024}$ or ${\rm 1024}^2$
5034@end tex
5035@c END TEXI2ROFF-KILL
8a308ae8
NC
5036respectively. For example, the following
5037all refer to the same quantity:
5038
252b5132 5039@smallexample
36f63dca
NC
5040_fourk_1 = 4K;
5041_fourk_2 = 4096;
5042_fourk_3 = 0x1000;
8a308ae8 5043_fourk_4 = 10000o;
252b5132
RH
5044@end smallexample
5045
8a308ae8
NC
5046Note - the @code{K} and @code{M} suffixes cannot be used in
5047conjunction with the base suffixes mentioned above.
5048
0c71d759
NC
5049@node Symbolic Constants
5050@subsection Symbolic Constants
5051@cindex symbolic constants
5052@kindex CONSTANT
5053It is possible to refer to target specific constants via the use of
5054the @code{CONSTANT(@var{name})} operator, where @var{name} is one of:
5055
5056@table @code
5057@item MAXPAGESIZE
5058@kindex MAXPAGESIZE
5059The target's maximum page size.
5060
5061@item COMMONPAGESIZE
5062@kindex COMMONPAGESIZE
5063The target's default page size.
5064@end table
5065
5066So for example:
5067
5068@smallexample
5069 .text ALIGN (CONSTANT (MAXPAGESIZE)) : @{ *(.text) @}
5070@end smallexample
5071
5072will create a text section aligned to the largest page boundary
5073supported by the target.
5074
252b5132
RH
5075@node Symbols
5076@subsection Symbol Names
5077@cindex symbol names
5078@cindex names
5079@cindex quoted symbol names
5080@kindex "
5081Unless quoted, symbol names start with a letter, underscore, or period
5082and may include letters, digits, underscores, periods, and hyphens.
5083Unquoted symbol names must not conflict with any keywords. You can
5084specify a symbol which contains odd characters or has the same name as a
5085keyword by surrounding the symbol name in double quotes:
5086@smallexample
36f63dca
NC
5087"SECTION" = 9;
5088"with a space" = "also with a space" + 10;
252b5132
RH
5089@end smallexample
5090
5091Since symbols can contain many non-alphabetic characters, it is safest
5092to delimit symbols with spaces. For example, @samp{A-B} is one symbol,
5093whereas @samp{A - B} is an expression involving subtraction.
5094
ecca9871
L
5095@node Orphan Sections
5096@subsection Orphan Sections
5097@cindex orphan
5098Orphan sections are sections present in the input files which
5099are not explicitly placed into the output file by the linker
5100script. The linker will still copy these sections into the
5101output file, but it has to guess as to where they should be
5102placed. The linker uses a simple heuristic to do this. It
5103attempts to place orphan sections after non-orphan sections of the
5104same attribute, such as code vs data, loadable vs non-loadable, etc.
5105If there is not enough room to do this then it places
5106at the end of the file.
5107
5108For ELF targets, the attribute of the section includes section type as
5109well as section flag.
5110
41911f68 5111If an orphaned section's name is representable as a C identifier then
a61ca861 5112the linker will automatically @pxref{PROVIDE} two symbols:
41911f68
NC
5113__start_SECNAME and __end_SECNAME, where SECNAME is the name of the
5114section. These indicate the start address and end address of the
5115orphaned section respectively. Note: most section names are not
5116representable as C identifiers because they contain a @samp{.}
5117character.
5118
252b5132
RH
5119@node Location Counter
5120@subsection The Location Counter
5121@kindex .
5122@cindex dot
5123@cindex location counter
5124@cindex current output location
5125The special linker variable @dfn{dot} @samp{.} always contains the
5126current output location counter. Since the @code{.} always refers to a
5127location in an output section, it may only appear in an expression
5128within a @code{SECTIONS} command. The @code{.} symbol may appear
5129anywhere that an ordinary symbol is allowed in an expression.
5130
5131@cindex holes
5132Assigning a value to @code{.} will cause the location counter to be
5133moved. This may be used to create holes in the output section. The
dc0b6aa0
AM
5134location counter may not be moved backwards inside an output section,
5135and may not be moved backwards outside of an output section if so
5136doing creates areas with overlapping LMAs.
252b5132
RH
5137
5138@smallexample
5139SECTIONS
5140@{
5141 output :
5142 @{
5143 file1(.text)
5144 . = . + 1000;
5145 file2(.text)
5146 . += 1000;
5147 file3(.text)
563e308f 5148 @} = 0x12345678;
252b5132
RH
5149@}
5150@end smallexample
5151@noindent
5152In the previous example, the @samp{.text} section from @file{file1} is
5153located at the beginning of the output section @samp{output}. It is
5154followed by a 1000 byte gap. Then the @samp{.text} section from
5155@file{file2} appears, also with a 1000 byte gap following before the
563e308f 5156@samp{.text} section from @file{file3}. The notation @samp{= 0x12345678}
252b5132
RH
5157specifies what data to write in the gaps (@pxref{Output Section Fill}).
5158
5c6bbab8
NC
5159@cindex dot inside sections
5160Note: @code{.} actually refers to the byte offset from the start of the
5161current containing object. Normally this is the @code{SECTIONS}
69da35b5 5162statement, whose start address is 0, hence @code{.} can be used as an
5c6bbab8
NC
5163absolute address. If @code{.} is used inside a section description
5164however, it refers to the byte offset from the start of that section,
5165not an absolute address. Thus in a script like this:
5166
5167@smallexample
5168SECTIONS
5169@{
5170 . = 0x100
5171 .text: @{
5172 *(.text)
5173 . = 0x200
5174 @}
5175 . = 0x500
5176 .data: @{
5177 *(.data)
5178 . += 0x600
5179 @}
5180@}
5181@end smallexample
5182
5183The @samp{.text} section will be assigned a starting address of 0x100
5184and a size of exactly 0x200 bytes, even if there is not enough data in
5185the @samp{.text} input sections to fill this area. (If there is too
5186much data, an error will be produced because this would be an attempt to
5187move @code{.} backwards). The @samp{.data} section will start at 0x500
5188and it will have an extra 0x600 bytes worth of space after the end of
5189the values from the @samp{.data} input sections and before the end of
5190the @samp{.data} output section itself.
5191
b5666f2f
AM
5192@cindex dot outside sections
5193Setting symbols to the value of the location counter outside of an
5194output section statement can result in unexpected values if the linker
5195needs to place orphan sections. For example, given the following:
5196
5197@smallexample
5198SECTIONS
5199@{
5200 start_of_text = . ;
5201 .text: @{ *(.text) @}
5202 end_of_text = . ;
5203
5204 start_of_data = . ;
5205 .data: @{ *(.data) @}
5206 end_of_data = . ;
5207@}
5208@end smallexample
5209
5210If the linker needs to place some input section, e.g. @code{.rodata},
5211not mentioned in the script, it might choose to place that section
5212between @code{.text} and @code{.data}. You might think the linker
5213should place @code{.rodata} on the blank line in the above script, but
5214blank lines are of no particular significance to the linker. As well,
5215the linker doesn't associate the above symbol names with their
5216sections. Instead, it assumes that all assignments or other
5217statements belong to the previous output section, except for the
5218special case of an assignment to @code{.}. I.e., the linker will
5219place the orphan @code{.rodata} section as if the script was written
5220as follows:
5221
5222@smallexample
5223SECTIONS
5224@{
5225 start_of_text = . ;
5226 .text: @{ *(.text) @}
5227 end_of_text = . ;
5228
5229 start_of_data = . ;
5230 .rodata: @{ *(.rodata) @}
5231 .data: @{ *(.data) @}
5232 end_of_data = . ;
5233@}
5234@end smallexample
5235
5236This may or may not be the script author's intention for the value of
5237@code{start_of_data}. One way to influence the orphan section
5238placement is to assign the location counter to itself, as the linker
5239assumes that an assignment to @code{.} is setting the start address of
5240a following output section and thus should be grouped with that
5241section. So you could write:
5242
5243@smallexample
5244SECTIONS
5245@{
5246 start_of_text = . ;
5247 .text: @{ *(.text) @}
5248 end_of_text = . ;
5249
5250 . = . ;
5251 start_of_data = . ;
5252 .data: @{ *(.data) @}
5253 end_of_data = . ;
5254@}
5255@end smallexample
5256
5257Now, the orphan @code{.rodata} section will be placed between
5258@code{end_of_text} and @code{start_of_data}.
5259
252b5132
RH
5260@need 2000
5261@node Operators
5262@subsection Operators
5263@cindex operators for arithmetic
5264@cindex arithmetic operators
5265@cindex precedence in expressions
5266The linker recognizes the standard C set of arithmetic operators, with
5267the standard bindings and precedence levels:
5268@c TEXI2ROFF-KILL
36f63dca 5269@ifnottex
252b5132
RH
5270@c END TEXI2ROFF-KILL
5271@smallexample
5272precedence associativity Operators Notes
5273(highest)
52741 left ! - ~ (1)
52752 left * / %
52763 left + -
52774 left >> <<
52785 left == != > < <= >=
52796 left &
52807 left |
52818 left &&
52829 left ||
528310 right ? :
528411 right &= += -= *= /= (2)
5285(lowest)
5286@end smallexample
5287Notes:
a1ab1d2a 5288(1) Prefix operators
252b5132
RH
5289(2) @xref{Assignments}.
5290@c TEXI2ROFF-KILL
36f63dca 5291@end ifnottex
252b5132
RH
5292@tex
5293\vskip \baselineskip
5294%"lispnarrowing" is the extra indent used generally for smallexample
5295\hskip\lispnarrowing\vbox{\offinterlineskip
5296\hrule
5297\halign
5298{\vrule#&\strut\hfil\ #\ \hfil&\vrule#&\strut\hfil\ #\ \hfil&\vrule#&\strut\hfil\ {\tt #}\ \hfil&\vrule#\cr
5299height2pt&\omit&&\omit&&\omit&\cr
5300&Precedence&& Associativity &&{\rm Operators}&\cr
5301height2pt&\omit&&\omit&&\omit&\cr
5302\noalign{\hrule}
5303height2pt&\omit&&\omit&&\omit&\cr
5304&highest&&&&&\cr
5305% '176 is tilde, '~' in tt font
a1ab1d2a 5306&1&&left&&\qquad- \char'176\ !\qquad\dag&\cr
252b5132
RH
5307&2&&left&&* / \%&\cr
5308&3&&left&&+ -&\cr
5309&4&&left&&>> <<&\cr
5310&5&&left&&== != > < <= >=&\cr
5311&6&&left&&\&&\cr
5312&7&&left&&|&\cr
5313&8&&left&&{\&\&}&\cr
5314&9&&left&&||&\cr
5315&10&&right&&? :&\cr
5316&11&&right&&\qquad\&= += -= *= /=\qquad\ddag&\cr
5317&lowest&&&&&\cr
5318height2pt&\omit&&\omit&&\omit&\cr}
5319\hrule}
5320@end tex
5321@iftex
5322{
5323@obeylines@parskip=0pt@parindent=0pt
5324@dag@quad Prefix operators.
5325@ddag@quad @xref{Assignments}.
5326}
5327@end iftex
5328@c END TEXI2ROFF-KILL
5329
5330@node Evaluation
5331@subsection Evaluation
5332@cindex lazy evaluation
5333@cindex expression evaluation order
5334The linker evaluates expressions lazily. It only computes the value of
5335an expression when absolutely necessary.
5336
5337The linker needs some information, such as the value of the start
5338address of the first section, and the origins and lengths of memory
5339regions, in order to do any linking at all. These values are computed
5340as soon as possible when the linker reads in the linker script.
5341
5342However, other values (such as symbol values) are not known or needed
5343until after storage allocation. Such values are evaluated later, when
5344other information (such as the sizes of output sections) is available
5345for use in the symbol assignment expression.
5346
5347The sizes of sections cannot be known until after allocation, so
5348assignments dependent upon these are not performed until after
5349allocation.
5350
5351Some expressions, such as those depending upon the location counter
5352@samp{.}, must be evaluated during section allocation.
5353
5354If the result of an expression is required, but the value is not
5355available, then an error results. For example, a script like the
5356following
5357@smallexample
5358@group
5359SECTIONS
5360 @{
a1ab1d2a 5361 .text 9+this_isnt_constant :
252b5132
RH
5362 @{ *(.text) @}
5363 @}
5364@end group
5365@end smallexample
5366@noindent
5367will cause the error message @samp{non constant expression for initial
5368address}.
5369
5370@node Expression Section
5371@subsection The Section of an Expression
5372@cindex expression sections
5373@cindex absolute expressions
5374@cindex relative expressions
5375@cindex absolute and relocatable symbols
5376@cindex relocatable and absolute symbols
5377@cindex symbols, relocatable and absolute
5378When the linker evaluates an expression, the result is either absolute
5379or relative to some section. A relative expression is expressed as a
5380fixed offset from the base of a section.
5381
5382The position of the expression within the linker script determines
5383whether it is absolute or relative. An expression which appears within
5384an output section definition is relative to the base of the output
5385section. An expression which appears elsewhere will be absolute.
5386
5387A symbol set to a relative expression will be relocatable if you request
5388relocatable output using the @samp{-r} option. That means that a
5389further link operation may change the value of the symbol. The symbol's
5390section will be the section of the relative expression.
5391
5392A symbol set to an absolute expression will retain the same value
5393through any further link operation. The symbol will be absolute, and
5394will not have any particular associated section.
5395
5396You can use the builtin function @code{ABSOLUTE} to force an expression
5397to be absolute when it would otherwise be relative. For example, to
5398create an absolute symbol set to the address of the end of the output
5399section @samp{.data}:
5400@smallexample
5401SECTIONS
5402 @{
5403 .data : @{ *(.data) _edata = ABSOLUTE(.); @}
5404 @}
5405@end smallexample
5406@noindent
5407If @samp{ABSOLUTE} were not used, @samp{_edata} would be relative to the
5408@samp{.data} section.
5409
5410@node Builtin Functions
5411@subsection Builtin Functions
5412@cindex functions in expressions
5413The linker script language includes a number of builtin functions for
5414use in linker script expressions.
5415
5416@table @code
5417@item ABSOLUTE(@var{exp})
5418@kindex ABSOLUTE(@var{exp})
5419@cindex expression, absolute
5420Return the absolute (non-relocatable, as opposed to non-negative) value
5421of the expression @var{exp}. Primarily useful to assign an absolute
5422value to a symbol within a section definition, where symbol values are
5423normally section relative. @xref{Expression Section}.
5424
5425@item ADDR(@var{section})
5426@kindex ADDR(@var{section})
5427@cindex section address in expression
5428Return the absolute address (the VMA) of the named @var{section}. Your
5429script must previously have defined the location of that section. In
5430the following example, @code{symbol_1} and @code{symbol_2} are assigned
5431identical values:
5432@smallexample
5433@group
5434SECTIONS @{ @dots{}
5435 .output1 :
a1ab1d2a 5436 @{
252b5132
RH
5437 start_of_output_1 = ABSOLUTE(.);
5438 @dots{}
5439 @}
5440 .output :
5441 @{
5442 symbol_1 = ADDR(.output1);
5443 symbol_2 = start_of_output_1;
5444 @}
5445@dots{} @}
5446@end group
5447@end smallexample
5448
876f4090
NS
5449@item ALIGN(@var{align})
5450@itemx ALIGN(@var{exp},@var{align})
5451@kindex ALIGN(@var{align})
5452@kindex ALIGN(@var{exp},@var{align})
252b5132
RH
5453@cindex round up location counter
5454@cindex align location counter
876f4090
NS
5455@cindex round up expression
5456@cindex align expression
5457Return the location counter (@code{.}) or arbitrary expression aligned
5458to the next @var{align} boundary. The single operand @code{ALIGN}
5459doesn't change the value of the location counter---it just does
5460arithmetic on it. The two operand @code{ALIGN} allows an arbitrary
5461expression to be aligned upwards (@code{ALIGN(@var{align})} is
5462equivalent to @code{ALIGN(., @var{align})}).
5463
5464Here is an example which aligns the output @code{.data} section to the
5465next @code{0x2000} byte boundary after the preceding section and sets a
5466variable within the section to the next @code{0x8000} boundary after the
5467input sections:
252b5132
RH
5468@smallexample
5469@group
5470SECTIONS @{ @dots{}
5471 .data ALIGN(0x2000): @{
5472 *(.data)
5473 variable = ALIGN(0x8000);
5474 @}
5475@dots{} @}
5476@end group
5477@end smallexample
5478@noindent
5479The first use of @code{ALIGN} in this example specifies the location of
5480a section because it is used as the optional @var{address} attribute of
5481a section definition (@pxref{Output Section Address}). The second use
5482of @code{ALIGN} is used to defines the value of a symbol.
5483
5484The builtin function @code{NEXT} is closely related to @code{ALIGN}.
5485
362c1d1a
NS
5486@item ALIGNOF(@var{section})
5487@kindex ALIGNOF(@var{section})
5488@cindex section alignment
5489Return the alignment in bytes of the named @var{section}, if that section has
5490been allocated. If the section has not been allocated when this is
5491evaluated, the linker will report an error. In the following example,
5492the alignment of the @code{.output} section is stored as the first
5493value in that section.
5494@smallexample
5495@group
5496SECTIONS@{ @dots{}
5497 .output @{
5498 LONG (ALIGNOF (.output))
5499 @dots{}
5500 @}
5501@dots{} @}
5502@end group
5503@end smallexample
5504
252b5132
RH
5505@item BLOCK(@var{exp})
5506@kindex BLOCK(@var{exp})
5507This is a synonym for @code{ALIGN}, for compatibility with older linker
5508scripts. It is most often seen when setting the address of an output
5509section.
5510
2d20f7bf
JJ
5511@item DATA_SEGMENT_ALIGN(@var{maxpagesize}, @var{commonpagesize})
5512@kindex DATA_SEGMENT_ALIGN(@var{maxpagesize}, @var{commonpagesize})
5513This is equivalent to either
5514@smallexample
5515(ALIGN(@var{maxpagesize}) + (. & (@var{maxpagesize} - 1)))
5516@end smallexample
5517or
5518@smallexample
5519(ALIGN(@var{maxpagesize}) + (. & (@var{maxpagesize} - @var{commonpagesize})))
5520@end smallexample
5521@noindent
5522depending on whether the latter uses fewer @var{commonpagesize} sized pages
5523for the data segment (area between the result of this expression and
5524@code{DATA_SEGMENT_END}) than the former or not.
5525If the latter form is used, it means @var{commonpagesize} bytes of runtime
5526memory will be saved at the expense of up to @var{commonpagesize} wasted
5527bytes in the on-disk file.
5528
5529This expression can only be used directly in @code{SECTIONS} commands, not in
5530any output section descriptions and only once in the linker script.
5531@var{commonpagesize} should be less or equal to @var{maxpagesize} and should
5532be the system page size the object wants to be optimized for (while still
5533working on system page sizes up to @var{maxpagesize}).
5534
5535@noindent
5536Example:
5537@smallexample
5538 . = DATA_SEGMENT_ALIGN(0x10000, 0x2000);
5539@end smallexample
5540
5541@item DATA_SEGMENT_END(@var{exp})
5542@kindex DATA_SEGMENT_END(@var{exp})
5543This defines the end of data segment for @code{DATA_SEGMENT_ALIGN}
5544evaluation purposes.
5545
5546@smallexample
5547 . = DATA_SEGMENT_END(.);
5548@end smallexample
5549
a4f5ad88
JJ
5550@item DATA_SEGMENT_RELRO_END(@var{offset}, @var{exp})
5551@kindex DATA_SEGMENT_RELRO_END(@var{offset}, @var{exp})
5552This defines the end of the @code{PT_GNU_RELRO} segment when
5553@samp{-z relro} option is used. Second argument is returned.
5554When @samp{-z relro} option is not present, @code{DATA_SEGMENT_RELRO_END}
5555does nothing, otherwise @code{DATA_SEGMENT_ALIGN} is padded so that
5556@var{exp} + @var{offset} is aligned to the most commonly used page
5557boundary for particular target. If present in the linker script,
5558it must always come in between @code{DATA_SEGMENT_ALIGN} and
5559@code{DATA_SEGMENT_END}.
5560
5561@smallexample
5562 . = DATA_SEGMENT_RELRO_END(24, .);
5563@end smallexample
5564
252b5132
RH
5565@item DEFINED(@var{symbol})
5566@kindex DEFINED(@var{symbol})
5567@cindex symbol defaults
5568Return 1 if @var{symbol} is in the linker global symbol table and is
420e579c
HPN
5569defined before the statement using DEFINED in the script, otherwise
5570return 0. You can use this function to provide
252b5132
RH
5571default values for symbols. For example, the following script fragment
5572shows how to set a global symbol @samp{begin} to the first location in
5573the @samp{.text} section---but if a symbol called @samp{begin} already
5574existed, its value is preserved:
5575
5576@smallexample
5577@group
5578SECTIONS @{ @dots{}
5579 .text : @{
5580 begin = DEFINED(begin) ? begin : . ;
5581 @dots{}
5582 @}
5583 @dots{}
5584@}
5585@end group
5586@end smallexample
5587
3ec57632
NC
5588@item LENGTH(@var{memory})
5589@kindex LENGTH(@var{memory})
5590Return the length of the memory region named @var{memory}.
5591
252b5132
RH
5592@item LOADADDR(@var{section})
5593@kindex LOADADDR(@var{section})
5594@cindex section load address in expression
5595Return the absolute LMA of the named @var{section}. This is normally
5596the same as @code{ADDR}, but it may be different if the @code{AT}
5597attribute is used in the output section definition (@pxref{Output
5598Section LMA}).
5599
5600@kindex MAX
5601@item MAX(@var{exp1}, @var{exp2})
5602Returns the maximum of @var{exp1} and @var{exp2}.
5603
5604@kindex MIN
5605@item MIN(@var{exp1}, @var{exp2})
5606Returns the minimum of @var{exp1} and @var{exp2}.
5607
5608@item NEXT(@var{exp})
5609@kindex NEXT(@var{exp})
5610@cindex unallocated address, next
5611Return the next unallocated address that is a multiple of @var{exp}.
5612This function is closely related to @code{ALIGN(@var{exp})}; unless you
5613use the @code{MEMORY} command to define discontinuous memory for the
5614output file, the two functions are equivalent.
5615
3ec57632
NC
5616@item ORIGIN(@var{memory})
5617@kindex ORIGIN(@var{memory})
5618Return the origin of the memory region named @var{memory}.
5619
ba916c8a
MM
5620@item SEGMENT_START(@var{segment}, @var{default})
5621@kindex SEGMENT_START(@var{segment}, @var{default})
5622Return the base address of the named @var{segment}. If an explicit
5623value has been given for this segment (with a command-line @samp{-T}
5624option) that value will be returned; otherwise the value will be
5625@var{default}. At present, the @samp{-T} command-line option can only
5626be used to set the base address for the ``text'', ``data'', and
5627``bss'' sections, but you use @code{SEGMENT_START} with any segment
5628name.
5629
252b5132
RH
5630@item SIZEOF(@var{section})
5631@kindex SIZEOF(@var{section})
5632@cindex section size
5633Return the size in bytes of the named @var{section}, if that section has
5634been allocated. If the section has not been allocated when this is
5635evaluated, the linker will report an error. In the following example,
5636@code{symbol_1} and @code{symbol_2} are assigned identical values:
5637@smallexample
5638@group
5639SECTIONS@{ @dots{}
5640 .output @{
5641 .start = . ;
5642 @dots{}
5643 .end = . ;
5644 @}
5645 symbol_1 = .end - .start ;
5646 symbol_2 = SIZEOF(.output);
5647@dots{} @}
5648@end group
5649@end smallexample
5650
5651@item SIZEOF_HEADERS
5652@itemx sizeof_headers
5653@kindex SIZEOF_HEADERS
5654@cindex header size
5655Return the size in bytes of the output file's headers. This is
5656information which appears at the start of the output file. You can use
5657this number when setting the start address of the first section, if you
5658choose, to facilitate paging.
5659
5660@cindex not enough room for program headers
5661@cindex program headers, not enough room
5662When producing an ELF output file, if the linker script uses the
5663@code{SIZEOF_HEADERS} builtin function, the linker must compute the
5664number of program headers before it has determined all the section
5665addresses and sizes. If the linker later discovers that it needs
5666additional program headers, it will report an error @samp{not enough
5667room for program headers}. To avoid this error, you must avoid using
5668the @code{SIZEOF_HEADERS} function, or you must rework your linker
5669script to avoid forcing the linker to use additional program headers, or
5670you must define the program headers yourself using the @code{PHDRS}
5671command (@pxref{PHDRS}).
5672@end table
5673
5674@node Implicit Linker Scripts
5675@section Implicit Linker Scripts
5676@cindex implicit linker scripts
5677If you specify a linker input file which the linker can not recognize as
5678an object file or an archive file, it will try to read the file as a
5679linker script. If the file can not be parsed as a linker script, the
5680linker will report an error.
5681
5682An implicit linker script will not replace the default linker script.
5683
5684Typically an implicit linker script would contain only symbol
5685assignments, or the @code{INPUT}, @code{GROUP}, or @code{VERSION}
5686commands.
5687
5688Any input files read because of an implicit linker script will be read
5689at the position in the command line where the implicit linker script was
5690read. This can affect archive searching.
5691
5692@ifset GENERIC
5693@node Machine Dependent
5694@chapter Machine Dependent Features
5695
5696@cindex machine dependencies
ff5dcc92
SC
5697@command{ld} has additional features on some platforms; the following
5698sections describe them. Machines where @command{ld} has no additional
252b5132
RH
5699functionality are not listed.
5700
5701@menu
36f63dca
NC
5702@ifset H8300
5703* H8/300:: @command{ld} and the H8/300
5704@end ifset
5705@ifset I960
5706* i960:: @command{ld} and the Intel 960 family
5707@end ifset
5708@ifset ARM
5709* ARM:: @command{ld} and the ARM family
5710@end ifset
5711@ifset HPPA
5712* HPPA ELF32:: @command{ld} and HPPA 32-bit ELF
5713@end ifset
7fb9f789
NC
5714@ifset M68K
5715* M68K:: @command{ld} and the Motorola 68K family
5716@end ifset
3c3bdf30 5717@ifset MMIX
36f63dca 5718* MMIX:: @command{ld} and MMIX
3c3bdf30 5719@end ifset
2469cfa2 5720@ifset MSP430
36f63dca 5721* MSP430:: @command{ld} and MSP430
2469cfa2 5722@end ifset
93fd0973
SC
5723@ifset M68HC11
5724* M68HC11/68HC12:: @code{ld} and the Motorola 68HC11 and 68HC12 families
5725@end ifset
2a60a7a8
AM
5726@ifset POWERPC
5727* PowerPC ELF32:: @command{ld} and PowerPC 32-bit ELF Support
5728@end ifset
5729@ifset POWERPC64
5730* PowerPC64 ELF64:: @command{ld} and PowerPC64 64-bit ELF Support
5731@end ifset
49fa1e15
AM
5732@ifset SPU
5733* SPU ELF:: @command{ld} and SPU ELF Support
5734@end ifset
74459f0e 5735@ifset TICOFF
ff5dcc92 5736* TI COFF:: @command{ld} and TI COFF
74459f0e 5737@end ifset
2ca22b03
NC
5738@ifset WIN32
5739* WIN32:: @command{ld} and WIN32 (cygwin/mingw)
5740@end ifset
e0001a05
NC
5741@ifset XTENSA
5742* Xtensa:: @command{ld} and Xtensa Processors
5743@end ifset
252b5132
RH
5744@end menu
5745@end ifset
5746
252b5132
RH
5747@ifset H8300
5748@ifclear GENERIC
5749@raisesections
5750@end ifclear
5751
5752@node H8/300
ff5dcc92 5753@section @command{ld} and the H8/300
252b5132
RH
5754
5755@cindex H8/300 support
ff5dcc92 5756For the H8/300, @command{ld} can perform these global optimizations when
252b5132
RH
5757you specify the @samp{--relax} command-line option.
5758
5759@table @emph
5760@cindex relaxing on H8/300
5761@item relaxing address modes
ff5dcc92 5762@command{ld} finds all @code{jsr} and @code{jmp} instructions whose
252b5132
RH
5763targets are within eight bits, and turns them into eight-bit
5764program-counter relative @code{bsr} and @code{bra} instructions,
5765respectively.
5766
5767@cindex synthesizing on H8/300
5768@item synthesizing instructions
5769@c FIXME: specifically mov.b, or any mov instructions really?
ff5dcc92 5770@command{ld} finds all @code{mov.b} instructions which use the
252b5132
RH
5771sixteen-bit absolute address form, but refer to the top
5772page of memory, and changes them to use the eight-bit address form.
5773(That is: the linker turns @samp{mov.b @code{@@}@var{aa}:16} into
5774@samp{mov.b @code{@@}@var{aa}:8} whenever the address @var{aa} is in the
5775top page of memory).
1502569c
NC
5776
5777@item bit manipulation instructions
c0065db7 5778@command{ld} finds all bit manipulation instructions like @code{band, bclr,
1502569c 5779biand, bild, bior, bist, bixor, bld, bnot, bor, bset, bst, btst, bxor}
c0065db7 5780which use 32 bit and 16 bit absolute address form, but refer to the top
1502569c
NC
5781page of memory, and changes them to use the 8 bit address form.
5782(That is: the linker turns @samp{bset #xx:3,@code{@@}@var{aa}:32} into
c0065db7 5783@samp{bset #xx:3,@code{@@}@var{aa}:8} whenever the address @var{aa} is in
1502569c
NC
5784the top page of memory).
5785
5786@item system control instructions
c0065db7
RM
5787@command{ld} finds all @code{ldc.w, stc.w} instructions which use the
578832 bit absolute address form, but refer to the top page of memory, and
1502569c
NC
5789changes them to use 16 bit address form.
5790(That is: the linker turns @samp{ldc.w @code{@@}@var{aa}:32,ccr} into
c0065db7 5791@samp{ldc.w @code{@@}@var{aa}:16,ccr} whenever the address @var{aa} is in
1502569c 5792the top page of memory).
252b5132
RH
5793@end table
5794
5795@ifclear GENERIC
5796@lowersections
5797@end ifclear
5798@end ifset
5799
36f63dca 5800@ifclear GENERIC
c2dcd04e 5801@ifset Renesas
36f63dca 5802@c This stuff is pointless to say unless you're especially concerned
c2dcd04e
NC
5803@c with Renesas chips; don't enable it for generic case, please.
5804@node Renesas
5805@chapter @command{ld} and Other Renesas Chips
36f63dca 5806
c2dcd04e
NC
5807@command{ld} also supports the Renesas (formerly Hitachi) H8/300H,
5808H8/500, and SH chips. No special features, commands, or command-line
5809options are required for these chips.
36f63dca
NC
5810@end ifset
5811@end ifclear
5812
5813@ifset I960
5814@ifclear GENERIC
5815@raisesections
5816@end ifclear
5817
5818@node i960
5819@section @command{ld} and the Intel 960 Family
5820
5821@cindex i960 support
5822
5823You can use the @samp{-A@var{architecture}} command line option to
5824specify one of the two-letter names identifying members of the 960
5825family; the option specifies the desired output target, and warns of any
5826incompatible instructions in the input files. It also modifies the
5827linker's search strategy for archive libraries, to support the use of
5828libraries specific to each particular architecture, by including in the
5829search loop names suffixed with the string identifying the architecture.
5830
5831For example, if your @command{ld} command line included @w{@samp{-ACA}} as
5832well as @w{@samp{-ltry}}, the linker would look (in its built-in search
5833paths, and in any paths you specify with @samp{-L}) for a library with
5834the names
5835
5836@smallexample
5837@group
5838try
5839libtry.a
5840tryca
5841libtryca.a
5842@end group
5843@end smallexample
5844
5845@noindent
5846The first two possibilities would be considered in any event; the last
5847two are due to the use of @w{@samp{-ACA}}.
5848
5849You can meaningfully use @samp{-A} more than once on a command line, since
5850the 960 architecture family allows combination of target architectures; each
5851use will add another pair of name variants to search for when @w{@samp{-l}}
5852specifies a library.
5853
5854@cindex @option{--relax} on i960
5855@cindex relaxing on i960
5856@command{ld} supports the @samp{--relax} option for the i960 family. If
5857you specify @samp{--relax}, @command{ld} finds all @code{balx} and
5858@code{calx} instructions whose targets are within 24 bits, and turns
5859them into 24-bit program-counter relative @code{bal} and @code{cal}
5860instructions, respectively. @command{ld} also turns @code{cal}
5861instructions into @code{bal} instructions when it determines that the
5862target subroutine is a leaf routine (that is, the target subroutine does
5863not itself call any subroutines).
5864
5865@ifclear GENERIC
5866@lowersections
5867@end ifclear
5868@end ifset
5869
5870@ifset ARM
5871@ifclear GENERIC
5872@raisesections
5873@end ifclear
5874
93fd0973
SC
5875@ifset M68HC11
5876@ifclear GENERIC
5877@raisesections
5878@end ifclear
5879
5880@node M68HC11/68HC12
5881@section @command{ld} and the Motorola 68HC11 and 68HC12 families
5882
5883@cindex M68HC11 and 68HC12 support
5884
5885@subsection Linker Relaxation
5886
5887For the Motorola 68HC11, @command{ld} can perform these global
5888optimizations when you specify the @samp{--relax} command-line option.
5889
5890@table @emph
5891@cindex relaxing on M68HC11
5892@item relaxing address modes
5893@command{ld} finds all @code{jsr} and @code{jmp} instructions whose
5894targets are within eight bits, and turns them into eight-bit
5895program-counter relative @code{bsr} and @code{bra} instructions,
5896respectively.
5897
5898@command{ld} also looks at all 16-bit extended addressing modes and
5899transforms them in a direct addressing mode when the address is in
5900page 0 (between 0 and 0x0ff).
5901
5902@item relaxing gcc instruction group
5903When @command{gcc} is called with @option{-mrelax}, it can emit group
5904of instructions that the linker can optimize to use a 68HC11 direct
5905addressing mode. These instructions consists of @code{bclr} or
5906@code{bset} instructions.
5907
5908@end table
5909
5910@subsection Trampoline Generation
5911
5912@cindex trampoline generation on M68HC11
5913@cindex trampoline generation on M68HC12
5914For 68HC11 and 68HC12, @command{ld} can generate trampoline code to
5915call a far function using a normal @code{jsr} instruction. The linker
c0065db7 5916will also change the relocation to some far function to use the
93fd0973
SC
5917trampoline address instead of the function address. This is typically the
5918case when a pointer to a function is taken. The pointer will in fact
5919point to the function trampoline.
5920
5921@ifclear GENERIC
5922@lowersections
5923@end ifclear
5924@end ifset
5925
36f63dca 5926@node ARM
3674e28a 5927@section @command{ld} and the ARM family
36f63dca
NC
5928
5929@cindex ARM interworking support
5930@kindex --support-old-code
5931For the ARM, @command{ld} will generate code stubs to allow functions calls
b45619c0 5932between ARM and Thumb code. These stubs only work with code that has
36f63dca
NC
5933been compiled and assembled with the @samp{-mthumb-interwork} command
5934line option. If it is necessary to link with old ARM object files or
5935libraries, which have not been compiled with the -mthumb-interwork
5936option then the @samp{--support-old-code} command line switch should be
5937given to the linker. This will make it generate larger stub functions
5938which will work with non-interworking aware ARM code. Note, however,
5939the linker does not support generating stubs for function calls to
5940non-interworking aware Thumb code.
5941
5942@cindex thumb entry point
5943@cindex entry point, thumb
5944@kindex --thumb-entry=@var{entry}
5945The @samp{--thumb-entry} switch is a duplicate of the generic
5946@samp{--entry} switch, in that it sets the program's starting address.
5947But it also sets the bottom bit of the address, so that it can be
5948branched to using a BX instruction, and the program will start
5949executing in Thumb mode straight away.
5950
ce11ba6c
KT
5951@cindex PE import table prefixing
5952@kindex --use-nul-prefixed-import-tables
5953The @samp{--use-nul-prefixed-import-tables} switch is specifying, that
5954the import tables idata4 and idata5 have to be generated with a zero
5955elememt prefix for import libraries. This is the old style to generate
5956import tables. By default this option is turned off.
5957
e489d0ae
PB
5958@cindex BE8
5959@kindex --be8
5960The @samp{--be8} switch instructs @command{ld} to generate BE8 format
5961executables. This option is only valid when linking big-endian objects.
5962The resulting image will contain big-endian data and little-endian code.
5963
3674e28a
PB
5964@cindex TARGET1
5965@kindex --target1-rel
5966@kindex --target1-abs
5967The @samp{R_ARM_TARGET1} relocation is typically used for entries in the
5968@samp{.init_array} section. It is interpreted as either @samp{R_ARM_REL32}
5969or @samp{R_ARM_ABS32}, depending on the target. The @samp{--target1-rel}
5970and @samp{--target1-abs} switches override the default.
5971
5972@cindex TARGET2
5973@kindex --target2=@var{type}
5974The @samp{--target2=type} switch overrides the default definition of the
5975@samp{R_ARM_TARGET2} relocation. Valid values for @samp{type}, their
5976meanings, and target defaults are as follows:
5977@table @samp
5978@item rel
eeac373a
PB
5979@samp{R_ARM_REL32} (arm*-*-elf, arm*-*-eabi)
5980@item abs
5981@samp{R_ARM_ABS32} (arm*-*-symbianelf)
3674e28a
PB
5982@item got-rel
5983@samp{R_ARM_GOT_PREL} (arm*-*-linux, arm*-*-*bsd)
5984@end table
5985
319850b4
JB
5986@cindex FIX_V4BX
5987@kindex --fix-v4bx
5988The @samp{R_ARM_V4BX} relocation (defined by the ARM AAELF
5989specification) enables objects compiled for the ARMv4 architecture to be
5990interworking-safe when linked with other objects compiled for ARMv4t, but
5991also allows pure ARMv4 binaries to be built from the same ARMv4 objects.
5992
5993In the latter case, the switch @option{--fix-v4bx} must be passed to the
5994linker, which causes v4t @code{BX rM} instructions to be rewritten as
5995@code{MOV PC,rM}, since v4 processors do not have a @code{BX} instruction.
5996
5997In the former case, the switch should not be used, and @samp{R_ARM_V4BX}
5998relocations are ignored.
5999
845b51d6
PB
6000@cindex FIX_V4BX_INTERWORKING
6001@kindex --fix-v4bx-interworking
6002Replace @code{BX rM} instructions identified by @samp{R_ARM_V4BX}
6003relocations with a branch to the following veneer:
6004
6005@smallexample
6006TST rM, #1
6007MOVEQ PC, rM
6008BX Rn
6009@end smallexample
6010
6011This allows generation of libraries/applications that work on ARMv4 cores
6012and are still interworking safe. Note that the above veneer clobbers the
6013condition flags, so may cause incorrect progrm behavior in rare cases.
6014
33bfe774
JB
6015@cindex USE_BLX
6016@kindex --use-blx
6017The @samp{--use-blx} switch enables the linker to use ARM/Thumb
6018BLX instructions (available on ARMv5t and above) in various
6019situations. Currently it is used to perform calls via the PLT from Thumb
6020code using BLX rather than using BX and a mode-switching stub before
6021each PLT entry. This should lead to such calls executing slightly faster.
6022
6023This option is enabled implicitly for SymbianOS, so there is no need to
6024specify it if you are using that target.
6025
c6dd86c6
JB
6026@cindex VFP11_DENORM_FIX
6027@kindex --vfp11-denorm-fix
6028The @samp{--vfp11-denorm-fix} switch enables a link-time workaround for a
6029bug in certain VFP11 coprocessor hardware, which sometimes allows
6030instructions with denorm operands (which must be handled by support code)
6031to have those operands overwritten by subsequent instructions before
6032the support code can read the intended values.
6033
6034The bug may be avoided in scalar mode if you allow at least one
6035intervening instruction between a VFP11 instruction which uses a register
6036and another instruction which writes to the same register, or at least two
6037intervening instructions if vector mode is in use. The bug only affects
6038full-compliance floating-point mode: you do not need this workaround if
6039you are using "runfast" mode. Please contact ARM for further details.
6040
6041If you know you are using buggy VFP11 hardware, you can
6042enable this workaround by specifying the linker option
6043@samp{--vfp-denorm-fix=scalar} if you are using the VFP11 scalar
6044mode only, or @samp{--vfp-denorm-fix=vector} if you are using
6045vector mode (the latter also works for scalar code). The default is
6046@samp{--vfp-denorm-fix=none}.
6047
6048If the workaround is enabled, instructions are scanned for
6049potentially-troublesome sequences, and a veneer is created for each
6050such sequence which may trigger the erratum. The veneer consists of the
6051first instruction of the sequence and a branch back to the subsequent
6052instruction. The original instruction is then replaced with a branch to
6053the veneer. The extra cycles required to call and return from the veneer
6054are sufficient to avoid the erratum in both the scalar and vector cases.
6055
bf21ed78
MS
6056@cindex NO_ENUM_SIZE_WARNING
6057@kindex --no-enum-size-warning
726150b7 6058The @option{--no-enum-size-warning} switch prevents the linker from
bf21ed78
MS
6059warning when linking object files that specify incompatible EABI
6060enumeration size attributes. For example, with this switch enabled,
6061linking of an object file using 32-bit enumeration values with another
6062using enumeration values fitted into the smallest possible space will
6063not be diagnosed.
a9dc9481
JM
6064
6065@cindex NO_WCHAR_SIZE_WARNING
6066@kindex --no-wchar-size-warning
6067The @option{--no-wchar-size-warning} switch prevents the linker from
6068warning when linking object files that specify incompatible EABI
6069@code{wchar_t} size attributes. For example, with this switch enabled,
6070linking of an object file using 32-bit @code{wchar_t} values with another
6071using 16-bit @code{wchar_t} values will not be diagnosed.
bf21ed78 6072
726150b7
NC
6073@cindex PIC_VENEER
6074@kindex --pic-veneer
6075The @samp{--pic-veneer} switch makes the linker use PIC sequences for
6076ARM/Thumb interworking veneers, even if the rest of the binary
6077is not PIC. This avoids problems on uClinux targets where
6078@samp{--emit-relocs} is used to generate relocatable binaries.
6079
6080@cindex STUB_GROUP_SIZE
6081@kindex --stub-group-size=@var{N}
6082The linker will automatically generate and insert small sequences of
6083code into a linked ARM ELF executable whenever an attempt is made to
6084perform a function call to a symbol that is too far away. The
6085placement of these sequences of instructions - called stubs - is
6086controlled by the command line option @option{--stub-group-size=N}.
6087The placement is important because a poor choice can create a need for
6088duplicate stubs, increasing the code sizw. The linker will try to
6089group stubs together in order to reduce interruptions to the flow of
6090code, but it needs guidance as to how big these groups should be and
6091where they should be placed.
6092
6093The value of @samp{N}, the parameter to the
6094@option{--stub-group-size=} option controls where the stub groups are
07d72278 6095placed. If it is negative then all stubs are placed after the first
726150b7
NC
6096branch that needs them. If it is positive then the stubs can be
6097placed either before or after the branches that need them. If the
6098value of @samp{N} is 1 (either +1 or -1) then the linker will choose
6099exactly where to place groups of stubs, using its built in heuristics.
6100A value of @samp{N} greater than 1 (or smaller than -1) tells the
6101linker that a single group of stubs can service at most @samp{N} bytes
6102from the input sections.
6103
6104The default, if @option{--stub-group-size=} is not specified, is
6105@samp{N = +1}.
6106
1a51c1a4
NC
6107Farcalls stubs insertion is fully supported for the ARM-EABI target
6108only, because it relies on object files properties not present
6109otherwise.
6110
36f63dca
NC
6111@ifclear GENERIC
6112@lowersections
6113@end ifclear
6114@end ifset
6115
6116@ifset HPPA
6117@ifclear GENERIC
6118@raisesections
6119@end ifclear
6120
6121@node HPPA ELF32
6122@section @command{ld} and HPPA 32-bit ELF Support
6123@cindex HPPA multiple sub-space stubs
6124@kindex --multi-subspace
6125When generating a shared library, @command{ld} will by default generate
6126import stubs suitable for use with a single sub-space application.
6127The @samp{--multi-subspace} switch causes @command{ld} to generate export
6128stubs, and different (larger) import stubs suitable for use with
6129multiple sub-spaces.
6130
6131@cindex HPPA stub grouping
6132@kindex --stub-group-size=@var{N}
6133Long branch stubs and import/export stubs are placed by @command{ld} in
6134stub sections located between groups of input sections.
6135@samp{--stub-group-size} specifies the maximum size of a group of input
6136sections handled by one stub section. Since branch offsets are signed,
6137a stub section may serve two groups of input sections, one group before
6138the stub section, and one group after it. However, when using
6139conditional branches that require stubs, it may be better (for branch
6140prediction) that stub sections only serve one group of input sections.
6141A negative value for @samp{N} chooses this scheme, ensuring that
6142branches to stubs always use a negative offset. Two special values of
6143@samp{N} are recognized, @samp{1} and @samp{-1}. These both instruct
6144@command{ld} to automatically size input section groups for the branch types
6145detected, with the same behaviour regarding stub placement as other
6146positive or negative values of @samp{N} respectively.
6147
6148Note that @samp{--stub-group-size} does not split input sections. A
6149single input section larger than the group size specified will of course
6150create a larger group (of one section). If input sections are too
6151large, it may not be possible for a branch to reach its stub.
6152
6153@ifclear GENERIC
6154@lowersections
6155@end ifclear
6156@end ifset
6157
7fb9f789
NC
6158@ifset M68K
6159@ifclear GENERIC
6160@raisesections
6161@end ifclear
6162
6163@node M68K
6164@section @command{ld} and the Motorola 68K family
6165
6166@cindex Motorola 68K GOT generation
6167@kindex --got=@var{type}
6168The @samp{--got=@var{type}} option lets you choose the GOT generation scheme.
6169The choices are @samp{single}, @samp{negative}, @samp{multigot} and
6170@samp{target}. When @samp{target} is selected the linker chooses
6171the default GOT generation scheme for the current target.
6172@samp{single} tells the linker to generate a single GOT with
6173entries only at non-negative offsets.
6174@samp{negative} instructs the linker to generate a single GOT with
6175entries at both negative and positive offsets. Not all environments
6176support such GOTs.
6177@samp{multigot} allows the linker to generate several GOTs in the
6178output file. All GOT references from a single input object
6179file access the same GOT, but references from different input object
6180files might access different GOTs. Not all environments support such GOTs.
6181
6182@ifclear GENERIC
6183@lowersections
6184@end ifclear
6185@end ifset
6186
36f63dca
NC
6187@ifset MMIX
6188@ifclear GENERIC
6189@raisesections
6190@end ifclear
6191
6192@node MMIX
6193@section @code{ld} and MMIX
6194For MMIX, there is a choice of generating @code{ELF} object files or
6195@code{mmo} object files when linking. The simulator @code{mmix}
6196understands the @code{mmo} format. The binutils @code{objcopy} utility
6197can translate between the two formats.
6198
6199There is one special section, the @samp{.MMIX.reg_contents} section.
6200Contents in this section is assumed to correspond to that of global
6201registers, and symbols referring to it are translated to special symbols,
6202equal to registers. In a final link, the start address of the
6203@samp{.MMIX.reg_contents} section corresponds to the first allocated
6204global register multiplied by 8. Register @code{$255} is not included in
6205this section; it is always set to the program entry, which is at the
6206symbol @code{Main} for @code{mmo} files.
6207
7a2de473
HPN
6208Global symbols with the prefix @code{__.MMIX.start.}, for example
6209@code{__.MMIX.start..text} and @code{__.MMIX.start..data} are special.
6210The default linker script uses these to set the default start address
6211of a section.
36f63dca
NC
6212
6213Initial and trailing multiples of zero-valued 32-bit words in a section,
6214are left out from an mmo file.
6215
6216@ifclear GENERIC
6217@lowersections
6218@end ifclear
6219@end ifset
6220
6221@ifset MSP430
6222@ifclear GENERIC
6223@raisesections
6224@end ifclear
6225
6226@node MSP430
6227@section @code{ld} and MSP430
6228For the MSP430 it is possible to select the MPU architecture. The flag @samp{-m [mpu type]}
6229will select an appropriate linker script for selected MPU type. (To get a list of known MPUs
6230just pass @samp{-m help} option to the linker).
6231
6232@cindex MSP430 extra sections
6233The linker will recognize some extra sections which are MSP430 specific:
6234
6235@table @code
6236@item @samp{.vectors}
6237Defines a portion of ROM where interrupt vectors located.
6238
6239@item @samp{.bootloader}
6240Defines the bootloader portion of the ROM (if applicable). Any code
6241in this section will be uploaded to the MPU.
6242
6243@item @samp{.infomem}
6244Defines an information memory section (if applicable). Any code in
6245this section will be uploaded to the MPU.
6246
c0065db7 6247@item @samp{.infomemnobits}
36f63dca
NC
6248This is the same as the @samp{.infomem} section except that any code
6249in this section will not be uploaded to the MPU.
6250
6251@item @samp{.noinit}
6252Denotes a portion of RAM located above @samp{.bss} section.
6253
c0065db7 6254The last two sections are used by gcc.
36f63dca
NC
6255@end table
6256
6257@ifclear GENERIC
6258@lowersections
6259@end ifclear
6260@end ifset
6261
2a60a7a8
AM
6262@ifset POWERPC
6263@ifclear GENERIC
6264@raisesections
6265@end ifclear
6266
6267@node PowerPC ELF32
6268@section @command{ld} and PowerPC 32-bit ELF Support
6269@cindex PowerPC long branches
6270@kindex --relax on PowerPC
6271Branches on PowerPC processors are limited to a signed 26-bit
6272displacement, which may result in @command{ld} giving
6273@samp{relocation truncated to fit} errors with very large programs.
6274@samp{--relax} enables the generation of trampolines that can access
6275the entire 32-bit address space. These trampolines are inserted at
6276section boundaries, so may not themselves be reachable if an input
6277section exceeds 33M in size.
6278
6279@cindex PowerPC ELF32 options
6280@table @option
6281@cindex PowerPC PLT
6282@kindex --bss-plt
6283@item --bss-plt
6284Current PowerPC GCC accepts a @samp{-msecure-plt} option that
6285generates code capable of using a newer PLT and GOT layout that has
6286the security advantage of no executable section ever needing to be
6287writable and no writable section ever being executable. PowerPC
6288@command{ld} will generate this layout, including stubs to access the
6289PLT, if all input files (including startup and static libraries) were
6290compiled with @samp{-msecure-plt}. @samp{--bss-plt} forces the old
6291BSS PLT (and GOT layout) which can give slightly better performance.
6292
016687f8
AM
6293@kindex --secure-plt
6294@item --secure-plt
6295@command{ld} will use the new PLT and GOT layout if it is linking new
6296@samp{-fpic} or @samp{-fPIC} code, but does not do so automatically
6297when linking non-PIC code. This option requests the new PLT and GOT
6298layout. A warning will be given if some object file requires the old
6299style BSS PLT.
6300
2a60a7a8
AM
6301@cindex PowerPC GOT
6302@kindex --sdata-got
6303@item --sdata-got
6304The new secure PLT and GOT are placed differently relative to other
6305sections compared to older BSS PLT and GOT placement. The location of
6306@code{.plt} must change because the new secure PLT is an initialized
6307section while the old PLT is uninitialized. The reason for the
6308@code{.got} change is more subtle: The new placement allows
6309@code{.got} to be read-only in applications linked with
6310@samp{-z relro -z now}. However, this placement means that
6311@code{.sdata} cannot always be used in shared libraries, because the
6312PowerPC ABI accesses @code{.sdata} in shared libraries from the GOT
6313pointer. @samp{--sdata-got} forces the old GOT placement. PowerPC
6314GCC doesn't use @code{.sdata} in shared libraries, so this option is
6315really only useful for other compilers that may do so.
6316
6317@cindex PowerPC stub symbols
6318@kindex --emit-stub-syms
6319@item --emit-stub-syms
6320This option causes @command{ld} to label linker stubs with a local
6321symbol that encodes the stub type and destination.
6322
6323@cindex PowerPC TLS optimization
6324@kindex --no-tls-optimize
6325@item --no-tls-optimize
6326PowerPC @command{ld} normally performs some optimization of code
6327sequences used to access Thread-Local Storage. Use this option to
6328disable the optimization.
6329@end table
6330
6331@ifclear GENERIC
6332@lowersections
6333@end ifclear
6334@end ifset
6335
6336@ifset POWERPC64
6337@ifclear GENERIC
6338@raisesections
6339@end ifclear
6340
6341@node PowerPC64 ELF64
6342@section @command{ld} and PowerPC64 64-bit ELF Support
6343
6344@cindex PowerPC64 ELF64 options
6345@table @option
6346@cindex PowerPC64 stub grouping
6347@kindex --stub-group-size
6348@item --stub-group-size
6349Long branch stubs, PLT call stubs and TOC adjusting stubs are placed
6350by @command{ld} in stub sections located between groups of input sections.
6351@samp{--stub-group-size} specifies the maximum size of a group of input
6352sections handled by one stub section. Since branch offsets are signed,
6353a stub section may serve two groups of input sections, one group before
6354the stub section, and one group after it. However, when using
6355conditional branches that require stubs, it may be better (for branch
6356prediction) that stub sections only serve one group of input sections.
6357A negative value for @samp{N} chooses this scheme, ensuring that
6358branches to stubs always use a negative offset. Two special values of
6359@samp{N} are recognized, @samp{1} and @samp{-1}. These both instruct
6360@command{ld} to automatically size input section groups for the branch types
6361detected, with the same behaviour regarding stub placement as other
6362positive or negative values of @samp{N} respectively.
6363
6364Note that @samp{--stub-group-size} does not split input sections. A
6365single input section larger than the group size specified will of course
6366create a larger group (of one section). If input sections are too
6367large, it may not be possible for a branch to reach its stub.
6368
6369@cindex PowerPC64 stub symbols
6370@kindex --emit-stub-syms
6371@item --emit-stub-syms
6372This option causes @command{ld} to label linker stubs with a local
6373symbol that encodes the stub type and destination.
6374
6375@cindex PowerPC64 dot symbols
6376@kindex --dotsyms
6377@kindex --no-dotsyms
6378@item --dotsyms, --no-dotsyms
6379These two options control how @command{ld} interprets version patterns
6380in a version script. Older PowerPC64 compilers emitted both a
6381function descriptor symbol with the same name as the function, and a
6382code entry symbol with the name prefixed by a dot (@samp{.}). To
6383properly version a function @samp{foo}, the version script thus needs
6384to control both @samp{foo} and @samp{.foo}. The option
6385@samp{--dotsyms}, on by default, automatically adds the required
6386dot-prefixed patterns. Use @samp{--no-dotsyms} to disable this
6387feature.
6388
6389@cindex PowerPC64 TLS optimization
6390@kindex --no-tls-optimize
6391@item --no-tls-optimize
6392PowerPC64 @command{ld} normally performs some optimization of code
6393sequences used to access Thread-Local Storage. Use this option to
6394disable the optimization.
6395
6396@cindex PowerPC64 OPD optimization
6397@kindex --no-opd-optimize
6398@item --no-opd-optimize
6399PowerPC64 @command{ld} normally removes @code{.opd} section entries
6400corresponding to deleted link-once functions, or functions removed by
e7fc76dd 6401the action of @samp{--gc-sections} or linker script @code{/DISCARD/}.
2a60a7a8
AM
6402Use this option to disable @code{.opd} optimization.
6403
6404@cindex PowerPC64 OPD spacing
6405@kindex --non-overlapping-opd
6406@item --non-overlapping-opd
6407Some PowerPC64 compilers have an option to generate compressed
6408@code{.opd} entries spaced 16 bytes apart, overlapping the third word,
6409the static chain pointer (unused in C) with the first word of the next
6410entry. This option expands such entries to the full 24 bytes.
6411
6412@cindex PowerPC64 TOC optimization
6413@kindex --no-toc-optimize
6414@item --no-toc-optimize
6415PowerPC64 @command{ld} normally removes unused @code{.toc} section
6416entries. Such entries are detected by examining relocations that
6417reference the TOC in code sections. A reloc in a deleted code section
6418marks a TOC word as unneeded, while a reloc in a kept code section
6419marks a TOC word as needed. Since the TOC may reference itself, TOC
6420relocs are also examined. TOC words marked as both needed and
6421unneeded will of course be kept. TOC words without any referencing
6422reloc are assumed to be part of a multi-word entry, and are kept or
6423discarded as per the nearest marked preceding word. This works
6424reliably for compiler generated code, but may be incorrect if assembly
6425code is used to insert TOC entries. Use this option to disable the
6426optimization.
6427
6428@cindex PowerPC64 multi-TOC
6429@kindex --no-multi-toc
6430@item --no-multi-toc
6431By default, PowerPC64 GCC generates code for a TOC model where TOC
6432entries are accessed with a 16-bit offset from r2. This limits the
6433total TOC size to 64K. PowerPC64 @command{ld} extends this limit by
6434grouping code sections such that each group uses less than 64K for its
6435TOC entries, then inserts r2 adjusting stubs between inter-group
6436calls. @command{ld} does not split apart input sections, so cannot
6437help if a single input file has a @code{.toc} section that exceeds
643864K, most likely from linking multiple files with @command{ld -r}.
6439Use this option to turn off this feature.
6440@end table
6441
6442@ifclear GENERIC
6443@lowersections
6444@end ifclear
6445@end ifset
6446
49fa1e15
AM
6447@ifset SPU
6448@ifclear GENERIC
6449@raisesections
6450@end ifclear
6451
6452@node SPU ELF
6453@section @command{ld} and SPU ELF Support
6454
6455@cindex SPU ELF options
6456@table @option
6457
6458@cindex SPU plugins
6459@kindex --plugin
6460@item --plugin
6461This option marks an executable as a PIC plugin module.
6462
6463@cindex SPU overlays
6464@kindex --no-overlays
6465@item --no-overlays
6466Normally, @command{ld} recognizes calls to functions within overlay
6467regions, and redirects such calls to an overlay manager via a stub.
6468@command{ld} also provides a built-in overlay manager. This option
6469turns off all this special overlay handling.
6470
6471@cindex SPU overlay stub symbols
6472@kindex --emit-stub-syms
6473@item --emit-stub-syms
6474This option causes @command{ld} to label overlay stubs with a local
6475symbol that encodes the stub type and destination.
6476
6477@cindex SPU extra overlay stubs
6478@kindex --extra-overlay-stubs
6479@item --extra-overlay-stubs
6480This option causes @command{ld} to add overlay call stubs on all
6481function calls out of overlay regions. Normally stubs are not added
6482on calls to non-overlay regions.
6483
6484@cindex SPU local store size
6485@kindex --local-store=lo:hi
6486@item --local-store=lo:hi
6487@command{ld} usually checks that a final executable for SPU fits in
6488the address range 0 to 256k. This option may be used to change the
6489range. Disable the check entirely with @option{--local-store=0:0}.
6490
c0065db7 6491@cindex SPU
49fa1e15
AM
6492@kindex --stack-analysis
6493@item --stack-analysis
6494SPU local store space is limited. Over-allocation of stack space
6495unnecessarily limits space available for code and data, while
6496under-allocation results in runtime failures. If given this option,
6497@command{ld} will provide an estimate of maximum stack usage.
6498@command{ld} does this by examining symbols in code sections to
6499determine the extents of functions, and looking at function prologues
6500for stack adjusting instructions. A call-graph is created by looking
6501for relocations on branch instructions. The graph is then searched
6502for the maximum stack usage path. Note that this analysis does not
6503find calls made via function pointers, and does not handle recursion
6504and other cycles in the call graph. Stack usage may be
6505under-estimated if your code makes such calls. Also, stack usage for
6506dynamic allocation, e.g. alloca, will not be detected. If a link map
6507is requested, detailed information about each function's stack usage
6508and calls will be given.
6509
c0065db7 6510@cindex SPU
49fa1e15
AM
6511@kindex --emit-stack-syms
6512@item --emit-stack-syms
6513This option, if given along with @option{--stack-analysis} will result
6514in @command{ld} emitting stack sizing symbols for each function.
6515These take the form @code{__stack_<function_name>} for global
6516functions, and @code{__stack_<number>_<function_name>} for static
6517functions. @code{<number>} is the section id in hex. The value of
6518such symbols is the stack requirement for the corresponding function.
6519The symbol size will be zero, type @code{STT_NOTYPE}, binding
c0065db7 6520@code{STB_LOCAL}, and section @code{SHN_ABS}.
49fa1e15
AM
6521@end table
6522
6523@ifclear GENERIC
6524@lowersections
6525@end ifclear
6526@end ifset
6527
36f63dca
NC
6528@ifset TICOFF
6529@ifclear GENERIC
6530@raisesections
6531@end ifclear
6532
6533@node TI COFF
6534@section @command{ld}'s Support for Various TI COFF Versions
6535@cindex TI COFF versions
6536@kindex --format=@var{version}
6537The @samp{--format} switch allows selection of one of the various
6538TI COFF versions. The latest of this writing is 2; versions 0 and 1 are
6539also supported. The TI COFF versions also vary in header byte-order
6540format; @command{ld} will read any version or byte order, but the output
6541header format depends on the default specified by the specific target.
6542
6543@ifclear GENERIC
6544@lowersections
6545@end ifclear
6546@end ifset
6547
2ca22b03
NC
6548@ifset WIN32
6549@ifclear GENERIC
6550@raisesections
6551@end ifclear
6552
6553@node WIN32
6554@section @command{ld} and WIN32 (cygwin/mingw)
6555
c0065db7 6556This section describes some of the win32 specific @command{ld} issues.
b45619c0 6557See @ref{Options,,Command Line Options} for detailed description of the
dc8465bf 6558command line options mentioned here.
2ca22b03
NC
6559
6560@table @emph
c0065db7
RM
6561@cindex import libraries
6562@item import libraries
69da35b5 6563The standard Windows linker creates and uses so-called import
2ca22b03 6564libraries, which contains information for linking to dll's. They are
69da35b5
NC
6565regular static archives and are handled as any other static
6566archive. The cygwin and mingw ports of @command{ld} have specific
2ca22b03
NC
6567support for creating such libraries provided with the
6568@samp{--out-implib} command line option.
6569
c0065db7
RM
6570@item exporting DLL symbols
6571@cindex exporting DLL symbols
dc8465bf
NC
6572The cygwin/mingw @command{ld} has several ways to export symbols for dll's.
6573
6574@table @emph
6575@item using auto-export functionality
6576@cindex using auto-export functionality
6577By default @command{ld} exports symbols with the auto-export functionality,
6578which is controlled by the following command line options:
6579
0a5d968e
NC
6580@itemize
6581@item --export-all-symbols [This is the default]
6582@item --exclude-symbols
6583@item --exclude-libs
e1c37eb5 6584@item --exclude-modules-for-implib
0a5d968e
NC
6585@end itemize
6586
c0065db7 6587If, however, @samp{--export-all-symbols} is not given explicitly on the
0a5d968e
NC
6588command line, then the default auto-export behavior will be @emph{disabled}
6589if either of the following are true:
6590
6591@itemize
6592@item A DEF file is used.
6593@item Any symbol in any object file was marked with the __declspec(dllexport) attribute.
6594@end itemize
dc8465bf 6595
c0065db7
RM
6596@item using a DEF file
6597@cindex using a DEF file
dc8465bf
NC
6598Another way of exporting symbols is using a DEF file. A DEF file is
6599an ASCII file containing definitions of symbols which should be
6600exported when a dll is created. Usually it is named @samp{<dll
6601name>.def} and is added as any other object file to the linker's
0a5d968e 6602command line. The file's name must end in @samp{.def} or @samp{.DEF}.
dc8465bf
NC
6603
6604@example
6605gcc -o <output> <objectfiles> <dll name>.def
6606@end example
6607
0a5d968e
NC
6608Using a DEF file turns off the normal auto-export behavior, unless the
6609@samp{--export-all-symbols} option is also used.
6610
dc8465bf
NC
6611Here is an example of a DEF file for a shared library called @samp{xyz.dll}:
6612
6613@example
4b5bd4e7 6614LIBRARY "xyz.dll" BASE=0x20000000
dc8465bf
NC
6615
6616EXPORTS
6617foo
6618bar
6619_bar = bar
4b5bd4e7
DS
6620another_foo = abc.dll.afoo
6621var1 DATA
c0065db7 6622@end example
dc8465bf 6623
4b5bd4e7
DS
6624This example defines a DLL with a non-default base address and five
6625symbols in the export table. The third exported symbol @code{_bar} is an
6626alias for the second. The fourth symbol, @code{another_foo} is resolved
6627by "forwarding" to another module and treating it as an alias for
6628@code{afoo} exported from the DLL @samp{abc.dll}. The final symbol
6629@code{var1} is declared to be a data object.
6630
6b31ad16
DS
6631The optional @code{LIBRARY <name>} command indicates the @emph{internal}
6632name of the output DLL. If @samp{<name>} does not include a suffix,
6633the default library suffix, @samp{.DLL} is appended.
6634
b45619c0
NC
6635When the .DEF file is used to build an application, rather than a
6636library, the @code{NAME <name>} command should be used instead of
6b31ad16 6637@code{LIBRARY}. If @samp{<name>} does not include a suffix, the default
c0065db7 6638executable suffix, @samp{.EXE} is appended.
6b31ad16
DS
6639
6640With either @code{LIBRARY <name>} or @code{NAME <name>} the optional
6641specification @code{BASE = <number>} may be used to specify a
c0065db7 6642non-default base address for the image.
6b31ad16
DS
6643
6644If neither @code{LIBRARY <name>} nor @code{NAME <name>} is specified,
a2877985
DS
6645or they specify an empty string, the internal name is the same as the
6646filename specified on the command line.
6b31ad16 6647
4b5bd4e7
DS
6648The complete specification of an export symbol is:
6649
6650@example
6651EXPORTS
6652 ( ( ( <name1> [ = <name2> ] )
6653 | ( <name1> = <module-name> . <external-name>))
6654 [ @@ <integer> ] [NONAME] [DATA] [CONSTANT] [PRIVATE] ) *
c0065db7 6655@end example
4b5bd4e7
DS
6656
6657Declares @samp{<name1>} as an exported symbol from the DLL, or declares
6658@samp{<name1>} as an exported alias for @samp{<name2>}; or declares
6659@samp{<name1>} as a "forward" alias for the symbol
6660@samp{<external-name>} in the DLL @samp{<module-name>}.
6661Optionally, the symbol may be exported by the specified ordinal
6662@samp{<integer>} alias.
6663
6664The optional keywords that follow the declaration indicate:
6665
6666@code{NONAME}: Do not put the symbol name in the DLL's export table. It
6667will still be exported by its ordinal alias (either the value specified
6668by the .def specification or, otherwise, the value assigned by the
6669linker). The symbol name, however, does remain visible in the import
6670library (if any), unless @code{PRIVATE} is also specified.
6671
6672@code{DATA}: The symbol is a variable or object, rather than a function.
6673The import lib will export only an indirect reference to @code{foo} as
6674the symbol @code{_imp__foo} (ie, @code{foo} must be resolved as
6675@code{*_imp__foo}).
6676
6677@code{CONSTANT}: Like @code{DATA}, but put the undecorated @code{foo} as
6678well as @code{_imp__foo} into the import library. Both refer to the
6679read-only import address table's pointer to the variable, not to the
6680variable itself. This can be dangerous. If the user code fails to add
6681the @code{dllimport} attribute and also fails to explicitly add the
6682extra indirection that the use of the attribute enforces, the
6683application will behave unexpectedly.
6684
6685@code{PRIVATE}: Put the symbol in the DLL's export table, but do not put
6686it into the static import library used to resolve imports at link time. The
6687symbol can still be imported using the @code{LoadLibrary/GetProcAddress}
6688API at runtime or by by using the GNU ld extension of linking directly to
6689the DLL without an import library.
c0065db7 6690
4b5bd4e7
DS
6691See ld/deffilep.y in the binutils sources for the full specification of
6692other DEF file statements
dc8465bf
NC
6693
6694@cindex creating a DEF file
6695While linking a shared dll, @command{ld} is able to create a DEF file
6696with the @samp{--output-def <file>} command line option.
0a5d968e
NC
6697
6698@item Using decorations
6699@cindex Using decorations
6700Another way of marking symbols for export is to modify the source code
6701itself, so that when building the DLL each symbol to be exported is
6702declared as:
6703
6704@example
6705__declspec(dllexport) int a_variable
6706__declspec(dllexport) void a_function(int with_args)
6707@end example
6708
6709All such symbols will be exported from the DLL. If, however,
6710any of the object files in the DLL contain symbols decorated in
6711this way, then the normal auto-export behavior is disabled, unless
6712the @samp{--export-all-symbols} option is also used.
6713
6714Note that object files that wish to access these symbols must @emph{not}
c0065db7 6715decorate them with dllexport. Instead, they should use dllimport,
0a5d968e
NC
6716instead:
6717
6718@example
6719__declspec(dllimport) int a_variable
6720__declspec(dllimport) void a_function(int with_args)
6721@end example
6722
c0065db7
RM
6723This complicates the structure of library header files, because
6724when included by the library itself the header must declare the
0a5d968e
NC
6725variables and functions as dllexport, but when included by client
6726code the header must declare them as dllimport. There are a number
c0065db7 6727of idioms that are typically used to do this; often client code can
0a5d968e
NC
6728omit the __declspec() declaration completely. See
6729@samp{--enable-auto-import} and @samp{automatic data imports} for more
b45619c0 6730information.
c0065db7 6731@end table
dc8465bf 6732
2ca22b03
NC
6733@cindex automatic data imports
6734@item automatic data imports
6735The standard Windows dll format supports data imports from dlls only
69da35b5 6736by adding special decorations (dllimport/dllexport), which let the
2ca22b03 6737compiler produce specific assembler instructions to deal with this
c0065db7 6738issue. This increases the effort necessary to port existing Un*x
69da35b5 6739code to these platforms, especially for large
2ca22b03 6740c++ libraries and applications. The auto-import feature, which was
c0065db7 6741initially provided by Paul Sokolovsky, allows one to omit the
b45619c0 6742decorations to achieve a behavior that conforms to that on POSIX/Un*x
c0065db7 6743platforms. This feature is enabled with the @samp{--enable-auto-import}
69da35b5
NC
6744command-line option, although it is enabled by default on cygwin/mingw.
6745The @samp{--enable-auto-import} option itself now serves mainly to
6746suppress any warnings that are ordinarily emitted when linked objects
6747trigger the feature's use.
6748
c0065db7 6749auto-import of variables does not always work flawlessly without
69da35b5
NC
6750additional assistance. Sometimes, you will see this message
6751
c0065db7 6752"variable '<var>' can't be auto-imported. Please read the
69da35b5
NC
6753documentation for ld's @code{--enable-auto-import} for details."
6754
c0065db7
RM
6755The @samp{--enable-auto-import} documentation explains why this error
6756occurs, and several methods that can be used to overcome this difficulty.
6757One of these methods is the @emph{runtime pseudo-relocs} feature, described
69da35b5
NC
6758below.
6759
6760@cindex runtime pseudo-relocation
c0065db7
RM
6761For complex variables imported from DLLs (such as structs or classes),
6762object files typically contain a base address for the variable and an
6763offset (@emph{addend}) within the variable--to specify a particular
6764field or public member, for instance. Unfortunately, the runtime loader used
6765in win32 environments is incapable of fixing these references at runtime
69da35b5 6766without the additional information supplied by dllimport/dllexport decorations.
c0065db7 6767The standard auto-import feature described above is unable to resolve these
69da35b5
NC
6768references.
6769
c0065db7
RM
6770The @samp{--enable-runtime-pseudo-relocs} switch allows these references to
6771be resolved without error, while leaving the task of adjusting the references
6772themselves (with their non-zero addends) to specialized code provided by the
6773runtime environment. Recent versions of the cygwin and mingw environments and
6774compilers provide this runtime support; older versions do not. However, the
6775support is only necessary on the developer's platform; the compiled result will
69da35b5
NC
6776run without error on an older system.
6777
c0065db7
RM
6778@samp{--enable-runtime-pseudo-relocs} is not the default; it must be explicitly
6779enabled as needed.
2ca22b03
NC
6780
6781@cindex direct linking to a dll
6782@item direct linking to a dll
6783The cygwin/mingw ports of @command{ld} support the direct linking,
6784including data symbols, to a dll without the usage of any import
69da35b5 6785libraries. This is much faster and uses much less memory than does the
b45619c0 6786traditional import library method, especially when linking large
c0065db7
RM
6787libraries or applications. When @command{ld} creates an import lib, each
6788function or variable exported from the dll is stored in its own bfd, even
6789though a single bfd could contain many exports. The overhead involved in
69da35b5 6790storing, loading, and processing so many bfd's is quite large, and explains the
c0065db7 6791tremendous time, memory, and storage needed to link against particularly
69da35b5
NC
6792large or complex libraries when using import libs.
6793
c0065db7 6794Linking directly to a dll uses no extra command-line switches other than
69da35b5 6795@samp{-L} and @samp{-l}, because @command{ld} already searches for a number
c0065db7 6796of names to match each library. All that is needed from the developer's
69da35b5
NC
6797perspective is an understanding of this search, in order to force ld to
6798select the dll instead of an import library.
6799
2ca22b03 6800
69da35b5
NC
6801For instance, when ld is called with the argument @samp{-lxxx} it will attempt
6802to find, in the first directory of its search path,
2ca22b03
NC
6803
6804@example
45e948fe
NC
6805libxxx.dll.a
6806xxx.dll.a
6807libxxx.a
6808xxx.lib
69da35b5 6809cygxxx.dll (*)
45e948fe
NC
6810libxxx.dll
6811xxx.dll
2ca22b03
NC
6812@end example
6813
69da35b5
NC
6814before moving on to the next directory in the search path.
6815
c0065db7
RM
6816(*) Actually, this is not @samp{cygxxx.dll} but in fact is @samp{<prefix>xxx.dll},
6817where @samp{<prefix>} is set by the @command{ld} option
6818@samp{--dll-search-prefix=<prefix>}. In the case of cygwin, the standard gcc spec
6819file includes @samp{--dll-search-prefix=cyg}, so in effect we actually search for
69da35b5
NC
6820@samp{cygxxx.dll}.
6821
c0065db7
RM
6822Other win32-based unix environments, such as mingw or pw32, may use other
6823@samp{<prefix>}es, although at present only cygwin makes use of this feature. It
69da35b5
NC
6824was originally intended to help avoid name conflicts among dll's built for the
6825various win32/un*x environments, so that (for example) two versions of a zlib dll
6826could coexist on the same machine.
6827
2ca22b03
NC
6828The generic cygwin/mingw path layout uses a @samp{bin} directory for
6829applications and dll's and a @samp{lib} directory for the import
69da35b5 6830libraries (using cygwin nomenclature):
2ca22b03
NC
6831
6832@example
6833bin/
6834 cygxxx.dll
6835lib/
6836 libxxx.dll.a (in case of dll's)
c0065db7 6837 libxxx.a (in case of static archive)
2ca22b03
NC
6838@end example
6839
c0065db7
RM
6840Linking directly to a dll without using the import library can be
6841done two ways:
2ca22b03
NC
6842
68431. Use the dll directly by adding the @samp{bin} path to the link line
6844@example
6845gcc -Wl,-verbose -o a.exe -L../bin/ -lxxx
c0065db7 6846@end example
2ca22b03 6847
69da35b5
NC
6848However, as the dll's often have version numbers appended to their names
6849(@samp{cygncurses-5.dll}) this will often fail, unless one specifies
6850@samp{-L../bin -lncurses-5} to include the version. Import libs are generally
6851not versioned, and do not have this difficulty.
6852
2ca22b03
NC
68532. Create a symbolic link from the dll to a file in the @samp{lib}
6854directory according to the above mentioned search pattern. This
6855should be used to avoid unwanted changes in the tools needed for
6856making the app/dll.
6857
6858@example
6859ln -s bin/cygxxx.dll lib/[cyg|lib|]xxx.dll[.a]
c0065db7 6860@end example
2ca22b03
NC
6861
6862Then you can link without any make environment changes.
6863
6864@example
6865gcc -Wl,-verbose -o a.exe -L../lib/ -lxxx
c0065db7 6866@end example
69da35b5
NC
6867
6868This technique also avoids the version number problems, because the following is
6869perfectly legal
6870
6871@example
6872bin/
6873 cygxxx-5.dll
6874lib/
c0065db7 6875 libxxx.dll.a -> ../bin/cygxxx-5.dll
69da35b5
NC
6876@end example
6877
dc8465bf 6878Linking directly to a dll without using an import lib will work
69da35b5
NC
6879even when auto-import features are exercised, and even when
6880@samp{--enable-runtime-pseudo-relocs} is used.
6881
6882Given the improvements in speed and memory usage, one might justifiably
45e948fe 6883wonder why import libraries are used at all. There are three reasons:
69da35b5
NC
6884
68851. Until recently, the link-directly-to-dll functionality did @emph{not}
6886work with auto-imported data.
6887
dc8465bf
NC
68882. Sometimes it is necessary to include pure static objects within the
6889import library (which otherwise contains only bfd's for indirection
6890symbols that point to the exports of a dll). Again, the import lib
6891for the cygwin kernel makes use of this ability, and it is not
6892possible to do this without an import lib.
69da35b5 6893
45e948fe
NC
68943. Symbol aliases can only be resolved using an import lib. This is
6895critical when linking against OS-supplied dll's (eg, the win32 API)
6896in which symbols are usually exported as undecorated aliases of their
6897stdcall-decorated assembly names.
6898
69da35b5 6899So, import libs are not going away. But the ability to replace
c0065db7
RM
6900true import libs with a simple symbolic link to (or a copy of)
6901a dll, in many cases, is a useful addition to the suite of tools
6902binutils makes available to the win32 developer. Given the
69da35b5
NC
6903massive improvements in memory requirements during linking, storage
6904requirements, and linking speed, we expect that many developers
6905will soon begin to use this feature whenever possible.
dc8465bf 6906
c0065db7 6907@item symbol aliasing
dc8465bf 6908@table @emph
c0065db7
RM
6909@item adding additional names
6910Sometimes, it is useful to export symbols with additional names.
dc8465bf
NC
6911A symbol @samp{foo} will be exported as @samp{foo}, but it can also be
6912exported as @samp{_foo} by using special directives in the DEF file
6913when creating the dll. This will affect also the optional created
c0065db7 6914import library. Consider the following DEF file:
dc8465bf 6915
c0065db7 6916@example
dc8465bf
NC
6917LIBRARY "xyz.dll" BASE=0x61000000
6918
6919EXPORTS
c0065db7 6920foo
dc8465bf 6921_foo = foo
c0065db7 6922@end example
dc8465bf
NC
6923
6924The line @samp{_foo = foo} maps the symbol @samp{foo} to @samp{_foo}.
6925
6926Another method for creating a symbol alias is to create it in the
6927source code using the "weak" attribute:
6928
c0065db7
RM
6929@example
6930void foo () @{ /* Do something. */; @}
dc8465bf 6931void _foo () __attribute__ ((weak, alias ("foo")));
c0065db7 6932@end example
dc8465bf
NC
6933
6934See the gcc manual for more information about attributes and weak
6935symbols.
6936
6937@item renaming symbols
6938Sometimes it is useful to rename exports. For instance, the cygwin
c0065db7 6939kernel does this regularly. A symbol @samp{_foo} can be exported as
dc8465bf
NC
6940@samp{foo} but not as @samp{_foo} by using special directives in the
6941DEF file. (This will also affect the import library, if it is
c0065db7 6942created). In the following example:
dc8465bf 6943
c0065db7 6944@example
dc8465bf
NC
6945LIBRARY "xyz.dll" BASE=0x61000000
6946
6947EXPORTS
6948_foo = foo
c0065db7 6949@end example
dc8465bf
NC
6950
6951The line @samp{_foo = foo} maps the exported symbol @samp{foo} to
6952@samp{_foo}.
c0065db7 6953@end table
dc8465bf 6954
0a5d968e 6955Note: using a DEF file disables the default auto-export behavior,
c0065db7 6956unless the @samp{--export-all-symbols} command line option is used.
0a5d968e 6957If, however, you are trying to rename symbols, then you should list
c0065db7
RM
6958@emph{all} desired exports in the DEF file, including the symbols
6959that are not being renamed, and do @emph{not} use the
6960@samp{--export-all-symbols} option. If you list only the
6961renamed symbols in the DEF file, and use @samp{--export-all-symbols}
6962to handle the other symbols, then the both the new names @emph{and}
6963the original names for the renamed symbols will be exported.
6964In effect, you'd be aliasing those symbols, not renaming them,
0a5d968e 6965which is probably not what you wanted.
c87db184
CF
6966
6967@cindex weak externals
6968@item weak externals
6969The Windows object format, PE, specifies a form of weak symbols called
6970weak externals. When a weak symbol is linked and the symbol is not
6971defined, the weak symbol becomes an alias for some other symbol. There
6972are three variants of weak externals:
6973@itemize
6974@item Definition is searched for in objects and libraries, historically
6975called lazy externals.
6976@item Definition is searched for only in other objects, not in libraries.
6977This form is not presently implemented.
6978@item No search; the symbol is an alias. This form is not presently
6979implemented.
6980@end itemize
6981As a GNU extension, weak symbols that do not specify an alternate symbol
6982are supported. If the symbol is undefined when linking, the symbol
6983uses a default value.
2ca22b03
NC
6984@end table
6985
6986@ifclear GENERIC
6987@lowersections
6988@end ifclear
6989@end ifset
6990
e0001a05
NC
6991@ifset XTENSA
6992@ifclear GENERIC
6993@raisesections
6994@end ifclear
6995
6996@node Xtensa
6997@section @code{ld} and Xtensa Processors
6998
6999@cindex Xtensa processors
7000The default @command{ld} behavior for Xtensa processors is to interpret
7001@code{SECTIONS} commands so that lists of explicitly named sections in a
7002specification with a wildcard file will be interleaved when necessary to
7003keep literal pools within the range of PC-relative load offsets. For
7004example, with the command:
7005
7006@smallexample
7007SECTIONS
7008@{
7009 .text : @{
7010 *(.literal .text)
7011 @}
7012@}
7013@end smallexample
7014
7015@noindent
7016@command{ld} may interleave some of the @code{.literal}
7017and @code{.text} sections from different object files to ensure that the
7018literal pools are within the range of PC-relative load offsets. A valid
7019interleaving might place the @code{.literal} sections from an initial
7020group of files followed by the @code{.text} sections of that group of
7021files. Then, the @code{.literal} sections from the rest of the files
7022and the @code{.text} sections from the rest of the files would follow.
e0001a05 7023
43cd72b9 7024@cindex @option{--relax} on Xtensa
e0001a05 7025@cindex relaxing on Xtensa
43cd72b9
BW
7026Relaxation is enabled by default for the Xtensa version of @command{ld} and
7027provides two important link-time optimizations. The first optimization
7028is to combine identical literal values to reduce code size. A redundant
7029literal will be removed and all the @code{L32R} instructions that use it
7030will be changed to reference an identical literal, as long as the
7031location of the replacement literal is within the offset range of all
7032the @code{L32R} instructions. The second optimization is to remove
7033unnecessary overhead from assembler-generated ``longcall'' sequences of
7034@code{L32R}/@code{CALLX@var{n}} when the target functions are within
7035range of direct @code{CALL@var{n}} instructions.
7036
7037For each of these cases where an indirect call sequence can be optimized
7038to a direct call, the linker will change the @code{CALLX@var{n}}
7039instruction to a @code{CALL@var{n}} instruction, remove the @code{L32R}
7040instruction, and remove the literal referenced by the @code{L32R}
7041instruction if it is not used for anything else. Removing the
7042@code{L32R} instruction always reduces code size but can potentially
7043hurt performance by changing the alignment of subsequent branch targets.
7044By default, the linker will always preserve alignments, either by
7045switching some instructions between 24-bit encodings and the equivalent
7046density instructions or by inserting a no-op in place of the @code{L32R}
7047instruction that was removed. If code size is more important than
7048performance, the @option{--size-opt} option can be used to prevent the
7049linker from widening density instructions or inserting no-ops, except in
7050a few cases where no-ops are required for correctness.
7051
7052The following Xtensa-specific command-line options can be used to
7053control the linker:
7054
7055@cindex Xtensa options
7056@table @option
e0001a05 7057@kindex --no-relax
43cd72b9
BW
7058@item --no-relax
7059Since the Xtensa version of @code{ld} enables the @option{--relax} option
7060by default, the @option{--no-relax} option is provided to disable
7061relaxation.
7062
7063@item --size-opt
7064When optimizing indirect calls to direct calls, optimize for code size
7065more than performance. With this option, the linker will not insert
7066no-ops or widen density instructions to preserve branch target
7067alignment. There may still be some cases where no-ops are required to
7068preserve the correctness of the code.
7069@end table
e0001a05
NC
7070
7071@ifclear GENERIC
7072@lowersections
7073@end ifclear
7074@end ifset
7075
252b5132
RH
7076@ifclear SingleFormat
7077@node BFD
7078@chapter BFD
7079
7080@cindex back end
7081@cindex object file management
7082@cindex object formats available
7083@kindex objdump -i
7084The linker accesses object and archive files using the BFD libraries.
7085These libraries allow the linker to use the same routines to operate on
7086object files whatever the object file format. A different object file
7087format can be supported simply by creating a new BFD back end and adding
7088it to the library. To conserve runtime memory, however, the linker and
7089associated tools are usually configured to support only a subset of the
7090object file formats available. You can use @code{objdump -i}
7091(@pxref{objdump,,objdump,binutils.info,The GNU Binary Utilities}) to
7092list all the formats available for your configuration.
7093
7094@cindex BFD requirements
7095@cindex requirements for BFD
7096As with most implementations, BFD is a compromise between
7097several conflicting requirements. The major factor influencing
7098BFD design was efficiency: any time used converting between
7099formats is time which would not have been spent had BFD not
7100been involved. This is partly offset by abstraction payback; since
7101BFD simplifies applications and back ends, more time and care
7102may be spent optimizing algorithms for a greater speed.
7103
7104One minor artifact of the BFD solution which you should bear in
7105mind is the potential for information loss. There are two places where
7106useful information can be lost using the BFD mechanism: during
7107conversion and during output. @xref{BFD information loss}.
7108
7109@menu
7110* BFD outline:: How it works: an outline of BFD
7111@end menu
7112
7113@node BFD outline
36f63dca 7114@section How It Works: An Outline of BFD
252b5132
RH
7115@cindex opening object files
7116@include bfdsumm.texi
7117@end ifclear
7118
7119@node Reporting Bugs
7120@chapter Reporting Bugs
ff5dcc92
SC
7121@cindex bugs in @command{ld}
7122@cindex reporting bugs in @command{ld}
252b5132 7123
ff5dcc92 7124Your bug reports play an essential role in making @command{ld} reliable.
252b5132
RH
7125
7126Reporting a bug may help you by bringing a solution to your problem, or
7127it may not. But in any case the principal function of a bug report is
ff5dcc92 7128to help the entire community by making the next version of @command{ld}
252b5132 7129work better. Bug reports are your contribution to the maintenance of
ff5dcc92 7130@command{ld}.
252b5132
RH
7131
7132In order for a bug report to serve its purpose, you must include the
7133information that enables us to fix the bug.
7134
7135@menu
7136* Bug Criteria:: Have you found a bug?
7137* Bug Reporting:: How to report bugs
7138@end menu
7139
7140@node Bug Criteria
36f63dca 7141@section Have You Found a Bug?
252b5132
RH
7142@cindex bug criteria
7143
7144If you are not sure whether you have found a bug, here are some guidelines:
7145
7146@itemize @bullet
7147@cindex fatal signal
7148@cindex linker crash
7149@cindex crash of linker
7150@item
7151If the linker gets a fatal signal, for any input whatever, that is a
ff5dcc92 7152@command{ld} bug. Reliable linkers never crash.
252b5132
RH
7153
7154@cindex error on valid input
7155@item
ff5dcc92 7156If @command{ld} produces an error message for valid input, that is a bug.
252b5132
RH
7157
7158@cindex invalid input
7159@item
ff5dcc92 7160If @command{ld} does not produce an error message for invalid input, that
252b5132
RH
7161may be a bug. In the general case, the linker can not verify that
7162object files are correct.
7163
7164@item
7165If you are an experienced user of linkers, your suggestions for
ff5dcc92 7166improvement of @command{ld} are welcome in any case.
252b5132
RH
7167@end itemize
7168
7169@node Bug Reporting
36f63dca 7170@section How to Report Bugs
252b5132 7171@cindex bug reports
ff5dcc92 7172@cindex @command{ld} bugs, reporting
252b5132
RH
7173
7174A number of companies and individuals offer support for @sc{gnu}
ff5dcc92 7175products. If you obtained @command{ld} from a support organization, we
252b5132
RH
7176recommend you contact that organization first.
7177
7178You can find contact information for many support companies and
7179individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
7180distribution.
7181
ad22bfe8 7182@ifset BUGURL
ff5dcc92 7183Otherwise, send bug reports for @command{ld} to
ad22bfe8
JM
7184@value{BUGURL}.
7185@end ifset
252b5132
RH
7186
7187The fundamental principle of reporting bugs usefully is this:
7188@strong{report all the facts}. If you are not sure whether to state a
7189fact or leave it out, state it!
7190
7191Often people omit facts because they think they know what causes the
7192problem and assume that some details do not matter. Thus, you might
b553b183
NC
7193assume that the name of a symbol you use in an example does not
7194matter. Well, probably it does not, but one cannot be sure. Perhaps
7195the bug is a stray memory reference which happens to fetch from the
7196location where that name is stored in memory; perhaps, if the name
7197were different, the contents of that location would fool the linker
7198into doing the right thing despite the bug. Play it safe and give a
7199specific, complete example. That is the easiest thing for you to do,
c0065db7 7200and the most helpful.
b553b183
NC
7201
7202Keep in mind that the purpose of a bug report is to enable us to fix
7203the bug if it is new to us. Therefore, always write your bug reports
7204on the assumption that the bug has not been reported previously.
252b5132
RH
7205
7206Sometimes people give a few sketchy facts and ask, ``Does this ring a
36f63dca
NC
7207bell?'' This cannot help us fix a bug, so it is basically useless. We
7208respond by asking for enough details to enable us to investigate.
7209You might as well expedite matters by sending them to begin with.
252b5132
RH
7210
7211To enable us to fix the bug, you should include all these things:
7212
7213@itemize @bullet
7214@item
ff5dcc92 7215The version of @command{ld}. @command{ld} announces it if you start it with
252b5132
RH
7216the @samp{--version} argument.
7217
7218Without this, we will not know whether there is any point in looking for
ff5dcc92 7219the bug in the current version of @command{ld}.
252b5132
RH
7220
7221@item
ff5dcc92 7222Any patches you may have applied to the @command{ld} source, including any
252b5132
RH
7223patches made to the @code{BFD} library.
7224
7225@item
7226The type of machine you are using, and the operating system name and
7227version number.
7228
7229@item
ff5dcc92 7230What compiler (and its version) was used to compile @command{ld}---e.g.
252b5132
RH
7231``@code{gcc-2.7}''.
7232
7233@item
7234The command arguments you gave the linker to link your example and
7235observe the bug. To guarantee you will not omit something important,
7236list them all. A copy of the Makefile (or the output from make) is
7237sufficient.
7238
7239If we were to try to guess the arguments, we would probably guess wrong
7240and then we might not encounter the bug.
7241
7242@item
7243A complete input file, or set of input files, that will reproduce the
b553b183
NC
7244bug. It is generally most helpful to send the actual object files
7245provided that they are reasonably small. Say no more than 10K. For
7246bigger files you can either make them available by FTP or HTTP or else
7247state that you are willing to send the object file(s) to whomever
7248requests them. (Note - your email will be going to a mailing list, so
7249we do not want to clog it up with large attachments). But small
7250attachments are best.
252b5132
RH
7251
7252If the source files were assembled using @code{gas} or compiled using
7253@code{gcc}, then it may be OK to send the source files rather than the
7254object files. In this case, be sure to say exactly what version of
7255@code{gas} or @code{gcc} was used to produce the object files. Also say
7256how @code{gas} or @code{gcc} were configured.
7257
7258@item
7259A description of what behavior you observe that you believe is
7260incorrect. For example, ``It gets a fatal signal.''
7261
ff5dcc92 7262Of course, if the bug is that @command{ld} gets a fatal signal, then we
252b5132
RH
7263will certainly notice it. But if the bug is incorrect output, we might
7264not notice unless it is glaringly wrong. You might as well not give us
7265a chance to make a mistake.
7266
7267Even if the problem you experience is a fatal signal, you should still
7268say so explicitly. Suppose something strange is going on, such as, your
b45619c0 7269copy of @command{ld} is out of sync, or you have encountered a bug in the
252b5132
RH
7270C library on your system. (This has happened!) Your copy might crash
7271and ours would not. If you told us to expect a crash, then when ours
7272fails to crash, we would know that the bug was not happening for us. If
7273you had not told us to expect a crash, then we would not be able to draw
7274any conclusion from our observations.
7275
7276@item
ff5dcc92 7277If you wish to suggest changes to the @command{ld} source, send us context
252b5132
RH
7278diffs, as generated by @code{diff} with the @samp{-u}, @samp{-c}, or
7279@samp{-p} option. Always send diffs from the old file to the new file.
ff5dcc92 7280If you even discuss something in the @command{ld} source, refer to it by
252b5132
RH
7281context, not by line number.
7282
7283The line numbers in our development sources will not match those in your
7284sources. Your line numbers would convey no useful information to us.
7285@end itemize
7286
7287Here are some things that are not necessary:
7288
7289@itemize @bullet
7290@item
7291A description of the envelope of the bug.
7292
7293Often people who encounter a bug spend a lot of time investigating
7294which changes to the input file will make the bug go away and which
7295changes will not affect it.
7296
7297This is often time consuming and not very useful, because the way we
7298will find the bug is by running a single example under the debugger
7299with breakpoints, not by pure deduction from a series of examples.
7300We recommend that you save your time for something else.
7301
7302Of course, if you can find a simpler example to report @emph{instead}
7303of the original one, that is a convenience for us. Errors in the
7304output will be easier to spot, running under the debugger will take
7305less time, and so on.
7306
7307However, simplification is not vital; if you do not want to do this,
7308report the bug anyway and send us the entire test case you used.
7309
7310@item
7311A patch for the bug.
7312
7313A patch for the bug does help us if it is a good one. But do not omit
7314the necessary information, such as the test case, on the assumption that
7315a patch is all we need. We might see problems with your patch and decide
7316to fix the problem another way, or we might not understand it at all.
7317
ff5dcc92 7318Sometimes with a program as complicated as @command{ld} it is very hard to
252b5132
RH
7319construct an example that will make the program follow a certain path
7320through the code. If you do not send us the example, we will not be
7321able to construct one, so we will not be able to verify that the bug is
7322fixed.
7323
7324And if we cannot understand what bug you are trying to fix, or why your
7325patch should be an improvement, we will not install it. A test case will
7326help us to understand.
7327
7328@item
7329A guess about what the bug is or what it depends on.
7330
7331Such guesses are usually wrong. Even we cannot guess right about such
7332things without first using the debugger to find the facts.
7333@end itemize
7334
7335@node MRI
7336@appendix MRI Compatible Script Files
7337@cindex MRI compatibility
ff5dcc92
SC
7338To aid users making the transition to @sc{gnu} @command{ld} from the MRI
7339linker, @command{ld} can use MRI compatible linker scripts as an
252b5132
RH
7340alternative to the more general-purpose linker scripting language
7341described in @ref{Scripts}. MRI compatible linker scripts have a much
7342simpler command set than the scripting language otherwise used with
ff5dcc92 7343@command{ld}. @sc{gnu} @command{ld} supports the most commonly used MRI
252b5132
RH
7344linker commands; these commands are described here.
7345
7346In general, MRI scripts aren't of much use with the @code{a.out} object
7347file format, since it only has three sections and MRI scripts lack some
7348features to make use of them.
7349
7350You can specify a file containing an MRI-compatible script using the
7351@samp{-c} command-line option.
7352
7353Each command in an MRI-compatible script occupies its own line; each
7354command line starts with the keyword that identifies the command (though
7355blank lines are also allowed for punctuation). If a line of an
ff5dcc92 7356MRI-compatible script begins with an unrecognized keyword, @command{ld}
252b5132
RH
7357issues a warning message, but continues processing the script.
7358
7359Lines beginning with @samp{*} are comments.
7360
7361You can write these commands using all upper-case letters, or all
7362lower case; for example, @samp{chip} is the same as @samp{CHIP}.
7363The following list shows only the upper-case form of each command.
7364
7365@table @code
7366@cindex @code{ABSOLUTE} (MRI)
7367@item ABSOLUTE @var{secname}
7368@itemx ABSOLUTE @var{secname}, @var{secname}, @dots{} @var{secname}
ff5dcc92 7369Normally, @command{ld} includes in the output file all sections from all
252b5132
RH
7370the input files. However, in an MRI-compatible script, you can use the
7371@code{ABSOLUTE} command to restrict the sections that will be present in
7372your output program. If the @code{ABSOLUTE} command is used at all in a
7373script, then only the sections named explicitly in @code{ABSOLUTE}
7374commands will appear in the linker output. You can still use other
7375input sections (whatever you select on the command line, or using
7376@code{LOAD}) to resolve addresses in the output file.
7377
7378@cindex @code{ALIAS} (MRI)
7379@item ALIAS @var{out-secname}, @var{in-secname}
7380Use this command to place the data from input section @var{in-secname}
7381in a section called @var{out-secname} in the linker output file.
7382
7383@var{in-secname} may be an integer.
7384
7385@cindex @code{ALIGN} (MRI)
7386@item ALIGN @var{secname} = @var{expression}
7387Align the section called @var{secname} to @var{expression}. The
7388@var{expression} should be a power of two.
7389
7390@cindex @code{BASE} (MRI)
7391@item BASE @var{expression}
7392Use the value of @var{expression} as the lowest address (other than
7393absolute addresses) in the output file.
7394
7395@cindex @code{CHIP} (MRI)
7396@item CHIP @var{expression}
7397@itemx CHIP @var{expression}, @var{expression}
7398This command does nothing; it is accepted only for compatibility.
7399
7400@cindex @code{END} (MRI)
7401@item END
7402This command does nothing whatever; it's only accepted for compatibility.
7403
7404@cindex @code{FORMAT} (MRI)
7405@item FORMAT @var{output-format}
7406Similar to the @code{OUTPUT_FORMAT} command in the more general linker
a1ab1d2a 7407language, but restricted to one of these output formats:
252b5132
RH
7408
7409@enumerate
a1ab1d2a 7410@item
252b5132
RH
7411S-records, if @var{output-format} is @samp{S}
7412
7413@item
7414IEEE, if @var{output-format} is @samp{IEEE}
7415
7416@item
7417COFF (the @samp{coff-m68k} variant in BFD), if @var{output-format} is
7418@samp{COFF}
7419@end enumerate
7420
7421@cindex @code{LIST} (MRI)
7422@item LIST @var{anything}@dots{}
7423Print (to the standard output file) a link map, as produced by the
ff5dcc92 7424@command{ld} command-line option @samp{-M}.
252b5132
RH
7425
7426The keyword @code{LIST} may be followed by anything on the
7427same line, with no change in its effect.
7428
7429@cindex @code{LOAD} (MRI)
7430@item LOAD @var{filename}
7431@itemx LOAD @var{filename}, @var{filename}, @dots{} @var{filename}
7432Include one or more object file @var{filename} in the link; this has the
ff5dcc92 7433same effect as specifying @var{filename} directly on the @command{ld}
252b5132
RH
7434command line.
7435
7436@cindex @code{NAME} (MRI)
7437@item NAME @var{output-name}
ff5dcc92 7438@var{output-name} is the name for the program produced by @command{ld}; the
252b5132
RH
7439MRI-compatible command @code{NAME} is equivalent to the command-line
7440option @samp{-o} or the general script language command @code{OUTPUT}.
7441
7442@cindex @code{ORDER} (MRI)
7443@item ORDER @var{secname}, @var{secname}, @dots{} @var{secname}
7444@itemx ORDER @var{secname} @var{secname} @var{secname}
ff5dcc92 7445Normally, @command{ld} orders the sections in its output file in the
252b5132
RH
7446order in which they first appear in the input files. In an MRI-compatible
7447script, you can override this ordering with the @code{ORDER} command. The
7448sections you list with @code{ORDER} will appear first in your output
7449file, in the order specified.
7450
7451@cindex @code{PUBLIC} (MRI)
7452@item PUBLIC @var{name}=@var{expression}
7453@itemx PUBLIC @var{name},@var{expression}
7454@itemx PUBLIC @var{name} @var{expression}
7455Supply a value (@var{expression}) for external symbol
7456@var{name} used in the linker input files.
7457
7458@cindex @code{SECT} (MRI)
7459@item SECT @var{secname}, @var{expression}
7460@itemx SECT @var{secname}=@var{expression}
7461@itemx SECT @var{secname} @var{expression}
7462You can use any of these three forms of the @code{SECT} command to
7463specify the start address (@var{expression}) for section @var{secname}.
7464If you have more than one @code{SECT} statement for the same
7465@var{secname}, only the @emph{first} sets the start address.
7466@end table
7467
793c5807
NC
7468@node GNU Free Documentation License
7469@appendix GNU Free Documentation License
36f63dca 7470@include fdl.texi
704c465c 7471
370b66a1
CD
7472@node LD Index
7473@unnumbered LD Index
252b5132
RH
7474
7475@printindex cp
7476
7477@tex
7478% I think something like @colophon should be in texinfo. In the
7479% meantime:
7480\long\def\colophon{\hbox to0pt{}\vfill
7481\centerline{The body of this manual is set in}
7482\centerline{\fontname\tenrm,}
7483\centerline{with headings in {\bf\fontname\tenbf}}
7484\centerline{and examples in {\tt\fontname\tentt}.}
7485\centerline{{\it\fontname\tenit\/} and}
7486\centerline{{\sl\fontname\tensl\/}}
7487\centerline{are used for emphasis.}\vfill}
7488\page\colophon
7489% Blame: doc@cygnus.com, 28mar91.
7490@end tex
7491
252b5132 7492@bye