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.
Consider the source file's object format to be bfdname
rather than attempting to deduce it.
-Obfdname,
--output-target=bfdname
Write the output file using the object format
bfdname.
-Fbfdname, --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.
-jsectionname,
--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.
-Rsectionname,
--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.
-Ksymbolname,
--keep-symbol=symbolname
Copy only symbol symbolname from the source file. This
option can be given more than once.
-Nsymbolname,
--strip-symbol=symbolname
Do not copy symbol symbolname from the source file. This
option can be given more than once.
-Lsymbolname,
--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.
-Wsymbolname,
--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 ".").
-bbyte, --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.
-iinterleave,
--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.
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-lmasection{=,+,-}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-vmasection{=,+,-}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-flagssection=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-sectionsectionname=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.