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