cl::desc("Apply forward-edge control-flow integrity"),
cl::init(false));
-cl::opt<llvm::CFIntegrity>
-CFIType("cfi-type",
- cl::desc("Choose the type of Control-Flow Integrity check to add"),
- cl::init(CFIntegrity::Sub),
- cl::values(
- clEnumValN(CFIntegrity::Sub, "sub",
- "Subtract the pointer from the table base, then mask."),
- clEnumValN(CFIntegrity::Ror, "ror",
- "Use rotate to check the offset from a table base."),
- clEnumValN(CFIntegrity::Add, "add",
- "Mask out the high bits and add to an aligned base."),
- clEnumValEnd));
-
cl::opt<bool>
CFIEnforcing("cfi-enforcing",
cl::desc("Enforce CFI or pass the violation to a function."),
Options.MCOptions = InitMCTargetOptionsFromFlags();
Options.JTType = JTableType;
Options.FCFI = FCFI;
- Options.CFIType = CFIType;
Options.CFIEnforcing = CFIEnforcing;
Options.CFIFuncName = CFIFuncName;
};
}
- enum class CFIntegrity {
- Sub, // Use subtraction-based checks.
- Ror, // Use rotation-based checks.
- Add // Use addition-based checks. This depends on having
- // sufficient alignment in the code and is usually not
- // feasible.
- };
-
class TargetOptions {
public:
TargetOptions()
TrapFuncName(), FloatABIType(FloatABI::Default),
AllowFPOpFusion(FPOpFusion::Standard), JTType(JumpTable::Single),
FCFI(false), ThreadModel(ThreadModel::POSIX),
- CFIType(CFIntegrity::Sub), CFIEnforcing(false), CFIFuncName() {}
+ CFIEnforcing(false), CFIFuncName() {}
/// PrintMachineCode - This flag is enabled when the -print-machineinstrs
/// option is specified on the command line, and should enable debugging
/// for things like atomics
ThreadModel::Model ThreadModel;
- /// CFIType - This flag specifies the type of control-flow integrity check
- /// to add as a preamble to indirect calls.
- CFIntegrity CFIType;
-
/// CFIEnforcing - This flags controls whether or not CFI violations cause
/// the program to halt.
bool CFIEnforcing;
ARE_EQUAL(JTType) &&
ARE_EQUAL(FCFI) &&
ARE_EQUAL(ThreadModel) &&
- ARE_EQUAL(CFIType) &&
ARE_EQUAL(CFIEnforcing) &&
ARE_EQUAL(CFIFuncName) &&
ARE_EQUAL(MCOptions);