diff options
| author | bors <bors@rust-lang.org> | 2022-07-18 20:39:24 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-07-18 20:39:24 +0000 |
| commit | f8588549c3c3d45c32b404210cada01e2a45def3 (patch) | |
| tree | 8ecfb39070ceb44e57a2070e9653e41cfd255242 /compiler/rustc_codegen_llvm/src | |
| parent | ed9173276a176126150b4c684a4262a135ce51ef (diff) | |
| parent | 068a559fbbe7e0e018b66e8798295ca4f97236b5 (diff) | |
| download | rust-f8588549c3c3d45c32b404210cada01e2a45def3.tar.gz rust-f8588549c3c3d45c32b404210cada01e2a45def3.zip | |
Auto merge of #99422 - Dylan-DPC:rollup-htjofm6, r=Dylan-DPC
Rollup of 7 pull requests Successful merges: - #98839 (Add assertion that `transmute_copy`'s U is not larger than T) - #98998 (Remove branch target prologues from `#[naked] fn`) - #99198 (add missing null ptr check in alloc example) - #99344 (rustdoc: avoid inlining items with duplicate `(type, name)`) - #99351 (Use `typeck_results` to get accurate qpath res for arg mismatch error) - #99378 (interpret/visitor: add missing early return) - #99394 (Add regression test for #95230) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_codegen_llvm/src')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/attributes.rs | 6 | ||||
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/llvm/ffi.rs | 1 |
2 files changed, 7 insertions, 0 deletions
diff --git a/compiler/rustc_codegen_llvm/src/attributes.rs b/compiler/rustc_codegen_llvm/src/attributes.rs index 32bfa5094c3..62da99ac3fb 100644 --- a/compiler/rustc_codegen_llvm/src/attributes.rs +++ b/compiler/rustc_codegen_llvm/src/attributes.rs @@ -299,6 +299,12 @@ pub fn from_fn_attrs<'ll, 'tcx>( } if codegen_fn_attrs.flags.contains(CodegenFnAttrFlags::NAKED) { to_add.push(AttributeKind::Naked.create_attr(cx.llcx)); + // HACK(jubilee): "indirect branch tracking" works by attaching prologues to functions. + // And it is a module-level attribute, so the alternative is pulling naked functions into new LLVM modules. + // Otherwise LLVM's "naked" functions come with endbr prefixes per https://github.com/rust-lang/rust/issues/98768 + to_add.push(AttributeKind::NoCfCheck.create_attr(cx.llcx)); + // Need this for AArch64. + to_add.push(llvm::CreateAttrStringValue(cx.llcx, "branch-target-enforcement", "false")); } if codegen_fn_attrs.flags.contains(CodegenFnAttrFlags::ALLOCATOR) { // apply to return place instead of function (unlike all other attributes applied in this function) diff --git a/compiler/rustc_codegen_llvm/src/llvm/ffi.rs b/compiler/rustc_codegen_llvm/src/llvm/ffi.rs index 0ad65e5d99b..73cedb59349 100644 --- a/compiler/rustc_codegen_llvm/src/llvm/ffi.rs +++ b/compiler/rustc_codegen_llvm/src/llvm/ffi.rs @@ -191,6 +191,7 @@ pub enum AttributeKind { StackProtect = 32, NoUndef = 33, SanitizeMemTag = 34, + NoCfCheck = 35, } /// LLVMIntPredicate |
