diff options
author | Etienne Bergeron <etienneb@google.com> | 2016-06-15 20:34:33 +0000 |
---|---|---|
committer | Etienne Bergeron <etienneb@google.com> | 2016-06-15 20:34:33 +0000 |
commit | e28e7f234d6d04f57470613e7546b491347f14a6 (patch) | |
tree | 7555e4e42fe283190fadde1d1be20271de03c4db /clang/lib/Driver/Tools.cpp | |
parent | 389a1e39ea31e32489da2345bb30cc928fde7c49 (diff) | |
download | llvm-e28e7f234d6d04f57470613e7546b491347f14a6.zip llvm-e28e7f234d6d04f57470613e7546b491347f14a6.tar.gz llvm-e28e7f234d6d04f57470613e7546b491347f14a6.tar.bz2 |
Add support to clang-cl driver for /GS switch
Summary:
This patch is adding command-line support for the MSVC buffer security check.
The buffer security check is turned on with the '/GS' compiler switch.
https://msdn.microsoft.com/en-us/library/8dbf701c.aspx
The MSVC buffer security check in implemented here:
http://reviews.llvm.org/D20346
Reviewers: hans, rnk
Subscribers: chrisha, cfe-commits, rnk, hans, thakis
Differential Revision: http://reviews.llvm.org/D20347
llvm-svn: 272832
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index e73c22d..4ee7714 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -6183,6 +6183,14 @@ void Clang::AddClangCLArgs(const ArgList &Args, types::ID InputType, /*default=*/false)) CmdArgs.push_back("-fno-rtti-data"); + // This controls whether or not we emit stack-protector instrumentation. + // In MSVC, Buffer Security Check (/GS) is on by default. + if (Args.hasFlag(options::OPT__SLASH_GS, options::OPT__SLASH_GS_, + /*default=*/true)) { + CmdArgs.push_back("-stack-protector"); + CmdArgs.push_back(Args.MakeArgString(Twine(LangOptions::SSPStrong))); + } + // Emit CodeView if -Z7 is present. *EmitCodeView = Args.hasArg(options::OPT__SLASH_Z7); if (*EmitCodeView) @@ -10022,6 +10030,11 @@ std::unique_ptr<Command> visualstudio::Compiler::GetCommand( if (Args.hasFlag(options::OPT__SLASH_GR_, options::OPT__SLASH_GR, /*default=*/false)) CmdArgs.push_back("/GR-"); + + if (Args.hasFlag(options::OPT__SLASH_GS_, options::OPT__SLASH_GS, + /*default=*/false)) + CmdArgs.push_back("/GS-"); + if (Arg *A = Args.getLastArg(options::OPT_ffunction_sections, options::OPT_fno_function_sections)) CmdArgs.push_back(A->getOption().getID() == options::OPT_ffunction_sections |