## 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 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.

`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:
  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.