1
Fork 0

Rollup merge of #133045 - mrkajetanp:pauth-test-clang-lto-flag-merge, r=jieyouxu

tests: Test pac-ret flag merging on clang with LTO

Extend the test for pac-ret with clang and LTO by checking that different branch protection flags are preserved after the LTO step. There was an issue in older LLVM versions that was causing this to behave incorrectly.

try-job: aarch64-gnu-debug
This commit is contained in:
Matthias Krüger 2024-11-15 19:05:18 +01:00 committed by GitHub
commit 249a9100a3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -10,14 +10,16 @@
//@ ignore-cross-compile //@ ignore-cross-compile
// Reason: the compiled binary is executed // Reason: the compiled binary is executed
use run_make_support::{clang, env_var, llvm_ar, run, rustc, static_lib_name}; use run_make_support::{clang, env_var, llvm_ar, llvm_objdump, run, rustc, static_lib_name};
static PAUTH_A_KEY_PATTERN: &'static str = "paciasp";
static PAUTH_B_KEY_PATTERN: &'static str = "pacibsp";
fn main() { fn main() {
clang() clang()
.arg("-v") .arg("-v")
.lto("thin") .lto("thin")
.arg("-mbranch-protection=bti+pac-ret+leaf") .arg("-mbranch-protection=bti+pac-ret+b-key+leaf")
.arg("-O2")
.arg("-c") .arg("-c")
.out_exe("test.o") .out_exe("test.o")
.input("test.c") .input("test.c")
@ -32,5 +34,15 @@ fn main() {
.input("test.rs") .input("test.rs")
.output("test.bin") .output("test.bin")
.run(); .run();
// Check that both a-key and b-key pac-ret survived LTO
llvm_objdump()
.disassemble()
.input("test.bin")
.run()
.assert_stdout_contains_regex(PAUTH_A_KEY_PATTERN)
.assert_stdout_contains_regex(PAUTH_B_KEY_PATTERN);
// Check that the binary actually runs
run("test.bin"); run("test.bin");
} }