Author: Zola Bridges Date: 2020-05-11T13:37:12-07:00 New Revision: 379e68a763097bed55556c6dc7453e4b732e3d68
URL: https://github.com/llvm/llvm-project/commit/379e68a763097bed55556c6dc7453e4b732e3d68 DIFF: https://github.com/llvm/llvm-project/commit/379e68a763097bed55556c6dc7453e4b732e3d68.diff LOG: [clang][SLH] Add __has_feature(speculative_load_hardening) SLH doesn't support asm goto and is unlikely to ever support it. Users of asm goto need a way to choose whether to use asm goto or fallback to an SLH compatible code path when SLH is enabled. This feature flag will give users this ability. Tested via unit test Reviewed By: mattdr Differential Revision: https://reviews.llvm.org/D79733 Added: Modified: clang/include/clang/Basic/Features.def clang/include/clang/Basic/LangOptions.def clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Frontend/CompilerInvocation.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Basic/Features.def b/clang/include/clang/Basic/Features.def index eb69734571cc..999bcb7e2e29 100644 --- a/clang/include/clang/Basic/Features.def +++ b/clang/include/clang/Basic/Features.def @@ -36,6 +36,7 @@ #define EXTENSION(Name, Predicate) #endif +FEATURE(speculative_load_hardening, LangOpts.SpeculativeLoadHardening) FEATURE(address_sanitizer, LangOpts.Sanitize.hasOneOf(SanitizerKind::Address | SanitizerKind::KernelAddress)) diff --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def index 55784c3911dd..c582a58e731f 100644 --- a/clang/include/clang/Basic/LangOptions.def +++ b/clang/include/clang/Basic/LangOptions.def @@ -368,6 +368,8 @@ ENUM_LANGOPT(SignReturnAddressKey, SignReturnAddressKeyKind, 1, SignReturnAddres "Key used for return address signing") LANGOPT(BranchTargetEnforcement, 1, 0, "Branch-target enforcement enabled") +LANGOPT(SpeculativeLoadHardening, 1, 0, "Speculative load hardening enabled") + #undef LANGOPT #undef COMPATIBLE_LANGOPT #undef BENIGN_LANGOPT diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index d6f05bea4a29..cd85f9a62986 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5361,8 +5361,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, Args.AddLastArg(CmdArgs, options::OPT_pthread); - if (Args.hasFlag(options::OPT_mspeculative_load_hardening, options::OPT_mno_speculative_load_hardening, - false)) + if (Args.hasFlag(options::OPT_mspeculative_load_hardening, + options::OPT_mno_speculative_load_hardening, false)) CmdArgs.push_back(Args.MakeArgString("-mspeculative-load-hardening")); RenderSSPOptions(TC, Args, CmdArgs, KernelOrKext); diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 2d6f4be6885e..649e78e19c93 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -3382,6 +3382,7 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK, } Opts.BranchTargetEnforcement = Args.hasArg(OPT_mbranch_target_enforce); + Opts.SpeculativeLoadHardening = Args.hasArg(OPT_mspeculative_load_hardening); } static bool isStrictlyPreprocessorAction(frontend::ActionKind Action) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits