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