enable -fstack-protector on 10.5 for usermode binaries by default.

This matches gcc's behavior.

llvm-svn: 138324
This commit is contained in:
Nico Weber 2011-08-23 07:38:27 +00:00
parent 05e609331c
commit dd47363b3a
3 changed files with 13 additions and 6 deletions

View File

@ -139,7 +139,9 @@ public:
/// GetDefaultStackProtectorLevel - Get the default stack protector level for
/// this tool chain (0=off, 1=on, 2=all).
virtual unsigned GetDefaultStackProtectorLevel() const { return 0; }
virtual unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const {
return 0;
}
/// IsUnwindTablesDefault - Does this tool chain use -funwind-tables
/// by default.

View File

@ -237,9 +237,12 @@ public:
return !(!isTargetIPhoneOS() && isMacosxVersionLT(10, 6));
}
virtual bool IsUnwindTablesDefault() const;
virtual unsigned GetDefaultStackProtectorLevel() const {
// Stack protectors default to on for 10.6 and beyond.
return !isTargetIPhoneOS() && !isMacosxVersionLT(10, 6);
virtual unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const {
// Stack protectors default to on for user code on 10.5,
// and for everything in 10.6 and beyond
return !isTargetIPhoneOS() &&
(!isMacosxVersionLT(10, 6) ||
(!isMacosxVersionLT(10, 5) && !KernelOrKext));
}
virtual const char *GetDefaultRelocationModel() const;
virtual const char *GetForcedPicModel() const;

View File

@ -1671,8 +1671,10 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
StackProtectorLevel = 1;
else if (A->getOption().matches(options::OPT_fstack_protector_all))
StackProtectorLevel = 2;
} else
StackProtectorLevel = getToolChain().GetDefaultStackProtectorLevel();
} else {
StackProtectorLevel =
getToolChain().GetDefaultStackProtectorLevel(KernelOrKext);
}
if (StackProtectorLevel) {
CmdArgs.push_back("-stack-protector");
CmdArgs.push_back(Args.MakeArgString(Twine(StackProtectorLevel)));