虽然我已经看过直接使用rustc
输出程序集的文档,但是必须手动提取Cargo使用的命令并编辑它们来编写程序集是很乏味的。
有没有办法运行编写汇编文件的Cargo?
答案 0 :(得分:31)
您可以使用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
答案 1 :(得分:23)
除了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
参数,包括(但不限于):
mir
(Rust中间表示)llvm-ir
(LLVM中间表示)llvm-bc
(LLVM字节代码)asm
(大会)答案 2 :(得分:4)
两个已有的答案(使用cargo rustc
和RUSTFLAGS
)都是使用标准工具进行组装的最佳方法。如果您发现自己尝试经常查看组装,则可能需要考虑使用the cargo asm
subcommand。使用cargo install cargo-asm
安装后,您可以像下面那样打印程序集:
cargo build --release
cargo asm my_crate::my_function
不过,有几件事要注意:
cargo asm
,它就会列出您可以检查的所有符号。cargo build --release
才能查看程序集,因为cargo asm
(显然)仅查看已存在的构建工件答案 3 :(得分:-1)
[build]
rustflags = ["--emit", "asm", "-Cllvm-args=--x86-asm-syntax=intel"]