diff options
author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2016-12-08 00:22:06 +0000 |
---|---|---|
committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2016-12-08 00:22:06 +0000 |
commit | cfd183ee7e56438f96e6453d319f3df8e900678c (patch) | |
tree | 3c540b5fd3d20f1907f71b9a0bf13b7e3422a548 /clang/lib/Driver/Tools.cpp | |
parent | 9ee1a1df242c3a11c9b9faaa3ecb2a6bb0e5ee86 (diff) | |
download | llvm-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.cpp | 9 |
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"); |