<div class="gmail_quote">On Mon, Jun 20, 2011 at 5:14 PM, Nick Lewycky <span dir="ltr"><<a href="mailto:nicholas@mxc.ca">nicholas@mxc.ca</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Author: nicholas<br>
Date: Mon Jun 20 19:14:18 2011<br>
New Revision: 133489<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=133489&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=133489&view=rev</a><br>
Log:<br>
Add support for -Wa,--noexecstack when building from a non-assembly file. For<br>
an assembly file it worked correctly, while for a .c file it would given an<br>
error about how --noexecstack is not a supported argument to -Wa.<br>
<br>
Added:<br>
    cfe/trunk/test/Driver/noexecstack.c<br>
Modified:<br>
    cfe/trunk/include/clang/Driver/CC1Options.td<br>
    cfe/trunk/include/clang/Frontend/CodeGenOptions.h<br>
    cfe/trunk/lib/CodeGen/BackendUtil.cpp<br>
    cfe/trunk/lib/Driver/Tools.cpp<br>
    cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
<br>
Modified: cfe/trunk/include/clang/Driver/CC1Options.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=133489&r1=133488&r2=133489&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=133489&r1=133488&r2=133489&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/include/clang/Driver/CC1Options.td (original)<br>
+++ cfe/trunk/include/clang/Driver/CC1Options.td Mon Jun 20 19:14:18 2011<br>
@@ -157,6 +157,8 @@<br>
   HelpText<"The float ABI to use">;<br>
 def mlimit_float_precision : Separate<"-mlimit-float-precision">,<br>
   HelpText<"Limit float precision to the given value">;<br>
+def mno_exec_stack : Flag<"-mnoexecstack">,<br></blockquote><div><br></div><div>-mno-exec-stack or -mno-execstack would be more consistent with the rest of these flags... If 'noexecstack' is important to have as a single word, then the def should be 'mnoexecstack' to match.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
+  HelpText<"Mark the file as not needing an executable stack">;<br></blockquote><div><br></div><div>Does this mark it as not needing an executable stack, or require it to have a non-executable stack? That is, does this flag trump?</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
 def mno_zero_initialized_in_bss : Flag<"-mno-zero-initialized-in-bss">,<br>
   HelpText<"Do not put zero initialized data in the BSS">;<br>
 def momit_leaf_frame_pointer : Flag<"-momit-leaf-frame-pointer">,<br>
<br>
Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.h?rev=133489&r1=133488&r2=133489&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.h?rev=133489&r1=133488&r2=133489&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/include/clang/Frontend/CodeGenOptions.h (original)<br>
+++ cfe/trunk/include/clang/Frontend/CodeGenOptions.h Mon Jun 20 19:14:18 2011<br>
@@ -70,6 +70,7 @@<br>
   unsigned MergeAllConstants : 1; /// Merge identical constants.<br>
   unsigned NoCommon          : 1; /// Set when -fno-common or C++ is enabled.<br>
   unsigned NoDwarf2CFIAsm    : 1; /// Set when -fno-dwarf2-cfi-asm is enabled.<br>
+  unsigned NoExecStack       : 1; /// Set when -Wa,--noexecstack is enabled.<br>
   unsigned NoImplicitFloat   : 1; /// Set when -mno-implicit-float is enabled.<br>
   unsigned NoInfsFPMath      : 1; /// Assume FP arguments, results not +-Inf.<br>
   unsigned NoNaNsFPMath      : 1; /// Assume FP arguments, results not NaN.<br>
<br>
Modified: cfe/trunk/lib/CodeGen/BackendUtil.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=133489&r1=133488&r2=133489&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=133489&r1=133488&r2=133489&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/CodeGen/BackendUtil.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/BackendUtil.cpp Mon Jun 20 19:14:18 2011<br>
@@ -275,6 +275,8 @@<br>
     TM->setMCSaveTempLabels(true);<br>
   if (CodeGenOpts.NoDwarf2CFIAsm)<br>
     TM->setMCUseCFI(false);<br>
+  if (CodeGenOpts.NoExecStack)<br>
+    TM->setMCNoExecStack(true);<br>
<br>
   // Create the code generator passes.<br>
   PassManager *PM = getCodeGenPasses();<br>
<br>
Modified: cfe/trunk/lib/Driver/Tools.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=133489&r1=133488&r2=133489&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=133489&r1=133488&r2=133489&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Driver/Tools.cpp (original)<br>
+++ cfe/trunk/lib/Driver/Tools.cpp Mon Jun 20 19:14:18 2011<br>
@@ -1051,6 +1051,8 @@<br>
         } else if (Value == "--fatal-warnings") {<br>
           CmdArgs.push_back("-mllvm");<br>
           CmdArgs.push_back("-fatal-assembler-warnings");<br>
+        } else if (Value == "--noexecstack") {<br>
+          CmdArgs.push_back("-mnoexecstack");<br>
         } else {<br>
           D.Diag(clang::diag::err_drv_unsupported_option_argument)<br>
             << A->getOption().getName() << Value;<br>
<br>
Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=133489&r1=133488&r2=133489&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=133489&r1=133488&r2=133489&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Mon Jun 20 19:14:18 2011<br>
@@ -201,6 +201,8 @@<br>
     Res.push_back("-mregparm");<br>
     Res.push_back(llvm::utostr(Opts.NumRegisterParameters));<br>
   }<br>
+  if (Opts.NoExecStack)<br>
+    Res.push_back("-mnoexecstack");<br>
   if (Opts.RelaxAll)<br>
     Res.push_back("-mrelax-all");<br>
   if (Opts.SaveTempLabels)<br>
@@ -982,6 +984,7 @@<br>
   Opts.NoZeroInitializedInBSS = Args.hasArg(OPT_mno_zero_initialized_in_bss);<br>
   Opts.BackendOptions = Args.getAllArgValues(OPT_backend_option);<br>
   Opts.NumRegisterParameters = Args.getLastArgIntValue(OPT_mregparm, 0, Diags);<br>
+  Opts.NoExecStack = Args.hasArg(OPT_mno_exec_stack);<br>
   Opts.RelaxAll = Args.hasArg(OPT_mrelax_all);<br>
   Opts.OmitLeafFramePointer = Args.hasArg(OPT_momit_leaf_frame_pointer);<br>
   Opts.SaveTempLabels = Args.hasArg(OPT_msave_temp_labels);<br>
<br>
Added: cfe/trunk/test/Driver/noexecstack.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/noexecstack.c?rev=133489&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/noexecstack.c?rev=133489&view=auto</a><br>

==============================================================================<br>
--- cfe/trunk/test/Driver/noexecstack.c (added)<br>
+++ cfe/trunk/test/Driver/noexecstack.c Mon Jun 20 19:14:18 2011<br>
@@ -0,0 +1 @@<br>
+// RUN: clang -### %s -c -o tmp.o -Wa,--noexecstack | grep "-mnoexecstack"<br></blockquote><div><br></div><div>Are there no other exec stack tests that can be combined here? Essentially wondering if we can use '-x ...' instead of autodetection and a bunch of separate test cases.</div>
</div>