mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-22 19:09:31 +08:00
error fixes and clarifications
This commit is contained in:
173
ld/ld.texinfo
173
ld/ld.texinfo
@ -173,8 +173,8 @@ ld [ -o @var{output} ] @var{objfile}@dots{}
|
||||
[ -m @var{emulation} ] [ -N | -n ] [ -noinhibit-exec ]
|
||||
[ -oformat @var{output-format} ] [ -R @var{filename} ] [ -relax ]
|
||||
[ -r | -Ur ] [ -S ] [ -s ] [ -sort-common ] [ -T @var{commandfile} ]
|
||||
[ -Ttext @var{textorg} ] [ -Tdata @var{dataorg} ]
|
||||
[ -Tbss @var{bssorg} ] [ -t ] [ -u @var{symbol}] [-V] [-v] [ --version ]
|
||||
[ -Ttext @var{org} ] [ -Tdata @var{org} ]
|
||||
[ -Tbss @var{org} ] [ -t ] [ -u @var{symbol}] [-V] [-v] [ --version ]
|
||||
[ -warn-common ] [ -y@var{symbol} ] [ -X ] [-x ]
|
||||
@end smallexample
|
||||
|
||||
@ -269,7 +269,7 @@ The default format is taken from the environment variable
|
||||
@xref{Environment}.
|
||||
@end ifset
|
||||
You can also define the input
|
||||
format from a script, using the command @code{TARGET}; see @ref{Other
|
||||
format from a script, using the command @code{TARGET}; see @ref{Option
|
||||
Commands}.
|
||||
@end ifclear
|
||||
|
||||
@ -300,7 +300,7 @@ 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
|
||||
@code{FORCE_COMMON_ALLOCATION} has the same effect. @xref{Option
|
||||
Commands}.
|
||||
|
||||
@cindex symbols, from command line
|
||||
@ -333,11 +333,11 @@ entry point.
|
||||
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.
|
||||
@samp{-b} or @samp{-format} options for input files, @samp{-oformat}
|
||||
option or 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}
|
||||
@ -459,10 +459,10 @@ overrides it. @xref{BFD}.
|
||||
@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.
|
||||
Read symbol names and their addresses from @var{filename}, but do not
|
||||
relocate it or include it in the output. This allows your output file
|
||||
to refer symbolically to absolute locations of memory defined in other
|
||||
programs.
|
||||
|
||||
@item -relax
|
||||
@kindex -relax
|
||||
@ -496,7 +496,7 @@ 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}.
|
||||
This option does the same thing as @samp{-i}.
|
||||
|
||||
@item -S
|
||||
@kindex -S
|
||||
@ -514,12 +514,12 @@ appropriate output sections, it sorts them by size. First come all the
|
||||
one byte symbols, then all the two bytes, then all the four bytes, and
|
||||
then everything else. This option disables that sorting.
|
||||
|
||||
@item -Tbss @var{bssorg}
|
||||
@kindex -Tbss @var{bssorg}
|
||||
@itemx -Tdata @var{dataorg}
|
||||
@kindex -Tdata @var{dataorg}
|
||||
@itemx -Ttext @var{textorg}
|
||||
@kindex -Ttext @var{textorg}
|
||||
@item -Tbss @var{org}
|
||||
@kindex -Tbss @var{org}
|
||||
@itemx -Tdata @var{org}
|
||||
@kindex -Tdata @var{org}
|
||||
@itemx -Ttext @var{org}
|
||||
@kindex -Ttext @var{org}
|
||||
@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.
|
||||
@ -717,7 +717,7 @@ input files
|
||||
@item
|
||||
file formats
|
||||
@item
|
||||
output file format
|
||||
output file layout
|
||||
@item
|
||||
addresses of sections
|
||||
@item
|
||||
@ -727,8 +727,7 @@ placement of common blocks
|
||||
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.
|
||||
as a supported object or archive format, it reports an error.
|
||||
|
||||
@menu
|
||||
* Scripts:: Linker Scripts
|
||||
@ -736,7 +735,7 @@ as a command file.
|
||||
* MEMORY:: MEMORY Command
|
||||
* SECTIONS:: SECTIONS Command
|
||||
* Entry Point:: The Entry Point
|
||||
* Other Commands:: Other Commands
|
||||
* Option Commands:: Option Commands
|
||||
@end menu
|
||||
|
||||
@node Scripts
|
||||
@ -795,7 +794,7 @@ You may call special purpose built-in functions.
|
||||
* Operators:: Operators
|
||||
* Evaluation:: Evaluation
|
||||
* Assignment:: Assignment: Defining Symbols
|
||||
* Built-ins:: Built-In Functions
|
||||
* Arithmetic Functions:: Built-In Functions
|
||||
@end menu
|
||||
|
||||
@node Integers
|
||||
@ -1043,7 +1042,7 @@ relative to a particular section (@pxref{SECTIONS}).
|
||||
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
|
||||
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
|
||||
@ -1086,8 +1085,8 @@ SECTIONS @{ @dots{}
|
||||
will cause the error message ``@code{Non constant expression for initial
|
||||
address}''.
|
||||
|
||||
@node Built-ins
|
||||
@subsection Built-In Functions
|
||||
@node Arithmetic Functions
|
||||
@subsection Arithmetic Functions
|
||||
@cindex functions in expression language
|
||||
The command language includes a number of built-in
|
||||
functions for use in link script expressions.
|
||||
@ -1211,7 +1210,7 @@ paging.
|
||||
@end table
|
||||
|
||||
@node MEMORY
|
||||
@section MEMORY Command
|
||||
@section Memory Layout
|
||||
@kindex MEMORY
|
||||
@cindex regions of memory
|
||||
@cindex discontinuous memory
|
||||
@ -1225,7 +1224,7 @@ 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}
|
||||
A command file 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:
|
||||
|
||||
@ -1257,7 +1256,7 @@ omit the parentheses around it as well.
|
||||
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}.
|
||||
abbreviated to @code{org} or @code{o} (but not, for example, @samp{ORG}).
|
||||
@item @var{len}
|
||||
@kindex LENGTH =
|
||||
@kindex len =
|
||||
@ -1285,13 +1284,13 @@ 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
|
||||
@section Specifying Output Sections
|
||||
@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.
|
||||
placed into output sections, their order in the output file, and to
|
||||
which output sections they are allocated.
|
||||
|
||||
You may use at most one @code{SECTIONS} command in a commands file,
|
||||
You may use at most one @code{SECTIONS} command in a script 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
|
||||
@ -1300,27 +1299,27 @@ 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.
|
||||
describe the placement of a named output section, and which input
|
||||
sections go into it.
|
||||
@end itemize
|
||||
|
||||
The first two possibilities---defining the entry point, and defining
|
||||
The first two operations---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
|
||||
@pxref{Entry Point}, and @pxref{Assignment}. They are permitted here as
|
||||
well for your convenience in reading the script, so that symbols and 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.
|
||||
When no @code{SECTIONS} command is given, the linker places 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 Placement:: Section Placement
|
||||
* Section Data Expressions:: Section Data Expressions
|
||||
* Section Options:: Optional Section Attributes
|
||||
@end menu
|
||||
|
||||
@ -1328,7 +1327,7 @@ order in the first input file.
|
||||
@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
|
||||
the @dfn{section definition}, which specifies 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
|
||||
@ -1344,9 +1343,9 @@ SECTIONS @{ @dots{}
|
||||
@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.
|
||||
sections of input files (@pxref{Section Placement}). 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
|
||||
@ -1355,15 +1354,15 @@ formats which only support a limited number of sections, such as
|
||||
@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
|
||||
sequence of 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
|
||||
@node Section Placement
|
||||
@subsection Section Placement
|
||||
@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
|
||||
listing particular input 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.
|
||||
@ -1380,8 +1379,11 @@ whitespace.
|
||||
@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:
|
||||
current section definition. 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.
|
||||
|
||||
To specify a list of particular files by name:
|
||||
@example
|
||||
.data : @{ afile.o bfile.o cfile.o @}
|
||||
@end example
|
||||
@ -1390,10 +1392,6 @@ 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{} )
|
||||
@ -1414,6 +1412,10 @@ 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.
|
||||
|
||||
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.
|
||||
|
||||
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:
|
||||
@ -1429,10 +1431,6 @@ SECTIONS @{
|
||||
@}
|
||||
@end example
|
||||
|
||||
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{} ]
|
||||
@ -1498,8 +1496,10 @@ SECTIONS @{
|
||||
@}
|
||||
@end example
|
||||
|
||||
There are still more kinds of statements permitted in the contents of
|
||||
output section definitions. The foregoing statements permitted you to
|
||||
@node Section Data Expressions
|
||||
@subsection Section Data Expressions
|
||||
@cindex expressions in a section
|
||||
The foregoing statements
|
||||
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
|
||||
@ -1515,7 +1515,7 @@ intermix them freely with any of the statements we've just described.
|
||||
@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}
|
||||
data written from that input file. For instance, with @code{a.out}
|
||||
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
|
||||
@ -1530,7 +1530,7 @@ SECTIONS @{
|
||||
@}
|
||||
@end example
|
||||
|
||||
If @code{objsym} is a file containing this script, and @code{a.o},
|
||||
If @code{sample.ld} 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
|
||||
@ -1542,7 +1542,7 @@ int abss;
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
@samp{ld -M sample a.o b.o c.o d.o} would create a map like this,
|
||||
@samp{ld -M -T sample.ld 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
|
||||
@ -1613,7 +1613,7 @@ appropriate for the output file format (@pxref{BFD}).
|
||||
@kindex FILL(@var{expression})
|
||||
@cindex holes, filling
|
||||
@cindex unspecified memory
|
||||
Specifies the ``fill pattern'' for the current section. Any otherwise
|
||||
Specify 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
|
||||
@ -1638,7 +1638,7 @@ SECTIONS @{
|
||||
@end smallexample
|
||||
|
||||
@var{secname} and @var{contents} are required. @xref{Section
|
||||
Definition}, and @pxref{Section Contents} for details on @var{contents}.
|
||||
Definition}, and @pxref{Section Placement} 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.
|
||||
@ -1762,8 +1762,8 @@ whatever symbol contains the start address to @code{start}:
|
||||
start = other_symbol ;
|
||||
@end example
|
||||
|
||||
@node Other Commands
|
||||
@section Other Commands
|
||||
@node Option Commands
|
||||
@section 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.
|
||||
@ -1808,10 +1808,10 @@ way are treated identically to object files listed on the command line.
|
||||
@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}.
|
||||
@w{@samp{-o @var{filename}}}, and whichever is encountered last
|
||||
(@samp{-T} or @samp{-o} 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} )
|
||||
@ -1827,7 +1827,9 @@ command.
|
||||
@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
|
||||
BFD back-end routines (@pxref{BFD}). The effect is identical to the
|
||||
effect of the @samp{-oformat} command-line option.
|
||||
This selection will only affect
|
||||
the output file; the related command @code{TARGET} affects primarily
|
||||
input files.
|
||||
@end ifclear
|
||||
@ -1852,11 +1854,10 @@ process.
|
||||
@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}.
|
||||
one of the strings used by BFD to name binary formats. 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
|
||||
@ -2109,6 +2110,10 @@ 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.
|
||||
|
||||
In general, MRI scripts aren't of much use with the @code{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
|
||||
@samp{-c} command-line option.
|
||||
|
||||
|
Reference in New Issue
Block a user