-
Notifications
You must be signed in to change notification settings - Fork 12.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Also stop emitting BTI prologues for naked functions
Same idea but for AArch64.
- Loading branch information
1 parent
92174f9
commit 530b5da
Showing
2 changed files
with
23 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
// compile-flags: -C no-prepopulate-passes -Zbranch-protection=bti | ||
// assembly-output: emit-asm | ||
// needs-asm-support | ||
// only-aarch64 | ||
|
||
#![crate_type = "lib"] | ||
#![feature(naked_functions)] | ||
use std::arch::asm; | ||
|
||
// The problem at hand: Rust has adopted a fairly strict meaning for "naked functions", | ||
// meaning "no prologue whatsoever, no, really, not one instruction." | ||
// Unfortunately, aarch64's "branch target identification" works via hints at landing sites. | ||
// LLVM implements this via making sure of that, even for functions with the naked attribute. | ||
// So, we must emit an appropriate instruction instead! | ||
#[no_mangle] | ||
#[naked] | ||
pub unsafe extern "C" fn _hlt() -> ! { | ||
// CHECK-NOT: hint #34 | ||
// CHECK: hlt #0x1 | ||
asm!("hlt #1", options(noreturn)) | ||
} |