]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Add ability to change linker warning messages into errors when reporting executable...
authorNick Clifton <nickc@redhat.com>
Fri, 10 Nov 2023 11:37:27 +0000 (11:37 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 10 Nov 2023 11:37:27 +0000 (11:37 +0000)
  include
  * bfdlink.h (struct bfd_link_info): Update descriptions of the 'execstack', 'noexecstack' and 'warn_execstack' fields. Add 'error_exectack' and 'warn_is_error_for_rwx_segments' fields.

  bfd
  * elf.c (assign_file_positions_except_relocs): Turn warnings about executable segments into errors if so requested.
  * elflink.c (bfd_elf_size_dynamic_sections): Turn warnings about executable stacks into errors if so requested.

  ld
  * ldlex.h (enum option_values): Add OPTION_ERROR_EXECSTACK, OPTION_NO_ERROR_EXECSTACK, OPTION_WARN_EXECSTACK_OBJECTS, OPTION_ERROR_RWX_SEGMENTS and OPTION_NO_ERROR_RWX_SEGMENTS. (struct ld_option): Add new long options. (parse_args): Parse new long options. (elf_static_list_options): Display the new options.
  * ld.texi: Document the new command line options.
  * configure.ac (error-execstack): New configuration option. (error-rwx-segments): New configuration option.
  * emultempl/elf.em (_before_parse): Initialse the new linkinfo fields.
  * NEWS: Mention the new features.
  * config.in: Regenerate.
  * configure: Regenerate.
  * testsuite/ld-elf/commonpage2.d: Disable errors for RWX segments and/or executable stacks.
  * testsuite/ld-elf/elf.exp: Likewise.
  * testsuite/ld-elf/header.d: Likewise.
  * testsuite/ld-elf/loadaddr1.d: Likewise.
  * testsuite/ld-elf/loadaddr2.d: Likewise.
  * testsuite/ld-elf/maxpage4.d: Likewise.
  * testsuite/ld-elf/nobits-1.d: Likewise.
  * testsuite/ld-elf/note-1.d: Likewise.
  * testsuite/ld-elf/orphan-10.d: Likewise.
  * testsuite/ld-elf/orphan-11.d: Likewise.
  * testsuite/ld-elf/orphan-12.d: Likewise.
  * testsuite/ld-elf/orphan-5.d: Likewise.
  * testsuite/ld-elf/orphan-7.d: Likewise.
  * testsuite/ld-elf/orphan-8.d: Likewise.
  * testsuite/ld-elf/orphan-9.d: Likewise.
  * testsuite/ld-elf/orphan-region.d: Likewise.
  * testsuite/ld-elf/orphan.d: Likewise.
  * testsuite/ld-elf/pr19539.d: Likewise.
  * testsuite/ld-elf/pr26256-1a.d: Likewise.
  * testsuite/ld-elf/pr26907.d: Likewise.
  * testsuite/ld-elf/pr28597.d: Likewise.
  * testsuite/ld-elf/retain2.d: Likewise.
  * testsuite/ld-elf/shared.exp: Likewise.
  * testsuite/ld-elf/size-1.d: Likewise.
  * testsuite/ld-elf/textaddr7.d: Likewise.
  * testsuite/ld-elf/warn1.d: Likewise.
  * testsuite/ld-elf/warn2.d: Likewise.
  * testsuite/ld-i386/discarded1.d: Likewise.
  * testsuite/ld-i386/pr19175.d: Likewise.
  * testsuite/ld-i386/pr19539.d: Likewise.
  * testsuite/ld-i386/pr23189.d: Likewise.
  * testsuite/ld-plugin/lto-3r.d: Likewise.
  * testsuite/ld-plugin/lto-5r.d: Likewise.
  * testsuite/ld-plugin/lto.exp: Likewise.
  * testsuite/ld-powerpc/ppc476-shared.d: Likewise.
  * testsuite/ld-powerpc/ppc476-shared2.d: Likewise.
  * testsuite/ld-powerpc/pr28827-2.d: Likewise.
  * testsuite/ld-s390/s390.exp: Likewise.
  * testsuite/ld-scripts/align2a.d: Likewise.
  * testsuite/ld-scripts/align2b.d: Likewise.
  * testsuite/ld-scripts/align5.d: Likewise.
  * testsuite/ld-scripts/alignof.exp: Likewise.
  * testsuite/ld-scripts/crossref.exp: Likewise.
  * testsuite/ld-scripts/defined2.d: Likewise.
  * testsuite/ld-scripts/defined3.d: Likewise.
  * testsuite/ld-scripts/defined5.d: Likewise.
  * testsuite/ld-scripts/pr14962.d: Likewise.
  * testsuite/ld-scripts/pr18963.d: Likewise.
  * testsuite/ld-scripts/pr20302.d: Likewise.
  * testsuite/ld-scripts/print-memory-usage.exp: Likewise.
  * testsuite/ld-scripts/rgn-at1.d: Likewise.
  * testsuite/ld-scripts/rgn-at10.d: Likewise.
  * testsuite/ld-scripts/rgn-at4.d: Likewise.
  * testsuite/ld-scripts/rgn-at6.d: Likewise.
  * testsuite/ld-scripts/rgn-at8.d: Likewise.
  * testsuite/ld-scripts/rgn-at9.d: Likewise.
  * testsuite/ld-scripts/rgn-over1.d: Likewise.
  * testsuite/ld-scripts/rgn-over2.d: Likewise.
  * testsuite/ld-scripts/rgn-over4.d: Likewise.
  * testsuite/ld-scripts/rgn-over5.d: Likewise.
  * testsuite/ld-scripts/rgn-over6.d: Likewise.
  * testsuite/ld-scripts/script.exp: Likewise.
  * testsuite/ld-scripts/sizeof.exp: Likewise.
  * testsuite/ld-scripts/sort-file.d: Likewise.
  * testsuite/ld-x86-64/discarded1.d: Likewise.
  * testsuite/ld-x86-64/pr19175.d: Likewise.
  * testsuite/ld-x86-64/pr19539a.d: Likewise.
  * testsuite/ld-x86-64/pr19539b.d: Likewise.
  * testsuite/ld-x86-64/pr23189.d: Likewise.

83 files changed:
bfd/ChangeLog
bfd/elf.c
bfd/elflink.c
include/ChangeLog
include/bfdlink.h
ld/ChangeLog
ld/NEWS
ld/config.in
ld/configure
ld/configure.ac
ld/emultempl/elf.em
ld/ld.texi
ld/ldlex.h
ld/lexsup.c
ld/testsuite/ld-elf/commonpage2.d
ld/testsuite/ld-elf/elf.exp
ld/testsuite/ld-elf/header.d
ld/testsuite/ld-elf/loadaddr1.d
ld/testsuite/ld-elf/loadaddr2.d
ld/testsuite/ld-elf/maxpage4.d
ld/testsuite/ld-elf/nobits-1.d
ld/testsuite/ld-elf/note-1.d
ld/testsuite/ld-elf/orphan-10.d
ld/testsuite/ld-elf/orphan-11.d
ld/testsuite/ld-elf/orphan-12.d
ld/testsuite/ld-elf/orphan-5.d
ld/testsuite/ld-elf/orphan-7.d
ld/testsuite/ld-elf/orphan-8.d
ld/testsuite/ld-elf/orphan-9.d
ld/testsuite/ld-elf/orphan-region.d
ld/testsuite/ld-elf/orphan.d
ld/testsuite/ld-elf/pr19539.d
ld/testsuite/ld-elf/pr26256-1a.d
ld/testsuite/ld-elf/pr26907.d
ld/testsuite/ld-elf/pr28597.d
ld/testsuite/ld-elf/retain2.d
ld/testsuite/ld-elf/shared.exp
ld/testsuite/ld-elf/size-1.d
ld/testsuite/ld-elf/textaddr7.d
ld/testsuite/ld-elf/warn1.d
ld/testsuite/ld-elf/warn2.d
ld/testsuite/ld-i386/discarded1.d
ld/testsuite/ld-i386/pr19175.d
ld/testsuite/ld-i386/pr19539.d
ld/testsuite/ld-i386/pr23189.d
ld/testsuite/ld-plugin/lto-3r.d
ld/testsuite/ld-plugin/lto-5r.d
ld/testsuite/ld-plugin/lto.exp
ld/testsuite/ld-powerpc/ppc476-shared.d
ld/testsuite/ld-powerpc/ppc476-shared2.d
ld/testsuite/ld-powerpc/pr28827-2.d
ld/testsuite/ld-s390/s390.exp
ld/testsuite/ld-scripts/align2a.d
ld/testsuite/ld-scripts/align2b.d
ld/testsuite/ld-scripts/align5.d
ld/testsuite/ld-scripts/alignof.exp
ld/testsuite/ld-scripts/crossref.exp
ld/testsuite/ld-scripts/defined2.d
ld/testsuite/ld-scripts/defined3.d
ld/testsuite/ld-scripts/defined5.d
ld/testsuite/ld-scripts/pr14962.d
ld/testsuite/ld-scripts/pr18963.d
ld/testsuite/ld-scripts/pr20302.d
ld/testsuite/ld-scripts/print-memory-usage.exp
ld/testsuite/ld-scripts/rgn-at1.d
ld/testsuite/ld-scripts/rgn-at10.d
ld/testsuite/ld-scripts/rgn-at4.d
ld/testsuite/ld-scripts/rgn-at6.d
ld/testsuite/ld-scripts/rgn-at8.d
ld/testsuite/ld-scripts/rgn-at9.d
ld/testsuite/ld-scripts/rgn-over1.d
ld/testsuite/ld-scripts/rgn-over2.d
ld/testsuite/ld-scripts/rgn-over4.d
ld/testsuite/ld-scripts/rgn-over5.d
ld/testsuite/ld-scripts/rgn-over6.d
ld/testsuite/ld-scripts/script.exp
ld/testsuite/ld-scripts/sizeof.exp
ld/testsuite/ld-scripts/sort-file.d
ld/testsuite/ld-x86-64/discarded1.d
ld/testsuite/ld-x86-64/pr19175.d
ld/testsuite/ld-x86-64/pr19539a.d
ld/testsuite/ld-x86-64/pr19539b.d
ld/testsuite/ld-x86-64/pr23189.d

index 2b12eb35d27ef375fe0aae45ceda474ffda23a01..f8086fb843b64c390a79cb95a1a00f8c1e14b04b 100644 (file)
@@ -1,3 +1,10 @@
+2023-11-10  Nick Clifton  <nickc@redhat.com>
+
+       * elf.c (assign_file_positions_except_relocs): Turn warnings about
+       executable segments into errors if so requested.
+       * elflink.c (bfd_elf_size_dynamic_sections): Turn warnings about
+       executable stacks into errors if so requested.
+
 2023-10-30  Nick Clifton  <nickc@redhat.com>
 
        * bpf-reloc.def (R_BPF_64_NODLD32): Add entry.
index bd2a5e43551a3da7a341d04ce555efccee21a36a..08b6df5503e3a435fd4d00503962df4376ad4fae 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -7010,6 +7010,9 @@ assign_file_positions_except_relocs (bfd *abfd,
     {
       if (link_info != NULL && ! link_info->no_warn_rwx_segments)
        {
+         bool warned_tls = false;
+         bool warned_rwx = false;
+
          /* Memory resident segments with non-zero size and RWX
             permissions are a security risk, so we generate a warning
             here if we are creating any.  */
@@ -7022,16 +7025,47 @@ assign_file_positions_except_relocs (bfd *abfd,
              if (phdr->p_memsz == 0)
                continue;
 
-             if (phdr->p_type == PT_TLS && (phdr->p_flags & PF_X))
-               _bfd_error_handler (_("warning: %pB has a TLS segment"
-                                     " with execute permission"),
-                                   abfd);
-             else if (phdr->p_type == PT_LOAD
+             if (! warned_tls
+                 && phdr->p_type == PT_TLS
+                 && (phdr->p_flags & PF_X))
+               {
+                 if (link_info->warn_is_error_for_rwx_segments)
+                   {
+                     _bfd_error_handler (_("\
+error: %pB has a TLS segment with execute permission"),
+                                         abfd);
+                     return false;
+                   }
+
+                 _bfd_error_handler (_("\
+warning: %pB has a TLS segment with execute permission"),
+                                     abfd);
+                 if (warned_rwx)
+                   break;
+
+                 warned_tls = true;
+               }
+             else if (! warned_rwx
+                      && phdr->p_type == PT_LOAD
                       && ((phdr->p_flags & (PF_R | PF_W | PF_X))
                           == (PF_R | PF_W | PF_X)))
-               _bfd_error_handler (_("warning: %pB has a LOAD segment"
-                                     " with RWX permissions"),
-                                   abfd);
+               {
+                 if (link_info->warn_is_error_for_rwx_segments)
+                   {
+                     _bfd_error_handler (_("\
+error: %pB has a LOAD segment with RWX permissions"),
+                                         abfd);
+                     return false;
+                   }
+
+                 _bfd_error_handler (_("\
+warning: %pB has a LOAD segment with RWX permissions"),
+                                     abfd);
+                 if (warned_tls)
+                   break;
+
+                 warned_rwx = true;
+               }
            }
        }
 
index 99f4cdd5527139f3af9f75e5e932b05fd0986046..49ea222ec77e3fe4305a5ff08344987050f5d9ab 100644 (file)
@@ -7152,9 +7152,20 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
       /* If the user has explicitly requested warnings, then generate one even
         though the choice is the result of another command line option.  */
       if (info->warn_execstack == 1)
-       _bfd_error_handler
-         (_("\
+       {
+         if (info->error_execstack)
+           {
+             _bfd_error_handler
+               (_("\
+error: creating an executable stack because of -z execstack command line option"));
+             return false;
+           }
+
+         _bfd_error_handler
+           (_("\
 warning: enabling an executable stack because of -z execstack command line option"));
+       }
+
       elf_stack_flags (output_bfd) = PF_R | PF_W | PF_X;
     }
   else if (info->noexecstack)
@@ -7210,11 +7221,29 @@ warning: enabling an executable stack because of -z execstack command line optio
                     being enabled despite the fact that it was not requested
                     on the command line.  */
                  if (noteobj)
-                   _bfd_error_handler (_("\
+                   {
+                     if (info->error_execstack)
+                       {
+                         _bfd_error_handler (_("\
+error: %s: is triggering the generation of an executable stack (because it has an executable .note.GNU-stack section)"),
+                                             bfd_get_filename (noteobj));
+                         return false;
+                       }
+
+                     _bfd_error_handler (_("\
 warning: %s: requires executable stack (because the .note.GNU-stack section is executable)"),
                       bfd_get_filename (noteobj));
+                   }
                  else if (emptyobj)
                    {
+                     if (info->error_execstack)
+                       {
+                         _bfd_error_handler (_("\
+error: %s: is triggering the generation of an executable stack because it does not have a .note.GNU-stack section"),
+                                             bfd_get_filename (emptyobj));
+                         return false;
+                       }
+
                      _bfd_error_handler (_("\
 warning: %s: missing .note.GNU-stack section implies executable stack"),
                                          bfd_get_filename (emptyobj));
index e0f0cb3edf400c554f344423708952d516642fac..7ea77f81693355ea115adea61821a660e7ef2dbc 100644 (file)
@@ -1,3 +1,9 @@
+2023-11-10  Nick Clifton  <nickc@redhat.com>
+
+       * bfdlink.h (struct bfd_link_info): Update descriptions of the
+       'execstack', 'noexecstack' and 'warn_execstack' fields.
+       Add 'error_exectack' and 'warn_is_error_for_rwx_segments' fields.
+
 2023-10-30  Nick Clifton  <nickc@redhat.com>
 
        * elf/bpf.h (R_BPF_64_NODYLD32): Add a note that this reloc is
index 840790a298c3f8894494c5266b2de0560ceecfd2..8882257c63292358fb24d096130c458c949376b4 100644 (file)
@@ -484,26 +484,49 @@ struct bfd_link_info
      --dynamic-list command line options.  */
   unsigned int dynamic: 1;
 
-  /* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W|PF_X
-     flags.  */
+  /* Set if the "-z execstack" option has been used to request that a
+     PT_GNU_STACK segment should be created with PF_R, PF_W and PF_X
+     flags set.
+
+     Note - if performing a relocatable link then a .note.GNU-stack
+     section will be created instead, if one does not exist already.
+     The section will have the SHF_EXECINSTR flag bit set.  */
   unsigned int execstack: 1;
 
-  /* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W
-     flags.  */
+  /* Set if the "-z noexecstack" option has been used to request that a
+     PT_GNU_STACK segment should be created with PF_R and PF_W flags.  Or
+     a non-executable .note.GNU-stack section for relocateable links.
+
+     Note - this flag is not quite orthogonal to execstack, since both
+     of these flags can be 0.  In this case a stack segment can still
+     be created, but it will only have the PF_X flag bit set if one or
+     more of the input files contains a .note.GNU-stack section with the
+     SHF_EXECINSTR flag bit set, or if the default behaviour for the
+     architecture is to create executable stacks.
+
+     The execstack and noexecstack flags should never both be 1.  */
   unsigned int noexecstack: 1;
 
   /* Tri-state variable:
      0 => do not warn when creating an executable stack.
-     1 => always warn when creating an executable stack.
-     >1 => warn when creating an executable stack if execstack is 0.  */
+     1 => always warn when creating an executable stack (for any reason).
+     2 => only warn when an executable stack has been requested an object
+          file and execstack is 0 or noexecstack is 1.
+     3 => not used.  */
   unsigned int warn_execstack: 2;
+  /* TRUE if a warning generated because of warn_execstack should be instead
+     be treated as an error.  */
+  unsigned int error_execstack: 1;
 
-  /* TRUE if warnings should not be generated for TLS segments with eXecute
+  /* TRUE if warnings should NOT be generated for TLS segments with eXecute
      permission or LOAD segments with RWX permissions.  */
   unsigned int no_warn_rwx_segments: 1;
   /* TRUE if the user gave either --warn-rwx-segments or
-     --no-warn-rwx-segments.  */
+     --no-warn-rwx-segments on the linker command line.  */
   unsigned int user_warn_rwx_segments: 1;
+  /* TRUE if warnings generated when no_warn_rwx_segements is 0 should
+     instead be treated as errors.  */
+  unsigned int warn_is_error_for_rwx_segments: 1;
 
   /* TRUE if the stack can be made executable because of the absence of a
      .note.GNU-stack section in an input file.  Note - even if this field
index 53bb9c3cee4dc2c99dd525641b1f1d464ce5d942..fc2478ec197b261ff14fcdbeb42e8188f68c62e5 100644 (file)
@@ -1,3 +1,90 @@
+2023-11-10  Nick Clifton  <nickc@redhat.com>
+
+       * ldlex.h (enum option_values): Add OPTION_ERROR_EXECSTACK,
+       OPTION_NO_ERROR_EXECSTACK, OPTION_WARN_EXECSTACK_OBJECTS,
+       OPTION_ERROR_RWX_SEGMENTS and OPTION_NO_ERROR_RWX_SEGMENTS.
+       (struct ld_option): Add new long options.
+       (parse_args): Parse new long options.
+       (elf_static_list_options): Display the new options.
+       * ld.texi: Document the new command line options.
+       * configure.ac (error-execstack): New configuration option.
+       (error-rwx-segments): New configuration option.
+       * emultempl/elf.em (_before_parse): Initialse the new linkinfo
+       fields.
+       * NEWS: Mention the new features.
+       * config.in: Regenerate.
+       * configure: Regenerate.
+       * testsuite/ld-elf/commonpage2.d: Disable errors for RWX segments
+       and/or executable stacks.
+       * testsuite/ld-elf/elf.exp: Likewise.
+       * testsuite/ld-elf/header.d: Likewise.
+       * testsuite/ld-elf/loadaddr1.d: Likewise.
+       * testsuite/ld-elf/loadaddr2.d: Likewise.
+       * testsuite/ld-elf/maxpage4.d: Likewise.
+       * testsuite/ld-elf/nobits-1.d: Likewise.
+       * testsuite/ld-elf/note-1.d: Likewise.
+       * testsuite/ld-elf/orphan-10.d: Likewise.
+       * testsuite/ld-elf/orphan-11.d: Likewise.
+       * testsuite/ld-elf/orphan-12.d: Likewise.
+       * testsuite/ld-elf/orphan-5.d: Likewise.
+       * testsuite/ld-elf/orphan-7.d: Likewise.
+       * testsuite/ld-elf/orphan-8.d: Likewise.
+       * testsuite/ld-elf/orphan-9.d: Likewise.
+       * testsuite/ld-elf/orphan-region.d: Likewise.
+       * testsuite/ld-elf/orphan.d: Likewise.
+       * testsuite/ld-elf/pr19539.d: Likewise.
+       * testsuite/ld-elf/pr26256-1a.d: Likewise.
+       * testsuite/ld-elf/pr26907.d: Likewise.
+       * testsuite/ld-elf/pr28597.d: Likewise.
+       * testsuite/ld-elf/retain2.d: Likewise.
+       * testsuite/ld-elf/shared.exp: Likewise.
+       * testsuite/ld-elf/size-1.d: Likewise.
+       * testsuite/ld-elf/textaddr7.d: Likewise.
+       * testsuite/ld-elf/warn1.d: Likewise.
+       * testsuite/ld-elf/warn2.d: Likewise.
+       * testsuite/ld-i386/discarded1.d: Likewise.
+       * testsuite/ld-i386/pr19175.d: Likewise.
+       * testsuite/ld-i386/pr19539.d: Likewise.
+       * testsuite/ld-i386/pr23189.d: Likewise.
+       * testsuite/ld-plugin/lto-3r.d: Likewise.
+       * testsuite/ld-plugin/lto-5r.d: Likewise.
+       * testsuite/ld-plugin/lto.exp: Likewise.
+       * testsuite/ld-powerpc/ppc476-shared.d: Likewise.
+       * testsuite/ld-powerpc/ppc476-shared2.d: Likewise.
+       * testsuite/ld-powerpc/pr28827-2.d: Likewise.
+       * testsuite/ld-s390/s390.exp: Likewise.
+       * testsuite/ld-scripts/align2a.d: Likewise.
+       * testsuite/ld-scripts/align2b.d: Likewise.
+       * testsuite/ld-scripts/align5.d: Likewise.
+       * testsuite/ld-scripts/alignof.exp: Likewise.
+       * testsuite/ld-scripts/crossref.exp: Likewise.
+       * testsuite/ld-scripts/defined2.d: Likewise.
+       * testsuite/ld-scripts/defined3.d: Likewise.
+       * testsuite/ld-scripts/defined5.d: Likewise.
+       * testsuite/ld-scripts/pr14962.d: Likewise.
+       * testsuite/ld-scripts/pr18963.d: Likewise.
+       * testsuite/ld-scripts/pr20302.d: Likewise.
+       * testsuite/ld-scripts/print-memory-usage.exp: Likewise.
+       * testsuite/ld-scripts/rgn-at1.d: Likewise.
+       * testsuite/ld-scripts/rgn-at10.d: Likewise.
+       * testsuite/ld-scripts/rgn-at4.d: Likewise.
+       * testsuite/ld-scripts/rgn-at6.d: Likewise.
+       * testsuite/ld-scripts/rgn-at8.d: Likewise.
+       * testsuite/ld-scripts/rgn-at9.d: Likewise.
+       * testsuite/ld-scripts/rgn-over1.d: Likewise.
+       * testsuite/ld-scripts/rgn-over2.d: Likewise.
+       * testsuite/ld-scripts/rgn-over4.d: Likewise.
+       * testsuite/ld-scripts/rgn-over5.d: Likewise.
+       * testsuite/ld-scripts/rgn-over6.d: Likewise.
+       * testsuite/ld-scripts/script.exp: Likewise.
+       * testsuite/ld-scripts/sizeof.exp: Likewise.
+       * testsuite/ld-scripts/sort-file.d: Likewise.
+       * testsuite/ld-x86-64/discarded1.d: Likewise.
+       * testsuite/ld-x86-64/pr19175.d: Likewise.
+       * testsuite/ld-x86-64/pr19539a.d: Likewise.
+       * testsuite/ld-x86-64/pr19539b.d: Likewise.
+       * testsuite/ld-x86-64/pr23189.d: Likewise.
+
 2023-11-06  Jan Beulich  <jbeulich@suse.com>
 
        PR 30722
diff --git a/ld/NEWS b/ld/NEWS
index 73eb253b798125ceb349f85ba75ca5f1103da7ef..835dc39e24bbd40bf69ae02412cc56721b8fd664 100644 (file)
--- a/ld/NEWS
+++ b/ld/NEWS
@@ -6,6 +6,15 @@
   the order of the sorting.  It may be combined with either SORT_BY_NAME or
   SORT_BY_INIT_PRIORITY.
 
+* Added --warn-execstack-objects to warn about executable stacks only when an
+  input object file requests one.  Also added --error-execstack and
+  --error-rxw-segments options to convert warnings about executable stacks and
+  segments into errors.
+
+  Also added --enable-error-execstack=[yes|no] and
+  --enable-error-rwx-segments=[yes|no] configure options to set the default for
+  converting warnings into errors.
+
 Changes in 2.41:
 
 * The linker now accepts a command line option of --remap-inputs
index a453c7f7241f50d7a58056e7a8e476ab0987fed2..e3a983fe3b04eb6419ee9397a7410480544989d3 100644 (file)
 /* Define if you want compressed debug sections by default. */
 #undef DEFAULT_FLAG_COMPRESS_DEBUG
 
+/* Define to 1 if you want to turn executable stack warnings into errors by
+   default. */
+#undef DEFAULT_LD_ERROR_EXECSTACK
+
+/* Define to 1 if you want to turn executable segment warnings into errors by
+   default. */
+#undef DEFAULT_LD_ERROR_RWX_SEGMENTS
+
 /* Define to 0 if you want to disable the generation of an executable stack
    when a .note-GNU-stack section is missing. */
 #undef DEFAULT_LD_EXECSTACK
index d2cdf256b89e9a751837075b2587248b76cc1928..468c3bd525d11cbc6b75ca32d999f4b08341bcbe 100755 (executable)
@@ -847,7 +847,9 @@ enable_relro
 enable_textrel_check
 enable_separate_code
 enable_warn_execstack
+enable_error_execstack
 enable_warn_rwx_segments
+enable_error_rwx_segments
 enable_default_execstack
 enable_error_handling_script
 enable_default_hash_style
@@ -15669,6 +15671,16 @@ esac
 fi
 
 
+ac_default_ld_error_execstack=0
+# Check whether --enable-error-execstack was given.
+if test "${enable_error_execstack+set}" = set; then :
+  enableval=$enable_error_execstack; case "${enableval}" in
+  yes) ac_default_ld_error_execstack=1 ;;
+  no)  ac_default_ld_error_execstack=0 ;;
+esac
+fi
+
+
 ac_default_ld_warn_rwx_segments=unset
 # Check whether --enable-warn-rwx-segments was given.
 if test "${enable_warn_rwx_segments+set}" = set; then :
@@ -15679,6 +15691,16 @@ esac
 fi
 
 
+ac_default_ld_error_rwx_segments=0
+# Check whether --enable-error-rwx-segments was given.
+if test "${enable_error_rwx_segments+set}" = set; then :
+  enableval=$enable_error_rwx_segments; case "${enableval}" in
+  yes) ac_default_ld_error_rwx_segments=1 ;;
+  no)  ac_default_ld_error_rwx_segments=0 ;;
+esac
+fi
+
+
 ac_default_ld_default_execstack=unset
 # Check whether --enable-default-execstack was given.
 if test "${enable_default_execstack+set}" = set; then :
@@ -17444,6 +17466,12 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_LD_ERROR_EXECSTACK $ac_default_ld_error_execstack
+_ACEOF
+
+
 if test "${ac_default_ld_warn_rwx_segments}" = unset; then
   ac_default_ld_warn_rwx_segments=1
 fi
@@ -17453,6 +17481,12 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_LD_ERROR_RWX_SEGMENTS $ac_default_ld_error_rwx_segments
+_ACEOF
+
+
 if test "${ac_default_ld_default_execstack}" = unset; then
   ac_default_ld_default_execstack=1
 fi
index c3ebd3ec7e4f8bd7942b041185b488f2daf412bd..cdac7bb0d7477c45f18c536a2ddb6ff58ba4b620 100644 (file)
@@ -225,6 +225,15 @@ AC_ARG_ENABLE(warn-execstack,
   no)  ac_default_ld_warn_execstack=0 ;;
 esac])
 
+ac_default_ld_error_execstack=0
+AC_ARG_ENABLE(error-execstack,
+             AS_HELP_STRING([--enable-error-execstack],
+             [turn executable stack warnings into errors]),
+[case "${enableval}" in
+  yes) ac_default_ld_error_execstack=1 ;;
+  no)  ac_default_ld_error_execstack=0 ;;
+esac])
+
 ac_default_ld_warn_rwx_segments=unset
 AC_ARG_ENABLE(warn-rwx-segments,
              AS_HELP_STRING([--enable-warn-rwx-segments],
@@ -234,6 +243,15 @@ AC_ARG_ENABLE(warn-rwx-segments,
   no)  ac_default_ld_warn_rwx_segments=0 ;;
 esac])
 
+ac_default_ld_error_rwx_segments=0
+AC_ARG_ENABLE(error-rwx-segments,
+             AS_HELP_STRING([--enable-error-rwx-segments],
+             [turn executable segment warnings into errors]),
+[case "${enableval}" in
+  yes) ac_default_ld_error_rwx_segments=1 ;;
+  no)  ac_default_ld_error_rwx_segments=0 ;;
+esac])
+
 ac_default_ld_default_execstack=unset
 AC_ARG_ENABLE(default-execstack,
              AS_HELP_STRING([--enable-default-execstack],
@@ -549,6 +567,10 @@ AC_DEFINE_UNQUOTED(DEFAULT_LD_WARN_EXECSTACK,
   $ac_default_ld_warn_execstack,
   [Define to 1 if you want to enable --warn-execstack in ELF linker by default.])
 
+AC_DEFINE_UNQUOTED(DEFAULT_LD_ERROR_EXECSTACK,
+  $ac_default_ld_error_execstack,
+  [Define to 1 if you want to turn executable stack warnings into errors by default.])
+
 if test "${ac_default_ld_warn_rwx_segments}" = unset; then
   ac_default_ld_warn_rwx_segments=1
 fi
@@ -556,6 +578,10 @@ AC_DEFINE_UNQUOTED(DEFAULT_LD_WARN_RWX_SEGMENTS,
   $ac_default_ld_warn_rwx_segments,
   [Define to 0 if you want to disable --warn-rwx-segments in ELF linker by default.])
 
+AC_DEFINE_UNQUOTED(DEFAULT_LD_ERROR_RWX_SEGMENTS,
+  $ac_default_ld_error_rwx_segments,
+  [Define to 1 if you want to turn executable segment warnings into errors by default.])
+
 if test "${ac_default_ld_default_execstack}" = unset; then
   ac_default_ld_default_execstack=1
 fi
index 1c5030d5e1ccb64dc1fa0942f35f54e1b234be80..0fb6226787f96e0322a014aa0fd9e4fde460ef3e 100644 (file)
@@ -95,6 +95,8 @@ fragment <<EOF
   link_info.warn_execstack = DEFAULT_LD_WARN_EXECSTACK;
   link_info.no_warn_rwx_segments = ! DEFAULT_LD_WARN_RWX_SEGMENTS;
   link_info.default_execstack = DEFAULT_LD_EXECSTACK;
+  link_info.error_execstack = DEFAULT_LD_ERROR_EXECSTACK;
+  link_info.warn_is_error_for_rwx_segments = DEFAULT_LD_ERROR_RWX_SEGMENTS;
 }
 
 EOF
index 1c132561d71fb2ab44459b395d0bf824e4ff484d..32c09e24478ec5074a9c629c8666f36235c3f60e 100644 (file)
@@ -2784,28 +2784,51 @@ detect the use of global constructors.
 @cindex warnings, on executable stack
 @cindex executable stack, warnings on
 @item --warn-execstack
+@itemx --warn-execstack-objects
 @itemx --no-warn-execstack
-On ELF platforms this option controls how the linker generates warning
-messages when it creates an output file with an executable stack.  By
-default the linker will not warn if the @command{-z execstack} command
-line option has been used, but this behaviour can be overridden by the
-@option{--warn-execstack} option.
-
-On the other hand the linker will normally warn if the stack is made
-executable because one or more of the input files need an execuable
-stack and neither of the @command{-z execstack} or @command{-z
-noexecstack} command line options have been specified.  This warning
-can be disabled via the @command{--no-warn-execstack} option.
-
-Note: ELF format input files specify that they need an executable
+On ELF platforms the linker may generate warning messages if it is
+asked to create an output file that contains an executable stack.
+There are three possible states:
+@enumerate
+@item
+Do not generate any warnings.
+@item
+Always generate warnings, even if the executable stack is requested
+via the @option{-z execstack} command line option.
+@item
+Only generate a warning if an object file requests an executable
+stack, but not if the @option{-z execstack} option is used.
+@end enumerate
+
+The default state depends upon how the linker was configured when it
+was built.  The @option{--no-warn-execstack} option always puts the
+linker into the no-warnings state.  The @option{--warn-execstack}
+option puts the linker into the warn-always state.  The
+@option{--warn-execstack-objects} option puts the linker into the
+warn-for-object-files-only state.
+
+Note: ELF format input files can specify that they need an executable
 stack by having a @var{.note.GNU-stack} section with the executable
 bit set in its section flags.  They can specify that they do not need
-an executable stack by having that section, but without the executable
-flag bit set.  If an input file does not have a @var{.note.GNU-stack}
-section present then the default behaviour is target specific.  For
-some targets, then absence of such a section implies that an
-executable stack @emph{is} required.  This is often a problem for hand
-crafted assembler files.
+an executable stack by having the same section, but without the
+executable flag bit set.  If an input file does not have a
+@var{.note.GNU-stack} section then the default behaviour is target
+specific.  For some targets, then absence of such a section implies
+that an executable stack @emph{is} required.  This is often a problem
+for hand crafted assembler files.
+
+@kindex --error-execstack
+@item --error-execstack
+@itemx --no-error-execstack
+If the linker is going to generate a warning message about an
+executable stack then the @option{--error-execstack} option will
+instead change that warning into an error.  Note - this option does
+not change the linker's execstack warning generation state.  Use
+@option{--warn-execstack} or @option{--warn-execstack-objects} to set
+a specific warning state.
+
+The @option{--no-error-execstack} option will restore the default
+behaviour of generating warning messages.
 
 @kindex --warn-multiple-gp
 @item --warn-multiple-gp
@@ -2844,6 +2867,20 @@ These warnings are enabled by default.  They can be disabled via the
 @option{--no-warn-rwx-segments} option and re-enabled via the
 @option{--warn-rwx-segments} option.
 
+@kindex --error-rwx-segments
+@item --error-rwx-segments
+@itemx --no-error-rwx-segments
+If the linker is going to generate a warning message about an
+executable, writeable segment, or an executable TLS segment, then the
+@option{--error-rwx-segments} option will turn this warning into an
+error instead.  The @option{--no-error-rwx-segments} option will
+restore the default behaviour of just generating a warning message.
+
+Note - the @option{--error-rwx-segments} option does not by itself
+turn on warnings about these segments.  These warnings are either
+enabled by default, if the linker was configured that way, or via the
+@option{--warn-rwx-segments} command line option.
+
 @kindex --warn-section-align
 @cindex warnings, on section alignment
 @cindex section alignment, warnings on
index 87cac02141d8c8cf090001ec877dd4e458d19c1b..c000d1e2939c9ded5d79eba5bdcb2c69572e19ed 100644 (file)
@@ -168,10 +168,15 @@ enum option_values
   OPTION_CTF_VARIABLES,
   OPTION_NO_CTF_VARIABLES,
   OPTION_CTF_SHARE_TYPES,
+  OPTION_ERROR_EXECSTACK,
+  OPTION_NO_ERROR_EXECSTACK,
+  OPTION_WARN_EXECSTACK_OBJECTS,
   OPTION_WARN_EXECSTACK,
   OPTION_NO_WARN_EXECSTACK,
   OPTION_WARN_RWX_SEGMENTS,
   OPTION_NO_WARN_RWX_SEGMENTS,
+  OPTION_ERROR_RWX_SEGMENTS,
+  OPTION_NO_ERROR_RWX_SEGMENTS,
   OPTION_ENABLE_LINKER_VERSION,
   OPTION_DISABLE_LINKER_VERSION,
   OPTION_REMAP_INPUTS,
index 49dfc13382a0c1be0c944fd46a75914a88f59c45..aa4c76ec281f04c5487cdcd118a9462a9820405d 100644 (file)
@@ -551,14 +551,27 @@ static const struct ld_option ld_options[] =
   { {"warn-constructors", no_argument, NULL, OPTION_WARN_CONSTRUCTORS},
     '\0', NULL, N_("Warn if global constructors/destructors are seen"),
     TWO_DASHES },
+
+  { {"error-execstack", no_argument, NULL, OPTION_ERROR_EXECSTACK},
+    '\0', NULL, NULL, TWO_DASHES },
+  { {"no-error-execstack", no_argument, NULL, OPTION_NO_ERROR_EXECSTACK},
+    '\0', NULL, NULL, TWO_DASHES },
+  { {"warn-execstack-objects", no_argument, NULL, OPTION_WARN_EXECSTACK_OBJECTS},
+    '\0', NULL, NULL, TWO_DASHES },
   { {"warn-execstack", no_argument, NULL, OPTION_WARN_EXECSTACK},
-    '\0', NULL, N_("Warn when creating an executable stack"), TWO_DASHES },
+    '\0', NULL, NULL, TWO_DASHES },
   { {"no-warn-execstack", no_argument, NULL, OPTION_NO_WARN_EXECSTACK},
-    '\0', NULL, N_("Do not warn when creating an executable stack"), TWO_DASHES },
+    '\0', NULL, NULL, TWO_DASHES },
+
+  { {"error-rwx-segments", no_argument, NULL, OPTION_ERROR_RWX_SEGMENTS},
+    '\0', NULL, NULL, TWO_DASHES },
+  { {"no-error-rwx-segments", no_argument, NULL, OPTION_NO_ERROR_RWX_SEGMENTS},
+    '\0', NULL, NULL, TWO_DASHES },
   { {"warn-rwx-segments", no_argument, NULL, OPTION_WARN_RWX_SEGMENTS},
-    '\0', NULL, N_("Warn when creating executable segments"), TWO_DASHES },
+    '\0', NULL, NULL, TWO_DASHES },
   { {"no-warn-rwx-segments", no_argument, NULL, OPTION_NO_WARN_RWX_SEGMENTS},
-    '\0', NULL, N_("Do not warn when creating executable segments"), TWO_DASHES },
+    '\0', NULL, NULL, TWO_DASHES },
+
   { {"warn-multiple-gp", no_argument, NULL, OPTION_WARN_MULTIPLE_GP},
     '\0', NULL, N_("Warn if the multiple GP values are used"), TWO_DASHES },
   { {"warn-once", no_argument, NULL, OPTION_WARN_ONCE},
@@ -944,12 +957,29 @@ parse_args (unsigned argc, char **argv)
        case OPTION_NON_CONTIGUOUS_REGIONS_WARNINGS:
          link_info.non_contiguous_regions_warnings = true;
          break;
+
+       case OPTION_ERROR_EXECSTACK:
+         link_info.error_execstack = 1;
+         break;
+       case OPTION_NO_ERROR_EXECSTACK:
+         link_info.error_execstack = 0;
+         break;
+       case OPTION_WARN_EXECSTACK_OBJECTS:
+         link_info.warn_execstack = 2;
+         break;
        case OPTION_WARN_EXECSTACK:
          link_info.warn_execstack = 1;
          break;
        case OPTION_NO_WARN_EXECSTACK:
          link_info.warn_execstack = 0;
          break;
+
+       case OPTION_ERROR_RWX_SEGMENTS:
+         link_info.warn_is_error_for_rwx_segments = 1;
+         break;
+       case OPTION_NO_ERROR_RWX_SEGMENTS:
+         link_info.warn_is_error_for_rwx_segments = 0;
+         break;
        case OPTION_WARN_RWX_SEGMENTS:
          link_info.no_warn_rwx_segments = 0;
          link_info.user_warn_rwx_segments = 1;
@@ -958,6 +988,7 @@ parse_args (unsigned argc, char **argv)
          link_info.no_warn_rwx_segments = 1;
          link_info.user_warn_rwx_segments = 1;
          break;
+
        case 'e':
          lang_add_entry (optarg, true);
          break;
@@ -2239,24 +2270,32 @@ elf_static_list_options (FILE *file)
   -z muldefs                  Allow multiple definitions\n"));
   fprintf (file, _("\
   -z stack-size=SIZE          Set size of stack segment\n"));
+
   fprintf (file, _("\
   -z execstack                Mark executable as requiring executable stack\n"));
   fprintf (file, _("\
-  -z noexecstack              Mark executable as not requiring executable stack\n"));
-#if DEFAULT_LD_WARN_EXECSTACK == 1
+  -z noexecstack              Mark executable as not requiring executable stack\n"));  
   fprintf (file, _("\
-  --warn-execstack            Generate a warning if the stack is executable (default)\n"));
+  --warn-execstack-objects    Generate a warning if an object file requests an executable stack\n"));
+#if DEFAULT_LD_WARN_EXECSTACK == 0
+  fprintf (file, _("\
+  --warn-execstack            Generate a warning if creating an executable stack\n"));
 #else
   fprintf (file, _("\
-  --warn-execstack            Generate a warning if the stack is executable\n"));
+  --warn-execstack            Generate a warning if creating an executable stack (default)\n"));
 #endif
 #if DEFAULT_LD_WARN_EXECSTACK == 0
   fprintf (file, _("\
-  --no-warn-execstack         Do not generate a warning if the stack is executable (default)\n"));
+  --no-warn-execstack         Do not generate a warning if creating an executable stack (default)\n"));
 #else
   fprintf (file, _("\
-  --no-warn-execstack         Do not generate a warning if the stack is executable\n"));
+  --no-warn-execstack         Do not generate a warning if creating an executable stack\n"));
 #endif
+  fprintf (file, _("\
+  --error-execstack           Turn warnings about executable stacks into errors\n"));
+  fprintf (file, _("\
+  --no-error-execstack         Do not turn warnings about executable stacks into errors\n"));
+  
 #if DEFAULT_LD_WARN_RWX_SEGMENTS
   fprintf (file, _("\
   --warn-rwx-segments         Generate a warning if a LOAD segment has RWX permissions (default)\n"));
@@ -2268,6 +2307,11 @@ elf_static_list_options (FILE *file)
   fprintf (file, _("\
   --no-warn-rwx-segments      Do not generate a warning if a LOAD segments has RWX permissions (default)\n"));
 #endif
+  fprintf (file, _("\
+  --error-rwx-segments        Turn warnings about loadable RWX segments into errors\n"));
+  fprintf (file, _("\
+  --no-error-rwx-segments     Do not turn warnings about loadable RWX segments into errors\n"));
+
   fprintf (file, _("\
   -z unique-symbol            Avoid duplicated local symbol names\n"));
   fprintf (file, _("\
index e4d582bef608ee490433b0d804644d608349eec5..ae5851589309fd9563a3cd8fae90788ae793037a 100644 (file)
@@ -1,6 +1,6 @@
 #source: maxpage1.s
 #as: --32
-#ld: -z max-page-size=0x200000 -z common-page-size=0x100000 -T maxpage4.t
+#ld: -z max-page-size=0x200000 -z common-page-size=0x100000 -T maxpage4.t --no-warn-rwx-segments
 #readelf: -l --wide
 #target: x86_64-*-linux*
 
index 9e2c77d28b7e253557926b20f616a9d38fa98237..545d59f9f5f2fa16ecc94b50700cc22df40f9ba7 100644 (file)
@@ -217,7 +217,7 @@ if {   [istarget *-*-*linux*]
     || [istarget *-*-gnu*] } {
     run_ld_link_tests [list \
        [list "stack exec" \
-           "-z execstack" \
+           "-z execstack --no-error-execstack" \
            "" \
            "" \
            {stack.s} \
@@ -264,14 +264,14 @@ if {   [istarget *-*-*linux*]
     # of the first test by forcing the flags.
     run_ld_link_tests [list \
        [list "PR ld/29072 (warn about an executable .note.GNU-stack)" \
-           "-e 0 --warn-execstack --warn-rwx-segments" \
+           "-e 0 --warn-execstack --warn-rwx-segments --no-error-rwx-segments --no-error-execstack" \
            "" \
            "" \
            {pr29072-a.s} \
            {{ld pr29072.a.warn}} \
            "pr29072-a.exe"] \
        [list "PR 29072 (warn about -z execstack)" \
-           "-z execstack --warn-execstack" \
+           "-z execstack --warn-execstack --no-error-execstack" \
            "" \
            "" \
            {stack.s} \
@@ -285,14 +285,14 @@ if {   [istarget *-*-*linux*]
            {} \
            "pr29072-d.exe"] \
        [list "Ensure that a warning issued when creating a segment with RWX permissions" \
-           "-e 0 -Tnobits-1.t --warn-rwx-segments" \
+           "-e 0 -Tnobits-1.t --warn-rwx-segments --no-error-rwx-segments" \
            "" \
            "" \
            {nobits-1.s} \
             {{ld rwx-segments-1.l}} \
            "rwx-segments-1.exe"] \
        [list "Ensure that a warning issued when creating a TLS segment with execute permission" \
-           "-e 0 -T rwx-segments-2.t --warn-rwx-segments" \
+           "-e 0 -T rwx-segments-2.t --warn-rwx-segments --no-error-rwx-segments" \
            "" \
            "" \
            {size-2.s} \
@@ -312,7 +312,7 @@ if {   [istarget *-*-*linux*]
     if { [target_defaults_to_execstack] } {
        run_ld_link_tests [list \
           [list "PR ld/29072 (warn about absent .note.GNU-stack)" \
-           "-e 0 -z stack-size=0x123400  --warn-execstack" \
+           "-e 0 -z stack-size=0x123400  --warn-execstack --no-error-execstack" \
            "" \
            "" \
            {pr29072-b.s} \
@@ -322,7 +322,7 @@ if {   [istarget *-*-*linux*]
     } else {
        run_ld_link_tests [list \
           [list "PR ld/29072 (ignore absent .note.GNU-stack)" \
-           "-e 0 -z stack-size=0x123400" \
+           "-e 0 -z stack-size=0x123400 --no-error-execstack" \
            "" \
            "" \
            {pr29072-b.s} \
index 67f0c981920f4392cea5118a490784ec3edee92a..ade4f3a3dc83046ed159f098a8e20cd44febb371 100644 (file)
@@ -1,5 +1,5 @@
 # target: *-*-linux* *-*-gnu* *-*-vxworks arm*-*-uclinuxfdpiceabi
-# ld: -T header.t -z max-page-size=0x100 -z common-page-size=0x100
+# ld: -T header.t -z max-page-size=0x100 -z common-page-size=0x100 --no-warn-rwx-segments
 # objdump: -hpw
 
 #...
index 814afc13766910cc25e019cab850fb15a801c1c5..1418313cf9ccac0051f2c65fb941fa9bf6ec2239 100644 (file)
@@ -1,5 +1,5 @@
 #source: loadaddr.s
-#ld: -T loadaddr1.t -T loadaddr.t -z max-page-size=0x200000 -z noseparate-code
+#ld: -T loadaddr1.t -T loadaddr.t -z max-page-size=0x200000 -z noseparate-code --no-warn-rwx-segments
 #readelf: -l --wide
 #target: *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi
 #xfail: h8300-*-* rx-*-linux*
index 64843c2a7d4f45b15fb2013237b306ca2a64a970..357bbe5de7b37adf748ab1a6cd37bf06f454db10 100644 (file)
@@ -1,5 +1,5 @@
 #source: loadaddr.s
-#ld: -T loadaddr2.t -T loadaddr.t -z max-page-size=0x200000 -z noseparate-code
+#ld: -T loadaddr2.t -T loadaddr.t -z max-page-size=0x200000 -z noseparate-code --no-warn-rwx-segments
 #readelf: -l --wide
 #target: *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi
 #xfail: h8300-*-* rx-*-linux*
index a08e85660aba834b62e84f2b8274ad4e00004a6a..f07c35f9d35dda7f495396c7f4fc51f84699cbb3 100644 (file)
@@ -1,6 +1,6 @@
 #source: maxpage1.s
 #as: --32
-#ld: -z max-page-size=0x200000 -T maxpage4.t
+#ld: -z max-page-size=0x200000 -T maxpage4.t --no-warn-rwx-segments
 #readelf: -l --wide
 #target: x86_64-*-linux* i?86-*-linux-gnu i?86-*-gnu*
 
index 9b90b6f76afba9f54f327f2b1d3e655e814f59e8..b869475d453203c16ba8355a188487d2df341717 100644 (file)
@@ -1,4 +1,4 @@
-#ld: -Tnobits-1.t
+#ld: -Tnobits-1.t --no-warn-rwx-segments
 #readelf: -l --wide
 
 #...
index a5fc40f2e697083c4f15ea6b9d4359e339b6d2a0..ddf3606e51686c254d805844c78cda5dd4d03078 100644 (file)
@@ -1,4 +1,4 @@
-#ld: -Tnote-1.t
+#ld: -Tnote-1.t --no-warn-rwx-segments
 #readelf: -l --wide
 
 #...
index 8ad71c8a66fdc434b1ce559339281b9105b80140..330a4714374d48284700222a151dc758b69ce411 100644 (file)
@@ -1,5 +1,5 @@
 #source: orphan-10.s
-#ld: -N -T orphan-9.ld
+#ld: -N -T orphan-9.ld --no-warn-rwx-segments
 #objdump: -h
 #xfail: [uses_genelf]
 
index a9936f20fae2b3983df945fad2f6d149054acbe1..78b5042569f6591569f6cb7da0c343460f972444 100644 (file)
@@ -1,5 +1,5 @@
 #source: orphan-11.s
-#ld: -T orphan-11.ld --orphan-handling=error
+#ld: -T orphan-11.ld --orphan-handling=error --no-warn-rwx-segments
 #objdump: -wh
 
 #...
index b0d4c2f69d25dde583a5008a21d80a1e0386cc05..ab1a872d0331bb1f8cf3472ca760cff502a9128c 100644 (file)
@@ -1,5 +1,5 @@
 #source: orphan-12.s
-#ld: -T orphan-11.ld --strip-debug --orphan-handling=error
+#ld: -T orphan-11.ld --strip-debug --orphan-handling=error --no-warn-rwx-segments
 #objdump: -wh
 
 #...
index 4f99cd0d51ec831bbce3d01927edfe802429798a..4ad2dda3485293b4f929d886b6dac98bac8be942 100644 (file)
@@ -1,4 +1,4 @@
 #name: Report warning for orphan sections
-#ld: --script orphan.ld --orphan-handling=warn
+#ld: --script orphan.ld --orphan-handling=warn --no-warn-rwx-segments
 #source: orphan.s
 #warning_output: orphan-5.l
index 01d6e8020fb802ee9e6fcbea320bc23ee0600125..028f74b5b3b8f3204d08a80215b22d9dce77f6e9 100644 (file)
@@ -1,4 +1,4 @@
 #name: Discard orphan sections
-#ld: --script orphan.ld --orphan-handling=discard
+#ld: --script orphan.ld --orphan-handling=discard --no-warn-rwx-segments
 #source: orphan.s
 #map: orphan-7.map
index bbd7288dc8b1f721d23fa4c7dff1ba42bfce47d4..e7ba78ac283c89879ca029f536cad894801b993f 100644 (file)
@@ -1,4 +1,4 @@
 #name: Place orphan sections
-#ld: --script orphan.ld --orphan-handling=place
+#ld: --script orphan.ld --orphan-handling=place --no-warn-rwx-segments
 #source: orphan.s
 #map: orphan-8.map
index 27efb81d015b786537c0999609e5b8836b2da95f..5a8e8f18f8020ca842218336da474572928b6e2a 100644 (file)
@@ -1,5 +1,5 @@
 #source: orphan-9.s
-#ld: -N -T orphan-9.ld
+#ld: -N -T orphan-9.ld --no-warn-rwx-segments
 #objdump: -h
 #xfail: [uses_genelf]
 
index 1343574be686bcc7dcc6db8d66b4c90438736f96..3f5bfd753264c5f9981b0f43b2610c9f03a59a80 100644 (file)
@@ -1,5 +1,5 @@
 #source: orphan-region.s
-#ld: -T orphan-region.ld -N -z stack-size=0
+#ld: -T orphan-region.ld -N -z stack-size=0 --no-warn-rwx-segments
 #readelf: -S -l --wide
 #xfail: [uses_genelf] hppa*64*-*-* spu-*-* *-*-nacl*
 # if not using elf.em, you don't get fancy orphan handling
index 9219cf70e1d98b26278c303b33b68ee8840d2c8f..db0e93949af023cc767bab46f179231f81d8dccc 100644 (file)
@@ -1,5 +1,5 @@
 #source: orphan.s
-#ld: -T orphan.ld
+#ld: -T orphan.ld --no-warn-rwx-segments
 #readelf: -S --wide
 #xfail: [uses_genelf]
 # if not using elf.em, you don't get fancy orphan handling
index 99cfd9db91751e72720f822845e4980f0c07f521..f5de3b40c3db9253eaf28e6f0e7cc24e6d67371f 100644 (file)
@@ -1,6 +1,6 @@
 #source: start.s
 #source: pr19539.s
-#ld: -pie -T pr19539.t --warn-textrel
+#ld: -pie -T pr19539.t --warn-textrel --no-warn-rwx-segments
 #readelf : --dyn-syms --wide
 #warning: .*: creating DT_TEXTREL in a PIE
 #target: *-*-linux* *-*-gnu* *-*-solaris* arm*-*-uclinuxfdpiceabi
index 025ace0e8799993b34e772e27f3a60bb95903bf8..b8795c407125938c7c1b3a1cdf584100f94536de 100644 (file)
@@ -1,5 +1,5 @@
 #source: pr26256-1.s
-#ld: -e _start -T pr26256-1.t
+#ld: -e _start -T pr26256-1.t --no-warn-rwx-segments
 #nm: -n
 
 #...
index 1efb8cc34b1231513e255f18deadb9d1b33b3197..c046f65c97f55e3a7f7dc437eef256c1f5ad51c7 100644 (file)
@@ -1,4 +1,4 @@
-#ld: -T pr26907.ld
+#ld: -T pr26907.ld --no-warn-rwx-segments
 #readelf: -lW
 #xfail: dlx-*-* ft32-*-* h8300-*-* ip2k-*-* m32r*-*-elf* m32r*-*-rtems*
 #xfail: moxie-*-* msp430-*-* mt-*-* pru*-*-* visium-*-*
index 886182c120de1368e0dcd8a1839064f32094f037..911e65251c9e512e7ccdd0e6b78d40a8d38b4233 100644 (file)
@@ -1,3 +1,3 @@
-#ld: -shared -T pr28597.t
+#ld: -shared -T pr28597.t --no-warn-rwx-segments
 #error: .*: discarded output section: `.plt'
 #target: i?86-*-* x86_64-*-*
index 1a63f51aab597d09ad8d37ee9eb0289d80124982..1bd7aaf074d08a4ca2c4a056dd3e7754d4fd11f4 100644 (file)
@@ -1,5 +1,5 @@
 #name: SHF_GNU_RETAIN 2 (remove SHF_GNU_RETAIN sections by placing in /DISCARD/)
 #source: retain1.s
-#ld: -e _start -Map=retain2.map --gc-sections --script=retain2.ld
+#ld: -e _start -Map=retain2.map --gc-sections --script=retain2.ld --no-warn-rwx-segments
 #map: retain2.map
 #notarget: ![supports_gnu_osabi] ![check_gc_sections_available]
index 1e7b7f11cb015e66afff4fff69bcbb728acbdbf0..a2b27f38be2e7ac6845194ab42213eee8c409b20 100644 (file)
@@ -259,13 +259,13 @@ if { [check_gc_sections_available] } {
            "pr20828-v.so"] \
        [list \
            "PR ld/20828 forcibly exported symbol version without section GC" \
-           "$LFLAGS --no-dynamic-linker -e foo -E -T pr20828-v.ld" "" "" \
+           "$LFLAGS --no-dynamic-linker -e foo -E -T pr20828-v.ld --no-error-rwx-segments" "" "" \
            {pr20828-v.s} \
            {{objdump -p pr20828-v.od}} \
            "pr20828-v-1"] \
        [list \
            "PR ld/20828 forcibly exported symbol version with section GC" \
-           "$LFLAGS --no-dynamic-linker -e foo --gc-sections -E -T pr20828-v.ld" "" "" \
+           "$LFLAGS --no-dynamic-linker -e foo --gc-sections -E -T pr20828-v.ld --no-error-rwx-segments" "" "" \
            {pr20828-v.s} \
            {{objdump -p pr20828-v.od}} \
            "pr20828-v-2"]]
@@ -282,7 +282,7 @@ if { [check_gc_sections_available] } {
        [list \
            "PR ld/21233 dynamic symbols with section GC\
             (auxiliary shared library)" \
-           "$LFLAGS -shared -T pr21233.ld" "" "$AFLAGS_PIC" \
+           "$LFLAGS -shared -T pr21233.ld --no-error-rwx-segments" "" "$AFLAGS_PIC" \
            {pr21233-l.s} \
            {{readelf --dyn-syms pr21233-l.sd}} \
            "libpr21233.so"]]
@@ -290,7 +290,7 @@ if { [check_gc_sections_available] } {
     run_ld_link_tests [list \
        [list \
            "PR ld/21233 dynamic symbols with section GC (--undefined)" \
-           "$LFLAGS --gc-sections -e foo --undefined=bar -T pr21233.ld" \
+           "$LFLAGS --gc-sections -e foo --undefined=bar -T pr21233.ld --no-error-rwx-segments" \
            "tmpdir/libpr21233.so" "" \
            {pr21233.s} \
            {{readelf --dyn-syms pr21233.sd}} \
@@ -300,7 +300,7 @@ if { [check_gc_sections_available] } {
        [list \
            "PR ld/21233 dynamic symbols with section GC (--require-defined)" \
            "$LFLAGS --gc-sections -e foo --require-defined=bar\
-            -T pr21233.ld" \
+            -T pr21233.ld --no-error-rwx-segments" \
            "tmpdir/libpr21233.so" "" \
            {pr21233.s} \
            {{readelf --dyn-syms pr21233.sd}} \
@@ -309,7 +309,7 @@ if { [check_gc_sections_available] } {
     run_ld_link_tests [list \
        [list \
            "PR ld/21233 dynamic symbols with section GC (EXTERN)" \
-           "$LFLAGS --gc-sections -e foo -T pr21233-e.ld" \
+           "$LFLAGS --gc-sections -e foo -T pr21233-e.ld --no-error-rwx-segments" \
            "tmpdir/libpr21233.so" "" \
            {pr21233.s} \
            {{readelf --dyn-syms pr21233.sd}} \
index a6f9f4f644a105a6de75b39dbc284cab2675f0eb..3c1e282a31d6c145b38be0f24579d17448387ffb 100644 (file)
@@ -1,5 +1,5 @@
 #source: size-1.s
-#ld: -T size-1.t
+#ld: -T size-1.t --no-warn-rwx-segments
 #objdump: -s
 # v850 .tdata/.tbss are not TLS sections
 #xfail: v850*-*-*
index 89fcee63107aa98211c4b21578899484759f263a..aa7453488290993c3c672ad4cbf83439c8e5aff4 100644 (file)
@@ -1,5 +1,5 @@
 #source: maxpage1.s
-#ld: -n -z max-page-size=0x200000 -Ttext-segment 0x10000
+#ld: -n -z max-page-size=0x200000 -Ttext-segment 0x10000 --no-warn-rwx-segments
 #readelf: -l --wide
 #target: *-*-linux-gnu *-*-gnu* arm*-*-uclinuxfdpiceabi
 
index 83076642b382c7ac19d8c545dd60fc7c2127f01a..e8853036f14fcbd474f031d4690680f412bc6b4e 100644 (file)
@@ -1,7 +1,7 @@
 #source: start.s
 #source: symbol1ref.s
 #source: symbol1w.s
-#ld: -T group.ld
+#ld: -T group.ld --no-warn-rwx-segments
 #warning: ^[^\n]*\): warning: witty one-liner$
 #readelf: -s
 #xfail: [is_generic]
index 43743cd03b85b810c86866a9499202821a418756..6cbffcafa0e069079b58dbc015c6fc0483aaf8a8 100644 (file)
@@ -1,7 +1,7 @@
 #source: start.s
 #source: symbol2ref.s
 #source: symbol2w.s
-#ld: -T group.ld
+#ld: -T group.ld --no-warn-rwx-segments
 #warning: ^[^\n]*\.[obj]+: warning: function 'Foo' used$
 #readelf: -s
 # if not using elf.em, you don't get fancy section handling
index 8106db3e3c1e0cfe4c053baa13658ea3b45ae0d3..73e589a8f6ef09bdb9cee148dc2bf8cca7a4196d 100644 (file)
@@ -1,3 +1,3 @@
 #as: --32
-#ld: -melf_i386 -T discarded1.t
+#ld: -melf_i386 -T discarded1.t --no-error-rwx-segments
 #error: .*discarded output section: `.got.plt'
index aaf929f2218b54bcd4f9c42ceb852af496d650ca..a65015e81508d0d298142eb753bcf7a3b3c2dd5b 100644 (file)
@@ -1,6 +1,6 @@
 #source: pr19175.s
 #as: --32 -mrelax-relocations=yes
-#ld: -Bsymbolic -shared -melf_i386 -T pr19175.t
+#ld: -Bsymbolic -shared -melf_i386 -T pr19175.t --no-error-rwx-segments
 #objdump: -dw
 
 .*: +file format .*
index f0644a3a84a9e8cc8356c542ba1ee979cb9a23d4..41c56f4defb0ce80c631dd04b96aa93389a0c0a9 100644 (file)
@@ -1,5 +1,5 @@
 #as: --32
-#ld: -pie -m elf_i386 -T pr19539.t -z notext
+#ld: -pie -m elf_i386 -T pr19539.t -z notext --no-error-rwx-segments
 #readelf: -r --wide
 
 Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 1 entry:
index d388830f614f67c3a13758ed4765adc5dc5f4225..3c3a665db4db73f1522698dba6ac2be704007276 100644 (file)
@@ -1,5 +1,5 @@
 #as: --32  -mrelax-relocations=yes
-#ld: -shared -melf_i386 -T pr23189.t
+#ld: -shared -melf_i386 -T pr23189.t --no-error-rwx-segments
 #readelf: -r --wide
 
 There are no relocations in this file.
index fd1bfd268676d36bc30451d0275eda64007050fd..43e25837224ce554aabcd14474b73e0fbbc10e52 100644 (file)
@@ -1,4 +1,4 @@
-#ld: -r tmpdir/lto-3b.o
+#ld: -r tmpdir/lto-3b.o --no-error-execstack
 #source: dummy.s
 #nm: -p
 
index c35e2bc338d4bf1f9a298e1cb906f7b20bc1968f..b53e355bc77344324bfc304f046672472ccd87be 100644 (file)
@@ -1,4 +1,4 @@
-#ld: -r tmpdir/lto-5a.o tmpdir/lto-5b.o
+#ld: -r tmpdir/lto-5a.o tmpdir/lto-5b.o --no-error-execstack
 #source: dummy.s
 #nm: -p
 
index 6f728d7744852c4df3e4208a78df4671810c13cb..e71cf36ad62dc9eba6c2ba9517faad18dd610182 100644 (file)
@@ -127,7 +127,7 @@ set lto_link_tests [list \
    "" "-flto -O2 $lto_fat $NOSANITIZE_CFLAGS" \
    {pr12758b.c} {} "libpr12758.a"] \
   [list "PR ld/12758" \
-   "$NOPIE_LDFLAGS $NOSANITIZE_CFLAGS -O2 -Wl,-e,foo -nostdlib -flto -fuse-linker-plugin tmpdir/pr12758a.o -Wl,--start-group tmpdir/libpr12758.a -Wl,--end-group" \
+  "$NOPIE_LDFLAGS $NOSANITIZE_CFLAGS -O2 -Wl,-e,foo -nostdlib -flto -fuse-linker-plugin tmpdir/pr12758a.o -Wl,--start-group tmpdir/libpr12758.a -Wl,--end-group -Wl,--no-error-execstack" \
    "$NOSANITIZE_CFLAGS" \
    {dummy.c} {} "pr12758.exe"] \
   [list "Build libpr13183.a" \
@@ -919,7 +919,7 @@ run_cc_link_tests $lto_link_symbol_tests
 
 run_ld_link_tests [list \
   [list "PR ld/19317 (2)" \
-   "-r tmpdir/pr19317.o" "" "" \
+   "-r tmpdir/pr19317.o --no-error-execstack" "" "" \
    {dummy.s} {} "pr19317-r.o"] \
 ]
 
index 3b2cc8a155cc89b44c57c0c163191e1fccc1ed6e..44a9f59ca56dd7a9d4d01dd380640d9a02deebd6 100644 (file)
@@ -1,6 +1,6 @@
 #source: ppc476-shared.s
 #as: -a32
-#ld: -melf32ppc -q -shared -z common-page-size=0x10000 -z notext --ppc476-workaround -T ppc476-shared.lnk
+#ld: -melf32ppc -q -shared -z common-page-size=0x10000 -z notext --ppc476-workaround -T ppc476-shared.lnk --no-error-rwx-segments
 #objdump: -dr
 #target: powerpc*-*-*
 
index 269e257608b35dfc10e5b7a0c889c59b6216f972..0cc83d98d38666cfa4389ddb6ce87affedde1784 100644 (file)
@@ -1,6 +1,6 @@
 #source: ppc476-shared.s
 #as: -a32
-#ld: -melf32ppc -shared -z common-page-size=0x10000 -z notext --ppc476-workaround -T ppc476-shared.lnk
+#ld: -melf32ppc -shared -z common-page-size=0x10000 -z notext --ppc476-workaround -T ppc476-shared.lnk --no-error-rwx-segments
 #objdump: -R
 #target: powerpc*-*-*
 
index 8da819d822aae8f7a0271fde5137b77f5dd8d267..063dca6046853551122490be52f79f442bfa38ea 100644 (file)
@@ -1,5 +1,5 @@
 #as: -a64
-#ld: -melf64ppc --plt-align=0 -T pr28827-2.lnk
+#ld: -melf64ppc --plt-align=0 -T pr28827-2.lnk --no-error-rwx-segments
 #objdump: -dr
 
 .*:     file format .*
index ceaffd44989ed7e8d9c173b3c4795fb9b8e05804..823d8aa28976baed97454c3bb533d1aaedd158b6 100644 (file)
@@ -81,7 +81,7 @@ set s390xtests {
      {{objdump -dzrj.text gotreloc_64-relro-1.dd}}
      "gotreloc_64-1"}
     {"PLT: offset test"
-     "-shared -m elf64_s390 -dT pltoffset-1.ld" ""
+     "-shared -m elf64_s390 -dT pltoffset-1.ld --no-error-rwx-segments" ""
      "-m64" {pltoffset-1.s}
      {{objdump "-dzrj.text --stop-address=16" pltoffset-1.dd}}
      "pltoffset-1"}
index 96237dd72f7582744eda10bc9004adc294c643db..bf50c56bf6a94021ab4159e96d4ca7024fea5654 100644 (file)
@@ -1,4 +1,4 @@
-# ld: --defsym data_align=16 -T align2.t
+# ld: --defsym data_align=16 -T align2.t --no-error-rwx-segments
 # objdump: --section-headers
 
 [^:]+: +file format.*
index 05d2a156a0b0b0f20a0646e6f54e5ce1f90c53e3..86a5f86697850ba271c53af95cd0784bcb1005fb 100644 (file)
@@ -1,4 +1,4 @@
-# ld: --defsym data_align=32 -T align2.t
+# ld: --defsym data_align=32 -T align2.t --no-error-rwx-segments
 # objdump: --section-headers
 
 [^:]+: +file +format.*
index 880b6fbb014d1cbbce1460b9ee36e4d00ad34e4e..40290b82ee72054880364f6aec87e1f05bd7df3d 100644 (file)
@@ -1,7 +1,7 @@
 # source: align2a.s
-# ld: -T align5.t
+# ld: -T align5.t --no-error-rwx-segments
 # nm: -n
 
 #...
 .*foo
-#...
\ No newline at end of file
+#...
index 044ce376583ba8d544fede1eafb74c6a63924bb6..791dd616dddc1bb0ae35ac96d7be592dd0504ede 100644 (file)
@@ -39,7 +39,7 @@ if { [is_pecoff_format] } {
 }
 
 if ![ld_link $ld tmpdir/alignof "-T $srcdir/$subdir/alignof.t \
-       $IMAGE_BASE tmpdir/alignof.o"] {
+       $IMAGE_BASE tmpdir/alignof.o --no-error-rwx-segments"] {
     fail $testname
     return
 }
index fdd5a3b0a59441d71531a60c48e66fd1ff9400e3..50a4a733d471e9847c5a4a58c4130ea995095ef0 100644 (file)
@@ -80,7 +80,7 @@ if [is_pecoff_format] {
     append flags " --image-base 0"
 }
 
-set exec_output [run_host_cmd "$ld" "$flags -o tmpdir/cross1 -T $srcdir/$subdir/cross1.t tmpdir/cross1.o tmpdir/cross2.o"]
+set exec_output [run_host_cmd "$ld" "$flags -o tmpdir/cross1 -T $srcdir/$subdir/cross1.t tmpdir/cross1.o tmpdir/cross2.o --no-error-rwx-segments"]
 
 set exec_output [prune_warnings $exec_output]
 
@@ -105,7 +105,7 @@ if { ![ld_compile "$CC_FOR_TARGET $NOSANITIZE_CFLAGS $NOLTO_CFLAGS" "$srcdir/$su
     return
 }
 
-set exec_output [run_host_cmd "$ld" "$flags -o tmpdir/cross2 -T $srcdir/$subdir/cross2.t tmpdir/cross3.o"]
+set exec_output [run_host_cmd "$ld" "$flags -o tmpdir/cross2 -T $srcdir/$subdir/cross2.t tmpdir/cross3.o --no-error-rwx-segments"]
 set exec_output [prune_warnings $exec_output]
 
 regsub -all "(^|\n)($ld: warning: cannot find entry symbol\[^\n\]*\n?)" $exec_output "\\1" exec_output
@@ -135,7 +135,7 @@ if ![ld_relocate $ld tmpdir/cross3-partial.o "tmpdir/cross1.o tmpdir/cross4.o"]
     return
 }
 
-set exec_output [run_host_cmd "$ld" "$flags -o tmpdir/cross3 -T $srcdir/$subdir/cross3.t tmpdir/cross3-partial.o tmpdir/cross2.o"]
+set exec_output [run_host_cmd "$ld" "$flags -o tmpdir/cross3 -T $srcdir/$subdir/cross3.t tmpdir/cross3-partial.o tmpdir/cross2.o --no-error-rwx-segments"]
 
 set exec_output [prune_warnings $exec_output]
 
@@ -148,7 +148,7 @@ if [string match "" $exec_output] then {
     fail $test3
 }
 
-set exec_output [run_host_cmd "$ld" "$flags -o tmpdir/cross4 -T $srcdir/$subdir/cross4.t tmpdir/cross4.o"]
+set exec_output [run_host_cmd "$ld" "$flags -o tmpdir/cross4 -T $srcdir/$subdir/cross4.t tmpdir/cross4.o --no-error-rwx-segments"]
 set exec_output [prune_warnings $exec_output]
 
 regsub -all "(^|\n)($ld: warning: cannot find entry symbol\[^\n\]*\n?)" $exec_output "\\1" exec_output
@@ -160,7 +160,7 @@ if [string match "" $exec_output] then {
     fail $test4
 }
 
-set exec_output [run_host_cmd "$ld" "$flags -o tmpdir/cross5 -T $srcdir/$subdir/cross5.t tmpdir/cross4.o"]
+set exec_output [run_host_cmd "$ld" "$flags -o tmpdir/cross5 -T $srcdir/$subdir/cross5.t tmpdir/cross4.o --no-error-rwx-segments"]
 set exec_output [prune_warnings $exec_output]
 
 regsub -all "(^|\n)($ld: warning: cannot find entry symbol\[^\n\]*\n?)" $exec_output "\\1" exec_output
@@ -176,7 +176,7 @@ if [string match "" $exec_output] then {
     }
 }
 
-set exec_output [run_host_cmd "$ld" "$flags -o tmpdir/cross6 -T $srcdir/$subdir/cross6.t tmpdir/cross3.o"]
+set exec_output [run_host_cmd "$ld" "$flags -o tmpdir/cross6 -T $srcdir/$subdir/cross6.t tmpdir/cross3.o --no-error-rwx-segments"]
 set exec_output [prune_warnings $exec_output]
 
 regsub -all "(^|\n)($ld: warning: cannot find entry symbol\[^\n\]*\n?)" $exec_output "\\1" exec_output
@@ -188,7 +188,7 @@ if [string match "" $exec_output] then {
     fail $test6
 }
 
-set exec_output [run_host_cmd "$ld" "$flags -o tmpdir/cross7 -T $srcdir/$subdir/cross7.t tmpdir/cross3.o"]
+set exec_output [run_host_cmd "$ld" "$flags -o tmpdir/cross7 -T $srcdir/$subdir/cross7.t tmpdir/cross3.o --no-error-rwx-segments"]
 set exec_output [prune_warnings $exec_output]
 
 regsub -all "(^|\n)($ld: warning: cannot find entry symbol\[^\n\]*\n?)" $exec_output "\\1" exec_output
index 6e6e068ce576282303b97a87807cff45020d986c..7508452e387930814052913ed3c7a2862d457431 100644 (file)
@@ -1,4 +1,4 @@
-#ld: -Tdefined2.t
+#ld: -Tdefined2.t --no-error-rwx-segments
 #nm: -B
 #source: phdrs.s
 
index 0b3831c6fbdced78de3e8baca657447c55bc003f..805f724f94718159509326d96512bc68a8d699fa 100644 (file)
@@ -1,4 +1,4 @@
-#ld: -Tdefined3.t
+#ld: -Tdefined3.t --no-error-rwx-segments
 #nm: -B
 #source: phdrs.s
 #source: defined.s
index 97096f705f2b33a4747f32268f2c0df81512586e..b5513ae9a5d7d44540d8dabaf86ae35a940134fd 100644 (file)
@@ -1,4 +1,4 @@
-#ld: -Tdefined5.t
+#ld: -Tdefined5.t --no-error-rwx-segments
 #warning: .*multiple definition of `defined'.*
 #nm: -B
 
index 4c8e3707f7e0209a9d56efe2f81c8d452d0b2616..9bdd474eeb37aed63cc18f986e7cc7412d5c991e 100644 (file)
@@ -1,4 +1,4 @@
-#ld: -Ttext=0x1000 -Tdata=0x2000 -T pr14962.t
+#ld: -Ttext=0x1000 -Tdata=0x2000 -T pr14962.t --no-error-rwx-segments
 #source: pr14962a.s
 #source: pr14962b.s
 #nm: -n
index bda3b063a4504a3fed82e609b25c201cd1498795..e28129986fdb624920c801c58592542bddc67cdf 100644 (file)
@@ -1,5 +1,5 @@
 # source: data.s
-# ld: -T pr18963.t
+# ld: -T pr18963.t --no-error-rwx-segments
 # nm: -B -n
 # notarget: *-*-vms
 # Skip for VMS based targets as the linker automatically adds extra libraries that may not be present in a cross build.
index 7eb25ce858de14bd0baf2596e3c3d9d00283f87c..03fa61d6bfd63e27b89be3ad5ea8e450c4657ffd 100644 (file)
@@ -1,4 +1,4 @@
-#ld: -Tdata=0x1000 -Tdata=0x2000 -Tcross2.t
+#ld: -Tdata=0x1000 -Tdata=0x2000 -Tcross2.t --no-error-rwx-segments
 #source: align2a.s
 #objdump: -h
 #notarget: *-*-*aout *-*-netbsd *-*-vms ns32k-*-* rx-*-*
index 39000406ae3718e3ae696190f7797f4432f4017a..897bf0779107f7dfbeb61249e1415e13c8e00ad1 100644 (file)
@@ -51,7 +51,7 @@ run_ld_link_tests {
 
     {
        "print-memory-usage-2"
-       "-T print-memory-usage-2.t --print-memory-usage"
+       "-T print-memory-usage-2.t --print-memory-usage --no-error-rwx-segments"
        ""
        ""
        { "print-memory-usage-1.s" }
index f301bbb62420a37b96a974b28da56d862ec5e769..8069ac8cffdbf617105852382842199f0bbf96a1 100644 (file)
@@ -1,6 +1,6 @@
 # name: rgn-at1
 # source: rgn-at.s
-# ld: -T rgn-at1.t
+# ld: -T rgn-at1.t --no-error-rwx-segments
 # objdump: -w -h
 # xfail: rx-*-*
 #   FAILS on the RX because the linker has to set LMA == VMA for the
index dd52644634bf3942bba889113a8bf7cf7401c9b7..e11597ff7844390fe8f9d20ae531dca999c25360 100644 (file)
@@ -1,5 +1,5 @@
 #source: rgn-at10.s
-#ld: -T rgn-at10.t
+#ld: -T rgn-at10.t --no-error-rwx-segments
 #objdump: -h --wide
 #xfail: hppa*64*-*-hpux* v850*-*-*
 # Test that lma is adjusted in case the section start vma is aligned and
index 98373433f06e7a514b9201698a3f4ede0775d52d..3bf9e7b1aa75fbfb700077bb077d3dbeb790beb9 100644 (file)
@@ -1,6 +1,6 @@
 # name: rgn-at4
 # source: rgn-at.s
-# ld: -T rgn-at4.t
+# ld: -T rgn-at4.t --no-error-rwx-segments
 # objdump: -w -h
 # xfail: rx-*-*
 #   FAILS on the RX because the linker has to set LMA == VMA for the
index c706faf8729444cf88e20fd6d8a858432e951e58..95fa0104e57c068ac4c3f77b014298efb66ab054 100644 (file)
@@ -1,5 +1,5 @@
 #source: rgn-at6.s
-#ld: -T rgn-at6.t
+#ld: -T rgn-at6.t --no-error-rwx-segments
 #objdump: -h --wide
 # Test that lma is aligned as for vma when lma_region==region.
 
index 52725aa6248bdeecabf5cd12e731dedde7f43c83..e6ff29ab3778a77fc24d55f22dc5e9dcaecceb8e 100644 (file)
@@ -1,5 +1,5 @@
 #source: rgn-at6.s
-#ld: -T rgn-at8.t
+#ld: -T rgn-at8.t --no-error-rwx-segments
 #objdump: -h --wide
 # Test that lma is aligned when lma_region!=region and requested by script.
 
index e6384b451f3e27cd7379c0c230050645e0c86349..02c16ed3ddf5f300e637ce1ffe5620004181260a 100644 (file)
@@ -1,5 +1,5 @@
 #source: rgn-at6.s
-#ld: -T rgn-at9.t
+#ld: -T rgn-at9.t --no-error-rwx-segments
 #objdump: -h --wide
 #xfail: rx-*-*
 # Test that lma is adjusted in case the section start vma is aligned and
index 902380ee98fd81e4d6d50388658cc350d5368718..38341777a7c01cb33d07ec8aad8a879c5ffe1950 100644 (file)
@@ -1,6 +1,6 @@
 # name: rgn-over1
 # source: rgn-over.s
-# ld: -T rgn-over1.t -Map tmpdir/rgn-over1.map
+# ld: -T rgn-over1.t -Map tmpdir/rgn-over1.map --no-error-rwx-segments
 # error: \A[^ \n]*?ld[^:\n]*?: [^\n]*?section \`.text' will not fit in region `r1'\n[^ \n]*?ld[^:\n]*?: region `r1' overflowed by 16 bytes\Z
 
 #...
index 1d7a8f93ac5f41527905a0456f507e8f878d4343..e2ff5a68367f3e58db2f4cfde2f4397e6234bb45 100644 (file)
@@ -1,6 +1,6 @@
 # name: rgn-over2
 # source: rgn-over.s
-# ld: -T rgn-over2.t -Map tmpdir/rgn-over2.map
+# ld: -T rgn-over2.t -Map tmpdir/rgn-over2.map --no-error-rwx-segments
 # error: \A[^ \n]*?ld[^:\n]*?: [^\n]*?section `\.data' will not fit in region `r1'\n[^ \n]*?ld[^:\n]*?: region `r1' overflowed by 4 bytes\Z
 
 #...
index 8ae150dca5b0abacbd54e4ca19359fa0c6b5867c..b8086f39f065deae3b8648f5f03192710a96cf60 100644 (file)
@@ -1,6 +1,6 @@
 # name: rgn-over4
 # source: rgn-over.s
-# ld: -T rgn-over4.t -Map tmpdir/rgn-over4.map
+# ld: -T rgn-over4.t -Map tmpdir/rgn-over4.map --no-error-rwx-segments
 # error: \A[^ \n]*?ld[^:\n]*?: [^:\n]*?section `\.text' will not fit in region `r1'\n[^ \n]*?ld[^:\n]*?: region `r1' overflowed by 16 bytes\Z
 
 #...
index 10a7658534b1ae7b1305fa2c2074a4bc0a1276d8..34e186dd126c78ffb00684923fc5a89928c3e40f 100644 (file)
@@ -1,6 +1,6 @@
 # name: rgn-over5
 # source: rgn-over.s
-# ld: -T rgn-over5.t -Map tmpdir/rgn-over5.map
+# ld: -T rgn-over5.t -Map tmpdir/rgn-over5.map --no-error-rwx-segments
 # error: \A[^ \n]*?ld[^:\n]*?: [^\n]*?section `\.text' will not fit in region `v1'\n[^ \n]*?ld[^:\n]*?: region `v1' overflowed by 16 bytes\Z
 
 #...
index 66c5a16216bad4f6f5476ee2a33dc90ba00a3ea1..b8731ad216fb0101409d7f500aa8f4cd75a580a3 100644 (file)
@@ -1,6 +1,6 @@
 # name: rgn-over6
 # source: rgn-over.s
-# ld: -T rgn-over6.t -Map tmpdir/rgn-over6.map
+# ld: -T rgn-over6.t -Map tmpdir/rgn-over6.map --no-error-rwx-segments
 # error: \A[^ \n]*?ld[^:\n]*?: [^\n]*?section `\.text' will not fit in region `r1'\n[^ \n]*?ld[^:\n]*?: [^\n]*?section `\.text' will not fit in region `v1'\n[^ \n]*?ld[^:\n]*?: region `r1' overflowed by 16 bytes\n[^ \n]*?ld[^:\n]*?: region `v1' overflowed by 16 bytes\Z
 
 #...
index 28cc6daf51d01fa0a38183f4be819e7856e55687..2f88cabca0adf3ac528d474b1b8abec066df3c80 100644 (file)
@@ -190,7 +190,7 @@ if { [is_pecoff_format] } then {
 }
 set flags $LDFLAGS
 
-if ![ld_link $ld tmpdir/script "$flags -T $srcdir/$subdir/script.t tmpdir/script.o"] {
+if ![ld_link $ld tmpdir/script "$flags -T $srcdir/$subdir/script.t tmpdir/script.o --no-error-rwx-segments"] {
     fail $testname
 } else {
     check_script
@@ -198,7 +198,7 @@ if ![ld_link $ld tmpdir/script "$flags -T $srcdir/$subdir/script.t tmpdir/script
 
 set testname "MRI script"
 
-if ![ld_link $ld tmpdir/script "$flags -c $srcdir/$subdir/scriptm.t"] {
+if ![ld_link $ld tmpdir/script "$flags -c $srcdir/$subdir/scriptm.t --no-error-rwx-segments"] {
     fail $testname
 } else {
     check_script
index 389fde969d72eb3991eb7cf4ff3e63aa84181f5b..79a1130e0f33f16a5fe15d1f8b9e4eadcb129990 100644 (file)
@@ -34,7 +34,7 @@ if { [is_pecoff_format] } {
 }
 
 if ![ld_link $ld tmpdir/sizeof "$LDFLAGS -T $srcdir/$subdir/sizeof.t \
-       $IMAGE_BASE tmpdir/sizeof.o"] {
+       $IMAGE_BASE tmpdir/sizeof.o --no-error-rwx-segments"] {
     fail $testname
     return
 }
index 01eb694c63f19583723739bacad2625fd3303777..8d395ac648970ea29a063fcc2591ad94b698a67d 100644 (file)
@@ -1,6 +1,6 @@
 #source: sort-file2.s
 #source: sort-file1.s
-#ld: -T sort-file.t
+#ld: -T sort-file.t --no-error-rwx-segments
 #nm: -n
 
 # Check that SORT_BY_NAME on filenames works
index c8925956280b81c43981e84d85dfa96bbf5c7d80..e6b2bca083bd72764692e93b0285d75c28d75e55 100644 (file)
@@ -1,3 +1,3 @@
 #as: --64
-#ld: -melf_x86_64 -T discarded1.t
+#ld: -melf_x86_64 -T discarded1.t --no-error-rwx-segments
 #error: .*discarded output section: `.got.plt'
index 70e5689213030303ab31414be963b72e3b60f2b4..171ebd440d133427f0a85b328565a6e4ac17ce4b 100644 (file)
@@ -1,6 +1,6 @@
 #source: pr19175.s
 #as: --64
-#ld: -Bsymbolic -shared -melf_x86_64 -T pr19175.t
+#ld: -Bsymbolic -shared -melf_x86_64 -T pr19175.t --no-error-rwx-segments
 #objdump: -dw
 
 .*: +file format .*
index 3b696c58cb6a6764a6b1cb171187bcfa9e7de399..91393b944b4122e10a485253fcbb3b4d7a20ed08 100644 (file)
@@ -1,6 +1,6 @@
 #source: pr19539.s
 #as: --64
-#ld: -pie -m elf_x86_64 -T pr19539.t -z notext
+#ld: -pie -m elf_x86_64 -T pr19539.t -z notext --no-error-rwx-segments
 #readelf: -r --wide
 
 Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entry:
index 0e50f326466a11832b51abff904ce750450070ee..b15e8e4c022162051834c4a55208a10a0c7946bc 100644 (file)
@@ -1,6 +1,6 @@
 #source: pr19539.s
 #as: --x32
-#ld: -pie -m elf32_x86_64 -T pr19539.t -z notext
+#ld: -pie -m elf32_x86_64 -T pr19539.t -z notext --no-error-rwx-segments
 #readelf: -r --wide
 
 Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entry:
index 6fc4b7ee2c3abeb1a47faea795aa0c28a1b92af6..a22d3e268540b475928708a2e445e0176a821c05 100644 (file)
@@ -1,5 +1,5 @@
 #as: --64  -mrelax-relocations=yes
-#ld: -shared -melf_x86_64 -T pr23189.t
+#ld: -shared -melf_x86_64 -T pr23189.t --no-error-rwx-segments
 #readelf: -r --wide
 
 There are no relocations in this file.