-
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.
Stop emitting CET prologues for naked functions
We can apply nocf_check as a hack for now.
- Loading branch information
1 parent
8824d13
commit 92174f9
Showing
6 changed files
with
33 additions
and
1 deletion.
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
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
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,24 @@ | ||
// compile-flags: -C no-prepopulate-passes -Zcf-protection=full | ||
// assembly-output: emit-asm | ||
// needs-asm-support | ||
// only-x86_64 | ||
|
||
#![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, x86's control-flow enforcement, specifically indirect branch protection, | ||
// works by using an instruction for each possible landing site, | ||
// and LLVM implements this via making sure of that. | ||
#[no_mangle] | ||
#[naked] | ||
pub unsafe extern "sysv64" fn will_halt() -> ! { | ||
// CHECK-NOT: endbr{{32|64}} | ||
// CHECK: hlt | ||
asm!("hlt", options(noreturn)) | ||
} | ||
|
||
// what about aarch64? | ||
// "branch-protection"=false |
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