Skip to content

Commit 14dc3e3

Browse files
authored
[SelectionDAG] [KCFI] Allow "kcfi" on invoke (#148742)
This is handled in CallBase, so it is valid for both call and invoke
1 parent 27b3b4a commit 14dc3e3

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3355,7 +3355,7 @@ void SelectionDAGBuilder::visitInvoke(const InvokeInst &I) {
33553355
{LLVMContext::OB_deopt, LLVMContext::OB_gc_transition,
33563356
LLVMContext::OB_gc_live, LLVMContext::OB_funclet,
33573357
LLVMContext::OB_cfguardtarget, LLVMContext::OB_ptrauth,
3358-
LLVMContext::OB_clang_arc_attachedcall}))
3358+
LLVMContext::OB_clang_arc_attachedcall, LLVMContext::OB_kcfi}))
33593359
reportFatalUsageError(
33603360
"cannot lower invokes with arbitrary operand bundles!");
33613361

llvm/test/CodeGen/X86/kcfi.ll

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,29 @@ define void @f8() {
138138
ret void
139139
}
140140

141+
declare i32 @__gxx_personality_v0(...)
142+
143+
define void @f9() personality ptr @__gxx_personality_v0 {
144+
; MIR-LABEL: name: f9
145+
; MIR: body:
146+
; ISEL: CALL64m killed %0, 1, $noreg, 0, $noreg, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, cfi-type 12345678
147+
; KCFI: $r11 = MOV64rm killed renamable $rax, 1, $noreg, 0, $noreg
148+
; KCFI-NEXT: BUNDLE{{.*}} {
149+
; KCFI-NEXT: KCFI_CHECK $r11, 12345678, implicit-def $r10, implicit-def $r11, implicit-def $eflags
150+
; KCFI-NEXT: CALL64r internal $r11, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp
151+
; KCFI-NEXT: }
152+
%1 = load ptr, ptr @g, align 8
153+
invoke void %1() [ "kcfi"(i32 12345678) ]
154+
to label %cont
155+
unwind label %err
156+
cont:
157+
ret void
158+
err:
159+
%exn = landingpad { i8*, i32 }
160+
catch i8* null
161+
resume { i8*, i32 } %exn
162+
}
163+
141164
attributes #0 = { "target-features"="+retpoline-indirect-branches,+retpoline-indirect-calls" }
142165

143166
!llvm.module.flags = !{!0}

0 commit comments

Comments
 (0)