objcopy

NAME

objcopy - copy and translate object files

SYNOPSIS

[-F bfdname | --target=bfdname]
[-I bfdname | --input-target=bfdname]
[-O bfdname | --output-target=bfdname]
[-j sectionname | --only-section=sectionname]
[-R sectionname | --remove-section=sectionname]
[-S | --strip-all] [-g | --strip-debug]
[--strip-unneeded]
[-K symbolname | --keep-symbol=symbolname]
[-N symbolname | --strip-symbol=symbolname]
[-L symbolname | --localize-symbol=symbolname]
[-W symbolname | --weaken-symbol=symbolname]
[-x | --discard-all] [-X | --discard-locals]
[-b byte | --byte=byte]
[-i interleave | --interleave=interleave]
[-p | --preserve-dates] [--debugging]
[--gap-fill=val] [--pad-to=address]
[--set-start=val] [--change-start=incr]
[--change-addresses=incr]
[--change-section-address section{=,+,-}val]
[--change-section-lma section{=,+,-}val]
[--change-section-vma section{=,+,-}val]
[--change-warnings] [--no-change-warnings]
[--set-section-flags section=flags]
[--add-section sectionname=filename]
[--change-leading-char] [--remove-leading-char]
[--redefine-sym old=new] [--weaken]
[-v | --verbose] [-V | --version] [--help] infile
[outfile]

DESCRIPTION

The objcopy(1) command creates a new object file that is a copy of the original object file. The objcopy(1) utility uses the GNU Binary File Descriptor (BFD) Library to read and write the object files. It can write the destination object file in a format different from that of the source object file. The exact behavior of objcopy(1) is controlled by command-line options.

The objcopy utility creates temporary files to do its translations and deletes them afterward. The objcopy utility uses BFD to do all its translation work; it is therefore able to recognize most formats without being told explicitly.

The objcopy(1) utility can generate S-records by using an output target of srec (for example, use -O srec).

You can use objcopy(1) to generate a raw binary file by using an output target of binary (for example, use -O binary). When objcopy(1) generates a raw binary file, it will produce a memory dump of the contents of the input object file. All symbols and relocation information is discarded. The memory dump will start at the virtual address of the lowest section copied into the output file.

When generating an S-record or a raw binary file, it can be helpful to use -S to remove sections containing debugging information. In some cases, you can use -R to remove sections containing information that the binary file does not needed.

The elements infile and outfile are the source and output files, respectively. If you do not specify outfile, objcopy(1) creates a temporary file and destructively renames the result with the name of the input file.

OPTIONS

-I bfdname, --input-target=bfdname
Consider the source file's object format to be bfdname rather than attempting to deduce it.
-O bfdname, --output-target=bfdname
Write the output file using the object format bfdname.
-F bfdname, --target=bfdname
Use bfdname as the object format for both the input and the output file; that is, transfer data from source to destination with no translation.
-j sectionname, --only-section=sectionname
Copy only the named section from the input file to the output file, discarding all other sections. This option can be given more than once. Note that using this option inappropriately might make the output file unusable.
-R sectionname, --remove-section=sectionname
Remove the named section from the file. This option can be given more than once. Note that using this option inappropriately might make the output file unusable.
-S, --strip-all
Do not copy relocation and symbol information from the source file.
-g, --strip-debug
Do not copy debugging symbols from the source file.
--strip-unneeded
Strip all symbols that are not needed for relocation processing.
-K symbolname, --keep-symbol=symbolname
Copy only symbol symbolname from the source file. This option can be given more than once.
-N symbolname, --strip-symbol=symbolname
Do not copy symbol symbolname from the source file. This option can be given more than once.
-L symbolname, --localize-symbol=symbolname
Make symbol, symbolname, local to the file so that it is not visible externally. This option can be given more than once.
-W symbolname, --weaken-symbol=symbolname
Make symbol symbolname weak. This option can be given more than once.
-x, --discard-all
Do not copy non-global symbols from the source file.
-X, --discard-locals
Do not copy compiler-generated local symbols. (These usually start with "L" or ".").
-b byte, --byte=byte
Keep only every byte byte of the input file (header data is not affected). The specified byte can be in the range from 0 to the interleave-1. This option is useful for creating files to program ROMs. It is typically used with an srec output target.
-i interleave, --interleave=interleave
Only copy one out of every interleave bytes. The one to copy is determined by the -b or --byte option. The default is 4. The interleave is ignored if neither -b nor --byte is given.
-p, --preserve-dates
Set the access and modification dates of the output file to be the same as those of the input file.
--debugging
Convert debugging information, if possible. This is not the default because only certain debugging formats are supported, and the conversion process can be time consuming.
--gap-fill=val
Fill gaps between sections with val. This operation applies to the load address (LMA) of the sections. It is done by increasing the size of the section with the lower address and filling in the extra space created with val.
--pad-to=address
Pad the output file up to the load address address. This is done by increasing the size of the last section. The extra space is filled in with the value specified by --gap-fill (the default is zero).
--set-start=val
Set the start address of the new file to val. Not all object file formats support setting the start address.
--change-start=incr, --adjust-start=incr
Changes the start address by adding incr. Not all object file formats support setting the start address.
--change-addresses=incr, --adjust-vma=incr
Changes the address of all sections, as well as the start address, by adding incr. Some object file formats do not permit section addresses to be changed arbitrarily. Note that this does not relocate the sections; if the program expects sections to be loaded at a certain address, and this option is used to change the sections such that they are loaded at a different address, the program might fail.
--change-section-address section{=,+,-}val,
--adjust-section-vma section{=,+,-}val
Set or change the virtual memory (VMA) and LMA addresses of the named section. If = is used, the section address is set to val. Otherwise, val is added to or subtracted from the section address. See the previous comments provided in --change-addresses. If section does not exist in the input file, a warning will be issued, unless --no-change-warnings is used.
--change-section-lma section{=,+,-}val
Set or change the LMA address of the named section. If = is used, the section address is set to val. Otherwise, val is added to or subtracted from the section address. See the previous comments in --change-addresses. If section does not exist in the input file, a warning will be issued, unless --no-change-warnings is used.
--change-section-vma section{=,+,-}val
Set or change the VMA address of the named section. If = is used, the section address is set to val. Otherwise, val is added to or subtracted from the section address. See the previous comments in --change-addresses. If section does not exist in the input file, a warning will be issued, unless --no-change-warnings is used.
--change-warnings, --adjust-warnings
If --change-section-XXX is used, and the named section does not exist, issue a warning. This is the default.
--no-change-warnings, --no-adjust-warnings
Do not issue a warning if --change-section-XXX is used, even if the named section does not exist.
--set-section-flags section=flags
Set the flags for the named section. The flags argument is a comma-separated string of flag names. The recognized names are alloc, contents, load, noload, readonly, code, data, rom, share, and debug. Not all flags are meaningful for all object file formats.
--add-section sectionname=filename
Add a new section named sectionname while copying the file. The contents of the new section are taken from the file filename. The size of the section will be the size of the file. This option only works on file formats that can support sections with arbitrary names.
--change-leading-char
Some object file formats use special characters at the start of symbols. The most common such character is underscore, which compilers often add before every symbol. This option tells objcopy(1) to change the leading character of every symbol when it converts between object file formats.If the object file formats use the same leading character, this option has no effect. Otherwise, it will add, remove, or change a character, as appropriate.
--remove-leading-char
If the first character of a global symbol is a special symbol leading character used by the object file format, remove the character. The most common symbol leading character is underscore. This option will remove a leading underscore from all global symbols. This can be useful if you want to link together objects of different file formats with different conventions for symbol names. This is different from --change-leading-char because it always changes the symbol name when appropriate, regardless of the object file format of the output.
--redefine-sym old=new
Change the name of symbol old to new. This can be useful when you are trying link two things together for which you have no source, and there are name collisions.
--weaken
Change all global symbols in the file to be weak.
-v, --verbose
Verbose output: list all object files modified. In the case of archives, objcopy -V lists all members of the archive.
-V, --version
Show the version number of objcopy(1) and exit.
--help
Show a summary of the options to objcopy(1) and exit.

SEE ALSO

The GNU Binary Utilities, by Roland H. Pesch and Jeffrey M. Osier (August 2000).