about summary refs log tree commit diff
path: root/compiler/rustc_metadata/src/native_libs.rs
diff options
context:
space:
mode:
authorMatthias Krüger <476013+matthiaskrgr@users.noreply.github.com>2025-07-18 04:27:51 +0200
committerGitHub <noreply@github.com>2025-07-18 04:27:51 +0200
commitaccf61dd42548bd5ec61d43f246b3eb499e980dd (patch)
tree31fad0f50ed48bd49c9d0b5451feeb9298ec856d /compiler/rustc_metadata/src/native_libs.rs
parentb252014673d31f371757613a4ced13adfd6b304c (diff)
parent9c8ab891876b37aac458a7461d904fe593856745 (diff)
downloadrust-accf61dd42548bd5ec61d43f246b3eb499e980dd.tar.gz
rust-accf61dd42548bd5ec61d43f246b3eb499e980dd.zip
Rollup merge of #143293 - folkertdev:naked-function-kcfi, r=compiler-errors
fix `-Zsanitizer=kcfi` on `#[naked]` functions

fixes https://github.com/rust-lang/rust/issues/143266

With `-Zsanitizer=kcfi`, indirect calls happen via generated intermediate shim that forwards the call. The generated shim preserves the attributes of the original, including `#[unsafe(naked)]`. The shim is not a naked function though, and violates its invariants (like having a body that consists of a single `naked_asm!` call).

My fix here is to match on the `InstanceKind`, and only use `codegen_naked_asm` when the instance is not a `ReifyShim`. That does beg the question whether there are other `InstanceKind`s that could come up. As far as I can tell the answer is no: calling via `dyn` seems to work find, and `#[track_caller]` is disallowed in combination with `#[naked]`.

r? codegen
````@rustbot```` label +A-naked
cc ````@maurer```` ````@rcvalle````
Diffstat (limited to 'compiler/rustc_metadata/src/native_libs.rs')
0 files changed, 0 insertions, 0 deletions