HomePhabricator

Add Windows Control Flow Guard checks (/guard:cf).
Audit Requiredd157a9bc8ba1

Authored by ajpaverd on Oct 28 2019, 6:22 AM.

Description

Add Windows Control Flow Guard checks (/guard:cf).

Summary:
A new function pass (Transforms/CFGuard/CFGuard.cpp) inserts CFGuard checks on
indirect function calls, using either the check mechanism (X86, ARM, AArch64) or
or the dispatch mechanism (X86-64). The check mechanism requires a new calling
convention for the supported targets. The dispatch mechanism adds the target as
an operand bundle, which is processed by SelectionDAG. Another pass
(CodeGen/CFGuardLongjmp.cpp) identifies and emits valid longjmp targets, as
required by /guard:cf. This feature is enabled using the cfguard CC1 option.

Reviewers: thakis, rnk, theraven, pcc

Subscribers: ychen, hans, metalcanine, dmajor, tomrittervg, alex, mehdi_amini, mgorny, javed.absar, kristof.beyls, hiraditya, steven_wu, dexonsmith, cfe-commits, llvm-commits

Tags: #clang, #llvm

Differential Revision: https://reviews.llvm.org/D65761

Details

Auditors
grosbach
Committed
theravenOct 28 2019, 8:19 AM
Differential Revision
D65761: Add Windows Control Flow Guard checks (/guard:cf).
Parents
rGa233e7d7cb64: [AArch64] Fix unannotated fall-through between switch labels
Branches
Unknown
Tags
Unknown