aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Driver/Tools.cpp
diff options
context:
space:
mode:
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>2016-12-08 00:22:06 +0000
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>2016-12-08 00:22:06 +0000
commitcfd183ee7e56438f96e6453d319f3df8e900678c (patch)
tree3c540b5fd3d20f1907f71b9a0bf13b7e3422a548 /clang/lib/Driver/Tools.cpp
parent9ee1a1df242c3a11c9b9faaa3ecb2a6bb0e5ee86 (diff)
downloadllvm-cfd183ee7e56438f96e6453d319f3df8e900678c.zip
llvm-cfd183ee7e56438f96e6453d319f3df8e900678c.tar.gz
llvm-cfd183ee7e56438f96e6453d319f3df8e900678c.tar.bz2
[Driver][Darwin] Disable default stack protector levels in freestanding mode.
Currently -fstack-protector is on by default when using -ffreestanding. Change the default behavior to have it off when using -ffreestanding. rdar://problem/14089363 llvm-svn: 289005
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r--clang/lib/Driver/Tools.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index ae38723..661e6f4 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -5279,9 +5279,12 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
Args.AddLastArg(CmdArgs, options::OPT_ftlsmodel_EQ);
// -fhosted is default.
+ bool IsHosted = true;
if (Args.hasFlag(options::OPT_ffreestanding, options::OPT_fhosted, false) ||
- KernelOrKext)
+ KernelOrKext) {
CmdArgs.push_back("-ffreestanding");
+ IsHosted = false;
+ }
// Forward -f (flag) options which we can pass directly.
Args.AddLastArg(CmdArgs, options::OPT_femit_all_decls);
@@ -5414,6 +5417,10 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
} else {
StackProtectorLevel =
getToolChain().GetDefaultStackProtectorLevel(KernelOrKext);
+ // Only use a default stack protector on Darwin in case -ffreestanding
+ // is not specified.
+ if (Triple.isOSDarwin() && !IsHosted)
+ StackProtectorLevel = 0;
}
if (StackProtectorLevel) {
CmdArgs.push_back("-stack-protector");