1 //===-- CFGuard.h - CFGuard Transformations ---------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===---------------------------------------------------------------------===//
8 // Windows Control Flow Guard passes (/guard:cf).
9 //===---------------------------------------------------------------------===//
10 
11 #ifndef LLVM_TRANSFORMS_CFGUARD_H
12 #define LLVM_TRANSFORMS_CFGUARD_H
13 
14 #include "llvm/IR/PassManager.h"
15 
16 namespace llvm {
17 
18 class FunctionPass;
19 
20 class CFGuardPass : public PassInfoMixin<CFGuardPass> {
21 public:
22   enum class Mechanism { Check, Dispatch };
23 
24   CFGuardPass(Mechanism M = Mechanism::Check) : GuardMechanism(M) {}
25   PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
26 
27 private:
28   Mechanism GuardMechanism;
29 };
30 
31 /// Insert Control FLow Guard checks on indirect function calls.
32 FunctionPass *createCFGuardCheckPass();
33 
34 /// Insert Control FLow Guard dispatches on indirect function calls.
35 FunctionPass *createCFGuardDispatchPass();
36 
37 } // namespace llvm
38 
39 #endif
40