# 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 not referenced by relocations 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} --extract-section <section>=<file>
Extract the specified section `<section>` into the file `<file>` as a
seperate object. Can be specified multiple times to extract multiple sections.
`<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.
:::

:::{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} --help, -h
Print a summary of command line options.
:::

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

For WebAssembly objects, remove all custom sections except for those named
metadata.code.\*.
:::

:::{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} --verbose, -v
Print the paths of files that are copied.
:::

:::{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-section-lma \*{+-}<val>
Shift LMA of non-zero-sized segments by `<val>`.
:::

:::{option} --change-section-address <section>{=+-}<val>, --adjust-section-vma
Change the address of sections that match `<section>` pattern to the
specified value, or apply `+<val>`/`-<val>` to the current value. Can be
specified multiple times to specify multiple patterns. Each section is only
modified by one `--change-section-address` argument. If a section name
matches multiple patterns, the rightmost change applies. The object file needs
to be of ET_REL type.
:::

:::{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" not referenced by relocations 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} --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-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} --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} --no-verify-note-sections
When adding note sections, do not verify if the section format is valid.
:::

:::{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} --remove-note [<name>/]<type>
Remove notes of integer type `<type>` and name `<name>` from SHT_NOTE
sections that are not in a segment. Can be specified multiple times.
:::

:::{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} --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} --verify-note-sections
When adding note sections, verify if the section format is valid. On by
default.
:::

:::{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`
- `elf64-amdgpu`

The following formats are supported 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)`

