[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