Skip to content

Commit ca6b90d

Browse files
committed
Add support for -Wa,--noexecstack when building from a non-assembly file. For
an assembly file it worked correctly, while for a .c file it would given an error about how --noexecstack is not a supported argument to -Wa. llvm-svn: 133489
1 parent e5cc4b6 commit ca6b90d

File tree

6 files changed

+11
-0
lines changed

6 files changed

+11
-0
lines changed

clang/include/clang/Driver/CC1Options.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@ def mfloat_abi : Separate<"-mfloat-abi">,
157157
HelpText<"The float ABI to use">;
158158
def mlimit_float_precision : Separate<"-mlimit-float-precision">,
159159
HelpText<"Limit float precision to the given value">;
160+
def mno_exec_stack : Flag<"-mnoexecstack">,
161+
HelpText<"Mark the file as not needing an executable stack">;
160162
def mno_zero_initialized_in_bss : Flag<"-mno-zero-initialized-in-bss">,
161163
HelpText<"Do not put zero initialized data in the BSS">;
162164
def momit_leaf_frame_pointer : Flag<"-momit-leaf-frame-pointer">,

clang/include/clang/Frontend/CodeGenOptions.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ class CodeGenOptions {
7070
unsigned MergeAllConstants : 1; /// Merge identical constants.
7171
unsigned NoCommon : 1; /// Set when -fno-common or C++ is enabled.
7272
unsigned NoDwarf2CFIAsm : 1; /// Set when -fno-dwarf2-cfi-asm is enabled.
73+
unsigned NoExecStack : 1; /// Set when -Wa,--noexecstack is enabled.
7374
unsigned NoImplicitFloat : 1; /// Set when -mno-implicit-float is enabled.
7475
unsigned NoInfsFPMath : 1; /// Assume FP arguments, results not +-Inf.
7576
unsigned NoNaNsFPMath : 1; /// Assume FP arguments, results not NaN.

clang/lib/CodeGen/BackendUtil.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,8 @@ bool EmitAssemblyHelper::AddEmitPasses(BackendAction Action,
275275
TM->setMCSaveTempLabels(true);
276276
if (CodeGenOpts.NoDwarf2CFIAsm)
277277
TM->setMCUseCFI(false);
278+
if (CodeGenOpts.NoExecStack)
279+
TM->setMCNoExecStack(true);
278280

279281
// Create the code generator passes.
280282
PassManager *PM = getCodeGenPasses();

clang/lib/Driver/Tools.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,6 +1051,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
10511051
} else if (Value == "--fatal-warnings") {
10521052
CmdArgs.push_back("-mllvm");
10531053
CmdArgs.push_back("-fatal-assembler-warnings");
1054+
} else if (Value == "--noexecstack") {
1055+
CmdArgs.push_back("-mnoexecstack");
10541056
} else {
10551057
D.Diag(clang::diag::err_drv_unsupported_option_argument)
10561058
<< A->getOption().getName() << Value;

clang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,8 @@ static void CodeGenOptsToArgs(const CodeGenOptions &Opts,
201201
Res.push_back("-mregparm");
202202
Res.push_back(llvm::utostr(Opts.NumRegisterParameters));
203203
}
204+
if (Opts.NoExecStack)
205+
Res.push_back("-mnoexecstack");
204206
if (Opts.RelaxAll)
205207
Res.push_back("-mrelax-all");
206208
if (Opts.SaveTempLabels)
@@ -982,6 +984,7 @@ static void ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
982984
Opts.NoZeroInitializedInBSS = Args.hasArg(OPT_mno_zero_initialized_in_bss);
983985
Opts.BackendOptions = Args.getAllArgValues(OPT_backend_option);
984986
Opts.NumRegisterParameters = Args.getLastArgIntValue(OPT_mregparm, 0, Diags);
987+
Opts.NoExecStack = Args.hasArg(OPT_mno_exec_stack);
985988
Opts.RelaxAll = Args.hasArg(OPT_mrelax_all);
986989
Opts.OmitLeafFramePointer = Args.hasArg(OPT_momit_leaf_frame_pointer);
987990
Opts.SaveTempLabels = Args.hasArg(OPT_msave_temp_labels);

clang/test/Driver/noexecstack.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// RUN: clang -### %s -c -o tmp.o -Wa,--noexecstack | grep "-mnoexecstack"

0 commit comments

Comments
 (0)