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