Rollup merge of #152909 - davidtwco:branch-protection-target-modifier, r=jackh726

sess: `-Zbranch-protection` is a target modifier

`-Zbranch-protection` only makes sense if the entire crate graph has the option set, otherwise the security properties that branch protection provides won't be effective - hence a target modifier. This flag is unstable so I don't think this warrants an MCP.
This commit is contained in:
Stuart Cook
2026-03-20 15:33:04 +11:00
committed by GitHub
4 changed files with 18 additions and 5 deletions
+1 -1
View File
@@ -2240,7 +2240,7 @@ options! {
(default: no)"),
box_noalias: bool = (true, parse_bool, [TRACKED],
"emit noalias metadata for box (default: yes)"),
branch_protection: Option<BranchProtection> = (None, parse_branch_protection, [TRACKED],
branch_protection: Option<BranchProtection> = (None, parse_branch_protection, [TRACKED TARGET_MODIFIER],
"set options for branch target identification and pointer authentication on AArch64"),
build_sdylib_interface: bool = (false, parse_bool, [UNTRACKED],
"whether the stable interface is being built"),
@@ -1,4 +1,4 @@
//@ compile-flags: -C no-prepopulate-passes -Zbranch-protection=bti
//@ compile-flags: -C no-prepopulate-passes -Zbranch-protection=bti -Cunsafe-allow-abi-mismatch=branch-protection
//@ assembly-output: emit-asm
//@ needs-asm-support
//@ only-aarch64
@@ -32,6 +32,7 @@ fn main() {
.opt_level("2")
.linker(&env_var("CLANG"))
.link_arg("-fuse-ld=lld")
.arg("-Cunsafe-allow-abi-mismatch=branch-protection")
.arg("-Zbranch-protection=bti,gcs,pac-ret,leaf")
.input("test.rs")
.output("test.bin")
@@ -15,7 +15,11 @@ use run_make_support::{build_native_static_lib, cc, is_windows_msvc, llvm_ar, ru
fn main() {
build_native_static_lib("test");
rustc().arg("-Zbranch-protection=bti,gcs,pac-ret,leaf").input("test.rs").run();
rustc()
.arg("-Cunsafe-allow-abi-mismatch=branch-protection")
.arg("-Zbranch-protection=bti,gcs,pac-ret,leaf")
.input("test.rs")
.run();
run("test");
cc().arg("-v")
.arg("-c")
@@ -25,7 +29,11 @@ fn main() {
.run();
let obj_file = if is_windows_msvc() { "test.obj" } else { "test" };
llvm_ar().obj_to_ar().output_input("libtest.a", &obj_file).run();
rustc().arg("-Zbranch-protection=bti,gcs,pac-ret,leaf").input("test.rs").run();
rustc()
.arg("-Cunsafe-allow-abi-mismatch=branch-protection")
.arg("-Zbranch-protection=bti,gcs,pac-ret,leaf")
.input("test.rs")
.run();
run("test");
// FIXME: +pc was only recently added to LLVM
@@ -37,6 +45,10 @@ fn main() {
// .run();
// let obj_file = if is_windows_msvc() { "test.obj" } else { "test" };
// llvm_ar().obj_to_ar().output_input("libtest.a", &obj_file).run();
// rustc().arg("-Zbranch-protection=bti,pac-ret,pc,leaf").input("test.rs").run();
// rustc()
// .arg("-Cunsafe-allow-abi-mismatch=branch-protection")
// .arg("-Zbranch-protection=bti,pac-ret,pc,leaf")
// .input("test.rs")
// .run();
// run("test");
}