summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/Tools.cpp
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2011-12-06 03:33:03 +0000
committerNick Lewycky <nicholas@mxc.ca>2011-12-06 03:33:03 +0000
commitf4d3f7a0b9dc5a7bbb3e33cc0088c3404e69326b (patch)
tree73d1a7e4b166ecba3161ee20f0967f3aec56b51b /clang/lib/Driver/Tools.cpp
parent5f115a78cb098c40e3873be1721ffa47f60e025e (diff)
downloadbcm5719-llvm-f4d3f7a0b9dc5a7bbb3e33cc0088c3404e69326b.tar.gz
bcm5719-llvm-f4d3f7a0b9dc5a7bbb3e33cc0088c3404e69326b.zip
Stack realignment is a tristate. Add -mno-stackrealign to turn off all stack
realignment, even with locals with alignment exceeding the ABI guarantee. llvm-svn: 145909
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r--clang/lib/Driver/Tools.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index 074be43fdb4..4987b0a81f0 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -1796,8 +1796,17 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
CmdArgs.push_back(Args.MakeArgString(Twine(StackProtectorLevel)));
}
- if (Args.hasArg(options::OPT_mstackrealign))
- CmdArgs.push_back("-mstackrealign");
+ // Translate -mstackrealign
+ if (Args.hasFlag(options::OPT_mstackrealign, options::OPT_mno_stackrealign,
+ false)) {
+ CmdArgs.push_back("-backend-option");
+ CmdArgs.push_back("-force-align-stack");
+ }
+ if (!Args.hasFlag(options::OPT_mno_stackrealign, options::OPT_mstackrealign,
+ false)) {
+ CmdArgs.push_back(Args.MakeArgString("-mstackrealign"));
+ }
+
if (Args.hasArg(options::OPT_mstack_alignment)) {
StringRef alignment = Args.getLastArgValue(options::OPT_mstack_alignment);
CmdArgs.push_back(Args.MakeArgString("-mstack-alignment=" + alignment));
OpenPOWER on IntegriCloud