From Alan Modra <alan@spri.levels.unisa.edu.au>:
[deliverable/binutils-gdb.git] / ld / ld.texinfo
CommitLineData
f22eee08 1\input texinfo
c8072296 2@setfilename ld.info
b4d4e8e3 3@syncodeindex ky cp
7f9ae73e 4@include configdoc.texi
8de26d62 5@c (configdoc.texi is generated by the Makefile)
ec40bbb8
DM
6
7@c @smallbook
1c48127e
RP
8
9@ifinfo
10@format
11START-INFO-DIR-ENTRY
f9d3d71a 12* Ld: (ld). The GNU linker.
1c48127e
RP
13END-INFO-DIR-ENTRY
14@end format
15@end ifinfo
16
b4d4e8e3 17@ifinfo
246504a5 18This file documents the GNU linker LD.
b4d4e8e3 19
0b0642d6 20Copyright (C) 1991, 92, 93, 94, 1995 Free Software Foundation, Inc.
b4d4e8e3
RP
21
22Permission is granted to make and distribute verbatim copies of
23this manual provided the copyright notice and this permission notice
24are preserved on all copies.
25
d76ae847
RP
26Permission is granted to copy and distribute modified versions of this
27manual under the conditions for verbatim copying, provided also that
28the entire resulting derived work is distributed under the terms of a
29permission notice identical to this one.
30
31Permission is granted to copy and distribute translations of this manual
32into another language, under the above conditions for modified versions.
33
b4d4e8e3
RP
34@ignore
35Permission is granted to process this file through Tex and print the
36results, provided the printed document carries copying permission
37notice identical to this one except for the removal of this paragraph
38(this paragraph not being relevant to the printed manual).
39
40@end ignore
b4d4e8e3 41@end ifinfo
2c5c0674
RP
42@iftex
43@finalout
b4d4e8e3 44@setchapternewpage odd
246504a5 45@settitle Using LD, the GNU linker
f22eee08 46@titlepage
246504a5 47@title Using ld
c8072296 48@subtitle The GNU linker
f22eee08 49@sp 1
cb70c872 50@subtitle @code{ld} version 2
d4e5e3c3 51@subtitle January 1994
c8072296
RP
52@author Steve Chamberlain and Roland Pesch
53@author Cygnus Support
b4d4e8e3
RP
54@page
55
56@tex
b4d4e8e3
RP
57{\parskip=0pt
58\hfill Cygnus Support\par
2c5c0674 59\hfill steve\@cygnus.com, pesch\@cygnus.com\par
ec40bbb8 60\hfill {\it Using LD, the GNU linker}\par
d4e5e3c3
DM
61\hfill Edited by Jeffrey Osier (jeffrey\@cygnus.com)\par
62\hfill and Roland Pesch (pesch\@cygnus.com)\par
b4d4e8e3
RP
63}
64\global\parindent=0pt % Steve likes it this way.
65@end tex
66
f22eee08 67@vskip 0pt plus 1filll
0b0642d6 68Copyright @copyright{} 1991, 92, 93, 94, 1995 Free Software Foundation, Inc.
f22eee08
RP
69
70Permission is granted to make and distribute verbatim copies of
71this manual provided the copyright notice and this permission notice
72are preserved on all copies.
73
74Permission is granted to copy and distribute modified versions of this
75manual under the conditions for verbatim copying, provided also that
76the entire resulting derived work is distributed under the terms of a
77permission notice identical to this one.
78
79Permission is granted to copy and distribute translations of this manual
80into another language, under the above conditions for modified versions.
f22eee08 81@end titlepage
2c5c0674 82@end iftex
b4d4e8e3 83@c FIXME: Talk about importance of *order* of args, cmds to linker!
f22eee08 84
f22eee08 85@ifinfo
ec40bbb8
DM
86@node Top
87@top Using ld
246504a5 88This file documents the GNU linker ld.
f22eee08 89
2c5c0674 90@menu
2d59b2c3
RP
91* Overview:: Overview
92* Invocation:: Invocation
93* Commands:: Command Language
ec40bbb8 94@ifset GENERIC
2d59b2c3 95* Machine Dependent:: Machine Dependent Features
ec40bbb8
DM
96@end ifset
97@ifclear GENERIC
98@ifset H8300
99* H8/300:: ld and the H8/300
100@end ifset
f9d3d71a
ILT
101@ifset Hitachi
102* Hitachi:: ld and other Hitachi micros
103@end ifset
ec40bbb8
DM
104@ifset I960
105* i960:: ld and the Intel 960 family
106@end ifset
107@end ifclear
108@ifclear SingleFormat
2d59b2c3 109* BFD:: BFD
ec40bbb8
DM
110@end ifclear
111@c Following blank line required for remaining bug in makeinfo conds/menus
112
2d59b2c3
RP
113* MRI:: MRI Compatible Script Files
114* Index:: Index
2c5c0674 115@end menu
ec40bbb8 116@end ifinfo
2c5c0674 117
ec40bbb8 118@node Overview
f22eee08
RP
119@chapter Overview
120
2c5c0674
RP
121@cindex GNU linker
122@cindex what is this?
246504a5 123@code{ld} combines a number of object and archive files, relocates
ec40bbb8
DM
124their data and ties up symbol references. Usually the last step in
125compiling a program is to run @code{ld}.
f22eee08 126
246504a5 127@code{ld} accepts Linker Command Language files written in
2c5c0674 128a superset of AT&T's Link Editor Command Language syntax,
b4d4e8e3 129to provide explicit and total control over the linking process.
f22eee08 130
ec40bbb8 131@ifclear SingleFormat
246504a5
RP
132This version of @code{ld} uses the general purpose BFD libraries
133to operate on object files. This allows @code{ld} to read, combine, and
b4d4e8e3
RP
134write object files in many different formats---for example, COFF or
135@code{a.out}. Different formats may be linked together to produce any
d4e5e3c3 136available kind of object file. @xref{BFD}, for more information.
ec40bbb8 137@end ifclear
f22eee08 138
2c5c0674
RP
139Aside from its flexibility, the GNU linker is more helpful than other
140linkers in providing diagnostic information. Many linkers abandon
141execution immediately upon encountering an error; whenever possible,
246504a5 142@code{ld} continues executing, allowing you to identify other errors
2c5c0674
RP
143(or, in some cases, to get an output file in spite of the error).
144
ec40bbb8 145@node Invocation
2c5c0674
RP
146@chapter Invocation
147
246504a5 148The GNU linker @code{ld} is meant to cover a broad range of situations,
2c5c0674 149and to be as compatible as possible with other linkers. As a result,
ec40bbb8 150you have many choices to control its behavior.
2c5c0674 151
ec40bbb8 152@ifset UsesEnvVars
2c5c0674 153@menu
2d59b2c3
RP
154* Options:: Command Line Options
155* Environment:: Environment Variables
2c5c0674 156@end menu
f22eee08 157
ec40bbb8 158@node Options
2c5c0674 159@section Command Line Options
ec40bbb8 160@end ifset
2c5c0674
RP
161
162@cindex command line
163@cindex options
ec40bbb8 164Here is a summary of the options you can use on the @code{ld} command
2c5c0674 165line:
f22eee08 166
ec40bbb8 167@c FIXME! -relax only avail h8/300, i960. Conditionals screwed in examples.
c8072296 168@smallexample
de87cdb4 169ld [ -o @var{output} ] @var{objfile}@dots{}
4551e108
ILT
170 [ -A@var{architecture} ] [ -b @var{input-format} ]
171 [ -Bstatic ] [ -Bdynamic ] [ -Bsymbolic ]
cb70c872 172 [ -c @var{MRI-commandfile} ] [ -d | -dc | -dp ]
d76ae847 173 [ -defsym @var{symbol}=@var{expression} ]
01bc8f35 174 [ -dynamic-linker @var{file} ] [ -embedded-relocs ]
cb70c872 175 [ -e @var{entry} ] [ -F ] [ -F @var{format} ]
d4e5e3c3
DM
176 [ -format @var{input-format} ] [ -g ] [ -G @var{size} ] [ -help ]
177 [ -i ] [ -l@var{archive} ] [ -L@var{searchdir} ] [ -M ]
178 [ -Map @var{mapfile} ] [ -m @var{emulation} ] [ -N | -n ]
4551e108 179 [ -noinhibit-exec ] [ -no-keep-memory ] [ -oformat @var{output-format} ]
d4e5e3c3 180 [ -R @var{filename} ] [ -relax ] [ -retain-symbols-file @var{filename} ]
e54bf1c1
ILT
181 [ -r | -Ur ] [ -rpath @var{dir} ] [-rpath-link @var{dir} ]
182 [ -S ] [ -s ] [ -soname @var{name} ] [ -shared ]
183 [ -sort-common ] [ -stats ] [ -T @var{commandfile} ]
867a1b8a 184 [ -Ttext @var{org} ] [ -Tdata @var{org} ]
c96386c4 185 [ -Tbss @var{org} ] [ -t ] [ -traditional-format ]
01bc8f35 186 [ -u @var{symbol}] [-V] [-v] [ -verbose] [ -version ]
0b0642d6
ILT
187 [ -warn-common ] [ -warn-constructors] [ -warn-once ]
188 [ -y @var{symbol} ] [ -X ] [-x ]
a1ad915d 189 [ -( [ archives ] -) ] [ --start-group [ archives ] --end-group ]
4551e108 190 [ -split-by-reloc @var{count} ] [ -split-by-file ] [ --whole-archive ]
c8072296 191@end smallexample
b4d4e8e3
RP
192
193This plethora of command-line options may seem intimidating, but in
194actual practice few of them are used in any particular context.
2c5c0674 195@cindex standard Unix system
246504a5 196For instance, a frequent use of @code{ld} is to link standard Unix
b4d4e8e3
RP
197object files on a standard, supported Unix system. On such a system, to
198link a file @code{hello.o}:
ec40bbb8 199
f22eee08 200@example
ec40bbb8 201ld -o @var{output} /lib/crt0.o hello.o -lc
f22eee08 202@end example
ec40bbb8 203
d76ae847 204This tells @code{ld} to produce a file called @var{output} as the
b4d4e8e3 205result of linking the file @code{/lib/crt0.o} with @code{hello.o} and
ec40bbb8
DM
206the library @code{libc.a}, which will come from the standard search
207directories. (See the discussion of the @samp{-l} option below.)
f22eee08 208
246504a5 209The command-line options to @code{ld} may be specified in any order, and
ec40bbb8 210may be repeated at will. Repeating most options with a
f22eee08 211different argument will either have no further effect, or override prior
ec40bbb8 212occurrences (those further to the left on the command line) of that
f22eee08
RP
213option.
214
ec40bbb8 215@ifclear SingleFormat
2c5c0674 216The exceptions---which may meaningfully be used more than once---are
ec40bbb8 217@samp{-A}, @samp{-b} (or its synonym @samp{-format}), @samp{-defsym},
0b3499f6
ILT
218@samp{-L}, @samp{-l}, @samp{-R}, @samp{-u}, and @samp{-(} (or its
219synonym @samp{--start-group})..
ec40bbb8
DM
220@end ifclear
221@ifset SingleFormat
222The exceptions---which may meaningfully be used more than once---are
0b3499f6
ILT
223@samp{-A}, @samp{-defsym}, @samp{-L}, @samp{-l}, @samp{-R}, @samp{-u},
224and @samp{-(} (or its synonym @samp{--start-group}).
ec40bbb8 225@end ifset
f22eee08 226
2c5c0674 227@cindex object files
8ddef552 228The list of object files to be linked together, shown as @var{objfile}@dots{},
ec40bbb8
DM
229may follow, precede, or be mixed in with command-line options, except that
230an @var{objfile} argument may not be placed between an option and
b4d4e8e3 231its argument.
f22eee08 232
7f9ae73e
RP
233Usually the linker is invoked with at least one object file, but you can
234specify other forms of binary input files using @samp{-l}, @samp{-R},
235and the script command language. If @emph{no} binary input files at all
236are specified, the linker does not produce any output, and issues the
237message @samp{No input files}.
2c5c0674 238
0b3499f6
ILT
239If the linker can not recognize the format of an object file, it will
240assume that it is a linker script. A script specified in this way
241augments the main linker script used for the link (either the default
242linker script or the one specified by using @samp{-T}). This feature
243permits the linker to link against a file which appears to be an object
244or an archive, but actually merely defines some symbol values, or uses
245@code{INPUT} or @code{GROUP} to load other objects. @xref{Commands}.
246
d4e5e3c3
DM
247For options whose names are a single letter,
248option arguments must either follow the option letter without intervening
f22eee08
RP
249whitespace, or be given as separate arguments immediately following the
250option that requires them.
251
d4e5e3c3
DM
252For options whose names are multiple letters, either one dash or two can
253precede the option name; for example, @samp{--oformat} and
254@samp{-oformat} are equivalent. Arguments to multiple-letter options
255must either be separated from the option name by an equals sign, or be
256given as separate arguments immediately following the option that
257requires them. For example, @samp{--oformat srec} and
258@samp{--oformat=srec} are equivalent. Unique abbreviations of the names
259of multiple-letter options are accepted.
260
f22eee08 261@table @code
ec40bbb8 262@ifset I960
2c5c0674
RP
263@cindex architectures
264@kindex -A@var{arch}
b4d4e8e3 265@item -A@var{architecture}
246504a5
RP
266In the current release of @code{ld}, this option is useful only for the
267Intel 960 family of architectures. In that @code{ld} configuration, the
1c48127e
RP
268@var{architecture} argument identifies the particular architecture in
269the 960 family, enabling some safeguards and modifying the
d76ae847
RP
270archive-library search path. @xref{i960,,@code{ld} and the Intel 960
271family}, for details.
b4d4e8e3 272
246504a5 273Future releases of @code{ld} may support similar functionality for
b4d4e8e3 274other architecture families.
ec40bbb8 275@end ifset
b4d4e8e3 276
ec40bbb8 277@ifclear SingleFormat
2c5c0674
RP
278@cindex binary input format
279@kindex -b @var{format}
280@cindex input format
281@item -b @var{input-format}
282@cindex input format
1fb57a5d
RP
283@code{ld} may be configured to support more than one kind of object
284file. If your @code{ld} is configured this way, you can use the
285@samp{-b} option to specify the binary format for input object files
286that follow this option on the command line. Even when @code{ld} is
287configured to support alternative object formats, you don't usually need
288to specify this, as @code{ld} should be configured to expect as a
289default input format the most usual format on each machine.
290@var{input-format} is a text string, the name of a particular format
291supported by the BFD libraries. (You can list the available binary
292formats with @samp{objdump -i}.) @w{@samp{-format @var{input-format}}}
293has the same effect, as does the script command @code{TARGET}.
294@xref{BFD}.
2c5c0674
RP
295
296You may want to use this option if you are linking files with an unusual
ec40bbb8 297binary format. You can also use @samp{-b} to switch formats explicitly (when
2c5c0674 298linking object files of different formats), by including
ec40bbb8 299@samp{-b @var{input-format}} before each group of object files in a
2c5c0674
RP
300particular format.
301
302The default format is taken from the environment variable
ec40bbb8
DM
303@code{GNUTARGET}.
304@ifset UsesEnvVars
305@xref{Environment}.
306@end ifset
307You can also define the input
867a1b8a 308format from a script, using the command @code{TARGET}; see @ref{Option
d76ae847 309Commands}.
ec40bbb8 310@end ifclear
2c5c0674
RP
311
312@kindex -Bstatic
f22eee08 313@item -Bstatic
4551e108
ILT
314Do not link against shared libraries. This is only meaningful on
315platforms for which shared libraries are supported.
316
317@kindex -Bdynamic
318@item -Bdynamic
319Link against dynamic libraries. This is only meaningful on platforms
320for which shared libraries are supported. This option is normally the
321default on such platforms.
322
323@kindex -Bsymbolic
324@item -Bsymbolic
325When creating a shared library, bind references to global symbols to the
326definition within the shared library, if any. Normally, it is possible
327for a program linked against a shared library to override the definition
328within the shared library. This option is only meaningful on ELF
329platforms which support shared libraries.
f22eee08 330
2d59b2c3
RP
331@kindex -c @var{MRI-cmdfile}
332@cindex compatibility, MRI
333@item -c @var{MRI-commandfile}
334For compatibility with linkers produced by MRI, @code{ld} accepts script
335files written in an alternate, restricted command language, described in
d76ae847 336@ref{MRI,,MRI Compatible Script Files}. Introduce MRI script files with
ec40bbb8 337the option @samp{-c}; use the @samp{-T} option to run linker
d76ae847 338scripts written in the general-purpose @code{ld} scripting language.
8ddef552
DM
339If @var{MRI-cmdfile} does not exist, @code{ld} looks for it in the directories
340specified by any @samp{-L} options.
b4d4e8e3 341
2c5c0674
RP
342@cindex common allocation
343@kindex -d
b4d4e8e3 344@item -d
2c5c0674 345@kindex -dc
b4d4e8e3 346@itemx -dc
2c5c0674 347@kindex -dp
b4d4e8e3
RP
348@itemx -dp
349These three options are equivalent; multiple forms are supported for
ec40bbb8 350compatibility with other linkers. They
2c5c0674 351assign space to common symbols even if a relocatable output file is
ec40bbb8 352specified (with @samp{-r}). The script command
867a1b8a 353@code{FORCE_COMMON_ALLOCATION} has the same effect. @xref{Option
d76ae847 354Commands}.
b4d4e8e3 355
2c5c0674 356@cindex symbols, from command line
d76ae847
RP
357@kindex -defsym @var{symbol}=@var{exp}
358@item -defsym @var{symbol}=@var{expression}
2c5c0674
RP
359Create a global symbol in the output file, containing the absolute
360address given by @var{expression}. You may use this option as many
361times as necessary to define multiple symbols in the command line. A
362limited form of arithmetic is supported for the @var{expression} in this
363context: you may give a hexadecimal constant or the name of an existing
364symbol, or use @code{+} and @code{-} to add or subtract hexadecimal
365constants or symbols. If you need more elaborate expressions, consider
d76ae847
RP
366using the linker command language from a script (@pxref{Assignment, ,
367Assignment: Symbol Definitions}). @emph{Note:} there should be no
368white space between @var{symbol}, the equals sign (``@key{=}''), and
369@var{expression}.
2c5c0674 370
a1ad915d
ILT
371@ifset GENERIC
372@cindex dynamic linker, from command line
373@kindex -dynamic-linker @var{file}
374@item -dynamic-linker @var{file}
375Set the name of the dynamic linker. This is only meaningful when
376generating dynamically linked ELF executables. The default dynamic
377linker is normally correct; don't use this unless you know what you are
378doing.
379@end ifset
380
01bc8f35
ILT
381@cindex MIPS embedded PIC code
382@kindex -embedded-relocs
383@item -embedded-relocs
384This option is only meaningful when linking MIPS embedded PIC code,
385generated by the -membedded-pic option to the GNU compiler and
386assembler. It causes the linker to create a table which may be used at
387runtime to relocate any data which was statically initialized to pointer
388values. See the code in testsuite/ld-empic for details.
389
2c5c0674
RP
390@cindex entry point, from command line
391@kindex -e @var{entry}
f22eee08
RP
392@item -e @var{entry}
393Use @var{entry} as the explicit symbol for beginning execution of your
b4d4e8e3
RP
394program, rather than the default entry point. @xref{Entry Point}, for a
395discussion of defaults and other ways of specifying the
396entry point.
f22eee08 397
ec40bbb8 398@ifclear SingleFormat
2c5c0674 399@kindex -F
b4d4e8e3 400@item -F
2c5c0674 401@itemx -F@var{format}
ec40bbb8
DM
402Ignored. Some older linkers used this option throughout a compilation
403toolchain for specifying object-file format for both input and output
404object files. The mechanisms @code{ld} uses for this purpose (the
867a1b8a
DM
405@samp{-b} or @samp{-format} options for input files, @samp{-oformat}
406option or the @code{TARGET} command in linker scripts for output files,
407the @code{GNUTARGET} environment variable) are more flexible, but
408@code{ld} accepts the @samp{-F} option for compatibility with scripts
409written to call the old linker.
2c5c0674
RP
410
411@kindex -format
412@item -format @var{input-format}
ec40bbb8
DM
413Synonym for @samp{-b @var{input-format}}.
414@end ifclear
2c5c0674
RP
415
416@kindex -g
b4d4e8e3 417@item -g
ec40bbb8 418Ignored. Provided for compatibility with other tools.
b4d4e8e3 419
8ddef552
DM
420@kindex -G
421@cindex object size
422@item -G@var{value}
423@itemx -G @var{value}
424Set the maximum size of objects to be optimized using the GP register to
425@var{size} under MIPS ECOFF. Ignored for other object file formats.
426
de87cdb4
DM
427@cindex help
428@cindex usage
d4e5e3c3
DM
429@kindex -help
430@item -help
de87cdb4 431Print a summary of the command-line options on the standard output and exit.
de87cdb4 432
2c5c0674
RP
433@kindex -i
434@cindex incremental link
f22eee08 435@item -i
ec40bbb8 436Perform an incremental link (same as option @samp{-r}).
f22eee08 437
2c5c0674 438@cindex archive files, from cmd line
de87cdb4 439@kindex -l@var{archive}
b4d4e8e3 440@item -l@var{ar}
de87cdb4 441Add archive file @var{archive} to the list of files to link. This
f22eee08 442option may be used any number of times. @code{ld} will search its
de87cdb4 443path-list for occurrences of @code{lib@var{ar}.a} for every @var{archive}
f22eee08
RP
444specified.
445
2c5c0674
RP
446@cindex search directory, from cmd line
447@kindex -L@var{dir}
b4d4e8e3 448@item -L@var{searchdir}
836a5ee4 449@itemx -L @var{searchdir}
ec40bbb8 450Add path @var{searchdir} to the list of paths that @code{ld} will search
8ddef552 451for archive libraries and @code{ld} control scripts. You may use this
0b0642d6
ILT
452option any number of times. The directories are searched in the order
453in which they are specified on the command line. Directories specified
454on the command line are searched before the default directories. All
455@code{-L} options apply to all @code{-l} options, regardless of the
456order in which the options appear.
f22eee08 457
ec40bbb8 458@ifset UsesEnvVars
2c5c0674 459The default set of paths searched (without being specified with
ec40bbb8
DM
460@samp{-L}) depends on which emulation mode @code{ld} is using, and in
461some cases also on how it was configured. @xref{Environment}.
462@end ifset
463
464The paths can also be specified in a link script with the
0b0642d6
ILT
465@code{SEARCH_DIR} command. Directories specified this way are searched
466at the point in which the linker script appears in the command line.
f22eee08 467
2c5c0674
RP
468@cindex link map
469@kindex -M
f22eee08 470@item -M
e54bf1c1
ILT
471Print (to the standard output) a link map---diagnostic information about
472where symbols are mapped by @code{ld}, and information on global common
473storage allocation.
f22eee08 474
d18a4527
DM
475@cindex link map
476@kindex -Map
477@item -Map @var{mapfile}
478Print to the file @var{mapfile} a link map---diagnostic information
479about where symbols are mapped by @code{ld}, and information on global
480common storage allocation.
481
8ddef552
DM
482@cindex emulation
483@kindex -m @var{emulation}
484@item -m@var{emulation}
485@itemx -m @var{emulation}
486Emulate the @var{emulation} linker. You can list the available
01bc8f35
ILT
487emulations with the @samp{--verbose} or @samp{-V} options. The default
488depends on how your @code{ld} was configured.
8ddef552 489
2c5c0674
RP
490@kindex -N
491@cindex read/write from cmd line
492@kindex OMAGIC
f22eee08 493@item -N
ec40bbb8
DM
494Set the text and data sections to be readable and writable. Also, do
495not page-align the data segment. If the output format supports Unix
496style magic numbers, mark the output as @code{OMAGIC}.
f22eee08 497
2c5c0674
RP
498@kindex -n
499@cindex read-only text
500@kindex NMAGIC
d4e5e3c3 501@item -n
ec40bbb8
DM
502Set the text segment to be read only, and mark the output as
503@code{NMAGIC} if possible.
f22eee08 504
b4d4e8e3 505@item -noinhibit-exec
2c5c0674
RP
506@cindex output file after errors
507@kindex -noinhibit-exec
ec40bbb8 508Retain the executable output file whenever it is still usable.
b4d4e8e3 509Normally, the linker will not produce an output file if it encounters
ec40bbb8
DM
510errors during the link process; it exits without writing an output file
511when it issues any error whatsoever.
b4d4e8e3 512
4551e108
ILT
513@item -no-keep-memory
514@cindex memory usage
515@kindex -no-keep-memory
516@code{ld} normally optimizes for speed over memory usage by caching the
517symbol tables of input files in memory. This option tells @code{ld} to
518instead optimize for memory usage, by rereading the symbol tables as
519necessary. This may be required if @code{ld} runs out of memory space
520while linking a large executable.
521
f22eee08 522@item -o @var{output}
2c5c0674
RP
523@kindex -o @var{output}
524@cindex naming the output file
ec40bbb8
DM
525Use @var{output} as the name for the program produced by @code{ld}; if this
526option is not specified, the name @file{a.out} is used by default. The
2c5c0674 527script command @code{OUTPUT} can also specify the output file name.
f22eee08 528
7f9ae73e 529@ifclear SingleFormat
346535cc
DM
530@kindex -oformat
531@item -oformat @var{output-format}
1fb57a5d
RP
532@code{ld} may be configured to support more than one kind of object
533file. If your @code{ld} is configured this way, you can use the
534@samp{-oformat} option to specify the binary format for the output
535object file. Even when @code{ld} is configured to support alternative
536object formats, you don't usually need to specify this, as @code{ld}
537should be configured to produce as a default output format the most
538usual format on each machine. @var{output-format} is a text string, the
539name of a particular format supported by the BFD libraries. (You can
540list the available binary formats with @samp{objdump -i}.) The script
541command @code{OUTPUT_FORMAT} can also specify the output format, but
542this option overrides it. @xref{BFD}.
7f9ae73e 543@end ifclear
346535cc 544
b4d4e8e3 545@item -R @var{filename}
2c5c0674
RP
546@kindex -R @var{file}
547@cindex symbol-only input
867a1b8a
DM
548Read symbol names and their addresses from @var{filename}, but do not
549relocate it or include it in the output. This allows your output file
550to refer symbolically to absolute locations of memory defined in other
551programs.
ec40bbb8 552
1c48127e
RP
553@kindex -relax
554@cindex synthesizing linker
555@cindex relaxing addressing modes
d4e5e3c3 556@item -relax
1fb57a5d
RP
557An option with machine dependent effects.
558@ifset GENERIC
559Currently this option is only supported on the H8/300 and the Intel 960.
560@end ifset
ec40bbb8
DM
561@ifset H8300
562@xref{H8/300,,@code{ld} and the H8/300}.
563@end ifset
1fb57a5d
RP
564@ifset I960
565@xref{i960,, @code{ld} and the Intel 960 family}.
566@end ifset
1c48127e 567
1fb57a5d 568On some platforms, the @samp{-relax} option performs global optimizations that
ec40bbb8 569become possible when the linker resolves addressing in the program, such
1c48127e
RP
570as relaxing address modes and synthesizing new instructions in the
571output object file.
572
1fb57a5d 573@ifset GENERIC
1c48127e 574On platforms where this is not supported, @samp{-relax} is accepted, but
ec40bbb8 575ignored.
1fb57a5d 576@end ifset
1c48127e 577
7c8fab26
RP
578@item -retain-symbols-file @var{filename}
579@cindex retaining specified symbols
580@cindex stripping all but some symbols
581@cindex symbols, retaining selectively
582Retain @emph{only} the symbols listed in the file @var{filename},
583discarding all others. @var{filename} is simply a flat file, with one
584symbol name per line. This option is especially useful in environments
585@ifset GENERIC
586(such as VxWorks)
587@end ifset
588where a large global symbol table is accumulated gradually, to conserve
589run-time memory.
590
591@samp{-retain-symbols-file} does @emph{not} discard undefined symbols,
592or symbols needed for relocations.
593
594You may only specify @samp{-retain-symbols-file} once in the command
595line. It overrides @samp{-s} and @samp{-S}.
596
a1ad915d
ILT
597@ifset GENERIC
598@item -rpath @var{dir}
599@cindex runtime library search path
600@kindex -rpath
0b0642d6
ILT
601Add a directory to the runtime library search path. This is used when
602linking an ELF executable with shared objects. All @code{-rpath}
603arguments are concatenated and passed to the runtime linker, which uses
e54bf1c1
ILT
604them to locate shared objects at runtime. The @code{-rpath} option is
605also used when locating shared objects which are needed by shared
606objects explicitly included in the link; see the description of the
607@code{-rpath-link} option.
0b0642d6
ILT
608
609The @code{-rpath} option may also be used on SunOS. By default, on
610SunOS, the linker will form a runtime search patch out of all the
e54bf1c1 611@code{-L} options it is given. If a @code{-rpath} option is used, the
0b0642d6
ILT
612runtime search path will be formed exclusively using the @code{-rpath}
613options, ignoring the @code{-L} options. This can be useful when using
614gcc, which adds many @code{-L} options which may be on NFS mounted
615filesystems.
a1ad915d
ILT
616@end ifset
617
e54bf1c1
ILT
618@ifset GENERIC
619@cindex link-time runtime library search path
620@kindex -rpath-link
621@item -rpath-link @var{DIR}
622When using ELF or SunOS, one shared library may require another. This
623happens when an @code{ld -shared} link includes a shared library as one
624of the input files.
625
626When the linker encounters such a dependency when doing a non-shared,
627non-relocateable link, it will automatically try to locate the required
628shared library and include it in the link, if it is not included
629explicitly. In such a case, the @code{-rpath-link} option
630specifies the first set of directories to search. The
631@code{-rpath-link} option may specify a sequence of directory names
632either by specifying a list of names separated by colons, or by
633appearing multiple times.
634
635The linker uses the following search paths to locate required shared
636libraries.
637@enumerate
638@item
639Any directories specified by @code{-rpath-link} options.
640@item
641Any directories specified by @code{-rpath} options. The difference
642between @code{-rpath} and @code{-rpath-link} is that directories
643specified by @code{-rpath} options are included in the executable and
644used at runtime, whereas the @code{-rpath-link} option is only effective
645at link time.
646@item
647On SunOS, if the @code{-rpath} option was not used, search any
648directories specified using @code{-L} options.
649@item
650For a native linker, the contents of the environment variable
651@code{LD_LIBRARY_PATH}.
652@item
653The default directories, normally @file{/lib} and @file{/usr/lib}.
654@end enumerate
655
656If the required shared library is not found, the linker will issue a
657warning and continue with the link.
658@end ifset
659
b4d4e8e3 660@cindex partial link
2c5c0674
RP
661@cindex relocatable output
662@kindex -r
d4e5e3c3 663@item -r
ec40bbb8 664Generate relocatable output---i.e., generate an output file that can in
246504a5 665turn serve as input to @code{ld}. This is often called @dfn{partial
2c5c0674
RP
666linking}. As a side effect, in environments that support standard Unix
667magic numbers, this option also sets the output file's magic number to
668@code{OMAGIC}.
669@c ; see @code{-N}.
670If this option is not specified, an absolute file is produced. When
671linking C++ programs, this option @emph{will not} resolve references to
ec40bbb8 672constructors; to do that, use @samp{-Ur}.
2c5c0674 673
867a1b8a 674This option does the same thing as @samp{-i}.
f22eee08 675
2c5c0674
RP
676@kindex -S
677@cindex strip debugger symbols
d4e5e3c3 678@item -S
ec40bbb8 679Omit debugger symbol information (but not all symbols) from the output file.
f22eee08 680
2c5c0674
RP
681@kindex -s
682@cindex strip all symbols
d4e5e3c3 683@item -s
ec40bbb8 684Omit all symbol information from the output file.
f22eee08 685
0b3499f6
ILT
686@ifset GENERIC
687@item -soname @var{name}
688@cindex runtime library name
689@kindex -soname
690When creating an ELF shared object, set the internal DT_SONAME field to
691the specified name. When an executable is linked with a shared object
692which has a DT_SONAME field, then when the executable is run the dynamic
693linker will attempt to load the shared object specified by the DT_SONAME
694field rather than the using the file name given to the linker.
695@end ifset
696
4551e108
ILT
697@item -shared
698@cindex shared libraries
699@kindex -shared
e54bf1c1
ILT
700Create a shared library. This is currently only supported on ELF and
701SunOS platforms. On SunOS, the linker will automatically create a
702shared library if the @code{-e} option is not used and there are
703undefined symbols in the link.
4551e108 704
2a28d8b0 705@item -sort-common
4551e108 706@kindex -sort-common
2a28d8b0
DM
707Normally, when @code{ld} places the global common symbols in the
708appropriate output sections, it sorts them by size. First come all the
709one byte symbols, then all the two bytes, then all the four bytes, and
836a5ee4
DM
710then everything else. This is to prevent gaps between symbols due to
711alignment constraints. This option disables that sorting.
2a28d8b0 712
01bc8f35
ILT
713@item -split-by-reloc @var{count}
714@kindex split
715Trys to creates extra sections in the output file so that no single output section
716in the file contains more than @var{count} relocations. This
717is useful when generating huge relocatable for downloading into
718certain real time kernels with the COFF object file format; since
719COFF cannot represent more than 65535 relocations in a single section.
720Note that this will fail to work with object file formats which do not
721support arbitrary sections. The linker will not split up individual input
722sections for redistribution, so if a single input section contains
723more than @var{count} relocations one output section will contain that
724many relocations.
725
726@item -split-by-file
727@kindex split
728Similar to -split-by-reloc but creates a new output section for each
729input file.
730
8594f568
SS
731@item -stats
732Compute and display statistics about the operation of the linker,
733such as execution time and memory usage.
734
867a1b8a
DM
735@item -Tbss @var{org}
736@kindex -Tbss @var{org}
737@itemx -Tdata @var{org}
738@kindex -Tdata @var{org}
739@itemx -Ttext @var{org}
740@kindex -Ttext @var{org}
2c5c0674
RP
741@cindex segment origins, cmd line
742Use @var{org} as the starting address for---respectively---the
b4d4e8e3 743@code{bss}, @code{data}, or the @code{text} segment of the output file.
ec40bbb8
DM
744@var{org} must be a single hexadecimal integer;
745for compatibility with other linkers, you may omit the leading
d76ae847 746@samp{0x} usually associated with hexadecimal values.
f22eee08 747
b4d4e8e3
RP
748@item -T @var{commandfile}
749@itemx -T@var{commandfile}
2c5c0674 750@kindex -T @var{script}
2d59b2c3 751@cindex script files
de87cdb4 752Read link commands from the file @var{commandfile}. These commands
8de26d62
DM
753replace @code{ld}'s default link script (rather than adding
754to it), so @var{commandfile} must specify everything necessary to describe
de87cdb4
DM
755the target format. @xref{Commands}. If @var{commandfile} does not
756exist, @code{ld} looks for it in the directories specified by any
757preceding @samp{-L} options. Multiple @samp{-T} options accumulate.
f22eee08 758
2c5c0674
RP
759@kindex -t
760@cindex verbose
761@cindex input files, displaying
d4e5e3c3 762@item -t
ec40bbb8 763Print the names of the input files as @code{ld} processes them.
f22eee08 764
c96386c4
ILT
765@kindex -traditional-format
766@cindex traditional format
767@item -traditional-format
768For some targets, the output of @code{ld} is different in some ways from
769the output of some existing linker. This switch requests @code{ld} to
770use the traditional format instead.
771
772@cindex dbx
773For example, on SunOS, @code{ld} combines duplicate entries in the
774symbol string table. This can reduce the size of an output file with
775full debugging information by over 30 percent. Unfortunately, the SunOS
776@code{dbx} program can not read the resulting program (@code{gdb} has no
777trouble). The @samp{-traditional-format} switch tells @code{ld} to not
778combine duplicate entries.
779
de87cdb4
DM
780@item -u @var{symbol}
781@kindex -u @var{symbol}
2c5c0674 782@cindex undefined symbol
de87cdb4 783Force @var{symbol} to be entered in the output file as an undefined symbol.
ec40bbb8
DM
784Doing this may, for example, trigger linking of additional modules from
785standard libraries. @samp{-u} may be repeated with different option
2c5c0674
RP
786arguments to enter additional undefined symbols.
787@c Nice idea, but no such command: This option is equivalent
788@c to the @code{EXTERN} linker command.
f22eee08 789
2c5c0674 790@kindex -Ur
b4d4e8e3 791@cindex constructors
d4e5e3c3 792@item -Ur
b4d4e8e3 793For anything other than C++ programs, this option is equivalent to
ec40bbb8
DM
794@samp{-r}: it generates relocatable output---i.e., an output file that can in
795turn serve as input to @code{ld}. When linking C++ programs, @samp{-Ur}
1fb57a5d 796@emph{does} resolve references to constructors, unlike @samp{-r}.
3e27cc11 797It does not work to use @samp{-Ur} on files that were themselves linked
1fb57a5d 798with @samp{-Ur}; once the constructor table has been built, it cannot
3e27cc11
DM
799be added to. Use @samp{-Ur} only for the last partial link, and
800@samp{-r} for the others.
b4d4e8e3 801
01bc8f35 802@kindex --verbose
8ddef552 803@cindex version
01bc8f35 804@item --verbose
1fb57a5d
RP
805Display the version number for @code{ld} and list the linker emulations
806supported. Display which input files can and cannot be opened.
8ddef552 807
2c5c0674 808@kindex -v
01bc8f35 809@kindex -V
b4d4e8e3 810@cindex version
d4e5e3c3 811@item -v
01bc8f35
ILT
812@itemx -V
813Display the version number for @code{ld}. The @code{-V} option also
814lists the supported emulations.
de87cdb4 815
d4e5e3c3
DM
816@item -version
817@kindex -version
de87cdb4 818Display the version number for @code{ld} and exit.
b4d4e8e3 819
2a28d8b0 820@item -warn-common
7f9ae73e
RP
821@kindex -warn-comon
822@cindex warnings, on combining symbols
823@cindex combining symbols, warnings on
2a28d8b0
DM
824Warn when a common symbol is combined with another common symbol or with
825a symbol definition. Unix linkers allow this somewhat sloppy practice,
826but linkers on some other operating systems do not. This option allows
827you to find potential problems from combining global symbols.
1cd4cca9
DM
828Unfortunately, some C libraries use this practice, so you may get some
829warnings about symbols in the libraries as well as in your programs.
2a28d8b0
DM
830
831There are three kinds of global symbols, illustrated here by C examples:
832
833@table @samp
834@item int i = 1;
835A definition, which goes in the initialized data section of the output
836file.
837
838@item extern int i;
839An undefined reference, which does not allocate space.
840There must be either a definition or a common symbol for the
841variable somewhere.
842
843@item int i;
844A common symbol. If there are only (one or more) common symbols for a
845variable, it goes in the uninitialized data area of the output file.
846The linker merges multiple common symbols for the same variable into a
847single symbol. If they are of different sizes, it picks the largest
848size. The linker turns a common symbol into a declaration, if there is
849a definition of the same variable.
850@end table
851
852The @samp{-warn-common} option can produce five kinds of warnings. Each
853warning consists of a pair of lines: the first describes the symbol just
854encountered, and the second describes the previous symbol encountered
855with the same name. One or both of the two symbols will be a common
856symbol.
857
858@enumerate
859@item
860Turning a common symbol into a reference, because there is already a
861definition for the symbol.
862@smallexample
8920addc
RP
863@var{file}(@var{section}): warning: common of `@var{symbol}'
864 overridden by definition
2a28d8b0
DM
865@var{file}(@var{section}): warning: defined here
866@end smallexample
867
868@item
869Turning a common symbol into a reference, because a later definition for
870the symbol is encountered. This is the same as the previous case,
871except that the symbols are encountered in a different order.
872@smallexample
8920addc
RP
873@var{file}(@var{section}): warning: definition of `@var{symbol}'
874 overriding common
2a28d8b0
DM
875@var{file}(@var{section}): warning: common is here
876@end smallexample
877
878@item
879Merging a common symbol with a previous same-sized common symbol.
880@smallexample
8920addc
RP
881@var{file}(@var{section}): warning: multiple common
882 of `@var{symbol}'
2a28d8b0
DM
883@var{file}(@var{section}): warning: previous common is here
884@end smallexample
885
886@item
887Merging a common symbol with a previous larger common symbol.
888@smallexample
8920addc
RP
889@var{file}(@var{section}): warning: common of `@var{symbol}'
890 overridden by larger common
2a28d8b0
DM
891@var{file}(@var{section}): warning: larger common is here
892@end smallexample
893
894@item
895Merging a common symbol with a previous smaller common symbol. This is
896the same as the previous case, except that the symbols are
897encountered in a different order.
898@smallexample
8920addc
RP
899@var{file}(@var{section}): warning: common of `@var{symbol}'
900 overriding smaller common
2a28d8b0
DM
901@var{file}(@var{section}): warning: smaller common is here
902@end smallexample
903@end enumerate
904
0b0642d6
ILT
905@kindex -warn-constructors
906@item -warn-constructors
907Warn if any global constructors are used. This is only useful for a few
908object file formats. For formats like COFF or ELF, the linker can not
909detect the use of global constructors.
910
01bc8f35
ILT
911@kindex -warn-once
912@cindex warnings, on undefined symbols
913@cindex undefined symbols, warnings on
914@item -warn-once
915Only warn once for each undefined symbol, rather than once per module
916which refers to it.
917
4551e108
ILT
918@kindex --whole-archive
919@cindex including an entire archive
920For each archive mentioned on the command line, include every object
921file in the archive in the link, rather than searching the archive for
922the required object files. This is normally used to turn an archive
923file into a shared library, forcing every object to be included in the
924resulting shared library.
925
2c5c0674
RP
926@kindex -X
927@cindex local symbols, deleting
928@cindex L, deleting symbols beginning
d4e5e3c3 929@item -X
01bc8f35
ILT
930Delete all temporary local symbols. For most targets, this is all local
931symbols whose names begin with @samp{L}.
f22eee08 932
2c5c0674
RP
933@kindex -x
934@cindex deleting local symbols
d4e5e3c3 935@item -x
01bc8f35 936Delete all local symbols.
b4d4e8e3 937
1fb57a5d
RP
938@item -y @var{symbol}
939@kindex -y @var{symbol}
d76ae847 940@cindex symbol tracing
ec40bbb8 941Print the name of each linked file in which @var{symbol} appears. This
d76ae847
RP
942option may be given any number of times. On many systems it is necessary
943to prepend an underscore.
944
945This option is useful when you have an undefined symbol in your link but
946don't know where the reference is coming from.
a1ad915d
ILT
947
948@item -( @var{archives} -)
949@itemx --start-group @var{archives} --end-group
950@kindex -(
951@cindex groups of archives
952The @var{archives} should be a list of archive files. They may be
953either explicit file names, or @samp{-l} options.
954
955The specified archives are searched repeatedly until no new undefined
956references are created. Normally, an archive is searched only once in
957the order that it is specified on the command line. If a symbol in that
958archive is needed to resolve an undefined symbol referred to by an
959object in an archive that appears later on the command line, the linker
960would not be able to resolve that reference. By grouping the archives,
961they all be searched repeatedly until all possible references are
962resolved.
963
964Using this option has a significant performance cost. It is best to use
965it only when there are unavoidable circular references between two or
966more archives.
f22eee08 967@end table
b4d4e8e3 968
ec40bbb8
DM
969@ifset UsesEnvVars
970@node Environment
2c5c0674
RP
971@section Environment Variables
972
d76ae847
RP
973You can change the behavior of @code{ld} with the environment
974variable @code{GNUTARGET}.
2c5c0674
RP
975
976@kindex GNUTARGET
977@cindex default input format
978@code{GNUTARGET} determines the input-file object format if you don't
ec40bbb8 979use @samp{-b} (or its synonym @samp{-format}). Its value should be one
2c5c0674 980of the BFD names for an input format (@pxref{BFD}). If there is no
246504a5 981@code{GNUTARGET} in the environment, @code{ld} uses the natural format
8920addc 982of the target. If @code{GNUTARGET} is set to @code{default} then BFD attempts to discover the
2c5c0674
RP
983input format by examining binary input files; this method often
984succeeds, but there are potential ambiguities, since there is no method
ec40bbb8 985of ensuring that the magic number used to specify object-file formats is
2c5c0674
RP
986unique. However, the configuration procedure for BFD on each system
987places the conventional format for that system first in the search-list,
988so ambiguities are resolved in favor of convention.
ec40bbb8 989@end ifset
2c5c0674 990
ec40bbb8 991@node Commands
2c5c0674 992@chapter Command Language
f22eee08 993
2c5c0674 994@cindex command files
ec40bbb8 995The command language provides explicit control over the link process,
b4d4e8e3 996allowing complete specification of the mapping between the linker's
ec40bbb8 997input files and its output. It controls:
b4d4e8e3 998@itemize @bullet
2c5c0674
RP
999@item
1000input files
1001@item
1002file formats
1003@item
867a1b8a 1004output file layout
2c5c0674
RP
1005@item
1006addresses of sections
1007@item
1008placement of common blocks
b4d4e8e3 1009@end itemize
f22eee08 1010
2c5c0674 1011You may supply a command file (also known as a link script) to the
ec40bbb8 1012linker either explicitly through the @samp{-T} option, or implicitly as
2c5c0674 1013an ordinary file. If the linker opens a file which it cannot recognize
867a1b8a 1014as a supported object or archive format, it reports an error.
2c5c0674 1015
2c5c0674 1016@menu
2d59b2c3
RP
1017* Scripts:: Linker Scripts
1018* Expressions:: Expressions
1019* MEMORY:: MEMORY Command
1020* SECTIONS:: SECTIONS Command
1021* Entry Point:: The Entry Point
867a1b8a 1022* Option Commands:: Option Commands
2c5c0674
RP
1023@end menu
1024
ec40bbb8 1025@node Scripts
b4d4e8e3 1026@section Linker Scripts
246504a5 1027The @code{ld} command language is a collection of statements; some are
ec40bbb8
DM
1028simple keywords setting a particular option, some are used to select and
1029group input files or name output files; and two statement
b4d4e8e3
RP
1030types have a fundamental and pervasive impact on the linking process.
1031
2c5c0674
RP
1032@cindex fundamental script commands
1033@cindex commands, fundamental
1034@cindex output file layout
1035@cindex layout of output file
246504a5 1036The most fundamental command of the @code{ld} command language is the
b4d4e8e3
RP
1037@code{SECTIONS} command (@pxref{SECTIONS}). Every meaningful command
1038script must have a @code{SECTIONS} command: it specifies a
1039``picture'' of the output file's layout, in varying degrees of detail.
1040No other command is required in all cases.
1041
1042The @code{MEMORY} command complements @code{SECTIONS} by describing the
2c5c0674 1043available memory in the target architecture. This command is optional;
246504a5 1044if you don't use a @code{MEMORY} command, @code{ld} assumes sufficient
2c5c0674
RP
1045memory is available in a contiguous block for all output.
1046@xref{MEMORY}.
b4d4e8e3 1047
2c5c0674
RP
1048@cindex comments
1049You may include comments in linker scripts just as in C: delimited
1050by @samp{/*} and @samp{*/}. As in C, comments are syntactically
1051equivalent to whitespace.
1052
ec40bbb8 1053@node Expressions
f22eee08 1054@section Expressions
2c5c0674
RP
1055@cindex expression syntax
1056@cindex arithmetic
b4d4e8e3
RP
1057Many useful commands involve arithmetic expressions. The syntax for
1058expressions in the command language is identical to that of C
1059expressions, with the following features:
1060@itemize @bullet
2c5c0674
RP
1061@item
1062All expressions evaluated as integers and
f22eee08 1063are of ``long'' or ``unsigned long'' type.
2c5c0674
RP
1064@item
1065All constants are integers.
1066@item
1067All of the C arithmetic operators are provided.
1068@item
1069You may reference, define, and create global variables.
1070@item
1071You may call special purpose built-in functions.
b4d4e8e3 1072@end itemize
f22eee08 1073
2c5c0674 1074@menu
2d59b2c3
RP
1075* Integers:: Integers
1076* Symbols:: Symbol Names
1077* Location Counter:: The Location Counter
1078* Operators:: Operators
1079* Evaluation:: Evaluation
1080* Assignment:: Assignment: Defining Symbols
867a1b8a 1081* Arithmetic Functions:: Built-In Functions
2c5c0674
RP
1082@end menu
1083
ec40bbb8 1084@node Integers
f22eee08 1085@subsection Integers
2c5c0674
RP
1086@cindex integer notation
1087@cindex octal integers
f22eee08
RP
1088An octal integer is @samp{0} followed by zero or more of the octal
1089digits (@samp{01234567}).
b4d4e8e3 1090@example
2c5c0674 1091_as_octal = 0157255;
b4d4e8e3 1092@end example
f22eee08 1093
2c5c0674 1094@cindex decimal integers
f22eee08
RP
1095A decimal integer starts with a non-zero digit followed by zero or
1096more digits (@samp{0123456789}).
b4d4e8e3 1097@example
2c5c0674 1098_as_decimal = 57005;
b4d4e8e3 1099@end example
f22eee08 1100
2c5c0674
RP
1101@cindex hexadecimal integers
1102@kindex 0x
f22eee08
RP
1103A hexadecimal integer is @samp{0x} or @samp{0X} followed by one or
1104more hexadecimal digits chosen from @samp{0123456789abcdefABCDEF}.
b4d4e8e3
RP
1105@example
1106_as_hex = 0xdead;
1107@end example
f22eee08 1108
2c5c0674 1109@cindex negative integers
ec40bbb8 1110To write a negative integer, use
b4d4e8e3
RP
1111the prefix operator @samp{-}; @pxref{Operators}.
1112@example
b4d4e8e3
RP
1113_as_neg = -57005;
1114@end example
f22eee08 1115
2c5c0674
RP
1116@cindex scaled integers
1117@cindex K and M integer suffixes
1118@cindex M and K integer suffixes
1119@cindex suffixes for integers
1120@cindex integer suffixes
b4d4e8e3
RP
1121Additionally the suffixes @code{K} and @code{M} may be used to scale a
1122constant by
c8072296
RP
1123@c TEXI2ROFF-KILL
1124@ifinfo
1125@c END TEXI2ROFF-KILL
1126@code{1024} or @code{1024*1024}
1127@c TEXI2ROFF-KILL
1128@end ifinfo
f22eee08 1129@tex
b4d4e8e3 1130${\rm 1024}$ or ${\rm 1024}^2$
f22eee08 1131@end tex
c8072296 1132@c END TEXI2ROFF-KILL
ec40bbb8 1133respectively. For example, the following all refer to the same quantity:
f22eee08
RP
1134
1135@example
2c5c0674
RP
1136 _fourk_1 = 4K;
1137 _fourk_2 = 4096;
1138 _fourk_3 = 0x1000;
f22eee08 1139@end example
b4d4e8e3 1140
ec40bbb8 1141@node Symbols
b4d4e8e3 1142@subsection Symbol Names
2c5c0674
RP
1143@cindex symbol names
1144@cindex names
1145@cindex quoted symbol names
1146@kindex "
1fb57a5d
RP
1147Unless quoted, symbol names start with a letter, underscore, or point
1148and may include any letters, underscores, digits, points,
1149and hyphens. Unquoted symbol names must not conflict with any
b4d4e8e3
RP
1150keywords. You can specify a symbol which contains odd characters or has
1151the same name as a keyword, by surrounding the symbol name in double quotes:
1152@example
1153 "SECTION" = 9;
1154 "with a space" = "also with a space" + 10;
1155@end example
1156
1fb57a5d
RP
1157Since symbols can contain many non-alphabetic characters, it is safest
1158to delimit symbols with spaces. For example, @samp{A-B} is one symbol,
1159whereas @samp{A - B} is an expression involving subtraction.
1160
ec40bbb8 1161@node Location Counter
b4d4e8e3 1162@subsection The Location Counter
2c5c0674
RP
1163@kindex .
1164@cindex dot
1165@cindex location counter
1166@cindex current output location
b4d4e8e3
RP
1167The special linker variable @dfn{dot} @samp{.} always contains the
1168current output location counter. Since the @code{.} always refers to
1169a location in an output section, it must always appear in an
1170expression within a @code{SECTIONS} command. The @code{.} symbol
1171may appear anywhere that an ordinary symbol is allowed in an
1172expression, but its assignments have a side effect. Assigning a value
1173to the @code{.} symbol will cause the location counter to be moved.
2c5c0674 1174@cindex holes
b4d4e8e3
RP
1175This may be used to create holes in the output section. The location
1176counter may never be moved backwards.
1177@example
2c5c0674
RP
1178SECTIONS
1179@{
d4e5e3c3
DM
1180 output :
1181 @{
1182 file1(.text)
1183 . = . + 1000;
1184 file2(.text)
1185 . += 1000;
1186 file3(.text)
1187 @} = 0x1234;
2c5c0674 1188@}
b4d4e8e3 1189@end example
2c5c0674
RP
1190@noindent
1191In the previous example, @code{file1} is located at the beginning of the
1192output section, then there is a 1000 byte gap. Then @code{file2}
1193appears, also with a 1000 byte gap following before @code{file3} is
1194loaded. The notation @samp{= 0x1234} specifies what data to write in
1195the gaps (@pxref{Section Options}).
b4d4e8e3 1196
d4e5e3c3
DM
1197@iftex
1198@vfill
1199@end iftex
1200
1201@need 5000
ec40bbb8 1202@node Operators
f22eee08 1203@subsection Operators
2c5c0674
RP
1204@cindex Operators for arithmetic
1205@cindex arithmetic operators
1206@cindex precedence in expressions
b4d4e8e3 1207The linker recognizes the standard C set of arithmetic operators, with
f22eee08 1208the standard bindings and precedence levels:
c8072296 1209@c TEXI2ROFF-KILL
b4d4e8e3 1210@ifinfo
c8072296 1211@c END TEXI2ROFF-KILL
f22eee08 1212@example
c8072296 1213precedence associativity Operators Notes
b4d4e8e3 1214(highest)
c8072296
RP
12151 left ! - ~ (1)
12162 left * / %
12173 left + -
12184 left >> <<
12195 left == != > < <= >=
12206 left &
12217 left |
12228 left &&
12239 left ||
122410 right ? :
122511 right &= += -= *= /= (2)
b4d4e8e3 1226(lowest)
f22eee08 1227@end example
2c5c0674
RP
1228Notes:
1229(1) Prefix operators
1230(2) @xref{Assignment}
c8072296 1231@c TEXI2ROFF-KILL
b4d4e8e3 1232@end ifinfo
f22eee08 1233@tex
2c5c0674
RP
1234\vskip \baselineskip
1235%"lispnarrowing" is the extra indent used generally for @example
1236\hskip\lispnarrowing\vbox{\offinterlineskip
f22eee08
RP
1237\hrule
1238\halign
2c5c0674
RP
1239{\vrule#&\strut\hfil\ #\ \hfil&\vrule#&\strut\hfil\ #\ \hfil&\vrule#&\strut\hfil\ {\tt #}\ \hfil&\vrule#\cr
1240height2pt&\omit&&\omit&&\omit&\cr
1241&Precedence&& Associativity &&{\rm Operators}&\cr
1242height2pt&\omit&&\omit&&\omit&\cr
f22eee08 1243\noalign{\hrule}
2c5c0674 1244height2pt&\omit&&\omit&&\omit&\cr
b4d4e8e3 1245&highest&&&&&\cr
2c5c0674
RP
1246% '176 is tilde, '~' in tt font
1247&1&&left&&\qquad- \char'176\ !\qquad\dag&\cr
1248&2&&left&&* / \%&\cr
1249&3&&left&&+ -&\cr
1250&4&&left&&>> <<&\cr
1251&5&&left&&== != > < <= >=&\cr
f22eee08 1252&6&&left&&\&&\cr
f22eee08 1253&7&&left&&|&\cr
f22eee08 1254&8&&left&&{\&\&}&\cr
f22eee08 1255&9&&left&&||&\cr
2c5c0674
RP
1256&10&&right&&? :&\cr
1257&11&&right&&\qquad\&= += -= *= /=\qquad\ddag&\cr
b4d4e8e3 1258&lowest&&&&&\cr
2c5c0674 1259height2pt&\omit&&\omit&&\omit&\cr}
f22eee08
RP
1260\hrule}
1261@end tex
2c5c0674
RP
1262@iftex
1263{
1264@obeylines@parskip=0pt@parindent=0pt
1265@dag@quad Prefix operators.
1266@ddag@quad @xref{Assignment}.
1267}
1268@end iftex
c8072296 1269@c END TEXI2ROFF-KILL
f22eee08 1270
ec40bbb8 1271@node Evaluation
b4d4e8e3
RP
1272@subsection Evaluation
1273
2c5c0674
RP
1274@cindex lazy evaluation
1275@cindex expression evaluation order
b4d4e8e3
RP
1276The linker uses ``lazy evaluation'' for expressions; it only calculates
1277an expression when absolutely necessary. The linker needs the value of
1278the start address, and the lengths of memory regions, in order to do any
1279linking at all; these values are computed as soon as possible when the
1280linker reads in the command file. However, other values (such as symbol
1281values) are not known or needed until after storage allocation. Such
1282values are evaluated later, when other information (such as the sizes of
1283output sections) is available for use in the symbol assignment
1284expression.
1285
ec40bbb8 1286@node Assignment
b4d4e8e3 1287@subsection Assignment: Defining Symbols
2c5c0674
RP
1288@cindex assignment in scripts
1289@cindex symbol definition, scripts
1290@cindex variables, defining
b4d4e8e3
RP
1291You may create global symbols, and assign values (addresses) to global
1292symbols, using any of the C assignment operators:
1293
1294@table @code
1295@item @var{symbol} = @var{expression} ;
2c5c0674 1296@itemx @var{symbol} &= @var{expression} ;
b4d4e8e3
RP
1297@itemx @var{symbol} += @var{expression} ;
1298@itemx @var{symbol} -= @var{expression} ;
1299@itemx @var{symbol} *= @var{expression} ;
1300@itemx @var{symbol} /= @var{expression} ;
1301@end table
1302
246504a5 1303Two things distinguish assignment from other operators in @code{ld}
b4d4e8e3
RP
1304expressions.
1305@itemize @bullet
2c5c0674
RP
1306@item
1307Assignment may only be used at the root of an expression;
b4d4e8e3 1308@samp{a=b+3;} is allowed, but @samp{a+b=3;} is an error.
2c5c0674
RP
1309
1310@kindex ;
1311@cindex semicolon
1312@item
d76ae847
RP
1313You must place a trailing semicolon (``@key{;}'') at the end of an
1314assignment statement.
b4d4e8e3
RP
1315@end itemize
1316
1317Assignment statements may appear:
1318@itemize @bullet
2c5c0674 1319@item
246504a5 1320as commands in their own right in an @code{ld} script; or
2c5c0674
RP
1321@item
1322as independent statements within a @code{SECTIONS} command; or
1323@item
1324as part of the contents of a section definition in a
b4d4e8e3
RP
1325@code{SECTIONS} command.
1326@end itemize
1327
1328The first two cases are equivalent in effect---both define a symbol with
ec40bbb8 1329an absolute address. The last case defines a symbol whose address is
b4d4e8e3
RP
1330relative to a particular section (@pxref{SECTIONS}).
1331
2c5c0674
RP
1332@cindex absolute and relocatable symbols
1333@cindex relocatable and absolute symbols
1334@cindex symbols, relocatable and absolute
1335When a linker expression is evaluated and assigned to a variable, it is
1336given either an absolute or a relocatable type. An absolute expression
1337type is one in which the symbol contains the value that it will have in
867a1b8a 1338the output file; a relocatable expression type is one in which the
2c5c0674 1339value is expressed as a fixed offset from the base of a section.
b4d4e8e3
RP
1340
1341The type of the expression is controlled by its position in the script
2c5c0674
RP
1342file. A symbol assigned within a section definition is created relative
1343to the base of the section; a symbol assigned in any other place is
1344created as an absolute symbol. Since a symbol created within a
1345section definition is relative to the base of the section, it
1346will remain relocatable if relocatable output is requested. A symbol
1347may be created with an absolute value even when assigned to within a
1348section definition by using the absolute assignment function
1349@code{ABSOLUTE}. For example, to create an absolute symbol whose address
1350is the last byte of an output section named @code{.data}:
b4d4e8e3 1351@example
2c5c0674 1352SECTIONS@{ @dots{}
d4e5e3c3
DM
1353 .data :
1354 @{
1355 *(.data)
1356 _edata = ABSOLUTE(.) ;
1357 @}
2c5c0674 1358@dots{} @}
b4d4e8e3
RP
1359@end example
1360
2c5c0674
RP
1361The linker tries to put off the evaluation of an assignment until all
1362the terms in the source expression are known (@pxref{Evaluation}). For
ec40bbb8 1363instance, the sizes of sections cannot be known until after allocation,
2c5c0674
RP
1364so assignments dependent upon these are not performed until after
1365allocation. Some expressions, such as those depending upon the location
1366counter @dfn{dot}, @samp{.} must be evaluated during allocation. If the
1367result of an expression is required, but the value is not available,
1368then an error results. For example, a script like the following
b4d4e8e3 1369@example
2c5c0674 1370SECTIONS @{ @dots{}
d4e5e3c3
DM
1371 text 9+this_isnt_constant :
1372 @{ @dots{}
1373 @}
2c5c0674 1374@dots{} @}
b4d4e8e3 1375@end example
2c5c0674
RP
1376@kindex Non constant expression
1377@noindent
1378will cause the error message ``@code{Non constant expression for initial
0b3499f6
ILT
1379address}''.
1380
1381@cindex provide
1382In some cases, it is desirable for a linker script to define a symbol
1383only if it is referenced, and only if it is not defined by any object
1384included in the link. For example, traditional linkers defined the
1385symbol @samp{etext}. However, ANSI C requires that the user be able to
1386use @samp{etext} as a function name without encountering an error.
1387The @code{PROVIDE} keyword may be used to define a symbol, such as
1388@samp{etext}, only if it is referenced but not defined. The syntax is
1389@code{PROVIDE(@var{symbol} = @var{expression})}.
b4d4e8e3 1390
867a1b8a
DM
1391@node Arithmetic Functions
1392@subsection Arithmetic Functions
2c5c0674 1393@cindex functions in expression language
ec40bbb8 1394The command language includes a number of built-in
2c5c0674
RP
1395functions for use in link script expressions.
1396@table @code
1397@item ABSOLUTE(@var{exp})
1398@kindex ABSOLUTE(@var{exp})
1399@cindex expression, absolute
ec40bbb8
DM
1400Return the absolute (non-relocatable, as opposed to non-negative) value
1401of the expression @var{exp}. Primarily useful to assign an absolute
1402value to a symbol within a section definition, where symbol values are
1403normally section-relative.
2c5c0674
RP
1404
1405@item ADDR(@var{section})
1406@kindex ADDR(@var{section})
1407@cindex section address
ec40bbb8 1408Return the absolute address of the named @var{section}. Your script must
b4d4e8e3 1409previously have defined the location of that section. In the following
ec40bbb8 1410example, @code{symbol_1} and @code{symbol_2} are assigned identical
b4d4e8e3 1411values:
f22eee08 1412@example
2c5c0674 1413SECTIONS@{ @dots{}
d4e5e3c3
DM
1414 .output1 :
1415 @{
1416 start_of_output_1 = ABSOLUTE(.);
1417 @dots{}
1418 @}
1419 .output :
1420 @{
1421 symbol_1 = ADDR(.output1);
1422 symbol_2 = start_of_output_1;
1423 @}
2c5c0674
RP
1424@dots{} @}
1425@end example
1426
1427@item ALIGN(@var{exp})
1428@kindex ALIGN(@var{exp})
1429@cindex rounding up location counter
ec40bbb8 1430Return the result of the current location counter (@code{.}) aligned to
2c5c0674
RP
1431the next @var{exp} boundary. @var{exp} must be an expression whose
1432value is a power of two. This is equivalent to
1433@example
cb70c872 1434(. + @var{exp} - 1) & ~(@var{exp} - 1)
2c5c0674
RP
1435@end example
1436
1437@code{ALIGN} doesn't change the value of the location counter---it just
1438does arithmetic on it. As an example, to align the output @code{.data}
1439section to the next @code{0x2000} byte boundary after the preceding
1440section and to set a variable within the section to the next
1441@code{0x8000} boundary after the input sections:
1442@example
1443SECTIONS@{ @dots{}
d4e5e3c3
DM
1444 .data ALIGN(0x2000): @{
1445 *(.data)
1446 variable = ALIGN(0x8000);
1447 @}
2c5c0674
RP
1448@dots{} @}
1449@end example
1450@noindent
1451The first use of @code{ALIGN} in this example specifies the location of
1452a section because it is used as the optional @var{start} attribute of a
1453section definition (@pxref{Section Options}). The second use simply
1454defines the value of a variable.
1455
1456The built-in @code{NEXT} is closely related to @code{ALIGN}.
1457
1458@item DEFINED(@var{symbol})
1459@kindex DEFINED(@var{symbol})
1460@cindex symbol defaults
ec40bbb8
DM
1461Return 1 if @var{symbol} is in the linker global symbol table and is
1462defined, otherwise return 0. You can use this function to provide default
1463values for symbols. For example, the following command-file fragment shows how
2c5c0674
RP
1464to set a global symbol @code{begin} to the first location in the
1465@code{.text} section---but if a symbol called @code{begin} already
1466existed, its value is preserved:
d4e5e3c3 1467
c8072296 1468@smallexample
2c5c0674 1469SECTIONS@{ @dots{}
d4e5e3c3
DM
1470 .text : @{
1471 begin = DEFINED(begin) ? begin : . ;
1472 @dots{}
1473 @}
2c5c0674 1474@dots{} @}
c8072296 1475@end smallexample
f22eee08 1476
2c5c0674
RP
1477@item NEXT(@var{exp})
1478@kindex NEXT(@var{exp})
1479@cindex unallocated address, next
ec40bbb8
DM
1480Return the next unallocated address that is a multiple of @var{exp}.
1481This function is closely related to @code{ALIGN(@var{exp})}; unless you
2c5c0674 1482use the @code{MEMORY} command to define discontinuous memory for the
ec40bbb8 1483output file, the two functions are equivalent.
2c5c0674
RP
1484
1485@item SIZEOF(@var{section})
1486@kindex SIZEOF(@var{section})
1487@cindex section size
ec40bbb8
DM
1488Return the size in bytes of the named @var{section}, if that section has
1489been allocated. In the following example, @code{symbol_1} and
f22eee08 1490@code{symbol_2} are assigned identical values:
ec40bbb8 1491@c What does it return if the section hasn't been allocated? 0?
f22eee08 1492@example
2c5c0674 1493SECTIONS@{ @dots{}
d4e5e3c3
DM
1494 .output @{
1495 .start = . ;
1496 @dots{}
1497 .end = . ;
1498 @}
1499 symbol_1 = .end - .start ;
1500 symbol_2 = SIZEOF(.output);
2c5c0674 1501@dots{} @}
f22eee08 1502
f22eee08 1503@end example
b4d4e8e3 1504
2c5c0674
RP
1505@item SIZEOF_HEADERS
1506@kindex SIZEOF_HEADERS
1507@cindex header size
1508@itemx sizeof_headers
1509@kindex sizeof_headers
ec40bbb8 1510Return the size in bytes of the output file's headers. You can use this number
2c5c0674
RP
1511as the start address of the first section, if you choose, to facilitate
1512paging.
1513
1514@end table
1515
ec40bbb8 1516@node MEMORY
867a1b8a 1517@section Memory Layout
2c5c0674
RP
1518@kindex MEMORY
1519@cindex regions of memory
1520@cindex discontinuous memory
1521@cindex allocating memory
ec40bbb8
DM
1522The linker's default configuration permits allocation of all available memory.
1523You can override this configuration by using the @code{MEMORY} command. The
b4d4e8e3
RP
1524@code{MEMORY} command describes the location and size of blocks of
1525memory in the target. By using it carefully, you can describe which
1526memory regions may be used by the linker, and which memory regions it
1527must avoid. The linker does not shuffle sections to fit into the
1528available regions, but does move the requested sections into the correct
1529regions and issue errors when the regions become too full.
1530
867a1b8a 1531A command file may contain at most one use of the @code{MEMORY}
b4d4e8e3
RP
1532command; however, you can define as many blocks of memory within it as
1533you wish. The syntax is:
c8072296 1534
f22eee08 1535@example
b4d4e8e3 1536MEMORY
d4e5e3c3
DM
1537 @{
1538 @var{name} (@var{attr}) : ORIGIN = @var{origin}, LENGTH = @var{len}
1539 @dots{}
1540 @}
f22eee08
RP
1541@end example
1542@table @code
2c5c0674 1543@cindex naming memory regions
d4e5e3c3 1544@item @var{name}
f22eee08
RP
1545is a name used internally by the linker to refer to the region. Any
1546symbol name may be used. The region names are stored in a separate
ec40bbb8 1547name space, and will not conflict with symbols, file names or section
b4d4e8e3 1548names. Use distinct names to specify multiple regions.
d4e5e3c3 1549
2c5c0674 1550@cindex memory region attributes
d4e5e3c3 1551@item (@var{attr})
2c5c0674 1552is an optional list of attributes, permitted for compatibility with the
246504a5 1553AT&T linker but not used by @code{ld} beyond checking that the
2c5c0674
RP
1554attribute list is valid. Valid attribute lists must be made up of the
1555characters ``@code{LIRWX}''. If you omit the attribute list, you may
1556omit the parentheses around it as well.
d4e5e3c3 1557
cb70c872
RP
1558@kindex ORIGIN =
1559@kindex o =
1560@kindex org =
d4e5e3c3 1561@item @var{origin}
ec40bbb8
DM
1562is the start address of the region in physical memory. It is
1563an expression that must evaluate to a constant before
f22eee08 1564memory allocation is performed. The keyword @code{ORIGIN} may be
867a1b8a 1565abbreviated to @code{org} or @code{o} (but not, for example, @samp{ORG}).
d4e5e3c3 1566
cb70c872
RP
1567@kindex LENGTH =
1568@kindex len =
1569@kindex l =
d4e5e3c3 1570@item @var{len}
b4d4e8e3 1571is the size in bytes of the region (an expression).
2c5c0674 1572The keyword @code{LENGTH} may be abbreviated to @code{len} or @code{l}.
f22eee08
RP
1573@end table
1574
1575For example, to specify that memory has two regions available for
ec40bbb8 1576allocation---one starting at 0 for 256 kilobytes, and the other
2c5c0674 1577starting at @code{0x40000000} for four megabytes:
f22eee08
RP
1578
1579@example
b4d4e8e3 1580MEMORY
d4e5e3c3
DM
1581 @{
1582 rom : ORIGIN = 0, LENGTH = 256K
1583 ram : org = 0x40000000, l = 4M
1584 @}
f22eee08
RP
1585@end example
1586
b4d4e8e3 1587Once you have defined a region of memory named @var{mem}, you can direct
2c5c0674
RP
1588specific output sections there by using a command ending in
1589@samp{>@var{mem}} within the @code{SECTIONS} command (@pxref{Section
1590Options}). If the combined output sections directed to a region are too
1591big for the region, the linker will issue an error message.
b4d4e8e3 1592
ec40bbb8 1593@node SECTIONS
867a1b8a 1594@section Specifying Output Sections
67c4333b 1595
2c5c0674 1596@kindex SECTIONS
b4d4e8e3 1597The @code{SECTIONS} command controls exactly where input sections are
867a1b8a
DM
1598placed into output sections, their order in the output file, and to
1599which output sections they are allocated.
b4d4e8e3 1600
867a1b8a 1601You may use at most one @code{SECTIONS} command in a script file,
b4d4e8e3
RP
1602but you can have as many statements within it as you wish. Statements
1603within the @code{SECTIONS} command can do one of three things:
67c4333b 1604
b4d4e8e3
RP
1605@itemize @bullet
1606@item
1607define the entry point;
67c4333b 1608
b4d4e8e3
RP
1609@item
1610assign a value to a symbol;
67c4333b 1611
b4d4e8e3 1612@item
867a1b8a
DM
1613describe the placement of a named output section, and which input
1614sections go into it.
b4d4e8e3
RP
1615@end itemize
1616
8920addc
RP
1617You can also use the first two operations---defining the entry point and
1618defining symbols---outside the @code{SECTIONS} command: @pxref{Entry
1619Point}, and @pxref{Assignment}. They are permitted here as well for
1620your convenience in reading the script, so that symbols and the entry
1621point can be defined at meaningful points in your output-file layout.
f22eee08 1622
67c4333b 1623If you do not use a @code{SECTIONS} command, the linker places each input
867a1b8a
DM
1624section into an identically named output section in the order that the
1625sections are first encountered in the input files. If all input sections
1626are present in the first file, for example, the order of sections in the
1627output file will match the order in the first input file.
b4d4e8e3 1628
2c5c0674 1629@menu
2d59b2c3 1630* Section Definition:: Section Definitions
867a1b8a
DM
1631* Section Placement:: Section Placement
1632* Section Data Expressions:: Section Data Expressions
2d59b2c3 1633* Section Options:: Optional Section Attributes
2c5c0674
RP
1634@end menu
1635
ec40bbb8 1636@node Section Definition
b4d4e8e3 1637@subsection Section Definitions
2c5c0674 1638@cindex section definition
b4d4e8e3 1639The most frequently used statement in the @code{SECTIONS} command is
867a1b8a 1640the @dfn{section definition}, which specifies the
b4d4e8e3 1641properties of an output section: its location, alignment, contents,
ec40bbb8 1642fill pattern, and target memory region. Most of
b4d4e8e3
RP
1643these specifications are optional; the simplest form of a section
1644definition is
1645@example
2c5c0674 1646SECTIONS @{ @dots{}
d4e5e3c3
DM
1647 @var{secname} : @{
1648 @var{contents}
1649 @}
2c5c0674 1650@dots{} @}
b4d4e8e3 1651@end example
2c5c0674 1652@cindex naming output sections
b4d4e8e3
RP
1653@noindent
1654@var{secname} is the name of the output section, and @var{contents} a
ec40bbb8 1655specification of what goes there---for example, a list of input files or
867a1b8a
DM
1656sections of input files (@pxref{Section Placement}). As you might
1657assume, the whitespace shown is optional. You do need the colon
1658@samp{:} and the braces @samp{@{@}}, however.
b4d4e8e3
RP
1659
1660@var{secname} must meet the constraints of your output format. In
1661formats which only support a limited number of sections, such as
1662@code{a.out}, the name must be one of the names supported by the format
2c5c0674
RP
1663(@code{a.out}, for example, allows only @code{.text}, @code{.data} or
1664@code{.bss}). If the output format supports any number of sections, but
1665with numbers and not names (as is the case for Oasys), the name should be
1666supplied as a quoted numeric string. A section name may consist of any
867a1b8a 1667sequence of characters, but any name which does not conform to the standard
246504a5 1668@code{ld} symbol name syntax must be quoted.
ec40bbb8 1669@xref{Symbols, , Symbol Names}.
2c5c0674 1670
f9d3d71a
ILT
1671The linker will not create output sections which do not have any
1672contents. This is for convenience when referring to input sections that
1673may or may not exist. For example,
1674@example
1675.foo @{ *(.foo @}
1676@end example
1677will only create a @samp{.foo} section in the output file if there is a
1678@samp{.foo} section in at least one input file.
1679
867a1b8a
DM
1680@node Section Placement
1681@subsection Section Placement
67c4333b 1682
2c5c0674 1683@cindex contents of a section
67c4333b
RP
1684In a section definition, you can specify the contents of an output
1685section by listing particular input files, by listing particular
1686input-file sections, or by a combination of the two. You can also place
1687arbitrary data in the section, and define symbols relative to the
1688beginning of the section.
b4d4e8e3
RP
1689
1690The @var{contents} of a section definition may include any of the
1691following kinds of statement. You can include as many of these as you
1692like in a single section definition, separated from one another by
1693whitespace.
f22eee08 1694
b4d4e8e3 1695@table @code
2c5c0674
RP
1696@kindex @var{filename}
1697@cindex input files, section defn
1698@cindex files, including in output sections
d4e5e3c3 1699@item @var{filename}
b4d4e8e3 1700You may simply name a particular input file to be placed in the current
2c5c0674 1701output section; @emph{all} sections from that file are placed in the
867a1b8a
DM
1702current section definition. If the file name has already been mentioned
1703in another section definition, with an explicit section name list, then
1704only those sections which have not yet been allocated are used.
1705
1706To specify a list of particular files by name:
f22eee08 1707@example
cb70c872 1708.data : @{ afile.o bfile.o cfile.o @}
f22eee08 1709@end example
2c5c0674
RP
1710@noindent
1711The example also illustrates that multiple statements can be included in
ec40bbb8 1712the contents of a section definition, since each file name is a separate
2c5c0674 1713statement.
f22eee08 1714
d4e5e3c3
DM
1715@kindex @var{filename}(@var{section})
1716@cindex files and sections, section defn
2c5c0674
RP
1717@item @var{filename}( @var{section} )
1718@itemx @var{filename}( @var{section}, @var{section}, @dots{} )
1719@itemx @var{filename}( @var{section} @var{section} @dots{} )
2c5c0674
RP
1720You can name one or more sections from your input files, for
1721insertion in the current output section. If you wish to specify a list
1722of input-file sections inside the parentheses, you may separate the
1723section names by either commas or whitespace.
1724
d4e5e3c3
DM
1725@cindex input sections to output section
1726@kindex *(@var{section})
b4d4e8e3
RP
1727@item * (@var{section})
1728@itemx * (@var{section}, @var{section}, @dots{})
836a5ee4 1729@itemx * (@var{section} @var{section} @dots{})
b4d4e8e3 1730Instead of explicitly naming particular input files in a link control
246504a5 1731script, you can refer to @emph{all} files from the @code{ld} command
ec40bbb8 1732line: use @samp{*} instead of a particular file name before the
b4d4e8e3
RP
1733parenthesized input-file section list.
1734
867a1b8a
DM
1735If you have already explicitly included some files by name, @samp{*}
1736refers to all @emph{remaining} files---those whose places in the output
1737file have not yet been defined.
1738
ec40bbb8 1739For example, to copy sections @code{1} through @code{4} from an Oasys file
b4d4e8e3
RP
1740into the @code{.text} section of an @code{a.out} file, and sections @code{13}
1741and @code{14} into the @code{.data} section:
1742@example
2c5c0674 1743SECTIONS @{
d4e5e3c3
DM
1744 .text :@{
1745 *("1" "2" "3" "4")
1746 @}
1747
1748 .data :@{
1749 *("13" "14")
1750 @}
b4d4e8e3 1751@}
f22eee08
RP
1752@end example
1753
d4e5e3c3 1754@cindex @code{[@var{section}@dots{}]}, not supported
836a5ee4
DM
1755@samp{[ @var{section} @dots{} ]} used to be accepted as an alternate way
1756to specify named sections from all unallocated input files. Because
1757some operating systems (VMS) allow brackets in file names, that notation
1758is no longer supported.
1759
2c5c0674
RP
1760@cindex uninitialized data
1761@cindex commons in output
d4e5e3c3
DM
1762@kindex *( COMMON )
1763@item @var{filename}@code{( COMMON )}
1764@itemx *( COMMON )
b4d4e8e3 1765Specify where in your output file to place uninitialized data
d76ae847 1766with this notation. @code{*(COMMON)} by itself refers to all
b4d4e8e3
RP
1767uninitialized data from all input files (so far as it is not yet
1768allocated); @var{filename}@code{(COMMON)} refers to uninitialized data
1769from a particular file. Both are special cases of the general
1770mechanisms for specifying where to place input-file sections:
246504a5 1771@code{ld} permits you to refer to uninitialized data as if it
b4d4e8e3
RP
1772were in an input-file section named @code{COMMON}, regardless of the
1773input file's format.
1774@end table
1775
2c5c0674 1776For example, the following command script arranges the output file into
b4d4e8e3
RP
1777three consecutive sections, named @code{.text}, @code{.data}, and
1778@code{.bss}, taking the input for each from the correspondingly named
1779sections of all the input files:
d4e5e3c3 1780
f22eee08 1781@example
2c5c0674 1782SECTIONS @{
d76ae847
RP
1783 .text : @{ *(.text) @}
1784 .data : @{ *(.data) @}
1785 .bss : @{ *(.bss) *(COMMON) @}
2c5c0674 1786@}
f22eee08 1787@end example
b4d4e8e3
RP
1788
1789The following example reads all of the sections from file @code{all.o}
1790and places them at the start of output section @code{outputa} which
1791starts at location @code{0x10000}. All of section @code{.input1} from
1792file @code{foo.o} follows immediately, in the same output section. All
1793of section @code{.input2} from @code{foo.o} goes into output section
1794@code{outputb}, followed by section @code{.input1} from @code{foo1.o}.
1795All of the remaining @code{.input1} and @code{.input2} sections from any
1796files are written to output section @code{outputc}.
1797
1798@example
2c5c0674 1799SECTIONS @{
d4e5e3c3
DM
1800 outputa 0x10000 :
1801 @{
1802 all.o
1803 foo.o (.input1)
1804 @}
1805 outputb :
1806 @{
1807 foo.o (.input2)
1808 foo1.o (.input1)
1809 @}
1810 outputc :
1811 @{
1812 *(.input1)
1813 *(.input2)
1814 @}
2c5c0674 1815@}
b4d4e8e3
RP
1816@end example
1817
867a1b8a
DM
1818@node Section Data Expressions
1819@subsection Section Data Expressions
67c4333b 1820
867a1b8a 1821@cindex expressions in a section
67c4333b
RP
1822The foregoing statements arrange, in your output file, data originating
1823from your input files. You can also place data directly in an output
1824section from the link command script. Most of these additional
1825statements involve expressions; @pxref{Expressions}. Although these
1826statements are shown separately here for ease of presentation, no such
1827segregation is needed within a section definition in the @code{SECTIONS}
1828command; you can intermix them freely with any of the statements we've
1829just described.
f22eee08 1830
b4d4e8e3 1831@table @code
2c5c0674
RP
1832@cindex input filename symbols
1833@cindex filename symbols
d4e5e3c3
DM
1834@kindex CREATE_OBJECT_SYMBOLS
1835@item CREATE_OBJECT_SYMBOLS
ec40bbb8
DM
1836Create a symbol for each input file
1837in the current section, set to the address of the first byte of
867a1b8a 1838data written from that input file. For instance, with @code{a.out}
b4d4e8e3
RP
1839files it is conventional to have a symbol for each input file. You can
1840accomplish this by defining the output @code{.text} section as follows:
1841@example
1842SECTIONS @{
d4e5e3c3
DM
1843 .text 0x2020 :
1844 @{
1845 CREATE_OBJECT_SYMBOLS
1846 *(.text)
1847 _etext = ALIGN(0x2000);
1848 @}
1849 @dots{}
2c5c0674 1850@}
f22eee08 1851@end example
b4d4e8e3 1852
867a1b8a 1853If @code{sample.ld} is a file containing this script, and @code{a.o},
b4d4e8e3
RP
1854@code{b.o}, @code{c.o}, and @code{d.o} are four input files with
1855contents like the following---
f22eee08 1856@example
b4d4e8e3
RP
1857/* a.c */
1858
2c5c0674 1859afunction() @{ @}
b4d4e8e3
RP
1860int adata=1;
1861int abss;
1862@end example
f22eee08 1863
b4d4e8e3 1864@noindent
867a1b8a 1865@samp{ld -M -T sample.ld a.o b.o c.o d.o} would create a map like this,
b4d4e8e3
RP
1866containing symbols matching the object file names:
1867@example
f22eee08
RP
186800000000 A __DYNAMIC
186900004020 B _abss
187000004000 D _adata
187100002020 T _afunction
187200004024 B _bbss
187300004008 D _bdata
187400002038 T _bfunction
187500004028 B _cbss
187600004010 D _cdata
187700002050 T _cfunction
18780000402c B _dbss
187900004018 D _ddata
188000002068 T _dfunction
188100004020 D _edata
188200004030 B _end
188300004000 T _etext
188400002020 t a.o
188500002038 t b.o
188600002050 t c.o
188700002068 t d.o
f22eee08
RP
1888@end example
1889
2c5c0674 1890@kindex @var{symbol} = @var{expression} ;
2c5c0674 1891@kindex @var{symbol} @var{f}= @var{expression} ;
d4e5e3c3
DM
1892@item @var{symbol} = @var{expression} ;
1893@itemx @var{symbol} @var{f}= @var{expression} ;
2c5c0674
RP
1894@var{symbol} is any symbol name (@pxref{Symbols}). ``@var{f}=''
1895refers to any of the operators @code{&= += -= *= /=} which combine
1896arithmetic and assignment.
1897
1898@cindex assignment, in section defn
1899When you assign a value to a symbol within a particular section
1900definition, the value is relative to the beginning of the section
1901(@pxref{Assignment}). If you write
d4e5e3c3 1902
b4d4e8e3 1903@example
2c5c0674 1904SECTIONS @{
b4d4e8e3 1905 abs = 14 ;
2c5c0674 1906 @dots{}
cb70c872 1907 .data : @{ @dots{} rel = 14 ; @dots{} @}
b4d4e8e3 1908 abs2 = 14 + ADDR(.data);
2c5c0674
RP
1909 @dots{}
1910@}
f22eee08 1911@end example
d4e5e3c3 1912
2c5c0674 1913@c FIXME: Try above example!
b4d4e8e3 1914@noindent
ec40bbb8 1915@code{abs} and @code{rel} do not have the same value; @code{rel} has the
b4d4e8e3
RP
1916same value as @code{abs2}.
1917
2c5c0674 1918@kindex BYTE(@var{expression})
2c5c0674 1919@kindex SHORT(@var{expression})
2c5c0674 1920@kindex LONG(@var{expression})
c477527c 1921@kindex QUAD(@var{expression})
2c5c0674 1922@cindex direct output
d4e5e3c3
DM
1923@item BYTE(@var{expression})
1924@itemx SHORT(@var{expression})
1925@itemx LONG(@var{expression})
1926@itemx QUAD(@var{expression})
c477527c
ILT
1927By including one of these four statements in a section definition, you
1928can explicitly place one, two, four, or eight bytes (respectively) at
1929the current address of that section. @code{QUAD} is only supported when
1930using a 64 bit host or target.
ec40bbb8
DM
1931
1932@ifclear SingleFormat
1933Multiple-byte quantities are represented in whatever byte order is
1934appropriate for the output file format (@pxref{BFD}).
1935@end ifclear
b4d4e8e3
RP
1936
1937@item FILL(@var{expression})
2c5c0674
RP
1938@kindex FILL(@var{expression})
1939@cindex holes, filling
1940@cindex unspecified memory
867a1b8a 1941Specify the ``fill pattern'' for the current section. Any otherwise
b4d4e8e3
RP
1942unspecified regions of memory within the section (for example, regions
1943you skip over by assigning a new value to the location counter @samp{.})
1944are filled with the two least significant bytes from the
1945@var{expression} argument. A @code{FILL} statement covers memory
1946locations @emph{after} the point it occurs in the section definition; by
1947including more than one @code{FILL} statement, you can have different
1948fill patterns in different parts of an output section.
1949@end table
1950
ec40bbb8 1951@node Section Options
b4d4e8e3 1952@subsection Optional Section Attributes
2c5c0674 1953@cindex section defn, full syntax
b4d4e8e3
RP
1954Here is the full syntax of a section definition, including all the
1955optional portions:
1956
d76ae847 1957@smallexample
2c5c0674
RP
1958SECTIONS @{
1959@dots{}
67c4333b 1960@var{secname} @var{start} BLOCK(@var{align}) (NOLOAD) : AT ( @var{ldadr} )
f9d3d71a 1961 @{ @var{contents} @} >@var{region} =@var{fill}
2c5c0674 1962@dots{}
b4d4e8e3 1963@}
d76ae847 1964@end smallexample
b4d4e8e3
RP
1965
1966@var{secname} and @var{contents} are required. @xref{Section
67c4333b
RP
1967Definition}, and @pxref{Section Placement} for details on
1968@var{contents}. The remaining elements---@var{start},
1969@code{BLOCK(@var{align)}}, @code{(NOLOAD)}, @code{AT ( @var{ldadr} )},
f9d3d71a 1970@code{>@var{region}}, and @code{=@var{fill}}---are all optional.
f22eee08 1971
b4d4e8e3 1972@table @code
2c5c0674
RP
1973@cindex start address, section
1974@cindex section start
1975@cindex section address
d4e5e3c3 1976@item @var{start}
b4d4e8e3
RP
1977You can force the output section to be loaded at a specified address by
1978specifying @var{start} immediately following the section name.
1979@var{start} can be represented as any expression. The following
1980example generates section @var{output} at location
1981@code{0x40000000}:
d4e5e3c3 1982
b4d4e8e3
RP
1983@example
1984SECTIONS @{
d4e5e3c3
DM
1985 @dots{}
1986 output 0x40000000: @{
1987 @dots{}
1988 @}
1989 @dots{}
b4d4e8e3 1990@}
f22eee08 1991@end example
f22eee08 1992
2c5c0674
RP
1993@kindex BLOCK(@var{align})
1994@cindex section alignment
1995@cindex aligning sections
d4e5e3c3 1996@item BLOCK(@var{align})
ec40bbb8 1997You can include @code{BLOCK()} specification to advance
2c5c0674
RP
1998the location counter @code{.} prior to the beginning of the section, so
1999that the section will begin at the specified alignment. @var{align} is
2000an expression.
f22eee08 2001
d76ae847
RP
2002@kindex NOLOAD
2003@cindex prevent unnecessary loading
67c4333b
RP
2004@cindex loading, preventing
2005@item (NOLOAD)
d76ae847
RP
2006Use @samp{(NOLOAD)} to prevent a section from being loaded into memory
2007each time it is accessed. For example, in the script sample below, the
2008@code{ROM} segment is addressed at memory location @samp{0} and does not
2009need to be loaded into each object file:
67c4333b 2010
d76ae847
RP
2011@example
2012SECTIONS @{
d4e5e3c3
DM
2013 ROM 0 (NOLOAD) : @{ @dots{} @}
2014 @dots{}
d76ae847
RP
2015@}
2016@end example
2017
67c4333b
RP
2018@kindex AT ( @var{ldadr} )
2019@cindex specify load address
2020@cindex load address, specifying
2021@item AT ( @var{ldadr} )
2022The expression @var{ldadr} that follows the @code{AT} keyword specifies
2023the load address of the section. The default (if you do not use the
2024@code{AT} keyword) is to make the load address the same as the
2025relocation address. This feature is designed to make it easy to build a
2026ROM image. For example, this @code{SECTIONS} definition creates two
2027output sections: one called @samp{.text}, which starts at @code{0x1000},
2028and one called @samp{.mdata}, which is loaded at the end of the
2029@samp{.text} section even though its relocation address is
2030@code{0x2000}. The symbol @code{_data} is defined with the value
2031@code{0x2000}:
2032
2033@smallexample
2034SECTIONS
139c8857
RP
2035 @{
2036 .text 0x1000 : @{ *(.text) _etext = . ; @}
2037 .mdata 0x2000 :
2038 AT ( ADDR(.text) + SIZEOF ( .text ) )
2039 @{ _data = . ; *(.data); _edata = . ; @}
2040 .bss 0x3000 :
2041 @{ _bstart = . ; *(.bss) *(COMMON) ; _bend = . ;@}
67c4333b
RP
2042@}
2043@end smallexample
2044
2045The run-time initialization code (for C programs, usually @code{crt0})
2046for use with a ROM generated this way has to include something like
2047the following, to copy the initialized data from the ROM image to its runtime
2048address:
2049
139c8857 2050@smallexample
67c4333b
RP
2051char *src = _etext;
2052char *dst = _data;
2053
139c8857 2054/* ROM has data at end of text; copy it. */
67c4333b 2055while (dst < _edata) @{
139c8857 2056 *dst++ = *src++;
67c4333b
RP
2057@}
2058
2059/* Zero bss */
2060for (dst = _bstart; dst< _bend; dst++)
139c8857
RP
2061 *dst = 0;
2062@end smallexample
67c4333b 2063
f9d3d71a
ILT
2064@kindex >@var{region}
2065@cindex section, assigning to memory region
2066@cindex memory regions and sections
2067@item >@var{region}
2068Assign this section to a previously defined region of memory.
2069@xref{MEMORY}.
2070
2c5c0674
RP
2071@kindex =@var{fill}
2072@cindex section fill pattern
2073@cindex fill pattern, entire section
d4e5e3c3
DM
2074@item =@var{fill}
2075Including @code{=@var{fill}} in a section definition specifies the
2076initial fill value for that section. You may use any expression to
2077specify @var{fill}. Any unallocated holes in the current output section
2078when written to the output file will be filled with the two least
2079significant bytes of the value, repeated as necessary. You can also
2080change the fill value with a @code{FILL} statement in the @var{contents}
2081of a section definition.
f22eee08 2082
f22eee08 2083@end table
b4d4e8e3 2084
ec40bbb8 2085@node Entry Point
b4d4e8e3 2086@section The Entry Point
2c5c0674
RP
2087@kindex ENTRY(@var{symbol})
2088@cindex start of execution
2089@cindex first instruction
b4d4e8e3
RP
2090The linker command language includes a command specifically for
2091defining the first executable instruction in an output file (its
2092@dfn{entry point}). Its argument is a symbol name:
f22eee08 2093@example
b4d4e8e3 2094ENTRY(@var{symbol})
f22eee08 2095@end example
b4d4e8e3
RP
2096
2097Like symbol assignments, the @code{ENTRY} command may be placed either
2098as an independent command in the command file, or among the section
2099definitions within the @code{SECTIONS} command---whatever makes the most
2100sense for your layout.
2101
2c5c0674 2102@cindex entry point, defaults
b4d4e8e3
RP
2103@code{ENTRY} is only one of several ways of choosing the entry point.
2104You may indicate it in any of the following ways (shown in descending
2105order of priority: methods higher in the list override methods lower down).
f22eee08
RP
2106@itemize @bullet
2107@item
ec40bbb8 2108the @samp{-e} @var{entry} command-line option;
f22eee08 2109@item
8de26d62 2110the @code{ENTRY(@var{symbol})} command in a linker control script;
f22eee08 2111@item
b4d4e8e3 2112the value of the symbol @code{start}, if present;
f22eee08 2113@item
b4d4e8e3 2114the address of the first byte of the @code{.text} section, if present;
f22eee08 2115@item
b4d4e8e3 2116The address @code{0}.
f22eee08 2117@end itemize
b4d4e8e3 2118
2c5c0674
RP
2119For example, you can use these rules to generate an entry point with an
2120assignment statement: if no symbol @code{start} is defined within your
2121input files, you can simply define it, assigning it an appropriate
2122value---
d4e5e3c3 2123
f22eee08 2124@example
b4d4e8e3 2125start = 0x2020;
f22eee08 2126@end example
b4d4e8e3
RP
2127
2128@noindent
2129The example shows an absolute address, but you can use any expression.
2130For example, if your input object files use some other symbol-name
2131convention for the entry point, you can just assign the value of
2132whatever symbol contains the start address to @code{start}:
d4e5e3c3 2133
f22eee08 2134@example
cb70c872 2135start = other_symbol ;
f22eee08 2136@end example
f22eee08 2137
867a1b8a
DM
2138@node Option Commands
2139@section Option Commands
b4d4e8e3
RP
2140The command language includes a number of other commands that you can
2141use for specialized purposes. They are similar in purpose to
2142command-line options.
2143
2144@table @code
1fb57a5d
RP
2145@kindex CONSTRUCTORS
2146@cindex C++ constructors, arranging in link
2147@cindex constructors, arranging in link
2148@item CONSTRUCTORS
2149This command ties up C++ style constructor and destructor records. The
2150details of the constructor representation vary from one object format to
2151another, but usually lists of constructors and destructors appear as
2152special sections. The @code{CONSTRUCTORS} command specifies where the
2153linker is to place the data from these sections, relative to the rest of
2154the linked output. Constructor data is marked by the symbol
2155@w{@code{__CTOR_LIST__}} at the start, and @w{@code{__CTOR_LIST_END}} at
2156the end; destructor data is bracketed similarly, between
2157@w{@code{__DTOR_LIST__}} and @w{@code{__DTOR_LIST_END}}. (The compiler
2158must arrange to actually run this code; GNU C++ calls constructors from
2159a subroutine @code{__main}, which it inserts automatically into the
2160startup code for @code{main}, and destructors from @code{_exit}.)
2161
d4e5e3c3 2162@need 1000
2c5c0674 2163@kindex FLOAT
2c5c0674 2164@kindex NOFLOAT
1fb57a5d
RP
2165@item FLOAT
2166@itemx NOFLOAT
2c5c0674 2167These keywords were used in some older linkers to request a particular
246504a5 2168math subroutine library. @code{ld} doesn't use the keywords, assuming
2c5c0674
RP
2169instead that any necessary subroutines are in libraries specified using
2170the general mechanisms for linking to archives; but to permit the use of
2171scripts that were written for the older linkers, the keywords
2172@code{FLOAT} and @code{NOFLOAT} are accepted and ignored.
2173
2c5c0674
RP
2174@kindex FORCE_COMMON_ALLOCATION
2175@cindex common allocation
1fb57a5d 2176@item FORCE_COMMON_ALLOCATION
ec40bbb8 2177This command has the same effect as the @samp{-d} command-line option:
2c5c0674 2178to make @code{ld} assign space to common symbols even if a relocatable
ec40bbb8 2179output file is specified (@samp{-r}).
b4d4e8e3 2180
2c5c0674 2181@kindex INPUT ( @var{files} )
2c5c0674 2182@cindex binary input files
1fb57a5d
RP
2183@item INPUT ( @var{file}, @var{file}, @dots{} )
2184@itemx INPUT ( @var{file} @var{file} @dots{} )
2c5c0674 2185Use this command to include binary input files in the link, without
7f9ae73e
RP
2186including them in a particular section definition.
2187Specify the full name for each @var{file}, including @samp{.a} if
2188required.
2189
2190@code{ld} searches for each @var{file} through the archive-library
2191search path, just as for files you specify on the command line.
2192See the description of @samp{-L} in @ref{Options,,Command Line
2193Options}.
b4d4e8e3 2194
01bc8f35
ILT
2195If you use @samp{-l@var{file}}, @code{ld} will transform the name to
2196@code{lib@var{file}.a} as with the command line argument @samp{-l}.
2197
0b3499f6
ILT
2198@kindex GROUP ( @var{files} )
2199@cindex grouping input files
2200@item GROUP ( @var{file}, @var{file}, @dots{} )
2201@itemx GROUP ( @var{file} @var{file} @dots{} )
2202This command is like @code{INPUT}, except that the named files should
2203all be archives, and they are searched repeatedly until no new undefined
2204references are created. See the description of @samp{-(} in
2205@ref{Options,,Command Line Options}.
2206
2c5c0674 2207@ignore
b4d4e8e3 2208@item MAP ( @var{name} )
2c5c0674
RP
2209@kindex MAP ( @var{name} )
2210@c MAP(...) appears to look for an F in the arg, ignoring all other
2211@c chars; if it finds one, it sets "map_option_f" to true. But nothing
2212@c checks map_option_f. Apparently a stub for the future...
2213@end ignore
b4d4e8e3
RP
2214
2215@item OUTPUT ( @var{filename} )
2c5c0674
RP
2216@kindex OUTPUT ( @var{filename} )
2217@cindex naming the output file
d76ae847
RP
2218Use this command to name the link output file @var{filename}. The
2219effect of @code{OUTPUT(@var{filename})} is identical to the effect of
c477527c
ILT
2220@w{@samp{-o @var{filename}}}, which overrides it. You can use this
2221command to supply a default output-file name other than @code{a.out}.
2c5c0674 2222
ec40bbb8 2223@ifclear SingleFormat
2c5c0674
RP
2224@item OUTPUT_ARCH ( @var{bfdname} )
2225@kindex OUTPUT_ARCH ( @var{bfdname} )
2226@cindex machine architecture, output
2227Specify a particular output machine architecture, with one of the names
2228used by the BFD back-end routines (@pxref{BFD}). This command is often
2229unnecessary; the architecture is most often set implicitly by either the
2230system BFD configuration or as a side effect of the @code{OUTPUT_FORMAT}
ec40bbb8 2231command.
2c5c0674
RP
2232
2233@item OUTPUT_FORMAT ( @var{bfdname} )
2234@kindex OUTPUT_FORMAT ( @var{bfdname} )
2235@cindex format, output file
1fb57a5d
RP
2236When @code{ld} is configured to support multiple object code formats,
2237you can use this command to specify a particular output format.
2238@var{bfdname} is one of the names used by the BFD back-end routines
2239(@pxref{BFD}). The effect is identical to the effect of the
2240@samp{-oformat} command-line option. This selection affects only
2c5c0674 2241the output file; the related command @code{TARGET} affects primarily
ec40bbb8
DM
2242input files.
2243@end ifclear
2c5c0674
RP
2244
2245@item SEARCH_DIR ( @var{path} )
2246@kindex SEARCH_DIR ( @var{path} )
2247@cindex path for libraries
2248@cindex search path, libraries
246504a5 2249Add @var{path} to the list of paths where @code{ld} looks for
2c5c0674 2250archive libraries. @code{SEARCH_DIR(@var{path})} has the same
ec40bbb8 2251effect as @samp{-L@var{path}} on the command line.
2c5c0674
RP
2252
2253@item STARTUP ( @var{filename} )
2254@kindex STARTUP ( @var{filename} )
2255@cindex first input file
2256Ensure that @var{filename} is the first input file used in the link
2257process.
b4d4e8e3 2258
ec40bbb8 2259@ifclear SingleFormat
b4d4e8e3 2260@item TARGET ( @var{format} )
2c5c0674
RP
2261@cindex input file format
2262@kindex TARGET ( @var{format} )
1fb57a5d
RP
2263When @code{ld} is configured to support multiple object code formats,
2264you can use this command to change the input-file object code format
2265(like the command-line option @samp{-b} or its synonym @samp{-format}).
2266The argument @var{format} is one of the strings used by BFD to name
2267binary formats. If @code{TARGET} is specified but @code{OUTPUT_FORMAT}
2268is not, the last @code{TARGET} argument is also used as the default
2269format for the @code{ld} output file. @xref{BFD}.
2c5c0674
RP
2270
2271@kindex GNUTARGET
246504a5 2272If you don't use the @code{TARGET} command, @code{ld} uses the value of
2c5c0674 2273the environment variable @code{GNUTARGET}, if available, to select the
246504a5 2274output file format. If that variable is also absent, @code{ld} uses
2c5c0674 2275the default format configured for your machine in the BFD libraries.
ec40bbb8 2276@end ifclear
b4d4e8e3
RP
2277@end table
2278
ec40bbb8
DM
2279@ifset GENERIC
2280@node Machine Dependent
1c48127e
RP
2281@chapter Machine Dependent Features
2282
2283@cindex machine dependencies
246504a5
RP
2284@code{ld} has additional features on some platforms; the following
2285sections describe them. Machines where @code{ld} has no additional
1c48127e
RP
2286functionality are not listed.
2287
2288@menu
246504a5
RP
2289* H8/300:: @code{ld} and the H8/300
2290* i960:: @code{ld} and the Intel 960 family
1c48127e 2291@end menu
ec40bbb8
DM
2292@end ifset
2293
7f9ae73e 2294@c FIXME! This could use @raisesections/@lowersections, but there seems to be a conflict
ec40bbb8
DM
2295@c between those and node-defaulting.
2296@ifset H8300
2297@ifclear GENERIC
7f9ae73e 2298@raisesections
ec40bbb8
DM
2299@end ifclear
2300@node H8/300
246504a5 2301@section @code{ld} and the H8/300
1c48127e
RP
2302
2303@cindex H8/300 support
246504a5 2304For the H8/300, @code{ld} can perform these global optimizations when
1c48127e
RP
2305you specify the @samp{-relax} command-line option.
2306
2307@table @emph
2308@item relaxing address modes
d76ae847 2309@cindex relaxing on H8/300
246504a5 2310@code{ld} finds all @code{jsr} and @code{jmp} instructions whose
1c48127e
RP
2311targets are within eight bits, and turns them into eight-bit
2312program-counter relative @code{bsr} and @code{bra} instructions,
2313respectively.
2314
2315@item synthesizing instructions
d76ae847 2316@cindex synthesizing on H8/300
1c48127e 2317@c FIXME: specifically mov.b, or any mov instructions really?
246504a5 2318@code{ld} finds all @code{mov.b} instructions which use the
1c48127e
RP
2319sixteen-bit absolute address form, but refer to the top
2320page of memory, and changes them to use the eight-bit address form.
2321(That is: the linker turns @samp{mov.b @code{@@}@var{aa}:16} into
2322@samp{mov.b @code{@@}@var{aa}:8} whenever the address @var{aa} is in the
2323top page of memory).
2324@end table
ec40bbb8 2325@ifclear GENERIC
7f9ae73e 2326@lowersections
ec40bbb8
DM
2327@end ifclear
2328@end ifset
2329
f9d3d71a
ILT
2330@ifclear GENERIC
2331@ifset Hitachi
2332@c This stuff is pointless to say unless you're especially concerned
2333@c with Hitachi chips; don't enable it for generic case, please.
2334@node Hitachi
2335@chapter @code{ld} and other Hitachi chips
2336
2337@code{ld} also supports the H8/300H, the H8/500, and the Hitachi SH. No
2338special features, commands, or command-line options are required for
2339these chips.
2340@end ifset
2341@end ifclear
2342
ec40bbb8
DM
2343@ifset I960
2344@ifclear GENERIC
7f9ae73e 2345@raisesections
ec40bbb8
DM
2346@end ifclear
2347@node i960
246504a5 2348@section @code{ld} and the Intel 960 family
1c48127e
RP
2349
2350@cindex i960 support
d76ae847 2351
1c48127e
RP
2352You can use the @samp{-A@var{architecture}} command line option to
2353specify one of the two-letter names identifying members of the 960
2354family; the option specifies the desired output target, and warns of any
2355incompatible instructions in the input files. It also modifies the
2356linker's search strategy for archive libraries, to support the use of
2357libraries specific to each particular architecture, by including in the
2358search loop names suffixed with the string identifying the architecture.
2359
246504a5 2360For example, if your @code{ld} command line included @w{@samp{-ACA}} as
1c48127e 2361well as @w{@samp{-ltry}}, the linker would look (in its built-in search
ec40bbb8 2362paths, and in any paths you specify with @samp{-L}) for a library with
1c48127e 2363the names
ec40bbb8 2364
1c48127e
RP
2365@example
2366try
2367libtry.a
2368tryca
2369libtryca.a
2370@end example
ec40bbb8 2371
1c48127e
RP
2372@noindent
2373The first two possibilities would be considered in any event; the last
2374two are due to the use of @w{@samp{-ACA}}.
2375
ec40bbb8 2376You can meaningfully use @samp{-A} more than once on a command line, since
1c48127e 2377the 960 architecture family allows combination of target architectures; each
ec40bbb8 2378use will add another pair of name variants to search for when @w{@samp{-l}}
1c48127e 2379specifies a library.
1fb57a5d
RP
2380
2381@cindex @code{-relax} on i960
2382@cindex relaxing on i960
2383@code{ld} supports the @samp{-relax} option for the i960 family. If you
2384specify @samp{-relax}, @code{ld} finds all @code{balx} and @code{calx}
2385instructions whose targets are within 24 bits, and turns them into
238624-bit program-counter relative @code{bal} and @code{cal}
2387instructions, respectively. @code{ld} also turns @code{cal}
2388instructions into @code{bal} instructions when it determines that the
2389target subroutine is a leaf routine (that is, the target subroutine does
2390not itself call any subroutines).
2391
ec40bbb8 2392@ifclear GENERIC
7f9ae73e 2393@lowersections
ec40bbb8
DM
2394@end ifclear
2395@end ifset
1c48127e 2396
ec40bbb8
DM
2397@ifclear SingleFormat
2398@node BFD
f22eee08
RP
2399@chapter BFD
2400
2c5c0674
RP
2401@cindex back end
2402@cindex object file management
d4e5e3c3
DM
2403@cindex object formats available
2404@kindex objdump -i
2c5c0674
RP
2405The linker accesses object and archive files using the BFD libraries.
2406These libraries allow the linker to use the same routines to operate on
2407object files whatever the object file format. A different object file
2408format can be supported simply by creating a new BFD back end and adding
d4e5e3c3
DM
2409it to the library. To conserve runtime memory, however, the linker and
2410associated tools are usually configured to support only a subset of the
2411object file formats available. You can use @code{objdump -i}
1c48127e 2412(@pxref{objdump,,objdump,binutils.info,The GNU Binary Utilities}) to
d4e5e3c3 2413list all the formats available for your configuration.
f22eee08 2414
2c5c0674
RP
2415@cindex BFD requirements
2416@cindex requirements for BFD
2417As with most implementations, BFD is a compromise between
f22eee08 2418several conflicting requirements. The major factor influencing
2c5c0674
RP
2419BFD design was efficiency: any time used converting between
2420formats is time which would not have been spent had BFD not
f22eee08 2421been involved. This is partly offset by abstraction payback; since
2c5c0674 2422BFD simplifies applications and back ends, more time and care
f22eee08
RP
2423may be spent optimizing algorithms for a greater speed.
2424
2c5c0674
RP
2425One minor artifact of the BFD solution which you should bear in
2426mind is the potential for information loss. There are two places where
ec40bbb8 2427useful information can be lost using the BFD mechanism: during
2c5c0674
RP
2428conversion and during output. @xref{BFD information loss}.
2429
2430@menu
2d59b2c3 2431* BFD outline:: How it works: an outline of BFD
2c5c0674 2432@end menu
f22eee08 2433
ec40bbb8 2434@node BFD outline
b4d4e8e3 2435@section How it works: an outline of BFD
2c5c0674 2436@cindex opening object files
3e27cc11 2437@include bfdsumm.texi
ec40bbb8 2438@end ifclear
f22eee08 2439
ec40bbb8 2440@node MRI
2d59b2c3
RP
2441@appendix MRI Compatible Script Files
2442@cindex MRI compatibility
2443To aid users making the transition to @sc{gnu} @code{ld} from the MRI
2444linker, @code{ld} can use MRI compatible linker scripts as an
2445alternative to the more general-purpose linker scripting language
2446described in @ref{Commands,,Command Language}. MRI compatible linker
2447scripts have a much simpler command set than the scripting language
2448otherwise used with @code{ld}. @sc{gnu} @code{ld} supports the most
2449commonly used MRI linker commands; these commands are described here.
2450
867a1b8a
DM
2451In general, MRI scripts aren't of much use with the @code{a.out} object
2452file format, since it only has three sections and MRI scripts lack some
2453features to make use of them.
2454
2d59b2c3
RP
2455You can specify a file containing an MRI-compatible script using the
2456@samp{-c} command-line option.
2457
2458Each command in an MRI-compatible script occupies its own line; each
2459command line starts with the keyword that identifies the command (though
2460blank lines are also allowed for punctuation). If a line of an
2461MRI-compatible script begins with an unrecognized keyword, @code{ld}
2462issues a warning message, but continues processing the script.
2463
2464Lines beginning with @samp{*} are comments.
2465
2466You can write these commands using all upper-case letters, or all
2467lower case; for example, @samp{chip} is the same as @samp{CHIP}.
2468The following list shows only the upper-case form of each command.
2469
2470@table @code
d4e5e3c3 2471@cindex @code{ABSOLUTE} (MRI)
2d59b2c3
RP
2472@item ABSOLUTE @var{secname}
2473@item ABSOLUTE @var{secname}, @var{secname}, @dots{} @var{secname}
2d59b2c3
RP
2474Normally, @code{ld} includes in the output file all sections from all
2475the input files. However, in an MRI-compatible script, you can use the
2476@code{ABSOLUTE} command to restrict the sections that will be present in
2477your output program. If the @code{ABSOLUTE} command is used at all in a
2478script, then only the sections named explicitly in @code{ABSOLUTE}
2479commands will appear in the linker output. You can still use other
2480input sections (whatever you select on the command line, or using
7b015547 2481@code{LOAD}) to resolve addresses in the output file.
2d59b2c3 2482
2d59b2c3 2483@cindex @code{ALIAS} (MRI)
d4e5e3c3 2484@item ALIAS @var{out-secname}, @var{in-secname}
2d59b2c3
RP
2485Use this command to place the data from input section @var{in-secname}
2486in a section called @var{out-secname} in the linker output file.
2487
2488@var{in-secname} may be an integer.
2489
e54bf1c1
ILT
2490@cindex @code{ALIGN} (MRI)
2491@item ALIGN @var{secname} = @var{expression}
2492Align the section called @var{secname} to @var{expression}. The
2493@var{expression} should be a power of two.
2494
2d59b2c3 2495@cindex @code{BASE} (MRI)
d4e5e3c3 2496@item BASE @var{expression}
2d59b2c3
RP
2497Use the value of @var{expression} as the lowest address (other than
2498absolute addresses) in the output file.
2499
d4e5e3c3 2500@cindex @code{CHIP} (MRI)
2d59b2c3
RP
2501@item CHIP @var{expression}
2502@itemx CHIP @var{expression}, @var{expression}
ec40bbb8 2503This command does nothing; it is accepted only for compatibility.
2d59b2c3 2504
2d59b2c3 2505@cindex @code{END} (MRI)
d4e5e3c3 2506@item END
2d59b2c3
RP
2507This command does nothing whatever; it's only accepted for compatibility.
2508
2d59b2c3 2509@cindex @code{FORMAT} (MRI)
d4e5e3c3 2510@item FORMAT @var{output-format}
2d59b2c3
RP
2511Similar to the @code{OUTPUT_FORMAT} command in the more general linker
2512language, but restricted to one of these output formats:
d4e5e3c3 2513
2d59b2c3
RP
2514@enumerate
2515@item
2516S-records, if @var{output-format} is @samp{S}
2517
2518@item
2519IEEE, if @var{output-format} is @samp{IEEE}
2520
2521@item
2522COFF (the @samp{coff-m68k} variant in BFD), if @var{output-format} is
2523@samp{COFF}
2524@end enumerate
2525
2d59b2c3 2526@cindex @code{LIST} (MRI)
d4e5e3c3 2527@item LIST @var{anything}@dots{}
2d59b2c3
RP
2528Print (to the standard output file) a link map, as produced by the
2529@code{ld} command-line option @samp{-M}.
2530
ec40bbb8
DM
2531The keyword @code{LIST} may be followed by anything on the
2532same line, with no change in its effect.
2d59b2c3 2533
d4e5e3c3 2534@cindex @code{LOAD} (MRI)
2d59b2c3
RP
2535@item LOAD @var{filename}
2536@item LOAD @var{filename}, @var{filename}, @dots{} @var{filename}
2d59b2c3
RP
2537Include one or more object file @var{filename} in the link; this has the
2538same effect as specifying @var{filename} directly on the @code{ld}
2539command line.
2540
2d59b2c3 2541@cindex @code{NAME} (MRI)
d4e5e3c3 2542@item NAME @var{output-name}
2d59b2c3
RP
2543@var{output-name} is the name for the program produced by @code{ld}; the
2544MRI-compatible command @code{NAME} is equivalent to the command-line
2545option @samp{-o} or the general script language command @code{OUTPUT}.
2546
d4e5e3c3 2547@cindex @code{ORDER} (MRI)
2d59b2c3
RP
2548@item ORDER @var{secname}, @var{secname}, @dots{} @var{secname}
2549@itemx ORDER @var{secname} @var{secname} @var{secname}
ec40bbb8
DM
2550Normally, @code{ld} orders the sections in its output file in the
2551order in which they first appear in the input files. In an MRI-compatible
2552script, you can override this ordering with the @code{ORDER} command. The
2d59b2c3
RP
2553sections you list with @code{ORDER} will appear first in your output
2554file, in the order specified.
2555
d4e5e3c3 2556@cindex @code{PUBLIC} (MRI)
2d59b2c3
RP
2557@item PUBLIC @var{name}=@var{expression}
2558@itemx PUBLIC @var{name},@var{expression}
2559@itemx PUBLIC @var{name} @var{expression}
ec40bbb8 2560Supply a value (@var{expression}) for external symbol
2d59b2c3
RP
2561@var{name} used in the linker input files.
2562
d4e5e3c3 2563@cindex @code{SECT} (MRI)
2d59b2c3
RP
2564@item SECT @var{secname}, @var{expression}
2565@itemx SECT @var{secname}=@var{expression}
2566@itemx SECT @var{secname} @var{expression}
2d59b2c3
RP
2567You can use any of these three forms of the @code{SECT} command to
2568specify the start address (@var{expression}) for section @var{secname}.
2569If you have more than one @code{SECT} statement for the same
2570@var{secname}, only the @emph{first} sets the start address.
2571@end table
2572
2573
ec40bbb8 2574@node Index
2c5c0674
RP
2575@unnumbered Index
2576
2577@printindex cp
2578
2579@tex
2580% I think something like @colophon should be in texinfo. In the
2581% meantime:
2582\long\def\colophon{\hbox to0pt{}\vfill
2583\centerline{The body of this manual is set in}
2584\centerline{\fontname\tenrm,}
2585\centerline{with headings in {\bf\fontname\tenbf}}
2586\centerline{and examples in {\tt\fontname\tentt}.}
2587\centerline{{\it\fontname\tenit\/} and}
2588\centerline{{\sl\fontname\tensl\/}}
2589\centerline{are used for emphasis.}\vfill}
2590\page\colophon
2591% Blame: pesch@cygnus.com, 28mar91.
2592@end tex
2593
2594
b4d4e8e3 2595@contents
f22eee08
RP
2596@bye
2597
2598
This page took 0.310042 seconds and 4 git commands to generate.