123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482 |
- 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:: --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:: --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-section <section>, -j
- Remove all sections from the output, except for sections named ``<section>``.
- Can be specified multiple times to keep multiple sections.
- .. 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.
- .. 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 sections and the section name table.
- For COFF 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.
- .. option:: --version, -V
- Display the version of this program.
- COFF-SPECIFIC OPTIONS
- ---------------------
- The following options are implemented only for COFF objects. If used with other
- objects, :program:`llvm-objcopy` will either emit an error or silently ignore
- them.
- .. option:: --only-keep-debug
- Remove the contents of non-debug sections from the output, but keep the section
- headers.
- 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-section <section=file>
- Add a section named ``<section>`` with the contents of ``<file>`` to the
- output. 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.
- .. 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.
- - `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 llvm-objcopy to remove sections even if it would leave invalid section
- references. Any invalid sh_link fields will be set to zero.
- .. option:: --binary-architecture <arch>, -B
- Specify the architecture to use, when transforming an architecture-less format
- (e.g. binary) to another format. Valid options are:
- - `aarch64`
- - `arm`
- - `i386`
- - `i386:x86-64`
- - `mips`
- - `powerpc:common64`
- - `riscv:rv32`
- - `riscv:rv64`
- - `sparc`
- - `sparcel`
- - `x86-64`
- .. 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:: --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.
- .. 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:: --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 input file's format.
- .. 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:: --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 an equals sign. Leading and trailing whitespace is ignored,
- as is anything following a '#'. Can be specified multiple times to read names
- from multiple files.
- .. 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-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.
- Following is a list of supported flags and their 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.
- - `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.
- The following flags are also accepted, but are ignored for GNU compatibility:
- `noload`, `debug`, `data`, `rom`, `share`.
- .. 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.
- 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 <http://llvm.org/bugs/>.
- 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)`
|