]> Git Repo - binutils.git/blobdiff - ld/ld.texinfo
hp300 hpux configuration
[binutils.git] / ld / ld.texinfo
index 1764ad507c3635866559827796676090da90d7cb..a918e1a12da6c3f73569be080868af6185130c99 100644 (file)
@@ -1,16 +1,23 @@
 \input texinfo
-@parindent=0pt
-@setfilename gld
-@c @@setchapternewpage odd
-@settitle GLD, The GNU linker
-@titlepage
-@title{gld}
-@subtitle{The gnu loader}
-@sp 1
-@subtitle Second Edition---gld version 2.0
-@subtitle January 1991
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1991 Free Software Foundation, Inc.
+@setfilename ld.info
+@syncodeindex ky cp
+@c @include configdoc.texi
+
+@c @smallbook
+@c @cropmarks
+
+@ifinfo
+@format
+START-INFO-DIR-ENTRY
+* Ld: (ld).                    The GNU linker.
+END-INFO-DIR-ENTRY
+@end format
+@end ifinfo
+
+@ifinfo
+This file documents the GNU linker LD.
+
+Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -24,634 +31,1397 @@ permission notice identical to this one.
 Permission is granted to copy and distribute translations of this manual
 into another language, under the above conditions for modified versions.
 
-@author {Steve Chamberlain}
-@author {Cygnus Support}
-@author {steve@@cygnus.com}
-@end titlepage
+@ignore
+Permission is granted to process this file through Tex and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
 
-@node Top,,,
-@comment  node-name,  next,  previous,  up
-@ifinfo
-This file documents the GNU linker gld.
+@end ignore
 @end ifinfo
+@iftex
+@finalout
+@setchapternewpage odd
+@settitle Using LD, the GNU linker
+@titlepage
+@title Using ld
+@subtitle The GNU linker
+@sp 1
+@subtitle @code{ld} version 2
+@subtitle March 1993
+@author Steve Chamberlain and Roland Pesch
+@author Cygnus Support
+@page
 
-@c chapter What does a linker do ?
-@c chapter Command Language
-@noindent
-@chapter Overview
+@tex
+{\parskip=0pt
+\hfill Cygnus Support\par
+\hfill steve\@cygnus.com, pesch\@cygnus.com\par
+\hfill {\it Using LD, the GNU linker}\par
+\hfill Edited by Jeffrey Osier (jeffrey\@cygnus.com), March 1993.\par
+}
+\global\parindent=0pt % Steve likes it this way.
+@end tex
 
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1991, 1992, 1993 Free Software Foundation, Inc.
 
-The @code{gld} command combines a number of object and archive files,
-relocates their data and ties up symbol references. Often the last
-step in building a new compiled program to run is a call to @code{gld}.
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
 
-The @code{gld} command accepts Linker Command Language files in
-a superset of AT+T's Link Editor Command Language syntax,
-to provide explict and total control over the linking process.
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that
+the entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
 
-This version of @code{gld} uses the general purpose @code{bfd} libraries
-to operate on object files. This allows @code{gld} to read and
-write any of the formats supported by @code{bfd}, different
-formats may be linked together producing any available object file. 
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+@end titlepage
+@end iftex
+@c FIXME: Talk about importance of *order* of args, cmds to linker!
 
-Supported formats:
-@itemize @bullet
-@item
-Sun3 68k a.out
-@item 
-IEEE-695 68k Object Module Format
-@item 
-Oasys 68k Binary Relocatable Object File Format
-@item 
-Sun4 sparc a.out
-@item 
-88k bcs coff
-@item 
-i960 coff little endian
-@item 
-i960 coff big endian
-@item 
-i960 b.out little endian
-@item 
-i960 b.out big endian
-@item
-s-records
-@end itemize
-When linking similar formats, @code{gld} maintains all debugging
-information. 
+@ifinfo
+@node Top
+@top Using ld
+This file documents the GNU linker ld.
+
+@menu
+* Overview::                    Overview
+* Invocation::                  Invocation
+* Commands::                    Command Language
+@ifset GENERIC
+* Machine Dependent::           Machine Dependent Features
+@end ifset
+@ifclear GENERIC
+@ifset H8300
+* H8/300::                      ld and the H8/300
+@end ifset
+@ifset I960
+* i960::                        ld and the Intel 960 family
+@end ifset
+@end ifclear
+@ifclear SingleFormat
+* BFD::                         BFD
+@end ifclear
+@c Following blank line required for remaining bug in makeinfo conds/menus
+
+* MRI::                         MRI Compatible Script Files
+* Index::                       Index
+@end menu
+@end ifinfo
 
-@chapter Command line options
+@node Overview
+@chapter Overview
+
+@cindex GNU linker
+@cindex what is this?
+@code{ld} combines a number of object and archive files, relocates
+their data and ties up symbol references. Usually the last step in
+compiling a program is to run @code{ld}.
+
+@code{ld} accepts Linker Command Language files written in
+a superset of AT&T's Link Editor Command Language syntax,
+to provide explicit and total control over the linking process.
+
+@ifclear SingleFormat
+This version of @code{ld} uses the general purpose BFD libraries
+to operate on object files. This allows @code{ld} to read, combine, and
+write object files in many different formats---for example, COFF or
+@code{a.out}.  Different formats may be linked together to produce any
+available kind of object file.  @xref{BFD} for a list of formats
+supported on various architectures.
+@end ifclear
+
+Aside from its flexibility, the GNU linker is more helpful than other
+linkers in providing diagnostic information.  Many linkers abandon
+execution immediately upon encountering an error; whenever possible,
+@code{ld} continues executing, allowing you to identify other errors
+(or, in some cases, to get an output file in spite of the error).
+
+@node Invocation
+@chapter Invocation
+
+The GNU linker @code{ld} is meant to cover a broad range of situations,
+and to be as compatible as possible with other linkers.  As a result,
+you have many choices to control its behavior.
+
+@ifset UsesEnvVars
+@menu
+* Options::                     Command Line Options
+* Environment::                 Environment Variables
+@end menu
+
+@node Options
+@section Command Line Options
+@end ifset
+
+@cindex command line
+@cindex options
+Here is a summary of the options you can use on the @code{ld} command
+line:
+
+@c FIXME!  -relax only avail h8/300, i960.  Conditionals screwed in examples.
+@smallexample
+ld [-o @var{output} ] @var{objfile@dots{}}
+  [ -A@var{architecture} ]  [ -b @var{input-format} ]  [ -Bstatic ]  
+  [ -c @var{MRI-commandfile} ]  [ -d | -dc | -dp ]  
+  [ -defsym @var{symbol}=@var{expression} ]
+  [ -e @var{entry} ]  [ -F ]  [ -F @var{format} ]
+  [ -format @var{input-format} ]  [ -g ]  [ -i ]
+  [ -l@var{ar} ]  [ -L@var{searchdir} ]  [ -M | -m ]  
+  [ -n | -N ]  [ -noinhibit-exec ]  [ -R @var{filename} ]
+  [ -relax ]  [ -r | -Ur ]  [ -S ]  [ -s ]  [ -T @var{commandfile} ]  
+  [ -Ttext @var{textorg} ]  [ -Tdata @var{dataorg} ]  [ -Tbss @var{bssorg} ]
+  [ -t ]  [ -u @var{sym}]  [-v]  [ -X ]  [ -x ]  [ -y@var{symbol} ]
+  [ @{ @var{script} @} ] 
+@end smallexample
+
+This plethora of command-line options may seem intimidating, but in
+actual practice few of them are used in any particular context.
+@cindex standard Unix system
+For instance, a frequent use of @code{ld} is to link standard Unix
+object files on a standard, supported Unix system.  On such a system, to
+link a file @code{hello.o}:
 
 @example
-  gld [ -Bstatic ]  [ -D @var{datasize} ] 
-      [ -c @var{filename} ]
-      [ -d ]  | [ -dc ] | [ -dp ]
-      [ -i ]
-      [ -e @var{entry} ]  [ -l @var{arch} ]  [ -L @var{searchdir} ]  [ -M ]  
-      [ -N | -n | -z ]  [ -noinhibit-exec ]  [ -r ]  [ -S ]  [ -s ]  
-      [ -f @var{fill} ]
-      [ -T @var{textorg} ]  [ -Tdata @var{dataorg} ]  [ -t ]  [ -u @var{sym}]
-      [ -X ]  [ -x ] 
-      [-o @var{output} ] @var{objfiles}@dots{}
+ld -o @var{output} /lib/crt0.o hello.o -lc
 @end example
 
-Command-line options to GNU @code{gld} may be specified in any order, and
-may be repeated at will.  For the most part, repeating an option with a
+This tells @code{ld} to produce a file called @var{output} as the
+result of linking the file @code{/lib/crt0.o} with @code{hello.o} and
+the library @code{libc.a}, which will come from the standard search
+directories.  (See the discussion of the @samp{-l} option below.)
+
+The command-line options to @code{ld} may be specified in any order, and
+may be repeated at will.  Repeating most options with a
 different argument will either have no further effect, or override prior
-occurrences (those further to the left on the command line) of an
+occurrences (those further to the left on the command line) of that
 option.  
 
-The exceptions which may meaningfully be present several times
-are @code{-L}, @code{-l}, and @code{-u}.
-
-@var{objfiles} may follow, precede, or be mixed in with
-command-line options; save that an @var{objfiles} argument may not be
-placed between an option flag and its argument.
-
-Option arguments must follow the option letter without intervening
+@ifclear SingleFormat
+The exceptions---which may meaningfully be used more than once---are
+@samp{-A}, @samp{-b} (or its synonym @samp{-format}), @samp{-defsym},
+@samp{-L}, @samp{-l}, @samp{-R}, and @samp{-u}.
+@end ifclear
+@ifset SingleFormat
+The exceptions---which may meaningfully be used more than once---are
+@samp{-A}, @samp{-defsym}, @samp{-L}, @samp{-l}, @samp{-R}, and @samp{-u}.
+@end ifset
+
+@cindex object files
+The list of object files to be linked together, shown as @var{objfile@dots{}},
+may follow, precede, or be mixed in with command-line options, except that
+an @var{objfile} argument may not be placed between an option and
+its argument.
+
+Usually the linker is invoked with at least one object file, but other
+forms of binary input files can also be specified with @samp{-l},
+@samp{-R}, and the script command language.  If @emph{no} binary input
+files at all are specified, the linker does not produce any output, and
+issues the message @samp{No input files}.
+
+Option arguments must either follow the option letter without intervening
 whitespace, or be given as separate arguments immediately following the
 option that requires them.
 
 @table @code
-@item @var{objfiles}@dots{}
-The object files @var{objfiles} to be linked; at least one must be specified.
-
+@item @var{objfile@dots{}}
+The object files to be linked.
+
+@ifset I960
+@cindex architectures
+@kindex -A@var{arch}
+@item -A@var{architecture}
+In the current release of @code{ld}, this option is useful only for the
+Intel 960 family of architectures.  In that @code{ld} configuration, the
+@var{architecture} argument identifies the particular architecture in
+the 960 family, enabling some safeguards and modifying the
+archive-library search path.  @xref{i960,,@code{ld} and the Intel 960
+family}, for details.
+
+Future releases of @code{ld} may support similar functionality for
+other architecture families.
+@end ifset
+
+@ifclear SingleFormat
+@cindex binary input format
+@kindex -b @var{format}
+@cindex input format
+@item -b @var{input-format}
+@cindex input format
+Specify the binary format for input object files that follow this option
+on the command line.  You don't usually need to specify this, as
+@code{ld} is configured to expect as a default input format the most
+usual format on each machine.  @var{input-format} is a text string, the
+name of a particular format supported by the BFD libraries.
+@w{@samp{-format @var{input-format}}} has the same effect.  @xref{BFD}.
+
+You may want to use this option if you are linking files with an unusual
+binary format.  You can also use @samp{-b} to switch formats explicitly (when
+linking object files of different formats), by including
+@samp{-b @var{input-format}} before each group of object files in a
+particular format.  
+
+The default format is taken from the environment variable
+@code{GNUTARGET}.
+@ifset UsesEnvVars
+@xref{Environment}.
+@end ifset
+You can also define the input
+format from a script, using the command @code{TARGET}; see @ref{Other
+Commands}.
+@end ifclear
+
+@kindex -Bstatic
 @item -Bstatic 
-This flag is accepted for command-line compatibility with the SunOS linker,
-but has no effect on @code{gld}.
-
-@item -c @var{commandfile}
-Directs @code{gld} to read linkage commands from the file @var{commandfile}.
-
-@item -D @var{datasize}
-Use this option to specify a target size for the @code{data} segment of
-your linked program.  The option is only obeyed if @var{datasize} is
-larger than the natural size of the program's @code{data} segment.
-
-@var{datasize} must be an integer specified in hexadecimal.
-
-@code{ld} will simply increase the size of the @code{data} segment,
-padding the created gap with zeros, and reduce the size of the
-@code{bss} segment to match.
-
-@item -d
-Force @code{ld} to assign space to common symbols
-even if a relocatable output file is specified (@code{-r}).
-
-@item -dc | -dp
-This flags is accepted for command-line compatibility with the SunOS linker,
-but has no effect on @code{gld}.
-
+Ignored.  This option is accepted for command-line compatibility with
+the SunOS linker.
+
+@kindex -c @var{MRI-cmdfile}
+@cindex compatibility, MRI
+@item -c @var{MRI-commandfile}
+For compatibility with linkers produced by MRI, @code{ld} accepts script
+files written in an alternate, restricted command language, described in
+@ref{MRI,,MRI Compatible Script Files}.  Introduce MRI script files with
+the option @samp{-c}; use the @samp{-T} option to run linker
+scripts written in the general-purpose @code{ld} scripting language.
+
+@cindex common allocation
+@kindex -d
+@item -d 
+@kindex -dc
+@itemx -dc
+@kindex -dp
+@itemx -dp
+These three options are equivalent; multiple forms are supported for
+compatibility with other linkers.  They
+assign space to common symbols even if a relocatable output file is
+specified (with @samp{-r}).  The script command
+@code{FORCE_COMMON_ALLOCATION} has the same effect.  @xref{Other
+Commands}.
+
+@cindex symbols, from command line
+@kindex -defsym @var{symbol}=@var{exp}
+@item -defsym @var{symbol}=@var{expression}
+Create a global symbol in the output file, containing the absolute
+address given by @var{expression}.  You may use this option as many
+times as necessary to define multiple symbols in the command line.  A
+limited form of arithmetic is supported for the @var{expression} in this
+context: you may give a hexadecimal constant or the name of an existing
+symbol, or use @code{+} and @code{-} to add or subtract hexadecimal
+constants or symbols.  If you need more elaborate expressions, consider
+using the linker command language from a script (@pxref{Assignment, ,
+Assignment: Symbol Definitions}).  @emph{Note:}  there should be no
+white space between @var{symbol}, the equals sign (``@key{=}''), and
+@var{expression}.
+
+@cindex entry point, from command line
+@kindex -e @var{entry}
 @item -e @var{entry} 
 Use @var{entry} as the explicit symbol for beginning execution of your
-program, rather than the default entry point. If this symbol is
-not specified, the symbol @code{start} is used as the entry address.
-If there is no symbol called @code{start}, then the entry address
-is set to the first address in the first output section 
-(usually the @samp{text} section).
-
-@item -f @var{fill}
-Sets the default fill pattern for ``holes'' in the output file to
-the lowest two bytes of the expression specified.
-
+program, rather than the default entry point. @xref{Entry Point}, for a
+discussion of defaults and other ways of specifying the
+entry point.
+
+@ifclear SingleFormat
+@kindex -F
+@item -F
+@itemx -F@var{format}
+Ignored.  Some older linkers used this option throughout a compilation
+toolchain for specifying object-file format for both input and output
+object files.  The mechanisms @code{ld} uses for this purpose (the
+@samp{-b} or @samp{-format} options for input files, the @code{TARGET}
+command in linker scripts for output files, the @code{GNUTARGET}
+environment variable) are more flexible, but @code{ld} accepts the
+@samp{-F} option for compatibility with scripts written to call the old
+linker.
+
+@kindex -format
+@item -format @var{input-format}
+Synonym for @samp{-b @var{input-format}}.
+@end ifclear
+
+@kindex -g
+@item -g
+Ignored.  Provided for compatibility with other tools.
+
+@kindex -i
+@cindex incremental link
 @item -i
-Produce an incremental link (same as option @code{-r}).
+Perform an incremental link (same as option @samp{-r}).
 
-@item -l @var{arch} 
-Add an archive file @var{arch} to the list of files to link.  This 
+
+@cindex archive files, from cmd line
+@kindex -l@var{ar}
+@item -l@var{ar} 
+Add archive file @var{ar} to the list of files to link.  This 
 option may be used any number of times.  @code{ld} will search its
-path-list for occurrences of @code{lib@var{arch}.a} for every @var{arch}
+path-list for occurrences of @code{lib@var{ar}.a} for every @var{ar}
 specified.
 
-@c This also has a side effect of using the "c++ demangler" if we happen
-@c to specify -llibg++.  Document?  pesch@@cygnus.com, 24jan91
+@cindex search directory, from cmd line
+@kindex -L@var{dir}
+@item -L@var{searchdir} 
+Add path @var{searchdir} to the list of paths that @code{ld} will search
+for archive libraries.  You may use this option any number of times.
 
-@item -L @var{searchdir} 
-This command adds path @var{searchdir} to the
-list of paths that @code{gld} will search for archive libraries.  You
-may use this option any number of times.
+@ifset UsesEnvVars
+The default set of paths searched (without being specified with
+@samp{-L}) depends on which emulation mode @code{ld} is using, and in
+some cases also on how it was configured.  @xref{Environment}.
+@end ifset
 
-@c Should we make any attempt to list the standard paths searched
-@c without listing?  When hacking on a new system I often want to know
-@c this, but this may not be the place... it's not constant across
-@c systems, of course, which is what makes it interesting.
-@c pesch@@cygnus.com, 24jan91.
+The paths can also be specified in a link script with the
+@code{SEARCH_DIR} command.
 
+@cindex link map
+@kindex -M
 @item -M 
+@kindex -m
 @itemx -m
-Print (to the standard output file) a link map---diagnostic information
+Print (to the standard output) a link map---diagnostic information
 about where symbols are mapped by @code{ld}, and information on global
 common storage allocation.
 
+@kindex -N
+@cindex read/write from cmd line
+@kindex OMAGIC
 @item -N 
-specifies read and writable @code{text} and @code{data} sections. If
-the output format supports Unix style magic numbers, then OMAGIC is set.
+Set the text and data sections to be readable and writable.  Also, do
+not page-align the data segment.  If the output format supports Unix
+style magic numbers, mark the output as @code{OMAGIC}.
 
 @item -n 
-sets the text segment to be read only, and @code{NMAGIC} is written
-if possible.
+@kindex -n
+@cindex read-only text
+@kindex NMAGIC
+Set the text segment to be read only, and mark the output as
+@code{NMAGIC} if possible.
+
+@item -noinhibit-exec
+@cindex output file after errors
+@kindex -noinhibit-exec
+Retain the executable output file whenever it is still usable.
+Normally, the linker will not produce an output file if it encounters
+errors during the link process; it exits without writing an output file
+when it issues any error whatsoever.
 
 @item -o @var{output}
-@var{output} is a name for the program produced by @code{ld}; if this
-option is not specified, the name @samp{a.out} is used by default.
+@kindex -o @var{output}
+@cindex naming the output file
+Use @var{output} as the name for the program produced by @code{ld}; if this
+option is not specified, the name @file{a.out} is used by default.  The
+script command @code{OUTPUT} can also specify the output file name.
+
+@item -R @var{filename}
+@kindex -R @var{file}
+@cindex symbol-only input
+On some platforms, this option performs global optimizations
+that become possible when the linker resolves addressing in the
+program, such as relaxing address modes and synthesizing new
+instructions in the output object file.
+@item -relax
+@kindex -relax
+@cindex synthesizing linker
+@cindex relaxing addressing modes
+An option with machine dependent effects.  Currently this option is only
+supported on the H8/300.
+@ifset H8300
+@xref{H8/300,,@code{ld} and the H8/300}.
+@end ifset
+
+On some platforms, use option performs global optimizations that
+become possible when the linker resolves addressing in the program, such
+as relaxing address modes and synthesizing new instructions in the
+output object file.  
+
+On platforms where this is not supported, @samp{-relax} is accepted, but
+ignored.
 
 @item -r 
-Generates relocatable output---i.e., generate an output file that can in
-turn serve as input to @code{gld}.  As a side effect, this option also
-sets the output file's magic number to @code{OMAGIC}; see @samp{-N}. If this
-option is not specified, an absolute file is produced.
+@cindex partial link
+@cindex relocatable output
+@kindex -r
+Generate relocatable output---i.e., generate an output file that can in
+turn serve as input to @code{ld}.  This is often called @dfn{partial
+linking}.  As a side effect, in environments that support standard Unix
+magic numbers, this option also sets the output file's magic number to
+@code{OMAGIC}.
+@c ; see @code{-N}. 
+If this option is not specified, an absolute file is produced.  When
+linking C++ programs, this option @emph{will not} resolve references to
+constructors; to do that, use @samp{-Ur}.
+
+This option does the same as @code{-i}.
 
 @item -S 
-Omits debugger symbol information (but not all symbols) from the output file.
+@kindex -S
+@cindex strip debugger symbols
+Omit debugger symbol information (but not all symbols) from the output file.
 
 @item -s 
-Omits all symbol information from the output file.
-
-@item -T @var{textorg} 
+@kindex -s
+@cindex strip all symbols
+Omit all symbol information from the output file.
+
+@item @{ @var{script} @}
+@kindex @{ @var{script} @}
+@cindex scripts on command line
+You can, if you wish, include a script of linker commands directly in
+the command line instead of referring to it via an input file.  When the
+character @samp{@{} occurs on the command line, the linker switches to
+interpreting the command language until the end of the list of commands
+is reached; the end is indicated with a closing brace @samp{@}}.
+@code{ld} does not recognize other command-line options while parsing
+the script.  @xref{Commands}, for a description of the command language.
+
+@item -Tbss @var{bssorg}
+@kindex -Tbss @var{bssorg}
+@itemx -Tdata @var{dataorg}
+@kindex -Tdata @var{dataorg}
 @itemx -Ttext @var{textorg}
-Use @var{textorg} as the starting address for the @code{text} segment of the
-output file.  Both forms of this option are equivalent.  The option
-argument must be a hexadecimal integer.
-
-@item -Tdata @var{dataorg} 
-Use @var{dataorg} as the starting address for the @code{data} segment of
-the output file.  The option argument must be a hexadecimal integer.
+@kindex -Ttext @var{textorg}
+@cindex segment origins, cmd line
+Use @var{org} as the starting address for---respectively---the
+@code{bss}, @code{data}, or the @code{text} segment of the output file.
+@var{org} must be a single hexadecimal integer;
+for compatibility with other linkers, you may omit the leading
+@samp{0x} usually associated with hexadecimal values.
+
+@item -T @var{commandfile}
+@itemx -T@var{commandfile}
+@kindex -T @var{script}
+@cindex script files
+Read link commands from the file
+@var{commandfile}.  These commands completely override @code{ld}'s
+default link format (rather than adding to it); @var{commandfile} must
+specify everything necessary to describe the target format.
+@xref{Commands}.
+
+You may also include a script of link commands directly in the command
+line by bracketing it between @samp{@{} and @samp{@}}.
 
 @item -t 
-Prints names of input files as @code{ld} processes them.
+@kindex -t
+@cindex verbose
+@cindex input files, displaying
+Print the names of the input files as @code{ld} processes them.
 
 @item -u @var{sym}
-Forces @var{sym} to be entered in the output file as an undefined symbol.
-This may, for example, trigger linking of additional modules from
-standard libraries.  @code{-u} may be repeated with different option
-arguments to enter additional undefined symbols. This option is equivalent
-to the @code{EXTERN} linker command.
+@kindex -u @var{sym}
+@cindex undefined symbol
+Force @var{sym} to be entered in the output file as an undefined symbol.
+Doing this may, for example, trigger linking of additional modules from
+standard libraries.  @samp{-u} may be repeated with different option
+arguments to enter additional undefined symbols.
+@c Nice idea, but no such command: This option is equivalent
+@c to the @code{EXTERN} linker command.
+
+@item -Ur 
+@kindex -Ur
+@cindex constructors
+For anything other than C++ programs, this option is equivalent to
+@samp{-r}: it generates relocatable output---i.e., an output file that can in
+turn serve as input to @code{ld}.  When linking C++ programs, @samp{-Ur}
+@emph{will} resolve references to constructors, unlike @samp{-r}.
+
+@item -v
+@kindex -v
+@cindex version
+Display the version number for @code{ld}.
 
 @item -X 
-If @code{-s} or @code{-S} is also specified, delete only local symbols
+@kindex -X
+@cindex local symbols, deleting
+@cindex L, deleting symbols beginning
+If @samp{-s} or @samp{-S} is also specified, delete only local symbols
 beginning with @samp{L}.
 
-@item -z
-@code{-z} sets @code{ZMAGIC}, the default: the @code{text} segment is
-read-only, demand pageable, and shared.  
-
-Specifying a relocatable output file (@code{-r}) will also set the magic
-number to @code{OMAGIC}.
-
-See description of @samp{-N}.
-
-
+@item -x
+@kindex -x
+@cindex deleting local symbols
+If @samp{-s} or @samp{-S} is also specified, delete all local symbols,
+not just those beginning with @samp{L}.
+
+@item -y@var{symbol}
+@kindex -y@var{symbol}
+@cindex symbol tracing
+Print the name of each linked file in which @var{symbol} appears.  This
+option may be given any number of times.  On many systems it is necessary
+to prepend an underscore.
+
+This option is useful when you have an undefined symbol in your link but
+don't know where the reference is coming from.
 @end table
-@chapter Command Language
-
 
-The command language allows explicit control over the linkage process, allowing
-specification of:
-@table @bullet
-@item input files 
-@item file formats
-@item output file format
-@item addresses of sections
-@item placement of common blocks
-@item and more
-@end table
+@ifset UsesEnvVars
+@node Environment
+@section Environment Variables
+
+You can change the behavior of @code{ld} with the environment
+variable @code{GNUTARGET}.  
+
+@kindex GNUTARGET
+@cindex default input format
+@code{GNUTARGET} determines the input-file object format if you don't
+use @samp{-b} (or its synonym @samp{-format}).  Its value should be one
+of the BFD names for an input format (@pxref{BFD}).  If there is no
+@code{GNUTARGET} in the environment, @code{ld} uses the natural format
+of the host. If @code{GNUTARGET} is set to @code{default} then BFD attempts to discover the
+input format by examining binary input files; this method often
+succeeds, but there are potential ambiguities, since there is no method
+of ensuring that the magic number used to specify object-file formats is
+unique.  However, the configuration procedure for BFD on each system
+places the conventional format for that system first in the search-list,
+so ambiguities are resolved in favor of convention.
+@end ifset
+
+@node Commands
+@chapter Command Language
 
-A command file may be supplied to the linker, either explicitly through the
-@code{-c} option, or implicitly as an ordinary file. If the linker opens
-a file which does not have a reasonable object or archive format, it tries
-to read the file as if it were a command file.
-@section Structure
-To be added
+@cindex command files
+The command language provides explicit control over the link process,
+allowing complete specification of the mapping between the linker's
+input files and its output.  It controls:
+@itemize @bullet
+@item 
+input files 
+@item 
+file formats
+@item 
+output file format
+@item 
+addresses of sections
+@item 
+placement of common blocks
+@end itemize
 
+You may supply a command file (also known as a link script) to the
+linker either explicitly through the @samp{-T} option, or implicitly as
+an ordinary file. If the linker opens a file which it cannot recognize
+as a supported object or archive format, it tries to interpret the file
+as a command file.
+
+You can also include a script directly on the @code{ld} command line,
+delimited by the characters @samp{@{} and @samp{@}}.
+
+@menu
+* Scripts::                     Linker Scripts
+* Expressions::                 Expressions
+* MEMORY::                      MEMORY Command
+* SECTIONS::                    SECTIONS Command
+* Entry Point::                 The Entry Point
+* Other Commands::              Other Commands
+@end menu
+
+@node Scripts
+@section Linker Scripts
+The @code{ld} command language is a collection of statements; some are
+simple keywords setting a particular option, some are used to select and
+group input files or name output files; and two statement
+types have a fundamental and pervasive impact on the linking process.
+
+@cindex fundamental script commands
+@cindex commands, fundamental
+@cindex output file layout
+@cindex layout of output file
+The most fundamental command of the @code{ld} command language is the
+@code{SECTIONS} command (@pxref{SECTIONS}).  Every meaningful command
+script must have a @code{SECTIONS} command: it specifies a
+``picture'' of the output file's layout, in varying degrees of detail.
+No other command is required in all cases.
+
+The @code{MEMORY} command complements @code{SECTIONS} by describing the
+available memory in the target architecture.  This command is optional;
+if you don't use a @code{MEMORY} command, @code{ld} assumes sufficient
+memory is available in a contiguous block for all output.
+@xref{MEMORY}.
+
+@cindex comments
+You may include comments in linker scripts just as in C: delimited
+by @samp{/*} and @samp{*/}.  As in C, comments are syntactically
+equivalent to whitespace.
+
+@node Expressions
 @section Expressions
-The syntax for expressions in the command language is identical to that of
-C expressions, with the following features:
-@table @bullet
-@item All expressions evaluated as integers and
+@cindex expression syntax
+@cindex arithmetic
+Many useful commands involve arithmetic expressions.  The syntax for
+expressions in the command language is identical to that of C
+expressions, with the following features:
+@itemize @bullet
+@item 
+All expressions evaluated as integers and
 are of ``long'' or ``unsigned long'' type.
-@item All constants are integers.
-@item All of the C arithmetic operators are provided.
-@item Global variables may be referenced, defined and created.
-@item Build in functions may be called.
-@end table
-
-@section Expressions
-
-The linker has a practice of ``lazy evaluation'' for expressions; it only
-calculates an expression when absolutely necessary. For instance, 
-when the linker reads in the command file it has to know the values
-of the start address and the length of the memory regions for linkage to continue, so these
-values are worked out, but other values (such as symbol values) are not
-known or needed until after storage allocation.
-They are evaluated later, when the other
-information, such as the sizes of output sections are available for use in
-the symbol assignment expression.
-
-When a linker expression is evaluated and assigned to a variable it is given
-either an absolute or a relocatable type. An absolute expression type
-is one in which the symbol contains the value that it will have in the
-output file, a relocateable expression type is one in which the value
-is expressed as a fixed offset from the base of a section.
-
-The type of the expression is controlled by its position in the script
-file. A symbol assigned within a @code{SECTION} specification is
-created relative to the base of the section, a symbol assigned in any
-other place is created as an absolute symbol. Since a symbol created
-within a @code{SECTION} specification is relative to the base of the
-section it will remain relocatable if relocatable output is requested.
-A symbol may be created with an absolute value even when assigned to
-within a @code{SECTION} specification by using the absolute assignment
-function @code{ABSOLUTE} For example, to create an absolute symbol
-whose address is the last byte of the output section @code{.data}:
-@example
-.data : 
-        @{
-                *(.data)
-                _edata = ABSOLUTE(.) ;
-        @} 
-@end example
-
-Unless quoted, symbol names start with a letter, underscore, point or
-minus sign and may include any letters, underscores, digits, points,
-and minus signs.  Unquoted symbol names must not conflict with any
-keywords.  To specify a symbol which contains odd characters or has
-the same name as a keyword surround it in double quotes:
-@example
-        ``SECTION'' = 9;
-        ``with a space'' = ``also with a space'' + 10;
-@end example
+@item 
+All constants are integers.
+@item 
+All of the C arithmetic operators are provided.
+@item 
+You may reference, define, and create global variables.
+@item 
+You may call special purpose built-in functions.
+@end itemize
 
+@menu
+* Integers::                    Integers
+* Symbols::                     Symbol Names
+* Location Counter::            The Location Counter
+* Operators::                   Operators
+* Evaluation::                  Evaluation
+* Assignment::                  Assignment: Defining Symbols
+* Built-ins::                   Built-In Functions
+@end menu
+
+@node Integers
 @subsection Integers
+@cindex integer notation
+@cindex octal integers
 An octal integer is @samp{0} followed by zero or more of the octal
 digits (@samp{01234567}).
+@example
+_as_octal = 0157255;
+@end example
 
+@cindex decimal integers
 A decimal integer starts with a non-zero digit followed by zero or
 more digits (@samp{0123456789}).
+@example
+_as_decimal = 57005;
+@end example
 
+@cindex hexadecimal integers
+@kindex 0x
 A hexadecimal integer is @samp{0x} or @samp{0X} followed by one or
 more hexadecimal digits chosen from @samp{0123456789abcdefABCDEF}.
+@example
+_as_hex = 0xdead;
+@end example
 
-Integers have the usual values.  To denote a negative integer, use
-the unary operator @samp{-} discussed under expressions.
+@cindex negative integers
+To write a negative integer, use
+the prefix operator @samp{-}; @pxref{Operators}.
+@example
+_as_neg = -57005;
+@end example
 
-Additionally the suffixes @code{K} and @code{M} may be used to multiply the
-previous constant by 1024 or 
+@cindex scaled integers
+@cindex K and M integer suffixes
+@cindex M and K integer suffixes
+@cindex suffixes for integers
+@cindex integer suffixes
+Additionally the suffixes @code{K} and @code{M} may be used to scale a
+constant by 
+@c TEXI2ROFF-KILL
+@ifinfo
+@c END TEXI2ROFF-KILL
+@code{1024} or @code{1024*1024}
+@c TEXI2ROFF-KILL
+@end ifinfo
 @tex
-$1024^2$
+${\rm 1024}$ or ${\rm 1024}^2$
 @end tex
-respectively.
+@c END TEXI2ROFF-KILL
+respectively. For example, the following all refer to the same quantity:
+
+@example
+        _fourk_1 = 4K;
+        _fourk_2 = 4096;
+        _fourk_3 = 0x1000;
+@end example
 
+@node Symbols
+@subsection Symbol Names
+@cindex symbol names
+@cindex names
+@cindex quoted symbol names
+@kindex "
+Unless quoted, symbol names start with a letter, underscore, point or
+hyphen and may include any letters, underscores, digits, points,
+and minus signs.  Unquoted symbol names must not conflict with any
+keywords.  You can specify a symbol which contains odd characters or has
+the same name as a keyword, by surrounding the symbol name in double quotes:
 @example
-        _as_decimal = 57005;
-        _as_hex = 0xdead;
-        _as_octal = 0157255;
+        "SECTION" = 9;
+        "with a space" = "also with a space" + 10;
+@end example
 
-        _4k_1 = 4K;
-        _4k_2 = 4096;
-        _4k_3 = 0x1000;
+@node Location Counter
+@subsection The Location Counter
+@kindex .
+@cindex dot
+@cindex location counter
+@cindex current output location
+The special linker variable @dfn{dot} @samp{.} always contains the
+current output location counter. Since the @code{.} always refers to
+a location in an output section, it must always appear in an
+expression within a @code{SECTIONS} command. The @code{.} symbol
+may appear anywhere that an ordinary symbol is allowed in an
+expression, but its assignments have a side effect. Assigning a value
+to the @code{.} symbol will cause the location counter to be moved.
+@cindex holes
+This may be used to create holes in the output section.  The location
+counter may never be moved backwards.
+@example
+SECTIONS
+@{
+        output :
+        @{
+        file1(.text)
+        . = . + 1000;
+        file2(.text)
+        . += 1000;
+        file3(.text)
+        @} = 0x1234;
+@}
 @end example
+@noindent
+In the previous example, @code{file1} is located at the beginning of the
+output section, then there is a 1000 byte gap.  Then @code{file2}
+appears, also with a 1000 byte gap following before @code{file3} is
+loaded.  The notation @samp{= 0x1234} specifies what data to write in
+the gaps (@pxref{Section Options}).
+
+@node Operators
 @subsection Operators
-The linker provides the standard C set of arithmetic operators, with
+@cindex Operators for arithmetic
+@cindex arithmetic operators
+@cindex precedence in expressions
+The linker recognizes  the standard C set of arithmetic operators, with
 the standard bindings and precedence levels:
+@c TEXI2ROFF-KILL
+@ifinfo
+@c END TEXI2ROFF-KILL
 @example
-
+precedence      associativity   Operators                Notes
+(highest)
+1               left            !  -  ~                  (1)
+2               left            *  /  %
+3               left            +  -
+4               left            >>  <<
+5               left            ==  !=  >  <  <=  >=
+6               left            &
+7               left            |
+8               left            &&
+9               left            ||
+10              right           ? :
+11              right           &=  +=  -=  *=  /=       (2)
+(lowest)
 @end example
+Notes:
+(1) Prefix operators 
+(2) @xref{Assignment}
+@c TEXI2ROFF-KILL
+@end ifinfo
 @tex
-
-\vbox{\offinterlineskip
+\vskip \baselineskip
+%"lispnarrowing" is the extra indent used generally for @example
+\hskip\lispnarrowing\vbox{\offinterlineskip
 \hrule
 \halign
-{\vrule#&\hfil#\hfil&\vrule#&\hfil#\hfil&\vrule#&\hfil#\hfil&\vrule#\cr
-height2pt&&&&&\cr
-&Level&&  associativity  &&Operators&\cr
-height2pt&&&&&\cr
+{\vrule#&\strut\hfil\ #\ \hfil&\vrule#&\strut\hfil\ #\ \hfil&\vrule#&\strut\hfil\ {\tt #}\ \hfil&\vrule#\cr
+height2pt&\omit&&\omit&&\omit&\cr
+&Precedence&&  Associativity  &&{\rm Operators}&\cr
+height2pt&\omit&&\omit&&\omit&\cr
 \noalign{\hrule}
-height2pt&&&&&\cr
-&highest&&&&&&\cr
-&1&&left&&$ ! -         ~$&\cr
-height2pt&&&&&\cr
-&2&&left&&*        /        \%&\cr
-height2pt&&&&&\cr
-&3&&left&&+        -&\cr
-height2pt&&&&&\cr
-&4&&left&&$>> <<$&\cr
-height2pt&&&&&\cr
-&5&&left&&$==        !=        > < <= >=$&\cr
-height2pt&&&&&\cr
+height2pt&\omit&&\omit&&\omit&\cr
+&highest&&&&&\cr
+% '176 is tilde, '~' in tt font
+&1&&left&&\qquad-          \char'176\      !\qquad\dag&\cr 
+&2&&left&&*          /        \%&\cr
+&3&&left&&+          -&\cr
+&4&&left&&>>         <<&\cr
+&5&&left&&==         !=       >      <      <=      >=&\cr
 &6&&left&&\&&\cr
-height2pt&&&&&\cr
 &7&&left&&|&\cr
-height2pt&&&&&\cr
 &8&&left&&{\&\&}&\cr
-height2pt&&&&&\cr
 &9&&left&&||&\cr
-height2pt&&&&&\cr
-&10&&right&&? :&\cr
-height2pt&&&&&\cr
-&11&&right&&$${\&=        +=        -=        *=        /=}&\cr
-&lowest&&&&&&\cr
-height2pt&&&&&\cr}
+&10&&right&&?        :&\cr
+&11&&right&&\qquad\&=      +=       -=     *=     /=\qquad\ddag&\cr
+&lowest&&&&&\cr
+height2pt&\omit&&\omit&&\omit&\cr}
 \hrule}
 @end tex
+@iftex
+{
+@obeylines@parskip=0pt@parindent=0pt
+@dag@quad Prefix operators.
+@ddag@quad @xref{Assignment}.
+}
+@end iftex
+@c END TEXI2ROFF-KILL
+
+@node Evaluation
+@subsection Evaluation
+
+@cindex lazy evaluation
+@cindex expression evaluation order
+The linker uses ``lazy evaluation'' for expressions; it only calculates
+an expression when absolutely necessary.  The linker needs the value of
+the start address, and the lengths of memory regions, in order to do any
+linking at all; these values are computed as soon as possible when the
+linker reads in the command file.  However, other values (such as symbol
+values) are not known or needed until after storage allocation.  Such
+values are evaluated later, when other information (such as the sizes of
+output sections) is available for use in the symbol assignment
+expression.
+
+@node Assignment
+@subsection Assignment: Defining Symbols
+@cindex assignment in scripts
+@cindex symbol definition, scripts
+@cindex variables, defining
+You may create global symbols, and assign values (addresses) to global
+symbols, using any of the C assignment operators:
 
-@section Built in Functions
-The command language provides built in functions for use in
-expressions in linkage scripts.
-@table @bullet 
-@item @code{ALIGN(@var{exp})}
-returns the result of the current location counter (@code{dot})
-aligned to the next @var{exp} boundary, where @var{exp} is a power of
-two.  This is equivalent to @code{(. + @var{exp} -1) & ~(@var{exp}-1)}.
-As an example, to align the output @code{.data} section to the
-next 0x2000 byte boundary after the preceding section and to set a
-variable within the section to the next 0x8000 boundary after the
-input sections:
-@example
-        .data ALIGN(0x2000) :@{
+@table @code
+@item @var{symbol}  = @var{expression} ;
+@itemx @var{symbol} &= @var{expression} ;
+@itemx @var{symbol} += @var{expression} ;
+@itemx @var{symbol} -= @var{expression} ;
+@itemx @var{symbol} *= @var{expression} ;
+@itemx @var{symbol} /= @var{expression} ;
+@end table
+
+Two things distinguish assignment from other operators in @code{ld}
+expressions.
+@itemize @bullet
+@item 
+Assignment may only be used at the root of an expression;
+@samp{a=b+3;} is allowed, but @samp{a+b=3;} is an error.
+
+@kindex ;
+@cindex semicolon
+@item 
+You must place a trailing semicolon (``@key{;}'') at the end of an
+assignment statement.
+@end itemize
+
+Assignment statements may appear:
+@itemize @bullet
+@item 
+as commands in their own right in an @code{ld} script; or
+@item 
+as independent statements within a @code{SECTIONS} command; or
+@item 
+as part of the contents of a section definition in a
+@code{SECTIONS} command.
+@end itemize
+
+The first two cases are equivalent in effect---both define a symbol with
+an absolute address.  The last case defines a symbol whose address is
+relative to a particular section (@pxref{SECTIONS}).
+
+@cindex absolute and relocatable symbols
+@cindex relocatable and absolute symbols
+@cindex symbols, relocatable and absolute
+When a linker expression is evaluated and assigned to a variable, it is
+given either an absolute or a relocatable type. An absolute expression
+type is one in which the symbol contains the value that it will have in
+the output file, a relocatable expression type is one in which the
+value is expressed as a fixed offset from the base of a section.
+
+The type of the expression is controlled by its position in the script
+file.  A symbol assigned within a section definition is created relative
+to the base of the section; a symbol assigned in any other place is
+created as an absolute symbol. Since a symbol created within a
+section definition is relative to the base of the section, it
+will remain relocatable if relocatable output is requested.  A symbol
+may be created with an absolute value even when assigned to within a
+section definition by using the absolute assignment function
+@code{ABSOLUTE}.  For example, to create an absolute symbol whose address
+is the last byte of an output section named @code{.data}:
+@example
+SECTIONS@{ @dots{}
+.data : 
+        @{
                 *(.data)
-                variable = ALIGN(0x8000);
-        @}
+                _edata = ABSOLUTE(.) ;
+        @} 
+@dots{} @}
 @end example
 
-@item @code{ADDR(@var{section name})}
-returns the absolute address of the named section if the section has
-already been bound. In the following examples the @code{symbol_1} and
-@code{symbol_2} are assigned identical values:
+The linker tries to put off the evaluation of an assignment until all
+the terms in the source expression are known (@pxref{Evaluation}).  For
+instance, the sizes of sections cannot be known until after allocation,
+so assignments dependent upon these are not performed until after
+allocation. Some expressions, such as those depending upon the location
+counter @dfn{dot}, @samp{.} must be evaluated during allocation. If the
+result of an expression is required, but the value is not available,
+then an error results.  For example, a script like the following
+@example
+SECTIONS @{ @dots{}
+      text 9+this_isnt_constant : 
+                @{ @dots{}
+                @}
+@dots{} @}
+@end example
+@kindex Non constant expression
+@noindent
+will cause the error message ``@code{Non constant expression for initial
+address}''. 
+
+@node Built-ins
+@subsection Built-In Functions
+@cindex functions in expression language
+The command language includes a number of built-in
+functions for use in link script expressions.
+@table @code
+@item ABSOLUTE(@var{exp})
+@kindex ABSOLUTE(@var{exp})
+@cindex expression, absolute
+Return the absolute (non-relocatable, as opposed to non-negative) value
+of the expression @var{exp}.  Primarily useful to assign an absolute
+value to a symbol within a section definition, where symbol values are
+normally section-relative.
+
+@item ADDR(@var{section})
+@kindex ADDR(@var{section})
+@cindex section address
+Return the absolute address of the named @var{section}.  Your script must
+previously have defined the location of that section. In the following
+example, @code{symbol_1} and @code{symbol_2} are assigned identical
+values:
 @example
-        .output1:
+SECTIONS@{ @dots{}
+        .output1 :
                 @{ 
-                start_of_output_1 $= .;
-                ... 
+                start_of_output_1 = ABSOLUTE(.);
+                @dots{}
                 @}
-        .output:
+        .output :
                 @{
                 symbol_1 = ADDR(.output1);
                 symbol_2 = start_of_output_1;
                 @}
+@dots{} @}
+@end example
+
+@item ALIGN(@var{exp})
+@kindex ALIGN(@var{exp})
+@cindex rounding up location counter
+Return the result of the current location counter (@code{.}) aligned to
+the next @var{exp} boundary.  @var{exp} must be an expression whose
+value is a power of two.  This is equivalent to 
+@example
+(. + @var{exp} - 1) & ~(@var{exp} - 1)
 @end example
 
-@item @code{SIZEOF(@var{section name})}
-returns the size in bytes of the named section, if the section has
-been allocated.  In the following example the @code{symbol_1} and
+@code{ALIGN} doesn't change the value of the location counter---it just
+does arithmetic on it.  As an example, to align the output @code{.data}
+section to the next @code{0x2000} byte boundary after the preceding
+section and to set a variable within the section to the next
+@code{0x8000} boundary after the input sections:
+@example
+SECTIONS@{ @dots{}
+        .data ALIGN(0x2000): @{
+                *(.data)
+                variable = ALIGN(0x8000);
+        @}
+@dots{} @}
+@end example
+@noindent
+The first use of @code{ALIGN} in this example specifies the location of
+a section because it is used as the optional @var{start} attribute of a
+section definition (@pxref{Section Options}).  The second use simply
+defines the value of a variable.
+
+The built-in @code{NEXT} is closely related to @code{ALIGN}.
+
+@item DEFINED(@var{symbol})
+@kindex DEFINED(@var{symbol})
+@cindex symbol defaults
+Return 1 if @var{symbol} is in the linker global symbol table and is
+defined, otherwise return 0.  You can use this function to provide default
+values for symbols.  For example, the following command-file fragment shows how
+to set a global symbol @code{begin} to the first location in the
+@code{.text} section---but if a symbol called @code{begin} already
+existed, its value is preserved:
+@smallexample
+SECTIONS@{ @dots{}
+        .text : @{
+                begin = DEFINED(begin) ? begin : . ;
+                @dots{}
+        @}
+@dots{} @}
+@end smallexample
+
+@item NEXT(@var{exp})
+@kindex NEXT(@var{exp})
+@cindex unallocated address, next
+Return the next unallocated address that is a multiple of @var{exp}.
+This function is closely related to @code{ALIGN(@var{exp})}; unless you
+use the @code{MEMORY} command to define discontinuous memory for the
+output file, the two functions are equivalent.
+
+@item SIZEOF(@var{section})
+@kindex SIZEOF(@var{section})
+@cindex section size
+Return the size in bytes of the named @var{section}, if that section has
+been allocated.  In the following example, @code{symbol_1} and
 @code{symbol_2} are assigned identical values:
+@c What does it return if the section hasn't been allocated?  0?
 @example
+SECTIONS@{ @dots{}
         .output @{
                 .start = . ;
-                ...
-                .end = .;
+                @dots{}
+                .end = . ;
                 @}
-        symbol_1 = .end - .start;
+        symbol_1 = .end - .start ;
         symbol_2 = SIZEOF(.output);
-@end example
+@dots{} @}
 
-@item @code{DEFINED(@var{symbol name})}
-Returns 1 if the symbol is in the linker global symbol table and is
-defined, otherwise it returns 0. This example shows the setting of a
-global symbol @code{begin} to the first location in the @code{.text}
-section, only if there is no other symbol
-called @code{begin} already:
-@example
-        .text: @{
-                begin = DEFINED(begin) ? begin : . ;
-                ...
-        @}
 @end example
-@end table 
-@page
-@section MEMORY Directive
-The linker's default configuration is for all memory to be
-allocatable.  This state may be overridden by using the @code{MEMORY}
-directive.  The @code{MEMORY} directive describes the location and
-size of blocks of memory in the target.  Careful use can describe
-memory regions which may or may not be used by the linker. The linker
-does not shuffle sections to fit into the available regions, but does
-move the requested sections into the correct regions and issue errors
-when the regions become too full.  The syntax is:
-       
-@example
-        MEMORY 
-                @{
-@tex
-                 $\bigl\lbrace {\it name_1} ({\it attr_1}):$ ORIGIN = ${\it origin_1},$ LENGTH $= {\it len_1} \bigr\rbrace $
-@end tex
 
-                @}
+@item SIZEOF_HEADERS
+@kindex SIZEOF_HEADERS
+@cindex header size
+@itemx sizeof_headers
+@kindex sizeof_headers
+Return the size in bytes of the output file's headers.  You can use this number
+as the start address of the first section, if you choose, to facilitate
+paging. 
+
+@end table
+
+@node MEMORY
+@section MEMORY Command
+@kindex MEMORY
+@cindex regions of memory
+@cindex discontinuous memory
+@cindex allocating memory
+The linker's default configuration permits allocation of all available memory.
+You can override this configuration by using the @code{MEMORY} command.  The
+@code{MEMORY} command describes the location and size of blocks of
+memory in the target.  By using it carefully, you can describe which
+memory regions may be used by the linker, and which memory regions it
+must avoid.  The linker does not shuffle sections to fit into the
+available regions, but does move the requested sections into the correct
+regions and issue errors when the regions become too full.  
+
+The command files may contain at most one use of the @code{MEMORY}
+command; however, you can define as many blocks of memory within it as
+you wish.  The syntax is:
+        
+@example
+MEMORY 
+      @{
+       @var{name} (@var{attr}) : ORIGIN = @var{origin}, LENGTH = @var{len}
+       @dots{}
+      @}
 @end example
 @table @code
 @item @var{name}
+@cindex naming memory regions
 is a name used internally by the linker to refer to the region. Any
 symbol name may be used.  The region names are stored in a separate
-name space, and will not conflict with symbols, filenames or section
-names.
-@item @var{attr}
-is an optional list of attributes, parsed for compatibility with the
-AT+T linker
-but ignored by the both the AT+T and the gnu linker.
+name space, and will not conflict with symbols, file names or section
+names.  Use distinct names to specify multiple regions.
+@item (@var{attr})
+@cindex memory region attributes
+is an optional list of attributes, permitted for compatibility with the
+AT&T linker but not used by @code{ld} beyond checking that the
+attribute list is valid.  Valid attribute lists must be made up of the
+characters ``@code{LIRWX}''.  If you omit the attribute list, you may
+omit the parentheses around it as well.
 @item @var{origin}
-is the start address of the region in physical memory expressed as
-standard linker expression which must evaluate to a constant before
+@kindex ORIGIN =
+@kindex o =
+@kindex org =
+is the start address of the region in physical memory.  It is
+an expression that must evaluate to a constant before
 memory allocation is performed. The keyword @code{ORIGIN} may be
 abbreviated to @code{org} or @code{o}.
 @item @var{len}
-is the size in bytes of the region as a standard linker expression.
-The keyword @code{LENGTH} may be abbreviated to @code{len} or @code{l}
+@kindex LENGTH =
+@kindex len =
+@kindex l =
+is the size in bytes of the region (an expression).
+The keyword @code{LENGTH} may be abbreviated to @code{len} or @code{l}.
 @end table 
 
 For example, to specify that memory has two regions available for
-allocation; one starting at 0 for 256k, and the other starting at
-0x40000000 for four megabytes:
+allocation---one starting at 0 for 256 kilobytes, and the other
+starting at @code{0x40000000} for four megabytes:
 
 @example
-        MEMORY 
-                @{
-                rom : ORIGIN= 0, LENGTH = 256K
-                ram : ORIGIN= 0x40000000, LENGTH = 4M
-                @}
-
+MEMORY 
+        @{
+        rom : ORIGIN = 0, LENGTH = 256K
+        ram : org = 0x40000000, l = 4M
+        @}
 @end example
 
-If the combined output sections directed to a region are too big for
-the region the linker will emit an error message.
-@page
-@section SECTIONS Directive
-The @code{SECTIONS} directive 
-controls exactly where input sections are placed into output sections, their
-order and to which output sections they are allocated.
-
-When no @code{SECTIONS} directives are specified, the default action
-of the linker is to place each input section into an identically named
-output section in the order that the sections appear in the first
-file, and then the order of the files.
+Once you have defined a region of memory named @var{mem}, you can direct
+specific output sections there by using a command ending in
+@samp{>@var{mem}} within the @code{SECTIONS} command (@pxref{Section
+Options}).  If the combined output sections directed to a region are too
+big for the region, the linker will issue an error message.
+
+@node SECTIONS
+@section SECTIONS Command
+@kindex SECTIONS
+The @code{SECTIONS} command controls exactly where input sections are
+placed into output sections, their order and to which output sections
+they are allocated.
+
+You may use at most one @code{SECTIONS} command in a commands file,
+but you can have as many statements within it as you wish.  Statements
+within the @code{SECTIONS} command can do one of three things:
+@itemize @bullet
+@item 
+define the entry point;
+@item 
+assign a value to a symbol;
+@item 
+describe the placement of a named output section, and what input
+sections make it up.
+@end itemize
 
-The syntax of the @code{SECTIONS} directive is:
+The first two possibilities---defining the entry point, and defining
+symbols---can also be done outside the @code{SECTIONS} command:
+@pxref{Entry Point}, @pxref{Assignment}.  They are permitted here as
+well for your convenience in reading the script, so that symbols or the
+entry point can be defined at meaningful points in your output-file
+layout.
 
+When no @code{SECTIONS} command is specified, the default action
+of the linker is to place each input section into an identically named
+output section in the order that the sections are first encountered in
+the input files; if all input sections are present in the first file,
+for example, the order of sections in the output file will match the
+order in the first input file.
+
+@menu
+* Section Definition::          Section Definitions
+* Section Contents::            Section Contents
+* Section Options::             Optional Section Attributes
+@end menu
+
+@node Section Definition
+@subsection Section Definitions
+@cindex section definition
+The most frequently used statement in the @code{SECTIONS} command is
+the @dfn{section definition}, which you can use to specify the
+properties of an output section: its location, alignment, contents,
+fill pattern, and target memory region.  Most of
+these specifications are optional; the simplest form of a section
+definition is
 @example
-   SECTIONS
-   @{
-@tex
-    $\bigl\lbrace {\it name_n}\bigl[options\bigr]\colon$ $\bigl\lbrace {\it statements_n} \bigr\rbrace \bigl[ = {\it fill expression } \bigr] \bigl[ > mem spec \bigr] \bigr\rbrace $
-@end tex
-   @}
+SECTIONS @{ @dots{}
+@var{secname} : @{
+                 @var{contents}
+                @}
+@dots{} @}
 @end example
+@cindex naming output sections
+@noindent
+@var{secname} is the name of the output section, and @var{contents} a
+specification of what goes there---for example, a list of input files or
+sections of input files.  As you might assume, the whitespace shown is
+optional.  You do need the colon @samp{:} and the braces @samp{@{@}},
+however. 
+
+@var{secname} must meet the constraints of your output format.  In
+formats which only support a limited number of sections, such as
+@code{a.out}, the name must be one of the names supported by the format
+(@code{a.out}, for example, allows only @code{.text}, @code{.data} or
+@code{.bss}). If the output format supports any number of sections, but
+with numbers and not names (as is the case for Oasys), the name should be
+supplied as a quoted numeric string.  A section name may consist of any
+sequence characters, but any name which does not conform to the standard
+@code{ld} symbol name syntax must be quoted.
+@xref{Symbols, , Symbol Names}.
+
+@node Section Contents
+@subsection Section Contents
+@cindex contents of a section
+In a section definition, you can specify the contents of an output section by
+listing particular object files, by listing particular input-file
+sections, or by a combination of the two.  You can also place arbitrary
+data in the section, and define symbols relative to the beginning of the
+section. 
+
+The @var{contents} of a section definition may include any of the
+following kinds of statement.  You can include as many of these as you
+like in a single section definition, separated from one another by
+whitespace. 
 
 @table @code
-@item @var{name}
-controls the name of the output section. In formats which only support
-a limited number of sections, such as @code{a.out}, the name must be
-one of the names supported by the format (in the case of a.out,
-@code{.text}, @code{.data} or @code{.bss}). If the output format
-supports any number of sections, but with numbers and not names (in
-the case of IEEE), the name should be supplied as a quoted numeric
-string.  A section name may consist of any sequence characters, but
-any name which does not conform to the standard @code{gld} symbol name
-syntax must be quoted. To copy sections 1 through 4 from a Oasys file
-into the @code{.text} section of an @code{a.out} file, and sections 13
-and 14 into the @code{data} section:
-@example
-
-        SECTION @{
-                .text :@{
-                        *(``1'' ``2'' ``3'' ``4'')
-                @}
+@item @var{filename}
+@kindex @var{filename}
+@cindex input files, section defn
+@cindex files, including in output sections
+You may simply name a particular input file to be placed in the current
+output section; @emph{all} sections from that file are placed in the
+current section definition. To specify a list of particular files by
+name:
+@example
+.data : @{ afile.o bfile.o cfile.o @}
+@end example
+@noindent
+The example also illustrates that multiple statements can be included in
+the contents of a section definition, since each file name is a separate
+statement. 
+
+If the file name has already been mentioned in another section
+definition, with an explicit section name list, then only those sections
+which have not yet been allocated are used.
+
+@item @var{filename}( @var{section} )
+@itemx @var{filename}( @var{section}, @var{section}, @dots{} )
+@itemx @var{filename}( @var{section} @var{section} @dots{} )
+@kindex @var{filename}(@var{section})
+@cindex files and sections, section defn
+You can name one or more sections from your input files, for
+insertion in the current output section.  If you wish to specify a list
+of input-file sections inside the parentheses, you may separate the
+section names by either commas or whitespace.
+
+@item * (@var{section})
+@itemx * (@var{section}, @var{section}, @dots{})
+@itemx * (@var{section} @var{section} @dots{}
+@cindex input sections to output section
+@kindex *(@var{section})
+Instead of explicitly naming particular input files in a link control
+script, you can refer to @emph{all} files from the @code{ld} command
+line: use @samp{*} instead of a particular file name before the
+parenthesized input-file section list.  
+
+For example, to copy sections @code{1} through @code{4} from an Oasys file
+into the @code{.text} section of an @code{a.out} file, and sections @code{13}
+and @code{14} into the @code{.data} section:
+@example
+SECTIONS @{
+        .text :@{
+                *("1" "2" "3" "4")
+        @}
 
-                .data :@{
-                        *(``13'' ``14'')
-                @}
+        .data :@{
+                *("13" "14")
         @}
+@}
 @end example
 
-@item @var{fill expression}
-If present this
-expression sets the fill value. Any unallocated holes in the current output
-section when written to the output file will 
-be filled with the two least significant bytes of the value, repeated as
-necessary.
-@page
-@item @var{options}
-the @var{options} parameter is a list of optional arguments specifying
-attributes of the output section, they may be taken from the following
-list:
-@table @bullet{}
-@item @var{addr expression} 
-forces the output section to be loaded at a specified address. The
-address is specified as a standard linker expression. The following
-example generates section @var{output} at location
-@code{0x40000000}:
+If you have already explicitly included some files by name, @samp{*}
+refers to all @emph{remaining} files---those whose places in the output
+file have not yet been defined.
+
+@item [ @var{section} ]
+@itemx [ @var{section}, @var{section}, @dots{} ]
+@itemx [ @var{section} @var{section} @dots{} ]
+@kindex [ @var{sections} ]
+This is an alternate notation to specify named sections from all
+unallocated input files; its effect is exactly the same as that of
+@samp{* (@var{section@dots{}})}
+
+@item @var{filename}@code{( COMMON )}
+@itemx ( COMMON )
+@kindex ( COMMON )
+@cindex uninitialized data
+@cindex commons in output
+Specify where in your output file to place uninitialized data
+with this notation.  @code{*(COMMON)} by itself refers to all
+uninitialized data from all input files (so far as it is not yet
+allocated); @var{filename}@code{(COMMON)} refers to uninitialized data
+from a particular file.  Both are special cases of the general
+mechanisms for specifying where to place input-file sections:
+@code{ld} permits you to refer to uninitialized data as if it
+were in an input-file section named @code{COMMON}, regardless of the
+input file's format.
+@end table
+
+For example, the following command script arranges the output file into
+three consecutive sections, named @code{.text}, @code{.data}, and
+@code{.bss}, taking the input for each from the correspondingly named
+sections of all the input files:
+@example
+SECTIONS @{ 
+  .text : @{ *(.text) @}
+  .data : @{ *(.data) @} 
+  .bss :  @{ *(.bss)  *(COMMON) @} 
+@} 
+@end example
+
+The following example reads all of the sections from file @code{all.o}
+and places them at the start of output section @code{outputa} which
+starts at location @code{0x10000}. All of section @code{.input1} from
+file @code{foo.o} follows immediately, in the same output section.  All
+of section @code{.input2} from @code{foo.o} goes into output section
+@code{outputb}, followed by section @code{.input1} from @code{foo1.o}.
+All of the remaining @code{.input1} and @code{.input2} sections from any
+files are written to output section @code{outputc}.
+
 @example
-         SECTIONS @{
-                 output 0x40000000: @{
-                        ...
-                   @}
-         @}
-@end example
-Since the built in function @code{ALIGN} references the location
-counter implicitly, a section may be located on a certain boundary by
-using the @code{ALIGN} function in the expression. For example, to
-locate the @code{.data} section on the next 8k boundary after the end
-of the @code{.text} section:
-@example        
-        SECTIONS @{
-                .text @{
-                        ...
+SECTIONS @{
+        outputa 0x10000 :
+                @{
+                all.o
+                foo.o (.input1)
                 @}
-                .data ALIGN(4K) @{
-                        ...
+        outputb :
+                @{
+                foo.o (.input2)
+                foo1.o (.input1)
                 @}
-        @}
-@end example
-@end table
-@item @var{statements}
-is a list of file names, input sections and assignments. These statements control what is placed into the
-output section.
-The syntax of a single @var{statement} is one of:
-@table @bullet 
-
-@item @var{symbol}  [ $= | += | -= | *= | /= ] @var{ expression} @code{;}
-
-Global symbols may be created and have their values (addresses)
-altered using the assignment statement. The linker tries to put off
-the evaluation of an assignment until all the terms in the source
-expression are known; for instance the sizes of sections cannot be
-known until after allocation, so assignments dependent upon these are
-not performed until after allocation. Some expressions, such as those
-depending upon the location counter @code{dot}, @samp{.} must be
-evaluated during allocation. If the result of an expression is
-required, but the value is not available, then an error results: eg
-@example
-        SECTIONS @{
-              text 9+this_isnt_constant: 
-                        @{
-                        @}
+        outputc :
+                @{
+                *(.input1)
+                *(.input2)
                 @}
-        testscript:21: Non constant expression for initial address
-@end example
+@}
+@end example        
+
+There are still more kinds of statements permitted in the contents of
+output section definitions.  The foregoing statements permitted you to
+arrange, in your output file, data originating from your input files.
+You can also place data directly in an output section from the link
+command script.  Most of these additional statements involve
+expressions; @pxref{Expressions}.  Although these statements are shown
+separately here for ease of presentation, no such segregation is needed
+within a section definition in the @code{SECTIONS} command; you can
+intermix them freely with any of the statements we've just described.
 
-@item @code{CREATE_OBJECT_SYMBOLS}
-causes the linker to create a symbol for each input file and place it
-into the specified section set with the value of the first byte of
+@table @code
+@item CREATE_OBJECT_SYMBOLS
+@kindex CREATE_OBJECT_SYMBOLS
+@cindex input filename symbols
+@cindex filename symbols
+Create a symbol for each input file
+in the current section, set to the address of the first byte of
 data written from the input file.  For instance, with @code{a.out}
-files it is conventional to have a symbol for each input file.
-@example
-        SECTIONS @{
-                .text 0x2020 :
-                         @{
-                        CREATE_OBJECT_SYMBOLS
-                        *(.text)
-                        _etext = ALIGN(0x2000);
-                        @}
+files it is conventional to have a symbol for each input file.  You can
+accomplish this by defining the output @code{.text} section as follows:
+@example
+SECTIONS @{
+        .text 0x2020 :
+                 @{
+                CREATE_OBJECT_SYMBOLS
+                *(.text)
+                _etext = ALIGN(0x2000);
                 @}
+        @dots{}
+@}
 @end example
-Supplied with four object files, @code{a.o}, @code{b.o}, @code{c.o},
-and @code{d.o} a run of
-@code{gld} could create a map:
+
+If @code{objsym} is a file containing this script, and @code{a.o},
+@code{b.o}, @code{c.o}, and @code{d.o} are four input files with
+contents like the following---
 @example
-From functions like :
-a.c:
-        afunction() { }
-        int adata=1;
-        int abss;
+/* a.c */
+
+afunction() @{ @}
+int adata=1;
+int abss;
+@end example
 
+@noindent
+@samp{ld -M sample a.o b.o c.o d.o} would create a map like this,
+containing symbols matching the object file names:
+@example
 00000000 A __DYNAMIC
 00004020 B _abss
 00004000 D _adata
@@ -672,343 +1442,828 @@ a.c:
 00002038 t b.o
 00002050 t c.o
 00002068 t d.o
-
 @end example
 
-@item @var{filename} @code{(} @var{section name list} @code{)}
-This command allocates all the named sections from the input object
-file supplied into the output section at the current point. Sections
-are written in the order they appear in the list so:
-@example
-        SECTIONS @{
-                .text 0x2020 :                
-                        @{
-                        a.o(.data)
-                        b.o(.data)
-                        *(.text)
-                        @}
-                .data :
-                        @{
-                        *(.data)
-                        @}
-                .bss :
-                        @{
-                        *(.bss)
-                        COMMON
-                        @}
-        @}
-@end example
-will produce a map:
+@item @var{symbol} = @var{expression} ;
+@kindex @var{symbol} = @var{expression} ;
+@itemx @var{symbol} @var{f}= @var{expression} ;
+@kindex @var{symbol} @var{f}= @var{expression} ;
+@var{symbol} is any symbol name (@pxref{Symbols}).  ``@var{f}='' 
+refers to any of the operators @code{&= += -= *= /=} which combine
+arithmetic and assignment.
+
+@cindex assignment, in section defn
+When you assign a value to a symbol within a particular section
+definition, the value is relative to the beginning of the section
+(@pxref{Assignment}).  If you write
 @example
-
-        insert here 
+SECTIONS @{
+  abs = 14 ;
+  @dots{}
+  .data : @{ @dots{} rel = 14 ; @dots{} @}
+  abs2 = 14 + ADDR(.data);
+  @dots{}
+@}
 @end example
-@item @code{* (} @var{section name list} @code{)}
-This command causes all sections from all input files which have not
-yet been assigned output sections to be assigned the current output
-section.
+@c FIXME:  Try above example!
+@noindent
+@code{abs} and @code{rel} do not have the same value; @code{rel} has the
+same value as @code{abs2}.
+
+@item BYTE(@var{expression})
+@kindex BYTE(@var{expression})
+@itemx SHORT(@var{expression})
+@kindex SHORT(@var{expression})
+@itemx LONG(@var{expression})
+@kindex LONG(@var{expression})
+@cindex direct output
+By including one of these three statements in a section definition, you
+can explicitly place one, two, or four bytes (respectively) at the
+current address of that section.  
+
+@ifclear SingleFormat
+Multiple-byte quantities are represented in whatever byte order is
+appropriate for the output file format (@pxref{BFD}).
+@end ifclear
+
+@item FILL(@var{expression})
+@kindex FILL(@var{expression})
+@cindex holes, filling
+@cindex unspecified memory
+Specifies the ``fill pattern'' for the current section.  Any otherwise
+unspecified regions of memory within the section (for example, regions
+you skip over by assigning a new value to the location counter @samp{.})
+are filled with the two least significant bytes from the
+@var{expression} argument.  A @code{FILL} statement covers memory
+locations @emph{after} the point it occurs in the section definition; by
+including more than one @code{FILL} statement, you can have different
+fill patterns in different parts of an output section.
+@end table
 
-@item @var{filename} @code{[COMMON]}
-This allocates all the common symbols from the specified file and places
-them into the current output section.
+@node Section Options
+@subsection Optional Section Attributes
+@cindex section defn, full syntax
+Here is the full syntax of a section definition, including all the
+optional portions:
+
+@smallexample
+SECTIONS @{
+@dots{}
+@var{secname} @var{start} BLOCK(@var{align}) (NOLOAD) : @{ @var{contents} @} =@var{fill} >@var{region}
+@dots{}
+@}
+@end smallexample
+
+@var{secname} and @var{contents} are required.  @xref{Section
+Definition}, and @pxref{Section Contents} for details on @var{contents}.
+The remaining elements---@var{start}, @code{BLOCK(@var{align)}},
+@code{(NOLOAD)} @code{=@var{fill}}, and @code{>@var{region}}---are all
+optional.
 
-@item @code{* [COMMON]}
-This allocates all the common symbols from the files which have not
-yet had their common symbols allocated and places them into the current
-output section.
+@table @code
+@item @var{start} 
+@cindex start address, section
+@cindex section start
+@cindex section address
+You can force the output section to be loaded at a specified address by
+specifying @var{start} immediately following the section name.
+@var{start} can be represented as any expression. The following
+example generates section @var{output} at location
+@code{0x40000000}:
+@example
+SECTIONS @{
+        @dots{}
+        output 0x40000000: @{
+               @dots{}
+          @}
+        @dots{}
+@}
+@end example
 
-@item @var{filename}
-A filename alone within a @code{SECTIONS} statement will cause all the
-input sections from the file to be placed into the current output
-section at the current location. If the file name has been mentioned
-before with a section name list then only those
-sections which have not yet been allocated are noted. 
-
-The following example reads all of the sections from file all.o and
-places them at the start of output section @code{outputa} which starts
-at location @code{0x10000}. All of the data from section @code{.input1} from
-file foo.o is placed next into the same output section.  All of
-section @code{.input2} is read from foo.o and placed into output
-section @code{outputb}.  Next all of section @code{.input1} is read
-from foo1.o. All of the remaining @code{.input1} and @code{.input2}
-sections from any files are written to output section @code{output3}.
-
-@example
-       SECTIONS        
-              @{
-                outputa 0x10000 :
-                        @{
-                        all.o
-                        foo.o (.input1)
-                        @}
-                outputb :
-                        @{
-                        foo.o (.input2)
-                        foo1.o (.input1)
-                        @}
-                outputc :
-                        @{
-                        *(.input1)
-                        *(.input2)
-                        @}
-                @}
+@item BLOCK(@var{align})
+@kindex BLOCK(@var{align})
+@cindex section alignment
+@cindex aligning sections
+You can include @code{BLOCK()} specification to advance
+the location counter @code{.} prior to the beginning of the section, so
+that the section will begin at the specified alignment.  @var{align} is
+an expression.
+
+@item (NOLOAD)
+@kindex NOLOAD
+@cindex prevent unnecessary loading
+Use @samp{(NOLOAD)} to prevent a section from being loaded into memory
+each time it is accessed.  For example, in the script sample below, the
+@code{ROM} segment is addressed at memory location @samp{0} and does not
+need to be loaded into each object file:
+@example
+SECTIONS @{
+        ROM  0  (NOLOAD)  : @{ @dots{} @}
+        @dots{}
+@}
+@end example
+
+@item =@var{fill}
+@kindex =@var{fill}
+@cindex section fill pattern
+@cindex fill pattern, entire section
+Including
+@code{=@var{fill}} in a section definition specifies the initial fill
+value for that section.
+You may use any expression to specify @var{fill}.
+Any unallocated holes in the current output
+section when written to the output file will be filled with the two
+least significant bytes of the value, repeated as necessary.  You can
+also change the fill value with a @code{FILL} statement in the
+@var{contents} of a section definition.
+
+@item >@var{region}
+@kindex >@var{region}
+@cindex section, assigning to memory region
+@cindex memory regions and sections
+Assign this section to a previously defined region of memory.  
+@xref{MEMORY}.
 
-@end example        
-@end table
 @end table
-@section Using the Location Counter
-The special linker variable @code{dot}, @samp{.} always contains the
-current output location counter. Since the @code{dot} always refers to
-a location in an output section, it must always appear in an
-expression within a @code{SECTIONS} directive. The @code{dot} symbol
-may appear anywhere that an ordinary symbol may appear in an
-expression, but its assignments have a side effect. Assigning a value
-to the @code{dot} symbol will cause the location counter to be moved.
-This may be used to create holes in the output section.  The location
-counter may never be moved backwards.
+
+@node Entry Point
+@section The Entry Point
+@kindex ENTRY(@var{symbol})
+@cindex start of execution
+@cindex first instruction
+The linker command language includes a command specifically for
+defining the first executable instruction in an output file (its
+@dfn{entry point}).  Its argument is a symbol name:
 @example
-        SECTIONS
-        @{
-                output :
-                @{
-                file1(.text)
-                . = . + 1000;
-                file2(.text)
-                . += 1000;
-                file3(.text)
-                . -= 32;
-                file4(.text)
-                @} = 0x1234;
-        @}
+ENTRY(@var{symbol})
 @end example
-In the previous example, @code{file1} is located at the beginning of
-the output section, then there is a 1000 byte gap, filled with 0x1234.
-Then @code{file2} appears, also with a 1000 byte gap following before
-@code{file3} is loaded. Then the first 32 bytes of @code{file4} are
-placed over the last 32 bytes of @code{file3}.
-@section Command Language Syntax
-@section The Entry Point
-The linker chooses the first executable instruction in an output file from a list
-of possibilities, in order:
+
+Like symbol assignments, the @code{ENTRY} command may be placed either
+as an independent command in the command file, or among the section
+definitions within the @code{SECTIONS} command---whatever makes the most
+sense for your layout.
+
+@cindex entry point, defaults
+@code{ENTRY} is only one of several ways of choosing the entry point.
+You may indicate it in any of the following ways (shown in descending
+order of priority: methods higher in the list override methods lower down).
 @itemize @bullet
 @item 
-The value of the symbol provided to the command line with the @code{-e} option, when
-present.
+the @samp{-e} @var{entry} command-line option;
 @item 
-The value of the symbol provided in the @code{ENTRY} directive,
-if present.
+the @code{ENTRY(@var{symbol}} command in a linker control script;
 @item 
-The value of the symbol @code{start}, if present.
+the value of the symbol @code{start}, if present;
 @item 
-The value of the symbol @code{_main}, if present.
+the value of the symbol @code{_main}, if present;
 @item 
-The address of the first byte of the @code{.text} section, if present.
+the address of the first byte of the @code{.text} section, if present;
 @item 
-The value 0.
+The address @code{0}.
 @end itemize
-If the symbol @code{start} is not defined within the set of input
-files to a link, it may be generated by a simple assignment
-expression. eg.
+
+For example, you can use these rules to generate an entry point with an
+assignment statement: if no symbol @code{start} is defined within your
+input files, you can simply define it, assigning it an appropriate
+value---
 @example
-        start = 0x2020;
+start = 0x2020;
 @end example
-@section Section Attributes
-@section Allocation of Sections into Memory
-@section Defining Symbols
-@chapter Examples of operation
-The simplest case is linking standard Unix object files on a standard
-Unix system supported by the linker. To link a file hello.o:
+
+@noindent
+The example shows an absolute address, but you can use any expression.
+For example, if your input object files use some other symbol-name
+convention for the entry point, you can just assign the value of
+whatever symbol contains the start address to @code{start}:
 @example
-$ gld -o output /lib/crt0.o hello.o -lc
+start = other_symbol ;
 @end example
-This tells gld to produce a file called @code{output} after linking
-the file @code{/lib/crt0.o} with @code{hello.o} and the library
-@code{libc.a} which will come from the standard search directories.
-@chapter Partial Linking
-Specifying the @code{-r} on the command line causes @code{gld} to
-perform a partial link.
 
+@node Other Commands
+@section Other Commands
+The command language includes a number of other commands that you can
+use for specialized purposes.  They are similar in purpose to
+command-line options.
 
-@chapter BFD
+@table @code
+@item FLOAT
+@kindex FLOAT
+@itemx NOFLOAT
+@kindex NOFLOAT
+These keywords were used in some older linkers to request a particular
+math subroutine library.  @code{ld} doesn't use the keywords, assuming
+instead that any necessary subroutines are in libraries specified using
+the general mechanisms for linking to archives; but to permit the use of
+scripts that were written for the older linkers, the keywords
+@code{FLOAT} and @code{NOFLOAT} are accepted and ignored.
+
+@item FORCE_COMMON_ALLOCATION
+@kindex FORCE_COMMON_ALLOCATION
+@cindex common allocation
+This command has the same effect as the @samp{-d} command-line option:
+to make @code{ld} assign space to common symbols even if a relocatable
+output file is specified (@samp{-r}).
+
+@item INPUT ( @var{file}, @var{file}, @dots{} )
+@kindex INPUT ( @var{files} )
+@itemx INPUT ( @var{file} @var{file} @dots{} )
+@cindex binary input files
+Use this command to include binary input files in the link, without
+including them in a particular section definition.  Files specified this
+way are treated identically to object files listed on the command line.
+
+@ignore
+@item MAP ( @var{name} )
+@kindex MAP ( @var{name} )
+@c MAP(...) appears to look for an F in the arg, ignoring all other
+@c chars; if it finds one, it sets "map_option_f" to true.  But nothing
+@c checks map_option_f.  Apparently a stub for the future...
+@end ignore
+
+@item OUTPUT ( @var{filename} )
+@kindex OUTPUT ( @var{filename} )
+@cindex naming the output file
+Use this command to name the link output file @var{filename}.  The
+effect of @code{OUTPUT(@var{filename})} is identical to the effect of
+@w{@samp{-o @var{filename}}}, and whichever is encountered last will
+control the name actually used to name the output file.  In particular,
+you can use this command to supply a default output-file name other than
+@code{a.out}.
+
+@ifclear SingleFormat
+@item OUTPUT_ARCH ( @var{bfdname} )
+@kindex OUTPUT_ARCH ( @var{bfdname} )
+@cindex machine architecture, output
+Specify a particular output machine architecture, with one of the names
+used by the BFD back-end routines (@pxref{BFD}).  This command is often
+unnecessary; the architecture is most often set implicitly by either the
+system BFD configuration or as a side effect of the @code{OUTPUT_FORMAT}
+command.
+
+@item OUTPUT_FORMAT ( @var{bfdname} )
+@kindex OUTPUT_FORMAT ( @var{bfdname} )
+@cindex format, output file
+Specify a particular output format, with one of the names used by the
+BFD back-end routines (@pxref{BFD}).  This selection will only affect
+the output file; the related command @code{TARGET} affects primarily
+input files.
+@end ifclear
+
+@item SEARCH_DIR ( @var{path} )
+@kindex SEARCH_DIR ( @var{path} )
+@cindex path for libraries
+@cindex search path, libraries
+Add @var{path} to the list of paths where @code{ld} looks for
+archive libraries.  @code{SEARCH_DIR(@var{path})} has the same
+effect as @samp{-L@var{path}} on the command line.
+
+@item STARTUP ( @var{filename} )
+@kindex STARTUP ( @var{filename} )
+@cindex first input file
+Ensure that @var{filename} is the first input file used in the link
+process. 
+
+@ifclear SingleFormat
+@item TARGET ( @var{format} )
+@cindex input file format
+@kindex TARGET ( @var{format} )
+Change the input-file object code format (like the command-line option
+@samp{-b} or its synonym @samp{-format}).  The argument @var{format} is
+one of the strings used by BFD to name binary formats.  In the current
+@code{ld} implementation, if @code{TARGET} is specified but
+@code{OUTPUT_FORMAT} is not, the last @code{TARGET} argument is also
+used as the default format for the @code{ld} output file.
+@xref{BFD}.
+
+@kindex GNUTARGET
+If you don't use the @code{TARGET} command, @code{ld} uses the value of
+the environment variable @code{GNUTARGET}, if available, to select the
+output file format.  If that variable is also absent, @code{ld} uses
+the default format configured for your machine in the BFD libraries.
+@end ifclear
+@end table
 
-The linker accesses object and archive files using the @code{bfd}
-libraries. These libraries allow the linker to use the same routines
-to operate on object files whatever the object file format.
+@ifset GENERIC
+@node Machine Dependent
+@chapter Machine Dependent Features
+
+@cindex machine dependencies
+@code{ld} has additional features on some platforms; the following
+sections describe them.  Machines where @code{ld} has no additional
+functionality are not listed.
+
+@menu
+* H8/300::                      @code{ld} and the H8/300
+* i960::                        @code{ld} and the Intel 960 family
+@end menu
+@end ifset
+
+@c FIXME!  This could use @up/@down, but there seems to be a conflict
+@c         between those and node-defaulting.
+@ifset H8300
+@ifclear GENERIC
+@up
+@end ifclear
+@node H8/300
+@section @code{ld} and the H8/300
+
+@cindex H8/300 support
+For the H8/300, @code{ld} can perform these global optimizations when
+you specify the @samp{-relax} command-line option.
+
+@table @emph
+@item relaxing address modes
+@cindex relaxing on H8/300
+@code{ld} finds all @code{jsr} and @code{jmp} instructions whose
+targets are within eight bits, and turns them into eight-bit
+program-counter relative @code{bsr} and @code{bra} instructions,
+respectively.
 
-A different object file format can be supported simply by creating a
-new @code{bfd} back end and adding it to the library.
+@item synthesizing instructions
+@cindex synthesizing on H8/300
+@c FIXME: specifically mov.b, or any mov instructions really?
+@code{ld} finds all @code{mov.b} instructions which use the
+sixteen-bit absolute address form, but refer to the top
+page of memory, and changes them to use the eight-bit address form.
+(That is: the linker turns @samp{mov.b @code{@@}@var{aa}:16} into
+@samp{mov.b @code{@@}@var{aa}:8} whenever the address @var{aa} is in the
+top page of memory).
+@end table
+@ifclear GENERIC
+@down
+@end ifclear
+@end ifset
+
+@ifset I960
+@ifclear GENERIC
+@up
+@end ifclear
+@node i960
+@section @code{ld} and the Intel 960 family
+
+@cindex i960 support
+
+You can use the @samp{-A@var{architecture}} command line option to
+specify one of the two-letter names identifying members of the 960
+family; the option specifies the desired output target, and warns of any
+incompatible instructions in the input files.  It also modifies the
+linker's search strategy for archive libraries, to support the use of
+libraries specific to each particular architecture, by including in the
+search loop names suffixed with the string identifying the architecture.
+
+For example, if your @code{ld} command line included @w{@samp{-ACA}} as
+well as @w{@samp{-ltry}}, the linker would look (in its built-in search
+paths, and in any paths you specify with @samp{-L}) for a library with
+the names
 
-Formats currently supported:
-@itemize @bullet
-@item 
-Sun3 68k a.out
-@item 
-IEEE-695 68k Object Module Format
-@item 
-Oasys 68k Binary Relocatable Object File Format
-@item 
-Sun4 sparc a.out
-@item 
-88k bcs coff
-@item 
-i960 coff little endian
-@item 
-i960 coff big endian
-@item 
-i960 b.out little endian
-@item 
-i960 b.out big endian
-@end itemize
+@example
+try
+libtry.a
+tryca
+libtryca.a
+@end example
+
+@noindent
+The first two possibilities would be considered in any event; the last
+two are due to the use of @w{@samp{-ACA}}.
+
+You can meaningfully use @samp{-A} more than once on a command line, since
+the 960 architecture family allows combination of target architectures; each
+use will add another pair of name variants to search for when @w{@samp{-l}}
+specifies a library.
+@ifclear GENERIC
+@down
+@end ifclear
+@end ifset
+
+@ifclear SingleFormat
+@node BFD
+@chapter BFD
 
-As with most implementations, @code{bfd} is a compromise between
+@cindex back end
+@cindex object file management
+The linker accesses object and archive files using the BFD libraries.
+These libraries allow the linker to use the same routines to operate on
+object files whatever the object file format.  A different object file
+format can be supported simply by creating a new BFD back end and adding
+it to the library.  You can use @code{objdump -i}
+(@pxref{objdump,,objdump,binutils.info,The GNU Binary Utilities}) to
+list all the formats available for each architecture under BFD.  This
+was the list of formats, and of architectures supported for each format,
+as of the time this manual was prepared:
+@cindex formats available
+@cindex architectures available
+@example
+BFD header file version 0.18
+a.out-i386
+ (header big endian, data big endian)
+  m68k:68020
+  a29k
+  sparc
+  i386
+a.out-sunos-big
+ (header big endian, data big endian)
+  m68k:68020
+  a29k
+  sparc
+  i386
+b.out.big
+ (header big endian, data little endian)
+  i960:core
+b.out.little
+ (header little endian, data little endian)
+  i960:core
+coff-a29k-big
+ (header big endian, data big endian)
+  a29k
+coff-h8300
+ (header big endian, data big endian)
+  H8/300
+coff-i386
+ (header little endian, data little endian)
+  i386
+coff-Intel-big
+ (header big endian, data little endian)
+  i960:core
+coff-Intel-little
+ (header little endian, data little endian)
+  i960:core
+coff-m68k
+ (header big endian, data big endian)
+  m68k:68020
+coff-m88kbcs
+ (header big endian, data big endian)
+  m88k:88100
+ecoff-bigmips
+ (header big endian, data big endian)
+  mips
+ecoff-littlemips
+ (header little endian, data little endian)
+  mips
+elf-big
+ (header big endian, data big endian)
+  m68k:68020
+  vax
+  i960:core
+  a29k
+  sparc
+  mips
+  i386
+  m88k:88100
+  H8/300
+  rs6000:6000
+elf-little
+ (header little endian, data little endian)
+  m68k:68020
+  vax
+  i960:core
+  a29k
+  sparc
+  mips
+  i386
+  m88k:88100
+  H8/300
+  rs6000:6000
+ieee
+ (header big endian, data big endian)
+  m68k:68020
+  vax
+  i960:core
+  a29k
+  sparc
+  mips
+  i386
+  m88k:88100
+  H8/300
+  rs6000:6000
+srec
+ (header big endian, data big endian)
+  m68k:68020
+  vax
+  i960:core
+  a29k
+  sparc
+  mips
+  i386
+  m88k:88100
+  H8/300
+  rs6000:6000
+@end example
+
+@cindex BFD requirements
+@cindex requirements for BFD
+As with most implementations, BFD is a compromise between
 several conflicting requirements. The major factor influencing
-@code{bfd} design was efficiency, any time used converting between
-formats is time which would not have been spent had @code{bfd} not
+BFD design was efficiency: any time used converting between
+formats is time which would not have been spent had BFD not
 been involved. This is partly offset by abstraction payback; since
-@code{bfd} simplifies applications and back ends, more time and care
+BFD simplifies applications and back ends, more time and care
 may be spent optimizing algorithms for a greater speed.
 
-One minor artifact of the @code{bfd} solution which the
-user should be aware of is information lossage.
-There are two places where useful information can be lost using the 
-@code{bfd} mechanism; during conversion and during output. 
-
-@section How it works
-When an object file is opened, @code{bfd}
-tries to automatically determine the format of the input object file, a
-descriptor is built in memory with pointers to routines to access
-elements of the object file's data structures.
-
-As different information from the the object files is required
-@code{bfd} reads from different sections of the file and processes
-them. For example a very common operation for the linker is processing
-symbol tables.  Each @code{bfd} back end provides a routine for
-converting between the object file's representation of symbols and an
-internal canonical format. When the linker asks for the symbol table
-of an object file, it calls through the memory pointer to the relevant
-@code{bfd} back end routine which reads and converts the table into
-the canonical form.  Linker then operates upon the common form. When
-the link is finished and the linker writes the symbol table of the
-output file, another @code{bfd} back end routine is called which takes
-the newly created symbol table and converts it into the output format.
-
-@section Information Leaks
-@table @bullet{}
-@item Information lost during output.
-The output formats supported by @code{bfd} do not provide identical 
-facilities, and information which may be described in one form 
-has no where to go in another format. One example of this would be
-alignment information in @code{b.out}. There is no where in an @code{a.out}
-format file to store alignment information on the contained data, so when
-a file is linked from @code{b.out} and an @code{a.out} image is produced,
-alignment information is lost. (Note that in this case the linker has the
-alignment information internally, so the link is performed correctly). 
+One minor artifact of the BFD solution which you should bear in
+mind is the potential for information loss.  There are two places where
+useful information can be lost using the BFD mechanism: during
+conversion and during output. @xref{BFD information loss}.
+
+@menu
+* BFD outline::                 How it works: an outline of BFD
+* BFD information loss::        Information Loss
+* Mechanism::                   Mechanism 
+@end menu
+
+@node BFD outline
+@section How it works: an outline of BFD
+@cindex opening object files
+When an object file is opened, BFD subroutines automatically
+determine the format of the input object file, and build a descriptor in
+memory with pointers to routines that will be used to access elements of
+the object file's data structures.
+
+As different information from the the object files is required,
+BFD reads from different sections of the file and processes them.
+For example, a very common operation for the linker is processing symbol
+tables.  Each BFD back end provides a routine for converting
+between the object file's representation of symbols and an internal
+canonical format. When the linker asks for the symbol table of an object
+file, it calls through the memory pointer to the BFD
+back end routine which reads and converts the table into a canonical
+form.  The linker then operates upon the common form. When the link is
+finished and the linker writes the symbol table of the output file,
+another BFD back end routine is called which takes the newly
+created symbol table and converts it into the chosen output format.
+
+@node BFD information loss
+@section Information Loss
+@emph{Information can be lost during output.} The output formats
+supported by BFD do not provide identical facilities, and
+information which may be described in one form has nowhere to go in
+another format. One example of this is alignment information in
+@code{b.out}. There is nowhere in an @code{a.out} format file to store
+alignment information on the contained data, so when a file is linked
+from @code{b.out} and an @code{a.out} image is produced, alignment
+information will not propagate to the output file. (The linker will
+still use the alignment information internally, so the link is performed
+correctly).
 
 Another example is COFF section names. COFF files may contain an
 unlimited number of sections, each one with a textual section name. If
-the target of the link is a format which does not have many sections
-(eg @code{a.out}) or has sections without names (eg the Oasys format)
-the link cannot be done simply. It is possible to circumvent this
-problem by describing the desired input section to output section
-mapping with the command language.
-
-@item Information lost during canonicalization.  
-The @code{bfd}
-internal canonical form of the external formats is not exhaustive,
-there are structures in input formats for which there is no direct
-representation internally.  This means that the @code{bfd} back ends
-cannot maintain all the data richness through the transformation
+the target of the link is a format which does not have many sections (e.g.,
+@code{a.out}) or has sections without names (e.g., the Oasys format) the
+link cannot be done simply. You can circumvent this problem by
+describing the desired input-to-output section mapping with the command
+language.
+
+@emph{Information can be lost during canonicalization.} The BFD
+internal canonical form of the external formats is not exhaustive; there
+are structures in input formats for which there is no direct
+representation internally.  This means that the BFD back ends
+cannot maintain all possible data richness through the transformation
 between external to internal and back to external formats.
 
 This limitation is only a problem when using the linker to read one
-format and write another. Each @code{bfd} back end is responsible for
-maintaining as much data as possible, and the internal @code{bfd}
-canonical form has structures which are opaque to the @code{bfd} core,
+format and write another. Each BFD back end is responsible for
+maintaining as much data as possible, and the internal BFD
+canonical form has structures which are opaque to the BFD core,
 and exported only to the back ends. When a file is read in one format,
-the canonical form is generated for @code{bfd} and the linker. At the
-same time, the back end saves away any information which may otherwise
-be lost. If the data is then written back to the same back end, the
-back end routine will be able to use the canonical form provided by
-the @code{bfd} core as well as the information it prepared earlier.
-Since there is a great deal of commonality between back ends, this
-mechanism is very useful. There is no information lost when linking
-big endian COFF to little endian COFF, or from a.out to b.out. When a
-mixture of formats are linked, the information is only lost from the
-files with a different format to the destination.  
-@end table 
+the canonical form is generated for BFD and the linker. At the
+same time, the back end saves away any information which would otherwise
+be lost. If the data is then written back in the same format, the back
+end routine will be able to use the canonical form provided by the
+BFD core as well as the information it prepared earlier.  Since
+there is a great deal of commonality between back ends,
+there is no information lost when
+linking big endian COFF to little endian COFF, or from @code{a.out} to
+@code{b.out}.  When a mixture of formats is linked, the information is
+only lost from the files whose format differs from the destination.
+
+@node Mechanism
 @section Mechanism 
-The smallest amount of information is preserved when there
-is a small union between the information provided by the source
-format, that stored by the canonical format and the information needed
-by the destination format. A brief description of the canonical form
-will help the user appreciate what is possible to be maintained
-between conversions.
-
-@table @bullet 
-@item file level Information on target machine
-architecture, particular implementation and format type are stored on
-a per file basis. Other information includes a demand pageable bit and
-a write protected bit.  Note that information like Unix magic numbers
-is not stored here, only the magic numbers meaning, so a ZMAGIC file
-would have both the demand pageable bit and the write protected text
-bit set.
-
-The byte order of the target is stored on a per file basis, so that
-both big and little endian object files may be linked together at the
-same time.
-@item section level
+The greatest potential for loss of information occurs when there is the least
+overlap between the information provided by the source format, that
+stored by the canonical format, and that needed by the
+destination format. A brief description of the canonical form may help
+you understand which kinds of data you can count on preserving across
+conversions.
+@cindex BFD canonical format
+@cindex internal object-file format
+
+@table @emph
+@item files
+Information on target machine architecture, particular implementation,
+and format type are stored on a per-file basis. Other information
+includes a demand pagable bit and a write protected bit.
+Information like Unix magic numbers is not stored here---only the magic
+numbers' meaning, so a @code{ZMAGIC} file would have both the demand pagable
+bit and the write protected text bit set.
+
+The byte order of the target is stored on a per-file basis, so that big-
+and little-endian object files may be linked with one another.
+
+@item sections
 Each section in the input file contains the name of the section, the
-original address in the object file, various flags, size and alignment
-information and pointers into other @code{bfd} data structures.
-@item symbol level
+original address in the object file, various options, size and alignment
+information and pointers into other BFD data structures.
+
+@item symbols
 Each symbol contains a pointer to the object file which originally
-defined it, its name, value and various flags bits. When a symbol
-table is read in all symbols are relocated to make them relative to
-the base of the section they were defined in, so each symbol points to
-the containing section. Each symbol also has a varying amount of
-hidden data to contain private data for the back end. Since the symbol
-points to the original file, the symbol private data format is
-accessible. Operations may be done to a list of symbols of wildly
-different formats without problems.
+defined it, its name, its value, and various option bits.  When a
+BFD back end reads in a symbol table, the back end relocates all
+symbols to make them relative to the base of the section where they were
+defined.  Doing this ensures that each symbol points to its containing
+section.  Each symbol also has a varying amount of hidden
+private data for the BFD back end.  Since the symbol points to the
+original file, the private data format for that symbol is accessible.
+@code{ld} can operate on a collection of symbols of wildly different
+formats without problems.
 
 Normal global and simple local symbols are maintained on output, so an
-output file, no matter the format will retain symbols pointing to
-functions, globals, statics and commons.  Some symbol information is
-not worth retaining; in @code{a.out} type information is stored in the
-symbol table as long symbol names. This information would be useless
-to most coff debuggers and may be thrown away with appropriate command
-line switches. (Note that gdb does support stabs in coff).
+output file (no matter its format) will retain symbols pointing to
+functions and to global, static, and common variables.  Some symbol
+information is not worth retaining; in @code{a.out}, type information is
+stored in the symbol table as long symbol names. This information would
+be useless to most COFF debuggers and may be thrown away with
+appropriate command line switches. (The GNU debugger @code{gdb} does
+support @code{a.out} style debugging information in COFF).
 
 There is one word of type information within the symbol, so if the
-format supports symbol type information within symbols - (eg COFF,
+format supports symbol type information within symbols (for example, COFF,
 IEEE, Oasys) and the type is simple enough to fit within one word
-(nearly everything but aggregates) the information will be preserved.
+(nearly everything but aggregates), the information will be preserved.
 
 @item relocation level
-Each canonical relocation record contains a pointer to the symbol to
+Each canonical BFD relocation record contains a pointer to the symbol to
 relocate to, the offset of the data to relocate, the section the data
-is in and a pointer to a relocation type descriptor. Relocation is
-performed effectively by message passing through the relocation type
-descriptor and symbol pointer. It allows relocations to be performed
-on output data using a relocation method only available in one of the
+is in, and a pointer to a relocation type descriptor. Relocation is
+performed by passing messages through the relocation type
+descriptor and the symbol pointer. Therefore, relocations can be performed
+on output data using a relocation method that is only available in one of the
 input formats. For instance, Oasys provides a byte relocation format.
 A relocation record requesting this relocation type would point
 indirectly to a routine to perform this, so the relocation may be
 performed on a byte being written to a COFF file, even though 68k COFF
 has no such relocation type.
+@c FIXME why specific reference to 68K above?
 
 @item line numbers
-Line numbers have to be relocated along with the symbol information.
-Each symbol with an associated list of line number records points to
-the first record of the list.  The head of a line number list consists
-of a pointer to the symbol, which allows divination of the address of
-the function who's line number is being described. The rest of the
-list is tuples offsets into the section and line indexes. Any format
-which can simply derive this information can pass it without lossage
+Object formats can contain, for debugging purposes, some form of mapping
+between symbols, source line numbers, and addresses in the output file.
+These addresses have to be relocated along with the symbol information.
+Each symbol with an associated list of line number records points to the
+first record of the list.  The head of a line number list consists of a
+pointer to the symbol, which allows finding out the address of the
+function whose line number is being described. The rest of the list is
+made up of pairs: offsets into the section and line numbers. Any format
+which can simply derive this information can pass it successfully
 between formats (COFF, IEEE and Oasys).
 @end table
+@end ifclear
+
+@node MRI
+@appendix MRI Compatible Script Files
+@cindex MRI compatibility
+To aid users making the transition to @sc{gnu} @code{ld} from the MRI
+linker, @code{ld} can use MRI compatible linker scripts as an
+alternative to the more general-purpose linker scripting language
+described in @ref{Commands,,Command Language}.  MRI compatible linker
+scripts have a much simpler command set than the scripting language
+otherwise used with @code{ld}.  @sc{gnu} @code{ld} supports the most
+commonly used MRI linker commands; these commands are described here.
+
+You can specify a file containing an MRI-compatible script using the
+@samp{-c} command-line option.
+
+Each command in an MRI-compatible script occupies its own line; each
+command line starts with the keyword that identifies the command (though
+blank lines are also allowed for punctuation).  If a line of an
+MRI-compatible script begins with an unrecognized keyword, @code{ld}
+issues a warning message, but continues processing the script.
+
+Lines beginning with @samp{*} are comments.
+
+You can write these commands using all upper-case letters, or all
+lower case; for example, @samp{chip} is the same as @samp{CHIP}.
+The following list shows only the upper-case form of each command.
+
+@table @code
+@item ABSOLUTE @var{secname}
+@item ABSOLUTE @var{secname}, @var{secname}, @dots{} @var{secname}
+@cindex @code{ABSOLUTE} (MRI)
+Normally, @code{ld} includes in the output file all sections from all
+the input files.  However, in an MRI-compatible script, you can use the
+@code{ABSOLUTE} command to restrict the sections that will be present in
+your output program.  If the @code{ABSOLUTE} command is used at all in a
+script, then only the sections named explicitly in @code{ABSOLUTE}
+commands will appear in the linker output.  You can still use other
+input sections (whatever you select on the command line, or using
+@code{LOAD}) to resolve addresses in the output file.
+
+@item ALIAS @var{out-secname}, @var{in-secname}
+@cindex @code{ALIAS} (MRI)
+Use this command to place the data from input section @var{in-secname}
+in a section called @var{out-secname} in the linker output file.
+
+@var{in-secname} may be an integer.
+
+@item BASE @var{expression}
+@cindex @code{BASE} (MRI)
+Use the value of @var{expression} as the lowest address (other than
+absolute addresses) in the output file.
+
+@item CHIP @var{expression}
+@itemx CHIP @var{expression}, @var{expression}
+@cindex @code{CHIP} (MRI)
+This command does nothing; it is accepted only for compatibility.
+
+@item END
+@cindex @code{END} (MRI)
+This command does nothing whatever; it's only accepted for compatibility.
+
+@item FORMAT @var{output-format}
+@cindex @code{FORMAT} (MRI)
+Similar to the @code{OUTPUT_FORMAT} command in the more general linker
+language, but restricted to one of these output formats: 
+@enumerate
+@item 
+S-records, if @var{output-format} is @samp{S}
+
+@item
+IEEE, if @var{output-format} is @samp{IEEE}
+
+@item
+COFF (the @samp{coff-m68k} variant in BFD), if @var{output-format} is
+@samp{COFF}
+@end enumerate
+
+@item LIST @var{@dots{}}
+@cindex @code{LIST} (MRI)
+Print (to the standard output file) a link map, as produced by the
+@code{ld} command-line option @samp{-M}.
+
+The keyword @code{LIST} may be followed by anything on the
+same line, with no change in its effect.
+
+@item LOAD @var{filename}
+@item LOAD @var{filename}, @var{filename}, @dots{} @var{filename}
+@cindex @code{LOAD} (MRI)
+Include one or more object file @var{filename} in the link; this has the
+same effect as specifying @var{filename} directly on the @code{ld}
+command line.
+
+@item NAME @var{output-name}
+@cindex @code{NAME} (MRI)
+@var{output-name} is the name for the program produced by @code{ld}; the
+MRI-compatible command @code{NAME} is equivalent to the command-line
+option @samp{-o} or the general script language command @code{OUTPUT}.
+
+@item ORDER @var{secname}, @var{secname}, @dots{} @var{secname}
+@itemx ORDER @var{secname} @var{secname} @var{secname}
+@cindex @code{ORDER} (MRI)
+Normally, @code{ld} orders the sections in its output file in the
+order in which they first appear in the input files.  In an MRI-compatible
+script, you can override this ordering with the @code{ORDER} command.  The
+sections you list with @code{ORDER} will appear first in your output
+file, in the order specified.
+
+@item PUBLIC @var{name}=@var{expression}
+@itemx PUBLIC @var{name},@var{expression}
+@itemx PUBLIC @var{name} @var{expression}
+@cindex @code{PUBLIC} (MRI)
+Supply a value (@var{expression}) for external symbol
+@var{name} used in the linker input files.
+
+@item SECT @var{secname}, @var{expression}
+@itemx SECT @var{secname}=@var{expression}
+@itemx SECT @var{secname} @var{expression}
+@cindex @code{SECT} (MRI)
+You can use any of these three forms of the @code{SECT} command to
+specify the start address (@var{expression}) for section @var{secname}.
+If you have more than one @code{SECT} statement for the same
+@var{secname}, only the @emph{first} sets the start address.
+@end table
+
+
+@node Index
+@unnumbered Index
+
+@printindex cp
+
+@tex
+% I think something like @colophon should be in texinfo.  In the
+% meantime:
+\long\def\colophon{\hbox to0pt{}\vfill
+\centerline{The body of this manual is set in}
+\centerline{\fontname\tenrm,}
+\centerline{with headings in {\bf\fontname\tenbf}}
+\centerline{and examples in {\tt\fontname\tentt}.}
+\centerline{{\it\fontname\tenit\/} and}
+\centerline{{\sl\fontname\tensl\/}}
+\centerline{are used for emphasis.}\vfill}
+\page\colophon
+% Blame: [email protected], 28mar91.
+@end tex
 
 
+@contents
 @bye
 
 
This page took 0.093605 seconds and 4 git commands to generate.