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