llvm-strip - オブジェクトストリッピングツール

概要

llvm-strip [オプション] 入力...

説明

llvm-strip は、オブジェクトファイルからセクションとシンボルをストリップするツールです。ストリッピングまたは削除オプションが他に指定されていない場合、--strip-all が有効になります。

デフォルトでは、入力ファイルはインプレースで変更されます。入力ファイルに "-" が指定された場合、入力はプログラムの標準入力ストリームから読み取られます。

入力がアーカイブの場合、要求された操作は各アーカイブメンバーに個別に適用されます。

このツールはまだ開発中ですが、ほとんどのシナリオでは GNU の strip のドロップイン代替として機能します。

汎用およびクロスプラットフォームオプション

次のオプションは、ファイル形式に依存しないか、複数のファイル形式に適用されます。

--disable-deterministic-archives, -U

アーカイブメンバーヘッダーを更新する際に、UID、GID、タイムスタンプに実際の値を使用します。

--discard-all, -x

出力からほとんどのローカルシンボルを削除します。ファイル形式が異なると、これがローカルシンボルのサブセットに制限される場合があります。たとえば、ELFオブジェクトのファイルおよびセクションシンボルは破棄されません。さらに、すべてのデバッグセクションを削除します。

--enable-deterministic-archives, -D

アーカイブをストリップする際に決定論的モードを有効にします。つまり、アーカイブメンバーヘッダーのUID、GID、およびタイムスタンプフィールドに0を使用します。デフォルトで有効です。

--help, -h

コマンドラインオプションの概要を表示します。

--no-strip-all

--strip-all を無効にします。

-o <file>

出力を <file> に書き込みます。複数の入力ファイルを -o と組み合わせて使用することはできません。

--only-keep-debug

デバッグ目的で役立つセクションの内容のみを保持するデバッグファイルを出力として生成します。

ELFオブジェクトの場合、これは SHT_NOTE ではない SHF_ALLOC セクションの内容を SHT_NOBITS にして、可能な場合はプログラムヘッダーを縮小することで削除します。

--regex

指定した場合、他のスイッチで指定されたシンボル名とセクション名は、拡張 POSIX 正規表現パターンとして扱われます。

--remove-section <section>, -R

指定されたセクションを出力から削除します。複数のセクションを同時に削除するために複数回指定できます。

--strip-all-gnu

出力からすべてのシンボル、デバッグセクション、および再配置を削除します。このオプションは、GNU strip--strip-all スイッチと同等です。

--strip-all, -s

ELFオブジェクトの場合、.gnu.warning、.ARM.attributeセクション、およびセクション名テーブルを除き、セグメント内ではないすべてのシンボルと非allocセクションを出力から削除します。

COFFオブジェクトの場合、出力からすべてのシンボル、デバッグセクション、および再配置を削除します。

--strip-debug, -d, -g, -S

出力からすべてのデバッグセクションを削除します。

--strip-symbol <symbol>, -N

出力から <symbol> という名前のすべてのシンボルを削除します。複数のシンボルを削除するために複数回指定できます。

--strip-unneeded

再配置で必要とされないすべてのローカルまたは未定義のシンボルを出力から削除します。また、すべてのデバッグセクションを削除します。

--version, -V

llvm-strip 実行ファイルのバージョンを表示します。

--wildcard, -w

シンボル関連のフラグに対してワイルドカード構文を許可します。セクション関連のフラグの場合はデフォルトで有効になっています。–regex とは互換性がありません。

ワイルドカード構文では、次の特別なシンボルを使用できます。

文字

意味

同等

*

任意の数の文字

.*

?

任意の単一文字

.

\

次の文字をエスケープする

\

[a-z]

文字クラス

[a-z]

[!a-z][^a-z]

否定文字クラス

[^a-z]

さらに、ワイルドカードを「!」で開始すると、別のフラグが一致した場合でも、一致を防ぐことができます。たとえば、-w -N '*' -N '!x' は、x を除くすべてのシンボルをストリップします。

ワイルドカードの順序は関係ありません。たとえば、-w -N '*' -N '!x' は、-w -N '!x' -N '*' と同じです。

@<FILE>

応答ファイル <FILE> からコマンドラインオプションとコマンドを読み取ります。

ELF固有のオプション

次のオプションは、ELFオブジェクトに対してのみ実装されています。他のオブジェクトで使用すると、llvm-strip はエラーを生成するか、それらを無視します。

無効なセクション参照が残る場合でも、llvm-strip がセクションを削除できるようにします。無効な sh_link フィールドはすべてゼロに設定されます。

--discard-locals, -X

出力から ".L" で始まるローカルシンボルを削除します。

--keep-file-symbols

タイプが STT_FILE のシンボルは、それ以外の場合はストリップされる場合でも保持します。

--keep-section <section>

出力からセクションを削除するときは、<section> という名前のセクションは削除しないでください。複数のセクションを保持するために複数回指定できます。

--keep-symbol <symbol>, -K

出力からシンボルを削除する際、<symbol> という名前のシンボルは削除しません。複数のシンボルを保持するために、複数回指定できます。

--preserve-dates, -p

出力におけるアクセスと変更のタイムスタンプを保持します。

--strip-sections

セグメント内にないすべてのセクションヘッダーとすべてのセクションデータを、出力から削除します。多くのツールは、セクションヘッダーのないオブジェクトを使用できないことに注意してください。

-T

Swiftのシンボルを削除します。

終了ステータス

llvm-strip は、エラーが発生した場合、ゼロ以外の終了コードで終了します。それ以外の場合は、コード0で終了します。

バグ

バグを報告するには、<https://github.com/llvm/llvm-project/labels/tools:llvm-objcopy%2Fstrip>にアクセスしてください。

関連項目

llvm-objcopy(1)