diff options
author | Oren Ben Simhon <oren.ben.simhon@intel.com> | 2018-01-09 08:53:59 +0000 |
---|---|---|
committer | Oren Ben Simhon <oren.ben.simhon@intel.com> | 2018-01-09 08:53:59 +0000 |
commit | 57cc1a5d77d89a01508782dec8dabece351fbf1c (patch) | |
tree | e935fd62cd93a81b1943a80801473910228ad027 /clang/lib/Basic | |
parent | 1c6308ecd5e203650bf2d852361cdb1bd5e0e537 (diff) | |
download | bcm5719-llvm-57cc1a5d77d89a01508782dec8dabece351fbf1c.tar.gz bcm5719-llvm-57cc1a5d77d89a01508782dec8dabece351fbf1c.zip |
Added Control Flow Protection Flag
Cf-protection is a target independent flag that instructs the back-end to instrument control flow mechanisms like: Branch, Return, etc.
For example in X86 this flag will be used to instrument Indirect Branch Tracking instructions.
Differential Revision: https://reviews.llvm.org/D40478
Change-Id: I5126e766c0e6b84118cae0ee8a20fe78cc373dea
llvm-svn: 322063
Diffstat (limited to 'clang/lib/Basic')
-rw-r--r-- | clang/lib/Basic/Targets/X86.cpp | 20 | ||||
-rw-r--r-- | clang/lib/Basic/Targets/X86.h | 6 |
2 files changed, 26 insertions, 0 deletions
diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp index 5d4dfcb8441..268b3590117 100644 --- a/clang/lib/Basic/Targets/X86.cpp +++ b/clang/lib/Basic/Targets/X86.cpp @@ -101,6 +101,26 @@ bool X86TargetInfo::setFPMath(StringRef Name) { return false; } +bool X86TargetInfo::checkCFProtectionReturnSupported( + DiagnosticsEngine &Diags) const { + if (HasSHSTK) + return true; + + Diags.Report(diag::err_opt_not_valid_without_opt) << "cf-protection=return" + << "-mshstk"; + return false; +} + +bool X86TargetInfo::checkCFProtectionBranchSupported( + DiagnosticsEngine &Diags) const { + if (HasIBT) + return true; + + Diags.Report(diag::err_opt_not_valid_without_opt) << "cf-protection=branch" + << "-mibt"; + return false; +} + bool X86TargetInfo::initFeatureMap( llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const { diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h index 58b7a09c9ab..290d3db3504 100644 --- a/clang/lib/Basic/Targets/X86.h +++ b/clang/lib/Basic/Targets/X86.h @@ -158,6 +158,12 @@ public: bool validateInputSize(StringRef Constraint, unsigned Size) const override; + virtual bool + checkCFProtectionReturnSupported(DiagnosticsEngine &Diags) const override; + + virtual bool + checkCFProtectionBranchSupported(DiagnosticsEngine &Diags) const override; + virtual bool validateOperandSize(StringRef Constraint, unsigned Size) const; std::string convertConstraint(const char *&Constraint) const override; |