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