A couple of linker script commands deal with object file formats.
OUTPUT_FORMAT(default, big, little)
OUTPUT_FORMAT command names the BFD format to use for the output file (see BFD). Using
OUTPUT_FORMAT(bfdname) is exactly like using ‘--oformat bfdname’ on the command line (see Command-line Options). If both are used, the command line option takes precedence.
You can use
OUTPUT_FORMAT with three arguments to use different formats based on the ‘-EB’ and ‘-EL’ command-line options. This permits the linker script to set the output format based on the desired endianness.
If neither ‘-EB’ nor ‘-EL’ are used, then the output format will be the first argument, default. If ‘-EB’ is used, the output format will be the second argument, big. If ‘-EL’ is used, the output format will be the third argument, little.
For example, the default linker script for the MIPS ELF target uses this command:
OUTPUT_FORMAT(elf32-bigmips, elf32-bigmips, elf32-littlemips)
This says that the default format for the output file is ‘elf32-bigmips’, but if the user uses the ‘-EL’ command-line option, the output file will be created in the ‘elf32-littlemips’ format.
TARGET command names the BFD format to use when reading input files. It affects subsequent
GROUP commands. This command is like using ‘-b bfdname’ on the command line (see Command-line Options). If the
TARGET command is used but
OUTPUT_FORMAT is not, then the last
TARGET command is also used to set the format for the output file. See BFD.