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