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