aboutsummaryrefslogtreecommitdiff
path: root/ld/ld.tex
diff options
context:
space:
mode:
Diffstat (limited to 'ld/ld.tex')
-rwxr-xr-xld/ld.tex1014
1 files changed, 0 insertions, 1014 deletions
diff --git a/ld/ld.tex b/ld/ld.tex
deleted file mode 100755
index 1764ad5..0000000
--- a/ld/ld.tex
+++ /dev/null
@@ -1,1014 +0,0 @@
-\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.
-
-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.
-
-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.
-
-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
-
-@node Top,,,
-@comment node-name, next, previous, up
-@ifinfo
-This file documents the GNU linker gld.
-@end ifinfo
-
-@c chapter What does a linker do ?
-@c chapter Command Language
-@noindent
-@chapter Overview
-
-
-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}.
-
-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.
-
-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.
-
-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.
-
-@chapter Command line options
-
-@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{}
-@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
-different argument will either have no further effect, or override prior
-occurrences (those further to the left on the command line) of an
-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
-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 -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}.
-
-@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.
-
-@item -i
-Produce an incremental link (same as option @code{-r}).
-
-@item -l @var{arch}
-Add an archive file @var{arch} 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}
-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
-
-@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.
-
-@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.
-
-@item -M
-@itemx -m
-Print (to the standard output file) a link map---diagnostic information
-about where symbols are mapped by @code{ld}, and information on global
-common storage allocation.
-
-@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.
-
-@item -n
-sets the text segment to be read only, and @code{NMAGIC} is written
-if possible.
-
-@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.
-
-@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.
-
-@item -S
-Omits 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}
-@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.
-
-@item -t
-Prints names of 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.
-
-@item -X
-If @code{-s} or @code{-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}.
-
-
-@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
-
-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
-
-@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
-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
-
-@subsection Integers
-An octal integer is @samp{0} followed by zero or more of the octal
-digits (@samp{01234567}).
-
-A decimal integer starts with a non-zero digit followed by zero or
-more digits (@samp{0123456789}).
-
-A hexadecimal integer is @samp{0x} or @samp{0X} followed by one or
-more hexadecimal digits chosen from @samp{0123456789abcdefABCDEF}.
-
-Integers have the usual values. To denote a negative integer, use
-the unary operator @samp{-} discussed under expressions.
-
-Additionally the suffixes @code{K} and @code{M} may be used to multiply the
-previous constant by 1024 or
-@tex
-$1024^2$
-@end tex
-respectively.
-
-@example
- _as_decimal = 57005;
- _as_hex = 0xdead;
- _as_octal = 0157255;
-
- _4k_1 = 4K;
- _4k_2 = 4096;
- _4k_3 = 0x1000;
-@end example
-@subsection Operators
-The linker provides the standard C set of arithmetic operators, with
-the standard bindings and precedence levels:
-@example
-
-@end example
-@tex
-
-\vbox{\offinterlineskip
-\hrule
-\halign
-{\vrule#&\hfil#\hfil&\vrule#&\hfil#\hfil&\vrule#&\hfil#\hfil&\vrule#\cr
-height2pt&&&&&\cr
-&Level&& associativity &&Operators&\cr
-height2pt&&&&&\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
-&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}
-\hrule}
-@end tex
-
-@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) :@{
- *(.data)
- variable = ALIGN(0x8000);
- @}
-@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:
-@example
- .output1:
- @{
- start_of_output_1 $= .;
- ...
- @}
- .output:
- @{
- symbol_1 = ADDR(.output1);
- symbol_2 = start_of_output_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{symbol_2} are assigned identical values:
-@example
- .output @{
- .start = . ;
- ...
- .end = .;
- @}
- symbol_1 = .end - .start;
- symbol_2 = SIZEOF(.output);
-@end example
-
-@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
-
- @}
-@end example
-@table @code
-@item @var{name}
-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.
-@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
-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}
-@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:
-
-@example
- MEMORY
- @{
- rom : ORIGIN= 0, LENGTH = 256K
- ram : ORIGIN= 0x40000000, LENGTH = 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.
-
-The syntax of the @code{SECTIONS} directive 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
- @}
-@end example
-
-@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'')
- @}
-
- .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}:
-@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 @{
- ...
- @}
- .data ALIGN(4K) @{
- ...
- @}
- @}
-@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:
- @{
- @}
- @}
- testscript:21: Non constant expression for initial address
-@end example
-
-@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
-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);
- @}
- @}
-@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:
-@example
-From functions like :
-a.c:
- afunction() { }
- int adata=1;
- int abss;
-
-00000000 A __DYNAMIC
-00004020 B _abss
-00004000 D _adata
-00002020 T _afunction
-00004024 B _bbss
-00004008 D _bdata
-00002038 T _bfunction
-00004028 B _cbss
-00004010 D _cdata
-00002050 T _cfunction
-0000402c B _dbss
-00004018 D _ddata
-00002068 T _dfunction
-00004020 D _edata
-00004030 B _end
-00004000 T _etext
-00002020 t a.o
-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:
-@example
-
- insert here
-@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.
-
-@item @var{filename} @code{[COMMON]}
-This allocates all the common symbols from the specified file and places
-them into the current output section.
-
-@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.
-
-@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)
- @}
- @}
-
-@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.
-@example
- SECTIONS
- @{
- output :
- @{
- file1(.text)
- . = . + 1000;
- file2(.text)
- . += 1000;
- file3(.text)
- . -= 32;
- file4(.text)
- @} = 0x1234;
- @}
-@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:
-@itemize @bullet
-@item
-The value of the symbol provided to the command line with the @code{-e} option, when
-present.
-@item
-The value of the symbol provided in the @code{ENTRY} directive,
-if present.
-@item
-The value of the symbol @code{start}, if present.
-@item
-The value of the symbol @code{_main}, if present.
-@item
-The address of the first byte of the @code{.text} section, if present.
-@item
-The value 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.
-@example
- 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:
-@example
-$ gld -o output /lib/crt0.o hello.o -lc
-@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.
-
-
-@chapter BFD
-
-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.
-
-A different object file format can be supported simply by creating a
-new @code{bfd} back end and adding it to the library.
-
-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
-
-As with most implementations, @code{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
-been involved. This is partly offset by abstraction payback; since
-@code{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).
-
-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
-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,
-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
-@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
-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
-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.
-
-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).
-
-There is one word of type information within the symbol, so if the
-format supports symbol type information within symbols - (eg COFF,
-IEEE, Oasys) and the type is simple enough to fit within one word
-(nearly everything but aggregates) the information will be preserved.
-
-@item relocation level
-Each canonical 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
-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.
-
-@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
-between formats (COFF, IEEE and Oasys).
-@end table
-
-
-@bye
-
-