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