diff options
| author | Folkert de Vries <folkert@folkertdev.nl> | 2025-07-01 20:02:31 +0200 |
|---|---|---|
| committer | Folkert de Vries <folkert@folkertdev.nl> | 2025-07-16 21:38:48 +0200 |
| commit | f100767dce1fcc0287047053cc29659ac5321a6b (patch) | |
| tree | 87c54ef57c6e3134a2a7cc8a14b442084b5b5e10 /compiler/rustc_codegen_cranelift/src/driver/aot.rs | |
| parent | 9c3064e131f4939cc95a29bb11413c49bbda1491 (diff) | |
| download | rust-f100767dce1fcc0287047053cc29659ac5321a6b.tar.gz rust-f100767dce1fcc0287047053cc29659ac5321a6b.zip | |
fix `-Zsanitizer=kcfi` on `#[naked]` functions
And more broadly only codegen `InstanceKind::Item` using the naked function codegen code. Other instance kinds should follow the normal path.
Diffstat (limited to 'compiler/rustc_codegen_cranelift/src/driver/aot.rs')
| -rw-r--r-- | compiler/rustc_codegen_cranelift/src/driver/aot.rs | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/compiler/rustc_codegen_cranelift/src/driver/aot.rs b/compiler/rustc_codegen_cranelift/src/driver/aot.rs index 442151fe32d..727f2760c0f 100644 --- a/compiler/rustc_codegen_cranelift/src/driver/aot.rs +++ b/compiler/rustc_codegen_cranelift/src/driver/aot.rs @@ -530,8 +530,12 @@ fn codegen_cgu_content( for (mono_item, item_data) in mono_items { match mono_item { MonoItem::Fn(instance) => { - if tcx.codegen_fn_attrs(instance.def_id()).flags.contains(CodegenFnAttrFlags::NAKED) - { + // Other `InstanceKind`s (e.g. `ReifyShim` generated by indirect calls) should be + // codegened like a normal function. + let is_item_instance = matches!(instance.def, InstanceKind::Item(_)); + + let flags = tcx.codegen_fn_attrs(instance.def_id()).flags; + if is_item_instance && flags.contains(CodegenFnAttrFlags::NAKED) { rustc_codegen_ssa::mir::naked_asm::codegen_naked_asm( &mut GlobalAsmContext { tcx, global_asm: &mut cx.global_asm }, instance, |
