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