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