mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Rollup merge of #126803 - tgross35:verbose-asm, r=Amanieu
Change `asm-comments` to `verbose-asm`, always emit user comments Implements what is described in https://github.com/rust-lang/compiler-team/issues/762 Tracking issue: https://github.com/rust-lang/rust/issues/126802
This commit is contained in:
commit
c74d620635
@ -32,7 +32,7 @@ impl OwnedTargetMachine {
|
||||
unique_section_names: bool,
|
||||
trap_unreachable: bool,
|
||||
singletree: bool,
|
||||
asm_comments: bool,
|
||||
verbose_asm: bool,
|
||||
emit_stack_size_section: bool,
|
||||
relax_elf_relocations: bool,
|
||||
use_init_array: bool,
|
||||
@ -64,7 +64,7 @@ impl OwnedTargetMachine {
|
||||
unique_section_names,
|
||||
trap_unreachable,
|
||||
singletree,
|
||||
asm_comments,
|
||||
verbose_asm,
|
||||
emit_stack_size_section,
|
||||
relax_elf_relocations,
|
||||
use_init_array,
|
||||
|
@ -214,7 +214,7 @@ pub fn target_machine_factory(
|
||||
sess.opts.unstable_opts.trap_unreachable.unwrap_or(sess.target.trap_unreachable);
|
||||
let emit_stack_size_section = sess.opts.unstable_opts.emit_stack_sizes;
|
||||
|
||||
let asm_comments = sess.opts.unstable_opts.asm_comments;
|
||||
let verbose_asm = sess.opts.unstable_opts.verbose_asm;
|
||||
let relax_elf_relocations =
|
||||
sess.opts.unstable_opts.relax_elf_relocations.unwrap_or(sess.target.relax_elf_relocations);
|
||||
|
||||
@ -289,7 +289,7 @@ pub fn target_machine_factory(
|
||||
funique_section_names,
|
||||
trap_unreachable,
|
||||
singlethread,
|
||||
asm_comments,
|
||||
verbose_asm,
|
||||
emit_stack_size_section,
|
||||
relax_elf_relocations,
|
||||
use_init_array,
|
||||
|
@ -2185,7 +2185,7 @@ extern "C" {
|
||||
UniqueSectionNames: bool,
|
||||
TrapUnreachable: bool,
|
||||
Singlethread: bool,
|
||||
AsmComments: bool,
|
||||
VerboseAsm: bool,
|
||||
EmitStackSizeSection: bool,
|
||||
RelaxELFRelocations: bool,
|
||||
UseInitArray: bool,
|
||||
|
@ -757,7 +757,6 @@ fn test_unstable_options_tracking_hash() {
|
||||
// tidy-alphabetical-start
|
||||
tracked!(allow_features, Some(vec![String::from("lang_items")]));
|
||||
tracked!(always_encode_mir, true);
|
||||
tracked!(asm_comments, true);
|
||||
tracked!(assume_incomplete_release, true);
|
||||
tracked!(binary_dep_depinfo, true);
|
||||
tracked!(box_noalias, false);
|
||||
@ -862,6 +861,7 @@ fn test_unstable_options_tracking_hash() {
|
||||
tracked!(uninit_const_chunk_threshold, 123);
|
||||
tracked!(unleash_the_miri_inside_of_you, true);
|
||||
tracked!(use_ctors_section, Some(true));
|
||||
tracked!(verbose_asm, true);
|
||||
tracked!(verify_llvm_ir, true);
|
||||
tracked!(virtual_function_elimination, true);
|
||||
tracked!(wasi_exec_model, Some(WasiExecModel::Reactor));
|
||||
|
@ -407,7 +407,7 @@ extern "C" LLVMTargetMachineRef LLVMRustCreateTargetMachine(
|
||||
const char *ABIStr, LLVMRustCodeModel RustCM, LLVMRustRelocModel RustReloc,
|
||||
LLVMRustCodeGenOptLevel RustOptLevel, bool UseSoftFloat,
|
||||
bool FunctionSections, bool DataSections, bool UniqueSectionNames,
|
||||
bool TrapUnreachable, bool Singlethread, bool AsmComments,
|
||||
bool TrapUnreachable, bool Singlethread, bool VerboseAsm,
|
||||
bool EmitStackSizeSection, bool RelaxELFRelocations, bool UseInitArray,
|
||||
const char *SplitDwarfFile, const char *OutputObjFile,
|
||||
const char *DebugInfoCompression, bool UseEmulatedTls,
|
||||
@ -435,8 +435,9 @@ extern "C" LLVMTargetMachineRef LLVMRustCreateTargetMachine(
|
||||
Options.DataSections = DataSections;
|
||||
Options.FunctionSections = FunctionSections;
|
||||
Options.UniqueSectionNames = UniqueSectionNames;
|
||||
Options.MCOptions.AsmVerbose = AsmComments;
|
||||
Options.MCOptions.PreserveAsmComments = AsmComments;
|
||||
Options.MCOptions.AsmVerbose = VerboseAsm;
|
||||
// Always preserve comments that were written by the user
|
||||
Options.MCOptions.PreserveAsmComments = true;
|
||||
Options.MCOptions.ABIName = ABIStr;
|
||||
if (SplitDwarfFile) {
|
||||
Options.MCOptions.SplitDwarfFile = SplitDwarfFile;
|
||||
|
@ -1630,8 +1630,6 @@ options! {
|
||||
"only allow the listed language features to be enabled in code (comma separated)"),
|
||||
always_encode_mir: bool = (false, parse_bool, [TRACKED],
|
||||
"encode MIR of all functions into the crate metadata (default: no)"),
|
||||
asm_comments: bool = (false, parse_bool, [TRACKED],
|
||||
"generate comments into the assembly (may change behavior) (default: no)"),
|
||||
assert_incr_state: Option<String> = (None, parse_opt_string, [UNTRACKED],
|
||||
"assert that the incremental cache is in given state: \
|
||||
either `loaded` or `not-loaded`."),
|
||||
@ -2107,6 +2105,8 @@ written to standard error output)"),
|
||||
"Generate sync unwind tables instead of async unwind tables (default: no)"),
|
||||
validate_mir: bool = (false, parse_bool, [UNTRACKED],
|
||||
"validate MIR after each transformation"),
|
||||
verbose_asm: bool = (false, parse_bool, [TRACKED],
|
||||
"add descriptive comments from LLVM to the assembly (may change behavior) (default: no)"),
|
||||
#[rustc_lint_opt_deny_field_access("use `Session::verbose_internals` instead of this field")]
|
||||
verbose_internals: bool = (false, parse_bool, [TRACKED_NO_CRATE_HASH],
|
||||
"in general, enable more debug printouts (default: no)"),
|
||||
|
70
src/doc/unstable-book/src/compiler-flags/verbose-asm.md
Normal file
70
src/doc/unstable-book/src/compiler-flags/verbose-asm.md
Normal file
@ -0,0 +1,70 @@
|
||||
# `verbose-asm`
|
||||
|
||||
The tracking issue for this feature is: [#126802](https://github.com/rust-lang/rust/issues/126802).
|
||||
|
||||
------------------------
|
||||
|
||||
This enables passing `-Zverbose-asm` to get contextual comments added by LLVM.
|
||||
|
||||
Sample code:
|
||||
|
||||
```rust
|
||||
#[no_mangle]
|
||||
pub fn foo(a: i32, b: i32) -> i32 {
|
||||
a + b
|
||||
}
|
||||
```
|
||||
|
||||
Default output:
|
||||
|
||||
```asm
|
||||
foo:
|
||||
push rax
|
||||
add edi, esi
|
||||
mov dword ptr [rsp + 4], edi
|
||||
seto al
|
||||
jo .LBB0_2
|
||||
mov eax, dword ptr [rsp + 4]
|
||||
pop rcx
|
||||
ret
|
||||
.LBB0_2:
|
||||
lea rdi, [rip + .L__unnamed_1]
|
||||
mov rax, qword ptr [rip + core::panicking::panic_const::panic_const_add_overflow::h9c85248fe0d735b2@GOTPCREL]
|
||||
call rax
|
||||
|
||||
.L__unnamed_2:
|
||||
.ascii "/app/example.rs"
|
||||
|
||||
.L__unnamed_1:
|
||||
.quad .L__unnamed_2
|
||||
.asciz "\017\000\000\000\000\000\000\000\004\000\000\000\005\000\000"
|
||||
```
|
||||
|
||||
With `-Zverbose-asm`:
|
||||
|
||||
```asm
|
||||
foo: # @foo
|
||||
# %bb.0:
|
||||
push rax
|
||||
add edi, esi
|
||||
mov dword ptr [rsp + 4], edi # 4-byte Spill
|
||||
seto al
|
||||
jo .LBB0_2
|
||||
# %bb.1:
|
||||
mov eax, dword ptr [rsp + 4] # 4-byte Reload
|
||||
pop rcx
|
||||
ret
|
||||
.LBB0_2:
|
||||
lea rdi, [rip + .L__unnamed_1]
|
||||
mov rax, qword ptr [rip + core::panicking::panic_const::panic_const_add_overflow::h9c85248fe0d735b2@GOTPCREL]
|
||||
call rax
|
||||
# -- End function
|
||||
.L__unnamed_2:
|
||||
.ascii "/app/example.rs"
|
||||
|
||||
.L__unnamed_1:
|
||||
.quad .L__unnamed_2
|
||||
.asciz "\017\000\000\000\000\000\000\000\004\000\000\000\005\000\000"
|
||||
|
||||
# DW_AT_external
|
||||
```
|
12
tests/assembly/asm-comments.rs
Normal file
12
tests/assembly/asm-comments.rs
Normal file
@ -0,0 +1,12 @@
|
||||
//@ assembly-output: emit-asm
|
||||
//@ only-x86_64
|
||||
// Check that comments in assembly get passed
|
||||
|
||||
#![crate_type = "lib"]
|
||||
|
||||
// CHECK-LABEL: test_comments:
|
||||
#[no_mangle]
|
||||
pub fn test_comments() {
|
||||
// CHECK: example comment
|
||||
unsafe { core::arch::asm!("nop // example comment") };
|
||||
}
|
Loading…
Reference in New Issue
Block a user