]> git.lizzy.rs Git - rust.git/commitdiff
Correct ModFlagBehavior for Aarch64 on LLVM-15
authorArvind Mukund <armu30@gmail.com>
Tue, 20 Dec 2022 03:06:30 +0000 (19:06 -0800)
committerArvind Mukund <armu30@gmail.com>
Tue, 20 Dec 2022 03:13:17 +0000 (19:13 -0800)
When building with Fat LTO and BTI enabled on aarch64, the BTI is set to
`Module::Min` for alloc shim but is set to `Module::Error` for the
crate. This was fine when we were using LLVM-14 but LLVM-15 changes it's
behaviour to support for compiling with different `mbranch-protection`
flags.

Refer:
https://github.com/rust-lang/llvm-project/commit/b0343a38a5910e980bb031e4014655d77cd0c162

compiler/rustc_codegen_llvm/src/context.rs
compiler/rustc_codegen_llvm/src/llvm/ffi.rs

index f3bff5d57161e25422ab811186ab2a1367cecefa..9c7d3dabd6fb50c76f6d66e2ed7a02eafa68de51 100644 (file)
@@ -283,26 +283,26 @@ pub unsafe fn create_module<'ll>(
         if sess.target.arch == "aarch64" {
             llvm::LLVMRustAddModuleFlag(
                 llmod,
-                llvm::LLVMModFlagBehavior::Error,
+                llvm::LLVMModFlagBehavior::Min,
                 "branch-target-enforcement\0".as_ptr().cast(),
                 bti.into(),
             );
             llvm::LLVMRustAddModuleFlag(
                 llmod,
-                llvm::LLVMModFlagBehavior::Error,
+                llvm::LLVMModFlagBehavior::Min,
                 "sign-return-address\0".as_ptr().cast(),
                 pac_ret.is_some().into(),
             );
             let pac_opts = pac_ret.unwrap_or(PacRet { leaf: false, key: PAuthKey::A });
             llvm::LLVMRustAddModuleFlag(
                 llmod,
-                llvm::LLVMModFlagBehavior::Error,
+                llvm::LLVMModFlagBehavior::Min,
                 "sign-return-address-all\0".as_ptr().cast(),
                 pac_opts.leaf.into(),
             );
             llvm::LLVMRustAddModuleFlag(
                 llmod,
-                llvm::LLVMModFlagBehavior::Error,
+                llvm::LLVMModFlagBehavior::Min,
                 "sign-return-address-with-bkey\0".as_ptr().cast(),
                 u32::from(pac_opts.key == PAuthKey::B),
             );
index e61dbe8b8fc50dfbd2c0fe6de8fc8c7604b06974..6c78966a98d81d9f6e73c55f5a0d223bb8c6d47b 100644 (file)
@@ -79,6 +79,7 @@ pub enum LLVMModFlagBehavior {
     Append = 5,
     AppendUnique = 6,
     Max = 7,
+    Min = 8,
 }
 
 // Consts for the LLVM CallConv type, pre-cast to usize.