Author: aivchenk Date: Fri May 18 04:56:21 2018 New Revision: 332704 URL: http://llvm.org/viewvc/llvm-project?rev=332704&view=rev Log: This patch aims to match the changes introduced in gcc by https://gcc.gnu.org/ml/gcc-cvs/2018-04/msg00534.html. The -mibt feature flag is being removed, and the -fcf-protection option now also defines a CET macro and causes errors when used on non-X86 targets, while X86 targets no longer check for -mibt and -mshstk to determine if -fcf-protection is supported. -mshstk is now used only to determine availability of shadow stack intrinsics.
Comes with an LLVM patch (D46882). Patch by mike.dvoretsky Differential Revision: https://reviews.llvm.org/D46881 Modified: cfe/trunk/docs/ClangCommandLineReference.rst cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td cfe/trunk/include/clang/Basic/TargetInfo.h cfe/trunk/include/clang/Driver/Options.td cfe/trunk/lib/Basic/TargetInfo.cpp cfe/trunk/lib/Basic/Targets/X86.cpp cfe/trunk/lib/Basic/Targets/X86.h cfe/trunk/lib/Frontend/CompilerInvocation.cpp cfe/trunk/test/CodeGen/attributes.c cfe/trunk/test/CodeGen/builtins-x86.c cfe/trunk/test/CodeGen/x86-cf-protection.c cfe/trunk/test/Driver/x86-target-features.c cfe/trunk/test/Preprocessor/x86_target_features.c cfe/trunk/test/Sema/attr-nocf_check.c cfe/trunk/test/Sema/attr-nocf_check.cpp Modified: cfe/trunk/docs/ClangCommandLineReference.rst URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/ClangCommandLineReference.rst?rev=332704&r1=332703&r2=332704&view=diff ============================================================================== --- cfe/trunk/docs/ClangCommandLineReference.rst (original) +++ cfe/trunk/docs/ClangCommandLineReference.rst Fri May 18 04:56:21 2018 @@ -2486,8 +2486,6 @@ X86 .. option:: -mgfni, -mno-gfni -.. option:: -mibt, -mno-ibt - .. option:: -mlwp, -mno-lwp .. option:: -mlzcnt, -mno-lzcnt Modified: cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td?rev=332704&r1=332703&r2=332704&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td (original) +++ cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td Fri May 18 04:56:21 2018 @@ -206,6 +206,8 @@ def err_opt_not_valid_with_opt : Error< "option '%0' cannot be specified with '%1'">; def err_opt_not_valid_without_opt : Error< "option '%0' cannot be specified without '%1'">; +def err_opt_not_valid_on_target : Error< + "option '%0' cannot be specified on this target">; // Source manager def err_cannot_open_file : Error<"cannot open file '%0': %1">, DefaultFatal; Modified: cfe/trunk/include/clang/Basic/TargetInfo.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TargetInfo.h?rev=332704&r1=332703&r2=332704&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/TargetInfo.h (original) +++ cfe/trunk/include/clang/Basic/TargetInfo.h Fri May 18 04:56:21 2018 @@ -1075,15 +1075,11 @@ public: /// Check if the target supports CFProtection branch. virtual bool - checkCFProtectionBranchSupported(DiagnosticsEngine &Diags) const { - return false; - } + checkCFProtectionBranchSupported(DiagnosticsEngine &Diags) const; /// Check if the target supports CFProtection branch. virtual bool - checkCFProtectionReturnSupported(DiagnosticsEngine &Diags) const { - return false; - } + checkCFProtectionReturnSupported(DiagnosticsEngine &Diags) const; /// Whether target allows to overalign ABI-specified preferred alignment virtual bool allowsLargerPreferedTypeAlignment() const { return true; } Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=332704&r1=332703&r2=332704&view=diff ============================================================================== --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Fri May 18 04:56:21 2018 @@ -2747,8 +2747,6 @@ def mxsaves : Flag<["-"], "mxsaves">, Gr def mno_xsaves : Flag<["-"], "mno-xsaves">, Group<m_x86_Features_Group>; def mshstk : Flag<["-"], "mshstk">, Group<m_x86_Features_Group>; def mno_shstk : Flag<["-"], "mno-shstk">, Group<m_x86_Features_Group>; -def mibt : Flag<["-"], "mibt">, Group<m_x86_Features_Group>; -def mno_ibt : Flag<["-"], "mno-ibt">, Group<m_x86_Features_Group>; def mretpoline : Flag<["-"], "mretpoline">, Group<m_x86_Features_Group>; def mno_retpoline : Flag<["-"], "mno-retpoline">, Group<m_x86_Features_Group>; def mretpoline_external_thunk : Flag<["-"], "mretpoline-external-thunk">, Group<m_x86_Features_Group>; Modified: cfe/trunk/lib/Basic/TargetInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/TargetInfo.cpp?rev=332704&r1=332703&r2=332704&view=diff ============================================================================== --- cfe/trunk/lib/Basic/TargetInfo.cpp (original) +++ cfe/trunk/lib/Basic/TargetInfo.cpp Fri May 18 04:56:21 2018 @@ -14,6 +14,7 @@ #include "clang/Basic/TargetInfo.h" #include "clang/Basic/AddressSpaces.h" #include "clang/Basic/CharInfo.h" +#include "clang/Basic/Diagnostic.h" #include "clang/Basic/LangOptions.h" #include "llvm/ADT/APFloat.h" #include "llvm/ADT/STLExtras.h" @@ -115,6 +116,18 @@ TargetInfo::TargetInfo(const llvm::Tripl // Out of line virtual dtor for TargetInfo. TargetInfo::~TargetInfo() {} +bool +TargetInfo::checkCFProtectionBranchSupported(DiagnosticsEngine &Diags) const { + Diags.Report(diag::err_opt_not_valid_on_target) << "cf-protection=branch"; + return false; +} + +bool +TargetInfo::checkCFProtectionReturnSupported(DiagnosticsEngine &Diags) const { + Diags.Report(diag::err_opt_not_valid_on_target) << "cf-protection=return"; + return false; +} + /// getTypeName - Return the user string for the specified integer type enum. /// For example, SignedShort -> "short". const char *TargetInfo::getTypeName(IntType T) { Modified: cfe/trunk/lib/Basic/Targets/X86.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/X86.cpp?rev=332704&r1=332703&r2=332704&view=diff ============================================================================== --- cfe/trunk/lib/Basic/Targets/X86.cpp (original) +++ cfe/trunk/lib/Basic/Targets/X86.cpp Fri May 18 04:56:21 2018 @@ -102,26 +102,6 @@ bool X86TargetInfo::setFPMath(StringRef 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 { @@ -781,8 +761,6 @@ bool X86TargetInfo::handleTargetFeatures HasMPX = true; } else if (Feature == "+shstk") { HasSHSTK = true; - } else if (Feature == "+ibt") { - HasIBT = true; } else if (Feature == "+movbe") { HasMOVBE = true; } else if (Feature == "+sgx") { @@ -1175,8 +1153,6 @@ void X86TargetInfo::getTargetDefines(con Builder.defineMacro("__MPX__"); if (HasSHSTK) Builder.defineMacro("__SHSTK__"); - if (HasIBT) - Builder.defineMacro("__IBT__"); if (HasSGX) Builder.defineMacro("__SGX__"); if (HasPREFETCHWT1) @@ -1394,7 +1370,6 @@ bool X86TargetInfo::hasFeature(StringRef .Case("fsgsbase", HasFSGSBASE) .Case("fxsr", HasFXSR) .Case("gfni", HasGFNI) - .Case("ibt", HasIBT) .Case("lwp", HasLWP) .Case("lzcnt", HasLZCNT) .Case("mm3dnow", MMX3DNowLevel >= AMD3DNow) Modified: cfe/trunk/lib/Basic/Targets/X86.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/X86.h?rev=332704&r1=332703&r2=332704&view=diff ============================================================================== --- cfe/trunk/lib/Basic/Targets/X86.h (original) +++ cfe/trunk/lib/Basic/Targets/X86.h Fri May 18 04:56:21 2018 @@ -81,7 +81,6 @@ class LLVM_LIBRARY_VISIBILITY X86TargetI bool HasSHA = false; bool HasMPX = false; bool HasSHSTK = false; - bool HasIBT = false; bool HasSGX = false; bool HasCX16 = false; bool HasFXSR = false; @@ -171,10 +170,15 @@ public: bool validateInputSize(StringRef Constraint, unsigned Size) const override; virtual bool - checkCFProtectionReturnSupported(DiagnosticsEngine &Diags) const override; + checkCFProtectionReturnSupported(DiagnosticsEngine &Diags) const override { + return true; + }; virtual bool - checkCFProtectionBranchSupported(DiagnosticsEngine &Diags) const override; + checkCFProtectionBranchSupported(DiagnosticsEngine &Diags) const override { + return true; + }; + virtual bool validateOperandSize(StringRef Constraint, unsigned Size) const; Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=332704&r1=332703&r2=332704&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Fri May 18 04:56:21 2018 @@ -2829,6 +2829,17 @@ static void ParsePreprocessorArgs(Prepro } } + // Add the __CET__ macro if a CFProtection option is set. + if (const Arg *A = Args.getLastArg(OPT_fcf_protection_EQ)) { + StringRef Name = A->getValue(); + if (Name == "branch") + Opts.addMacroDef("__CET__=1"); + else if (Name == "return") + Opts.addMacroDef("__CET__=2"); + else if (Name == "full") + Opts.addMacroDef("__CET__=3"); + } + // Add macros from the command line. for (const auto *A : Args.filtered(OPT_D, OPT_U)) { if (A->getOption().matches(OPT_D)) Modified: cfe/trunk/test/CodeGen/attributes.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/attributes.c?rev=332704&r1=332703&r2=332704&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/attributes.c (original) +++ cfe/trunk/test/CodeGen/attributes.c Fri May 18 04:56:21 2018 @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -emit-llvm -fcf-protection=branch -target-feature +ibt -triple i386-linux-gnu -o %t %s +// RUN: %clang_cc1 -emit-llvm -fcf-protection=branch -triple i386-linux-gnu -o %t %s // RUN: FileCheck --input-file=%t %s // CHECK: @t5 = weak global i32 2 Modified: cfe/trunk/test/CodeGen/builtins-x86.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/builtins-x86.c?rev=332704&r1=332703&r2=332704&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/builtins-x86.c (original) +++ cfe/trunk/test/CodeGen/builtins-x86.c Fri May 18 04:56:21 2018 @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -DUSE_64 -triple x86_64-unknown-unknown -target-feature +fxsr -target-feature +avx -target-feature +xsaveopt -target-feature +xsaves -target-feature +xsavec -target-feature +mwaitx -target-feature +clzero -target-feature +ibt -target-feature +shstk -target-feature +wbnoinvd -target-feature +cldemote -emit-llvm -o %t %s -// RUN: %clang_cc1 -DUSE_ALL -triple x86_64-unknown-unknown -target-feature +fxsr -target-feature +avx -target-feature +xsaveopt -target-feature +xsaves -target-feature +xsavec -target-feature +mwaitx -target-feature +ibt -target-feature +shstk -target-feature +clzero -target-feature +wbnoinvd -target-feature +cldemote -fsyntax-only -o %t %s +// RUN: %clang_cc1 -DUSE_64 -triple x86_64-unknown-unknown -target-feature +fxsr -target-feature +avx -target-feature +xsaveopt -target-feature +xsaves -target-feature +xsavec -target-feature +mwaitx -target-feature +clzero -target-feature +shstk -target-feature +wbnoinvd -target-feature +cldemote -emit-llvm -o %t %s +// RUN: %clang_cc1 -DUSE_ALL -triple x86_64-unknown-unknown -target-feature +fxsr -target-feature +avx -target-feature +xsaveopt -target-feature +xsaves -target-feature +xsavec -target-feature +mwaitx -target-feature +shstk -target-feature +clzero -target-feature +wbnoinvd -target-feature +cldemote -fsyntax-only -o %t %s #ifdef USE_ALL #define USE_3DNOW Modified: cfe/trunk/test/CodeGen/x86-cf-protection.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/x86-cf-protection.c?rev=332704&r1=332703&r2=332704&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/x86-cf-protection.c (original) +++ cfe/trunk/test/CodeGen/x86-cf-protection.c Fri May 18 04:56:21 2018 @@ -1,6 +1,8 @@ -// RUN: not %clang_cc1 -fsyntax-only -S -o %t -triple i386-unknown-unknown -fcf-protection=return %s 2>&1 | FileCheck %s --check-prefix=RETURN -// RUN: not %clang_cc1 -fsyntax-only -S -o %t -triple i386-unknown-unknown -fcf-protection=branch %s 2>&1 | FileCheck %s --check-prefix=BRANCH +// RUN: %clang -target i386-unknown-unknown -x c -E -dM -o - -fcf-protection=return %s | FileCheck %s --check-prefix=RETURN +// RUN: %clang -target i386-unknown-unknown -x c -E -dM -o - -fcf-protection=branch %s | FileCheck %s --check-prefix=BRANCH +// RUN: %clang -target i386-unknown-unknown -x c -E -dM -o - -fcf-protection=full %s | FileCheck %s --check-prefix=FULL -// RETURN: error: option 'cf-protection=return' cannot be specified without '-mshstk' -// BRANCH: error: option 'cf-protection=branch' cannot be specified without '-mibt' +// RETURN: #define __CET__ 2 +// BRANCH: #define __CET__ 1 +// FULL: #define __CET__ 3 void foo() {} Modified: cfe/trunk/test/Driver/x86-target-features.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/x86-target-features.c?rev=332704&r1=332703&r2=332704&view=diff ============================================================================== --- cfe/trunk/test/Driver/x86-target-features.c (original) +++ cfe/trunk/test/Driver/x86-target-features.c Fri May 18 04:56:21 2018 @@ -80,11 +80,6 @@ // CETSS: "-target-feature" "+shstk" // NO-CETSS: "-target-feature" "-shstk" -// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mibt %s -### -o %t.o 2>&1 | FileCheck -check-prefix=CETIBT %s -// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-ibt %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-CETIBT %s -// CETIBT: "-target-feature" "+ibt" -// NO-CETIBT: "-target-feature" "-ibt" - // RUN: %clang -target i386-unknown-linux-gnu -march=i386 -msgx %s -### -o %t.o 2>&1 | FileCheck -check-prefix=SGX %s // RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-sgx %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-SGX %s // SGX: "-target-feature" "+sgx" Modified: cfe/trunk/test/Preprocessor/x86_target_features.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/x86_target_features.c?rev=332704&r1=332703&r2=332704&view=diff ============================================================================== --- cfe/trunk/test/Preprocessor/x86_target_features.c (original) +++ cfe/trunk/test/Preprocessor/x86_target_features.c Fri May 18 04:56:21 2018 @@ -380,10 +380,6 @@ // SHSTK: #define __SHSTK__ 1 -// RUN: %clang -target i386-unknown-unknown -mibt -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=IBT %s - -// IBT: #define __IBT__ 1 - // RUN: %clang -target i386-unknown-unknown -march=atom -mrdseed -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=RDSEED %s // RDSEED: #define __RDSEED__ 1 Modified: cfe/trunk/test/Sema/attr-nocf_check.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-nocf_check.c?rev=332704&r1=332703&r2=332704&view=diff ============================================================================== --- cfe/trunk/test/Sema/attr-nocf_check.c (original) +++ cfe/trunk/test/Sema/attr-nocf_check.c Fri May 18 04:56:21 2018 @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple=x86_64-unknown-unknown -verify -fcf-protection=branch -target-feature +ibt -fsyntax-only %s +// RUN: %clang_cc1 -triple=x86_64-unknown-unknown -verify -fcf-protection=branch -fsyntax-only %s // Function pointer definition. typedef void (*FuncPointerWithNoCfCheck)(void) __attribute__((nocf_check)); // no-warning Modified: cfe/trunk/test/Sema/attr-nocf_check.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-nocf_check.cpp?rev=332704&r1=332703&r2=332704&view=diff ============================================================================== --- cfe/trunk/test/Sema/attr-nocf_check.cpp (original) +++ cfe/trunk/test/Sema/attr-nocf_check.cpp Fri May 18 04:56:21 2018 @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple=i386-unknown-unknown -verify -fcf-protection=branch -target-feature +ibt -std=c++11 -fsyntax-only %s +// RUN: %clang_cc1 -triple=i386-unknown-unknown -verify -fcf-protection=branch -std=c++11 -fsyntax-only %s // Function pointer definition. [[gnu::nocf_check]] typedef void (*FuncPointerWithNoCfCheck)(void); // no-warning _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits