Appendix A 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 Scripts. 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 theABSOLUTE
command is used at all in a script, then only the sections named explicitly inABSOLUTE
commands will appear in the linker output. You can still use other input sections (whatever you select on the command line, or usingLOAD
) 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.
-
ALIGN
secname=
expression - Align the section called secname to expression. The expression should be a power of two.
-
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:- S-records, if output-format is S
- IEEE, if output-format is IEEE
- 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 commandOUTPUT
. -
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 withORDER
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 oneSECT
statement for the same secname, only the first sets the start address.