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