| # llvm-strip - object stripping tool |
| |
| :::{program} llvm-strip |
| ::: |
| |
| ## SYNOPSIS |
| |
| {program}`llvm-strip` \[*options*\] *inputs...* |
| |
| ## DESCRIPTION |
| |
| {program}`llvm-strip` is a tool to strip sections and symbols from object files. |
| If no other stripping or remove options are specified, {option}`--strip-all` |
| will be enabled. |
| |
| By default, the input files are modified in-place. If "-" is specified for the |
| input file, the input is read from the program's standard input stream. |
| |
| 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}`strip`. |
| |
| ## GENERIC AND CROSS-PLATFORM OPTIONS |
| |
| The following options are either agnostic of the file format, or apply to |
| multiple file formats. |
| |
| :::{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} --enable-deterministic-archives, -D |
| Enable deterministic mode when stripping 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} --no-strip-all |
| Disable {option}`--strip-all`. |
| ::: |
| |
| :::{option} -o <file> |
| Write output to \<file>. Multiple input files cannot be used in combination |
| with -o. |
| ::: |
| |
| :::{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} --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}`strip`'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, -d, -g, -S |
| 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-unneeded |
| Remove from the output all local or undefined symbols that are not required by |
| relocations. Also remove all debug sections. |
| ::: |
| |
| :::{option} --verbose, -v |
| Print the paths of files that are copied. |
| ::: |
| |
| :::{option} --version, -V |
| Display the version of the {program}`llvm-strip` 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-strip` will either emit an error or silently ignore |
| them. |
| |
| :::{option} --allow-broken-links |
| Allow {program}`llvm-strip` to remove sections even if it would leave invalid |
| section references. Any invalid sh_link fields will be set to zero. |
| ::: |
| |
| :::{option} --discard-locals, -X |
| Remove local symbols starting with ".L" not referenced by relocations from the output. |
| ::: |
| |
| :::{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} --preserve-dates, -p |
| Preserve access and modification timestamps in the output. |
| ::: |
| |
| :::{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. |
| ::: |
| |
| ## MACH-O-SPECIFIC OPTIONS |
| |
| The following options are implemented only for Mach-O objects. If used with other |
| objects, {program}`llvm-strip` will either emit an error or silently ignore |
| them. |
| |
| :::{option} -T |
| Remove Swift symbols. |
| ::: |
| |
| ## EXIT STATUS |
| |
| {program}`llvm-strip` 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%2Fstrip>>. |
| |
| ## SEE ALSO |
| |
| {manpage}`llvm-objcopy(1)` |
| |