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