]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Fix extraneous warning about executable stack.
authorCary Coutant <ccoutant@google.com>
Mon, 1 Dec 2014 21:21:49 +0000 (13:21 -0800)
committerCary Coutant <ccoutant@google.com>
Mon, 1 Dec 2014 21:21:49 +0000 (13:21 -0800)
PR gold/17578 notes that gold will print a warning about an executable stack
when the -z execstack option is given, even when there is no --warn_execstack
option. The warning is completely useless and unexpected, since the user
explicitly requested an executable stack, and did not even ask for warnings.

This patch fixes that, and adds an extra warning when --warn_execstack
and -z noexecstack are both given and an input file requires an executable
stack.

gold/
PR gold/17578
* layout.cc (Layout::layout_gnu_stack): Don't warn when -z execstack
is given.
(Layout::create_executable_stack_info): Warn when -z noexecstack is
given but some inputs require executable stack.

gold/ChangeLog
gold/layout.cc

index 2da4d01143e87c8340b756ee8be2835315fbb002..2daf182d951f122547672315c2a3a9c4ab443340 100644 (file)
@@ -1,3 +1,11 @@
+2014-12-01  Cary Coutant  <ccoutant@google.com>
+
+       PR gold/17578
+       * layout.cc (Layout::layout_gnu_stack): Don't warn when -z execstack
+       is given.
+       (Layout::create_executable_stack_info): Warn when -z noexecstack is
+       given but some inputs require executable stack.
+
 2014-11-26  Cary Coutant  <ccoutant@google.com>
 
        * layout.cc (gdb_sections): Keep .debug_gdb_scripts and
index 4e60f8ec2b58e0ffcefc55ff8135eba68edd04c4..a0d7c591cb0f1e82301abcacf02fe07955898db7 100644 (file)
@@ -2101,8 +2101,7 @@ Layout::layout_gnu_stack(bool seen_gnu_stack, uint64_t gnu_stack_flags,
       if ((gnu_stack_flags & elfcpp::SHF_EXECINSTR) != 0)
        {
          this->input_requires_executable_stack_ = true;
-         if (parameters->options().warn_execstack()
-             || parameters->options().is_stack_executable())
+         if (parameters->options().warn_execstack())
            gold_warning(_("%s: requires executable stack"),
                         obj->name().c_str());
        }
@@ -2975,7 +2974,14 @@ Layout::create_executable_stack_info()
 {
   bool is_stack_executable;
   if (parameters->options().is_execstack_set())
-    is_stack_executable = parameters->options().is_stack_executable();
+    {
+      is_stack_executable = parameters->options().is_stack_executable();
+      if (!is_stack_executable
+          && this->input_requires_executable_stack_
+          && parameters->options().warn_execstack())
+       gold_warning(_("one or more inputs require executable stack, "
+                      "but -z noexecstack was given"));
+    }
   else if (!this->input_with_gnu_stack_note_)
     return;
   else