gas/
[deliverable/binutils-gdb.git] / ld / ld.texinfo
CommitLineData
252b5132
RH
1\input texinfo
2@setfilename ld.info
a2b64bed 3@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
ad22bfe8 4@c 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
252b5132 5@syncodeindex ky cp
dff70155 6@c man begin INCLUDE
252b5132
RH
7@include configdoc.texi
8@c (configdoc.texi is generated by the Makefile)
9@include ldver.texi
dff70155 10@c man end
252b5132
RH
11
12@c @smallbook
13
ff5dcc92
SC
14@macro gcctabopt{body}
15@code{\body\}
16@end macro
17
0285c67d
NC
18@c man begin NAME
19@ifset man
20@c Configure for the generation of man pages
21@set UsesEnvVars
22@set GENERIC
0285c67d
NC
23@set ARC
24@set ARM
25@set D10V
26@set D30V
27@set H8/300
28@set H8/500
29@set HPPA
30@set I370
31@set I80386
32@set I860
33@set I960
34@set M32R
35@set M68HC11
36@set M680X0
37@set MCORE
38@set MIPS
3c3bdf30 39@set MMIX
2469cfa2 40@set MSP430
0285c67d
NC
41@set PDP11
42@set PJ
2a60a7a8
AM
43@set POWERPC
44@set POWERPC64
0285c67d
NC
45@set SH
46@set SPARC
9418ab9c 47@set TIC54X
0285c67d
NC
48@set V850
49@set VAX
2ca22b03 50@set WIN32
e0001a05 51@set XTENSA
0285c67d
NC
52@end ifset
53@c man end
54
252b5132
RH
55@ifinfo
56@format
57START-INFO-DIR-ENTRY
58* Ld: (ld). The GNU linker.
59END-INFO-DIR-ENTRY
60@end format
61@end ifinfo
62
63@ifinfo
64This file documents the @sc{gnu} linker LD version @value{VERSION}.
65
62bf86b4 66Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000,
ad22bfe8 672001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
252b5132 68
252b5132 69@ignore
cf055d54
NC
70
71Permission is granted to copy, distribute and/or modify this document
72under the terms of the GNU Free Documentation License, Version 1.1
73or any later version published by the Free Software Foundation;
74with no Invariant Sections, with no Front-Cover Texts, and with no
75Back-Cover Texts. A copy of the license is included in the
36f63dca 76section entitled ``GNU Free Documentation License''.
cf055d54 77
252b5132
RH
78Permission is granted to process this file through Tex and print the
79results, provided the printed document carries copying permission
80notice identical to this one except for the removal of this paragraph
81(this paragraph not being relevant to the printed manual).
82
83@end ignore
84@end ifinfo
85@iftex
86@finalout
87@setchapternewpage odd
71ba23f6 88@settitle The GNU linker
252b5132 89@titlepage
71ba23f6 90@title The GNU linker
252b5132
RH
91@sp 1
92@subtitle @code{ld} version 2
93@subtitle Version @value{VERSION}
94@author Steve Chamberlain
95@author Ian Lance Taylor
252b5132
RH
96@page
97
98@tex
99{\parskip=0pt
704c465c
NC
100\hfill Red Hat Inc\par
101\hfill nickc\@credhat.com, doc\@redhat.com\par
71ba23f6 102\hfill {\it The GNU linker}\par
252b5132
RH
103\hfill Edited by Jeffrey Osier (jeffrey\@cygnus.com)\par
104}
105\global\parindent=0pt % Steve likes it this way.
106@end tex
107
108@vskip 0pt plus 1filll
0285c67d 109@c man begin COPYRIGHT
9c8ebd6a 110Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001,
ad22bfe8 1112002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
252b5132 112
0285c67d
NC
113Permission is granted to copy, distribute and/or modify this document
114under the terms of the GNU Free Documentation License, Version 1.1
115or any later version published by the Free Software Foundation;
116with no Invariant Sections, with no Front-Cover Texts, and with no
117Back-Cover Texts. A copy of the license is included in the
36f63dca 118section entitled ``GNU Free Documentation License''.
0285c67d 119@c man end
252b5132 120
252b5132
RH
121@end titlepage
122@end iftex
123@c FIXME: Talk about importance of *order* of args, cmds to linker!
124
84ec0e6d 125@ifnottex
252b5132 126@node Top
71ba23f6 127@top LD
252b5132
RH
128This file documents the @sc{gnu} linker ld version @value{VERSION}.
129
cf055d54
NC
130This document is distributed under the terms of the GNU Free
131Documentation License. A copy of the license is included in the
36f63dca 132section entitled ``GNU Free Documentation License''.
cf055d54 133
252b5132
RH
134@menu
135* Overview:: Overview
136* Invocation:: Invocation
137* Scripts:: Linker Scripts
138@ifset GENERIC
139* Machine Dependent:: Machine Dependent Features
140@end ifset
141@ifclear GENERIC
142@ifset H8300
143* H8/300:: ld and the H8/300
144@end ifset
c2dcd04e
NC
145@ifset Renesas
146* Renesas:: ld and other Renesas micros
252b5132
RH
147@end ifset
148@ifset I960
149* i960:: ld and the Intel 960 family
150@end ifset
36f63dca
NC
151@ifset ARM
152* ARM:: ld and the ARM family
153@end ifset
154@ifset HPPA
155* HPPA ELF32:: ld and HPPA 32-bit ELF
156@end ifset
93fd0973
SC
157@ifset M68HC11
158* M68HC11/68HC12:: ld and the Motorola 68HC11 and 68HC12 families
159@end ifset
2a60a7a8
AM
160@ifset POWERPC
161* PowerPC ELF32:: ld and PowerPC 32-bit ELF Support
162@end ifset
163@ifset POWERPC64
164* PowerPC64 ELF64:: ld and PowerPC64 64-bit 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
252* Options:: Command Line Options
253* Environment:: Environment Variables
254@end menu
255
256@node Options
257@section Command Line Options
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
309@code{INPUT} or @code{GROUP} to load other objects. Note that
114283d8
NC
310specifying a script in this way merely augments the main linker script;
311use the @samp{-T} option to replace the default linker script entirely.
252b5132
RH
312@xref{Scripts}.
313
314For options whose names are a single letter,
315option arguments must either follow the option letter without intervening
316whitespace, or be given as separate arguments immediately following the
317option that requires them.
318
319For options whose names are multiple letters, either one dash or two can
e4897a32 320precede the option name; for example, @samp{-trace-symbol} and
36f63dca 321@samp{--trace-symbol} are equivalent. Note---there is one exception to
e4897a32 322this rule. Multiple letter options that start with a lower case 'o' can
ba1be17e 323only be preceded by two dashes. This is to reduce confusion with the
e4897a32
NC
324@samp{-o} option. So for example @samp{-omagic} sets the output file
325name to @samp{magic} whereas @samp{--omagic} sets the NMAGIC flag on the
326output.
327
328Arguments to multiple-letter options must either be separated from the
329option name by an equals sign, or be given as separate arguments
330immediately following the option that requires them. For example,
331@samp{--trace-symbol foo} and @samp{--trace-symbol=foo} are equivalent.
332Unique abbreviations of the names of multiple-letter options are
333accepted.
252b5132 334
36f63dca
NC
335Note---if the linker is being invoked indirectly, via a compiler driver
336(e.g. @samp{gcc}) then all the linker command line options should be
fa19fce0
NC
337prefixed by @samp{-Wl,} (or whatever is appropriate for the particular
338compiler driver) like this:
4e53152f
NC
339
340@smallexample
341 gcc -Wl,--startgroup foo.o bar.o -Wl,--endgroup
342@end smallexample
343
344This is important, because otherwise the compiler driver program may
345silently drop the linker options, resulting in a bad link.
346
347Here is a table of the generic command line switches accepted by the GNU
348linker:
349
ff5dcc92 350@table @gcctabopt
38fc1cb1 351@include at-file.texi
dff70155 352
252b5132
RH
353@kindex -a@var{keyword}
354@item -a@var{keyword}
355This option is supported for HP/UX compatibility. The @var{keyword}
356argument must be one of the strings @samp{archive}, @samp{shared}, or
357@samp{default}. @samp{-aarchive} is functionally equivalent to
358@samp{-Bstatic}, and the other two keywords are functionally equivalent
359to @samp{-Bdynamic}. This option may be used any number of times.
360
361@ifset I960
362@cindex architectures
363@kindex -A@var{arch}
364@item -A@var{architecture}
365@kindex --architecture=@var{arch}
366@itemx --architecture=@var{architecture}
ff5dcc92
SC
367In the current release of @command{ld}, this option is useful only for the
368Intel 960 family of architectures. In that @command{ld} configuration, the
252b5132
RH
369@var{architecture} argument identifies the particular architecture in
370the 960 family, enabling some safeguards and modifying the
ff5dcc92 371archive-library search path. @xref{i960,,@command{ld} and the Intel 960
252b5132
RH
372family}, for details.
373
ff5dcc92 374Future releases of @command{ld} may support similar functionality for
252b5132
RH
375other architecture families.
376@end ifset
377
378@ifclear SingleFormat
379@cindex binary input format
380@kindex -b @var{format}
381@kindex --format=@var{format}
382@cindex input format
383@cindex input format
384@item -b @var{input-format}
385@itemx --format=@var{input-format}
ff5dcc92
SC
386@command{ld} may be configured to support more than one kind of object
387file. If your @command{ld} is configured this way, you can use the
252b5132 388@samp{-b} option to specify the binary format for input object files
ff5dcc92 389that follow this option on the command line. Even when @command{ld} is
252b5132 390configured to support alternative object formats, you don't usually need
ff5dcc92 391to specify this, as @command{ld} should be configured to expect as a
252b5132
RH
392default input format the most usual format on each machine.
393@var{input-format} is a text string, the name of a particular format
394supported by the BFD libraries. (You can list the available binary
395formats with @samp{objdump -i}.)
396@xref{BFD}.
397
398You may want to use this option if you are linking files with an unusual
399binary format. You can also use @samp{-b} to switch formats explicitly (when
400linking object files of different formats), by including
401@samp{-b @var{input-format}} before each group of object files in a
a1ab1d2a 402particular format.
252b5132
RH
403
404The default format is taken from the environment variable
405@code{GNUTARGET}.
406@ifset UsesEnvVars
407@xref{Environment}.
408@end ifset
409You can also define the input format from a script, using the command
0285c67d
NC
410@code{TARGET};
411@ifclear man
412see @ref{Format Commands}.
413@end ifclear
252b5132
RH
414@end ifclear
415
416@kindex -c @var{MRI-cmdfile}
417@kindex --mri-script=@var{MRI-cmdfile}
418@cindex compatibility, MRI
419@item -c @var{MRI-commandfile}
420@itemx --mri-script=@var{MRI-commandfile}
ff5dcc92 421For compatibility with linkers produced by MRI, @command{ld} accepts script
252b5132 422files written in an alternate, restricted command language, described in
0285c67d
NC
423@ifclear man
424@ref{MRI,,MRI Compatible Script Files}.
425@end ifclear
426@ifset man
427the MRI Compatible Script Files section of GNU ld documentation.
428@end ifset
429Introduce MRI script files with
252b5132 430the option @samp{-c}; use the @samp{-T} option to run linker
ff5dcc92
SC
431scripts written in the general-purpose @command{ld} scripting language.
432If @var{MRI-cmdfile} does not exist, @command{ld} looks for it in the directories
252b5132
RH
433specified by any @samp{-L} options.
434
435@cindex common allocation
436@kindex -d
437@kindex -dc
438@kindex -dp
a1ab1d2a 439@item -d
252b5132
RH
440@itemx -dc
441@itemx -dp
442These three options are equivalent; multiple forms are supported for
443compatibility with other linkers. They assign space to common symbols
444even if a relocatable output file is specified (with @samp{-r}). The
445script command @code{FORCE_COMMON_ALLOCATION} has the same effect.
446@xref{Miscellaneous Commands}.
447
448@cindex entry point, from command line
449@kindex -e @var{entry}
450@kindex --entry=@var{entry}
a1ab1d2a 451@item -e @var{entry}
252b5132
RH
452@itemx --entry=@var{entry}
453Use @var{entry} as the explicit symbol for beginning execution of your
454program, rather than the default entry point. If there is no symbol
455named @var{entry}, the linker will try to parse @var{entry} as a number,
456and use that as the entry address (the number will be interpreted in
457base 10; you may use a leading @samp{0x} for base 16, or a leading
458@samp{0} for base 8). @xref{Entry Point}, for a discussion of defaults
459and other ways of specifying the entry point.
460
b58f81ae
DJ
461@kindex --exclude-libs
462@item --exclude-libs @var{lib},@var{lib},...
463Specifies a list of archive libraries from which symbols should not be automatically
464exported. The library names may be delimited by commas or colons. Specifying
465@code{--exclude-libs ALL} excludes symbols in all archive libraries from
466automatic export. This option is available only for the i386 PE targeted
467port of the linker and for ELF targeted ports. For i386 PE, symbols
468explicitly listed in a .def file are still exported, regardless of this
469option. For ELF targeted ports, symbols affected by this option will
470be treated as hidden.
471
252b5132
RH
472@cindex dynamic symbol table
473@kindex -E
474@kindex --export-dynamic
475@item -E
476@itemx --export-dynamic
477When creating a dynamically linked executable, add all symbols to the
478dynamic symbol table. The dynamic symbol table is the set of symbols
479which are visible from dynamic objects at run time.
480
481If you do not use this option, the dynamic symbol table will normally
482contain only those symbols which are referenced by some dynamic object
483mentioned in the link.
484
485If you use @code{dlopen} to load a dynamic object which needs to refer
486back to the symbols defined by the program, rather than some other
487dynamic object, then you will probably need to use this option when
488linking the program itself.
489
55255dae 490You can also use the dynamic list to control what symbols should
cb840a31 491be added to the dynamic symbol table if the output format supports it.
55255dae 492See the description of @samp{--dynamic-list}.
cb840a31 493
36f63dca 494@ifclear SingleFormat
252b5132
RH
495@cindex big-endian objects
496@cindex endianness
497@kindex -EB
498@item -EB
499Link big-endian objects. This affects the default output format.
500
501@cindex little-endian objects
502@kindex -EL
503@item -EL
504Link little-endian objects. This affects the default output format.
36f63dca 505@end ifclear
252b5132
RH
506
507@kindex -f
508@kindex --auxiliary
509@item -f
510@itemx --auxiliary @var{name}
511When creating an ELF shared object, set the internal DT_AUXILIARY field
512to the specified name. This tells the dynamic linker that the symbol
513table of the shared object should be used as an auxiliary filter on the
514symbol table of the shared object @var{name}.
515
516If you later link a program against this filter object, then, when you
517run the program, the dynamic linker will see the DT_AUXILIARY field. If
518the dynamic linker resolves any symbols from the filter object, it will
519first check whether there is a definition in the shared object
520@var{name}. If there is one, it will be used instead of the definition
521in the filter object. The shared object @var{name} need not exist.
522Thus the shared object @var{name} may be used to provide an alternative
523implementation of certain functions, perhaps for debugging or for
524machine specific performance.
525
526This option may be specified more than once. The DT_AUXILIARY entries
527will be created in the order in which they appear on the command line.
528
529@kindex -F
530@kindex --filter
531@item -F @var{name}
532@itemx --filter @var{name}
533When creating an ELF shared object, set the internal DT_FILTER field to
534the specified name. This tells the dynamic linker that the symbol table
535of the shared object which is being created should be used as a filter
536on the symbol table of the shared object @var{name}.
537
538If you later link a program against this filter object, then, when you
539run the program, the dynamic linker will see the DT_FILTER field. The
540dynamic linker will resolve symbols according to the symbol table of the
541filter object as usual, but it will actually link to the definitions
542found in the shared object @var{name}. Thus the filter object can be
543used to select a subset of the symbols provided by the object
544@var{name}.
545
ff5dcc92 546Some older linkers used the @option{-F} option throughout a compilation
252b5132 547toolchain for specifying object-file format for both input and output
36f63dca
NC
548object files.
549@ifclear SingleFormat
550The @sc{gnu} linker uses other mechanisms for this purpose: the
ece2d90e 551@option{-b}, @option{--format}, @option{--oformat} options, the
252b5132 552@code{TARGET} command in linker scripts, and the @code{GNUTARGET}
36f63dca
NC
553environment variable.
554@end ifclear
555The @sc{gnu} linker will ignore the @option{-F} option when not
556creating an ELF shared object.
252b5132 557
3dbf70a2
MM
558@cindex finalization function
559@kindex -fini
560@item -fini @var{name}
561When creating an ELF executable or shared object, call NAME when the
562executable or shared object is unloaded, by setting DT_FINI to the
563address of the function. By default, the linker uses @code{_fini} as
564the function to call.
565
252b5132
RH
566@kindex -g
567@item -g
568Ignored. Provided for compatibility with other tools.
569
570@kindex -G
571@kindex --gpsize
572@cindex object size
573@item -G@var{value}
574@itemx --gpsize=@var{value}
575Set the maximum size of objects to be optimized using the GP register to
576@var{size}. This is only meaningful for object file formats such as
577MIPS ECOFF which supports putting large and small objects into different
578sections. This is ignored for other object file formats.
579
580@cindex runtime library name
581@kindex -h@var{name}
582@kindex -soname=@var{name}
583@item -h@var{name}
584@itemx -soname=@var{name}
585When creating an ELF shared object, set the internal DT_SONAME field to
586the specified name. When an executable is linked with a shared object
587which has a DT_SONAME field, then when the executable is run the dynamic
588linker will attempt to load the shared object specified by the DT_SONAME
589field rather than the using the file name given to the linker.
590
591@kindex -i
592@cindex incremental link
593@item -i
594Perform an incremental link (same as option @samp{-r}).
595
3dbf70a2
MM
596@cindex initialization function
597@kindex -init
598@item -init @var{name}
599When creating an ELF executable or shared object, call NAME when the
600executable or shared object is loaded, by setting DT_INIT to the address
601of the function. By default, the linker uses @code{_init} as the
602function to call.
603
252b5132
RH
604@cindex archive files, from cmd line
605@kindex -l@var{archive}
606@kindex --library=@var{archive}
607@item -l@var{archive}
608@itemx --library=@var{archive}
609Add archive file @var{archive} to the list of files to link. This
ff5dcc92 610option may be used any number of times. @command{ld} will search its
252b5132
RH
611path-list for occurrences of @code{lib@var{archive}.a} for every
612@var{archive} specified.
613
ff5dcc92 614On systems which support shared libraries, @command{ld} may also search for
252b5132 615libraries with extensions other than @code{.a}. Specifically, on ELF
ff5dcc92 616and SunOS systems, @command{ld} will search a directory for a library with
252b5132
RH
617an extension of @code{.so} before searching for one with an extension of
618@code{.a}. By convention, a @code{.so} extension indicates a shared
619library.
620
621The linker will search an archive only once, at the location where it is
622specified on the command line. If the archive defines a symbol which
623was undefined in some object which appeared before the archive on the
624command line, the linker will include the appropriate file(s) from the
625archive. However, an undefined symbol in an object appearing later on
626the command line will not cause the linker to search the archive again.
627
ff5dcc92 628See the @option{-(} option for a way to force the linker to search
252b5132
RH
629archives multiple times.
630
631You may list the same archive multiple times on the command line.
632
633@ifset GENERIC
634This type of archive searching is standard for Unix linkers. However,
ff5dcc92 635if you are using @command{ld} on AIX, note that it is different from the
252b5132
RH
636behaviour of the AIX linker.
637@end ifset
638
639@cindex search directory, from cmd line
640@kindex -L@var{dir}
641@kindex --library-path=@var{dir}
a1ab1d2a 642@item -L@var{searchdir}
252b5132 643@itemx --library-path=@var{searchdir}
ff5dcc92
SC
644Add path @var{searchdir} to the list of paths that @command{ld} will search
645for archive libraries and @command{ld} control scripts. You may use this
252b5132
RH
646option any number of times. The directories are searched in the order
647in which they are specified on the command line. Directories specified
648on the command line are searched before the default directories. All
ff5dcc92 649@option{-L} options apply to all @option{-l} options, regardless of the
252b5132
RH
650order in which the options appear.
651
9c8ebd6a
DJ
652If @var{searchdir} begins with @code{=}, then the @code{=} will be replaced
653by the @dfn{sysroot prefix}, a path specified when the linker is configured.
654
252b5132
RH
655@ifset UsesEnvVars
656The default set of paths searched (without being specified with
ff5dcc92 657@samp{-L}) depends on which emulation mode @command{ld} is using, and in
252b5132
RH
658some cases also on how it was configured. @xref{Environment}.
659@end ifset
660
661The paths can also be specified in a link script with the
662@code{SEARCH_DIR} command. Directories specified this way are searched
663at the point in which the linker script appears in the command line.
664
665@cindex emulation
666@kindex -m @var{emulation}
667@item -m@var{emulation}
668Emulate the @var{emulation} linker. You can list the available
669emulations with the @samp{--verbose} or @samp{-V} options.
670
671If the @samp{-m} option is not used, the emulation is taken from the
672@code{LDEMULATION} environment variable, if that is defined.
673
674Otherwise, the default emulation depends upon how the linker was
675configured.
676
677@cindex link map
678@kindex -M
679@kindex --print-map
680@item -M
681@itemx --print-map
682Print a link map to the standard output. A link map provides
683information about the link, including the following:
684
685@itemize @bullet
686@item
3b83e13a 687Where object files are mapped into memory.
252b5132
RH
688@item
689How common symbols are allocated.
690@item
691All archive members included in the link, with a mention of the symbol
692which caused the archive member to be brought in.
3b83e13a
NC
693@item
694The values assigned to symbols.
695
696Note - symbols whose values are computed by an expression which
697involves a reference to a previous value of the same symbol may not
698have correct result displayed in the link map. This is because the
699linker discards intermediate results and only retains the final value
700of an expression. Under such circumstances the linker will display
701the final value enclosed by square brackets. Thus for example a
702linker script containing:
703
704@smallexample
705 foo = 1
706 foo = foo * 4
707 foo = foo + 8
708@end smallexample
709
710will produce the following output in the link map if the @option{-M}
711option is used:
712
713@smallexample
714 0x00000001 foo = 0x1
715 [0x0000000c] foo = (foo * 0x4)
716 [0x0000000c] foo = (foo + 0x8)
717@end smallexample
718
719See @ref{Expressions} for more information about expressions in linker
720scripts.
252b5132
RH
721@end itemize
722
723@kindex -n
724@cindex read-only text
725@cindex NMAGIC
726@kindex --nmagic
727@item -n
728@itemx --nmagic
fa19fce0 729Turn off page alignment of sections, and mark the output as
a1ab1d2a 730@code{NMAGIC} if possible.
252b5132
RH
731
732@kindex -N
733@kindex --omagic
734@cindex read/write from cmd line
735@cindex OMAGIC
a1ab1d2a 736@item -N
252b5132
RH
737@itemx --omagic
738Set the text and data sections to be readable and writable. Also, do
63fd3b82
NC
739not page-align the data segment, and disable linking against shared
740libraries. If the output format supports Unix style magic numbers,
4d8907ac
DS
741mark the output as @code{OMAGIC}. Note: Although a writable text section
742is allowed for PE-COFF targets, it does not conform to the format
743specification published by Microsoft.
63fd3b82
NC
744
745@kindex --no-omagic
746@cindex OMAGIC
747@item --no-omagic
748This option negates most of the effects of the @option{-N} option. It
749sets the text section to be read-only, and forces the data segment to
750be page-aligned. Note - this option does not enable linking against
751shared libraries. Use @option{-Bdynamic} for this.
252b5132
RH
752
753@kindex -o @var{output}
754@kindex --output=@var{output}
755@cindex naming the output file
756@item -o @var{output}
757@itemx --output=@var{output}
ff5dcc92 758Use @var{output} as the name for the program produced by @command{ld}; if this
252b5132
RH
759option is not specified, the name @file{a.out} is used by default. The
760script command @code{OUTPUT} can also specify the output file name.
761
762@kindex -O @var{level}
763@cindex generating optimized output
764@item -O @var{level}
ff5dcc92 765If @var{level} is a numeric values greater than zero @command{ld} optimizes
252b5132
RH
766the output. This might take significantly longer and therefore probably
767should only be enabled for the final binary.
768
a712da20
NC
769@kindex -q
770@kindex --emit-relocs
771@cindex retain relocations in final executable
772@item -q
773@itemx --emit-relocs
ba1be17e 774Leave relocation sections and contents in fully linked executables.
a712da20
NC
775Post link analysis and optimization tools may need this information in
776order to perform correct modifications of executables. This results
777in larger executables.
778
dbab7a7b
NC
779This option is currently only supported on ELF platforms.
780
4f471f39
RS
781@kindex --force-dynamic
782@cindex forcing the creation of dynamic sections
783@item --force-dynamic
784Force the output file to have dynamic sections. This option is specific
785to VxWorks targets.
786
252b5132
RH
787@cindex partial link
788@cindex relocatable output
789@kindex -r
1049f94e 790@kindex --relocatable
252b5132 791@item -r
1049f94e 792@itemx --relocatable
252b5132 793Generate relocatable output---i.e., generate an output file that can in
ff5dcc92 794turn serve as input to @command{ld}. This is often called @dfn{partial
252b5132
RH
795linking}. As a side effect, in environments that support standard Unix
796magic numbers, this option also sets the output file's magic number to
797@code{OMAGIC}.
ff5dcc92 798@c ; see @option{-N}.
252b5132
RH
799If this option is not specified, an absolute file is produced. When
800linking C++ programs, this option @emph{will not} resolve references to
801constructors; to do that, use @samp{-Ur}.
802
62bf86b4
HPN
803When an input file does not have the same format as the output file,
804partial linking is only supported if that input file does not contain any
805relocations. Different output formats can have further restrictions; for
806example some @code{a.out}-based formats do not support partial linking
807with input files in other formats at all.
808
252b5132
RH
809This option does the same thing as @samp{-i}.
810
811@kindex -R @var{file}
812@kindex --just-symbols=@var{file}
813@cindex symbol-only input
814@item -R @var{filename}
815@itemx --just-symbols=@var{filename}
816Read symbol names and their addresses from @var{filename}, but do not
817relocate it or include it in the output. This allows your output file
818to refer symbolically to absolute locations of memory defined in other
819programs. You may use this option more than once.
820
ff5dcc92 821For compatibility with other ELF linkers, if the @option{-R} option is
252b5132 822followed by a directory name, rather than a file name, it is treated as
ff5dcc92 823the @option{-rpath} option.
252b5132
RH
824
825@kindex -s
826@kindex --strip-all
827@cindex strip all symbols
a1ab1d2a 828@item -s
252b5132
RH
829@itemx --strip-all
830Omit all symbol information from the output file.
831
832@kindex -S
833@kindex --strip-debug
834@cindex strip debugger symbols
a1ab1d2a 835@item -S
252b5132
RH
836@itemx --strip-debug
837Omit debugger symbol information (but not all symbols) from the output file.
838
839@kindex -t
840@kindex --trace
841@cindex input files, displaying
a1ab1d2a 842@item -t
252b5132 843@itemx --trace
ff5dcc92 844Print the names of the input files as @command{ld} processes them.
252b5132
RH
845
846@kindex -T @var{script}
847@kindex --script=@var{script}
848@cindex script files
849@item -T @var{scriptfile}
850@itemx --script=@var{scriptfile}
851Use @var{scriptfile} as the linker script. This script replaces
ff5dcc92 852@command{ld}'s default linker script (rather than adding to it), so
252b5132 853@var{commandfile} must specify everything necessary to describe the
114283d8
NC
854output file. @xref{Scripts}. If @var{scriptfile} does not exist in
855the current directory, @code{ld} looks for it in the directories
856specified by any preceding @samp{-L} options. Multiple @samp{-T}
857options accumulate.
252b5132 858
14be8564
L
859@kindex -dT @var{script}
860@kindex --default-script=@var{script}
861@cindex script files
862@item -dT @var{scriptfile}
863@itemx --default-script=@var{scriptfile}
864Use @var{scriptfile} as the default linker script. @xref{Scripts}.
865
866This option is similar to the @option{--script} option except that
867processing of the script is delayed until after the rest of the
868command line has been processed. This allows options placed after the
869@option{--default-script} option on the command line to affect the
870behaviour of the linker script, which can be important when the linker
871command line cannot be directly controlled by the user. (eg because
872the command line is being constructed by another tool, such as
873@samp{gcc}).
874
252b5132
RH
875@kindex -u @var{symbol}
876@kindex --undefined=@var{symbol}
877@cindex undefined symbol
878@item -u @var{symbol}
879@itemx --undefined=@var{symbol}
880Force @var{symbol} to be entered in the output file as an undefined
881symbol. Doing this may, for example, trigger linking of additional
882modules from standard libraries. @samp{-u} may be repeated with
883different option arguments to enter additional undefined symbols. This
884option is equivalent to the @code{EXTERN} linker script command.
885
886@kindex -Ur
887@cindex constructors
a1ab1d2a 888@item -Ur
252b5132
RH
889For anything other than C++ programs, this option is equivalent to
890@samp{-r}: it generates relocatable output---i.e., an output file that can in
ff5dcc92 891turn serve as input to @command{ld}. When linking C++ programs, @samp{-Ur}
252b5132
RH
892@emph{does} resolve references to constructors, unlike @samp{-r}.
893It does not work to use @samp{-Ur} on files that were themselves linked
894with @samp{-Ur}; once the constructor table has been built, it cannot
895be added to. Use @samp{-Ur} only for the last partial link, and
896@samp{-r} for the others.
897
577a0623
AM
898@kindex --unique[=@var{SECTION}]
899@item --unique[=@var{SECTION}]
900Creates a separate output section for every input section matching
901@var{SECTION}, or if the optional wildcard @var{SECTION} argument is
902missing, for every orphan input section. An orphan section is one not
903specifically mentioned in a linker script. You may use this option
904multiple times on the command line; It prevents the normal merging of
905input sections with the same name, overriding output section assignments
906in a linker script.
a854a4a7 907
252b5132
RH
908@kindex -v
909@kindex -V
910@kindex --version
911@cindex version
912@item -v
913@itemx --version
914@itemx -V
ff5dcc92 915Display the version number for @command{ld}. The @option{-V} option also
252b5132
RH
916lists the supported emulations.
917
918@kindex -x
919@kindex --discard-all
920@cindex deleting local symbols
921@item -x
922@itemx --discard-all
923Delete all local symbols.
924
925@kindex -X
926@kindex --discard-locals
927@cindex local symbols, deleting
a1ab1d2a 928@item -X
252b5132 929@itemx --discard-locals
3c68c38f
BW
930Delete all temporary local symbols. (These symbols start with
931system-specific local label prefixes, typically @samp{.L} for ELF systems
932or @samp{L} for traditional a.out systems.)
252b5132
RH
933
934@kindex -y @var{symbol}
935@kindex --trace-symbol=@var{symbol}
936@cindex symbol tracing
937@item -y @var{symbol}
938@itemx --trace-symbol=@var{symbol}
939Print the name of each linked file in which @var{symbol} appears. This
940option may be given any number of times. On many systems it is necessary
941to prepend an underscore.
942
943This option is useful when you have an undefined symbol in your link but
944don't know where the reference is coming from.
945
946@kindex -Y @var{path}
947@item -Y @var{path}
948Add @var{path} to the default library search path. This option exists
949for Solaris compatibility.
950
951@kindex -z @var{keyword}
952@item -z @var{keyword}
cd6d6c15
NC
953The recognized keywords are:
954@table @samp
955
956@item combreloc
957Combines multiple reloc sections and sorts them to make dynamic symbol
958lookup caching possible.
959
960@item defs
560e09e9 961Disallows undefined symbols in object files. Undefined symbols in
07f3b6ad 962shared libraries are still allowed.
cd6d6c15 963
6aa29e7b
JJ
964@item execstack
965Marks the object as requiring executable stack.
966
cd6d6c15
NC
967@item initfirst
968This option is only meaningful when building a shared object.
969It marks the object so that its runtime initialization will occur
970before the runtime initialization of any other objects brought into
971the process at the same time. Similarly the runtime finalization of
972the object will occur after the runtime finalization of any other
973objects.
974
975@item interpose
976Marks the object that its symbol table interposes before all symbols
977but the primary executable.
978
5fa222e4
AM
979@item lazy
980When generating an executable or shared library, mark it to tell the
981dynamic linker to defer function call resolution to the point when
982the function is called (lazy binding), rather than at load time.
983Lazy binding is the default.
984
cd6d6c15
NC
985@item loadfltr
986Marks the object that its filters be processed immediately at
987runtime.
988
989@item muldefs
990Allows multiple definitions.
991
992@item nocombreloc
993Disables multiple reloc sections combining.
994
995@item nocopyreloc
996Disables production of copy relocs.
997
998@item nodefaultlib
999Marks the object that the search for dependencies of this object will
1000ignore any default library search paths.
1001
1002@item nodelete
1003Marks the object shouldn't be unloaded at runtime.
1004
1005@item nodlopen
1006Marks the object not available to @code{dlopen}.
1007
1008@item nodump
1009Marks the object can not be dumped by @code{dldump}.
1010
6aa29e7b
JJ
1011@item noexecstack
1012Marks the object as not requiring executable stack.
1013
1014@item norelro
1015Don't create an ELF @code{PT_GNU_RELRO} segment header in the object.
1016
cd6d6c15
NC
1017@item now
1018When generating an executable or shared library, mark it to tell the
1019dynamic linker to resolve all symbols when the program is started, or
1020when the shared library is linked to using dlopen, instead of
1021deferring function call resolution to the point when the function is
1022first called.
1023
1024@item origin
1025Marks the object may contain $ORIGIN.
1026
6aa29e7b
JJ
1027@item relro
1028Create an ELF @code{PT_GNU_RELRO} segment header in the object.
1029
24718e3b
L
1030@item max-page-size=@var{value}
1031Set the emulation maximum page size to @var{value}.
1032
1033@item common-page-size=@var{value}
1034Set the emulation common page size to @var{value}.
1035
cd6d6c15
NC
1036@end table
1037
ece2d90e 1038Other keywords are ignored for Solaris compatibility.
252b5132
RH
1039
1040@kindex -(
1041@cindex groups of archives
1042@item -( @var{archives} -)
1043@itemx --start-group @var{archives} --end-group
1044The @var{archives} should be a list of archive files. They may be
1045either explicit file names, or @samp{-l} options.
1046
1047The specified archives are searched repeatedly until no new undefined
1048references are created. Normally, an archive is searched only once in
1049the order that it is specified on the command line. If a symbol in that
1050archive is needed to resolve an undefined symbol referred to by an
1051object in an archive that appears later on the command line, the linker
1052would not be able to resolve that reference. By grouping the archives,
1053they all be searched repeatedly until all possible references are
1054resolved.
1055
1056Using this option has a significant performance cost. It is best to use
1057it only when there are unavoidable circular references between two or
1058more archives.
1059
69da35b5
NC
1060@kindex --accept-unknown-input-arch
1061@kindex --no-accept-unknown-input-arch
1062@item --accept-unknown-input-arch
1063@itemx --no-accept-unknown-input-arch
1064Tells the linker to accept input files whose architecture cannot be
2ca22b03 1065recognised. The assumption is that the user knows what they are doing
69da35b5
NC
1066and deliberately wants to link in these unknown input files. This was
1067the default behaviour of the linker, before release 2.14. The default
1068behaviour from release 2.14 onwards is to reject such input files, and
1069so the @samp{--accept-unknown-input-arch} option has been added to
1070restore the old behaviour.
2ca22b03 1071
4a43e768
AM
1072@kindex --as-needed
1073@kindex --no-as-needed
1074@item --as-needed
1075@itemx --no-as-needed
1076This option affects ELF DT_NEEDED tags for dynamic libraries mentioned
1077on the command line after the @option{--as-needed} option. Normally,
1078the linker will add a DT_NEEDED tag for each dynamic library mentioned
1079on the command line, regardless of whether the library is actually
77cfaee6
AM
1080needed. @option{--as-needed} causes DT_NEEDED tags to only be emitted
1081for libraries that satisfy some symbol reference from regular objects
1082which is undefined at the point that the library was linked.
4a43e768
AM
1083@option{--no-as-needed} restores the default behaviour.
1084
e56f61be
L
1085@kindex --add-needed
1086@kindex --no-add-needed
1087@item --add-needed
1088@itemx --no-add-needed
1089This option affects the treatment of dynamic libraries from ELF
1090DT_NEEDED tags in dynamic libraries mentioned on the command line after
1091the @option{--no-add-needed} option. Normally, the linker will add
1092a DT_NEEDED tag for each dynamic library from DT_NEEDED tags.
1093@option{--no-add-needed} causes DT_NEEDED tags will never be emitted
1094for those libraries from DT_NEEDED tags. @option{--add-needed} restores
1095the default behaviour.
1096
252b5132
RH
1097@kindex -assert @var{keyword}
1098@item -assert @var{keyword}
1099This option is ignored for SunOS compatibility.
1100
1101@kindex -Bdynamic
1102@kindex -dy
1103@kindex -call_shared
1104@item -Bdynamic
1105@itemx -dy
1106@itemx -call_shared
1107Link against dynamic libraries. This is only meaningful on platforms
1108for which shared libraries are supported. This option is normally the
1109default on such platforms. The different variants of this option are
1110for compatibility with various systems. You may use this option
1111multiple times on the command line: it affects library searching for
da8bce14 1112@option{-l} options which follow it.
252b5132 1113
a1ab1d2a
UD
1114@kindex -Bgroup
1115@item -Bgroup
1116Set the @code{DF_1_GROUP} flag in the @code{DT_FLAGS_1} entry in the dynamic
1117section. This causes the runtime linker to handle lookups in this
1118object and its dependencies to be performed only inside the group.
560e09e9
NC
1119@option{--unresolved-symbols=report-all} is implied. This option is
1120only meaningful on ELF platforms which support shared libraries.
a1ab1d2a 1121
252b5132
RH
1122@kindex -Bstatic
1123@kindex -dn
1124@kindex -non_shared
1125@kindex -static
a1ab1d2a 1126@item -Bstatic
252b5132
RH
1127@itemx -dn
1128@itemx -non_shared
1129@itemx -static
1130Do not link against shared libraries. This is only meaningful on
1131platforms for which shared libraries are supported. The different
1132variants of this option are for compatibility with various systems. You
1133may use this option multiple times on the command line: it affects
560e09e9 1134library searching for @option{-l} options which follow it. This
e9156f74
NC
1135option also implies @option{--unresolved-symbols=report-all}. This
1136option can be used with @option{-shared}. Doing so means that a
1137shared library is being created but that all of the library's external
1138references must be resolved by pulling in entries from static
ece2d90e 1139libraries.
252b5132
RH
1140
1141@kindex -Bsymbolic
1142@item -Bsymbolic
1143When creating a shared library, bind references to global symbols to the
1144definition within the shared library, if any. Normally, it is possible
1145for a program linked against a shared library to override the definition
1146within the shared library. This option is only meaningful on ELF
1147platforms which support shared libraries.
1148
40b36307
L
1149@kindex -Bsymbolic-functions
1150@item -Bsymbolic-functions
1151When creating a shared library, bind references to global function
1152symbols to the definition within the shared library, if any.
40b36307
L
1153This option is only meaningful on ELF platforms which support shared
1154libraries.
1155
55255dae
L
1156@kindex --dynamic-list=@var{dynamic-list-file}
1157@item --dynamic-list=@var{dynamic-list-file}
1158Specify the name of a dynamic list file to the linker. This is
1159typically used when creating shared libraries to specify a list of
1160global symbols whose references shouldn't be bound to the definition
1161within the shared library, or creating dynamically linked executables
1162to specify a list of symbols which should be added to the symbol table
1163in the executable. This option is only meaningful on ELF platforms
1164which support shared libraries.
1165
1166The format of the dynamic list is the same as the version node without
1167scope and node name. See @ref{VERSION} for more information.
1168
40b36307
L
1169@kindex --dynamic-list-data
1170@item --dynamic-list-data
1171Include all global data symbols to the dynamic list.
1172
1173@kindex --dynamic-list-cpp-new
1174@item --dynamic-list-cpp-new
1175Provide the builtin dynamic list for C++ operator new and delete. It
1176is mainly useful for building shared libstdc++.
1177
0b8a70d9
L
1178@kindex --dynamic-list-cpp-typeinfo
1179@item --dynamic-list-cpp-typeinfo
1180Provide the builtin dynamic list for C++ runtime type identification.
1181
252b5132
RH
1182@kindex --check-sections
1183@kindex --no-check-sections
1184@item --check-sections
308b1ffd 1185@itemx --no-check-sections
252b5132 1186Asks the linker @emph{not} to check section addresses after they have
7d816a17 1187been assigned to see if there are any overlaps. Normally the linker will
252b5132
RH
1188perform this check, and if it finds any overlaps it will produce
1189suitable error messages. The linker does know about, and does make
1190allowances for sections in overlays. The default behaviour can be
560e09e9 1191restored by using the command line switch @option{--check-sections}.
252b5132
RH
1192
1193@cindex cross reference table
1194@kindex --cref
1195@item --cref
1196Output a cross reference table. If a linker map file is being
1197generated, the cross reference table is printed to the map file.
1198Otherwise, it is printed on the standard output.
1199
1200The format of the table is intentionally simple, so that it may be
1201easily processed by a script if necessary. The symbols are printed out,
1202sorted by name. For each symbol, a list of file names is given. If the
1203symbol is defined, the first file listed is the location of the
1204definition. The remaining files contain references to the symbol.
1205
4818e05f
AM
1206@cindex common allocation
1207@kindex --no-define-common
1208@item --no-define-common
1209This option inhibits the assignment of addresses to common symbols.
1210The script command @code{INHIBIT_COMMON_ALLOCATION} has the same effect.
1211@xref{Miscellaneous Commands}.
1212
1213The @samp{--no-define-common} option allows decoupling
1214the decision to assign addresses to Common symbols from the choice
1215of the output file type; otherwise a non-Relocatable output type
1216forces assigning addresses to Common symbols.
1217Using @samp{--no-define-common} allows Common symbols that are referenced
1218from a shared library to be assigned addresses only in the main program.
1219This eliminates the unused duplicate space in the shared library,
1220and also prevents any possible confusion over resolving to the wrong
1221duplicate when there are many dynamic modules with specialized search
1222paths for runtime symbol resolution.
1223
252b5132
RH
1224@cindex symbols, from command line
1225@kindex --defsym @var{symbol}=@var{exp}
1226@item --defsym @var{symbol}=@var{expression}
1227Create a global symbol in the output file, containing the absolute
1228address given by @var{expression}. You may use this option as many
1229times as necessary to define multiple symbols in the command line. A
1230limited form of arithmetic is supported for the @var{expression} in this
1231context: you may give a hexadecimal constant or the name of an existing
1232symbol, or use @code{+} and @code{-} to add or subtract hexadecimal
1233constants or symbols. If you need more elaborate expressions, consider
1234using the linker command language from a script (@pxref{Assignments,,
1235Assignment: Symbol Definitions}). @emph{Note:} there should be no white
1236space between @var{symbol}, the equals sign (``@key{=}''), and
1237@var{expression}.
1238
1239@cindex demangling, from command line
28c309a2 1240@kindex --demangle[=@var{style}]
252b5132 1241@kindex --no-demangle
28c309a2 1242@item --demangle[=@var{style}]
252b5132
RH
1243@itemx --no-demangle
1244These options control whether to demangle symbol names in error messages
1245and other output. When the linker is told to demangle, it tries to
1246present symbol names in a readable fashion: it strips leading
1247underscores if they are used by the object file format, and converts C++
a1ab1d2a
UD
1248mangled symbol names into user readable names. Different compilers have
1249different mangling styles. The optional demangling style argument can be used
1250to choose an appropriate demangling style for your compiler. The linker will
28c309a2
NC
1251demangle by default unless the environment variable @samp{COLLECT_NO_DEMANGLE}
1252is set. These options may be used to override the default.
252b5132
RH
1253
1254@cindex dynamic linker, from command line
506eee22 1255@kindex -I@var{file}
252b5132
RH
1256@kindex --dynamic-linker @var{file}
1257@item --dynamic-linker @var{file}
1258Set the name of the dynamic linker. This is only meaningful when
1259generating dynamically linked ELF executables. The default dynamic
1260linker is normally correct; don't use this unless you know what you are
1261doing.
1262
7ce691ae
C
1263
1264@kindex --fatal-warnings
1265@item --fatal-warnings
1266Treat all warnings as errors.
1267
252b5132
RH
1268@kindex --force-exe-suffix
1269@item --force-exe-suffix
1270Make sure that an output file has a .exe suffix.
1271
1272If a successfully built fully linked output file does not have a
1273@code{.exe} or @code{.dll} suffix, this option forces the linker to copy
1274the output file to one of the same name with a @code{.exe} suffix. This
1275option is useful when using unmodified Unix makefiles on a Microsoft
1276Windows host, since some versions of Windows won't run an image unless
1277it ends in a @code{.exe} suffix.
1278
1279@kindex --gc-sections
1280@kindex --no-gc-sections
1281@cindex garbage collection
c17d87de
NC
1282@item --gc-sections
1283@itemx --no-gc-sections
252b5132
RH
1284Enable garbage collection of unused input sections. It is ignored on
1285targets that do not support this option. This option is not compatible
b3549761
NC
1286with @samp{-r} or @samp{--emit-relocs}. The default behaviour (of not
1287performing this garbage collection) can be restored by specifying
1288@samp{--no-gc-sections} on the command line.
252b5132 1289
c17d87de
NC
1290@kindex --print-gc-sections
1291@kindex --no-print-gc-sections
1292@cindex garbage collection
1293@item --print-gc-sections
1294@itemx --no-print-gc-sections
1295List all sections removed by garbage collection. The listing is
1296printed on stderr. This option is only effective if garbage
1297collection has been enabled via the @samp{--gc-sections}) option. The
1298default behaviour (of not listing the sections that are removed) can
1299be restored by specifying @samp{--no-print-gc-sections} on the command
1300line.
1301
252b5132
RH
1302@cindex help
1303@cindex usage
1304@kindex --help
1305@item --help
1306Print a summary of the command-line options on the standard output and exit.
1307
ea20a7da
CC
1308@kindex --target-help
1309@item --target-help
1310Print a summary of all target specific options on the standard output and exit.
1311
252b5132
RH
1312@kindex -Map
1313@item -Map @var{mapfile}
1314Print a link map to the file @var{mapfile}. See the description of the
560e09e9 1315@option{-M} option, above.
252b5132
RH
1316
1317@cindex memory usage
1318@kindex --no-keep-memory
1319@item --no-keep-memory
ff5dcc92
SC
1320@command{ld} normally optimizes for speed over memory usage by caching the
1321symbol tables of input files in memory. This option tells @command{ld} to
252b5132 1322instead optimize for memory usage, by rereading the symbol tables as
ff5dcc92 1323necessary. This may be required if @command{ld} runs out of memory space
252b5132
RH
1324while linking a large executable.
1325
1326@kindex --no-undefined
a1ab1d2a 1327@kindex -z defs
252b5132 1328@item --no-undefined
a1ab1d2a 1329@itemx -z defs
560e09e9
NC
1330Report unresolved symbol references from regular object files. This
1331is done even if the linker is creating a non-symbolic shared library.
1332The switch @option{--[no-]allow-shlib-undefined} controls the
1333behaviour for reporting unresolved references found in shared
ece2d90e 1334libraries being linked in.
252b5132 1335
aa713662
L
1336@kindex --allow-multiple-definition
1337@kindex -z muldefs
1338@item --allow-multiple-definition
1339@itemx -z muldefs
1340Normally when a symbol is defined multiple times, the linker will
1341report a fatal error. These options allow multiple definitions and the
1342first definition will be used.
1343
b79e8c78 1344@kindex --allow-shlib-undefined
ae9a127f 1345@kindex --no-allow-shlib-undefined
b79e8c78 1346@item --allow-shlib-undefined
ae9a127f 1347@itemx --no-allow-shlib-undefined
560e09e9
NC
1348Allows (the default) or disallows undefined symbols in shared libraries.
1349This switch is similar to @option{--no-undefined} except that it
1350determines the behaviour when the undefined symbols are in a
1351shared library rather than a regular object file. It does not affect
1352how undefined symbols in regular object files are handled.
1353
1354The reason that @option{--allow-shlib-undefined} is the default is that
1355the shared library being specified at link time may not be the same as
1356the one that is available at load time, so the symbols might actually be
ae9a127f 1357resolvable at load time. Plus there are some systems, (eg BeOS) where
560e09e9 1358undefined symbols in shared libraries is normal. (The kernel patches
ece2d90e 1359them at load time to select which function is most appropriate
560e09e9
NC
1360for the current architecture. This is used for example to dynamically
1361select an appropriate memset function). Apparently it is also normal
1362for HPPA shared libraries to have undefined symbols.
b79e8c78 1363
31941635
L
1364@kindex --no-undefined-version
1365@item --no-undefined-version
1366Normally when a symbol has an undefined version, the linker will ignore
1367it. This option disallows symbols with undefined version and a fatal error
1368will be issued instead.
1369
3e3b46e5
PB
1370@kindex --default-symver
1371@item --default-symver
1372Create and use a default symbol version (the soname) for unversioned
fc0e6df6
PB
1373exported symbols.
1374
1375@kindex --default-imported-symver
1376@item --default-imported-symver
1377Create and use a default symbol version (the soname) for unversioned
1378imported symbols.
3e3b46e5 1379
252b5132
RH
1380@kindex --no-warn-mismatch
1381@item --no-warn-mismatch
ff5dcc92 1382Normally @command{ld} will give an error if you try to link together input
252b5132
RH
1383files that are mismatched for some reason, perhaps because they have
1384been compiled for different processors or for different endiannesses.
ff5dcc92 1385This option tells @command{ld} that it should silently permit such possible
252b5132
RH
1386errors. This option should only be used with care, in cases when you
1387have taken some special action that ensures that the linker errors are
1388inappropriate.
1389
1390@kindex --no-whole-archive
1391@item --no-whole-archive
ff5dcc92 1392Turn off the effect of the @option{--whole-archive} option for subsequent
252b5132
RH
1393archive files.
1394
1395@cindex output file after errors
1396@kindex --noinhibit-exec
1397@item --noinhibit-exec
1398Retain the executable output file whenever it is still usable.
1399Normally, the linker will not produce an output file if it encounters
1400errors during the link process; it exits without writing an output file
1401when it issues any error whatsoever.
1402
0a9c1c8e
CD
1403@kindex -nostdlib
1404@item -nostdlib
1405Only search library directories explicitly specified on the
1406command line. Library directories specified in linker scripts
1407(including linker scripts specified on the command line) are ignored.
1408
252b5132
RH
1409@ifclear SingleFormat
1410@kindex --oformat
1411@item --oformat @var{output-format}
ff5dcc92
SC
1412@command{ld} may be configured to support more than one kind of object
1413file. If your @command{ld} is configured this way, you can use the
252b5132 1414@samp{--oformat} option to specify the binary format for the output
ff5dcc92
SC
1415object file. Even when @command{ld} is configured to support alternative
1416object formats, you don't usually need to specify this, as @command{ld}
252b5132
RH
1417should be configured to produce as a default output format the most
1418usual format on each machine. @var{output-format} is a text string, the
1419name of a particular format supported by the BFD libraries. (You can
1420list the available binary formats with @samp{objdump -i}.) The script
1421command @code{OUTPUT_FORMAT} can also specify the output format, but
1422this option overrides it. @xref{BFD}.
1423@end ifclear
1424
36af4a4e
JJ
1425@kindex -pie
1426@kindex --pic-executable
1427@item -pie
1428@itemx --pic-executable
1429@cindex position independent executables
1430Create a position independent executable. This is currently only supported on
1431ELF platforms. Position independent executables are similar to shared
1432libraries in that they are relocated by the dynamic linker to the virtual
7e7d5768 1433address the OS chooses for them (which can vary between invocations). Like
36af4a4e
JJ
1434normal dynamically linked executables they can be executed and symbols
1435defined in the executable cannot be overridden by shared libraries.
1436
252b5132
RH
1437@kindex -qmagic
1438@item -qmagic
1439This option is ignored for Linux compatibility.
1440
1441@kindex -Qy
1442@item -Qy
1443This option is ignored for SVR4 compatibility.
1444
1445@kindex --relax
1446@cindex synthesizing linker
1447@cindex relaxing addressing modes
1448@item --relax
a1ab1d2a 1449An option with machine dependent effects.
252b5132
RH
1450@ifset GENERIC
1451This option is only supported on a few targets.
1452@end ifset
1453@ifset H8300
ff5dcc92 1454@xref{H8/300,,@command{ld} and the H8/300}.
252b5132
RH
1455@end ifset
1456@ifset I960
ff5dcc92 1457@xref{i960,, @command{ld} and the Intel 960 family}.
252b5132 1458@end ifset
e0001a05
NC
1459@ifset XTENSA
1460@xref{Xtensa,, @command{ld} and Xtensa Processors}.
1461@end ifset
93fd0973
SC
1462@ifset M68HC11
1463@xref{M68HC11/68HC12,,@command{ld} and the 68HC11 and 68HC12}.
1464@end ifset
2a60a7a8
AM
1465@ifset POWERPC
1466@xref{PowerPC ELF32,,@command{ld} and PowerPC 32-bit ELF Support}.
1467@end ifset
252b5132
RH
1468
1469On some platforms, the @samp{--relax} option performs global
1470optimizations that become possible when the linker resolves addressing
1471in the program, such as relaxing address modes and synthesizing new
1472instructions in the output object file.
1473
1474On some platforms these link time global optimizations may make symbolic
1475debugging of the resulting executable impossible.
1476@ifset GENERIC
1477This is known to be
1478the case for the Matsushita MN10200 and MN10300 family of processors.
1479@end ifset
1480
1481@ifset GENERIC
1482On platforms where this is not supported, @samp{--relax} is accepted,
1483but ignored.
1484@end ifset
1485
1486@cindex retaining specified symbols
1487@cindex stripping all but some symbols
1488@cindex symbols, retaining selectively
1489@item --retain-symbols-file @var{filename}
1490Retain @emph{only} the symbols listed in the file @var{filename},
1491discarding all others. @var{filename} is simply a flat file, with one
1492symbol name per line. This option is especially useful in environments
1493@ifset GENERIC
1494(such as VxWorks)
1495@end ifset
1496where a large global symbol table is accumulated gradually, to conserve
1497run-time memory.
1498
1499@samp{--retain-symbols-file} does @emph{not} discard undefined symbols,
1500or symbols needed for relocations.
1501
1502You may only specify @samp{--retain-symbols-file} once in the command
1503line. It overrides @samp{-s} and @samp{-S}.
1504
1505@ifset GENERIC
1506@item -rpath @var{dir}
1507@cindex runtime library search path
1508@kindex -rpath
1509Add a directory to the runtime library search path. This is used when
ff5dcc92 1510linking an ELF executable with shared objects. All @option{-rpath}
252b5132 1511arguments are concatenated and passed to the runtime linker, which uses
ff5dcc92 1512them to locate shared objects at runtime. The @option{-rpath} option is
252b5132
RH
1513also used when locating shared objects which are needed by shared
1514objects explicitly included in the link; see the description of the
ff5dcc92 1515@option{-rpath-link} option. If @option{-rpath} is not used when linking an
252b5132
RH
1516ELF executable, the contents of the environment variable
1517@code{LD_RUN_PATH} will be used if it is defined.
1518
ff5dcc92 1519The @option{-rpath} option may also be used on SunOS. By default, on
252b5132 1520SunOS, the linker will form a runtime search patch out of all the
ff5dcc92
SC
1521@option{-L} options it is given. If a @option{-rpath} option is used, the
1522runtime search path will be formed exclusively using the @option{-rpath}
1523options, ignoring the @option{-L} options. This can be useful when using
1524gcc, which adds many @option{-L} options which may be on NFS mounted
b45619c0 1525file systems.
252b5132 1526
ff5dcc92 1527For compatibility with other ELF linkers, if the @option{-R} option is
252b5132 1528followed by a directory name, rather than a file name, it is treated as
ff5dcc92 1529the @option{-rpath} option.
252b5132
RH
1530@end ifset
1531
1532@ifset GENERIC
1533@cindex link-time runtime library search path
1534@kindex -rpath-link
1535@item -rpath-link @var{DIR}
1536When using ELF or SunOS, one shared library may require another. This
1537happens when an @code{ld -shared} link includes a shared library as one
1538of the input files.
1539
1540When the linker encounters such a dependency when doing a non-shared,
1541non-relocatable link, it will automatically try to locate the required
1542shared library and include it in the link, if it is not included
ff5dcc92 1543explicitly. In such a case, the @option{-rpath-link} option
252b5132 1544specifies the first set of directories to search. The
ff5dcc92 1545@option{-rpath-link} option may specify a sequence of directory names
252b5132
RH
1546either by specifying a list of names separated by colons, or by
1547appearing multiple times.
1548
28c309a2
NC
1549This option should be used with caution as it overrides the search path
1550that may have been hard compiled into a shared library. In such a case it
1551is possible to use unintentionally a different search path than the
1552runtime linker would do.
1553
252b5132 1554The linker uses the following search paths to locate required shared
ece2d90e 1555libraries:
252b5132
RH
1556@enumerate
1557@item
ff5dcc92 1558Any directories specified by @option{-rpath-link} options.
252b5132 1559@item
ff5dcc92
SC
1560Any directories specified by @option{-rpath} options. The difference
1561between @option{-rpath} and @option{-rpath-link} is that directories
1562specified by @option{-rpath} options are included in the executable and
1563used at runtime, whereas the @option{-rpath-link} option is only effective
ece2d90e
NC
1564at link time. Searching @option{-rpath} in this way is only supported
1565by native linkers and cross linkers which have been configured with
1566the @option{--with-sysroot} option.
252b5132 1567@item
ff5dcc92 1568On an ELF system, if the @option{-rpath} and @code{rpath-link} options
252b5132 1569were not used, search the contents of the environment variable
dcb0bd0e 1570@code{LD_RUN_PATH}. It is for the native linker only.
252b5132 1571@item
ff5dcc92
SC
1572On SunOS, if the @option{-rpath} option was not used, search any
1573directories specified using @option{-L} options.
252b5132
RH
1574@item
1575For a native linker, the contents of the environment variable
1576@code{LD_LIBRARY_PATH}.
1577@item
ec4eb78a
L
1578For a native ELF linker, the directories in @code{DT_RUNPATH} or
1579@code{DT_RPATH} of a shared library are searched for shared
1580libraries needed by it. The @code{DT_RPATH} entries are ignored if
1581@code{DT_RUNPATH} entries exist.
1582@item
252b5132
RH
1583The default directories, normally @file{/lib} and @file{/usr/lib}.
1584@item
1585For a native linker on an ELF system, if the file @file{/etc/ld.so.conf}
1586exists, the list of directories found in that file.
1587@end enumerate
1588
1589If the required shared library is not found, the linker will issue a
1590warning and continue with the link.
1591@end ifset
1592
1593@kindex -shared
1594@kindex -Bshareable
1595@item -shared
1596@itemx -Bshareable
1597@cindex shared libraries
1598Create a shared library. This is currently only supported on ELF, XCOFF
1599and SunOS platforms. On SunOS, the linker will automatically create a
ff5dcc92 1600shared library if the @option{-e} option is not used and there are
252b5132
RH
1601undefined symbols in the link.
1602
1603@item --sort-common
1604@kindex --sort-common
ff5dcc92 1605This option tells @command{ld} to sort the common symbols by size when it
252b5132 1606places them in the appropriate output sections. First come all the one
563e308f 1607byte symbols, then all the two byte, then all the four byte, and then
252b5132
RH
1608everything else. This is to prevent gaps between symbols due to
1609alignment constraints.
1610
bcaa7b3e
L
1611@kindex --sort-section name
1612@item --sort-section name
1613This option will apply @code{SORT_BY_NAME} to all wildcard section
1614patterns in the linker script.
1615
1616@kindex --sort-section alignment
1617@item --sort-section alignment
1618This option will apply @code{SORT_BY_ALIGNMENT} to all wildcard section
1619patterns in the linker script.
1620
252b5132 1621@kindex --split-by-file
a854a4a7 1622@item --split-by-file [@var{size}]
ff5dcc92 1623Similar to @option{--split-by-reloc} but creates a new output section for
a854a4a7
AM
1624each input file when @var{size} is reached. @var{size} defaults to a
1625size of 1 if not given.
252b5132
RH
1626
1627@kindex --split-by-reloc
a854a4a7
AM
1628@item --split-by-reloc [@var{count}]
1629Tries to creates extra sections in the output file so that no single
252b5132 1630output section in the file contains more than @var{count} relocations.
a854a4a7 1631This is useful when generating huge relocatable files for downloading into
252b5132
RH
1632certain real time kernels with the COFF object file format; since COFF
1633cannot represent more than 65535 relocations in a single section. Note
1634that this will fail to work with object file formats which do not
1635support arbitrary sections. The linker will not split up individual
1636input sections for redistribution, so if a single input section contains
1637more than @var{count} relocations one output section will contain that
a854a4a7 1638many relocations. @var{count} defaults to a value of 32768.
252b5132
RH
1639
1640@kindex --stats
1641@item --stats
1642Compute and display statistics about the operation of the linker, such
1643as execution time and memory usage.
1644
e2243057
RS
1645@kindex --sysroot
1646@item --sysroot=@var{directory}
1647Use @var{directory} as the location of the sysroot, overriding the
1648configure-time default. This option is only supported by linkers
1649that were configured using @option{--with-sysroot}.
1650
252b5132
RH
1651@kindex --traditional-format
1652@cindex traditional format
1653@item --traditional-format
ff5dcc92
SC
1654For some targets, the output of @command{ld} is different in some ways from
1655the output of some existing linker. This switch requests @command{ld} to
252b5132
RH
1656use the traditional format instead.
1657
1658@cindex dbx
ff5dcc92 1659For example, on SunOS, @command{ld} combines duplicate entries in the
252b5132
RH
1660symbol string table. This can reduce the size of an output file with
1661full debugging information by over 30 percent. Unfortunately, the SunOS
1662@code{dbx} program can not read the resulting program (@code{gdb} has no
ff5dcc92 1663trouble). The @samp{--traditional-format} switch tells @command{ld} to not
252b5132
RH
1664combine duplicate entries.
1665
176355da
NC
1666@kindex --section-start @var{sectionname}=@var{org}
1667@item --section-start @var{sectionname}=@var{org}
1668Locate a section in the output file at the absolute
1669address given by @var{org}. You may use this option as many
1670times as necessary to locate multiple sections in the command
1671line.
1672@var{org} must be a single hexadecimal integer;
1673for compatibility with other linkers, you may omit the leading
1674@samp{0x} usually associated with hexadecimal values. @emph{Note:} there
1675should be no white space between @var{sectionname}, the equals
1676sign (``@key{=}''), and @var{org}.
1677
252b5132
RH
1678@kindex -Tbss @var{org}
1679@kindex -Tdata @var{org}
1680@kindex -Ttext @var{org}
1681@cindex segment origins, cmd line
1682@item -Tbss @var{org}
1683@itemx -Tdata @var{org}
1684@itemx -Ttext @var{org}
a6e02871
AO
1685Same as --section-start, with @code{.bss}, @code{.data} or
1686@code{.text} as the @var{sectionname}.
252b5132 1687
560e09e9
NC
1688@kindex --unresolved-symbols
1689@item --unresolved-symbols=@var{method}
1690Determine how to handle unresolved symbols. There are four possible
1691values for @samp{method}:
1692
1693@table @samp
1694@item ignore-all
da8bce14 1695Do not report any unresolved symbols.
560e09e9
NC
1696
1697@item report-all
da8bce14 1698Report all unresolved symbols. This is the default.
560e09e9
NC
1699
1700@item ignore-in-object-files
1701Report unresolved symbols that are contained in shared libraries, but
1702ignore them if they come from regular object files.
1703
1704@item ignore-in-shared-libs
1705Report unresolved symbols that come from regular object files, but
1706ignore them if they come from shared libraries. This can be useful
1707when creating a dynamic binary and it is known that all the shared
1708libraries that it should be referencing are included on the linker's
1709command line.
1710@end table
1711
1712The behaviour for shared libraries on their own can also be controlled
1713by the @option{--[no-]allow-shlib-undefined} option.
1714
1715Normally the linker will generate an error message for each reported
1716unresolved symbol but the option @option{--warn-unresolved-symbols}
1717can change this to a warning.
1718
252b5132
RH
1719@kindex --verbose
1720@cindex verbose
1721@item --dll-verbose
308b1ffd 1722@itemx --verbose
ff5dcc92 1723Display the version number for @command{ld} and list the linker emulations
252b5132 1724supported. Display which input files can and cannot be opened. Display
b9a8de1e 1725the linker script being used by the linker.
252b5132
RH
1726
1727@kindex --version-script=@var{version-scriptfile}
1728@cindex version script, symbol versions
1729@itemx --version-script=@var{version-scriptfile}
1730Specify the name of a version script to the linker. This is typically
1731used when creating shared libraries to specify additional information
36f63dca 1732about the version hierarchy for the library being created. This option
252b5132
RH
1733is only meaningful on ELF platforms which support shared libraries.
1734@xref{VERSION}.
1735
7ce691ae 1736@kindex --warn-common
252b5132
RH
1737@cindex warnings, on combining symbols
1738@cindex combining symbols, warnings on
1739@item --warn-common
1740Warn when a common symbol is combined with another common symbol or with
560e09e9 1741a symbol definition. Unix linkers allow this somewhat sloppy practise,
252b5132
RH
1742but linkers on some other operating systems do not. This option allows
1743you to find potential problems from combining global symbols.
560e09e9 1744Unfortunately, some C libraries use this practise, so you may get some
252b5132
RH
1745warnings about symbols in the libraries as well as in your programs.
1746
1747There are three kinds of global symbols, illustrated here by C examples:
1748
1749@table @samp
1750@item int i = 1;
1751A definition, which goes in the initialized data section of the output
1752file.
1753
1754@item extern int i;
1755An undefined reference, which does not allocate space.
1756There must be either a definition or a common symbol for the
1757variable somewhere.
1758
1759@item int i;
1760A common symbol. If there are only (one or more) common symbols for a
1761variable, it goes in the uninitialized data area of the output file.
1762The linker merges multiple common symbols for the same variable into a
1763single symbol. If they are of different sizes, it picks the largest
1764size. The linker turns a common symbol into a declaration, if there is
1765a definition of the same variable.
1766@end table
1767
1768The @samp{--warn-common} option can produce five kinds of warnings.
1769Each warning consists of a pair of lines: the first describes the symbol
1770just encountered, and the second describes the previous symbol
1771encountered with the same name. One or both of the two symbols will be
1772a common symbol.
1773
1774@enumerate
1775@item
1776Turning a common symbol into a reference, because there is already a
1777definition for the symbol.
1778@smallexample
1779@var{file}(@var{section}): warning: common of `@var{symbol}'
1780 overridden by definition
1781@var{file}(@var{section}): warning: defined here
1782@end smallexample
1783
1784@item
1785Turning a common symbol into a reference, because a later definition for
1786the symbol is encountered. This is the same as the previous case,
1787except that the symbols are encountered in a different order.
1788@smallexample
1789@var{file}(@var{section}): warning: definition of `@var{symbol}'
1790 overriding common
1791@var{file}(@var{section}): warning: common is here
1792@end smallexample
1793
1794@item
1795Merging a common symbol with a previous same-sized common symbol.
1796@smallexample
1797@var{file}(@var{section}): warning: multiple common
1798 of `@var{symbol}'
1799@var{file}(@var{section}): warning: previous common is here
1800@end smallexample
1801
1802@item
1803Merging a common symbol with a previous larger common symbol.
1804@smallexample
1805@var{file}(@var{section}): warning: common of `@var{symbol}'
1806 overridden by larger common
1807@var{file}(@var{section}): warning: larger common is here
1808@end smallexample
1809
1810@item
1811Merging a common symbol with a previous smaller common symbol. This is
1812the same as the previous case, except that the symbols are
1813encountered in a different order.
1814@smallexample
1815@var{file}(@var{section}): warning: common of `@var{symbol}'
1816 overriding smaller common
1817@var{file}(@var{section}): warning: smaller common is here
1818@end smallexample
1819@end enumerate
1820
1821@kindex --warn-constructors
1822@item --warn-constructors
1823Warn if any global constructors are used. This is only useful for a few
1824object file formats. For formats like COFF or ELF, the linker can not
1825detect the use of global constructors.
1826
1827@kindex --warn-multiple-gp
1828@item --warn-multiple-gp
1829Warn if multiple global pointer values are required in the output file.
1830This is only meaningful for certain processors, such as the Alpha.
1831Specifically, some processors put large-valued constants in a special
1832section. A special register (the global pointer) points into the middle
1833of this section, so that constants can be loaded efficiently via a
1834base-register relative addressing mode. Since the offset in
1835base-register relative mode is fixed and relatively small (e.g., 16
1836bits), this limits the maximum size of the constant pool. Thus, in
1837large programs, it is often necessary to use multiple global pointer
1838values in order to be able to address all possible constants. This
1839option causes a warning to be issued whenever this case occurs.
1840
1841@kindex --warn-once
1842@cindex warnings, on undefined symbols
1843@cindex undefined symbols, warnings on
1844@item --warn-once
1845Only warn once for each undefined symbol, rather than once per module
1846which refers to it.
1847
1848@kindex --warn-section-align
1849@cindex warnings, on section alignment
1850@cindex section alignment, warnings on
1851@item --warn-section-align
1852Warn if the address of an output section is changed because of
1853alignment. Typically, the alignment will be set by an input section.
1854The address will only be changed if it not explicitly specified; that
1855is, if the @code{SECTIONS} command does not specify a start address for
1856the section (@pxref{SECTIONS}).
1857
8fdd7217
NC
1858@kindex --warn-shared-textrel
1859@item --warn-shared-textrel
ece2d90e 1860Warn if the linker adds a DT_TEXTREL to a shared object.
8fdd7217 1861
560e09e9
NC
1862@kindex --warn-unresolved-symbols
1863@item --warn-unresolved-symbols
1864If the linker is going to report an unresolved symbol (see the option
1865@option{--unresolved-symbols}) it will normally generate an error.
1866This option makes it generate a warning instead.
1867
1868@kindex --error-unresolved-symbols
1869@item --error-unresolved-symbols
1870This restores the linker's default behaviour of generating errors when
1871it is reporting unresolved symbols.
1872
252b5132
RH
1873@kindex --whole-archive
1874@cindex including an entire archive
1875@item --whole-archive
1876For each archive mentioned on the command line after the
ff5dcc92 1877@option{--whole-archive} option, include every object file in the archive
252b5132
RH
1878in the link, rather than searching the archive for the required object
1879files. This is normally used to turn an archive file into a shared
1880library, forcing every object to be included in the resulting shared
1881library. This option may be used more than once.
1882
7ec229ce 1883Two notes when using this option from gcc: First, gcc doesn't know
ff5dcc92
SC
1884about this option, so you have to use @option{-Wl,-whole-archive}.
1885Second, don't forget to use @option{-Wl,-no-whole-archive} after your
7ec229ce
DD
1886list of archives, because gcc will add its own list of archives to
1887your link and you may not want this flag to affect those as well.
1888
252b5132
RH
1889@kindex --wrap
1890@item --wrap @var{symbol}
1891Use a wrapper function for @var{symbol}. Any undefined reference to
1892@var{symbol} will be resolved to @code{__wrap_@var{symbol}}. Any
1893undefined reference to @code{__real_@var{symbol}} will be resolved to
1894@var{symbol}.
1895
1896This can be used to provide a wrapper for a system function. The
1897wrapper function should be called @code{__wrap_@var{symbol}}. If it
1898wishes to call the system function, it should call
1899@code{__real_@var{symbol}}.
1900
1901Here is a trivial example:
1902
1903@smallexample
1904void *
cc2f008e 1905__wrap_malloc (size_t c)
252b5132 1906@{
cc2f008e 1907 printf ("malloc called with %zu\n", c);
252b5132
RH
1908 return __real_malloc (c);
1909@}
1910@end smallexample
1911
ff5dcc92 1912If you link other code with this file using @option{--wrap malloc}, then
252b5132
RH
1913all calls to @code{malloc} will call the function @code{__wrap_malloc}
1914instead. The call to @code{__real_malloc} in @code{__wrap_malloc} will
1915call the real @code{malloc} function.
1916
1917You may wish to provide a @code{__real_malloc} function as well, so that
ff5dcc92 1918links without the @option{--wrap} option will succeed. If you do this,
252b5132
RH
1919you should not put the definition of @code{__real_malloc} in the same
1920file as @code{__wrap_malloc}; if you do, the assembler may resolve the
1921call before the linker has a chance to wrap it to @code{malloc}.
1922
6aa29e7b
JJ
1923@kindex --eh-frame-hdr
1924@item --eh-frame-hdr
1925Request creation of @code{.eh_frame_hdr} section and ELF
1926@code{PT_GNU_EH_FRAME} segment header.
1927
6c1439be
L
1928@kindex --enable-new-dtags
1929@kindex --disable-new-dtags
1930@item --enable-new-dtags
1931@itemx --disable-new-dtags
1932This linker can create the new dynamic tags in ELF. But the older ELF
1933systems may not understand them. If you specify
ff5dcc92
SC
1934@option{--enable-new-dtags}, the dynamic tags will be created as needed.
1935If you specify @option{--disable-new-dtags}, no new dynamic tags will be
6c1439be
L
1936created. By default, the new dynamic tags are not created. Note that
1937those options are only available for ELF systems.
1938
2d643429 1939@kindex --hash-size=@var{number}
e185dd51 1940@item --hash-size=@var{number}
2d643429
NC
1941Set the default size of the linker's hash tables to a prime number
1942close to @var{number}. Increasing this value can reduce the length of
1943time it takes the linker to perform its tasks, at the expense of
1944increasing the linker's memory requirements. Similarly reducing this
1945value can reduce the memory requirements at the expense of speed.
1946
fdc90cb4
JJ
1947@kindex --hash-style=@var{style}
1948@item --hash-style=@var{style}
1949Set the type of linker's hash table(s). @var{style} can be either
1950@code{sysv} for classic ELF @code{.hash} section, @code{gnu} for
1951new style GNU @code{.gnu.hash} section or @code{both} for both
1952the classic ELF @code{.hash} and new style GNU @code{.gnu.hash}
1953hash tables. The default is @code{sysv}.
1954
35835446
JR
1955@kindex --reduce-memory-overheads
1956@item --reduce-memory-overheads
1957This option reduces memory requirements at ld runtime, at the expense of
f2a8f148 1958linking speed. This was introduced to select the old O(n^2) algorithm
35835446 1959for link map file generation, rather than the new O(n) algorithm which uses
2d643429
NC
1960about 40% more memory for symbol storage.
1961
4f9c04f7 1962Another effect of the switch is to set the default hash table size to
2d643429 19631021, which again saves memory at the cost of lengthening the linker's
a85785bc 1964run time. This is not done however if the @option{--hash-size} switch
2d643429
NC
1965has been used.
1966
1967The @option{--reduce-memory-overheads} switch may be also be used to
1968enable other tradeoffs in future versions of the linker.
35835446 1969
252b5132
RH
1970@end table
1971
0285c67d
NC
1972@c man end
1973
36f63dca 1974@subsection Options Specific to i386 PE Targets
252b5132 1975
0285c67d
NC
1976@c man begin OPTIONS
1977
ff5dcc92 1978The i386 PE linker supports the @option{-shared} option, which causes
252b5132
RH
1979the output to be a dynamically linked library (DLL) instead of a
1980normal executable. You should name the output @code{*.dll} when you
1981use this option. In addition, the linker fully supports the standard
1982@code{*.def} files, which may be specified on the linker command line
1983like an object file (in fact, it should precede archives it exports
1984symbols from, to ensure that they get linked in, just like a normal
1985object file).
1986
1987In addition to the options common to all targets, the i386 PE linker
1988support additional command line options that are specific to the i386
1989PE target. Options that take values may be separated from their
1990values by either a space or an equals sign.
1991
ff5dcc92 1992@table @gcctabopt
252b5132
RH
1993
1994@kindex --add-stdcall-alias
1995@item --add-stdcall-alias
1996If given, symbols with a stdcall suffix (@@@var{nn}) will be exported
1997as-is and also with the suffix stripped.
bb10df36 1998[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
1999
2000@kindex --base-file
2001@item --base-file @var{file}
2002Use @var{file} as the name of a file in which to save the base
2003addresses of all the relocations needed for generating DLLs with
2004@file{dlltool}.
bb10df36 2005[This is an i386 PE specific option]
252b5132
RH
2006
2007@kindex --dll
2008@item --dll
2009Create a DLL instead of a regular executable. You may also use
ff5dcc92 2010@option{-shared} or specify a @code{LIBRARY} in a given @code{.def}
252b5132 2011file.
bb10df36 2012[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2013
2014@kindex --enable-stdcall-fixup
2015@kindex --disable-stdcall-fixup
2016@item --enable-stdcall-fixup
2017@itemx --disable-stdcall-fixup
2018If the link finds a symbol that it cannot resolve, it will attempt to
36f63dca 2019do ``fuzzy linking'' by looking for another defined symbol that differs
252b5132
RH
2020only in the format of the symbol name (cdecl vs stdcall) and will
2021resolve that symbol by linking to the match. For example, the
2022undefined symbol @code{_foo} might be linked to the function
2023@code{_foo@@12}, or the undefined symbol @code{_bar@@16} might be linked
2024to the function @code{_bar}. When the linker does this, it prints a
2025warning, since it normally should have failed to link, but sometimes
2026import libraries generated from third-party dlls may need this feature
ff5dcc92 2027to be usable. If you specify @option{--enable-stdcall-fixup}, this
252b5132 2028feature is fully enabled and warnings are not printed. If you specify
ff5dcc92 2029@option{--disable-stdcall-fixup}, this feature is disabled and such
252b5132 2030mismatches are considered to be errors.
bb10df36 2031[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2032
2033@cindex DLLs, creating
2034@kindex --export-all-symbols
2035@item --export-all-symbols
2036If given, all global symbols in the objects used to build a DLL will
2037be exported by the DLL. Note that this is the default if there
2038otherwise wouldn't be any exported symbols. When symbols are
2039explicitly exported via DEF files or implicitly exported via function
2040attributes, the default is to not export anything else unless this
2041option is given. Note that the symbols @code{DllMain@@12},
ece2d90e 2042@code{DllEntryPoint@@0}, @code{DllMainCRTStartup@@12}, and
b044cda1 2043@code{impure_ptr} will not be automatically
ece2d90e
NC
2044exported. Also, symbols imported from other DLLs will not be
2045re-exported, nor will symbols specifying the DLL's internal layout
2046such as those beginning with @code{_head_} or ending with
2047@code{_iname}. In addition, no symbols from @code{libgcc},
b044cda1
CW
2048@code{libstd++}, @code{libmingw32}, or @code{crtX.o} will be exported.
2049Symbols whose names begin with @code{__rtti_} or @code{__builtin_} will
2050not be exported, to help with C++ DLLs. Finally, there is an
ece2d90e 2051extensive list of cygwin-private symbols that are not exported
b044cda1 2052(obviously, this applies on when building DLLs for cygwin targets).
ece2d90e 2053These cygwin-excludes are: @code{_cygwin_dll_entry@@12},
b044cda1 2054@code{_cygwin_crt0_common@@8}, @code{_cygwin_noncygwin_dll_entry@@12},
ece2d90e 2055@code{_fmode}, @code{_impure_ptr}, @code{cygwin_attach_dll},
b044cda1 2056@code{cygwin_premain0}, @code{cygwin_premain1}, @code{cygwin_premain2},
ece2d90e 2057@code{cygwin_premain3}, and @code{environ}.
bb10df36 2058[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2059
2060@kindex --exclude-symbols
1d0a3c9c 2061@item --exclude-symbols @var{symbol},@var{symbol},...
252b5132
RH
2062Specifies a list of symbols which should not be automatically
2063exported. The symbol names may be delimited by commas or colons.
bb10df36 2064[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2065
2066@kindex --file-alignment
2067@item --file-alignment
2068Specify the file alignment. Sections in the file will always begin at
2069file offsets which are multiples of this number. This defaults to
2070512.
bb10df36 2071[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2072
2073@cindex heap size
2074@kindex --heap
2075@item --heap @var{reserve}
2076@itemx --heap @var{reserve},@var{commit}
2077Specify the amount of memory to reserve (and optionally commit) to be
2078used as heap for this program. The default is 1Mb reserved, 4K
2079committed.
bb10df36 2080[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2081
2082@cindex image base
2083@kindex --image-base
2084@item --image-base @var{value}
2085Use @var{value} as the base address of your program or dll. This is
2086the lowest memory location that will be used when your program or dll
2087is loaded. To reduce the need to relocate and improve performance of
2088your dlls, each should have a unique base address and not overlap any
2089other dlls. The default is 0x400000 for executables, and 0x10000000
2090for dlls.
bb10df36 2091[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2092
2093@kindex --kill-at
2094@item --kill-at
2095If given, the stdcall suffixes (@@@var{nn}) will be stripped from
2096symbols before they are exported.
bb10df36 2097[This option is specific to the i386 PE targeted port of the linker]
252b5132 2098
26d2d8a2
BF
2099@kindex --large-address-aware
2100@item --large-address-aware
b45619c0 2101If given, the appropriate bit in the ``Characteristics'' field of the COFF
26d2d8a2 2102header is set to indicate that this executable supports virtual addresses
b45619c0 2103greater than 2 gigabytes. This should be used in conjunction with the /3GB
26d2d8a2
BF
2104or /USERVA=@var{value} megabytes switch in the ``[operating systems]''
2105section of the BOOT.INI. Otherwise, this bit has no effect.
2106[This option is specific to PE targeted ports of the linker]
2107
252b5132
RH
2108@kindex --major-image-version
2109@item --major-image-version @var{value}
36f63dca 2110Sets the major number of the ``image version''. Defaults to 1.
bb10df36 2111[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2112
2113@kindex --major-os-version
2114@item --major-os-version @var{value}
36f63dca 2115Sets the major number of the ``os version''. Defaults to 4.
bb10df36 2116[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2117
2118@kindex --major-subsystem-version
2119@item --major-subsystem-version @var{value}
36f63dca 2120Sets the major number of the ``subsystem version''. Defaults to 4.
bb10df36 2121[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2122
2123@kindex --minor-image-version
2124@item --minor-image-version @var{value}
36f63dca 2125Sets the minor number of the ``image version''. Defaults to 0.
bb10df36 2126[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2127
2128@kindex --minor-os-version
2129@item --minor-os-version @var{value}
36f63dca 2130Sets the minor number of the ``os version''. Defaults to 0.
bb10df36 2131[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2132
2133@kindex --minor-subsystem-version
2134@item --minor-subsystem-version @var{value}
36f63dca 2135Sets the minor number of the ``subsystem version''. Defaults to 0.
bb10df36 2136[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2137
2138@cindex DEF files, creating
2139@cindex DLLs, creating
2140@kindex --output-def
2141@item --output-def @var{file}
2142The linker will create the file @var{file} which will contain a DEF
2143file corresponding to the DLL the linker is generating. This DEF file
2144(which should be called @code{*.def}) may be used to create an import
2145library with @code{dlltool} or may be used as a reference to
2146automatically or implicitly exported symbols.
bb10df36 2147[This option is specific to the i386 PE targeted port of the linker]
252b5132 2148
b044cda1
CW
2149@cindex DLLs, creating
2150@kindex --out-implib
2151@item --out-implib @var{file}
2152The linker will create the file @var{file} which will contain an
2153import lib corresponding to the DLL the linker is generating. This
2154import lib (which should be called @code{*.dll.a} or @code{*.a}
560e09e9 2155may be used to link clients against the generated DLL; this behaviour
b044cda1
CW
2156makes it possible to skip a separate @code{dlltool} import library
2157creation step.
bb10df36 2158[This option is specific to the i386 PE targeted port of the linker]
b044cda1
CW
2159
2160@kindex --enable-auto-image-base
2161@item --enable-auto-image-base
2162Automatically choose the image base for DLLs, unless one is specified
2163using the @code{--image-base} argument. By using a hash generated
2164from the dllname to create unique image bases for each DLL, in-memory
2165collisions and relocations which can delay program execution are
2166avoided.
bb10df36 2167[This option is specific to the i386 PE targeted port of the linker]
b044cda1
CW
2168
2169@kindex --disable-auto-image-base
2170@item --disable-auto-image-base
2171Do not automatically generate a unique image base. If there is no
2172user-specified image base (@code{--image-base}) then use the platform
2173default.
bb10df36 2174[This option is specific to the i386 PE targeted port of the linker]
b044cda1
CW
2175
2176@cindex DLLs, linking to
2177@kindex --dll-search-prefix
2178@item --dll-search-prefix @var{string}
489d0400 2179When linking dynamically to a dll without an import library,
ece2d90e 2180search for @code{<string><basename>.dll} in preference to
560e09e9 2181@code{lib<basename>.dll}. This behaviour allows easy distinction
b044cda1
CW
2182between DLLs built for the various "subplatforms": native, cygwin,
2183uwin, pw, etc. For instance, cygwin DLLs typically use
ece2d90e 2184@code{--dll-search-prefix=cyg}.
bb10df36 2185[This option is specific to the i386 PE targeted port of the linker]
b044cda1
CW
2186
2187@kindex --enable-auto-import
2188@item --enable-auto-import
ece2d90e
NC
2189Do sophisticated linking of @code{_symbol} to @code{__imp__symbol} for
2190DATA imports from DLLs, and create the necessary thunking symbols when
4d8907ac
DS
2191building the import libraries with those DATA exports. Note: Use of the
2192'auto-import' extension will cause the text section of the image file
2193to be made writable. This does not conform to the PE-COFF format
2194specification published by Microsoft.
2195
2196Using 'auto-import' generally will 'just work' -- but sometimes you may
2197see this message:
0d888aac 2198
ece2d90e 2199"variable '<var>' can't be auto-imported. Please read the
0d888aac
CW
2200documentation for ld's @code{--enable-auto-import} for details."
2201
ece2d90e
NC
2202This message occurs when some (sub)expression accesses an address
2203ultimately given by the sum of two constants (Win32 import tables only
0d888aac
CW
2204allow one). Instances where this may occur include accesses to member
2205fields of struct variables imported from a DLL, as well as using a
2f8d8971
NC
2206constant index into an array variable imported from a DLL. Any
2207multiword variable (arrays, structs, long long, etc) may trigger
2208this error condition. However, regardless of the exact data type
2209of the offending exported variable, ld will always detect it, issue
2210the warning, and exit.
2211
2212There are several ways to address this difficulty, regardless of the
2213data type of the exported variable:
0d888aac 2214
2fa9fc65
NC
2215One way is to use --enable-runtime-pseudo-reloc switch. This leaves the task
2216of adjusting references in your client code for runtime environment, so
560e09e9 2217this method works only when runtime environment supports this feature.
2fa9fc65
NC
2218
2219A second solution is to force one of the 'constants' to be a variable --
0d888aac
CW
2220that is, unknown and un-optimizable at compile time. For arrays,
2221there are two possibilities: a) make the indexee (the array's address)
2222a variable, or b) make the 'constant' index a variable. Thus:
2223
2224@example
2225extern type extern_array[];
2226extern_array[1] -->
2227 @{ volatile type *t=extern_array; t[1] @}
2228@end example
2229
2230or
2231
2232@example
2233extern type extern_array[];
2234extern_array[1] -->
2235 @{ volatile int t=1; extern_array[t] @}
2236@end example
2237
2f8d8971
NC
2238For structs (and most other multiword data types) the only option
2239is to make the struct itself (or the long long, or the ...) variable:
0d888aac
CW
2240
2241@example
2242extern struct s extern_struct;
2243extern_struct.field -->
2244 @{ volatile struct s *t=&extern_struct; t->field @}
2245@end example
2246
c406afaf
NC
2247or
2248
2249@example
2250extern long long extern_ll;
2251extern_ll -->
2252 @{ volatile long long * local_ll=&extern_ll; *local_ll @}
2253@end example
2254
2fa9fc65 2255A third method of dealing with this difficulty is to abandon
0d888aac 2256'auto-import' for the offending symbol and mark it with
560e09e9 2257@code{__declspec(dllimport)}. However, in practise that
0d888aac
CW
2258requires using compile-time #defines to indicate whether you are
2259building a DLL, building client code that will link to the DLL, or
2260merely building/linking to a static library. In making the choice
2261between the various methods of resolving the 'direct address with
2262constant offset' problem, you should consider typical real-world usage:
2263
2264Original:
2265@example
2266--foo.h
2267extern int arr[];
2268--foo.c
2269#include "foo.h"
2270void main(int argc, char **argv)@{
2271 printf("%d\n",arr[1]);
2272@}
2273@end example
2274
2275Solution 1:
2276@example
2277--foo.h
2278extern int arr[];
2279--foo.c
2280#include "foo.h"
2281void main(int argc, char **argv)@{
2282 /* This workaround is for win32 and cygwin; do not "optimize" */
2283 volatile int *parr = arr;
2284 printf("%d\n",parr[1]);
2285@}
2286@end example
2287
2288Solution 2:
2289@example
2290--foo.h
2291/* Note: auto-export is assumed (no __declspec(dllexport)) */
2292#if (defined(_WIN32) || defined(__CYGWIN__)) && \
2293 !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC))
2294#define FOO_IMPORT __declspec(dllimport)
2295#else
2296#define FOO_IMPORT
2297#endif
2298extern FOO_IMPORT int arr[];
2299--foo.c
2300#include "foo.h"
2301void main(int argc, char **argv)@{
2302 printf("%d\n",arr[1]);
2303@}
2304@end example
2305
2fa9fc65 2306A fourth way to avoid this problem is to re-code your
0d888aac
CW
2307library to use a functional interface rather than a data interface
2308for the offending variables (e.g. set_foo() and get_foo() accessor
2309functions).
bb10df36 2310[This option is specific to the i386 PE targeted port of the linker]
b044cda1
CW
2311
2312@kindex --disable-auto-import
2313@item --disable-auto-import
560e09e9 2314Do not attempt to do sophisticated linking of @code{_symbol} to
b044cda1 2315@code{__imp__symbol} for DATA imports from DLLs.
bb10df36 2316[This option is specific to the i386 PE targeted port of the linker]
b044cda1 2317
2fa9fc65
NC
2318@kindex --enable-runtime-pseudo-reloc
2319@item --enable-runtime-pseudo-reloc
2320If your code contains expressions described in --enable-auto-import section,
2321that is, DATA imports from DLL with non-zero offset, this switch will create
2322a vector of 'runtime pseudo relocations' which can be used by runtime
2323environment to adjust references to such data in your client code.
bb10df36 2324[This option is specific to the i386 PE targeted port of the linker]
2fa9fc65
NC
2325
2326@kindex --disable-runtime-pseudo-reloc
2327@item --disable-runtime-pseudo-reloc
2328Do not create pseudo relocations for non-zero offset DATA imports from
2329DLLs. This is the default.
bb10df36 2330[This option is specific to the i386 PE targeted port of the linker]
2fa9fc65 2331
b044cda1
CW
2332@kindex --enable-extra-pe-debug
2333@item --enable-extra-pe-debug
2334Show additional debug info related to auto-import symbol thunking.
bb10df36 2335[This option is specific to the i386 PE targeted port of the linker]
b044cda1 2336
252b5132
RH
2337@kindex --section-alignment
2338@item --section-alignment
2339Sets the section alignment. Sections in memory will always begin at
2340addresses which are a multiple of this number. Defaults to 0x1000.
bb10df36 2341[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2342
2343@cindex stack size
2344@kindex --stack
2345@item --stack @var{reserve}
2346@itemx --stack @var{reserve},@var{commit}
2347Specify the amount of memory to reserve (and optionally commit) to be
559e4713 2348used as stack for this program. The default is 2Mb reserved, 4K
252b5132 2349committed.
bb10df36 2350[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2351
2352@kindex --subsystem
2353@item --subsystem @var{which}
2354@itemx --subsystem @var{which}:@var{major}
2355@itemx --subsystem @var{which}:@var{major}.@var{minor}
2356Specifies the subsystem under which your program will execute. The
2357legal values for @var{which} are @code{native}, @code{windows},
33f362e1
NC
2358@code{console}, @code{posix}, and @code{xbox}. You may optionally set
2359the subsystem version also. Numeric values are also accepted for
2360@var{which}.
bb10df36 2361[This option is specific to the i386 PE targeted port of the linker]
252b5132
RH
2362
2363@end table
2364
0285c67d
NC
2365@c man end
2366
93fd0973
SC
2367@ifset M68HC11
2368@subsection Options specific to Motorola 68HC11 and 68HC12 targets
2369
2370@c man begin OPTIONS
2371
2372The 68HC11 and 68HC12 linkers support specific options to control the
2373memory bank switching mapping and trampoline code generation.
2374
2375@table @gcctabopt
2376
2377@kindex --no-trampoline
2378@item --no-trampoline
2379This option disables the generation of trampoline. By default a trampoline
2380is generated for each far function which is called using a @code{jsr}
2381instruction (this happens when a pointer to a far function is taken).
2382
2383@kindex --bank-window
2384@item --bank-window @var{name}
2385This option indicates to the linker the name of the memory region in
2386the @samp{MEMORY} specification that describes the memory bank window.
2387The definition of such region is then used by the linker to compute
2388paging and addresses within the memory window.
2389
2390@end table
2391
2392@c man end
2393@end ifset
2394
252b5132
RH
2395@ifset UsesEnvVars
2396@node Environment
2397@section Environment Variables
2398
0285c67d
NC
2399@c man begin ENVIRONMENT
2400
560e09e9 2401You can change the behaviour of @command{ld} with the environment variables
36f63dca
NC
2402@ifclear SingleFormat
2403@code{GNUTARGET},
2404@end ifclear
2405@code{LDEMULATION} and @code{COLLECT_NO_DEMANGLE}.
252b5132 2406
36f63dca 2407@ifclear SingleFormat
252b5132
RH
2408@kindex GNUTARGET
2409@cindex default input format
2410@code{GNUTARGET} determines the input-file object format if you don't
2411use @samp{-b} (or its synonym @samp{--format}). Its value should be one
2412of the BFD names for an input format (@pxref{BFD}). If there is no
ff5dcc92 2413@code{GNUTARGET} in the environment, @command{ld} uses the natural format
252b5132
RH
2414of the target. If @code{GNUTARGET} is set to @code{default} then BFD
2415attempts to discover the input format by examining binary input files;
2416this method often succeeds, but there are potential ambiguities, since
2417there is no method of ensuring that the magic number used to specify
2418object-file formats is unique. However, the configuration procedure for
2419BFD on each system places the conventional format for that system first
2420in the search-list, so ambiguities are resolved in favor of convention.
36f63dca 2421@end ifclear
252b5132
RH
2422
2423@kindex LDEMULATION
2424@cindex default emulation
2425@cindex emulation, default
2426@code{LDEMULATION} determines the default emulation if you don't use the
2427@samp{-m} option. The emulation can affect various aspects of linker
2428behaviour, particularly the default linker script. You can list the
2429available emulations with the @samp{--verbose} or @samp{-V} options. If
2430the @samp{-m} option is not used, and the @code{LDEMULATION} environment
2431variable is not defined, the default emulation depends upon how the
2432linker was configured.
252b5132
RH
2433
2434@kindex COLLECT_NO_DEMANGLE
2435@cindex demangling, default
2436Normally, the linker will default to demangling symbols. However, if
2437@code{COLLECT_NO_DEMANGLE} is set in the environment, then it will
2438default to not demangling symbols. This environment variable is used in
2439a similar fashion by the @code{gcc} linker wrapper program. The default
2440may be overridden by the @samp{--demangle} and @samp{--no-demangle}
2441options.
2442
0285c67d
NC
2443@c man end
2444@end ifset
2445
252b5132
RH
2446@node Scripts
2447@chapter Linker Scripts
2448
2449@cindex scripts
2450@cindex linker scripts
2451@cindex command files
2452Every link is controlled by a @dfn{linker script}. This script is
2453written in the linker command language.
2454
2455The main purpose of the linker script is to describe how the sections in
2456the input files should be mapped into the output file, and to control
2457the memory layout of the output file. Most linker scripts do nothing
2458more than this. However, when necessary, the linker script can also
2459direct the linker to perform many other operations, using the commands
2460described below.
2461
2462The linker always uses a linker script. If you do not supply one
2463yourself, the linker will use a default script that is compiled into the
2464linker executable. You can use the @samp{--verbose} command line option
2465to display the default linker script. Certain command line options,
2466such as @samp{-r} or @samp{-N}, will affect the default linker script.
2467
2468You may supply your own linker script by using the @samp{-T} command
2469line option. When you do this, your linker script will replace the
2470default linker script.
2471
2472You may also use linker scripts implicitly by naming them as input files
2473to the linker, as though they were files to be linked. @xref{Implicit
2474Linker Scripts}.
2475
2476@menu
2477* Basic Script Concepts:: Basic Linker Script Concepts
2478* Script Format:: Linker Script Format
2479* Simple Example:: Simple Linker Script Example
2480* Simple Commands:: Simple Linker Script Commands
2481* Assignments:: Assigning Values to Symbols
2482* SECTIONS:: SECTIONS Command
2483* MEMORY:: MEMORY Command
2484* PHDRS:: PHDRS Command
2485* VERSION:: VERSION Command
2486* Expressions:: Expressions in Linker Scripts
2487* Implicit Linker Scripts:: Implicit Linker Scripts
2488@end menu
2489
2490@node Basic Script Concepts
2491@section Basic Linker Script Concepts
2492@cindex linker script concepts
2493We need to define some basic concepts and vocabulary in order to
2494describe the linker script language.
2495
2496The linker combines input files into a single output file. The output
2497file and each input file are in a special data format known as an
2498@dfn{object file format}. Each file is called an @dfn{object file}.
2499The output file is often called an @dfn{executable}, but for our
2500purposes we will also call it an object file. Each object file has,
2501among other things, a list of @dfn{sections}. We sometimes refer to a
2502section in an input file as an @dfn{input section}; similarly, a section
2503in the output file is an @dfn{output section}.
2504
2505Each section in an object file has a name and a size. Most sections
2506also have an associated block of data, known as the @dfn{section
2507contents}. A section may be marked as @dfn{loadable}, which mean that
2508the contents should be loaded into memory when the output file is run.
2509A section with no contents may be @dfn{allocatable}, which means that an
2510area in memory should be set aside, but nothing in particular should be
2511loaded there (in some cases this memory must be zeroed out). A section
2512which is neither loadable nor allocatable typically contains some sort
2513of debugging information.
2514
2515Every loadable or allocatable output section has two addresses. The
2516first is the @dfn{VMA}, or virtual memory address. This is the address
2517the section will have when the output file is run. The second is the
2518@dfn{LMA}, or load memory address. This is the address at which the
2519section will be loaded. In most cases the two addresses will be the
2520same. An example of when they might be different is when a data section
2521is loaded into ROM, and then copied into RAM when the program starts up
2522(this technique is often used to initialize global variables in a ROM
2523based system). In this case the ROM address would be the LMA, and the
2524RAM address would be the VMA.
2525
2526You can see the sections in an object file by using the @code{objdump}
2527program with the @samp{-h} option.
2528
2529Every object file also has a list of @dfn{symbols}, known as the
2530@dfn{symbol table}. A symbol may be defined or undefined. Each symbol
2531has a name, and each defined symbol has an address, among other
2532information. If you compile a C or C++ program into an object file, you
2533will get a defined symbol for every defined function and global or
2534static variable. Every undefined function or global variable which is
2535referenced in the input file will become an undefined symbol.
2536
2537You can see the symbols in an object file by using the @code{nm}
2538program, or by using the @code{objdump} program with the @samp{-t}
2539option.
2540
2541@node Script Format
2542@section Linker Script Format
2543@cindex linker script format
2544Linker scripts are text files.
2545
2546You write a linker script as a series of commands. Each command is
2547either a keyword, possibly followed by arguments, or an assignment to a
2548symbol. You may separate commands using semicolons. Whitespace is
2549generally ignored.
2550
2551Strings such as file or format names can normally be entered directly.
2552If the file name contains a character such as a comma which would
2553otherwise serve to separate file names, you may put the file name in
2554double quotes. There is no way to use a double quote character in a
2555file name.
2556
2557You may include comments in linker scripts just as in C, delimited by
2558@samp{/*} and @samp{*/}. As in C, comments are syntactically equivalent
2559to whitespace.
2560
2561@node Simple Example
2562@section Simple Linker Script Example
2563@cindex linker script example
2564@cindex example of linker script
2565Many linker scripts are fairly simple.
2566
2567The simplest possible linker script has just one command:
2568@samp{SECTIONS}. You use the @samp{SECTIONS} command to describe the
2569memory layout of the output file.
2570
2571The @samp{SECTIONS} command is a powerful command. Here we will
2572describe a simple use of it. Let's assume your program consists only of
2573code, initialized data, and uninitialized data. These will be in the
2574@samp{.text}, @samp{.data}, and @samp{.bss} sections, respectively.
2575Let's assume further that these are the only sections which appear in
2576your input files.
2577
2578For this example, let's say that the code should be loaded at address
25790x10000, and that the data should start at address 0x8000000. Here is a
2580linker script which will do that:
2581@smallexample
2582SECTIONS
2583@{
2584 . = 0x10000;
2585 .text : @{ *(.text) @}
2586 . = 0x8000000;
2587 .data : @{ *(.data) @}
2588 .bss : @{ *(.bss) @}
2589@}
2590@end smallexample
2591
2592You write the @samp{SECTIONS} command as the keyword @samp{SECTIONS},
2593followed by a series of symbol assignments and output section
2594descriptions enclosed in curly braces.
2595
252b5132
RH
2596The first line inside the @samp{SECTIONS} command of the above example
2597sets the value of the special symbol @samp{.}, which is the location
2598counter. If you do not specify the address of an output section in some
2599other way (other ways are described later), the address is set from the
2600current value of the location counter. The location counter is then
2601incremented by the size of the output section. At the start of the
2602@samp{SECTIONS} command, the location counter has the value @samp{0}.
2603
2604The second line defines an output section, @samp{.text}. The colon is
2605required syntax which may be ignored for now. Within the curly braces
2606after the output section name, you list the names of the input sections
2607which should be placed into this output section. The @samp{*} is a
2608wildcard which matches any file name. The expression @samp{*(.text)}
2609means all @samp{.text} input sections in all input files.
2610
2611Since the location counter is @samp{0x10000} when the output section
2612@samp{.text} is defined, the linker will set the address of the
2613@samp{.text} section in the output file to be @samp{0x10000}.
2614
2615The remaining lines define the @samp{.data} and @samp{.bss} sections in
2616the output file. The linker will place the @samp{.data} output section
2617at address @samp{0x8000000}. After the linker places the @samp{.data}
2618output section, the value of the location counter will be
2619@samp{0x8000000} plus the size of the @samp{.data} output section. The
2620effect is that the linker will place the @samp{.bss} output section
58434bc1 2621immediately after the @samp{.data} output section in memory.
252b5132
RH
2622
2623The linker will ensure that each output section has the required
2624alignment, by increasing the location counter if necessary. In this
2625example, the specified addresses for the @samp{.text} and @samp{.data}
2626sections will probably satisfy any alignment constraints, but the linker
2627may have to create a small gap between the @samp{.data} and @samp{.bss}
2628sections.
2629
2630That's it! That's a simple and complete linker script.
2631
2632@node Simple Commands
2633@section Simple Linker Script Commands
2634@cindex linker script simple commands
2635In this section we describe the simple linker script commands.
2636
2637@menu
2638* Entry Point:: Setting the entry point
2639* File Commands:: Commands dealing with files
2640@ifclear SingleFormat
2641* Format Commands:: Commands dealing with object file formats
2642@end ifclear
2643
2644* Miscellaneous Commands:: Other linker script commands
2645@end menu
2646
2647@node Entry Point
36f63dca 2648@subsection Setting the Entry Point
252b5132
RH
2649@kindex ENTRY(@var{symbol})
2650@cindex start of execution
2651@cindex first instruction
2652@cindex entry point
2653The first instruction to execute in a program is called the @dfn{entry
2654point}. You can use the @code{ENTRY} linker script command to set the
2655entry point. The argument is a symbol name:
2656@smallexample
2657ENTRY(@var{symbol})
2658@end smallexample
2659
2660There are several ways to set the entry point. The linker will set the
2661entry point by trying each of the following methods in order, and
2662stopping when one of them succeeds:
2663@itemize @bullet
a1ab1d2a 2664@item
252b5132 2665the @samp{-e} @var{entry} command-line option;
a1ab1d2a 2666@item
252b5132 2667the @code{ENTRY(@var{symbol})} command in a linker script;
a1ab1d2a 2668@item
252b5132 2669the value of the symbol @code{start}, if defined;
a1ab1d2a 2670@item
252b5132 2671the address of the first byte of the @samp{.text} section, if present;
a1ab1d2a 2672@item
252b5132
RH
2673The address @code{0}.
2674@end itemize
2675
2676@node File Commands
36f63dca 2677@subsection Commands Dealing with Files
252b5132
RH
2678@cindex linker script file commands
2679Several linker script commands deal with files.
2680
2681@table @code
2682@item INCLUDE @var{filename}
2683@kindex INCLUDE @var{filename}
2684@cindex including a linker script
2685Include the linker script @var{filename} at this point. The file will
2686be searched for in the current directory, and in any directory specified
ff5dcc92 2687with the @option{-L} option. You can nest calls to @code{INCLUDE} up to
252b5132
RH
268810 levels deep.
2689
2690@item INPUT(@var{file}, @var{file}, @dots{})
2691@itemx INPUT(@var{file} @var{file} @dots{})
2692@kindex INPUT(@var{files})
2693@cindex input files in linker scripts
2694@cindex input object files in linker scripts
2695@cindex linker script input object files
2696The @code{INPUT} command directs the linker to include the named files
2697in the link, as though they were named on the command line.
2698
2699For example, if you always want to include @file{subr.o} any time you do
2700a link, but you can't be bothered to put it on every link command line,
2701then you can put @samp{INPUT (subr.o)} in your linker script.
2702
2703In fact, if you like, you can list all of your input files in the linker
2704script, and then invoke the linker with nothing but a @samp{-T} option.
2705
e3f2db7f
AO
2706In case a @dfn{sysroot prefix} is configured, and the filename starts
2707with the @samp{/} character, and the script being processed was
2708located inside the @dfn{sysroot prefix}, the filename will be looked
2709for in the @dfn{sysroot prefix}. Otherwise, the linker will try to
2710open the file in the current directory. If it is not found, the
2711linker will search through the archive library search path. See the
2712description of @samp{-L} in @ref{Options,,Command Line Options}.
252b5132 2713
ff5dcc92 2714If you use @samp{INPUT (-l@var{file})}, @command{ld} will transform the
252b5132
RH
2715name to @code{lib@var{file}.a}, as with the command line argument
2716@samp{-l}.
2717
2718When you use the @code{INPUT} command in an implicit linker script, the
2719files will be included in the link at the point at which the linker
2720script file is included. This can affect archive searching.
2721
2722@item GROUP(@var{file}, @var{file}, @dots{})
2723@itemx GROUP(@var{file} @var{file} @dots{})
2724@kindex GROUP(@var{files})
2725@cindex grouping input files
2726The @code{GROUP} command is like @code{INPUT}, except that the named
2727files should all be archives, and they are searched repeatedly until no
2728new undefined references are created. See the description of @samp{-(}
2729in @ref{Options,,Command Line Options}.
2730
b717d30e
JJ
2731@item AS_NEEDED(@var{file}, @var{file}, @dots{})
2732@itemx AS_NEEDED(@var{file} @var{file} @dots{})
2733@kindex AS_NEEDED(@var{files})
2734This construct can appear only inside of the @code{INPUT} or @code{GROUP}
2735commands, among other filenames. The files listed will be handled
2736as if they appear directly in the @code{INPUT} or @code{GROUP} commands,
2737with the exception of ELF shared libraries, that will be added only
2738when they are actually needed. This construct essentially enables
2739@option{--as-needed} option for all the files listed inside of it
2740and restores previous @option{--as-needed} resp. @option{--no-as-needed}
2741setting afterwards.
2742
252b5132
RH
2743@item OUTPUT(@var{filename})
2744@kindex OUTPUT(@var{filename})
b45619c0 2745@cindex output file name in linker script
252b5132
RH
2746The @code{OUTPUT} command names the output file. Using
2747@code{OUTPUT(@var{filename})} in the linker script is exactly like using
2748@samp{-o @var{filename}} on the command line (@pxref{Options,,Command
2749Line Options}). If both are used, the command line option takes
2750precedence.
2751
2752You can use the @code{OUTPUT} command to define a default name for the
2753output file other than the usual default of @file{a.out}.
2754
2755@item SEARCH_DIR(@var{path})
2756@kindex SEARCH_DIR(@var{path})
2757@cindex library search path in linker script
2758@cindex archive search path in linker script
2759@cindex search path in linker script
2760The @code{SEARCH_DIR} command adds @var{path} to the list of paths where
ff5dcc92 2761@command{ld} looks for archive libraries. Using
252b5132
RH
2762@code{SEARCH_DIR(@var{path})} is exactly like using @samp{-L @var{path}}
2763on the command line (@pxref{Options,,Command Line Options}). If both
2764are used, then the linker will search both paths. Paths specified using
2765the command line option are searched first.
2766
2767@item STARTUP(@var{filename})
2768@kindex STARTUP(@var{filename})
2769@cindex first input file
2770The @code{STARTUP} command is just like the @code{INPUT} command, except
2771that @var{filename} will become the first input file to be linked, as
2772though it were specified first on the command line. This may be useful
2773when using a system in which the entry point is always the start of the
2774first file.
2775@end table
2776
2777@ifclear SingleFormat
2778@node Format Commands
36f63dca 2779@subsection Commands Dealing with Object File Formats
252b5132
RH
2780A couple of linker script commands deal with object file formats.
2781
2782@table @code
2783@item OUTPUT_FORMAT(@var{bfdname})
2784@itemx OUTPUT_FORMAT(@var{default}, @var{big}, @var{little})
2785@kindex OUTPUT_FORMAT(@var{bfdname})
2786@cindex output file format in linker script
2787The @code{OUTPUT_FORMAT} command names the BFD format to use for the
2788output file (@pxref{BFD}). Using @code{OUTPUT_FORMAT(@var{bfdname})} is
024531e2 2789exactly like using @samp{--oformat @var{bfdname}} on the command line
252b5132
RH
2790(@pxref{Options,,Command Line Options}). If both are used, the command
2791line option takes precedence.
2792
2793You can use @code{OUTPUT_FORMAT} with three arguments to use different
2794formats based on the @samp{-EB} and @samp{-EL} command line options.
2795This permits the linker script to set the output format based on the
2796desired endianness.
2797
2798If neither @samp{-EB} nor @samp{-EL} are used, then the output format
2799will be the first argument, @var{default}. If @samp{-EB} is used, the
2800output format will be the second argument, @var{big}. If @samp{-EL} is
2801used, the output format will be the third argument, @var{little}.
2802
2803For example, the default linker script for the MIPS ELF target uses this
2804command:
2805@smallexample
2806OUTPUT_FORMAT(elf32-bigmips, elf32-bigmips, elf32-littlemips)
2807@end smallexample
2808This says that the default format for the output file is
2809@samp{elf32-bigmips}, but if the user uses the @samp{-EL} command line
2810option, the output file will be created in the @samp{elf32-littlemips}
2811format.
2812
2813@item TARGET(@var{bfdname})
2814@kindex TARGET(@var{bfdname})
2815@cindex input file format in linker script
2816The @code{TARGET} command names the BFD format to use when reading input
2817files. It affects subsequent @code{INPUT} and @code{GROUP} commands.
2818This command is like using @samp{-b @var{bfdname}} on the command line
2819(@pxref{Options,,Command Line Options}). If the @code{TARGET} command
2820is used but @code{OUTPUT_FORMAT} is not, then the last @code{TARGET}
2821command is also used to set the format for the output file. @xref{BFD}.
2822@end table
2823@end ifclear
2824
2825@node Miscellaneous Commands
36f63dca 2826@subsection Other Linker Script Commands
252b5132
RH
2827There are a few other linker scripts commands.
2828
2829@table @code
2830@item ASSERT(@var{exp}, @var{message})
2831@kindex ASSERT
2832@cindex assertion in linker script
2833Ensure that @var{exp} is non-zero. If it is zero, then exit the linker
2834with an error code, and print @var{message}.
2835
2836@item EXTERN(@var{symbol} @var{symbol} @dots{})
2837@kindex EXTERN
2838@cindex undefined symbol in linker script
2839Force @var{symbol} to be entered in the output file as an undefined
2840symbol. Doing this may, for example, trigger linking of additional
2841modules from standard libraries. You may list several @var{symbol}s for
2842each @code{EXTERN}, and you may use @code{EXTERN} multiple times. This
2843command has the same effect as the @samp{-u} command-line option.
2844
2845@item FORCE_COMMON_ALLOCATION
2846@kindex FORCE_COMMON_ALLOCATION
2847@cindex common allocation in linker script
2848This command has the same effect as the @samp{-d} command-line option:
ff5dcc92 2849to make @command{ld} assign space to common symbols even if a relocatable
252b5132
RH
2850output file is specified (@samp{-r}).
2851
4818e05f
AM
2852@item INHIBIT_COMMON_ALLOCATION
2853@kindex INHIBIT_COMMON_ALLOCATION
2854@cindex common allocation in linker script
2855This command has the same effect as the @samp{--no-define-common}
2856command-line option: to make @code{ld} omit the assignment of addresses
2857to common symbols even for a non-relocatable output file.
2858
252b5132
RH
2859@item NOCROSSREFS(@var{section} @var{section} @dots{})
2860@kindex NOCROSSREFS(@var{sections})
2861@cindex cross references
ff5dcc92 2862This command may be used to tell @command{ld} to issue an error about any
252b5132
RH
2863references among certain output sections.
2864
2865In certain types of programs, particularly on embedded systems when
2866using overlays, when one section is loaded into memory, another section
2867will not be. Any direct references between the two sections would be
2868errors. For example, it would be an error if code in one section called
2869a function defined in the other section.
2870
2871The @code{NOCROSSREFS} command takes a list of output section names. If
ff5dcc92 2872@command{ld} detects any cross references between the sections, it reports
252b5132
RH
2873an error and returns a non-zero exit status. Note that the
2874@code{NOCROSSREFS} command uses output section names, not input section
2875names.
2876
2877@ifclear SingleFormat
2878@item OUTPUT_ARCH(@var{bfdarch})
2879@kindex OUTPUT_ARCH(@var{bfdarch})
2880@cindex machine architecture
2881@cindex architecture
2882Specify a particular output machine architecture. The argument is one
2883of the names used by the BFD library (@pxref{BFD}). You can see the
2884architecture of an object file by using the @code{objdump} program with
2885the @samp{-f} option.
2886@end ifclear
2887@end table
2888
2889@node Assignments
2890@section Assigning Values to Symbols
2891@cindex assignment in scripts
2892@cindex symbol definition, scripts
2893@cindex variables, defining
2894You may assign a value to a symbol in a linker script. This will define
73ae6183 2895the symbol and place it into the symbol table with a global scope.
252b5132
RH
2896
2897@menu
2898* Simple Assignments:: Simple Assignments
2899* PROVIDE:: PROVIDE
7af8e998 2900* PROVIDE_HIDDEN:: PROVIDE_HIDDEN
73ae6183 2901* Source Code Reference:: How to use a linker script defined symbol in source code
252b5132
RH
2902@end menu
2903
2904@node Simple Assignments
2905@subsection Simple Assignments
2906
2907You may assign to a symbol using any of the C assignment operators:
2908
2909@table @code
2910@item @var{symbol} = @var{expression} ;
2911@itemx @var{symbol} += @var{expression} ;
2912@itemx @var{symbol} -= @var{expression} ;
2913@itemx @var{symbol} *= @var{expression} ;
2914@itemx @var{symbol} /= @var{expression} ;
2915@itemx @var{symbol} <<= @var{expression} ;
2916@itemx @var{symbol} >>= @var{expression} ;
2917@itemx @var{symbol} &= @var{expression} ;
2918@itemx @var{symbol} |= @var{expression} ;
2919@end table
2920
2921The first case will define @var{symbol} to the value of
2922@var{expression}. In the other cases, @var{symbol} must already be
2923defined, and the value will be adjusted accordingly.
2924
2925The special symbol name @samp{.} indicates the location counter. You
b5666f2f 2926may only use this within a @code{SECTIONS} command. @xref{Location Counter}.
252b5132
RH
2927
2928The semicolon after @var{expression} is required.
2929
2930Expressions are defined below; see @ref{Expressions}.
2931
2932You may write symbol assignments as commands in their own right, or as
2933statements within a @code{SECTIONS} command, or as part of an output
2934section description in a @code{SECTIONS} command.
2935
2936The section of the symbol will be set from the section of the
2937expression; for more information, see @ref{Expression Section}.
2938
2939Here is an example showing the three different places that symbol
2940assignments may be used:
2941
2942@smallexample
2943floating_point = 0;
2944SECTIONS
2945@{
2946 .text :
2947 @{
2948 *(.text)
2949 _etext = .;
2950 @}
156e34dd 2951 _bdata = (. + 3) & ~ 3;
252b5132
RH
2952 .data : @{ *(.data) @}
2953@}
2954@end smallexample
2955@noindent
2956In this example, the symbol @samp{floating_point} will be defined as
2957zero. The symbol @samp{_etext} will be defined as the address following
2958the last @samp{.text} input section. The symbol @samp{_bdata} will be
2959defined as the address following the @samp{.text} output section aligned
2960upward to a 4 byte boundary.
2961
2962@node PROVIDE
2963@subsection PROVIDE
2964@cindex PROVIDE
2965In some cases, it is desirable for a linker script to define a symbol
2966only if it is referenced and is not defined by any object included in
2967the link. For example, traditional linkers defined the symbol
2968@samp{etext}. However, ANSI C requires that the user be able to use
2969@samp{etext} as a function name without encountering an error. The
2970@code{PROVIDE} keyword may be used to define a symbol, such as
2971@samp{etext}, only if it is referenced but not defined. The syntax is
2972@code{PROVIDE(@var{symbol} = @var{expression})}.
2973
2974Here is an example of using @code{PROVIDE} to define @samp{etext}:
2975@smallexample
2976SECTIONS
2977@{
2978 .text :
2979 @{
2980 *(.text)
2981 _etext = .;
2982 PROVIDE(etext = .);
2983 @}
2984@}
2985@end smallexample
2986
2987In this example, if the program defines @samp{_etext} (with a leading
2988underscore), the linker will give a multiple definition error. If, on
2989the other hand, the program defines @samp{etext} (with no leading
2990underscore), the linker will silently use the definition in the program.
2991If the program references @samp{etext} but does not define it, the
2992linker will use the definition in the linker script.
2993
7af8e998
L
2994@node PROVIDE_HIDDEN
2995@subsection PROVIDE_HIDDEN
2996@cindex PROVIDE_HIDDEN
2997Similar to @code{PROVIDE}. For ELF targeted ports, the symbol will be
2998hidden and won't be exported.
2999
73ae6183
NC
3000@node Source Code Reference
3001@subsection Source Code Reference
3002
3003Accessing a linker script defined variable from source code is not
3004intuitive. In particular a linker script symbol is not equivalent to
3005a variable declaration in a high level language, it is instead a
3006symbol that does not have a value.
3007
3008Before going further, it is important to note that compilers often
3009transform names in the source code into different names when they are
3010stored in the symbol table. For example, Fortran compilers commonly
3011prepend or append an underscore, and C++ performs extensive @samp{name
3012mangling}. Therefore there might be a discrepancy between the name
3013of a variable as it is used in source code and the name of the same
3014variable as it is defined in a linker script. For example in C a
3015linker script variable might be referred to as:
3016
3017@smallexample
3018 extern int foo;
3019@end smallexample
3020
3021But in the linker script it might be defined as:
3022
3023@smallexample
3024 _foo = 1000;
3025@end smallexample
3026
3027In the remaining examples however it is assumed that no name
3028transformation has taken place.
3029
3030When a symbol is declared in a high level language such as C, two
3031things happen. The first is that the compiler reserves enough space
3032in the program's memory to hold the @emph{value} of the symbol. The
3033second is that the compiler creates an entry in the program's symbol
3034table which holds the symbol's @emph{address}. ie the symbol table
3035contains the address of the block of memory holding the symbol's
3036value. So for example the following C declaration, at file scope:
3037
3038@smallexample
3039 int foo = 1000;
3040@end smallexample
3041
3042creates a entry called @samp{foo} in the symbol table. This entry
3043holds the address of an @samp{int} sized block of memory where the
3044number 1000 is initially stored.
3045
3046When a program references a symbol the compiler generates code that
3047first accesses the symbol table to find the address of the symbol's
3048memory block and then code to read the value from that memory block.
3049So:
3050
3051@smallexample
3052 foo = 1;
3053@end smallexample
3054
3055looks up the symbol @samp{foo} in the symbol table, gets the address
3056associated with this symbol and then writes the value 1 into that
3057address. Whereas:
3058
3059@smallexample
3060 int * a = & foo;
3061@end smallexample
3062
3063looks up the symbol @samp{foo} in the symbol table, gets it address
3064and then copies this address into the block of memory associated with
3065the variable @samp{a}.
3066
3067Linker scripts symbol declarations, by contrast, create an entry in
3068the symbol table but do not assign any memory to them. Thus they are
3069an address without a value. So for example the linker script definition:
3070
3071@smallexample
3072 foo = 1000;
3073@end smallexample
3074
3075creates an entry in the symbol table called @samp{foo} which holds
3076the address of memory location 1000, but nothing special is stored at
3077address 1000. This means that you cannot access the @emph{value} of a
3078linker script defined symbol - it has no value - all you can do is
3079access the @emph{address} of a linker script defined symbol.
3080
3081Hence when you are using a linker script defined symbol in source code
3082you should always take the address of the symbol, and never attempt to
3083use its value. For example suppose you want to copy the contents of a
3084section of memory called .ROM into a section called .FLASH and the
3085linker script contains these declarations:
3086
3087@smallexample
3088@group
3089 start_of_ROM = .ROM;
3090 end_of_ROM = .ROM + sizeof (.ROM) - 1;
3091 start_of_FLASH = .FLASH;
3092@end group
3093@end smallexample
3094
3095Then the C source code to perform the copy would be:
3096
3097@smallexample
3098@group
3099 extern char start_of_ROM, end_of_ROM, start_of_FLASH;
3100
3101 memcpy (& start_of_FLASH, & start_of_ROM, & end_of_ROM - & start_of_ROM);
3102@end group
3103@end smallexample
3104
3105Note the use of the @samp{&} operators. These are correct.
3106
252b5132 3107@node SECTIONS
36f63dca 3108@section SECTIONS Command
252b5132
RH
3109@kindex SECTIONS
3110The @code{SECTIONS} command tells the linker how to map input sections
3111into output sections, and how to place the output sections in memory.
3112
3113The format of the @code{SECTIONS} command is:
3114@smallexample
3115SECTIONS
3116@{
3117 @var{sections-command}
3118 @var{sections-command}
3119 @dots{}
3120@}
3121@end smallexample
3122
3123Each @var{sections-command} may of be one of the following:
3124
3125@itemize @bullet
3126@item
3127an @code{ENTRY} command (@pxref{Entry Point,,Entry command})
3128@item
3129a symbol assignment (@pxref{Assignments})
3130@item
3131an output section description
3132@item
3133an overlay description
3134@end itemize
3135
3136The @code{ENTRY} command and symbol assignments are permitted inside the
3137@code{SECTIONS} command for convenience in using the location counter in
3138those commands. This can also make the linker script easier to
3139understand because you can use those commands at meaningful points in
3140the layout of the output file.
3141
3142Output section descriptions and overlay descriptions are described
3143below.
3144
3145If you do not use a @code{SECTIONS} command in your linker script, the
3146linker will place each input section into an identically named output
3147section in the order that the sections are first encountered in the
3148input files. If all input sections are present in the first file, for
3149example, the order of sections in the output file will match the order
3150in the first input file. The first section will be at address zero.
3151
3152@menu
3153* Output Section Description:: Output section description
3154* Output Section Name:: Output section name
3155* Output Section Address:: Output section address
3156* Input Section:: Input section description
3157* Output Section Data:: Output section data
3158* Output Section Keywords:: Output section keywords
3159* Output Section Discarding:: Output section discarding
3160* Output Section Attributes:: Output section attributes
3161* Overlay Description:: Overlay description
3162@end menu
3163
3164@node Output Section Description
36f63dca 3165@subsection Output Section Description
252b5132
RH
3166The full description of an output section looks like this:
3167@smallexample
a1ab1d2a 3168@group
7e7d5768 3169@var{section} [@var{address}] [(@var{type})] :
bbf115d3 3170 [AT(@var{lma})] [ALIGN(@var{section_align})] [SUBALIGN(@var{subsection_align})]
252b5132
RH
3171 @{
3172 @var{output-section-command}
3173 @var{output-section-command}
3174 @dots{}
562d3460 3175 @} [>@var{region}] [AT>@var{lma_region}] [:@var{phdr} :@var{phdr} @dots{}] [=@var{fillexp}]
252b5132
RH
3176@end group
3177@end smallexample
3178
3179Most output sections do not use most of the optional section attributes.
3180
3181The whitespace around @var{section} is required, so that the section
3182name is unambiguous. The colon and the curly braces are also required.
3183The line breaks and other white space are optional.
3184
3185Each @var{output-section-command} may be one of the following:
3186
3187@itemize @bullet
3188@item
3189a symbol assignment (@pxref{Assignments})
3190@item
3191an input section description (@pxref{Input Section})
3192@item
3193data values to include directly (@pxref{Output Section Data})
3194@item
3195a special output section keyword (@pxref{Output Section Keywords})
3196@end itemize
3197
3198@node Output Section Name
36f63dca 3199@subsection Output Section Name
252b5132
RH
3200@cindex name, section
3201@cindex section name
3202The name of the output section is @var{section}. @var{section} must
3203meet the constraints of your output format. In formats which only
3204support a limited number of sections, such as @code{a.out}, the name
3205must be one of the names supported by the format (@code{a.out}, for
3206example, allows only @samp{.text}, @samp{.data} or @samp{.bss}). If the
3207output format supports any number of sections, but with numbers and not
3208names (as is the case for Oasys), the name should be supplied as a
3209quoted numeric string. A section name may consist of any sequence of
3210characters, but a name which contains any unusual characters such as
3211commas must be quoted.
3212
3213The output section name @samp{/DISCARD/} is special; @ref{Output Section
3214Discarding}.
3215
3216@node Output Section Address
2a16d82a 3217@subsection Output Section Address
252b5132
RH
3218@cindex address, section
3219@cindex section address
3220The @var{address} is an expression for the VMA (the virtual memory
3221address) of the output section. If you do not provide @var{address},
3222the linker will set it based on @var{region} if present, or otherwise
3223based on the current value of the location counter.
3224
3225If you provide @var{address}, the address of the output section will be
3226set to precisely that. If you provide neither @var{address} nor
3227@var{region}, then the address of the output section will be set to the
3228current value of the location counter aligned to the alignment
3229requirements of the output section. The alignment requirement of the
3230output section is the strictest alignment of any input section contained
3231within the output section.
3232
3233For example,
3234@smallexample
3235.text . : @{ *(.text) @}
3236@end smallexample
3237@noindent
3238and
3239@smallexample
3240.text : @{ *(.text) @}
3241@end smallexample
3242@noindent
3243are subtly different. The first will set the address of the
3244@samp{.text} output section to the current value of the location
3245counter. The second will set it to the current value of the location
3246counter aligned to the strictest alignment of a @samp{.text} input
3247section.
3248
3249The @var{address} may be an arbitrary expression; @ref{Expressions}.
3250For example, if you want to align the section on a 0x10 byte boundary,
3251so that the lowest four bits of the section address are zero, you could
3252do something like this:
3253@smallexample
3254.text ALIGN(0x10) : @{ *(.text) @}
3255@end smallexample
3256@noindent
3257This works because @code{ALIGN} returns the current location counter
3258aligned upward to the specified value.
3259
3260Specifying @var{address} for a section will change the value of the
3261location counter.
3262
3263@node Input Section
36f63dca 3264@subsection Input Section Description
252b5132
RH
3265@cindex input sections
3266@cindex mapping input sections to output sections
3267The most common output section command is an input section description.
3268
3269The input section description is the most basic linker script operation.
3270You use output sections to tell the linker how to lay out your program
3271in memory. You use input section descriptions to tell the linker how to
3272map the input files into your memory layout.
3273
3274@menu
3275* Input Section Basics:: Input section basics
3276* Input Section Wildcards:: Input section wildcard patterns
3277* Input Section Common:: Input section for common symbols
3278* Input Section Keep:: Input section and garbage collection
3279* Input Section Example:: Input section example
3280@end menu
3281
3282@node Input Section Basics
36f63dca 3283@subsubsection Input Section Basics
252b5132
RH
3284@cindex input section basics
3285An input section description consists of a file name optionally followed
3286by a list of section names in parentheses.
3287
3288The file name and the section name may be wildcard patterns, which we
3289describe further below (@pxref{Input Section Wildcards}).
3290
3291The most common input section description is to include all input
3292sections with a particular name in the output section. For example, to
3293include all input @samp{.text} sections, you would write:
3294@smallexample
3295*(.text)
3296@end smallexample
3297@noindent
18625d54
CM
3298Here the @samp{*} is a wildcard which matches any file name. To exclude a list
3299of files from matching the file name wildcard, EXCLUDE_FILE may be used to
3300match all files except the ones specified in the EXCLUDE_FILE list. For
3301example:
252b5132 3302@smallexample
765b7cbe 3303(*(EXCLUDE_FILE (*crtend.o *otherfile.o) .ctors))
252b5132 3304@end smallexample
765b7cbe
JB
3305will cause all .ctors sections from all files except @file{crtend.o} and
3306@file{otherfile.o} to be included.
252b5132
RH
3307
3308There are two ways to include more than one section:
3309@smallexample
3310*(.text .rdata)
3311*(.text) *(.rdata)
3312@end smallexample
3313@noindent
3314The difference between these is the order in which the @samp{.text} and
3315@samp{.rdata} input sections will appear in the output section. In the
b6bf44ba
AM
3316first example, they will be intermingled, appearing in the same order as
3317they are found in the linker input. In the second example, all
252b5132
RH
3318@samp{.text} input sections will appear first, followed by all
3319@samp{.rdata} input sections.
3320
3321You can specify a file name to include sections from a particular file.
3322You would do this if one or more of your files contain special data that
3323needs to be at a particular location in memory. For example:
3324@smallexample
3325data.o(.data)
3326@end smallexample
3327
3328If you use a file name without a list of sections, then all sections in
3329the input file will be included in the output section. This is not
3330commonly done, but it may by useful on occasion. For example:
3331@smallexample
3332data.o
3333@end smallexample
3334
3335When you use a file name which does not contain any wild card
3336characters, the linker will first see if you also specified the file
3337name on the linker command line or in an @code{INPUT} command. If you
3338did not, the linker will attempt to open the file as an input file, as
3339though it appeared on the command line. Note that this differs from an
3340@code{INPUT} command, because the linker will not search for the file in
3341the archive search path.
3342
3343@node Input Section Wildcards
36f63dca 3344@subsubsection Input Section Wildcard Patterns
252b5132
RH
3345@cindex input section wildcards
3346@cindex wildcard file name patterns
3347@cindex file name wildcard patterns
3348@cindex section name wildcard patterns
3349In an input section description, either the file name or the section
3350name or both may be wildcard patterns.
3351
3352The file name of @samp{*} seen in many examples is a simple wildcard
3353pattern for the file name.
3354
3355The wildcard patterns are like those used by the Unix shell.
3356
3357@table @samp
3358@item *
3359matches any number of characters
3360@item ?
3361matches any single character
3362@item [@var{chars}]
3363matches a single instance of any of the @var{chars}; the @samp{-}
3364character may be used to specify a range of characters, as in
3365@samp{[a-z]} to match any lower case letter
3366@item \
3367quotes the following character
3368@end table
3369
3370When a file name is matched with a wildcard, the wildcard characters
3371will not match a @samp{/} character (used to separate directory names on
3372Unix). A pattern consisting of a single @samp{*} character is an
3373exception; it will always match any file name, whether it contains a
3374@samp{/} or not. In a section name, the wildcard characters will match
3375a @samp{/} character.
3376
3377File name wildcard patterns only match files which are explicitly
3378specified on the command line or in an @code{INPUT} command. The linker
3379does not search directories to expand wildcards.
3380
3381If a file name matches more than one wildcard pattern, or if a file name
3382appears explicitly and is also matched by a wildcard pattern, the linker
3383will use the first match in the linker script. For example, this
3384sequence of input section descriptions is probably in error, because the
3385@file{data.o} rule will not be used:
3386@smallexample
3387.data : @{ *(.data) @}
3388.data1 : @{ data.o(.data) @}
3389@end smallexample
3390
bcaa7b3e 3391@cindex SORT_BY_NAME
252b5132
RH
3392Normally, the linker will place files and sections matched by wildcards
3393in the order in which they are seen during the link. You can change
bcaa7b3e
L
3394this by using the @code{SORT_BY_NAME} keyword, which appears before a wildcard
3395pattern in parentheses (e.g., @code{SORT_BY_NAME(.text*)}). When the
3396@code{SORT_BY_NAME} keyword is used, the linker will sort the files or sections
252b5132
RH
3397into ascending order by name before placing them in the output file.
3398
bcaa7b3e
L
3399@cindex SORT_BY_ALIGNMENT
3400@code{SORT_BY_ALIGNMENT} is very similar to @code{SORT_BY_NAME}. The
3401difference is @code{SORT_BY_ALIGNMENT} will sort sections into
3402ascending order by alignment before placing them in the output file.
3403
3404@cindex SORT
3405@code{SORT} is an alias for @code{SORT_BY_NAME}.
3406
3407When there are nested section sorting commands in linker script, there
3408can be at most 1 level of nesting for section sorting commands.
3409
3410@enumerate
3411@item
3412@code{SORT_BY_NAME} (@code{SORT_BY_ALIGNMENT} (wildcard section pattern)).
3413It will sort the input sections by name first, then by alignment if 2
3414sections have the same name.
3415@item
3416@code{SORT_BY_ALIGNMENT} (@code{SORT_BY_NAME} (wildcard section pattern)).
3417It will sort the input sections by alignment first, then by name if 2
3418sections have the same alignment.
3419@item
3420@code{SORT_BY_NAME} (@code{SORT_BY_NAME} (wildcard section pattern)) is
3421treated the same as @code{SORT_BY_NAME} (wildcard section pattern).
3422@item
3423@code{SORT_BY_ALIGNMENT} (@code{SORT_BY_ALIGNMENT} (wildcard section pattern))
3424is treated the same as @code{SORT_BY_ALIGNMENT} (wildcard section pattern).
3425@item
3426All other nested section sorting commands are invalid.
3427@end enumerate
3428
3429When both command line section sorting option and linker script
3430section sorting command are used, section sorting command always
3431takes precedence over the command line option.
3432
3433If the section sorting command in linker script isn't nested, the
3434command line option will make the section sorting command to be
3435treated as nested sorting command.
3436
3437@enumerate
3438@item
3439@code{SORT_BY_NAME} (wildcard section pattern ) with
3440@option{--sort-sections alignment} is equivalent to
3441@code{SORT_BY_NAME} (@code{SORT_BY_ALIGNMENT} (wildcard section pattern)).
3442@item
3443@code{SORT_BY_ALIGNMENT} (wildcard section pattern) with
3444@option{--sort-section name} is equivalent to
3445@code{SORT_BY_ALIGNMENT} (@code{SORT_BY_NAME} (wildcard section pattern)).
3446@end enumerate
3447
3448If the section sorting command in linker script is nested, the
3449command line option will be ignored.
3450
252b5132
RH
3451If you ever get confused about where input sections are going, use the
3452@samp{-M} linker option to generate a map file. The map file shows
3453precisely how input sections are mapped to output sections.
3454
3455This example shows how wildcard patterns might be used to partition
3456files. This linker script directs the linker to place all @samp{.text}
3457sections in @samp{.text} and all @samp{.bss} sections in @samp{.bss}.
3458The linker will place the @samp{.data} section from all files beginning
3459with an upper case character in @samp{.DATA}; for all other files, the
3460linker will place the @samp{.data} section in @samp{.data}.
3461@smallexample
3462@group
3463SECTIONS @{
3464 .text : @{ *(.text) @}
3465 .DATA : @{ [A-Z]*(.data) @}
3466 .data : @{ *(.data) @}
3467 .bss : @{ *(.bss) @}
3468@}
3469@end group
3470@end smallexample
3471
3472@node Input Section Common
36f63dca 3473@subsubsection Input Section for Common Symbols
252b5132
RH
3474@cindex common symbol placement
3475@cindex uninitialized data placement
3476A special notation is needed for common symbols, because in many object
3477file formats common symbols do not have a particular input section. The
3478linker treats common symbols as though they are in an input section
3479named @samp{COMMON}.
3480
3481You may use file names with the @samp{COMMON} section just as with any
3482other input sections. You can use this to place common symbols from a
3483particular input file in one section while common symbols from other
3484input files are placed in another section.
3485
3486In most cases, common symbols in input files will be placed in the
3487@samp{.bss} section in the output file. For example:
3488@smallexample
3489.bss @{ *(.bss) *(COMMON) @}
3490@end smallexample
3491
3492@cindex scommon section
3493@cindex small common symbols
3494Some object file formats have more than one type of common symbol. For
3495example, the MIPS ELF object file format distinguishes standard common
3496symbols and small common symbols. In this case, the linker will use a
3497different special section name for other types of common symbols. In
3498the case of MIPS ELF, the linker uses @samp{COMMON} for standard common
3499symbols and @samp{.scommon} for small common symbols. This permits you
3500to map the different types of common symbols into memory at different
3501locations.
3502
3503@cindex [COMMON]
3504You will sometimes see @samp{[COMMON]} in old linker scripts. This
3505notation is now considered obsolete. It is equivalent to
3506@samp{*(COMMON)}.
3507
3508@node Input Section Keep
36f63dca 3509@subsubsection Input Section and Garbage Collection
252b5132
RH
3510@cindex KEEP
3511@cindex garbage collection
3512When link-time garbage collection is in use (@samp{--gc-sections}),
a1ab1d2a 3513it is often useful to mark sections that should not be eliminated.
252b5132
RH
3514This is accomplished by surrounding an input section's wildcard entry
3515with @code{KEEP()}, as in @code{KEEP(*(.init))} or
bcaa7b3e 3516@code{KEEP(SORT_BY_NAME(*)(.ctors))}.
252b5132
RH
3517
3518@node Input Section Example
36f63dca 3519@subsubsection Input Section Example
252b5132
RH
3520The following example is a complete linker script. It tells the linker
3521to read all of the sections from file @file{all.o} and place them at the
3522start of output section @samp{outputa} which starts at location
3523@samp{0x10000}. All of section @samp{.input1} from file @file{foo.o}
3524follows immediately, in the same output section. All of section
3525@samp{.input2} from @file{foo.o} goes into output section
3526@samp{outputb}, followed by section @samp{.input1} from @file{foo1.o}.
3527All of the remaining @samp{.input1} and @samp{.input2} sections from any
3528files are written to output section @samp{outputc}.
3529
3530@smallexample
3531@group
3532SECTIONS @{
3533 outputa 0x10000 :
3534 @{
3535 all.o
3536 foo.o (.input1)
3537 @}
36f63dca
NC
3538@end group
3539@group
252b5132
RH
3540 outputb :
3541 @{
3542 foo.o (.input2)
3543 foo1.o (.input1)
3544 @}
36f63dca
NC
3545@end group
3546@group
252b5132
RH
3547 outputc :
3548 @{
3549 *(.input1)
3550 *(.input2)
3551 @}
3552@}
3553@end group
a1ab1d2a 3554@end smallexample
252b5132
RH
3555
3556@node Output Section Data
36f63dca 3557@subsection Output Section Data
252b5132
RH
3558@cindex data
3559@cindex section data
3560@cindex output section data
3561@kindex BYTE(@var{expression})
3562@kindex SHORT(@var{expression})
3563@kindex LONG(@var{expression})
3564@kindex QUAD(@var{expression})
3565@kindex SQUAD(@var{expression})
3566You can include explicit bytes of data in an output section by using
3567@code{BYTE}, @code{SHORT}, @code{LONG}, @code{QUAD}, or @code{SQUAD} as
3568an output section command. Each keyword is followed by an expression in
3569parentheses providing the value to store (@pxref{Expressions}). The
3570value of the expression is stored at the current value of the location
3571counter.
3572
3573The @code{BYTE}, @code{SHORT}, @code{LONG}, and @code{QUAD} commands
3574store one, two, four, and eight bytes (respectively). After storing the
3575bytes, the location counter is incremented by the number of bytes
3576stored.
3577
3578For example, this will store the byte 1 followed by the four byte value
3579of the symbol @samp{addr}:
3580@smallexample
3581BYTE(1)
3582LONG(addr)
3583@end smallexample
3584
3585When using a 64 bit host or target, @code{QUAD} and @code{SQUAD} are the
3586same; they both store an 8 byte, or 64 bit, value. When both host and
3587target are 32 bits, an expression is computed as 32 bits. In this case
3588@code{QUAD} stores a 32 bit value zero extended to 64 bits, and
3589@code{SQUAD} stores a 32 bit value sign extended to 64 bits.
3590
3591If the object file format of the output file has an explicit endianness,
3592which is the normal case, the value will be stored in that endianness.
3593When the object file format does not have an explicit endianness, as is
3594true of, for example, S-records, the value will be stored in the
3595endianness of the first input object file.
3596
36f63dca 3597Note---these commands only work inside a section description and not
2b5fc1f5
NC
3598between them, so the following will produce an error from the linker:
3599@smallexample
3600SECTIONS @{@ .text : @{@ *(.text) @}@ LONG(1) .data : @{@ *(.data) @}@ @}@
3601@end smallexample
3602whereas this will work:
3603@smallexample
3604SECTIONS @{@ .text : @{@ *(.text) ; LONG(1) @}@ .data : @{@ *(.data) @}@ @}@
3605@end smallexample
3606
252b5132
RH
3607@kindex FILL(@var{expression})
3608@cindex holes, filling
3609@cindex unspecified memory
3610You may use the @code{FILL} command to set the fill pattern for the
3611current section. It is followed by an expression in parentheses. Any
3612otherwise unspecified regions of memory within the section (for example,
3613gaps left due to the required alignment of input sections) are filled
a139d329 3614with the value of the expression, repeated as
252b5132
RH
3615necessary. A @code{FILL} statement covers memory locations after the
3616point at which it occurs in the section definition; by including more
3617than one @code{FILL} statement, you can have different fill patterns in
3618different parts of an output section.
3619
3620This example shows how to fill unspecified regions of memory with the
563e308f 3621value @samp{0x90}:
252b5132 3622@smallexample
563e308f 3623FILL(0x90909090)
252b5132
RH
3624@end smallexample
3625
3626The @code{FILL} command is similar to the @samp{=@var{fillexp}} output
9673c93c 3627section attribute, but it only affects the
252b5132
RH
3628part of the section following the @code{FILL} command, rather than the
3629entire section. If both are used, the @code{FILL} command takes
9673c93c 3630precedence. @xref{Output Section Fill}, for details on the fill
a139d329 3631expression.
252b5132
RH
3632
3633@node Output Section Keywords
36f63dca 3634@subsection Output Section Keywords
252b5132
RH
3635There are a couple of keywords which can appear as output section
3636commands.
3637
3638@table @code
3639@kindex CREATE_OBJECT_SYMBOLS
3640@cindex input filename symbols
3641@cindex filename symbols
3642@item CREATE_OBJECT_SYMBOLS
3643The command tells the linker to create a symbol for each input file.
3644The name of each symbol will be the name of the corresponding input
3645file. The section of each symbol will be the output section in which
3646the @code{CREATE_OBJECT_SYMBOLS} command appears.
3647
3648This is conventional for the a.out object file format. It is not
3649normally used for any other object file format.
3650
3651@kindex CONSTRUCTORS
3652@cindex C++ constructors, arranging in link
3653@cindex constructors, arranging in link
3654@item CONSTRUCTORS
3655When linking using the a.out object file format, the linker uses an
3656unusual set construct to support C++ global constructors and
3657destructors. When linking object file formats which do not support
3658arbitrary sections, such as ECOFF and XCOFF, the linker will
3659automatically recognize C++ global constructors and destructors by name.
3660For these object file formats, the @code{CONSTRUCTORS} command tells the
3661linker to place constructor information in the output section where the
3662@code{CONSTRUCTORS} command appears. The @code{CONSTRUCTORS} command is
3663ignored for other object file formats.
3664
3665The symbol @w{@code{__CTOR_LIST__}} marks the start of the global
7e69709c
AM
3666constructors, and the symbol @w{@code{__CTOR_END__}} marks the end.
3667Similarly, @w{@code{__DTOR_LIST__}} and @w{@code{__DTOR_END__}} mark
3668the start and end of the global destructors. The
252b5132
RH
3669first word in the list is the number of entries, followed by the address
3670of each constructor or destructor, followed by a zero word. The
3671compiler must arrange to actually run the code. For these object file
3672formats @sc{gnu} C++ normally calls constructors from a subroutine
3673@code{__main}; a call to @code{__main} is automatically inserted into
3674the startup code for @code{main}. @sc{gnu} C++ normally runs
3675destructors either by using @code{atexit}, or directly from the function
3676@code{exit}.
3677
3678For object file formats such as @code{COFF} or @code{ELF} which support
3679arbitrary section names, @sc{gnu} C++ will normally arrange to put the
3680addresses of global constructors and destructors into the @code{.ctors}
3681and @code{.dtors} sections. Placing the following sequence into your
3682linker script will build the sort of table which the @sc{gnu} C++
3683runtime code expects to see.
3684
3685@smallexample
3686 __CTOR_LIST__ = .;
3687 LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
3688 *(.ctors)
3689 LONG(0)
3690 __CTOR_END__ = .;
3691 __DTOR_LIST__ = .;
3692 LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
3693 *(.dtors)
3694 LONG(0)
3695 __DTOR_END__ = .;
3696@end smallexample
3697
3698If you are using the @sc{gnu} C++ support for initialization priority,
3699which provides some control over the order in which global constructors
3700are run, you must sort the constructors at link time to ensure that they
3701are executed in the correct order. When using the @code{CONSTRUCTORS}
bcaa7b3e
L
3702command, use @samp{SORT_BY_NAME(CONSTRUCTORS)} instead. When using the
3703@code{.ctors} and @code{.dtors} sections, use @samp{*(SORT_BY_NAME(.ctors))} and
3704@samp{*(SORT_BY_NAME(.dtors))} instead of just @samp{*(.ctors)} and
252b5132
RH
3705@samp{*(.dtors)}.
3706
3707Normally the compiler and linker will handle these issues automatically,
3708and you will not need to concern yourself with them. However, you may
3709need to consider this if you are using C++ and writing your own linker
3710scripts.
3711
3712@end table
3713
3714@node Output Section Discarding
36f63dca 3715@subsection Output Section Discarding
252b5132
RH
3716@cindex discarding sections
3717@cindex sections, discarding
3718@cindex removing sections
74541ad4
AM
3719The linker will not create output sections with no contents. This is
3720for convenience when referring to input sections that may or may not
3721be present in any of the input files. For example:
252b5132 3722@smallexample
49c13adb 3723.foo : @{ *(.foo) @}
252b5132
RH
3724@end smallexample
3725@noindent
3726will only create a @samp{.foo} section in the output file if there is a
74541ad4
AM
3727@samp{.foo} section in at least one input file, and if the input
3728sections are not all empty. Other link script directives that allocate
3729space in an output section will also create the output section.
3730
a0976ea4 3731The linker will ignore address assignments (@pxref{Output Section Address})
74541ad4
AM
3732on discarded output sections, except when the linker script defines
3733symbols in the output section. In that case the linker will obey
a0976ea4
AM
3734the address assignments, possibly advancing dot even though the
3735section is discarded.
252b5132
RH
3736
3737@cindex /DISCARD/
3738The special output section name @samp{/DISCARD/} may be used to discard
3739input sections. Any input sections which are assigned to an output
3740section named @samp{/DISCARD/} are not included in the output file.
3741
3742@node Output Section Attributes
36f63dca 3743@subsection Output Section Attributes
252b5132
RH
3744@cindex output section attributes
3745We showed above that the full description of an output section looked
3746like this:
3747@smallexample
a1ab1d2a 3748@group
7e7d5768 3749@var{section} [@var{address}] [(@var{type})] :
bbf115d3 3750 [AT(@var{lma})] [ALIGN(@var{section_align})] [SUBALIGN(@var{subsection_align})]
252b5132
RH
3751 @{
3752 @var{output-section-command}
3753 @var{output-section-command}
3754 @dots{}
562d3460 3755 @} [>@var{region}] [AT>@var{lma_region}] [:@var{phdr} :@var{phdr} @dots{}] [=@var{fillexp}]
252b5132
RH
3756@end group
3757@end smallexample
3758We've already described @var{section}, @var{address}, and
3759@var{output-section-command}. In this section we will describe the
3760remaining section attributes.
3761
a1ab1d2a 3762@menu
252b5132
RH
3763* Output Section Type:: Output section type
3764* Output Section LMA:: Output section LMA
bbf115d3 3765* Forced Output Alignment:: Forced Output Alignment
7e7d5768 3766* Forced Input Alignment:: Forced Input Alignment
252b5132
RH
3767* Output Section Region:: Output section region
3768* Output Section Phdr:: Output section phdr
3769* Output Section Fill:: Output section fill
3770@end menu
3771
3772@node Output Section Type
36f63dca 3773@subsubsection Output Section Type
252b5132
RH
3774Each output section may have a type. The type is a keyword in
3775parentheses. The following types are defined:
3776
3777@table @code
3778@item NOLOAD
3779The section should be marked as not loadable, so that it will not be
3780loaded into memory when the program is run.
3781@item DSECT
3782@itemx COPY
3783@itemx INFO
3784@itemx OVERLAY
3785These type names are supported for backward compatibility, and are
3786rarely used. They all have the same effect: the section should be
3787marked as not allocatable, so that no memory is allocated for the
3788section when the program is run.
3789@end table
3790
3791@kindex NOLOAD
3792@cindex prevent unnecessary loading
3793@cindex loading, preventing
3794The linker normally sets the attributes of an output section based on
3795the input sections which map into it. You can override this by using
3796the section type. For example, in the script sample below, the
3797@samp{ROM} section is addressed at memory location @samp{0} and does not
3798need to be loaded when the program is run. The contents of the
3799@samp{ROM} section will appear in the linker output file as usual.
3800@smallexample
3801@group
3802SECTIONS @{
3803 ROM 0 (NOLOAD) : @{ @dots{} @}
3804 @dots{}
3805@}
3806@end group
3807@end smallexample
3808
3809@node Output Section LMA
36f63dca 3810@subsubsection Output Section LMA
562d3460 3811@kindex AT>@var{lma_region}
252b5132
RH
3812@kindex AT(@var{lma})
3813@cindex load address
3814@cindex section load address
3815Every section has a virtual address (VMA) and a load address (LMA); see
3816@ref{Basic Script Concepts}. The address expression which may appear in
3817an output section description sets the VMA (@pxref{Output Section
3818Address}).
3819
dc0b6aa0
AM
3820The expression @var{lma} that follows the @code{AT} keyword specifies
3821the load address of the section.
6bdafbeb
NC
3822
3823Alternatively, with @samp{AT>@var{lma_region}} expression, you may
3824specify a memory region for the section's load address. @xref{MEMORY}.
3825Note that if the section has not had a VMA assigned to it then the
3826linker will use the @var{lma_region} as the VMA region as well.
dc0b6aa0
AM
3827
3828If neither @code{AT} nor @code{AT>} is specified for an allocatable
3829section, the linker will set the LMA such that the difference between
3830VMA and LMA for the section is the same as the preceding output
3831section in the same region. If there is no preceding output section
3832or the section is not allocatable, the linker will set the LMA equal
3833to the VMA.
6bdafbeb 3834@xref{Output Section Region}.
252b5132
RH
3835
3836@cindex ROM initialized data
3837@cindex initialized data in ROM
3838This feature is designed to make it easy to build a ROM image. For
3839example, the following linker script creates three output sections: one
3840called @samp{.text}, which starts at @code{0x1000}, one called
3841@samp{.mdata}, which is loaded at the end of the @samp{.text} section
3842even though its VMA is @code{0x2000}, and one called @samp{.bss} to hold
3843uninitialized data at address @code{0x3000}. The symbol @code{_data} is
3844defined with the value @code{0x2000}, which shows that the location
3845counter holds the VMA value, not the LMA value.
3846
3847@smallexample
3848@group
3849SECTIONS
3850 @{
3851 .text 0x1000 : @{ *(.text) _etext = . ; @}
a1ab1d2a 3852 .mdata 0x2000 :
252b5132
RH
3853 AT ( ADDR (.text) + SIZEOF (.text) )
3854 @{ _data = . ; *(.data); _edata = . ; @}
3855 .bss 0x3000 :
3856 @{ _bstart = . ; *(.bss) *(COMMON) ; _bend = . ;@}
3857@}
3858@end group
3859@end smallexample
3860
3861The run-time initialization code for use with a program generated with
3862this linker script would include something like the following, to copy
3863the initialized data from the ROM image to its runtime address. Notice
3864how this code takes advantage of the symbols defined by the linker
3865script.
3866
3867@smallexample
3868@group
3869extern char _etext, _data, _edata, _bstart, _bend;
3870char *src = &_etext;
3871char *dst = &_data;
3872
3873/* ROM has data at end of text; copy it. */
3874while (dst < &_edata) @{
3875 *dst++ = *src++;
3876@}
3877
3878/* Zero bss */
3879for (dst = &_bstart; dst< &_bend; dst++)
3880 *dst = 0;
3881@end group
3882@end smallexample
3883
bbf115d3
L
3884@node Forced Output Alignment
3885@subsubsection Forced Output Alignment
3886@kindex ALIGN(@var{section_align})
3887@cindex forcing output section alignment
3888@cindex output section alignment
7270c5ed 3889You can increase an output section's alignment by using ALIGN.
bbf115d3 3890
7e7d5768
AM
3891@node Forced Input Alignment
3892@subsubsection Forced Input Alignment
3893@kindex SUBALIGN(@var{subsection_align})
3894@cindex forcing input section alignment
3895@cindex input section alignment
3896You can force input section alignment within an output section by using
3897SUBALIGN. The value specified overrides any alignment given by input
3898sections, whether larger or smaller.
3899
252b5132 3900@node Output Section Region
36f63dca 3901@subsubsection Output Section Region
252b5132
RH
3902@kindex >@var{region}
3903@cindex section, assigning to memory region
3904@cindex memory regions and sections
3905You can assign a section to a previously defined region of memory by
3906using @samp{>@var{region}}. @xref{MEMORY}.
3907
3908Here is a simple example:
3909@smallexample
3910@group
3911MEMORY @{ rom : ORIGIN = 0x1000, LENGTH = 0x1000 @}
3912SECTIONS @{ ROM : @{ *(.text) @} >rom @}
3913@end group
3914@end smallexample
3915
3916@node Output Section Phdr
36f63dca 3917@subsubsection Output Section Phdr
252b5132
RH
3918@kindex :@var{phdr}
3919@cindex section, assigning to program header
3920@cindex program headers and sections
3921You can assign a section to a previously defined program segment by
3922using @samp{:@var{phdr}}. @xref{PHDRS}. If a section is assigned to
3923one or more segments, then all subsequent allocated sections will be
3924assigned to those segments as well, unless they use an explicitly
3925@code{:@var{phdr}} modifier. You can use @code{:NONE} to tell the
3926linker to not put the section in any segment at all.
3927
3928Here is a simple example:
3929@smallexample
3930@group
3931PHDRS @{ text PT_LOAD ; @}
3932SECTIONS @{ .text : @{ *(.text) @} :text @}
3933@end group
3934@end smallexample
3935
3936@node Output Section Fill
36f63dca 3937@subsubsection Output Section Fill
252b5132
RH
3938@kindex =@var{fillexp}
3939@cindex section fill pattern
3940@cindex fill pattern, entire section
3941You can set the fill pattern for an entire section by using
3942@samp{=@var{fillexp}}. @var{fillexp} is an expression
3943(@pxref{Expressions}). Any otherwise unspecified regions of memory
3944within the output section (for example, gaps left due to the required
a139d329
AM
3945alignment of input sections) will be filled with the value, repeated as
3946necessary. If the fill expression is a simple hex number, ie. a string
9673c93c 3947of hex digit starting with @samp{0x} and without a trailing @samp{k} or @samp{M}, then
a139d329
AM
3948an arbitrarily long sequence of hex digits can be used to specify the
3949fill pattern; Leading zeros become part of the pattern too. For all
9673c93c 3950other cases, including extra parentheses or a unary @code{+}, the fill
a139d329
AM
3951pattern is the four least significant bytes of the value of the
3952expression. In all cases, the number is big-endian.
252b5132
RH
3953
3954You can also change the fill value with a @code{FILL} command in the
9673c93c 3955output section commands; (@pxref{Output Section Data}).
252b5132
RH
3956
3957Here is a simple example:
3958@smallexample
3959@group
563e308f 3960SECTIONS @{ .text : @{ *(.text) @} =0x90909090 @}
252b5132
RH
3961@end group
3962@end smallexample
3963
3964@node Overlay Description
36f63dca 3965@subsection Overlay Description
252b5132
RH
3966@kindex OVERLAY
3967@cindex overlays
3968An overlay description provides an easy way to describe sections which
3969are to be loaded as part of a single memory image but are to be run at
3970the same memory address. At run time, some sort of overlay manager will
3971copy the overlaid sections in and out of the runtime memory address as
3972required, perhaps by simply manipulating addressing bits. This approach
3973can be useful, for example, when a certain region of memory is faster
3974than another.
3975
3976Overlays are described using the @code{OVERLAY} command. The
3977@code{OVERLAY} command is used within a @code{SECTIONS} command, like an
3978output section description. The full syntax of the @code{OVERLAY}
3979command is as follows:
3980@smallexample
3981@group
3982OVERLAY [@var{start}] : [NOCROSSREFS] [AT ( @var{ldaddr} )]
3983 @{
3984 @var{secname1}
3985 @{
3986 @var{output-section-command}
3987 @var{output-section-command}
3988 @dots{}
3989 @} [:@var{phdr}@dots{}] [=@var{fill}]
3990 @var{secname2}
3991 @{
3992 @var{output-section-command}
3993 @var{output-section-command}
3994 @dots{}
3995 @} [:@var{phdr}@dots{}] [=@var{fill}]
3996 @dots{}
3997 @} [>@var{region}] [:@var{phdr}@dots{}] [=@var{fill}]
3998@end group
3999@end smallexample
4000
4001Everything is optional except @code{OVERLAY} (a keyword), and each
4002section must have a name (@var{secname1} and @var{secname2} above). The
4003section definitions within the @code{OVERLAY} construct are identical to
4004those within the general @code{SECTIONS} contruct (@pxref{SECTIONS}),
4005except that no addresses and no memory regions may be defined for
4006sections within an @code{OVERLAY}.
4007
4008The sections are all defined with the same starting address. The load
4009addresses of the sections are arranged such that they are consecutive in
4010memory starting at the load address used for the @code{OVERLAY} as a
4011whole (as with normal section definitions, the load address is optional,
4012and defaults to the start address; the start address is also optional,
4013and defaults to the current value of the location counter).
4014
4015If the @code{NOCROSSREFS} keyword is used, and there any references
4016among the sections, the linker will report an error. Since the sections
4017all run at the same address, it normally does not make sense for one
4018section to refer directly to another. @xref{Miscellaneous Commands,
4019NOCROSSREFS}.
4020
4021For each section within the @code{OVERLAY}, the linker automatically
4022defines two symbols. The symbol @code{__load_start_@var{secname}} is
4023defined as the starting load address of the section. The symbol
4024@code{__load_stop_@var{secname}} is defined as the final load address of
4025the section. Any characters within @var{secname} which are not legal
4026within C identifiers are removed. C (or assembler) code may use these
4027symbols to move the overlaid sections around as necessary.
4028
4029At the end of the overlay, the value of the location counter is set to
4030the start address of the overlay plus the size of the largest section.
4031
4032Here is an example. Remember that this would appear inside a
4033@code{SECTIONS} construct.
4034@smallexample
4035@group
4036 OVERLAY 0x1000 : AT (0x4000)
4037 @{
4038 .text0 @{ o1/*.o(.text) @}
4039 .text1 @{ o2/*.o(.text) @}
4040 @}
4041@end group
4042@end smallexample
4043@noindent
4044This will define both @samp{.text0} and @samp{.text1} to start at
4045address 0x1000. @samp{.text0} will be loaded at address 0x4000, and
4046@samp{.text1} will be loaded immediately after @samp{.text0}. The
4047following symbols will be defined: @code{__load_start_text0},
4048@code{__load_stop_text0}, @code{__load_start_text1},
4049@code{__load_stop_text1}.
4050
4051C code to copy overlay @code{.text1} into the overlay area might look
4052like the following.
4053
4054@smallexample
4055@group
4056 extern char __load_start_text1, __load_stop_text1;
4057 memcpy ((char *) 0x1000, &__load_start_text1,
4058 &__load_stop_text1 - &__load_start_text1);
4059@end group
4060@end smallexample
4061
4062Note that the @code{OVERLAY} command is just syntactic sugar, since
4063everything it does can be done using the more basic commands. The above
4064example could have been written identically as follows.
4065
4066@smallexample
4067@group
4068 .text0 0x1000 : AT (0x4000) @{ o1/*.o(.text) @}
4069 __load_start_text0 = LOADADDR (.text0);
4070 __load_stop_text0 = LOADADDR (.text0) + SIZEOF (.text0);
4071 .text1 0x1000 : AT (0x4000 + SIZEOF (.text0)) @{ o2/*.o(.text) @}
4072 __load_start_text1 = LOADADDR (.text1);
4073 __load_stop_text1 = LOADADDR (.text1) + SIZEOF (.text1);
4074 . = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1));
4075@end group
4076@end smallexample
4077
4078@node MEMORY
36f63dca 4079@section MEMORY Command
252b5132
RH
4080@kindex MEMORY
4081@cindex memory regions
4082@cindex regions of memory
4083@cindex allocating memory
4084@cindex discontinuous memory
4085The linker's default configuration permits allocation of all available
4086memory. You can override this by using the @code{MEMORY} command.
4087
4088The @code{MEMORY} command describes the location and size of blocks of
4089memory in the target. You can use it to describe which memory regions
4090may be used by the linker, and which memory regions it must avoid. You
4091can then assign sections to particular memory regions. The linker will
4092set section addresses based on the memory regions, and will warn about
4093regions that become too full. The linker will not shuffle sections
4094around to fit into the available regions.
4095
4096A linker script may contain at most one use of the @code{MEMORY}
4097command. However, you can define as many blocks of memory within it as
4098you wish. The syntax is:
4099@smallexample
4100@group
a1ab1d2a 4101MEMORY
252b5132
RH
4102 @{
4103 @var{name} [(@var{attr})] : ORIGIN = @var{origin}, LENGTH = @var{len}
4104 @dots{}
4105 @}
4106@end group
4107@end smallexample
4108
4109The @var{name} is a name used in the linker script to refer to the
4110region. The region name has no meaning outside of the linker script.
4111Region names are stored in a separate name space, and will not conflict
4112with symbol names, file names, or section names. Each memory region
4113must have a distinct name.
4114
4115@cindex memory region attributes
4116The @var{attr} string is an optional list of attributes that specify
4117whether to use a particular memory region for an input section which is
4118not explicitly mapped in the linker script. As described in
4119@ref{SECTIONS}, if you do not specify an output section for some input
4120section, the linker will create an output section with the same name as
4121the input section. If you define region attributes, the linker will use
4122them to select the memory region for the output section that it creates.
4123
4124The @var{attr} string must consist only of the following characters:
4125@table @samp
4126@item R
4127Read-only section
4128@item W
4129Read/write section
4130@item X
4131Executable section
4132@item A
4133Allocatable section
4134@item I
4135Initialized section
4136@item L
4137Same as @samp{I}
4138@item !
4139Invert the sense of any of the preceding attributes
4140@end table
4141
4142If a unmapped section matches any of the listed attributes other than
4143@samp{!}, it will be placed in the memory region. The @samp{!}
4144attribute reverses this test, so that an unmapped section will be placed
4145in the memory region only if it does not match any of the listed
4146attributes.
4147
4148@kindex ORIGIN =
4149@kindex o =
4150@kindex org =
9cd6d51a
NC
4151The @var{origin} is an numerical expression for the start address of
4152the memory region. The expression must evaluate to a constant and it
4153cannot involve any symbols. The keyword @code{ORIGIN} may be
4154abbreviated to @code{org} or @code{o} (but not, for example,
4155@code{ORG}).
252b5132
RH
4156
4157@kindex LENGTH =
4158@kindex len =
4159@kindex l =
4160The @var{len} is an expression for the size in bytes of the memory
4161region. As with the @var{origin} expression, the expression must
9cd6d51a
NC
4162be numerical only and must evaluate to a constant. The keyword
4163@code{LENGTH} may be abbreviated to @code{len} or @code{l}.
252b5132
RH
4164
4165In the following example, we specify that there are two memory regions
4166available for allocation: one starting at @samp{0} for 256 kilobytes,
4167and the other starting at @samp{0x40000000} for four megabytes. The
4168linker will place into the @samp{rom} memory region every section which
4169is not explicitly mapped into a memory region, and is either read-only
4170or executable. The linker will place other sections which are not
4171explicitly mapped into a memory region into the @samp{ram} memory
4172region.
4173
4174@smallexample
4175@group
a1ab1d2a 4176MEMORY
252b5132
RH
4177 @{
4178 rom (rx) : ORIGIN = 0, LENGTH = 256K
4179 ram (!rx) : org = 0x40000000, l = 4M
4180 @}
4181@end group
4182@end smallexample
4183
4184Once you define a memory region, you can direct the linker to place
4185specific output sections into that memory region by using the
4186@samp{>@var{region}} output section attribute. For example, if you have
4187a memory region named @samp{mem}, you would use @samp{>mem} in the
4188output section definition. @xref{Output Section Region}. If no address
4189was specified for the output section, the linker will set the address to
4190the next available address within the memory region. If the combined
4191output sections directed to a memory region are too large for the
4192region, the linker will issue an error message.
4193
3ec57632
NC
4194It is possible to access the origin and length of a memory in an
4195expression via the @code{ORIGIN(@var{memory})} and
4196@code{LENGTH(@var{memory})} functions:
4197
4198@smallexample
4199@group
4200 _fstack = ORIGIN(ram) + LENGTH(ram) - 4;
4201@end group
4202@end smallexample
4203
252b5132
RH
4204@node PHDRS
4205@section PHDRS Command
4206@kindex PHDRS
4207@cindex program headers
4208@cindex ELF program headers
4209@cindex program segments
4210@cindex segments, ELF
4211The ELF object file format uses @dfn{program headers}, also knows as
4212@dfn{segments}. The program headers describe how the program should be
4213loaded into memory. You can print them out by using the @code{objdump}
4214program with the @samp{-p} option.
4215
4216When you run an ELF program on a native ELF system, the system loader
4217reads the program headers in order to figure out how to load the
4218program. This will only work if the program headers are set correctly.
4219This manual does not describe the details of how the system loader
4220interprets program headers; for more information, see the ELF ABI.
4221
4222The linker will create reasonable program headers by default. However,
4223in some cases, you may need to specify the program headers more
4224precisely. You may use the @code{PHDRS} command for this purpose. When
4225the linker sees the @code{PHDRS} command in the linker script, it will
4226not create any program headers other than the ones specified.
4227
4228The linker only pays attention to the @code{PHDRS} command when
4229generating an ELF output file. In other cases, the linker will simply
4230ignore @code{PHDRS}.
4231
4232This is the syntax of the @code{PHDRS} command. The words @code{PHDRS},
4233@code{FILEHDR}, @code{AT}, and @code{FLAGS} are keywords.
4234
4235@smallexample
4236@group
4237PHDRS
4238@{
4239 @var{name} @var{type} [ FILEHDR ] [ PHDRS ] [ AT ( @var{address} ) ]
4240 [ FLAGS ( @var{flags} ) ] ;
4241@}
4242@end group
4243@end smallexample
4244
4245The @var{name} is used only for reference in the @code{SECTIONS} command
4246of the linker script. It is not put into the output file. Program
4247header names are stored in a separate name space, and will not conflict
4248with symbol names, file names, or section names. Each program header
4249must have a distinct name.
4250
4251Certain program header types describe segments of memory which the
4252system loader will load from the file. In the linker script, you
4253specify the contents of these segments by placing allocatable output
4254sections in the segments. You use the @samp{:@var{phdr}} output section
4255attribute to place a section in a particular segment. @xref{Output
4256Section Phdr}.
4257
4258It is normal to put certain sections in more than one segment. This
4259merely implies that one segment of memory contains another. You may
4260repeat @samp{:@var{phdr}}, using it once for each segment which should
4261contain the section.
4262
4263If you place a section in one or more segments using @samp{:@var{phdr}},
4264then the linker will place all subsequent allocatable sections which do
4265not specify @samp{:@var{phdr}} in the same segments. This is for
4266convenience, since generally a whole set of contiguous sections will be
4267placed in a single segment. You can use @code{:NONE} to override the
4268default segment and tell the linker to not put the section in any
4269segment at all.
4270
4271@kindex FILEHDR
4272@kindex PHDRS
4273You may use the @code{FILEHDR} and @code{PHDRS} keywords appear after
4274the program header type to further describe the contents of the segment.
4275The @code{FILEHDR} keyword means that the segment should include the ELF
4276file header. The @code{PHDRS} keyword means that the segment should
4277include the ELF program headers themselves.
4278
4279The @var{type} may be one of the following. The numbers indicate the
4280value of the keyword.
4281
4282@table @asis
4283@item @code{PT_NULL} (0)
4284Indicates an unused program header.
4285
4286@item @code{PT_LOAD} (1)
4287Indicates that this program header describes a segment to be loaded from
4288the file.
4289
4290@item @code{PT_DYNAMIC} (2)
4291Indicates a segment where dynamic linking information can be found.
4292
4293@item @code{PT_INTERP} (3)
4294Indicates a segment where the name of the program interpreter may be
4295found.
4296
4297@item @code{PT_NOTE} (4)
4298Indicates a segment holding note information.
4299
4300@item @code{PT_SHLIB} (5)
4301A reserved program header type, defined but not specified by the ELF
4302ABI.
4303
4304@item @code{PT_PHDR} (6)
4305Indicates a segment where the program headers may be found.
4306
4307@item @var{expression}
4308An expression giving the numeric type of the program header. This may
4309be used for types not defined above.
4310@end table
4311
4312You can specify that a segment should be loaded at a particular address
4313in memory by using an @code{AT} expression. This is identical to the
4314@code{AT} command used as an output section attribute (@pxref{Output
4315Section LMA}). The @code{AT} command for a program header overrides the
4316output section attribute.
4317
4318The linker will normally set the segment flags based on the sections
4319which comprise the segment. You may use the @code{FLAGS} keyword to
4320explicitly specify the segment flags. The value of @var{flags} must be
4321an integer. It is used to set the @code{p_flags} field of the program
4322header.
4323
4324Here is an example of @code{PHDRS}. This shows a typical set of program
4325headers used on a native ELF system.
4326
4327@example
4328@group
4329PHDRS
4330@{
4331 headers PT_PHDR PHDRS ;
4332 interp PT_INTERP ;
4333 text PT_LOAD FILEHDR PHDRS ;
4334 data PT_LOAD ;
4335 dynamic PT_DYNAMIC ;
4336@}
4337
4338SECTIONS
4339@{
4340 . = SIZEOF_HEADERS;
4341 .interp : @{ *(.interp) @} :text :interp
4342 .text : @{ *(.text) @} :text
4343 .rodata : @{ *(.rodata) @} /* defaults to :text */
4344 @dots{}
4345 . = . + 0x1000; /* move to a new page in memory */
4346 .data : @{ *(.data) @} :data
4347 .dynamic : @{ *(.dynamic) @} :data :dynamic
4348 @dots{}
4349@}
4350@end group
4351@end example
4352
4353@node VERSION
4354@section VERSION Command
4355@kindex VERSION @{script text@}
4356@cindex symbol versions
4357@cindex version script
4358@cindex versions of symbols
4359The linker supports symbol versions when using ELF. Symbol versions are
4360only useful when using shared libraries. The dynamic linker can use
4361symbol versions to select a specific version of a function when it runs
4362a program that may have been linked against an earlier version of the
4363shared library.
4364
4365You can include a version script directly in the main linker script, or
4366you can supply the version script as an implicit linker script. You can
4367also use the @samp{--version-script} linker option.
4368
4369The syntax of the @code{VERSION} command is simply
4370@smallexample
4371VERSION @{ version-script-commands @}
4372@end smallexample
4373
4374The format of the version script commands is identical to that used by
4375Sun's linker in Solaris 2.5. The version script defines a tree of
4376version nodes. You specify the node names and interdependencies in the
4377version script. You can specify which symbols are bound to which
4378version nodes, and you can reduce a specified set of symbols to local
4379scope so that they are not globally visible outside of the shared
4380library.
4381
4382The easiest way to demonstrate the version script language is with a few
4383examples.
4384
4385@smallexample
4386VERS_1.1 @{
4387 global:
4388 foo1;
4389 local:
a1ab1d2a
UD
4390 old*;
4391 original*;
4392 new*;
252b5132
RH
4393@};
4394
4395VERS_1.2 @{
4396 foo2;
4397@} VERS_1.1;
4398
4399VERS_2.0 @{
4400 bar1; bar2;
86043bbb
MM
4401 extern "C++" @{
4402 ns::*;
4403 "int f(int, double)";
4404 @}
252b5132
RH
4405@} VERS_1.2;
4406@end smallexample
4407
4408This example version script defines three version nodes. The first
4409version node defined is @samp{VERS_1.1}; it has no other dependencies.
4410The script binds the symbol @samp{foo1} to @samp{VERS_1.1}. It reduces
4411a number of symbols to local scope so that they are not visible outside
313e35ee
AM
4412of the shared library; this is done using wildcard patterns, so that any
4413symbol whose name begins with @samp{old}, @samp{original}, or @samp{new}
4414is matched. The wildcard patterns available are the same as those used
4415in the shell when matching filenames (also known as ``globbing'').
86043bbb
MM
4416However, if you specify the symbol name inside double quotes, then the
4417name is treated as literal, rather than as a glob pattern.
252b5132
RH
4418
4419Next, the version script defines node @samp{VERS_1.2}. This node
4420depends upon @samp{VERS_1.1}. The script binds the symbol @samp{foo2}
4421to the version node @samp{VERS_1.2}.
4422
4423Finally, the version script defines node @samp{VERS_2.0}. This node
4424depends upon @samp{VERS_1.2}. The scripts binds the symbols @samp{bar1}
4425and @samp{bar2} are bound to the version node @samp{VERS_2.0}.
4426
4427When the linker finds a symbol defined in a library which is not
4428specifically bound to a version node, it will effectively bind it to an
4429unspecified base version of the library. You can bind all otherwise
a981ed6f 4430unspecified symbols to a given version node by using @samp{global: *;}
252b5132
RH
4431somewhere in the version script.
4432
4433The names of the version nodes have no specific meaning other than what
4434they might suggest to the person reading them. The @samp{2.0} version
4435could just as well have appeared in between @samp{1.1} and @samp{1.2}.
4436However, this would be a confusing way to write a version script.
4437
0f6bf451 4438Node name can be omitted, provided it is the only version node
6b9b879a
JJ
4439in the version script. Such version script doesn't assign any versions to
4440symbols, only selects which symbols will be globally visible out and which
4441won't.
4442
4443@smallexample
7c9c73be 4444@{ global: foo; bar; local: *; @};
9d201f2f 4445@end smallexample
6b9b879a 4446
252b5132
RH
4447When you link an application against a shared library that has versioned
4448symbols, the application itself knows which version of each symbol it
4449requires, and it also knows which version nodes it needs from each
4450shared library it is linked against. Thus at runtime, the dynamic
4451loader can make a quick check to make sure that the libraries you have
4452linked against do in fact supply all of the version nodes that the
4453application will need to resolve all of the dynamic symbols. In this
4454way it is possible for the dynamic linker to know with certainty that
4455all external symbols that it needs will be resolvable without having to
4456search for each symbol reference.
4457
4458The symbol versioning is in effect a much more sophisticated way of
4459doing minor version checking that SunOS does. The fundamental problem
4460that is being addressed here is that typically references to external
4461functions are bound on an as-needed basis, and are not all bound when
4462the application starts up. If a shared library is out of date, a
4463required interface may be missing; when the application tries to use
4464that interface, it may suddenly and unexpectedly fail. With symbol
4465versioning, the user will get a warning when they start their program if
4466the libraries being used with the application are too old.
4467
4468There are several GNU extensions to Sun's versioning approach. The
4469first of these is the ability to bind a symbol to a version node in the
4470source file where the symbol is defined instead of in the versioning
4471script. This was done mainly to reduce the burden on the library
4472maintainer. You can do this by putting something like:
4473@smallexample
4474__asm__(".symver original_foo,foo@@VERS_1.1");
4475@end smallexample
4476@noindent
4477in the C source file. This renames the function @samp{original_foo} to
4478be an alias for @samp{foo} bound to the version node @samp{VERS_1.1}.
4479The @samp{local:} directive can be used to prevent the symbol
96a94295
L
4480@samp{original_foo} from being exported. A @samp{.symver} directive
4481takes precedence over a version script.
252b5132
RH
4482
4483The second GNU extension is to allow multiple versions of the same
4484function to appear in a given shared library. In this way you can make
4485an incompatible change to an interface without increasing the major
4486version number of the shared library, while still allowing applications
4487linked against the old interface to continue to function.
4488
4489To do this, you must use multiple @samp{.symver} directives in the
4490source file. Here is an example:
4491
4492@smallexample
4493__asm__(".symver original_foo,foo@@");
4494__asm__(".symver old_foo,foo@@VERS_1.1");
4495__asm__(".symver old_foo1,foo@@VERS_1.2");
4496__asm__(".symver new_foo,foo@@@@VERS_2.0");
4497@end smallexample
4498
4499In this example, @samp{foo@@} represents the symbol @samp{foo} bound to the
4500unspecified base version of the symbol. The source file that contains this
4501example would define 4 C functions: @samp{original_foo}, @samp{old_foo},
4502@samp{old_foo1}, and @samp{new_foo}.
4503
4504When you have multiple definitions of a given symbol, there needs to be
4505some way to specify a default version to which external references to
4506this symbol will be bound. You can do this with the
4507@samp{foo@@@@VERS_2.0} type of @samp{.symver} directive. You can only
4508declare one version of a symbol as the default in this manner; otherwise
4509you would effectively have multiple definitions of the same symbol.
4510
4511If you wish to bind a reference to a specific version of the symbol
4512within the shared library, you can use the aliases of convenience
36f63dca 4513(i.e., @samp{old_foo}), or you can use the @samp{.symver} directive to
252b5132
RH
4514specifically bind to an external version of the function in question.
4515
cb840a31
L
4516You can also specify the language in the version script:
4517
4518@smallexample
4519VERSION extern "lang" @{ version-script-commands @}
4520@end smallexample
4521
4522The supported @samp{lang}s are @samp{C}, @samp{C++}, and @samp{Java}.
4523The linker will iterate over the list of symbols at the link time and
4524demangle them according to @samp{lang} before matching them to the
4525patterns specified in @samp{version-script-commands}.
4526
86043bbb
MM
4527Demangled names may contains spaces and other special characters. As
4528described above, you can use a glob pattern to match demangled names,
4529or you can use a double-quoted string to match the string exactly. In
4530the latter case, be aware that minor differences (such as differing
4531whitespace) between the version script and the demangler output will
4532cause a mismatch. As the exact string generated by the demangler
4533might change in the future, even if the mangled name does not, you
4534should check that all of your version directives are behaving as you
4535expect when you upgrade.
4536
252b5132
RH
4537@node Expressions
4538@section Expressions in Linker Scripts
4539@cindex expressions
4540@cindex arithmetic
4541The syntax for expressions in the linker script language is identical to
4542that of C expressions. All expressions are evaluated as integers. All
4543expressions are evaluated in the same size, which is 32 bits if both the
4544host and target are 32 bits, and is otherwise 64 bits.
4545
4546You can use and set symbol values in expressions.
4547
4548The linker defines several special purpose builtin functions for use in
4549expressions.
4550
4551@menu
4552* Constants:: Constants
4553* Symbols:: Symbol Names
ecca9871 4554* Orphan Sections:: Orphan Sections
252b5132
RH
4555* Location Counter:: The Location Counter
4556* Operators:: Operators
4557* Evaluation:: Evaluation
4558* Expression Section:: The Section of an Expression
4559* Builtin Functions:: Builtin Functions
4560@end menu
4561
4562@node Constants
4563@subsection Constants
4564@cindex integer notation
4565@cindex constants in linker scripts
4566All constants are integers.
4567
4568As in C, the linker considers an integer beginning with @samp{0} to be
4569octal, and an integer beginning with @samp{0x} or @samp{0X} to be
4570hexadecimal. The linker considers other integers to be decimal.
4571
4572@cindex scaled integers
4573@cindex K and M integer suffixes
4574@cindex M and K integer suffixes
4575@cindex suffixes for integers
4576@cindex integer suffixes
4577In addition, you can use the suffixes @code{K} and @code{M} to scale a
4578constant by
4579@c TEXI2ROFF-KILL
36f63dca 4580@ifnottex
252b5132
RH
4581@c END TEXI2ROFF-KILL
4582@code{1024} or @code{1024*1024}
4583@c TEXI2ROFF-KILL
36f63dca 4584@end ifnottex
252b5132
RH
4585@tex
4586${\rm 1024}$ or ${\rm 1024}^2$
4587@end tex
4588@c END TEXI2ROFF-KILL
4589respectively. For example, the following all refer to the same quantity:
4590@smallexample
36f63dca
NC
4591_fourk_1 = 4K;
4592_fourk_2 = 4096;
4593_fourk_3 = 0x1000;
252b5132
RH
4594@end smallexample
4595
4596@node Symbols
4597@subsection Symbol Names
4598@cindex symbol names
4599@cindex names
4600@cindex quoted symbol names
4601@kindex "
4602Unless quoted, symbol names start with a letter, underscore, or period
4603and may include letters, digits, underscores, periods, and hyphens.
4604Unquoted symbol names must not conflict with any keywords. You can
4605specify a symbol which contains odd characters or has the same name as a
4606keyword by surrounding the symbol name in double quotes:
4607@smallexample
36f63dca
NC
4608"SECTION" = 9;
4609"with a space" = "also with a space" + 10;
252b5132
RH
4610@end smallexample
4611
4612Since symbols can contain many non-alphabetic characters, it is safest
4613to delimit symbols with spaces. For example, @samp{A-B} is one symbol,
4614whereas @samp{A - B} is an expression involving subtraction.
4615
ecca9871
L
4616@node Orphan Sections
4617@subsection Orphan Sections
4618@cindex orphan
4619Orphan sections are sections present in the input files which
4620are not explicitly placed into the output file by the linker
4621script. The linker will still copy these sections into the
4622output file, but it has to guess as to where they should be
4623placed. The linker uses a simple heuristic to do this. It
4624attempts to place orphan sections after non-orphan sections of the
4625same attribute, such as code vs data, loadable vs non-loadable, etc.
4626If there is not enough room to do this then it places
4627at the end of the file.
4628
4629For ELF targets, the attribute of the section includes section type as
4630well as section flag.
4631
252b5132
RH
4632@node Location Counter
4633@subsection The Location Counter
4634@kindex .
4635@cindex dot
4636@cindex location counter
4637@cindex current output location
4638The special linker variable @dfn{dot} @samp{.} always contains the
4639current output location counter. Since the @code{.} always refers to a
4640location in an output section, it may only appear in an expression
4641within a @code{SECTIONS} command. The @code{.} symbol may appear
4642anywhere that an ordinary symbol is allowed in an expression.
4643
4644@cindex holes
4645Assigning a value to @code{.} will cause the location counter to be
4646moved. This may be used to create holes in the output section. The
dc0b6aa0
AM
4647location counter may not be moved backwards inside an output section,
4648and may not be moved backwards outside of an output section if so
4649doing creates areas with overlapping LMAs.
252b5132
RH
4650
4651@smallexample
4652SECTIONS
4653@{
4654 output :
4655 @{
4656 file1(.text)
4657 . = . + 1000;
4658 file2(.text)
4659 . += 1000;
4660 file3(.text)
563e308f 4661 @} = 0x12345678;
252b5132
RH
4662@}
4663@end smallexample
4664@noindent
4665In the previous example, the @samp{.text} section from @file{file1} is
4666located at the beginning of the output section @samp{output}. It is
4667followed by a 1000 byte gap. Then the @samp{.text} section from
4668@file{file2} appears, also with a 1000 byte gap following before the
563e308f 4669@samp{.text} section from @file{file3}. The notation @samp{= 0x12345678}
252b5132
RH
4670specifies what data to write in the gaps (@pxref{Output Section Fill}).
4671
5c6bbab8
NC
4672@cindex dot inside sections
4673Note: @code{.} actually refers to the byte offset from the start of the
4674current containing object. Normally this is the @code{SECTIONS}
69da35b5 4675statement, whose start address is 0, hence @code{.} can be used as an
5c6bbab8
NC
4676absolute address. If @code{.} is used inside a section description
4677however, it refers to the byte offset from the start of that section,
4678not an absolute address. Thus in a script like this:
4679
4680@smallexample
4681SECTIONS
4682@{
4683 . = 0x100
4684 .text: @{
4685 *(.text)
4686 . = 0x200
4687 @}
4688 . = 0x500
4689 .data: @{
4690 *(.data)
4691 . += 0x600
4692 @}
4693@}
4694@end smallexample
4695
4696The @samp{.text} section will be assigned a starting address of 0x100
4697and a size of exactly 0x200 bytes, even if there is not enough data in
4698the @samp{.text} input sections to fill this area. (If there is too
4699much data, an error will be produced because this would be an attempt to
4700move @code{.} backwards). The @samp{.data} section will start at 0x500
4701and it will have an extra 0x600 bytes worth of space after the end of
4702the values from the @samp{.data} input sections and before the end of
4703the @samp{.data} output section itself.
4704
b5666f2f
AM
4705@cindex dot outside sections
4706Setting symbols to the value of the location counter outside of an
4707output section statement can result in unexpected values if the linker
4708needs to place orphan sections. For example, given the following:
4709
4710@smallexample
4711SECTIONS
4712@{
4713 start_of_text = . ;
4714 .text: @{ *(.text) @}
4715 end_of_text = . ;
4716
4717 start_of_data = . ;
4718 .data: @{ *(.data) @}
4719 end_of_data = . ;
4720@}
4721@end smallexample
4722
4723If the linker needs to place some input section, e.g. @code{.rodata},
4724not mentioned in the script, it might choose to place that section
4725between @code{.text} and @code{.data}. You might think the linker
4726should place @code{.rodata} on the blank line in the above script, but
4727blank lines are of no particular significance to the linker. As well,
4728the linker doesn't associate the above symbol names with their
4729sections. Instead, it assumes that all assignments or other
4730statements belong to the previous output section, except for the
4731special case of an assignment to @code{.}. I.e., the linker will
4732place the orphan @code{.rodata} section as if the script was written
4733as follows:
4734
4735@smallexample
4736SECTIONS
4737@{
4738 start_of_text = . ;
4739 .text: @{ *(.text) @}
4740 end_of_text = . ;
4741
4742 start_of_data = . ;
4743 .rodata: @{ *(.rodata) @}
4744 .data: @{ *(.data) @}
4745 end_of_data = . ;
4746@}
4747@end smallexample
4748
4749This may or may not be the script author's intention for the value of
4750@code{start_of_data}. One way to influence the orphan section
4751placement is to assign the location counter to itself, as the linker
4752assumes that an assignment to @code{.} is setting the start address of
4753a following output section and thus should be grouped with that
4754section. So you could write:
4755
4756@smallexample
4757SECTIONS
4758@{
4759 start_of_text = . ;
4760 .text: @{ *(.text) @}
4761 end_of_text = . ;
4762
4763 . = . ;
4764 start_of_data = . ;
4765 .data: @{ *(.data) @}
4766 end_of_data = . ;
4767@}
4768@end smallexample
4769
4770Now, the orphan @code{.rodata} section will be placed between
4771@code{end_of_text} and @code{start_of_data}.
4772
252b5132
RH
4773@need 2000
4774@node Operators
4775@subsection Operators
4776@cindex operators for arithmetic
4777@cindex arithmetic operators
4778@cindex precedence in expressions
4779The linker recognizes the standard C set of arithmetic operators, with
4780the standard bindings and precedence levels:
4781@c TEXI2ROFF-KILL
36f63dca 4782@ifnottex
252b5132
RH
4783@c END TEXI2ROFF-KILL
4784@smallexample
4785precedence associativity Operators Notes
4786(highest)
47871 left ! - ~ (1)
47882 left * / %
47893 left + -
47904 left >> <<
47915 left == != > < <= >=
47926 left &
47937 left |
47948 left &&
47959 left ||
479610 right ? :
479711 right &= += -= *= /= (2)
4798(lowest)
4799@end smallexample
4800Notes:
a1ab1d2a 4801(1) Prefix operators
252b5132
RH
4802(2) @xref{Assignments}.
4803@c TEXI2ROFF-KILL
36f63dca 4804@end ifnottex
252b5132
RH
4805@tex
4806\vskip \baselineskip
4807%"lispnarrowing" is the extra indent used generally for smallexample
4808\hskip\lispnarrowing\vbox{\offinterlineskip
4809\hrule
4810\halign
4811{\vrule#&\strut\hfil\ #\ \hfil&\vrule#&\strut\hfil\ #\ \hfil&\vrule#&\strut\hfil\ {\tt #}\ \hfil&\vrule#\cr
4812height2pt&\omit&&\omit&&\omit&\cr
4813&Precedence&& Associativity &&{\rm Operators}&\cr
4814height2pt&\omit&&\omit&&\omit&\cr
4815\noalign{\hrule}
4816height2pt&\omit&&\omit&&\omit&\cr
4817&highest&&&&&\cr
4818% '176 is tilde, '~' in tt font
a1ab1d2a 4819&1&&left&&\qquad- \char'176\ !\qquad\dag&\cr
252b5132
RH
4820&2&&left&&* / \%&\cr
4821&3&&left&&+ -&\cr
4822&4&&left&&>> <<&\cr
4823&5&&left&&== != > < <= >=&\cr
4824&6&&left&&\&&\cr
4825&7&&left&&|&\cr
4826&8&&left&&{\&\&}&\cr
4827&9&&left&&||&\cr
4828&10&&right&&? :&\cr
4829&11&&right&&\qquad\&= += -= *= /=\qquad\ddag&\cr
4830&lowest&&&&&\cr
4831height2pt&\omit&&\omit&&\omit&\cr}
4832\hrule}
4833@end tex
4834@iftex
4835{
4836@obeylines@parskip=0pt@parindent=0pt
4837@dag@quad Prefix operators.
4838@ddag@quad @xref{Assignments}.
4839}
4840@end iftex
4841@c END TEXI2ROFF-KILL
4842
4843@node Evaluation
4844@subsection Evaluation
4845@cindex lazy evaluation
4846@cindex expression evaluation order
4847The linker evaluates expressions lazily. It only computes the value of
4848an expression when absolutely necessary.
4849
4850The linker needs some information, such as the value of the start
4851address of the first section, and the origins and lengths of memory
4852regions, in order to do any linking at all. These values are computed
4853as soon as possible when the linker reads in the linker script.
4854
4855However, other values (such as symbol values) are not known or needed
4856until after storage allocation. Such values are evaluated later, when
4857other information (such as the sizes of output sections) is available
4858for use in the symbol assignment expression.
4859
4860The sizes of sections cannot be known until after allocation, so
4861assignments dependent upon these are not performed until after
4862allocation.
4863
4864Some expressions, such as those depending upon the location counter
4865@samp{.}, must be evaluated during section allocation.
4866
4867If the result of an expression is required, but the value is not
4868available, then an error results. For example, a script like the
4869following
4870@smallexample
4871@group
4872SECTIONS
4873 @{
a1ab1d2a 4874 .text 9+this_isnt_constant :
252b5132
RH
4875 @{ *(.text) @}
4876 @}
4877@end group
4878@end smallexample
4879@noindent
4880will cause the error message @samp{non constant expression for initial
4881address}.
4882
4883@node Expression Section
4884@subsection The Section of an Expression
4885@cindex expression sections
4886@cindex absolute expressions
4887@cindex relative expressions
4888@cindex absolute and relocatable symbols
4889@cindex relocatable and absolute symbols
4890@cindex symbols, relocatable and absolute
4891When the linker evaluates an expression, the result is either absolute
4892or relative to some section. A relative expression is expressed as a
4893fixed offset from the base of a section.
4894
4895The position of the expression within the linker script determines
4896whether it is absolute or relative. An expression which appears within
4897an output section definition is relative to the base of the output
4898section. An expression which appears elsewhere will be absolute.
4899
4900A symbol set to a relative expression will be relocatable if you request
4901relocatable output using the @samp{-r} option. That means that a
4902further link operation may change the value of the symbol. The symbol's
4903section will be the section of the relative expression.
4904
4905A symbol set to an absolute expression will retain the same value
4906through any further link operation. The symbol will be absolute, and
4907will not have any particular associated section.
4908
4909You can use the builtin function @code{ABSOLUTE} to force an expression
4910to be absolute when it would otherwise be relative. For example, to
4911create an absolute symbol set to the address of the end of the output
4912section @samp{.data}:
4913@smallexample
4914SECTIONS
4915 @{
4916 .data : @{ *(.data) _edata = ABSOLUTE(.); @}
4917 @}
4918@end smallexample
4919@noindent
4920If @samp{ABSOLUTE} were not used, @samp{_edata} would be relative to the
4921@samp{.data} section.
4922
4923@node Builtin Functions
4924@subsection Builtin Functions
4925@cindex functions in expressions
4926The linker script language includes a number of builtin functions for
4927use in linker script expressions.
4928
4929@table @code
4930@item ABSOLUTE(@var{exp})
4931@kindex ABSOLUTE(@var{exp})
4932@cindex expression, absolute
4933Return the absolute (non-relocatable, as opposed to non-negative) value
4934of the expression @var{exp}. Primarily useful to assign an absolute
4935value to a symbol within a section definition, where symbol values are
4936normally section relative. @xref{Expression Section}.
4937
4938@item ADDR(@var{section})
4939@kindex ADDR(@var{section})
4940@cindex section address in expression
4941Return the absolute address (the VMA) of the named @var{section}. Your
4942script must previously have defined the location of that section. In
4943the following example, @code{symbol_1} and @code{symbol_2} are assigned
4944identical values:
4945@smallexample
4946@group
4947SECTIONS @{ @dots{}
4948 .output1 :
a1ab1d2a 4949 @{
252b5132
RH
4950 start_of_output_1 = ABSOLUTE(.);
4951 @dots{}
4952 @}
4953 .output :
4954 @{
4955 symbol_1 = ADDR(.output1);
4956 symbol_2 = start_of_output_1;
4957 @}
4958@dots{} @}
4959@end group
4960@end smallexample
4961
876f4090
NS
4962@item ALIGN(@var{align})
4963@itemx ALIGN(@var{exp},@var{align})
4964@kindex ALIGN(@var{align})
4965@kindex ALIGN(@var{exp},@var{align})
252b5132
RH
4966@cindex round up location counter
4967@cindex align location counter
876f4090
NS
4968@cindex round up expression
4969@cindex align expression
4970Return the location counter (@code{.}) or arbitrary expression aligned
4971to the next @var{align} boundary. The single operand @code{ALIGN}
4972doesn't change the value of the location counter---it just does
4973arithmetic on it. The two operand @code{ALIGN} allows an arbitrary
4974expression to be aligned upwards (@code{ALIGN(@var{align})} is
4975equivalent to @code{ALIGN(., @var{align})}).
4976
4977Here is an example which aligns the output @code{.data} section to the
4978next @code{0x2000} byte boundary after the preceding section and sets a
4979variable within the section to the next @code{0x8000} boundary after the
4980input sections:
252b5132
RH
4981@smallexample
4982@group
4983SECTIONS @{ @dots{}
4984 .data ALIGN(0x2000): @{
4985 *(.data)
4986 variable = ALIGN(0x8000);
4987 @}
4988@dots{} @}
4989@end group
4990@end smallexample
4991@noindent
4992The first use of @code{ALIGN} in this example specifies the location of
4993a section because it is used as the optional @var{address} attribute of
4994a section definition (@pxref{Output Section Address}). The second use
4995of @code{ALIGN} is used to defines the value of a symbol.
4996
4997The builtin function @code{NEXT} is closely related to @code{ALIGN}.
4998
4999@item BLOCK(@var{exp})
5000@kindex BLOCK(@var{exp})
5001This is a synonym for @code{ALIGN}, for compatibility with older linker
5002scripts. It is most often seen when setting the address of an output
5003section.
5004
2d20f7bf
JJ
5005@item DATA_SEGMENT_ALIGN(@var{maxpagesize}, @var{commonpagesize})
5006@kindex DATA_SEGMENT_ALIGN(@var{maxpagesize}, @var{commonpagesize})
5007This is equivalent to either
5008@smallexample
5009(ALIGN(@var{maxpagesize}) + (. & (@var{maxpagesize} - 1)))
5010@end smallexample
5011or
5012@smallexample
5013(ALIGN(@var{maxpagesize}) + (. & (@var{maxpagesize} - @var{commonpagesize})))
5014@end smallexample
5015@noindent
5016depending on whether the latter uses fewer @var{commonpagesize} sized pages
5017for the data segment (area between the result of this expression and
5018@code{DATA_SEGMENT_END}) than the former or not.
5019If the latter form is used, it means @var{commonpagesize} bytes of runtime
5020memory will be saved at the expense of up to @var{commonpagesize} wasted
5021bytes in the on-disk file.
5022
5023This expression can only be used directly in @code{SECTIONS} commands, not in
5024any output section descriptions and only once in the linker script.
5025@var{commonpagesize} should be less or equal to @var{maxpagesize} and should
5026be the system page size the object wants to be optimized for (while still
5027working on system page sizes up to @var{maxpagesize}).
5028
5029@noindent
5030Example:
5031@smallexample
5032 . = DATA_SEGMENT_ALIGN(0x10000, 0x2000);
5033@end smallexample
5034
5035@item DATA_SEGMENT_END(@var{exp})
5036@kindex DATA_SEGMENT_END(@var{exp})
5037This defines the end of data segment for @code{DATA_SEGMENT_ALIGN}
5038evaluation purposes.
5039
5040@smallexample
5041 . = DATA_SEGMENT_END(.);
5042@end smallexample
5043
a4f5ad88
JJ
5044@item DATA_SEGMENT_RELRO_END(@var{offset}, @var{exp})
5045@kindex DATA_SEGMENT_RELRO_END(@var{offset}, @var{exp})
5046This defines the end of the @code{PT_GNU_RELRO} segment when
5047@samp{-z relro} option is used. Second argument is returned.
5048When @samp{-z relro} option is not present, @code{DATA_SEGMENT_RELRO_END}
5049does nothing, otherwise @code{DATA_SEGMENT_ALIGN} is padded so that
5050@var{exp} + @var{offset} is aligned to the most commonly used page
5051boundary for particular target. If present in the linker script,
5052it must always come in between @code{DATA_SEGMENT_ALIGN} and
5053@code{DATA_SEGMENT_END}.
5054
5055@smallexample
5056 . = DATA_SEGMENT_RELRO_END(24, .);
5057@end smallexample
5058
252b5132
RH
5059@item DEFINED(@var{symbol})
5060@kindex DEFINED(@var{symbol})
5061@cindex symbol defaults
5062Return 1 if @var{symbol} is in the linker global symbol table and is
420e579c
HPN
5063defined before the statement using DEFINED in the script, otherwise
5064return 0. You can use this function to provide
252b5132
RH
5065default values for symbols. For example, the following script fragment
5066shows how to set a global symbol @samp{begin} to the first location in
5067the @samp{.text} section---but if a symbol called @samp{begin} already
5068existed, its value is preserved:
5069
5070@smallexample
5071@group
5072SECTIONS @{ @dots{}
5073 .text : @{
5074 begin = DEFINED(begin) ? begin : . ;
5075 @dots{}
5076 @}
5077 @dots{}
5078@}
5079@end group
5080@end smallexample
5081
3ec57632
NC
5082@item LENGTH(@var{memory})
5083@kindex LENGTH(@var{memory})
5084Return the length of the memory region named @var{memory}.
5085
252b5132
RH
5086@item LOADADDR(@var{section})
5087@kindex LOADADDR(@var{section})
5088@cindex section load address in expression
5089Return the absolute LMA of the named @var{section}. This is normally
5090the same as @code{ADDR}, but it may be different if the @code{AT}
5091attribute is used in the output section definition (@pxref{Output
5092Section LMA}).
5093
5094@kindex MAX
5095@item MAX(@var{exp1}, @var{exp2})
5096Returns the maximum of @var{exp1} and @var{exp2}.
5097
5098@kindex MIN
5099@item MIN(@var{exp1}, @var{exp2})
5100Returns the minimum of @var{exp1} and @var{exp2}.
5101
5102@item NEXT(@var{exp})
5103@kindex NEXT(@var{exp})
5104@cindex unallocated address, next
5105Return the next unallocated address that is a multiple of @var{exp}.
5106This function is closely related to @code{ALIGN(@var{exp})}; unless you
5107use the @code{MEMORY} command to define discontinuous memory for the
5108output file, the two functions are equivalent.
5109
3ec57632
NC
5110@item ORIGIN(@var{memory})
5111@kindex ORIGIN(@var{memory})
5112Return the origin of the memory region named @var{memory}.
5113
ba916c8a
MM
5114@item SEGMENT_START(@var{segment}, @var{default})
5115@kindex SEGMENT_START(@var{segment}, @var{default})
5116Return the base address of the named @var{segment}. If an explicit
5117value has been given for this segment (with a command-line @samp{-T}
5118option) that value will be returned; otherwise the value will be
5119@var{default}. At present, the @samp{-T} command-line option can only
5120be used to set the base address for the ``text'', ``data'', and
5121``bss'' sections, but you use @code{SEGMENT_START} with any segment
5122name.
5123
252b5132
RH
5124@item SIZEOF(@var{section})
5125@kindex SIZEOF(@var{section})
5126@cindex section size
5127Return the size in bytes of the named @var{section}, if that section has
5128been allocated. If the section has not been allocated when this is
5129evaluated, the linker will report an error. In the following example,
5130@code{symbol_1} and @code{symbol_2} are assigned identical values:
5131@smallexample
5132@group
5133SECTIONS@{ @dots{}
5134 .output @{
5135 .start = . ;
5136 @dots{}
5137 .end = . ;
5138 @}
5139 symbol_1 = .end - .start ;
5140 symbol_2 = SIZEOF(.output);
5141@dots{} @}
5142@end group
5143@end smallexample
5144
5145@item SIZEOF_HEADERS
5146@itemx sizeof_headers
5147@kindex SIZEOF_HEADERS
5148@cindex header size
5149Return the size in bytes of the output file's headers. This is
5150information which appears at the start of the output file. You can use
5151this number when setting the start address of the first section, if you
5152choose, to facilitate paging.
5153
5154@cindex not enough room for program headers
5155@cindex program headers, not enough room
5156When producing an ELF output file, if the linker script uses the
5157@code{SIZEOF_HEADERS} builtin function, the linker must compute the
5158number of program headers before it has determined all the section
5159addresses and sizes. If the linker later discovers that it needs
5160additional program headers, it will report an error @samp{not enough
5161room for program headers}. To avoid this error, you must avoid using
5162the @code{SIZEOF_HEADERS} function, or you must rework your linker
5163script to avoid forcing the linker to use additional program headers, or
5164you must define the program headers yourself using the @code{PHDRS}
5165command (@pxref{PHDRS}).
5166@end table
5167
5168@node Implicit Linker Scripts
5169@section Implicit Linker Scripts
5170@cindex implicit linker scripts
5171If you specify a linker input file which the linker can not recognize as
5172an object file or an archive file, it will try to read the file as a
5173linker script. If the file can not be parsed as a linker script, the
5174linker will report an error.
5175
5176An implicit linker script will not replace the default linker script.
5177
5178Typically an implicit linker script would contain only symbol
5179assignments, or the @code{INPUT}, @code{GROUP}, or @code{VERSION}
5180commands.
5181
5182Any input files read because of an implicit linker script will be read
5183at the position in the command line where the implicit linker script was
5184read. This can affect archive searching.
5185
5186@ifset GENERIC
5187@node Machine Dependent
5188@chapter Machine Dependent Features
5189
5190@cindex machine dependencies
ff5dcc92
SC
5191@command{ld} has additional features on some platforms; the following
5192sections describe them. Machines where @command{ld} has no additional
252b5132
RH
5193functionality are not listed.
5194
5195@menu
36f63dca
NC
5196@ifset H8300
5197* H8/300:: @command{ld} and the H8/300
5198@end ifset
5199@ifset I960
5200* i960:: @command{ld} and the Intel 960 family
5201@end ifset
5202@ifset ARM
5203* ARM:: @command{ld} and the ARM family
5204@end ifset
5205@ifset HPPA
5206* HPPA ELF32:: @command{ld} and HPPA 32-bit ELF
5207@end ifset
3c3bdf30 5208@ifset MMIX
36f63dca 5209* MMIX:: @command{ld} and MMIX
3c3bdf30 5210@end ifset
2469cfa2 5211@ifset MSP430
36f63dca 5212* MSP430:: @command{ld} and MSP430
2469cfa2 5213@end ifset
93fd0973
SC
5214@ifset M68HC11
5215* M68HC11/68HC12:: @code{ld} and the Motorola 68HC11 and 68HC12 families
5216@end ifset
2a60a7a8
AM
5217@ifset POWERPC
5218* PowerPC ELF32:: @command{ld} and PowerPC 32-bit ELF Support
5219@end ifset
5220@ifset POWERPC64
5221* PowerPC64 ELF64:: @command{ld} and PowerPC64 64-bit ELF Support
5222@end ifset
74459f0e 5223@ifset TICOFF
ff5dcc92 5224* TI COFF:: @command{ld} and TI COFF
74459f0e 5225@end ifset
2ca22b03
NC
5226@ifset WIN32
5227* WIN32:: @command{ld} and WIN32 (cygwin/mingw)
5228@end ifset
e0001a05
NC
5229@ifset XTENSA
5230* Xtensa:: @command{ld} and Xtensa Processors
5231@end ifset
252b5132
RH
5232@end menu
5233@end ifset
5234
252b5132
RH
5235@ifset H8300
5236@ifclear GENERIC
5237@raisesections
5238@end ifclear
5239
5240@node H8/300
ff5dcc92 5241@section @command{ld} and the H8/300
252b5132
RH
5242
5243@cindex H8/300 support
ff5dcc92 5244For the H8/300, @command{ld} can perform these global optimizations when
252b5132
RH
5245you specify the @samp{--relax} command-line option.
5246
5247@table @emph
5248@cindex relaxing on H8/300
5249@item relaxing address modes
ff5dcc92 5250@command{ld} finds all @code{jsr} and @code{jmp} instructions whose
252b5132
RH
5251targets are within eight bits, and turns them into eight-bit
5252program-counter relative @code{bsr} and @code{bra} instructions,
5253respectively.
5254
5255@cindex synthesizing on H8/300
5256@item synthesizing instructions
5257@c FIXME: specifically mov.b, or any mov instructions really?
ff5dcc92 5258@command{ld} finds all @code{mov.b} instructions which use the
252b5132
RH
5259sixteen-bit absolute address form, but refer to the top
5260page of memory, and changes them to use the eight-bit address form.
5261(That is: the linker turns @samp{mov.b @code{@@}@var{aa}:16} into
5262@samp{mov.b @code{@@}@var{aa}:8} whenever the address @var{aa} is in the
5263top page of memory).
1502569c
NC
5264
5265@item bit manipulation instructions
5266@command{ld} finds all bit manipulation instructions like @code{band, bclr,
5267biand, bild, bior, bist, bixor, bld, bnot, bor, bset, bst, btst, bxor}
5268which use 32 bit and 16 bit absolute address form, but refer to the top
5269page of memory, and changes them to use the 8 bit address form.
5270(That is: the linker turns @samp{bset #xx:3,@code{@@}@var{aa}:32} into
5271@samp{bset #xx:3,@code{@@}@var{aa}:8} whenever the address @var{aa} is in
5272the top page of memory).
5273
5274@item system control instructions
b45619c0 5275@command{ld} finds all @code{ldc.w, stc.w} instructions which use the
1502569c
NC
527632 bit absolute address form, but refer to the top page of memory, and
5277changes them to use 16 bit address form.
5278(That is: the linker turns @samp{ldc.w @code{@@}@var{aa}:32,ccr} into
5279@samp{ldc.w @code{@@}@var{aa}:16,ccr} whenever the address @var{aa} is in
5280the top page of memory).
252b5132
RH
5281@end table
5282
5283@ifclear GENERIC
5284@lowersections
5285@end ifclear
5286@end ifset
5287
36f63dca 5288@ifclear GENERIC
c2dcd04e 5289@ifset Renesas
36f63dca 5290@c This stuff is pointless to say unless you're especially concerned
c2dcd04e
NC
5291@c with Renesas chips; don't enable it for generic case, please.
5292@node Renesas
5293@chapter @command{ld} and Other Renesas Chips
36f63dca 5294
c2dcd04e
NC
5295@command{ld} also supports the Renesas (formerly Hitachi) H8/300H,
5296H8/500, and SH chips. No special features, commands, or command-line
5297options are required for these chips.
36f63dca
NC
5298@end ifset
5299@end ifclear
5300
5301@ifset I960
5302@ifclear GENERIC
5303@raisesections
5304@end ifclear
5305
5306@node i960
5307@section @command{ld} and the Intel 960 Family
5308
5309@cindex i960 support
5310
5311You can use the @samp{-A@var{architecture}} command line option to
5312specify one of the two-letter names identifying members of the 960
5313family; the option specifies the desired output target, and warns of any
5314incompatible instructions in the input files. It also modifies the
5315linker's search strategy for archive libraries, to support the use of
5316libraries specific to each particular architecture, by including in the
5317search loop names suffixed with the string identifying the architecture.
5318
5319For example, if your @command{ld} command line included @w{@samp{-ACA}} as
5320well as @w{@samp{-ltry}}, the linker would look (in its built-in search
5321paths, and in any paths you specify with @samp{-L}) for a library with
5322the names
5323
5324@smallexample
5325@group
5326try
5327libtry.a
5328tryca
5329libtryca.a
5330@end group
5331@end smallexample
5332
5333@noindent
5334The first two possibilities would be considered in any event; the last
5335two are due to the use of @w{@samp{-ACA}}.
5336
5337You can meaningfully use @samp{-A} more than once on a command line, since
5338the 960 architecture family allows combination of target architectures; each
5339use will add another pair of name variants to search for when @w{@samp{-l}}
5340specifies a library.
5341
5342@cindex @option{--relax} on i960
5343@cindex relaxing on i960
5344@command{ld} supports the @samp{--relax} option for the i960 family. If
5345you specify @samp{--relax}, @command{ld} finds all @code{balx} and
5346@code{calx} instructions whose targets are within 24 bits, and turns
5347them into 24-bit program-counter relative @code{bal} and @code{cal}
5348instructions, respectively. @command{ld} also turns @code{cal}
5349instructions into @code{bal} instructions when it determines that the
5350target subroutine is a leaf routine (that is, the target subroutine does
5351not itself call any subroutines).
5352
5353@ifclear GENERIC
5354@lowersections
5355@end ifclear
5356@end ifset
5357
5358@ifset ARM
5359@ifclear GENERIC
5360@raisesections
5361@end ifclear
5362
93fd0973
SC
5363@ifset M68HC11
5364@ifclear GENERIC
5365@raisesections
5366@end ifclear
5367
5368@node M68HC11/68HC12
5369@section @command{ld} and the Motorola 68HC11 and 68HC12 families
5370
5371@cindex M68HC11 and 68HC12 support
5372
5373@subsection Linker Relaxation
5374
5375For the Motorola 68HC11, @command{ld} can perform these global
5376optimizations when you specify the @samp{--relax} command-line option.
5377
5378@table @emph
5379@cindex relaxing on M68HC11
5380@item relaxing address modes
5381@command{ld} finds all @code{jsr} and @code{jmp} instructions whose
5382targets are within eight bits, and turns them into eight-bit
5383program-counter relative @code{bsr} and @code{bra} instructions,
5384respectively.
5385
5386@command{ld} also looks at all 16-bit extended addressing modes and
5387transforms them in a direct addressing mode when the address is in
5388page 0 (between 0 and 0x0ff).
5389
5390@item relaxing gcc instruction group
5391When @command{gcc} is called with @option{-mrelax}, it can emit group
5392of instructions that the linker can optimize to use a 68HC11 direct
5393addressing mode. These instructions consists of @code{bclr} or
5394@code{bset} instructions.
5395
5396@end table
5397
5398@subsection Trampoline Generation
5399
5400@cindex trampoline generation on M68HC11
5401@cindex trampoline generation on M68HC12
5402For 68HC11 and 68HC12, @command{ld} can generate trampoline code to
5403call a far function using a normal @code{jsr} instruction. The linker
5404will also change the relocation to some far function to use the
5405trampoline address instead of the function address. This is typically the
5406case when a pointer to a function is taken. The pointer will in fact
5407point to the function trampoline.
5408
5409@ifclear GENERIC
5410@lowersections
5411@end ifclear
5412@end ifset
5413
36f63dca 5414@node ARM
3674e28a 5415@section @command{ld} and the ARM family
36f63dca
NC
5416
5417@cindex ARM interworking support
5418@kindex --support-old-code
5419For the ARM, @command{ld} will generate code stubs to allow functions calls
b45619c0 5420between ARM and Thumb code. These stubs only work with code that has
36f63dca
NC
5421been compiled and assembled with the @samp{-mthumb-interwork} command
5422line option. If it is necessary to link with old ARM object files or
5423libraries, which have not been compiled with the -mthumb-interwork
5424option then the @samp{--support-old-code} command line switch should be
5425given to the linker. This will make it generate larger stub functions
5426which will work with non-interworking aware ARM code. Note, however,
5427the linker does not support generating stubs for function calls to
5428non-interworking aware Thumb code.
5429
5430@cindex thumb entry point
5431@cindex entry point, thumb
5432@kindex --thumb-entry=@var{entry}
5433The @samp{--thumb-entry} switch is a duplicate of the generic
5434@samp{--entry} switch, in that it sets the program's starting address.
5435But it also sets the bottom bit of the address, so that it can be
5436branched to using a BX instruction, and the program will start
5437executing in Thumb mode straight away.
5438
e489d0ae
PB
5439@cindex BE8
5440@kindex --be8
5441The @samp{--be8} switch instructs @command{ld} to generate BE8 format
5442executables. This option is only valid when linking big-endian objects.
5443The resulting image will contain big-endian data and little-endian code.
5444
3674e28a
PB
5445@cindex TARGET1
5446@kindex --target1-rel
5447@kindex --target1-abs
5448The @samp{R_ARM_TARGET1} relocation is typically used for entries in the
5449@samp{.init_array} section. It is interpreted as either @samp{R_ARM_REL32}
5450or @samp{R_ARM_ABS32}, depending on the target. The @samp{--target1-rel}
5451and @samp{--target1-abs} switches override the default.
5452
5453@cindex TARGET2
5454@kindex --target2=@var{type}
5455The @samp{--target2=type} switch overrides the default definition of the
5456@samp{R_ARM_TARGET2} relocation. Valid values for @samp{type}, their
5457meanings, and target defaults are as follows:
5458@table @samp
5459@item rel
eeac373a
PB
5460@samp{R_ARM_REL32} (arm*-*-elf, arm*-*-eabi)
5461@item abs
5462@samp{R_ARM_ABS32} (arm*-*-symbianelf)
3674e28a
PB
5463@item got-rel
5464@samp{R_ARM_GOT_PREL} (arm*-*-linux, arm*-*-*bsd)
5465@end table
5466
319850b4
JB
5467@cindex FIX_V4BX
5468@kindex --fix-v4bx
5469The @samp{R_ARM_V4BX} relocation (defined by the ARM AAELF
5470specification) enables objects compiled for the ARMv4 architecture to be
5471interworking-safe when linked with other objects compiled for ARMv4t, but
5472also allows pure ARMv4 binaries to be built from the same ARMv4 objects.
5473
5474In the latter case, the switch @option{--fix-v4bx} must be passed to the
5475linker, which causes v4t @code{BX rM} instructions to be rewritten as
5476@code{MOV PC,rM}, since v4 processors do not have a @code{BX} instruction.
5477
5478In the former case, the switch should not be used, and @samp{R_ARM_V4BX}
5479relocations are ignored.
5480
33bfe774
JB
5481@cindex USE_BLX
5482@kindex --use-blx
5483The @samp{--use-blx} switch enables the linker to use ARM/Thumb
5484BLX instructions (available on ARMv5t and above) in various
5485situations. Currently it is used to perform calls via the PLT from Thumb
5486code using BLX rather than using BX and a mode-switching stub before
5487each PLT entry. This should lead to such calls executing slightly faster.
5488
5489This option is enabled implicitly for SymbianOS, so there is no need to
5490specify it if you are using that target.
5491
c6dd86c6
JB
5492@cindex VFP11_DENORM_FIX
5493@kindex --vfp11-denorm-fix
5494The @samp{--vfp11-denorm-fix} switch enables a link-time workaround for a
5495bug in certain VFP11 coprocessor hardware, which sometimes allows
5496instructions with denorm operands (which must be handled by support code)
5497to have those operands overwritten by subsequent instructions before
5498the support code can read the intended values.
5499
5500The bug may be avoided in scalar mode if you allow at least one
5501intervening instruction between a VFP11 instruction which uses a register
5502and another instruction which writes to the same register, or at least two
5503intervening instructions if vector mode is in use. The bug only affects
5504full-compliance floating-point mode: you do not need this workaround if
5505you are using "runfast" mode. Please contact ARM for further details.
5506
5507If you know you are using buggy VFP11 hardware, you can
5508enable this workaround by specifying the linker option
5509@samp{--vfp-denorm-fix=scalar} if you are using the VFP11 scalar
5510mode only, or @samp{--vfp-denorm-fix=vector} if you are using
5511vector mode (the latter also works for scalar code). The default is
5512@samp{--vfp-denorm-fix=none}.
5513
5514If the workaround is enabled, instructions are scanned for
5515potentially-troublesome sequences, and a veneer is created for each
5516such sequence which may trigger the erratum. The veneer consists of the
5517first instruction of the sequence and a branch back to the subsequent
5518instruction. The original instruction is then replaced with a branch to
5519the veneer. The extra cycles required to call and return from the veneer
5520are sufficient to avoid the erratum in both the scalar and vector cases.
5521
36f63dca
NC
5522@ifclear GENERIC
5523@lowersections
5524@end ifclear
5525@end ifset
5526
5527@ifset HPPA
5528@ifclear GENERIC
5529@raisesections
5530@end ifclear
5531
5532@node HPPA ELF32
5533@section @command{ld} and HPPA 32-bit ELF Support
5534@cindex HPPA multiple sub-space stubs
5535@kindex --multi-subspace
5536When generating a shared library, @command{ld} will by default generate
5537import stubs suitable for use with a single sub-space application.
5538The @samp{--multi-subspace} switch causes @command{ld} to generate export
5539stubs, and different (larger) import stubs suitable for use with
5540multiple sub-spaces.
5541
5542@cindex HPPA stub grouping
5543@kindex --stub-group-size=@var{N}
5544Long branch stubs and import/export stubs are placed by @command{ld} in
5545stub sections located between groups of input sections.
5546@samp{--stub-group-size} specifies the maximum size of a group of input
5547sections handled by one stub section. Since branch offsets are signed,
5548a stub section may serve two groups of input sections, one group before
5549the stub section, and one group after it. However, when using
5550conditional branches that require stubs, it may be better (for branch
5551prediction) that stub sections only serve one group of input sections.
5552A negative value for @samp{N} chooses this scheme, ensuring that
5553branches to stubs always use a negative offset. Two special values of
5554@samp{N} are recognized, @samp{1} and @samp{-1}. These both instruct
5555@command{ld} to automatically size input section groups for the branch types
5556detected, with the same behaviour regarding stub placement as other
5557positive or negative values of @samp{N} respectively.
5558
5559Note that @samp{--stub-group-size} does not split input sections. A
5560single input section larger than the group size specified will of course
5561create a larger group (of one section). If input sections are too
5562large, it may not be possible for a branch to reach its stub.
5563
5564@ifclear GENERIC
5565@lowersections
5566@end ifclear
5567@end ifset
5568
5569@ifset MMIX
5570@ifclear GENERIC
5571@raisesections
5572@end ifclear
5573
5574@node MMIX
5575@section @code{ld} and MMIX
5576For MMIX, there is a choice of generating @code{ELF} object files or
5577@code{mmo} object files when linking. The simulator @code{mmix}
5578understands the @code{mmo} format. The binutils @code{objcopy} utility
5579can translate between the two formats.
5580
5581There is one special section, the @samp{.MMIX.reg_contents} section.
5582Contents in this section is assumed to correspond to that of global
5583registers, and symbols referring to it are translated to special symbols,
5584equal to registers. In a final link, the start address of the
5585@samp{.MMIX.reg_contents} section corresponds to the first allocated
5586global register multiplied by 8. Register @code{$255} is not included in
5587this section; it is always set to the program entry, which is at the
5588symbol @code{Main} for @code{mmo} files.
5589
5590Symbols with the prefix @code{__.MMIX.start.}, for example
5591@code{__.MMIX.start..text} and @code{__.MMIX.start..data} are special;
5592there must be only one each, even if they are local. The default linker
5593script uses these to set the default start address of a section.
5594
5595Initial and trailing multiples of zero-valued 32-bit words in a section,
5596are left out from an mmo file.
5597
5598@ifclear GENERIC
5599@lowersections
5600@end ifclear
5601@end ifset
5602
5603@ifset MSP430
5604@ifclear GENERIC
5605@raisesections
5606@end ifclear
5607
5608@node MSP430
5609@section @code{ld} and MSP430
5610For the MSP430 it is possible to select the MPU architecture. The flag @samp{-m [mpu type]}
5611will select an appropriate linker script for selected MPU type. (To get a list of known MPUs
5612just pass @samp{-m help} option to the linker).
5613
5614@cindex MSP430 extra sections
5615The linker will recognize some extra sections which are MSP430 specific:
5616
5617@table @code
5618@item @samp{.vectors}
5619Defines a portion of ROM where interrupt vectors located.
5620
5621@item @samp{.bootloader}
5622Defines the bootloader portion of the ROM (if applicable). Any code
5623in this section will be uploaded to the MPU.
5624
5625@item @samp{.infomem}
5626Defines an information memory section (if applicable). Any code in
5627this section will be uploaded to the MPU.
5628
5629@item @samp{.infomemnobits}
5630This is the same as the @samp{.infomem} section except that any code
5631in this section will not be uploaded to the MPU.
5632
5633@item @samp{.noinit}
5634Denotes a portion of RAM located above @samp{.bss} section.
5635
5636The last two sections are used by gcc.
5637@end table
5638
5639@ifclear GENERIC
5640@lowersections
5641@end ifclear
5642@end ifset
5643
2a60a7a8
AM
5644@ifset POWERPC
5645@ifclear GENERIC
5646@raisesections
5647@end ifclear
5648
5649@node PowerPC ELF32
5650@section @command{ld} and PowerPC 32-bit ELF Support
5651@cindex PowerPC long branches
5652@kindex --relax on PowerPC
5653Branches on PowerPC processors are limited to a signed 26-bit
5654displacement, which may result in @command{ld} giving
5655@samp{relocation truncated to fit} errors with very large programs.
5656@samp{--relax} enables the generation of trampolines that can access
5657the entire 32-bit address space. These trampolines are inserted at
5658section boundaries, so may not themselves be reachable if an input
5659section exceeds 33M in size.
5660
5661@cindex PowerPC ELF32 options
5662@table @option
5663@cindex PowerPC PLT
5664@kindex --bss-plt
5665@item --bss-plt
5666Current PowerPC GCC accepts a @samp{-msecure-plt} option that
5667generates code capable of using a newer PLT and GOT layout that has
5668the security advantage of no executable section ever needing to be
5669writable and no writable section ever being executable. PowerPC
5670@command{ld} will generate this layout, including stubs to access the
5671PLT, if all input files (including startup and static libraries) were
5672compiled with @samp{-msecure-plt}. @samp{--bss-plt} forces the old
5673BSS PLT (and GOT layout) which can give slightly better performance.
5674
5675@cindex PowerPC GOT
5676@kindex --sdata-got
5677@item --sdata-got
5678The new secure PLT and GOT are placed differently relative to other
5679sections compared to older BSS PLT and GOT placement. The location of
5680@code{.plt} must change because the new secure PLT is an initialized
5681section while the old PLT is uninitialized. The reason for the
5682@code{.got} change is more subtle: The new placement allows
5683@code{.got} to be read-only in applications linked with
5684@samp{-z relro -z now}. However, this placement means that
5685@code{.sdata} cannot always be used in shared libraries, because the
5686PowerPC ABI accesses @code{.sdata} in shared libraries from the GOT
5687pointer. @samp{--sdata-got} forces the old GOT placement. PowerPC
5688GCC doesn't use @code{.sdata} in shared libraries, so this option is
5689really only useful for other compilers that may do so.
5690
5691@cindex PowerPC stub symbols
5692@kindex --emit-stub-syms
5693@item --emit-stub-syms
5694This option causes @command{ld} to label linker stubs with a local
5695symbol that encodes the stub type and destination.
5696
5697@cindex PowerPC TLS optimization
5698@kindex --no-tls-optimize
5699@item --no-tls-optimize
5700PowerPC @command{ld} normally performs some optimization of code
5701sequences used to access Thread-Local Storage. Use this option to
5702disable the optimization.
5703@end table
5704
5705@ifclear GENERIC
5706@lowersections
5707@end ifclear
5708@end ifset
5709
5710@ifset POWERPC64
5711@ifclear GENERIC
5712@raisesections
5713@end ifclear
5714
5715@node PowerPC64 ELF64
5716@section @command{ld} and PowerPC64 64-bit ELF Support
5717
5718@cindex PowerPC64 ELF64 options
5719@table @option
5720@cindex PowerPC64 stub grouping
5721@kindex --stub-group-size
5722@item --stub-group-size
5723Long branch stubs, PLT call stubs and TOC adjusting stubs are placed
5724by @command{ld} in stub sections located between groups of input sections.
5725@samp{--stub-group-size} specifies the maximum size of a group of input
5726sections handled by one stub section. Since branch offsets are signed,
5727a stub section may serve two groups of input sections, one group before
5728the stub section, and one group after it. However, when using
5729conditional branches that require stubs, it may be better (for branch
5730prediction) that stub sections only serve one group of input sections.
5731A negative value for @samp{N} chooses this scheme, ensuring that
5732branches to stubs always use a negative offset. Two special values of
5733@samp{N} are recognized, @samp{1} and @samp{-1}. These both instruct
5734@command{ld} to automatically size input section groups for the branch types
5735detected, with the same behaviour regarding stub placement as other
5736positive or negative values of @samp{N} respectively.
5737
5738Note that @samp{--stub-group-size} does not split input sections. A
5739single input section larger than the group size specified will of course
5740create a larger group (of one section). If input sections are too
5741large, it may not be possible for a branch to reach its stub.
5742
5743@cindex PowerPC64 stub symbols
5744@kindex --emit-stub-syms
5745@item --emit-stub-syms
5746This option causes @command{ld} to label linker stubs with a local
5747symbol that encodes the stub type and destination.
5748
5749@cindex PowerPC64 dot symbols
5750@kindex --dotsyms
5751@kindex --no-dotsyms
5752@item --dotsyms, --no-dotsyms
5753These two options control how @command{ld} interprets version patterns
5754in a version script. Older PowerPC64 compilers emitted both a
5755function descriptor symbol with the same name as the function, and a
5756code entry symbol with the name prefixed by a dot (@samp{.}). To
5757properly version a function @samp{foo}, the version script thus needs
5758to control both @samp{foo} and @samp{.foo}. The option
5759@samp{--dotsyms}, on by default, automatically adds the required
5760dot-prefixed patterns. Use @samp{--no-dotsyms} to disable this
5761feature.
5762
5763@cindex PowerPC64 TLS optimization
5764@kindex --no-tls-optimize
5765@item --no-tls-optimize
5766PowerPC64 @command{ld} normally performs some optimization of code
5767sequences used to access Thread-Local Storage. Use this option to
5768disable the optimization.
5769
5770@cindex PowerPC64 OPD optimization
5771@kindex --no-opd-optimize
5772@item --no-opd-optimize
5773PowerPC64 @command{ld} normally removes @code{.opd} section entries
5774corresponding to deleted link-once functions, or functions removed by
5775the action of @samp{--gc-sections} or linker scrip @code{/DISCARD/}.
5776Use this option to disable @code{.opd} optimization.
5777
5778@cindex PowerPC64 OPD spacing
5779@kindex --non-overlapping-opd
5780@item --non-overlapping-opd
5781Some PowerPC64 compilers have an option to generate compressed
5782@code{.opd} entries spaced 16 bytes apart, overlapping the third word,
5783the static chain pointer (unused in C) with the first word of the next
5784entry. This option expands such entries to the full 24 bytes.
5785
5786@cindex PowerPC64 TOC optimization
5787@kindex --no-toc-optimize
5788@item --no-toc-optimize
5789PowerPC64 @command{ld} normally removes unused @code{.toc} section
5790entries. Such entries are detected by examining relocations that
5791reference the TOC in code sections. A reloc in a deleted code section
5792marks a TOC word as unneeded, while a reloc in a kept code section
5793marks a TOC word as needed. Since the TOC may reference itself, TOC
5794relocs are also examined. TOC words marked as both needed and
5795unneeded will of course be kept. TOC words without any referencing
5796reloc are assumed to be part of a multi-word entry, and are kept or
5797discarded as per the nearest marked preceding word. This works
5798reliably for compiler generated code, but may be incorrect if assembly
5799code is used to insert TOC entries. Use this option to disable the
5800optimization.
5801
5802@cindex PowerPC64 multi-TOC
5803@kindex --no-multi-toc
5804@item --no-multi-toc
5805By default, PowerPC64 GCC generates code for a TOC model where TOC
5806entries are accessed with a 16-bit offset from r2. This limits the
5807total TOC size to 64K. PowerPC64 @command{ld} extends this limit by
5808grouping code sections such that each group uses less than 64K for its
5809TOC entries, then inserts r2 adjusting stubs between inter-group
5810calls. @command{ld} does not split apart input sections, so cannot
5811help if a single input file has a @code{.toc} section that exceeds
581264K, most likely from linking multiple files with @command{ld -r}.
5813Use this option to turn off this feature.
5814@end table
5815
5816@ifclear GENERIC
5817@lowersections
5818@end ifclear
5819@end ifset
5820
36f63dca
NC
5821@ifset TICOFF
5822@ifclear GENERIC
5823@raisesections
5824@end ifclear
5825
5826@node TI COFF
5827@section @command{ld}'s Support for Various TI COFF Versions
5828@cindex TI COFF versions
5829@kindex --format=@var{version}
5830The @samp{--format} switch allows selection of one of the various
5831TI COFF versions. The latest of this writing is 2; versions 0 and 1 are
5832also supported. The TI COFF versions also vary in header byte-order
5833format; @command{ld} will read any version or byte order, but the output
5834header format depends on the default specified by the specific target.
5835
5836@ifclear GENERIC
5837@lowersections
5838@end ifclear
5839@end ifset
5840
2ca22b03
NC
5841@ifset WIN32
5842@ifclear GENERIC
5843@raisesections
5844@end ifclear
5845
5846@node WIN32
5847@section @command{ld} and WIN32 (cygwin/mingw)
5848
5849This section describes some of the win32 specific @command{ld} issues.
b45619c0 5850See @ref{Options,,Command Line Options} for detailed description of the
dc8465bf 5851command line options mentioned here.
2ca22b03
NC
5852
5853@table @emph
5854@cindex import libraries
5855@item import libraries
69da35b5 5856The standard Windows linker creates and uses so-called import
2ca22b03 5857libraries, which contains information for linking to dll's. They are
69da35b5
NC
5858regular static archives and are handled as any other static
5859archive. The cygwin and mingw ports of @command{ld} have specific
2ca22b03
NC
5860support for creating such libraries provided with the
5861@samp{--out-implib} command line option.
5862
dc8465bf
NC
5863@item exporting DLL symbols
5864@cindex exporting DLL symbols
5865The cygwin/mingw @command{ld} has several ways to export symbols for dll's.
5866
5867@table @emph
5868@item using auto-export functionality
5869@cindex using auto-export functionality
5870By default @command{ld} exports symbols with the auto-export functionality,
5871which is controlled by the following command line options:
5872
0a5d968e
NC
5873@itemize
5874@item --export-all-symbols [This is the default]
5875@item --exclude-symbols
5876@item --exclude-libs
5877@end itemize
5878
5879If, however, @samp{--export-all-symbols} is not given explicitly on the
5880command line, then the default auto-export behavior will be @emph{disabled}
5881if either of the following are true:
5882
5883@itemize
5884@item A DEF file is used.
5885@item Any symbol in any object file was marked with the __declspec(dllexport) attribute.
5886@end itemize
dc8465bf
NC
5887
5888@item using a DEF file
5889@cindex using a DEF file
5890Another way of exporting symbols is using a DEF file. A DEF file is
5891an ASCII file containing definitions of symbols which should be
5892exported when a dll is created. Usually it is named @samp{<dll
5893name>.def} and is added as any other object file to the linker's
0a5d968e 5894command line. The file's name must end in @samp{.def} or @samp{.DEF}.
dc8465bf
NC
5895
5896@example
5897gcc -o <output> <objectfiles> <dll name>.def
5898@end example
5899
0a5d968e
NC
5900Using a DEF file turns off the normal auto-export behavior, unless the
5901@samp{--export-all-symbols} option is also used.
5902
dc8465bf
NC
5903Here is an example of a DEF file for a shared library called @samp{xyz.dll}:
5904
5905@example
4b5bd4e7 5906LIBRARY "xyz.dll" BASE=0x20000000
dc8465bf
NC
5907
5908EXPORTS
5909foo
5910bar
5911_bar = bar
4b5bd4e7
DS
5912another_foo = abc.dll.afoo
5913var1 DATA
dc8465bf
NC
5914@end example
5915
4b5bd4e7
DS
5916This example defines a DLL with a non-default base address and five
5917symbols in the export table. The third exported symbol @code{_bar} is an
5918alias for the second. The fourth symbol, @code{another_foo} is resolved
5919by "forwarding" to another module and treating it as an alias for
5920@code{afoo} exported from the DLL @samp{abc.dll}. The final symbol
5921@code{var1} is declared to be a data object.
5922
6b31ad16
DS
5923The optional @code{LIBRARY <name>} command indicates the @emph{internal}
5924name of the output DLL. If @samp{<name>} does not include a suffix,
5925the default library suffix, @samp{.DLL} is appended.
5926
b45619c0
NC
5927When the .DEF file is used to build an application, rather than a
5928library, the @code{NAME <name>} command should be used instead of
6b31ad16
DS
5929@code{LIBRARY}. If @samp{<name>} does not include a suffix, the default
5930executable suffix, @samp{.EXE} is appended.
5931
5932With either @code{LIBRARY <name>} or @code{NAME <name>} the optional
5933specification @code{BASE = <number>} may be used to specify a
5934non-default base address for the image.
5935
5936If neither @code{LIBRARY <name>} nor @code{NAME <name>} is specified,
a2877985
DS
5937or they specify an empty string, the internal name is the same as the
5938filename specified on the command line.
6b31ad16 5939
4b5bd4e7
DS
5940The complete specification of an export symbol is:
5941
5942@example
5943EXPORTS
5944 ( ( ( <name1> [ = <name2> ] )
5945 | ( <name1> = <module-name> . <external-name>))
5946 [ @@ <integer> ] [NONAME] [DATA] [CONSTANT] [PRIVATE] ) *
5947@end example
5948
5949Declares @samp{<name1>} as an exported symbol from the DLL, or declares
5950@samp{<name1>} as an exported alias for @samp{<name2>}; or declares
5951@samp{<name1>} as a "forward" alias for the symbol
5952@samp{<external-name>} in the DLL @samp{<module-name>}.
5953Optionally, the symbol may be exported by the specified ordinal
5954@samp{<integer>} alias.
5955
5956The optional keywords that follow the declaration indicate:
5957
5958@code{NONAME}: Do not put the symbol name in the DLL's export table. It
5959will still be exported by its ordinal alias (either the value specified
5960by the .def specification or, otherwise, the value assigned by the
5961linker). The symbol name, however, does remain visible in the import
5962library (if any), unless @code{PRIVATE} is also specified.
5963
5964@code{DATA}: The symbol is a variable or object, rather than a function.
5965The import lib will export only an indirect reference to @code{foo} as
5966the symbol @code{_imp__foo} (ie, @code{foo} must be resolved as
5967@code{*_imp__foo}).
5968
5969@code{CONSTANT}: Like @code{DATA}, but put the undecorated @code{foo} as
5970well as @code{_imp__foo} into the import library. Both refer to the
5971read-only import address table's pointer to the variable, not to the
5972variable itself. This can be dangerous. If the user code fails to add
5973the @code{dllimport} attribute and also fails to explicitly add the
5974extra indirection that the use of the attribute enforces, the
5975application will behave unexpectedly.
5976
5977@code{PRIVATE}: Put the symbol in the DLL's export table, but do not put
5978it into the static import library used to resolve imports at link time. The
5979symbol can still be imported using the @code{LoadLibrary/GetProcAddress}
5980API at runtime or by by using the GNU ld extension of linking directly to
5981the DLL without an import library.
5982
5983See ld/deffilep.y in the binutils sources for the full specification of
5984other DEF file statements
dc8465bf
NC
5985
5986@cindex creating a DEF file
5987While linking a shared dll, @command{ld} is able to create a DEF file
5988with the @samp{--output-def <file>} command line option.
0a5d968e
NC
5989
5990@item Using decorations
5991@cindex Using decorations
5992Another way of marking symbols for export is to modify the source code
5993itself, so that when building the DLL each symbol to be exported is
5994declared as:
5995
5996@example
5997__declspec(dllexport) int a_variable
5998__declspec(dllexport) void a_function(int with_args)
5999@end example
6000
6001All such symbols will be exported from the DLL. If, however,
6002any of the object files in the DLL contain symbols decorated in
6003this way, then the normal auto-export behavior is disabled, unless
6004the @samp{--export-all-symbols} option is also used.
6005
6006Note that object files that wish to access these symbols must @emph{not}
6007decorate them with dllexport. Instead, they should use dllimport,
6008instead:
6009
6010@example
6011__declspec(dllimport) int a_variable
6012__declspec(dllimport) void a_function(int with_args)
6013@end example
6014
6015This complicates the structure of library header files, because
6016when included by the library itself the header must declare the
6017variables and functions as dllexport, but when included by client
6018code the header must declare them as dllimport. There are a number
6019of idioms that are typically used to do this; often client code can
6020omit the __declspec() declaration completely. See
6021@samp{--enable-auto-import} and @samp{automatic data imports} for more
b45619c0 6022information.
dc8465bf
NC
6023@end table
6024
2ca22b03
NC
6025@cindex automatic data imports
6026@item automatic data imports
6027The standard Windows dll format supports data imports from dlls only
69da35b5 6028by adding special decorations (dllimport/dllexport), which let the
2ca22b03 6029compiler produce specific assembler instructions to deal with this
69da35b5
NC
6030issue. This increases the effort necessary to port existing Un*x
6031code to these platforms, especially for large
2ca22b03 6032c++ libraries and applications. The auto-import feature, which was
69da35b5 6033initially provided by Paul Sokolovsky, allows one to omit the
b45619c0 6034decorations to achieve a behavior that conforms to that on POSIX/Un*x
69da35b5
NC
6035platforms. This feature is enabled with the @samp{--enable-auto-import}
6036command-line option, although it is enabled by default on cygwin/mingw.
6037The @samp{--enable-auto-import} option itself now serves mainly to
6038suppress any warnings that are ordinarily emitted when linked objects
6039trigger the feature's use.
6040
6041auto-import of variables does not always work flawlessly without
6042additional assistance. Sometimes, you will see this message
6043
6044"variable '<var>' can't be auto-imported. Please read the
6045documentation for ld's @code{--enable-auto-import} for details."
6046
6047The @samp{--enable-auto-import} documentation explains why this error
6048occurs, and several methods that can be used to overcome this difficulty.
6049One of these methods is the @emph{runtime pseudo-relocs} feature, described
6050below.
6051
6052@cindex runtime pseudo-relocation
6053For complex variables imported from DLLs (such as structs or classes),
6054object files typically contain a base address for the variable and an
6055offset (@emph{addend}) within the variable--to specify a particular
6056field or public member, for instance. Unfortunately, the runtime loader used
6057in win32 environments is incapable of fixing these references at runtime
6058without the additional information supplied by dllimport/dllexport decorations.
6059The standard auto-import feature described above is unable to resolve these
6060references.
6061
6062The @samp{--enable-runtime-pseudo-relocs} switch allows these references to
6063be resolved without error, while leaving the task of adjusting the references
6064themselves (with their non-zero addends) to specialized code provided by the
6065runtime environment. Recent versions of the cygwin and mingw environments and
6066compilers provide this runtime support; older versions do not. However, the
6067support is only necessary on the developer's platform; the compiled result will
6068run without error on an older system.
6069
6070@samp{--enable-runtime-pseudo-relocs} is not the default; it must be explicitly
6071enabled as needed.
2ca22b03
NC
6072
6073@cindex direct linking to a dll
6074@item direct linking to a dll
6075The cygwin/mingw ports of @command{ld} support the direct linking,
6076including data symbols, to a dll without the usage of any import
69da35b5 6077libraries. This is much faster and uses much less memory than does the
b45619c0 6078traditional import library method, especially when linking large
69da35b5
NC
6079libraries or applications. When @command{ld} creates an import lib, each
6080function or variable exported from the dll is stored in its own bfd, even
6081though a single bfd could contain many exports. The overhead involved in
6082storing, loading, and processing so many bfd's is quite large, and explains the
6083tremendous time, memory, and storage needed to link against particularly
6084large or complex libraries when using import libs.
6085
6086Linking directly to a dll uses no extra command-line switches other than
6087@samp{-L} and @samp{-l}, because @command{ld} already searches for a number
6088of names to match each library. All that is needed from the developer's
6089perspective is an understanding of this search, in order to force ld to
6090select the dll instead of an import library.
6091
2ca22b03 6092
69da35b5
NC
6093For instance, when ld is called with the argument @samp{-lxxx} it will attempt
6094to find, in the first directory of its search path,
2ca22b03
NC
6095
6096@example
45e948fe
NC
6097libxxx.dll.a
6098xxx.dll.a
6099libxxx.a
6100xxx.lib
69da35b5 6101cygxxx.dll (*)
45e948fe
NC
6102libxxx.dll
6103xxx.dll
2ca22b03
NC
6104@end example
6105
69da35b5
NC
6106before moving on to the next directory in the search path.
6107
6108(*) Actually, this is not @samp{cygxxx.dll} but in fact is @samp{<prefix>xxx.dll},
6109where @samp{<prefix>} is set by the @command{ld} option
6110@samp{--dll-search-prefix=<prefix>}. In the case of cygwin, the standard gcc spec
6111file includes @samp{--dll-search-prefix=cyg}, so in effect we actually search for
6112@samp{cygxxx.dll}.
6113
6114Other win32-based unix environments, such as mingw or pw32, may use other
6115@samp{<prefix>}es, although at present only cygwin makes use of this feature. It
6116was originally intended to help avoid name conflicts among dll's built for the
6117various win32/un*x environments, so that (for example) two versions of a zlib dll
6118could coexist on the same machine.
6119
2ca22b03
NC
6120The generic cygwin/mingw path layout uses a @samp{bin} directory for
6121applications and dll's and a @samp{lib} directory for the import
69da35b5 6122libraries (using cygwin nomenclature):
2ca22b03
NC
6123
6124@example
6125bin/
6126 cygxxx.dll
6127lib/
6128 libxxx.dll.a (in case of dll's)
6129 libxxx.a (in case of static archive)
6130@end example
6131
69da35b5
NC
6132Linking directly to a dll without using the import library can be
6133done two ways:
2ca22b03
NC
6134
61351. Use the dll directly by adding the @samp{bin} path to the link line
6136@example
6137gcc -Wl,-verbose -o a.exe -L../bin/ -lxxx
6138@end example
6139
69da35b5
NC
6140However, as the dll's often have version numbers appended to their names
6141(@samp{cygncurses-5.dll}) this will often fail, unless one specifies
6142@samp{-L../bin -lncurses-5} to include the version. Import libs are generally
6143not versioned, and do not have this difficulty.
6144
2ca22b03
NC
61452. Create a symbolic link from the dll to a file in the @samp{lib}
6146directory according to the above mentioned search pattern. This
6147should be used to avoid unwanted changes in the tools needed for
6148making the app/dll.
6149
6150@example
6151ln -s bin/cygxxx.dll lib/[cyg|lib|]xxx.dll[.a]
6152@end example
6153
6154Then you can link without any make environment changes.
6155
6156@example
6157gcc -Wl,-verbose -o a.exe -L../lib/ -lxxx
6158@end example
69da35b5
NC
6159
6160This technique also avoids the version number problems, because the following is
6161perfectly legal
6162
6163@example
6164bin/
6165 cygxxx-5.dll
6166lib/
6167 libxxx.dll.a -> ../bin/cygxxx-5.dll
6168@end example
6169
dc8465bf 6170Linking directly to a dll without using an import lib will work
69da35b5
NC
6171even when auto-import features are exercised, and even when
6172@samp{--enable-runtime-pseudo-relocs} is used.
6173
6174Given the improvements in speed and memory usage, one might justifiably
45e948fe 6175wonder why import libraries are used at all. There are three reasons:
69da35b5
NC
6176
61771. Until recently, the link-directly-to-dll functionality did @emph{not}
6178work with auto-imported data.
6179
dc8465bf
NC
61802. Sometimes it is necessary to include pure static objects within the
6181import library (which otherwise contains only bfd's for indirection
6182symbols that point to the exports of a dll). Again, the import lib
6183for the cygwin kernel makes use of this ability, and it is not
6184possible to do this without an import lib.
69da35b5 6185
45e948fe
NC
61863. Symbol aliases can only be resolved using an import lib. This is
6187critical when linking against OS-supplied dll's (eg, the win32 API)
6188in which symbols are usually exported as undecorated aliases of their
6189stdcall-decorated assembly names.
6190
69da35b5
NC
6191So, import libs are not going away. But the ability to replace
6192true import libs with a simple symbolic link to (or a copy of)
45e948fe 6193a dll, in many cases, is a useful addition to the suite of tools
69da35b5
NC
6194binutils makes available to the win32 developer. Given the
6195massive improvements in memory requirements during linking, storage
6196requirements, and linking speed, we expect that many developers
6197will soon begin to use this feature whenever possible.
dc8465bf
NC
6198
6199@item symbol aliasing
6200@table @emph
6201@item adding additional names
6202Sometimes, it is useful to export symbols with additional names.
6203A symbol @samp{foo} will be exported as @samp{foo}, but it can also be
6204exported as @samp{_foo} by using special directives in the DEF file
6205when creating the dll. This will affect also the optional created
6206import library. Consider the following DEF file:
6207
6208@example
6209LIBRARY "xyz.dll" BASE=0x61000000
6210
6211EXPORTS
6212foo
6213_foo = foo
6214@end example
6215
6216The line @samp{_foo = foo} maps the symbol @samp{foo} to @samp{_foo}.
6217
6218Another method for creating a symbol alias is to create it in the
6219source code using the "weak" attribute:
6220
6221@example
6222void foo () @{ /* Do something. */; @}
6223void _foo () __attribute__ ((weak, alias ("foo")));
6224@end example
6225
6226See the gcc manual for more information about attributes and weak
6227symbols.
6228
6229@item renaming symbols
6230Sometimes it is useful to rename exports. For instance, the cygwin
6231kernel does this regularly. A symbol @samp{_foo} can be exported as
6232@samp{foo} but not as @samp{_foo} by using special directives in the
6233DEF file. (This will also affect the import library, if it is
6234created). In the following example:
6235
6236@example
6237LIBRARY "xyz.dll" BASE=0x61000000
6238
6239EXPORTS
6240_foo = foo
6241@end example
6242
6243The line @samp{_foo = foo} maps the exported symbol @samp{foo} to
6244@samp{_foo}.
6245@end table
6246
0a5d968e
NC
6247Note: using a DEF file disables the default auto-export behavior,
6248unless the @samp{--export-all-symbols} command line option is used.
6249If, however, you are trying to rename symbols, then you should list
6250@emph{all} desired exports in the DEF file, including the symbols
6251that are not being renamed, and do @emph{not} use the
6252@samp{--export-all-symbols} option. If you list only the
6253renamed symbols in the DEF file, and use @samp{--export-all-symbols}
6254to handle the other symbols, then the both the new names @emph{and}
1be59579 6255the original names for the renamed symbols will be exported.
0a5d968e
NC
6256In effect, you'd be aliasing those symbols, not renaming them,
6257which is probably not what you wanted.
c87db184
CF
6258
6259@cindex weak externals
6260@item weak externals
6261The Windows object format, PE, specifies a form of weak symbols called
6262weak externals. When a weak symbol is linked and the symbol is not
6263defined, the weak symbol becomes an alias for some other symbol. There
6264are three variants of weak externals:
6265@itemize
6266@item Definition is searched for in objects and libraries, historically
6267called lazy externals.
6268@item Definition is searched for only in other objects, not in libraries.
6269This form is not presently implemented.
6270@item No search; the symbol is an alias. This form is not presently
6271implemented.
6272@end itemize
6273As a GNU extension, weak symbols that do not specify an alternate symbol
6274are supported. If the symbol is undefined when linking, the symbol
6275uses a default value.
2ca22b03
NC
6276@end table
6277
6278@ifclear GENERIC
6279@lowersections
6280@end ifclear
6281@end ifset
6282
e0001a05
NC
6283@ifset XTENSA
6284@ifclear GENERIC
6285@raisesections
6286@end ifclear
6287
6288@node Xtensa
6289@section @code{ld} and Xtensa Processors
6290
6291@cindex Xtensa processors
6292The default @command{ld} behavior for Xtensa processors is to interpret
6293@code{SECTIONS} commands so that lists of explicitly named sections in a
6294specification with a wildcard file will be interleaved when necessary to
6295keep literal pools within the range of PC-relative load offsets. For
6296example, with the command:
6297
6298@smallexample
6299SECTIONS
6300@{
6301 .text : @{
6302 *(.literal .text)
6303 @}
6304@}
6305@end smallexample
6306
6307@noindent
6308@command{ld} may interleave some of the @code{.literal}
6309and @code{.text} sections from different object files to ensure that the
6310literal pools are within the range of PC-relative load offsets. A valid
6311interleaving might place the @code{.literal} sections from an initial
6312group of files followed by the @code{.text} sections of that group of
6313files. Then, the @code{.literal} sections from the rest of the files
6314and the @code{.text} sections from the rest of the files would follow.
e0001a05 6315
43cd72b9 6316@cindex @option{--relax} on Xtensa
e0001a05 6317@cindex relaxing on Xtensa
43cd72b9
BW
6318Relaxation is enabled by default for the Xtensa version of @command{ld} and
6319provides two important link-time optimizations. The first optimization
6320is to combine identical literal values to reduce code size. A redundant
6321literal will be removed and all the @code{L32R} instructions that use it
6322will be changed to reference an identical literal, as long as the
6323location of the replacement literal is within the offset range of all
6324the @code{L32R} instructions. The second optimization is to remove
6325unnecessary overhead from assembler-generated ``longcall'' sequences of
6326@code{L32R}/@code{CALLX@var{n}} when the target functions are within
6327range of direct @code{CALL@var{n}} instructions.
6328
6329For each of these cases where an indirect call sequence can be optimized
6330to a direct call, the linker will change the @code{CALLX@var{n}}
6331instruction to a @code{CALL@var{n}} instruction, remove the @code{L32R}
6332instruction, and remove the literal referenced by the @code{L32R}
6333instruction if it is not used for anything else. Removing the
6334@code{L32R} instruction always reduces code size but can potentially
6335hurt performance by changing the alignment of subsequent branch targets.
6336By default, the linker will always preserve alignments, either by
6337switching some instructions between 24-bit encodings and the equivalent
6338density instructions or by inserting a no-op in place of the @code{L32R}
6339instruction that was removed. If code size is more important than
6340performance, the @option{--size-opt} option can be used to prevent the
6341linker from widening density instructions or inserting no-ops, except in
6342a few cases where no-ops are required for correctness.
6343
6344The following Xtensa-specific command-line options can be used to
6345control the linker:
6346
6347@cindex Xtensa options
6348@table @option
e0001a05 6349@kindex --no-relax
43cd72b9
BW
6350@item --no-relax
6351Since the Xtensa version of @code{ld} enables the @option{--relax} option
6352by default, the @option{--no-relax} option is provided to disable
6353relaxation.
6354
6355@item --size-opt
6356When optimizing indirect calls to direct calls, optimize for code size
6357more than performance. With this option, the linker will not insert
6358no-ops or widen density instructions to preserve branch target
6359alignment. There may still be some cases where no-ops are required to
6360preserve the correctness of the code.
6361@end table
e0001a05
NC
6362
6363@ifclear GENERIC
6364@lowersections
6365@end ifclear
6366@end ifset
6367
252b5132
RH
6368@ifclear SingleFormat
6369@node BFD
6370@chapter BFD
6371
6372@cindex back end
6373@cindex object file management
6374@cindex object formats available
6375@kindex objdump -i
6376The linker accesses object and archive files using the BFD libraries.
6377These libraries allow the linker to use the same routines to operate on
6378object files whatever the object file format. A different object file
6379format can be supported simply by creating a new BFD back end and adding
6380it to the library. To conserve runtime memory, however, the linker and
6381associated tools are usually configured to support only a subset of the
6382object file formats available. You can use @code{objdump -i}
6383(@pxref{objdump,,objdump,binutils.info,The GNU Binary Utilities}) to
6384list all the formats available for your configuration.
6385
6386@cindex BFD requirements
6387@cindex requirements for BFD
6388As with most implementations, BFD is a compromise between
6389several conflicting requirements. The major factor influencing
6390BFD design was efficiency: any time used converting between
6391formats is time which would not have been spent had BFD not
6392been involved. This is partly offset by abstraction payback; since
6393BFD simplifies applications and back ends, more time and care
6394may be spent optimizing algorithms for a greater speed.
6395
6396One minor artifact of the BFD solution which you should bear in
6397mind is the potential for information loss. There are two places where
6398useful information can be lost using the BFD mechanism: during
6399conversion and during output. @xref{BFD information loss}.
6400
6401@menu
6402* BFD outline:: How it works: an outline of BFD
6403@end menu
6404
6405@node BFD outline
36f63dca 6406@section How It Works: An Outline of BFD
252b5132
RH
6407@cindex opening object files
6408@include bfdsumm.texi
6409@end ifclear
6410
6411@node Reporting Bugs
6412@chapter Reporting Bugs
ff5dcc92
SC
6413@cindex bugs in @command{ld}
6414@cindex reporting bugs in @command{ld}
252b5132 6415
ff5dcc92 6416Your bug reports play an essential role in making @command{ld} reliable.
252b5132
RH
6417
6418Reporting a bug may help you by bringing a solution to your problem, or
6419it may not. But in any case the principal function of a bug report is
ff5dcc92 6420to help the entire community by making the next version of @command{ld}
252b5132 6421work better. Bug reports are your contribution to the maintenance of
ff5dcc92 6422@command{ld}.
252b5132
RH
6423
6424In order for a bug report to serve its purpose, you must include the
6425information that enables us to fix the bug.
6426
6427@menu
6428* Bug Criteria:: Have you found a bug?
6429* Bug Reporting:: How to report bugs
6430@end menu
6431
6432@node Bug Criteria
36f63dca 6433@section Have You Found a Bug?
252b5132
RH
6434@cindex bug criteria
6435
6436If you are not sure whether you have found a bug, here are some guidelines:
6437
6438@itemize @bullet
6439@cindex fatal signal
6440@cindex linker crash
6441@cindex crash of linker
6442@item
6443If the linker gets a fatal signal, for any input whatever, that is a
ff5dcc92 6444@command{ld} bug. Reliable linkers never crash.
252b5132
RH
6445
6446@cindex error on valid input
6447@item
ff5dcc92 6448If @command{ld} produces an error message for valid input, that is a bug.
252b5132
RH
6449
6450@cindex invalid input
6451@item
ff5dcc92 6452If @command{ld} does not produce an error message for invalid input, that
252b5132
RH
6453may be a bug. In the general case, the linker can not verify that
6454object files are correct.
6455
6456@item
6457If you are an experienced user of linkers, your suggestions for
ff5dcc92 6458improvement of @command{ld} are welcome in any case.
252b5132
RH
6459@end itemize
6460
6461@node Bug Reporting
36f63dca 6462@section How to Report Bugs
252b5132 6463@cindex bug reports
ff5dcc92 6464@cindex @command{ld} bugs, reporting
252b5132
RH
6465
6466A number of companies and individuals offer support for @sc{gnu}
ff5dcc92 6467products. If you obtained @command{ld} from a support organization, we
252b5132
RH
6468recommend you contact that organization first.
6469
6470You can find contact information for many support companies and
6471individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
6472distribution.
6473
ad22bfe8 6474@ifset BUGURL
ff5dcc92 6475Otherwise, send bug reports for @command{ld} to
ad22bfe8
JM
6476@value{BUGURL}.
6477@end ifset
252b5132
RH
6478
6479The fundamental principle of reporting bugs usefully is this:
6480@strong{report all the facts}. If you are not sure whether to state a
6481fact or leave it out, state it!
6482
6483Often people omit facts because they think they know what causes the
6484problem and assume that some details do not matter. Thus, you might
b553b183
NC
6485assume that the name of a symbol you use in an example does not
6486matter. Well, probably it does not, but one cannot be sure. Perhaps
6487the bug is a stray memory reference which happens to fetch from the
6488location where that name is stored in memory; perhaps, if the name
6489were different, the contents of that location would fool the linker
6490into doing the right thing despite the bug. Play it safe and give a
6491specific, complete example. That is the easiest thing for you to do,
6492and the most helpful.
6493
6494Keep in mind that the purpose of a bug report is to enable us to fix
6495the bug if it is new to us. Therefore, always write your bug reports
6496on the assumption that the bug has not been reported previously.
252b5132
RH
6497
6498Sometimes people give a few sketchy facts and ask, ``Does this ring a
36f63dca
NC
6499bell?'' This cannot help us fix a bug, so it is basically useless. We
6500respond by asking for enough details to enable us to investigate.
6501You might as well expedite matters by sending them to begin with.
252b5132
RH
6502
6503To enable us to fix the bug, you should include all these things:
6504
6505@itemize @bullet
6506@item
ff5dcc92 6507The version of @command{ld}. @command{ld} announces it if you start it with
252b5132
RH
6508the @samp{--version} argument.
6509
6510Without this, we will not know whether there is any point in looking for
ff5dcc92 6511the bug in the current version of @command{ld}.
252b5132
RH
6512
6513@item
ff5dcc92 6514Any patches you may have applied to the @command{ld} source, including any
252b5132
RH
6515patches made to the @code{BFD} library.
6516
6517@item
6518The type of machine you are using, and the operating system name and
6519version number.
6520
6521@item
ff5dcc92 6522What compiler (and its version) was used to compile @command{ld}---e.g.
252b5132
RH
6523``@code{gcc-2.7}''.
6524
6525@item
6526The command arguments you gave the linker to link your example and
6527observe the bug. To guarantee you will not omit something important,
6528list them all. A copy of the Makefile (or the output from make) is
6529sufficient.
6530
6531If we were to try to guess the arguments, we would probably guess wrong
6532and then we might not encounter the bug.
6533
6534@item
6535A complete input file, or set of input files, that will reproduce the
b553b183
NC
6536bug. It is generally most helpful to send the actual object files
6537provided that they are reasonably small. Say no more than 10K. For
6538bigger files you can either make them available by FTP or HTTP or else
6539state that you are willing to send the object file(s) to whomever
6540requests them. (Note - your email will be going to a mailing list, so
6541we do not want to clog it up with large attachments). But small
6542attachments are best.
252b5132
RH
6543
6544If the source files were assembled using @code{gas} or compiled using
6545@code{gcc}, then it may be OK to send the source files rather than the
6546object files. In this case, be sure to say exactly what version of
6547@code{gas} or @code{gcc} was used to produce the object files. Also say
6548how @code{gas} or @code{gcc} were configured.
6549
6550@item
6551A description of what behavior you observe that you believe is
6552incorrect. For example, ``It gets a fatal signal.''
6553
ff5dcc92 6554Of course, if the bug is that @command{ld} gets a fatal signal, then we
252b5132
RH
6555will certainly notice it. But if the bug is incorrect output, we might
6556not notice unless it is glaringly wrong. You might as well not give us
6557a chance to make a mistake.
6558
6559Even if the problem you experience is a fatal signal, you should still
6560say so explicitly. Suppose something strange is going on, such as, your
b45619c0 6561copy of @command{ld} is out of sync, or you have encountered a bug in the
252b5132
RH
6562C library on your system. (This has happened!) Your copy might crash
6563and ours would not. If you told us to expect a crash, then when ours
6564fails to crash, we would know that the bug was not happening for us. If
6565you had not told us to expect a crash, then we would not be able to draw
6566any conclusion from our observations.
6567
6568@item
ff5dcc92 6569If you wish to suggest changes to the @command{ld} source, send us context
252b5132
RH
6570diffs, as generated by @code{diff} with the @samp{-u}, @samp{-c}, or
6571@samp{-p} option. Always send diffs from the old file to the new file.
ff5dcc92 6572If you even discuss something in the @command{ld} source, refer to it by
252b5132
RH
6573context, not by line number.
6574
6575The line numbers in our development sources will not match those in your
6576sources. Your line numbers would convey no useful information to us.
6577@end itemize
6578
6579Here are some things that are not necessary:
6580
6581@itemize @bullet
6582@item
6583A description of the envelope of the bug.
6584
6585Often people who encounter a bug spend a lot of time investigating
6586which changes to the input file will make the bug go away and which
6587changes will not affect it.
6588
6589This is often time consuming and not very useful, because the way we
6590will find the bug is by running a single example under the debugger
6591with breakpoints, not by pure deduction from a series of examples.
6592We recommend that you save your time for something else.
6593
6594Of course, if you can find a simpler example to report @emph{instead}
6595of the original one, that is a convenience for us. Errors in the
6596output will be easier to spot, running under the debugger will take
6597less time, and so on.
6598
6599However, simplification is not vital; if you do not want to do this,
6600report the bug anyway and send us the entire test case you used.
6601
6602@item
6603A patch for the bug.
6604
6605A patch for the bug does help us if it is a good one. But do not omit
6606the necessary information, such as the test case, on the assumption that
6607a patch is all we need. We might see problems with your patch and decide
6608to fix the problem another way, or we might not understand it at all.
6609
ff5dcc92 6610Sometimes with a program as complicated as @command{ld} it is very hard to
252b5132
RH
6611construct an example that will make the program follow a certain path
6612through the code. If you do not send us the example, we will not be
6613able to construct one, so we will not be able to verify that the bug is
6614fixed.
6615
6616And if we cannot understand what bug you are trying to fix, or why your
6617patch should be an improvement, we will not install it. A test case will
6618help us to understand.
6619
6620@item
6621A guess about what the bug is or what it depends on.
6622
6623Such guesses are usually wrong. Even we cannot guess right about such
6624things without first using the debugger to find the facts.
6625@end itemize
6626
6627@node MRI
6628@appendix MRI Compatible Script Files
6629@cindex MRI compatibility
ff5dcc92
SC
6630To aid users making the transition to @sc{gnu} @command{ld} from the MRI
6631linker, @command{ld} can use MRI compatible linker scripts as an
252b5132
RH
6632alternative to the more general-purpose linker scripting language
6633described in @ref{Scripts}. MRI compatible linker scripts have a much
6634simpler command set than the scripting language otherwise used with
ff5dcc92 6635@command{ld}. @sc{gnu} @command{ld} supports the most commonly used MRI
252b5132
RH
6636linker commands; these commands are described here.
6637
6638In general, MRI scripts aren't of much use with the @code{a.out} object
6639file format, since it only has three sections and MRI scripts lack some
6640features to make use of them.
6641
6642You can specify a file containing an MRI-compatible script using the
6643@samp{-c} command-line option.
6644
6645Each command in an MRI-compatible script occupies its own line; each
6646command line starts with the keyword that identifies the command (though
6647blank lines are also allowed for punctuation). If a line of an
ff5dcc92 6648MRI-compatible script begins with an unrecognized keyword, @command{ld}
252b5132
RH
6649issues a warning message, but continues processing the script.
6650
6651Lines beginning with @samp{*} are comments.
6652
6653You can write these commands using all upper-case letters, or all
6654lower case; for example, @samp{chip} is the same as @samp{CHIP}.
6655The following list shows only the upper-case form of each command.
6656
6657@table @code
6658@cindex @code{ABSOLUTE} (MRI)
6659@item ABSOLUTE @var{secname}
6660@itemx ABSOLUTE @var{secname}, @var{secname}, @dots{} @var{secname}
ff5dcc92 6661Normally, @command{ld} includes in the output file all sections from all
252b5132
RH
6662the input files. However, in an MRI-compatible script, you can use the
6663@code{ABSOLUTE} command to restrict the sections that will be present in
6664your output program. If the @code{ABSOLUTE} command is used at all in a
6665script, then only the sections named explicitly in @code{ABSOLUTE}
6666commands will appear in the linker output. You can still use other
6667input sections (whatever you select on the command line, or using
6668@code{LOAD}) to resolve addresses in the output file.
6669
6670@cindex @code{ALIAS} (MRI)
6671@item ALIAS @var{out-secname}, @var{in-secname}
6672Use this command to place the data from input section @var{in-secname}
6673in a section called @var{out-secname} in the linker output file.
6674
6675@var{in-secname} may be an integer.
6676
6677@cindex @code{ALIGN} (MRI)
6678@item ALIGN @var{secname} = @var{expression}
6679Align the section called @var{secname} to @var{expression}. The
6680@var{expression} should be a power of two.
6681
6682@cindex @code{BASE} (MRI)
6683@item BASE @var{expression}
6684Use the value of @var{expression} as the lowest address (other than
6685absolute addresses) in the output file.
6686
6687@cindex @code{CHIP} (MRI)
6688@item CHIP @var{expression}
6689@itemx CHIP @var{expression}, @var{expression}
6690This command does nothing; it is accepted only for compatibility.
6691
6692@cindex @code{END} (MRI)
6693@item END
6694This command does nothing whatever; it's only accepted for compatibility.
6695
6696@cindex @code{FORMAT} (MRI)
6697@item FORMAT @var{output-format}
6698Similar to the @code{OUTPUT_FORMAT} command in the more general linker
a1ab1d2a 6699language, but restricted to one of these output formats:
252b5132
RH
6700
6701@enumerate
a1ab1d2a 6702@item
252b5132
RH
6703S-records, if @var{output-format} is @samp{S}
6704
6705@item
6706IEEE, if @var{output-format} is @samp{IEEE}
6707
6708@item
6709COFF (the @samp{coff-m68k} variant in BFD), if @var{output-format} is
6710@samp{COFF}
6711@end enumerate
6712
6713@cindex @code{LIST} (MRI)
6714@item LIST @var{anything}@dots{}
6715Print (to the standard output file) a link map, as produced by the
ff5dcc92 6716@command{ld} command-line option @samp{-M}.
252b5132
RH
6717
6718The keyword @code{LIST} may be followed by anything on the
6719same line, with no change in its effect.
6720
6721@cindex @code{LOAD} (MRI)
6722@item LOAD @var{filename}
6723@itemx LOAD @var{filename}, @var{filename}, @dots{} @var{filename}
6724Include one or more object file @var{filename} in the link; this has the
ff5dcc92 6725same effect as specifying @var{filename} directly on the @command{ld}
252b5132
RH
6726command line.
6727
6728@cindex @code{NAME} (MRI)
6729@item NAME @var{output-name}
ff5dcc92 6730@var{output-name} is the name for the program produced by @command{ld}; the
252b5132
RH
6731MRI-compatible command @code{NAME} is equivalent to the command-line
6732option @samp{-o} or the general script language command @code{OUTPUT}.
6733
6734@cindex @code{ORDER} (MRI)
6735@item ORDER @var{secname}, @var{secname}, @dots{} @var{secname}
6736@itemx ORDER @var{secname} @var{secname} @var{secname}
ff5dcc92 6737Normally, @command{ld} orders the sections in its output file in the
252b5132
RH
6738order in which they first appear in the input files. In an MRI-compatible
6739script, you can override this ordering with the @code{ORDER} command. The
6740sections you list with @code{ORDER} will appear first in your output
6741file, in the order specified.
6742
6743@cindex @code{PUBLIC} (MRI)
6744@item PUBLIC @var{name}=@var{expression}
6745@itemx PUBLIC @var{name},@var{expression}
6746@itemx PUBLIC @var{name} @var{expression}
6747Supply a value (@var{expression}) for external symbol
6748@var{name} used in the linker input files.
6749
6750@cindex @code{SECT} (MRI)
6751@item SECT @var{secname}, @var{expression}
6752@itemx SECT @var{secname}=@var{expression}
6753@itemx SECT @var{secname} @var{expression}
6754You can use any of these three forms of the @code{SECT} command to
6755specify the start address (@var{expression}) for section @var{secname}.
6756If you have more than one @code{SECT} statement for the same
6757@var{secname}, only the @emph{first} sets the start address.
6758@end table
6759
36f63dca 6760@include fdl.texi
704c465c 6761
370b66a1
CD
6762@node LD Index
6763@unnumbered LD Index
252b5132
RH
6764
6765@printindex cp
6766
6767@tex
6768% I think something like @colophon should be in texinfo. In the
6769% meantime:
6770\long\def\colophon{\hbox to0pt{}\vfill
6771\centerline{The body of this manual is set in}
6772\centerline{\fontname\tenrm,}
6773\centerline{with headings in {\bf\fontname\tenbf}}
6774\centerline{and examples in {\tt\fontname\tentt}.}
6775\centerline{{\it\fontname\tenit\/} and}
6776\centerline{{\sl\fontname\tensl\/}}
6777\centerline{are used for emphasis.}\vfill}
6778\page\colophon
6779% Blame: doc@cygnus.com, 28mar91.
6780@end tex
6781
6782
6783@contents
6784@bye
This page took 0.676377 seconds and 4 git commands to generate.