rustc
を直接使用してアセンブリを出力することに関するドキュメントを見てきましたが、Cargoが使用するコマンドを手動で抽出し、それらを編集してアセンブリを作成するのは面倒です。
アセンブリファイルを書き出すCargoを実行する方法はありますか?
カーゴのcargo rustc
コマンドを使用して、引数をrustc
に直接送信します。
cargo rustc -- --emit asm
ls target/debug/deps/crate_name.s
最適化されたアセンブリの場合:
cargo rustc --release -- --emit asm
ls target/release/deps/crate_name.s
Kennytmの回答に加えて、RUSTFLAGS
環境変数を使用して、標準の貨物コマンドを使用することもできます。
RUSTFLAGS="--emit asm" cargo build
cat target/debug/deps/project_name-hash.s
またはリリースモードで(最適化あり):
RUSTFLAGS="--emit asm" cargo build --release
cat target/release/deps/project_name-hash.s
--emit
パラメータにさまざまな値を渡すことができますincludeing(ただし、これらに限定されません):
mir
(錆の中間表現)llvm-ir
(LLVM中間表現)llvm-bc
(LLVMバイトコード)asm
(アセンブリ)既存の回答(cargo rustc
およびRUSTFLAGS
を使用)は両方とも、標準ツールでアセンブリを取得するための最良の方法です。かなり頻繁にアセンブリを確認しようとしていることに気付いた場合は、 the cargo asm
サブコマンド の使用を検討してください。 。 cargo install cargo-asm
でインストールした後、次のようにアセンブリを印刷できます。
cargo build --release
cargo asm my_crate::my_function
ただし、注意すべき点がいくつかあります。
cargo asm
を実行するだけで、検査できるすべてのシンボルがリストされます。cargo build --release
は(明らかに)既存のビルドアーティファクトのみを参照するため、アセンブリを確認する前にcargo asm
を実行する必要があります。