llvm-objcopy - object copying and editing tool
==============================================

.. program:: llvm-objcopy

SYNOPSIS
--------

:program:`llvm-objcopy` [*options*] *input* [*output*]

DESCRIPTION
-----------

:program:`llvm-objcopy` is a tool to copy and manipulate objects. In basic
usage, it makes a semantic copy of the input to the output. If any options are
specified, the output may be modified along the way, e.g. by removing sections.

If no output file is specified, the input file is modified in-place. If "-" is
specified for the input file, the input is read from the program's standard
input stream. If "-" is specified for the output file, the output is written to
the standard output stream of the program.

If the input is an archive, any requested operations will be applied to each
archive member individually.

The tool is still in active development, but in most scenarios it works as a
drop-in replacement for GNU's :program:`objcopy`.

GENERIC AND CROSS-PLATFORM OPTIONS
----------------------------------

The following options are either agnostic of the file format, or apply to
multiple file formats.

.. option:: --add-gnu-debuglink <debug-file>

 Add a .gnu_debuglink section for ``<debug-file>`` to the output.

.. option:: --add-section <section=file>

 Add a section named ``<section>`` with the contents of ``<file>`` to the
 output. For ELF objects the section will be of type `SHT_NOTE`, if the name
 starts with ".note". Otherwise, it will have type `SHT_PROGBITS`. Can be
 specified multiple times to add multiple sections.

 For MachO objects, ``<section>`` must be formatted as
 ``<segment name>,<section name>``.

.. option:: --binary-architecture <arch>, -B

 Ignored for compatibility.

.. option:: --disable-deterministic-archives, -U

 Use real values for UIDs, GIDs and timestamps when updating archive member
 headers.

.. option:: --discard-all, -x

 Remove most local symbols from the output. Different file formats may limit
 this to a subset of the local symbols. For example, file and section symbols in
 ELF objects will not be discarded. Additionally, remove all debug sections.

.. option:: --dump-section <section>=<file>

 Dump the contents of section ``<section>`` into the file ``<file>``. Can be
 specified multiple times to dump multiple sections to different files.
 ``<file>`` is unrelated to the input and output files provided to
 :program:`llvm-objcopy` and as such the normal copying and editing
 operations will still be performed. No operations are performed on the sections
 prior to dumping them.

 For MachO objects, ``<section>`` must be formatted as
 ``<segment name>,<section name>``.

.. option:: --enable-deterministic-archives, -D

 Enable deterministic mode when copying archives, i.e. use 0 for archive member
 header UIDs, GIDs and timestamp fields. On by default.

.. option:: --help, -h

 Print a summary of command line options.

.. option:: --only-keep-debug

 Produce a debug file as the output that only preserves contents of sections
 useful for debugging purposes.

 For ELF objects, this removes the contents of `SHF_ALLOC` sections that are not
 `SHT_NOTE` by making them `SHT_NOBITS` and shrinking the program headers where
 possible.

.. option:: --only-section <section>, -j

 Remove all sections from the output, except for sections named ``<section>``.
 Can be specified multiple times to keep multiple sections.

 For MachO objects, ``<section>`` must be formatted as
 ``<segment name>,<section name>``.

.. option:: --redefine-sym <old>=<new>

 Rename symbols called ``<old>`` to ``<new>`` in the output. Can be specified
 multiple times to rename multiple symbols.

.. option:: --redefine-syms <filename>

 Rename symbols in the output as described in the file ``<filename>``. In the
 file, each line represents a single symbol to rename, with the old name and new
 name separated by whitespace. Leading and trailing whitespace is ignored, as is
 anything following a '#'. Can be specified multiple times to read names from
 multiple files.

.. option:: --regex

 If specified, symbol and section names specified by other switches are treated
 as extended POSIX regular expression patterns.

.. option:: --remove-symbol-prefix <prefix>

Remove ``<prefix>`` from the start of every symbol name. No-op for symbols that do
not start with ``<prefix>``.

.. option:: --remove-section <section>, -R

 Remove the specified section from the output. Can be specified multiple times
 to remove multiple sections simultaneously.

 For MachO objects, ``<section>`` must be formatted as
 ``<segment name>,<section name>``.

.. option:: --set-section-alignment <section>=<align>

 Set the alignment of section ``<section>`` to ``<align>``. Can be specified
 multiple times to update multiple sections.

.. option:: --set-section-flags <section>=<flag>[,<flag>,...]

 Set section properties in the output of section ``<section>`` based on the
 specified ``<flag>`` values. Can be specified multiple times to update multiple
 sections.

 Supported flag names are `alloc`, `load`, `noload`, `readonly`, `exclude`,
 `debug`, `code`, `data`, `rom`, `share`, `contents`, `merge`, `strings`, and
 `large`. Not all flags are meaningful for all object file formats or target
 architectures.

 For ELF objects, the flags have the following effects:

 - `alloc` = add the `SHF_ALLOC` flag.
 - `load` = if the section has `SHT_NOBITS` type, mark it as a `SHT_PROGBITS`
   section.
 - `readonly` = if this flag is not specified, add the `SHF_WRITE` flag.
 - `exclude` = add the `SHF_EXCLUDE` flag.
 - `code` = add the `SHF_EXECINSTR` flag.
 - `merge` = add the `SHF_MERGE` flag.
 - `strings` = add the `SHF_STRINGS` flag.
 - `contents` = if the section has `SHT_NOBITS` type, mark it as a `SHT_PROGBITS`
   section.
 - `large` = add the `SHF_X86_64_LARGE` on x86_64; rejected if the target
   architecture is not x86_64.

 For COFF objects, the flags have the following effects:

 - `alloc` = add the `IMAGE_SCN_CNT_UNINITIALIZED_DATA` and `IMAGE_SCN_MEM_READ`
   flags, unless the `load` flag is specified.
 - `noload` = add the `IMAGE_SCN_LNK_REMOVE` and `IMAGE_SCN_MEM_READ` flags.
 - `readonly` = if this flag is not specified, add the `IMAGE_SCN_MEM_WRITE`
   flag.
 - `exclude` = add the `IMAGE_SCN_LNK_REMOVE` and `IMAGE_SCN_MEM_READ` flags.
 - `debug` = add the `IMAGE_SCN_CNT_INITIALIZED_DATA`,
   `IMAGE_SCN_MEM_DISCARDABLE` and  `IMAGE_SCN_MEM_READ` flags.
 - `code` = add the `IMAGE_SCN_CNT_CODE`, `IMAGE_SCN_MEM_EXECUTE` and
   `IMAGE_SCN_MEM_READ` flags.
 - `data` = add the `IMAGE_SCN_CNT_INITIALIZED_DATA` and `IMAGE_SCN_MEM_READ`
   flags.
 - `share` = add the `IMAGE_SCN_MEM_SHARED` and `IMAGE_SCN_MEM_READ` flags.

.. option:: --strip-all-gnu

 Remove all symbols, debug sections and relocations from the output. This option
 is equivalent to GNU :program:`objcopy`'s ``--strip-all`` switch.

.. option:: --strip-all, -S

 For ELF objects, remove from the output all symbols and non-alloc sections not
 within segments, except for .gnu.warning, .ARM.attribute sections and the
 section name table.

 For COFF and Mach-O objects, remove all symbols, debug sections, and
 relocations from the output.

.. option:: --strip-debug, -g

 Remove all debug sections from the output.

.. option:: --strip-symbol <symbol>, -N

 Remove all symbols named ``<symbol>`` from the output. Can be specified
 multiple times to remove multiple symbols.

.. option:: --strip-symbols <filename>

 Remove all symbols whose names appear in the file ``<filename>``, from the
 output. In the file, each line represents a single symbol name, with leading
 and trailing whitespace ignored, as is anything following a '#'. Can be
 specified multiple times to read names from multiple files.

.. option:: --strip-unneeded-symbol <symbol>

 Remove from the output all symbols named ``<symbol>`` that are local or
 undefined and are not required by any relocation.

.. option:: --strip-unneeded-symbols <filename>

 Remove all symbols whose names appear in the file ``<filename>``, from the
 output, if they are local or undefined and are not required by any relocation.
 In the file, each line represents a single symbol name, with leading and
 trailing whitespace ignored, as is anything following a '#'. Can be specified
 multiple times to read names from multiple files.

.. option:: --strip-unneeded

 Remove from the output all local or undefined symbols that are not required by
 relocations. Also remove all debug sections.

.. option:: --update-section <name>=<file>

 Replace the contents of the section ``<name>`` with contents from the file
 ``<file>``. If the section ``<name>`` is part of a segment, the new contents
 cannot be larger than the existing section.

.. option:: --version, -V

 Display the version of the :program:`llvm-objcopy` executable.

.. option:: --wildcard, -w

  Allow wildcard syntax for symbol-related flags. On by default for
  section-related flags. Incompatible with --regex.

  Wildcard syntax allows the following special symbols:

  ====================== ========================= ==================
   Character              Meaning                   Equivalent
  ====================== ========================= ==================
  ``*``                  Any number of characters  ``.*``
  ``?``                  Any single character      ``.``
  ``\``                  Escape the next character ``\``
  ``[a-z]``              Character class           ``[a-z]``
  ``[!a-z]``, ``[^a-z]`` Negated character class   ``[^a-z]``
  ====================== ========================= ==================

  Additionally, starting a wildcard with '!' will prevent a match, even if
  another flag matches. For example ``-w -N '*' -N '!x'`` will strip all symbols
  except for ``x``.

  The order of wildcards does not matter. For example, ``-w -N '*' -N '!x'`` is
  the same as ``-w -N '!x' -N '*'``.

.. option:: @<FILE>

 Read command-line options and commands from response file `<FILE>`.

ELF-SPECIFIC OPTIONS
--------------------

The following options are implemented only for ELF objects. If used with other
objects, :program:`llvm-objcopy` will either emit an error or silently ignore
them.

.. option:: --add-symbol <name>=[<section>:]<value>[,<flags>]

 Add a new symbol called ``<name>`` to the output symbol table, in the section
 named ``<section>``, with value ``<value>``. If ``<section>`` is not specified,
 the symbol is added as an absolute symbol. The ``<flags>`` affect the symbol
 properties. Accepted values are:

 - `global` = the symbol will have global binding.
 - `local` = the symbol will have local binding.
 - `weak` = the symbol will have weak binding.
 - `default` = the symbol will have default visibility.
 - `hidden` = the symbol will have hidden visibility.
 - `protected` = the symbol will have protected visibility.
 - `file` = the symbol will be an `STT_FILE` symbol.
 - `section` = the symbol will be an `STT_SECTION` symbol.
 - `object` = the symbol will be an `STT_OBJECT` symbol.
 - `function` = the symbol will be an `STT_FUNC` symbol.
 - `indirect-function` = the symbol will be an `STT_GNU_IFUNC` symbol.

 Additionally, the following flags are accepted but ignored: `debug`,
 `constructor`, `warning`, `indirect`, `synthetic`, `unique-object`, `before`.

 Can be specified multiple times to add multiple symbols.

.. option:: --allow-broken-links

 Allow :program:`llvm-objcopy` to remove sections even if it would leave invalid
 section references. Any invalid sh_link fields will be set to zero.

.. option:: --change-start <incr>, --adjust-start

 Add ``<incr>`` to the program's start address. Can be specified multiple
 times, in which case the values will be applied cumulatively.

.. option:: --compress-debug-sections [<format>]

 Compress DWARF debug sections in the output, using the specified format.
 Supported formats are ``zlib`` and ``zstd``. Use ``zlib`` if ``<format>`` is omitted.

.. option:: --compress-sections <section>=<format>

 Compress or decompress sections matched by ``<section>`` using the specified
 format. Supported formats are ``zlib`` and ``zstd``. Specify ``none`` for
 decompression. When a section is matched by multiple options, the last one
 wins. A wildcard ``<section>`` starting with '!' is disallowed.
 Sections within a segment cannot be (de)compressed.

.. option:: --decompress-debug-sections

 Decompress any compressed DWARF debug sections in the output.

.. option:: --discard-locals, -X

 Remove local symbols starting with ".L" from the output.

.. option:: --extract-dwo

 Remove all sections that are not DWARF .dwo sections from the output.

.. option:: --extract-main-partition

 Extract the main partition from the output.

.. option:: --extract-partition <name>

 Extract the named partition from the output.

.. option:: --gap-fill <value>

 For binary outputs, fill the gaps between sections with ``<value>`` instead
 of zero. The value must be an unsigned 8-bit integer.

.. option:: --globalize-symbol <symbol>

 Mark any defined symbols named ``<symbol>`` as global symbols in the output.
 Can be specified multiple times to mark multiple symbols.

.. option:: --globalize-symbols <filename>

 Read a list of names from the file ``<filename>`` and mark defined symbols with
 those names as global in the output. In the file, each line represents a single
 symbol, with leading and trailing whitespace ignored, as is anything following
 a '#'. Can be specified multiple times to read names from multiple files.

.. option:: --input-target <format>, -I

 Read the input as the specified format. See `SUPPORTED FORMATS`_ for a list of
 valid ``<format>`` values. If unspecified, :program:`llvm-objcopy` will attempt
 to determine the format automatically.

.. option:: --keep-file-symbols

 Keep symbols of type `STT_FILE`, even if they would otherwise be stripped.

.. option:: --keep-global-symbol <symbol>, -G

 Mark all symbols local in the output, except for symbols with the name
 ``<symbol>``. Can be specified multiple times to ignore multiple symbols.

.. option:: --keep-global-symbols <filename>

 Mark all symbols local in the output, except for symbols named in the file
 ``<filename>``. In the file, each line represents a single symbol, with leading
 and trailing whitespace ignored, as is anything following a '#'. Can be
 specified multiple times to read names from multiple files.

.. option:: --keep-section <section>

 When removing sections from the output, do not remove sections named
 ``<section>``. Can be specified multiple times to keep multiple sections.

.. option:: --keep-symbol <symbol>, -K

 When removing symbols from the output, do not remove symbols named
 ``<symbol>``. Can be specified multiple times to keep multiple symbols.

.. option:: --keep-symbols <filename>

 When removing symbols from the output do not remove symbols named in the file
 ``<filename>``. In the file, each line represents a single symbol, with leading
 and trailing whitespace ignored, as is anything following a '#'. Can be
 specified multiple times to read names from multiple files.

.. option:: --localize-hidden

 Mark all symbols with hidden or internal visibility local in the output.

.. option:: --localize-symbol <symbol>, -L

 Mark any defined non-common symbol named ``<symbol>`` as a local symbol in the
 output. Can be specified multiple times to mark multiple symbols as local.

.. option:: --localize-symbols <filename>

 Read a list of names from the file ``<filename>`` and mark defined non-common
 symbols with those names as local in the output. In the file, each line
 represents a single symbol, with leading and trailing whitespace ignored, as is
 anything following a '#'. Can be specified multiple times to read names from
 multiple files.

.. option:: --new-symbol-visibility <visibility>

 Specify the visibility of the symbols automatically created when using binary
 input or :option:`--add-symbol`. Valid options are:

 - `default`
 - `hidden`
 - `internal`
 - `protected`

 The default is `default`.

.. option:: --output-target <format>, -O

 Write the output as the specified format. See `SUPPORTED FORMATS`_ for a list
 of valid ``<format>`` values. If unspecified, the output format is assumed to
 be the same as the value specified for :option:`--input-target` or the input
 file's format if that option is also unspecified.

.. option:: --pad-to <address>

 For binary outputs, pad the output to the load address ``<address>`` using a value
 of zero or the value specified by :option:`--gap-fill`.

.. option:: --prefix-alloc-sections <prefix>

 Add ``<prefix>`` to the front of the names of all allocatable sections in the
 output.

.. option:: --prefix-symbols <prefix>

 Add ``<prefix>`` to the front of every symbol name in the output.

.. option:: --preserve-dates, -p

 Preserve access and modification timestamps in the output.

.. option:: --rename-section <old>=<new>[,<flag>,...]

 Rename sections called ``<old>`` to ``<new>`` in the output, and apply any
 specified ``<flag>`` values. See :option:`--set-section-flags` for a list of
 supported flags. Can be specified multiple times to rename multiple sections.

.. option:: --set-section-type <section>=<type>

 Set the type of section ``<section>`` to the integer ``<type>``. Can be
 specified multiple times to update multiple sections.

.. option:: --set-start <addr>

 Set the start address of the output to ``<addr>``. Overrides any previously
 specified :option:`--change-start` or :option:`--adjust-start` options.

.. option:: --set-symbol-visibility <symbol>=<visibility>

 Change the visibility of a symbol to the specified value.

.. option:: --set-symbols-visibility <filename>=<visibility>

 Read a list of symbols from <filename> and change their visibility to the
 specified value. Visibility values: default, internal, hidden, protected.

.. option:: --skip-symbol <symbol>

 Do not change the parameters of symbol ``<symbol>`` when executing other
 options that can change the symbol's name, binding or visibility.

.. option:: --skip-symbols <filename>

 Do not change the parameters of symbols named in the file ``<filename>`` when
 executing other options that can change the symbol's name, binding or
 visibility. In the file, each line represents a single symbol, with leading
 and trailing whitespace ignored, as is anything following a '#'.
 Can be specified multiple times to read names from multiple files.

.. option:: --split-dwo <dwo-file>

 Equivalent to running :program:`llvm-objcopy` with :option:`--extract-dwo` and
 ``<dwo-file>`` as the output file and no other options, and then with
 :option:`--strip-dwo` on the input file.

.. option:: --strip-dwo

 Remove all DWARF .dwo sections from the output.

.. option:: --strip-non-alloc

 Remove from the output all non-allocatable sections that are not within
 segments.

.. option:: --strip-sections

 Remove from the output all section headers and all section data not within
 segments. Note that many tools will not be able to use an object without
 section headers.

.. option:: --target <format>, -F

 Equivalent to :option:`--input-target` and :option:`--output-target` for the
 specified format. See `SUPPORTED FORMATS`_ for a list of valid ``<format>``
 values.

.. option:: --weaken-symbol <symbol>, -W

 Mark global symbols named ``<symbol>`` as weak symbols in the output. Can
 be specified multiple times to mark multiple symbols as weak.

.. option:: --weaken-symbols <filename>

 Read a list of names from the file ``<filename>`` and mark global symbols with
 those names as weak in the output. In the file, each line represents a single
 symbol, with leading and trailing whitespace ignored, as is anything following
 a '#'. Can be specified multiple times to read names from multiple files.

.. option:: --weaken

 Mark all defined global symbols as weak in the output.

MACH-O-SPECIFIC OPTIONS
-----------------------

.. option:: --keep-undefined

 Keep undefined symbols, even if they would otherwise be stripped.

COFF-SPECIFIC OPTIONS
---------------------

.. option:: --subsystem <name>[:<version>]

 Set the PE subsystem, and optionally subsystem version.

SUPPORTED FORMATS
-----------------

The following values are currently supported by :program:`llvm-objcopy` for the
:option:`--input-target`, :option:`--output-target`, and :option:`--target`
options. For GNU :program:`objcopy` compatibility, the values are all bfdnames.

- `binary`
- `ihex`
- `elf32-i386`
- `elf32-x86-64`
- `elf64-x86-64`
- `elf32-iamcu`
- `elf32-littlearm`
- `elf64-aarch64`
- `elf64-littleaarch64`
- `elf32-littleriscv`
- `elf64-littleriscv`
- `elf32-powerpc`
- `elf32-powerpcle`
- `elf64-powerpc`
- `elf64-powerpcle`
- `elf32-bigmips`
- `elf32-ntradbigmips`
- `elf32-ntradlittlemips`
- `elf32-tradbigmips`
- `elf32-tradlittlemips`
- `elf64-tradbigmips`
- `elf64-tradlittlemips`
- `elf32-sparc`
- `elf32-sparcel`
- `elf32-hexagon`
- `elf32-loongarch`
- `elf64-loongarch`
- `elf64-s390`

The following formats are suppoprted by :program:`llvm-objcopy` for the
:option:`--output-target` only:

- `srec`

Additionally, all targets except `binary`, `ihex`, and `srec` can have
`-freebsd` as a suffix.

BINARY INPUT AND OUTPUT
-----------------------

If `binary` is used as the value for :option:`--input-target`, the input file
will be embedded as a data section in an ELF relocatable object, with symbols
``_binary_<file_name>_start``, ``_binary_<file_name>_end``, and
``_binary_<file_name>_size`` representing the start, end and size of the data,
where ``<file_name>`` is the path of the input file as specified on the command
line with non-alphanumeric characters converted to ``_``.

If `binary` is used as the value for :option:`--output-target`, the output file
will be a raw binary file, containing the memory image of the input file.
Symbols and relocation information will be discarded. The image will start at
the address of the first loadable section in the output.

EXIT STATUS
-----------

:program:`llvm-objcopy` exits with a non-zero exit code if there is an error.
Otherwise, it exits with code 0.

BUGS
----

To report bugs, please visit <https://github.com/llvm/llvm-project/labels/tools:llvm-objcopy/strip/>.

There is a known issue with :option:`--input-target` and :option:`--target`
causing only ``binary`` and ``ihex`` formats to have any effect. Other values
will be ignored and :program:`llvm-objcopy` will attempt to guess the input
format.

SEE ALSO
--------

:manpage:`llvm-strip(1)`
