mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-22 19:09:31 +08:00
adjusting repository after cvs mixup
This commit is contained in:
65
ld/ld.info
65
ld/ld.info
@ -1,65 +0,0 @@
|
||||
This is Info file ld.info, produced by Makeinfo-1.55 from the input
|
||||
file ./ld.texinfo.
|
||||
|
||||
START-INFO-DIR-ENTRY
|
||||
* Ld:: The GNU linker.
|
||||
END-INFO-DIR-ENTRY
|
||||
|
||||
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 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.
|
||||
|
||||
|
||||
Indirect:
|
||||
ld.info-1: 857
|
||||
ld.info-2: 49400
|
||||
|
||||
Tag Table:
|
||||
(Indirect)
|
||||
Node: Top857
|
||||
Node: Overview1330
|
||||
Node: Invocation2478
|
||||
Node: Options2886
|
||||
Node: Environment20209
|
||||
Node: Commands21154
|
||||
Node: Scripts22148
|
||||
Node: Expressions23246
|
||||
Node: Integers24173
|
||||
Node: Symbols25012
|
||||
Node: Location Counter25572
|
||||
Node: Operators26768
|
||||
Node: Evaluation27678
|
||||
Node: Assignment28373
|
||||
Node: Arithmetic Functions31454
|
||||
Node: MEMORY35234
|
||||
Node: SECTIONS37821
|
||||
Node: Section Definition39419
|
||||
Node: Section Placement40867
|
||||
Node: Section Data Expressions45560
|
||||
Node: Section Options49400
|
||||
Node: Entry Point51581
|
||||
Node: Option Commands53174
|
||||
Node: Machine Dependent56493
|
||||
Node: H8/30056913
|
||||
Node: i96057708
|
||||
Node: BFD58918
|
||||
Node: BFD outline62281
|
||||
Node: BFD information loss63566
|
||||
Node: Canonical format66074
|
||||
Node: MRI70420
|
||||
Node: Index74894
|
||||
|
||||
End Tag Table
|
1255
ld/ld.info-1
1255
ld/ld.info-1
File diff suppressed because it is too large
Load Diff
941
ld/ld.info-2
941
ld/ld.info-2
@ -1,941 +0,0 @@
|
||||
This is Info file ld.info, produced by Makeinfo-1.55 from the input
|
||||
file ./ld.texinfo.
|
||||
|
||||
START-INFO-DIR-ENTRY
|
||||
* Ld:: The GNU linker.
|
||||
END-INFO-DIR-ENTRY
|
||||
|
||||
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 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.
|
||||
|
||||
|
||||
File: ld.info, Node: Section Options, Prev: Section Data Expressions, Up: SECTIONS
|
||||
|
||||
Optional Section Attributes
|
||||
---------------------------
|
||||
|
||||
Here is the full syntax of a section definition, including all the
|
||||
optional portions:
|
||||
|
||||
SECTIONS {
|
||||
...
|
||||
SECNAME START BLOCK(ALIGN) (NOLOAD) : { CONTENTS } =FILL >REGION
|
||||
...
|
||||
}
|
||||
|
||||
SECNAME and CONTENTS are required. *Note Section Definition::, and
|
||||
*note Section Placement::. for details on CONTENTS. The remaining
|
||||
elements--START, `BLOCK(ALIGN)', `(NOLOAD)' `=FILL', and `>REGION'--are
|
||||
all optional.
|
||||
|
||||
`START'
|
||||
You can force the output section to be loaded at a specified
|
||||
address by specifying START immediately following the section name.
|
||||
sTART can be represented as any expression. The following example
|
||||
generates section OUTPUT at location `0x40000000':
|
||||
SECTIONS {
|
||||
...
|
||||
output 0x40000000: {
|
||||
...
|
||||
}
|
||||
...
|
||||
}
|
||||
|
||||
`BLOCK(ALIGN)'
|
||||
You can include `BLOCK()' specification to advance the location
|
||||
counter `.' prior to the beginning of the section, so that the
|
||||
section will begin at the specified alignment. ALIGN is an
|
||||
expression.
|
||||
|
||||
`(NOLOAD)'
|
||||
Use `(NOLOAD)' to prevent a section from being loaded into memory
|
||||
each time it is accessed. For example, in the script sample
|
||||
below, the `ROM' segment is addressed at memory location `0' and
|
||||
does not need to be loaded into each object file:
|
||||
SECTIONS {
|
||||
ROM 0 (NOLOAD) : { ... }
|
||||
...
|
||||
}
|
||||
|
||||
`=FILL'
|
||||
Including `=FILL' in a section definition specifies the initial
|
||||
fill value for that section. You may use any expression to
|
||||
specify 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 `FILL' statement in the CONTENTS
|
||||
of a section definition.
|
||||
|
||||
`>REGION'
|
||||
Assign this section to a previously defined region of memory.
|
||||
*Note MEMORY::.
|
||||
|
||||
|
||||
File: ld.info, Node: Entry Point, Next: Option Commands, Prev: SECTIONS, Up: Commands
|
||||
|
||||
The Entry Point
|
||||
===============
|
||||
|
||||
The linker command language includes a command specifically for
|
||||
defining the first executable instruction in an output file (its "entry
|
||||
point"). Its argument is a symbol name:
|
||||
ENTRY(SYMBOL)
|
||||
|
||||
Like symbol assignments, the `ENTRY' command may be placed either as
|
||||
an independent command in the command file, or among the section
|
||||
definitions within the `SECTIONS' command--whatever makes the most
|
||||
sense for your layout.
|
||||
|
||||
`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).
|
||||
* the `-e' ENTRY command-line option;
|
||||
|
||||
* the `ENTRY(SYMBOL' command in a linker control script;
|
||||
|
||||
* the value of the symbol `start', if present;
|
||||
|
||||
* the value of the symbol `_main', if present;
|
||||
|
||||
* the address of the first byte of the `.text' section, if present;
|
||||
|
||||
* The address `0'.
|
||||
|
||||
For example, you can use these rules to generate an entry point with
|
||||
an assignment statement: if no symbol `start' is defined within your
|
||||
input files, you can simply define it, assigning it an appropriate
|
||||
value--
|
||||
start = 0x2020;
|
||||
|
||||
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 `start':
|
||||
start = other_symbol ;
|
||||
|
||||
|
||||
File: ld.info, Node: Option Commands, Prev: Entry Point, Up: Commands
|
||||
|
||||
Option 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.
|
||||
|
||||
`FLOAT'
|
||||
`NOFLOAT'
|
||||
These keywords were used in some older linkers to request a
|
||||
particular math subroutine library. `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 `FLOAT' and `NOFLOAT' are accepted
|
||||
and ignored.
|
||||
|
||||
`FORCE_COMMON_ALLOCATION'
|
||||
This command has the same effect as the `-d' command-line option:
|
||||
to make `ld' assign space to common symbols even if a relocatable
|
||||
output file is specified (`-r').
|
||||
|
||||
`INPUT ( FILE, FILE, ... )'
|
||||
`INPUT ( FILE FILE ... )'
|
||||
Use this command to include binary input files in the link, without
|
||||
including them in a particular section definition. Specify the
|
||||
full name for each FILE, including `.a' if required.
|
||||
|
||||
`ld' searches for each FILE through the archive-library search
|
||||
path, just as for files you specify on the command line. See the
|
||||
description of `-L' in *Note Command Line Options: Options.
|
||||
|
||||
`OUTPUT ( FILENAME )'
|
||||
Use this command to name the link output file FILENAME. The
|
||||
effect of `OUTPUT(FILENAME)' is identical to the effect of
|
||||
`-o FILENAME', which overrides it. You can use this command to
|
||||
supply a default output-file name other than `a.out'.
|
||||
|
||||
`OUTPUT_ARCH ( BFDNAME )'
|
||||
Specify a particular output machine architecture, with one of the
|
||||
names used by the BFD back-end routines (*note 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 `OUTPUT_FORMAT' command.
|
||||
|
||||
`OUTPUT_FORMAT ( BFDNAME )'
|
||||
Specify a particular output format, with one of the names used by
|
||||
the BFD back-end routines (*note BFD::.). The effect is identical
|
||||
to the effect of the `-oformat' command-line option. This
|
||||
selection will only affect the output file; the related command
|
||||
`TARGET' affects primarily input files.
|
||||
|
||||
`SEARCH_DIR ( PATH )'
|
||||
Add PATH to the list of paths where `ld' looks for archive
|
||||
libraries. `SEARCH_DIR(PATH)' has the same effect as `-LPATH' on
|
||||
the command line.
|
||||
|
||||
`STARTUP ( FILENAME )'
|
||||
Ensure that FILENAME is the first input file used in the link
|
||||
process.
|
||||
|
||||
`TARGET ( FORMAT )'
|
||||
Change the input-file object code format (like the command-line
|
||||
option `-b' or its synonym `-format'). The argument FORMAT is one
|
||||
of the strings used by BFD to name binary formats. If `TARGET' is
|
||||
specified but `OUTPUT_FORMAT' is not, the last `TARGET' argument
|
||||
is also used as the default format for the `ld' output file.
|
||||
*Note BFD::.
|
||||
|
||||
If you don't use the `TARGET' command, `ld' uses the value of the
|
||||
environment variable `GNUTARGET', if available, to select the
|
||||
output file format. If that variable is also absent, `ld' uses
|
||||
the default format configured for your machine in the BFD
|
||||
libraries.
|
||||
|
||||
|
||||
File: ld.info, Node: Machine Dependent, Next: BFD, Prev: Commands, Up: Top
|
||||
|
||||
Machine Dependent Features
|
||||
**************************
|
||||
|
||||
`ld' has additional features on some platforms; the following
|
||||
sections describe them. Machines where `ld' has no additional
|
||||
functionality are not listed.
|
||||
|
||||
* Menu:
|
||||
|
||||
* H8/300:: `ld' and the H8/300
|
||||
* i960:: `ld' and the Intel 960 family
|
||||
|
||||
|
||||
File: ld.info, Node: H8/300, Next: i960, Up: Machine Dependent
|
||||
|
||||
`ld' and the H8/300
|
||||
===================
|
||||
|
||||
For the H8/300, `ld' can perform these global optimizations when you
|
||||
specify the `-relax' command-line option.
|
||||
|
||||
*relaxing address modes*
|
||||
`ld' finds all `jsr' and `jmp' instructions whose targets are
|
||||
within eight bits, and turns them into eight-bit program-counter
|
||||
relative `bsr' and `bra' instructions, respectively.
|
||||
|
||||
*synthesizing instructions*
|
||||
`ld' finds all `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 `mov.b `@'AA:16' into `mov.b `@'AA:8' whenever the
|
||||
address AA is in the top page of memory).
|
||||
|
||||
|
||||
File: ld.info, Node: i960, Prev: H8/300, Up: Machine Dependent
|
||||
|
||||
`ld' and the Intel 960 family
|
||||
=============================
|
||||
|
||||
You can use the `-AARCHITECTURE' 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 `ld' command line included `-ACA' as well as
|
||||
`-ltry', the linker would look (in its built-in search paths, and in
|
||||
any paths you specify with `-L') for a library with the names
|
||||
|
||||
try
|
||||
libtry.a
|
||||
tryca
|
||||
libtryca.a
|
||||
|
||||
The first two possibilities would be considered in any event; the last
|
||||
two are due to the use of `-ACA'.
|
||||
|
||||
You can meaningfully use `-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 `-l'
|
||||
specifies a library.
|
||||
|
||||
|
||||
File: ld.info, Node: BFD, Next: MRI, Prev: Machine Dependent, Up: Top
|
||||
|
||||
BFD
|
||||
***
|
||||
|
||||
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 `objdump -i' (*note objdump:
|
||||
(binutils.info)objdump.) 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:
|
||||
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
|
||||
|
||||
As with most implementations, BFD is a compromise between several
|
||||
conflicting requirements. The major factor influencing 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 BFD simplifies applications and
|
||||
back ends, more time and care may be spent optimizing algorithms for a
|
||||
greater speed.
|
||||
|
||||
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. *Note BFD information loss::.
|
||||
|
||||
* Menu:
|
||||
|
||||
* BFD outline:: How it works: an outline of BFD
|
||||
|
||||
|
||||
File: ld.info, Node: BFD outline, Up: BFD
|
||||
|
||||
How it works: an outline of BFD
|
||||
===============================
|
||||
|
||||
When an object file is opened, BFD subroutines automatically
|
||||
determine the format of the input object file. They then 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 a memory pointer to the routine from the relevant BFD
|
||||
back end which reads and converts the table into a canonical form. The
|
||||
linker then operates upon the canonical form. When the link is finished
|
||||
and the linker writes the output file's symbol table, another BFD back
|
||||
end routine is called to take the newly created symbol table and
|
||||
convert it into the chosen output format.
|
||||
|
||||
* Menu:
|
||||
|
||||
* BFD information loss:: Information Loss
|
||||
* Canonical format:: The BFD canonical object-file format
|
||||
|
||||
|
||||
File: ld.info, Node: BFD information loss, Next: Canonical format, Up: BFD outline
|
||||
|
||||
Information Loss
|
||||
----------------
|
||||
|
||||
*Information can be lost during output.* The output formats
|
||||
supported by BFD do not provide identical facilities, and information
|
||||
which can be described in one form has nowhere to go in another format.
|
||||
One example of this is alignment information in `b.out'. There is
|
||||
nowhere in an `a.out' format file to store alignment information on the
|
||||
contained data, so when a file is linked from `b.out' and an `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
|
||||
(e.g., `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 linker
|
||||
command language.
|
||||
|
||||
*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 an application reads one
|
||||
format and writes 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 BFD and the application. At the same time, the back
|
||||
end saves away any information which may 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 or copying big endian COFF to little endian COFF, or `a.out' to
|
||||
`b.out'. When a mixture of formats is linked, the information is only
|
||||
lost from the files whose format differs from the destination.
|
||||
|
||||
|
||||
File: ld.info, Node: Canonical format, Prev: BFD information loss, Up: BFD outline
|
||||
|
||||
The BFD canonical object-file format
|
||||
------------------------------------
|
||||
|
||||
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.
|
||||
|
||||
*files*
|
||||
Information stored on a per-file basis includes target machine
|
||||
architecture, particular implementation format type, a demand
|
||||
pageable bit, and a write protected bit. 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 big- and little-endian object
|
||||
files may be used with one another.
|
||||
|
||||
*sections*
|
||||
Each section in the input file contains the name of the section,
|
||||
the section's original address in the object file, size and
|
||||
alignment information, various flags, and pointers into other BFD
|
||||
data structures.
|
||||
|
||||
*symbols*
|
||||
Each symbol contains a pointer to the information for the object
|
||||
file which originally defined it, its name, its value, and various
|
||||
flag bits. When a BFD back end reads in a symbol table, it
|
||||
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. `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 its format) will retain symbols
|
||||
pointing to functions and to global, static, and common variables.
|
||||
Some symbol information is not worth retaining; in `a.out', type
|
||||
information is stored in the symbol table as long symbol names.
|
||||
This information would be useless to most COFF debuggers; the
|
||||
linker has command line switches to allow users to throw it away.
|
||||
|
||||
There is one word of type information within the symbol, so if the
|
||||
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.
|
||||
|
||||
*relocation level*
|
||||
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 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 68k COFF file, even though 68k COFF has no
|
||||
such relocation type.
|
||||
|
||||
*line numbers*
|
||||
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).
|
||||
|
||||
|
||||
File: ld.info, Node: MRI, Next: Index, Prev: BFD, Up: Top
|
||||
|
||||
MRI Compatible Script Files
|
||||
***************************
|
||||
|
||||
To aid users making the transition to GNU `ld' from the MRI linker,
|
||||
`ld' can use MRI compatible linker scripts as an alternative to the
|
||||
more general-purpose linker scripting language described in *Note
|
||||
Command Language: Commands. MRI compatible linker scripts have a much
|
||||
simpler command set than the scripting language otherwise used with
|
||||
`ld'. GNU `ld' supports the most commonly used MRI linker commands;
|
||||
these commands are described here.
|
||||
|
||||
In general, MRI scripts aren't of much use with the `a.out' object
|
||||
file format, since it only has three sections and MRI scripts lack some
|
||||
features to make use of them.
|
||||
|
||||
You can specify a file containing an MRI-compatible script using the
|
||||
`-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, `ld' issues
|
||||
a warning message, but continues processing the script.
|
||||
|
||||
Lines beginning with `*' are comments.
|
||||
|
||||
You can write these commands using all upper-case letters, or all
|
||||
lower case; for example, `chip' is the same as `CHIP'. The following
|
||||
list shows only the upper-case form of each command.
|
||||
|
||||
`ABSOLUTE SECNAME'
|
||||
`ABSOLUTE SECNAME, SECNAME, ... SECNAME'
|
||||
Normally, `ld' includes in the output file all sections from all
|
||||
the input files. However, in an MRI-compatible script, you can
|
||||
use the `ABSOLUTE' command to restrict the sections that will be
|
||||
present in your output program. If the `ABSOLUTE' command is used
|
||||
at all in a script, then only the sections named explicitly in
|
||||
`ABSOLUTE' commands will appear in the linker output. You can
|
||||
still use other input sections (whatever you select on the command
|
||||
line, or using `LOAD') to resolve addresses in the output file.
|
||||
|
||||
`ALIAS OUT-SECNAME, IN-SECNAME'
|
||||
Use this command to place the data from input section IN-SECNAME
|
||||
in a section called OUT-SECNAME in the linker output file.
|
||||
|
||||
IN-SECNAME may be an integer.
|
||||
|
||||
`BASE EXPRESSION'
|
||||
Use the value of EXPRESSION as the lowest address (other than
|
||||
absolute addresses) in the output file.
|
||||
|
||||
`CHIP EXPRESSION'
|
||||
`CHIP EXPRESSION, EXPRESSION'
|
||||
This command does nothing; it is accepted only for compatibility.
|
||||
|
||||
`END'
|
||||
This command does nothing whatever; it's only accepted for
|
||||
compatibility.
|
||||
|
||||
`FORMAT OUTPUT-FORMAT'
|
||||
Similar to the `OUTPUT_FORMAT' command in the more general linker
|
||||
language, but restricted to one of these output formats:
|
||||
1. S-records, if OUTPUT-FORMAT is `S'
|
||||
|
||||
2. IEEE, if OUTPUT-FORMAT is `IEEE'
|
||||
|
||||
3. COFF (the `coff-m68k' variant in BFD), if OUTPUT-FORMAT is
|
||||
`COFF'
|
||||
|
||||
`LIST ANYTHING...'
|
||||
Print (to the standard output file) a link map, as produced by the
|
||||
`ld' command-line option `-M'.
|
||||
|
||||
The keyword `LIST' may be followed by anything on the same line,
|
||||
with no change in its effect.
|
||||
|
||||
`LOAD FILENAME'
|
||||
`LOAD FILENAME, FILENAME, ... FILENAME'
|
||||
Include one or more object file FILENAME in the link; this has the
|
||||
same effect as specifying FILENAME directly on the `ld' command
|
||||
line.
|
||||
|
||||
`NAME OUTPUT-NAME'
|
||||
OUTPUT-NAME is the name for the program produced by `ld'; the
|
||||
MRI-compatible command `NAME' is equivalent to the command-line
|
||||
option `-o' or the general script language command `OUTPUT'.
|
||||
|
||||
`ORDER SECNAME, SECNAME, ... SECNAME'
|
||||
`ORDER SECNAME SECNAME SECNAME'
|
||||
Normally, `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
|
||||
`ORDER' command. The sections you list with `ORDER' will appear
|
||||
first in your output file, in the order specified.
|
||||
|
||||
`PUBLIC NAME=EXPRESSION'
|
||||
`PUBLIC NAME,EXPRESSION'
|
||||
`PUBLIC NAME EXPRESSION'
|
||||
Supply a value (EXPRESSION) for external symbol NAME used in the
|
||||
linker input files.
|
||||
|
||||
`SECT SECNAME, EXPRESSION'
|
||||
`SECT SECNAME=EXPRESSION'
|
||||
`SECT SECNAME EXPRESSION'
|
||||
You can use any of these three forms of the `SECT' command to
|
||||
specify the start address (EXPRESSION) for section SECNAME. If
|
||||
you have more than one `SECT' statement for the same SECNAME, only
|
||||
the *first* sets the start address.
|
||||
|
||||
|
||||
File: ld.info, Node: Index, Prev: MRI, Up: Top
|
||||
|
||||
Index
|
||||
*****
|
||||
|
||||
* Menu:
|
||||
|
||||
* ": Symbols.
|
||||
* *( COMMON ): Section Placement.
|
||||
* *(SECTION): Section Placement.
|
||||
* -help: Options.
|
||||
* -version: Options.
|
||||
* -AARCH: Options.
|
||||
* -b FORMAT: Options.
|
||||
* -Bstatic: Options.
|
||||
* -c MRI-CMDFILE: Options.
|
||||
* -d: Options.
|
||||
* -dc: Options.
|
||||
* -defsym SYMBOL=EXP: Options.
|
||||
* -dp: Options.
|
||||
* -e ENTRY: Options.
|
||||
* -F: Options.
|
||||
* -format: Options.
|
||||
* -g: Options.
|
||||
* -G: Options.
|
||||
* -i: Options.
|
||||
* -lARCHIVE: Options.
|
||||
* -LDIR: Options.
|
||||
* -M: Options.
|
||||
* -m EMULATION: Options.
|
||||
* -Map: Options.
|
||||
* -N: Options.
|
||||
* -n: Options.
|
||||
* -noinhibit-exec: Options.
|
||||
* -o OUTPUT: Options.
|
||||
* -oformat: Options.
|
||||
* -r: Options.
|
||||
* -R FILE: Options.
|
||||
* -relax: Options.
|
||||
* -s: Options.
|
||||
* -S: Options.
|
||||
* -t: Options.
|
||||
* -T SCRIPT: Options.
|
||||
* -Tbss ORG: Options.
|
||||
* -Tdata ORG: Options.
|
||||
* -Ttext ORG: Options.
|
||||
* -u SYMBOL: Options.
|
||||
* -Ur: Options.
|
||||
* -v: Options.
|
||||
* -V: Options.
|
||||
* -warn-comon: Options.
|
||||
* -x: Options.
|
||||
* -X: Options.
|
||||
* -ySYMBOL: Options.
|
||||
* .: Location Counter.
|
||||
* 0x: Integers.
|
||||
* ;: Assignment.
|
||||
* =FILL: Section Options.
|
||||
* >REGION: Section Options.
|
||||
* ABSOLUTE (MRI): MRI.
|
||||
* ALIAS (MRI): MRI.
|
||||
* BASE (MRI): MRI.
|
||||
* CHIP (MRI): MRI.
|
||||
* END (MRI): MRI.
|
||||
* FORMAT (MRI): MRI.
|
||||
* LIST (MRI): MRI.
|
||||
* LOAD (MRI): MRI.
|
||||
* NAME (MRI): MRI.
|
||||
* ORDER (MRI): MRI.
|
||||
* PUBLIC (MRI): MRI.
|
||||
* SECT (MRI): MRI.
|
||||
* FILENAME: Section Placement.
|
||||
* FILENAME(SECTION): Section Placement.
|
||||
* SYMBOL = EXPRESSION ;: Section Data Expressions.
|
||||
* SYMBOL F= EXPRESSION ;: Section Data Expressions.
|
||||
* absolute and relocatable symbols: Assignment.
|
||||
* ABSOLUTE(EXP): Arithmetic Functions.
|
||||
* ADDR(SECTION): Arithmetic Functions.
|
||||
* ALIGN(EXP): Arithmetic Functions.
|
||||
* aligning sections: Section Options.
|
||||
* allocating memory: MEMORY.
|
||||
* architectures: Options.
|
||||
* architectures available: BFD.
|
||||
* archive files, from cmd line: Options.
|
||||
* arithmetic: Expressions.
|
||||
* arithmetic operators: Operators.
|
||||
* assignment in scripts: Assignment.
|
||||
* assignment, in section defn: Section Data Expressions.
|
||||
* back end: BFD.
|
||||
* BFD canonical format: Canonical format.
|
||||
* BFD requirements: BFD.
|
||||
* binary input files: Option Commands.
|
||||
* binary input format: Options.
|
||||
* BLOCK(ALIGN): Section Options.
|
||||
* BYTE(EXPRESSION): Section Data Expressions.
|
||||
* combining symbols, warnings on: Options.
|
||||
* command files: Commands.
|
||||
* command line: Options.
|
||||
* commands, fundamental: Scripts.
|
||||
* comments: Scripts.
|
||||
* common allocation: Option Commands.
|
||||
* common allocation: Options.
|
||||
* commons in output: Section Placement.
|
||||
* compatibility, MRI: Options.
|
||||
* constructors: Options.
|
||||
* contents of a section: Section Placement.
|
||||
* CREATE_OBJECT_SYMBOLS: Section Data Expressions.
|
||||
* current output location: Location Counter.
|
||||
* decimal integers: Integers.
|
||||
* default input format: Environment.
|
||||
* DEFINED(SYMBOL): Arithmetic Functions.
|
||||
* deleting local symbols: Options.
|
||||
* direct output: Section Data Expressions.
|
||||
* discontinuous memory: MEMORY.
|
||||
* dot: Location Counter.
|
||||
* emulation: Options.
|
||||
* entry point, defaults: Entry Point.
|
||||
* entry point, from command line: Options.
|
||||
* ENTRY(SYMBOL): Entry Point.
|
||||
* expression evaluation order: Evaluation.
|
||||
* expression syntax: Expressions.
|
||||
* expression, absolute: Arithmetic Functions.
|
||||
* expressions in a section: Section Data Expressions.
|
||||
* filename symbols: Section Data Expressions.
|
||||
* files and sections, section defn: Section Placement.
|
||||
* files, including in output sections: Section Placement.
|
||||
* fill pattern, entire section: Section Options.
|
||||
* FILL(EXPRESSION): Section Data Expressions.
|
||||
* first input file: Option Commands.
|
||||
* first instruction: Entry Point.
|
||||
* FLOAT: Option Commands.
|
||||
* FORCE_COMMON_ALLOCATION: Option Commands.
|
||||
* format, output file: Option Commands.
|
||||
* formats available: BFD.
|
||||
* functions in expression language: Arithmetic Functions.
|
||||
* fundamental script commands: Scripts.
|
||||
* GNU linker: Overview.
|
||||
* GNUTARGET: Option Commands.
|
||||
* GNUTARGET: Environment.
|
||||
* H8/300 support: H8/300.
|
||||
* header size: Arithmetic Functions.
|
||||
* help: Options.
|
||||
* hexadecimal integers: Integers.
|
||||
* holes: Location Counter.
|
||||
* holes, filling: Section Data Expressions.
|
||||
* i960 support: i960.
|
||||
* incremental link: Options.
|
||||
* INPUT ( FILES ): Option Commands.
|
||||
* input file format: Option Commands.
|
||||
* input filename symbols: Section Data Expressions.
|
||||
* input files, displaying: Options.
|
||||
* input files, section defn: Section Placement.
|
||||
* input format: Options.
|
||||
* input format: Options.
|
||||
* input sections to output section: Section Placement.
|
||||
* integer notation: Integers.
|
||||
* integer suffixes: Integers.
|
||||
* internal object-file format: Canonical format.
|
||||
* K and M integer suffixes: Integers.
|
||||
* l =: MEMORY.
|
||||
* L, deleting symbols beginning: Options.
|
||||
* layout of output file: Scripts.
|
||||
* lazy evaluation: Evaluation.
|
||||
* len =: MEMORY.
|
||||
* LENGTH =: MEMORY.
|
||||
* link map: Options.
|
||||
* link map: Options.
|
||||
* local symbols, deleting: Options.
|
||||
* location counter: Location Counter.
|
||||
* LONG(EXPRESSION): Section Data Expressions.
|
||||
* M and K integer suffixes: Integers.
|
||||
* machine architecture, output: Option Commands.
|
||||
* machine dependencies: Machine Dependent.
|
||||
* MEMORY: MEMORY.
|
||||
* memory region attributes: MEMORY.
|
||||
* memory regions and sections: Section Options.
|
||||
* MRI compatibility: MRI.
|
||||
* names: Symbols.
|
||||
* naming memory regions: MEMORY.
|
||||
* naming output sections: Section Definition.
|
||||
* naming the output file: Options.
|
||||
* naming the output file: Option Commands.
|
||||
* negative integers: Integers.
|
||||
* NEXT(EXP): Arithmetic Functions.
|
||||
* NMAGIC: Options.
|
||||
* NOFLOAT: Option Commands.
|
||||
* NOLOAD: Section Options.
|
||||
* Non constant expression: Assignment.
|
||||
* o =: MEMORY.
|
||||
* object file management: BFD.
|
||||
* object files: Options.
|
||||
* object size: Options.
|
||||
* octal integers: Integers.
|
||||
* OMAGIC: Options.
|
||||
* opening object files: BFD outline.
|
||||
* Operators for arithmetic: Operators.
|
||||
* options: Options.
|
||||
* org =: MEMORY.
|
||||
* ORIGIN =: MEMORY.
|
||||
* OUTPUT ( FILENAME ): Option Commands.
|
||||
* output file after errors: Options.
|
||||
* output file layout: Scripts.
|
||||
* OUTPUT_ARCH ( BFDNAME ): Option Commands.
|
||||
* OUTPUT_FORMAT ( BFDNAME ): Option Commands.
|
||||
* partial link: Options.
|
||||
* path for libraries: Option Commands.
|
||||
* precedence in expressions: Operators.
|
||||
* prevent unnecessary loading: Section Options.
|
||||
* quoted symbol names: Symbols.
|
||||
* read-only text: Options.
|
||||
* read/write from cmd line: Options.
|
||||
* regions of memory: MEMORY.
|
||||
* relaxing addressing modes: Options.
|
||||
* relaxing on H8/300: H8/300.
|
||||
* relocatable and absolute symbols: Assignment.
|
||||
* relocatable output: Options.
|
||||
* requirements for BFD: BFD.
|
||||
* rounding up location counter: Arithmetic Functions.
|
||||
* scaled integers: Integers.
|
||||
* script files: Options.
|
||||
* search directory, from cmd line: Options.
|
||||
* search path, libraries: Option Commands.
|
||||
* SEARCH_DIR ( PATH ): Option Commands.
|
||||
* section address: Arithmetic Functions.
|
||||
* section address: Section Options.
|
||||
* section alignment: Section Options.
|
||||
* section definition: Section Definition.
|
||||
* section defn, full syntax: Section Options.
|
||||
* section fill pattern: Section Options.
|
||||
* section size: Arithmetic Functions.
|
||||
* section start: Section Options.
|
||||
* section, assigning to memory region: Section Options.
|
||||
* SECTIONS: SECTIONS.
|
||||
* segment origins, cmd line: Options.
|
||||
* semicolon: Assignment.
|
||||
* SHORT(EXPRESSION): Section Data Expressions.
|
||||
* SIZEOF(SECTION): Arithmetic Functions.
|
||||
* SIZEOF_HEADERS: Arithmetic Functions.
|
||||
* sizeof_headers: Arithmetic Functions.
|
||||
* standard Unix system: Options.
|
||||
* start address, section: Section Options.
|
||||
* start of execution: Entry Point.
|
||||
* STARTUP ( FILENAME ): Option Commands.
|
||||
* strip all symbols: Options.
|
||||
* strip debugger symbols: Options.
|
||||
* suffixes for integers: Integers.
|
||||
* symbol defaults: Arithmetic Functions.
|
||||
* symbol definition, scripts: Assignment.
|
||||
* symbol names: Symbols.
|
||||
* symbol tracing: Options.
|
||||
* symbol-only input: Options.
|
||||
* symbols, from command line: Options.
|
||||
* symbols, relocatable and absolute: Assignment.
|
||||
* synthesizing linker: Options.
|
||||
* synthesizing on H8/300: H8/300.
|
||||
* TARGET ( FORMAT ): Option Commands.
|
||||
* unallocated address, next: Arithmetic Functions.
|
||||
* undefined symbol: Options.
|
||||
* uninitialized data: Section Placement.
|
||||
* unspecified memory: Section Data Expressions.
|
||||
* usage: Options.
|
||||
* variables, defining: Assignment.
|
||||
* verbose: Options.
|
||||
* version: Options.
|
||||
* version: Options.
|
||||
* warnings, on combining symbols: Options.
|
||||
* what is this?: Overview.
|
||||
|
||||
|
Reference in New Issue
Block a user