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.

.. 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-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` and `strings`. Not
 all flags are meaningful for all object file formats.

 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.

 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:: --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:: --build-id-link-dir <dir>

 Set the directory used by :option:`--build-id-link-input` and
 :option:`--build-id-link-output`.

.. option:: --build-id-link-input <suffix>

 Hard-link the input to ``<dir>/xx/xxx<suffix>``, where ``<dir>`` is the directory
 specified by :option:`--build-id-link-dir`. The path used is derived from the
 hex build ID.

.. option:: --build-id-link-output <suffix>

 Hard-link the output to ``<dir>/xx/xxx<suffix>``, where ``<dir>`` is the directory
 specified by :option:`--build-id-link-dir`. The path used is derived from the
 hex build ID.

.. 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 [<style>]

 Compress DWARF debug sections in the output, using the specified style.
 Supported styles are `zlib-gnu` and `zlib`. Defaults to `zlib` if no style is
 specified.

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

 Make 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>

 Make 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

 Make 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:: --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-start-addr <addr>

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

.. 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 any global symbol named ``<symbol>`` as a weak symbol 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.

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`

Additionally, all targets except `binary` and `ihex` 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://bugs.llvm.org/>.

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)`
