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