diff options
83 files changed, 488 insertions, 137 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 2b12eb3..f8086fb 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -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. @@ -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; + } } } diff --git a/bfd/elflink.c b/bfd/elflink.c index 99f4cdd..49ea222 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -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)); diff --git a/include/ChangeLog b/include/ChangeLog index e0f0cb3..7ea77f8 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -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 diff --git a/include/bfdlink.h b/include/bfdlink.h index 840790a..8882257 100644 --- a/include/bfdlink.h +++ b/include/bfdlink.h @@ -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 diff --git a/ld/ChangeLog b/ld/ChangeLog index 53bb9c3..fc2478e 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -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 @@ -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 diff --git a/ld/config.in b/ld/config.in index a453c7f..e3a983f 100644 --- a/ld/config.in +++ b/ld/config.in @@ -19,6 +19,14 @@ /* 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 diff --git a/ld/configure b/ld/configure index d2cdf25..468c3bd 100755 --- a/ld/configure +++ b/ld/configure @@ -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 diff --git a/ld/configure.ac b/ld/configure.ac index c3ebd3e..cdac7bb 100644 --- a/ld/configure.ac +++ b/ld/configure.ac @@ -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 diff --git a/ld/emultempl/elf.em b/ld/emultempl/elf.em index 1c5030d..0fb6226 100644 --- a/ld/emultempl/elf.em +++ b/ld/emultempl/elf.em @@ -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 @@ -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 @@ -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, diff --git a/ld/lexsup.c b/ld/lexsup.c index 49dfc13..aa4c76e 100644 --- a/ld/lexsup.c +++ b/ld/lexsup.c @@ -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")); @@ -2269,6 +2308,11 @@ elf_static_list_options (FILE *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, _("\ -z nounique-symbol Keep duplicated local symbol names (default)\n")); diff --git a/ld/testsuite/ld-elf/commonpage2.d b/ld/testsuite/ld-elf/commonpage2.d index e4d582b..ae58515 100644 --- a/ld/testsuite/ld-elf/commonpage2.d +++ b/ld/testsuite/ld-elf/commonpage2.d @@ -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* diff --git a/ld/testsuite/ld-elf/elf.exp b/ld/testsuite/ld-elf/elf.exp index 9e2c77d..545d59f 100644 --- a/ld/testsuite/ld-elf/elf.exp +++ b/ld/testsuite/ld-elf/elf.exp @@ -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} \ diff --git a/ld/testsuite/ld-elf/header.d b/ld/testsuite/ld-elf/header.d index 67f0c98..ade4f3a 100644 --- a/ld/testsuite/ld-elf/header.d +++ b/ld/testsuite/ld-elf/header.d @@ -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 #... diff --git a/ld/testsuite/ld-elf/loadaddr1.d b/ld/testsuite/ld-elf/loadaddr1.d index 814afc1..1418313 100644 --- a/ld/testsuite/ld-elf/loadaddr1.d +++ b/ld/testsuite/ld-elf/loadaddr1.d @@ -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* diff --git a/ld/testsuite/ld-elf/loadaddr2.d b/ld/testsuite/ld-elf/loadaddr2.d index 64843c2..357bbe5 100644 --- a/ld/testsuite/ld-elf/loadaddr2.d +++ b/ld/testsuite/ld-elf/loadaddr2.d @@ -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* diff --git a/ld/testsuite/ld-elf/maxpage4.d b/ld/testsuite/ld-elf/maxpage4.d index a08e856..f07c35f 100644 --- a/ld/testsuite/ld-elf/maxpage4.d +++ b/ld/testsuite/ld-elf/maxpage4.d @@ -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* diff --git a/ld/testsuite/ld-elf/nobits-1.d b/ld/testsuite/ld-elf/nobits-1.d index 9b90b6f..b869475 100644 --- a/ld/testsuite/ld-elf/nobits-1.d +++ b/ld/testsuite/ld-elf/nobits-1.d @@ -1,4 +1,4 @@ -#ld: -Tnobits-1.t +#ld: -Tnobits-1.t --no-warn-rwx-segments #readelf: -l --wide #... diff --git a/ld/testsuite/ld-elf/note-1.d b/ld/testsuite/ld-elf/note-1.d index a5fc40f..ddf3606 100644 --- a/ld/testsuite/ld-elf/note-1.d +++ b/ld/testsuite/ld-elf/note-1.d @@ -1,4 +1,4 @@ -#ld: -Tnote-1.t +#ld: -Tnote-1.t --no-warn-rwx-segments #readelf: -l --wide #... diff --git a/ld/testsuite/ld-elf/orphan-10.d b/ld/testsuite/ld-elf/orphan-10.d index 8ad71c8..330a471 100644 --- a/ld/testsuite/ld-elf/orphan-10.d +++ b/ld/testsuite/ld-elf/orphan-10.d @@ -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] diff --git a/ld/testsuite/ld-elf/orphan-11.d b/ld/testsuite/ld-elf/orphan-11.d index a9936f2..78b5042 100644 --- a/ld/testsuite/ld-elf/orphan-11.d +++ b/ld/testsuite/ld-elf/orphan-11.d @@ -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 #... diff --git a/ld/testsuite/ld-elf/orphan-12.d b/ld/testsuite/ld-elf/orphan-12.d index b0d4c2f..ab1a872 100644 --- a/ld/testsuite/ld-elf/orphan-12.d +++ b/ld/testsuite/ld-elf/orphan-12.d @@ -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 #... diff --git a/ld/testsuite/ld-elf/orphan-5.d b/ld/testsuite/ld-elf/orphan-5.d index 4f99cd0..4ad2dda 100644 --- a/ld/testsuite/ld-elf/orphan-5.d +++ b/ld/testsuite/ld-elf/orphan-5.d @@ -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 diff --git a/ld/testsuite/ld-elf/orphan-7.d b/ld/testsuite/ld-elf/orphan-7.d index 01d6e80..028f74b 100644 --- a/ld/testsuite/ld-elf/orphan-7.d +++ b/ld/testsuite/ld-elf/orphan-7.d @@ -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 diff --git a/ld/testsuite/ld-elf/orphan-8.d b/ld/testsuite/ld-elf/orphan-8.d index bbd7288..e7ba78a 100644 --- a/ld/testsuite/ld-elf/orphan-8.d +++ b/ld/testsuite/ld-elf/orphan-8.d @@ -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 diff --git a/ld/testsuite/ld-elf/orphan-9.d b/ld/testsuite/ld-elf/orphan-9.d index 27efb81..5a8e8f1 100644 --- a/ld/testsuite/ld-elf/orphan-9.d +++ b/ld/testsuite/ld-elf/orphan-9.d @@ -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] diff --git a/ld/testsuite/ld-elf/orphan-region.d b/ld/testsuite/ld-elf/orphan-region.d index 1343574..3f5bfd7 100644 --- a/ld/testsuite/ld-elf/orphan-region.d +++ b/ld/testsuite/ld-elf/orphan-region.d @@ -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 diff --git a/ld/testsuite/ld-elf/orphan.d b/ld/testsuite/ld-elf/orphan.d index 9219cf7..db0e939 100644 --- a/ld/testsuite/ld-elf/orphan.d +++ b/ld/testsuite/ld-elf/orphan.d @@ -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 diff --git a/ld/testsuite/ld-elf/pr19539.d b/ld/testsuite/ld-elf/pr19539.d index 99cfd9d..f5de3b4 100644 --- a/ld/testsuite/ld-elf/pr19539.d +++ b/ld/testsuite/ld-elf/pr19539.d @@ -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 diff --git a/ld/testsuite/ld-elf/pr26256-1a.d b/ld/testsuite/ld-elf/pr26256-1a.d index 025ace0..b8795c4 100644 --- a/ld/testsuite/ld-elf/pr26256-1a.d +++ b/ld/testsuite/ld-elf/pr26256-1a.d @@ -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 #... diff --git a/ld/testsuite/ld-elf/pr26907.d b/ld/testsuite/ld-elf/pr26907.d index 1efb8cc..c046f65 100644 --- a/ld/testsuite/ld-elf/pr26907.d +++ b/ld/testsuite/ld-elf/pr26907.d @@ -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-*-* diff --git a/ld/testsuite/ld-elf/pr28597.d b/ld/testsuite/ld-elf/pr28597.d index 886182c..911e652 100644 --- a/ld/testsuite/ld-elf/pr28597.d +++ b/ld/testsuite/ld-elf/pr28597.d @@ -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-*-* diff --git a/ld/testsuite/ld-elf/retain2.d b/ld/testsuite/ld-elf/retain2.d index 1a63f51..1bd7aaf 100644 --- a/ld/testsuite/ld-elf/retain2.d +++ b/ld/testsuite/ld-elf/retain2.d @@ -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] diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp index 1e7b7f1..a2b27f38 100644 --- a/ld/testsuite/ld-elf/shared.exp +++ b/ld/testsuite/ld-elf/shared.exp @@ -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}} \ diff --git a/ld/testsuite/ld-elf/size-1.d b/ld/testsuite/ld-elf/size-1.d index a6f9f4f..3c1e282 100644 --- a/ld/testsuite/ld-elf/size-1.d +++ b/ld/testsuite/ld-elf/size-1.d @@ -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*-*-* diff --git a/ld/testsuite/ld-elf/textaddr7.d b/ld/testsuite/ld-elf/textaddr7.d index 89fcee6..aa74534 100644 --- a/ld/testsuite/ld-elf/textaddr7.d +++ b/ld/testsuite/ld-elf/textaddr7.d @@ -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 diff --git a/ld/testsuite/ld-elf/warn1.d b/ld/testsuite/ld-elf/warn1.d index 8307664..e885303 100644 --- a/ld/testsuite/ld-elf/warn1.d +++ b/ld/testsuite/ld-elf/warn1.d @@ -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] diff --git a/ld/testsuite/ld-elf/warn2.d b/ld/testsuite/ld-elf/warn2.d index 43743cd..6cbffca 100644 --- a/ld/testsuite/ld-elf/warn2.d +++ b/ld/testsuite/ld-elf/warn2.d @@ -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 diff --git a/ld/testsuite/ld-i386/discarded1.d b/ld/testsuite/ld-i386/discarded1.d index 8106db3..73e589a 100644 --- a/ld/testsuite/ld-i386/discarded1.d +++ b/ld/testsuite/ld-i386/discarded1.d @@ -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' diff --git a/ld/testsuite/ld-i386/pr19175.d b/ld/testsuite/ld-i386/pr19175.d index aaf929f..a65015e 100644 --- a/ld/testsuite/ld-i386/pr19175.d +++ b/ld/testsuite/ld-i386/pr19175.d @@ -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 .* diff --git a/ld/testsuite/ld-i386/pr19539.d b/ld/testsuite/ld-i386/pr19539.d index f0644a3..41c56f4 100644 --- a/ld/testsuite/ld-i386/pr19539.d +++ b/ld/testsuite/ld-i386/pr19539.d @@ -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: diff --git a/ld/testsuite/ld-i386/pr23189.d b/ld/testsuite/ld-i386/pr23189.d index d388830..3c3a665 100644 --- a/ld/testsuite/ld-i386/pr23189.d +++ b/ld/testsuite/ld-i386/pr23189.d @@ -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. diff --git a/ld/testsuite/ld-plugin/lto-3r.d b/ld/testsuite/ld-plugin/lto-3r.d index fd1bfd2..43e2583 100644 --- a/ld/testsuite/ld-plugin/lto-3r.d +++ b/ld/testsuite/ld-plugin/lto-3r.d @@ -1,4 +1,4 @@ -#ld: -r tmpdir/lto-3b.o +#ld: -r tmpdir/lto-3b.o --no-error-execstack #source: dummy.s #nm: -p diff --git a/ld/testsuite/ld-plugin/lto-5r.d b/ld/testsuite/ld-plugin/lto-5r.d index c35e2bc..b53e355 100644 --- a/ld/testsuite/ld-plugin/lto-5r.d +++ b/ld/testsuite/ld-plugin/lto-5r.d @@ -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 diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp index 6f728d7..e71cf36 100644 --- a/ld/testsuite/ld-plugin/lto.exp +++ b/ld/testsuite/ld-plugin/lto.exp @@ -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"] \ ] diff --git a/ld/testsuite/ld-powerpc/ppc476-shared.d b/ld/testsuite/ld-powerpc/ppc476-shared.d index 3b2cc8a..44a9f59 100644 --- a/ld/testsuite/ld-powerpc/ppc476-shared.d +++ b/ld/testsuite/ld-powerpc/ppc476-shared.d @@ -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*-*-* diff --git a/ld/testsuite/ld-powerpc/ppc476-shared2.d b/ld/testsuite/ld-powerpc/ppc476-shared2.d index 269e257..0cc83d9 100644 --- a/ld/testsuite/ld-powerpc/ppc476-shared2.d +++ b/ld/testsuite/ld-powerpc/ppc476-shared2.d @@ -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*-*-* diff --git a/ld/testsuite/ld-powerpc/pr28827-2.d b/ld/testsuite/ld-powerpc/pr28827-2.d index 8da819d..063dca6 100644 --- a/ld/testsuite/ld-powerpc/pr28827-2.d +++ b/ld/testsuite/ld-powerpc/pr28827-2.d @@ -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 .* diff --git a/ld/testsuite/ld-s390/s390.exp b/ld/testsuite/ld-s390/s390.exp index ceaffd4..823d8aa 100644 --- a/ld/testsuite/ld-s390/s390.exp +++ b/ld/testsuite/ld-s390/s390.exp @@ -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"} diff --git a/ld/testsuite/ld-scripts/align2a.d b/ld/testsuite/ld-scripts/align2a.d index 96237dd..bf50c56 100644 --- a/ld/testsuite/ld-scripts/align2a.d +++ b/ld/testsuite/ld-scripts/align2a.d @@ -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.* diff --git a/ld/testsuite/ld-scripts/align2b.d b/ld/testsuite/ld-scripts/align2b.d index 05d2a15..86a5f86 100644 --- a/ld/testsuite/ld-scripts/align2b.d +++ b/ld/testsuite/ld-scripts/align2b.d @@ -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.* diff --git a/ld/testsuite/ld-scripts/align5.d b/ld/testsuite/ld-scripts/align5.d index 880b6fb..40290b8 100644 --- a/ld/testsuite/ld-scripts/align5.d +++ b/ld/testsuite/ld-scripts/align5.d @@ -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 +#... diff --git a/ld/testsuite/ld-scripts/alignof.exp b/ld/testsuite/ld-scripts/alignof.exp index 044ce37..791dd61 100644 --- a/ld/testsuite/ld-scripts/alignof.exp +++ b/ld/testsuite/ld-scripts/alignof.exp @@ -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 } diff --git a/ld/testsuite/ld-scripts/crossref.exp b/ld/testsuite/ld-scripts/crossref.exp index fdd5a3b..50a4a73 100644 --- a/ld/testsuite/ld-scripts/crossref.exp +++ b/ld/testsuite/ld-scripts/crossref.exp @@ -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 diff --git a/ld/testsuite/ld-scripts/defined2.d b/ld/testsuite/ld-scripts/defined2.d index 6e6e068..7508452 100644 --- a/ld/testsuite/ld-scripts/defined2.d +++ b/ld/testsuite/ld-scripts/defined2.d @@ -1,4 +1,4 @@ -#ld: -Tdefined2.t +#ld: -Tdefined2.t --no-error-rwx-segments #nm: -B #source: phdrs.s diff --git a/ld/testsuite/ld-scripts/defined3.d b/ld/testsuite/ld-scripts/defined3.d index 0b3831c..805f724 100644 --- a/ld/testsuite/ld-scripts/defined3.d +++ b/ld/testsuite/ld-scripts/defined3.d @@ -1,4 +1,4 @@ -#ld: -Tdefined3.t +#ld: -Tdefined3.t --no-error-rwx-segments #nm: -B #source: phdrs.s #source: defined.s diff --git a/ld/testsuite/ld-scripts/defined5.d b/ld/testsuite/ld-scripts/defined5.d index 97096f7..b5513ae 100644 --- a/ld/testsuite/ld-scripts/defined5.d +++ b/ld/testsuite/ld-scripts/defined5.d @@ -1,4 +1,4 @@ -#ld: -Tdefined5.t +#ld: -Tdefined5.t --no-error-rwx-segments #warning: .*multiple definition of `defined'.* #nm: -B diff --git a/ld/testsuite/ld-scripts/pr14962.d b/ld/testsuite/ld-scripts/pr14962.d index 4c8e370..9bdd474 100644 --- a/ld/testsuite/ld-scripts/pr14962.d +++ b/ld/testsuite/ld-scripts/pr14962.d @@ -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 diff --git a/ld/testsuite/ld-scripts/pr18963.d b/ld/testsuite/ld-scripts/pr18963.d index bda3b06..e281299 100644 --- a/ld/testsuite/ld-scripts/pr18963.d +++ b/ld/testsuite/ld-scripts/pr18963.d @@ -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. diff --git a/ld/testsuite/ld-scripts/pr20302.d b/ld/testsuite/ld-scripts/pr20302.d index 7eb25ce..03fa61d 100644 --- a/ld/testsuite/ld-scripts/pr20302.d +++ b/ld/testsuite/ld-scripts/pr20302.d @@ -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-*-* diff --git a/ld/testsuite/ld-scripts/print-memory-usage.exp b/ld/testsuite/ld-scripts/print-memory-usage.exp index 3900040..897bf07 100644 --- a/ld/testsuite/ld-scripts/print-memory-usage.exp +++ b/ld/testsuite/ld-scripts/print-memory-usage.exp @@ -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" } diff --git a/ld/testsuite/ld-scripts/rgn-at1.d b/ld/testsuite/ld-scripts/rgn-at1.d index f301bbb..8069ac8 100644 --- a/ld/testsuite/ld-scripts/rgn-at1.d +++ b/ld/testsuite/ld-scripts/rgn-at1.d @@ -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 diff --git a/ld/testsuite/ld-scripts/rgn-at10.d b/ld/testsuite/ld-scripts/rgn-at10.d index dd52644..e11597f 100644 --- a/ld/testsuite/ld-scripts/rgn-at10.d +++ b/ld/testsuite/ld-scripts/rgn-at10.d @@ -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 diff --git a/ld/testsuite/ld-scripts/rgn-at4.d b/ld/testsuite/ld-scripts/rgn-at4.d index 9837343..3bf9e7b 100644 --- a/ld/testsuite/ld-scripts/rgn-at4.d +++ b/ld/testsuite/ld-scripts/rgn-at4.d @@ -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 diff --git a/ld/testsuite/ld-scripts/rgn-at6.d b/ld/testsuite/ld-scripts/rgn-at6.d index c706faf..95fa010 100644 --- a/ld/testsuite/ld-scripts/rgn-at6.d +++ b/ld/testsuite/ld-scripts/rgn-at6.d @@ -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. diff --git a/ld/testsuite/ld-scripts/rgn-at8.d b/ld/testsuite/ld-scripts/rgn-at8.d index 52725aa..e6ff29a 100644 --- a/ld/testsuite/ld-scripts/rgn-at8.d +++ b/ld/testsuite/ld-scripts/rgn-at8.d @@ -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. diff --git a/ld/testsuite/ld-scripts/rgn-at9.d b/ld/testsuite/ld-scripts/rgn-at9.d index e6384b4..02c16ed 100644 --- a/ld/testsuite/ld-scripts/rgn-at9.d +++ b/ld/testsuite/ld-scripts/rgn-at9.d @@ -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 diff --git a/ld/testsuite/ld-scripts/rgn-over1.d b/ld/testsuite/ld-scripts/rgn-over1.d index 902380e..3834177 100644 --- a/ld/testsuite/ld-scripts/rgn-over1.d +++ b/ld/testsuite/ld-scripts/rgn-over1.d @@ -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 #... diff --git a/ld/testsuite/ld-scripts/rgn-over2.d b/ld/testsuite/ld-scripts/rgn-over2.d index 1d7a8f9..e2ff5a6 100644 --- a/ld/testsuite/ld-scripts/rgn-over2.d +++ b/ld/testsuite/ld-scripts/rgn-over2.d @@ -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 #... diff --git a/ld/testsuite/ld-scripts/rgn-over4.d b/ld/testsuite/ld-scripts/rgn-over4.d index 8ae150d..b8086f3 100644 --- a/ld/testsuite/ld-scripts/rgn-over4.d +++ b/ld/testsuite/ld-scripts/rgn-over4.d @@ -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 #... diff --git a/ld/testsuite/ld-scripts/rgn-over5.d b/ld/testsuite/ld-scripts/rgn-over5.d index 10a7658..34e186d 100644 --- a/ld/testsuite/ld-scripts/rgn-over5.d +++ b/ld/testsuite/ld-scripts/rgn-over5.d @@ -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 #... diff --git a/ld/testsuite/ld-scripts/rgn-over6.d b/ld/testsuite/ld-scripts/rgn-over6.d index 66c5a16..b8731ad 100644 --- a/ld/testsuite/ld-scripts/rgn-over6.d +++ b/ld/testsuite/ld-scripts/rgn-over6.d @@ -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 #... diff --git a/ld/testsuite/ld-scripts/script.exp b/ld/testsuite/ld-scripts/script.exp index 28cc6da..2f88cab 100644 --- a/ld/testsuite/ld-scripts/script.exp +++ b/ld/testsuite/ld-scripts/script.exp @@ -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 diff --git a/ld/testsuite/ld-scripts/sizeof.exp b/ld/testsuite/ld-scripts/sizeof.exp index 389fde9..79a1130 100644 --- a/ld/testsuite/ld-scripts/sizeof.exp +++ b/ld/testsuite/ld-scripts/sizeof.exp @@ -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 } diff --git a/ld/testsuite/ld-scripts/sort-file.d b/ld/testsuite/ld-scripts/sort-file.d index 01eb694..8d395ac 100644 --- a/ld/testsuite/ld-scripts/sort-file.d +++ b/ld/testsuite/ld-scripts/sort-file.d @@ -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 diff --git a/ld/testsuite/ld-x86-64/discarded1.d b/ld/testsuite/ld-x86-64/discarded1.d index c892595..e6b2bca 100644 --- a/ld/testsuite/ld-x86-64/discarded1.d +++ b/ld/testsuite/ld-x86-64/discarded1.d @@ -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' diff --git a/ld/testsuite/ld-x86-64/pr19175.d b/ld/testsuite/ld-x86-64/pr19175.d index 70e5689..171ebd4 100644 --- a/ld/testsuite/ld-x86-64/pr19175.d +++ b/ld/testsuite/ld-x86-64/pr19175.d @@ -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 .* diff --git a/ld/testsuite/ld-x86-64/pr19539a.d b/ld/testsuite/ld-x86-64/pr19539a.d index 3b696c5..91393b9 100644 --- a/ld/testsuite/ld-x86-64/pr19539a.d +++ b/ld/testsuite/ld-x86-64/pr19539a.d @@ -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: diff --git a/ld/testsuite/ld-x86-64/pr19539b.d b/ld/testsuite/ld-x86-64/pr19539b.d index 0e50f32..b15e8e4 100644 --- a/ld/testsuite/ld-x86-64/pr19539b.d +++ b/ld/testsuite/ld-x86-64/pr19539b.d @@ -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: diff --git a/ld/testsuite/ld-x86-64/pr23189.d b/ld/testsuite/ld-x86-64/pr23189.d index 6fc4b7e..a22d3e2 100644 --- a/ld/testsuite/ld-x86-64/pr23189.d +++ b/ld/testsuite/ld-x86-64/pr23189.d @@ -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. |