summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic
diff options
context:
space:
mode:
authorOren Ben Simhon <oren.ben.simhon@intel.com>2018-01-09 08:53:59 +0000
committerOren Ben Simhon <oren.ben.simhon@intel.com>2018-01-09 08:53:59 +0000
commit57cc1a5d77d89a01508782dec8dabece351fbf1c (patch)
treee935fd62cd93a81b1943a80801473910228ad027 /clang/lib/Basic
parent1c6308ecd5e203650bf2d852361cdb1bd5e0e537 (diff)
downloadbcm5719-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.cpp20
-rw-r--r--clang/lib/Basic/Targets/X86.h6
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;
OpenPOWER on IntegriCloud