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