[llvm] 14dc3e3 - [SelectionDAG] [KCFI] Allow "kcfi" on invoke (#148742)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 14 18:55:12 PDT 2025
Author: Florian Mayer
Date: 2025-07-14T18:55:09-07:00
New Revision: 14dc3e3d5f84fe4e52bcccdc514efdd27ed7a45c
URL: https://github.com/llvm/llvm-project/commit/14dc3e3d5f84fe4e52bcccdc514efdd27ed7a45c
DIFF: https://github.com/llvm/llvm-project/commit/14dc3e3d5f84fe4e52bcccdc514efdd27ed7a45c.diff
LOG: [SelectionDAG] [KCFI] Allow "kcfi" on invoke (#148742)
This is handled in CallBase, so it is valid for both call and invoke
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
llvm/test/CodeGen/X86/kcfi.ll
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
index ecd1ff87e7fbc..517743aca7463 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -3355,7 +3355,7 @@ void SelectionDAGBuilder::visitInvoke(const InvokeInst &I) {
{LLVMContext::OB_deopt, LLVMContext::OB_gc_transition,
LLVMContext::OB_gc_live, LLVMContext::OB_funclet,
LLVMContext::OB_cfguardtarget, LLVMContext::OB_ptrauth,
- LLVMContext::OB_clang_arc_attachedcall}))
+ LLVMContext::OB_clang_arc_attachedcall, LLVMContext::OB_kcfi}))
reportFatalUsageError(
"cannot lower invokes with arbitrary operand bundles!");
diff --git a/llvm/test/CodeGen/X86/kcfi.ll b/llvm/test/CodeGen/X86/kcfi.ll
index 059efcc71b0eb..fd93b8e3d4188 100644
--- a/llvm/test/CodeGen/X86/kcfi.ll
+++ b/llvm/test/CodeGen/X86/kcfi.ll
@@ -138,6 +138,29 @@ define void @f8() {
ret void
}
+declare i32 @__gxx_personality_v0(...)
+
+define void @f9() personality ptr @__gxx_personality_v0 {
+; MIR-LABEL: name: f9
+; MIR: body:
+; ISEL: CALL64m killed %0, 1, $noreg, 0, $noreg, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, cfi-type 12345678
+; KCFI: $r11 = MOV64rm killed renamable $rax, 1, $noreg, 0, $noreg
+; KCFI-NEXT: BUNDLE{{.*}} {
+; KCFI-NEXT: KCFI_CHECK $r11, 12345678, implicit-def $r10, implicit-def $r11, implicit-def $eflags
+; KCFI-NEXT: CALL64r internal $r11, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp
+; KCFI-NEXT: }
+ %1 = load ptr, ptr @g, align 8
+ invoke void %1() [ "kcfi"(i32 12345678) ]
+ to label %cont
+ unwind label %err
+cont:
+ ret void
+err:
+ %exn = landingpad { i8*, i32 }
+ catch i8* null
+ resume { i8*, i32 } %exn
+}
+
attributes #0 = { "target-features"="+retpoline-indirect-branches,+retpoline-indirect-calls" }
!llvm.module.flags = !{!0}
More information about the llvm-commits
mailing list