commit:     b3b149f3d1d004f29ce9b3fdf1a636aae92c5d6f
Author:     Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org>
AuthorDate: Tue May 19 21:10:06 2020 +0000
Commit:     Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Tue May 19 21:11:57 2020 +0000
URL:        
https://gitweb.gentoo.org/proj/toolchain/binutils-patches.git/commit/?id=b3b149f3

Consolidate patches

Signed-off-by: Andreas K. Hüttel <dilfridge <AT> gentoo.org>

 ...oo-ld-always-warn-about-textrels-in-files.patch |   2 +-
 ...an-option-no-warn-shared-textrel-self-exp.patch |   2 +-
 ...-ld-add-support-for-poisoned-system-direc.patch |   2 +-
 ...iberty-install-PIC-version-of-libiberty.a.patch |   2 +-
 ...des-link-against-libbfd.la-for-rpath-deps.patch |   2 +-
 ...ss-hash-style-sysv-to-ld-in-its-testsuite.patch | 807 ---------------------
 ...o-add-with-extra-soversion-suffix-option.patch} |   4 +-
 ...-no-warn-shared-textrel-to-ld-in-its-test.patch |  47 --
 ...able-new-dtags-by-default-for-linux-gnu-.patch} |   4 +-
 ...ore-TEXTREL-warnings-for-non-shared-objec.patch |  19 +-
 ...test-for-precise-textrel-warning-message-.patch |  24 -
 ...-hash-style-sysv-and-no-warn-shared-textr.patch |  62 ++
 ...10-Gentoo-Fix-textrel-warning-format-test.patch |  22 -
 ...entoo-Add-patch-tarball-generation-script.patch | 217 ------
 ...ve-block-mistakenly-duplicated-in-1222895.patch | 777 --------------------
 ...t-generic-test-library-to-our-linker-sett.patch |  26 -
 ...regexp-of-hilarious-ld-detection-heuristi.patch |  30 -
 17 files changed, 86 insertions(+), 1963 deletions(-)

diff --git a/9999/0001-Gentoo-ld-always-warn-about-textrels-in-files.patch 
b/9999/0001-Gentoo-ld-always-warn-about-textrels-in-files.patch
index 83377a5..d60b0a1 100644
--- a/9999/0001-Gentoo-ld-always-warn-about-textrels-in-files.patch
+++ b/9999/0001-Gentoo-ld-always-warn-about-textrels-in-files.patch
@@ -1,7 +1,7 @@
 From 5e2144e41600a83f6127eb44d739ed170d78ac7f Mon Sep 17 00:00:00 2001
 From: Mike Frysinger <[email protected]>
 Date: Mon, 16 May 2005 22:10:19 -0400
-Subject: [PATCH 01/16] Gentoo: ld: always warn about textrels in files
+Subject: [PATCH 1/9] Gentoo: ld: always warn about textrels in files
 
 textrels are bad for forcing copy-on-write (this affects everyone), and for
 security/runtime code generation, this affects security ppl.  But in either

diff --git 
a/9999/0002-Gentoo-Add-an-option-no-warn-shared-textrel-self-exp.patch 
b/9999/0002-Gentoo-Add-an-option-no-warn-shared-textrel-self-exp.patch
index 7786ab3..5457b83 100644
--- a/9999/0002-Gentoo-Add-an-option-no-warn-shared-textrel-self-exp.patch
+++ b/9999/0002-Gentoo-Add-an-option-no-warn-shared-textrel-self-exp.patch
@@ -1,7 +1,7 @@
 From 19ecd671bddd33f3afff169f26c55101c90c4afc Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= <[email protected]>
 Date: Sun, 3 Jun 2018 21:12:16 +0200
-Subject: [PATCH 02/16] Gentoo: Add an option --no-warn-shared-textrel
+Subject: [PATCH 2/9] Gentoo: Add an option --no-warn-shared-textrel
  (self-explanatory)
 
 ---

diff --git 
a/9999/0003-Gentoo-gold-ld-add-support-for-poisoned-system-direc.patch 
b/9999/0003-Gentoo-gold-ld-add-support-for-poisoned-system-direc.patch
index 3349c0e..1446352 100644
--- a/9999/0003-Gentoo-gold-ld-add-support-for-poisoned-system-direc.patch
+++ b/9999/0003-Gentoo-gold-ld-add-support-for-poisoned-system-direc.patch
@@ -1,7 +1,7 @@
 From c251ab646d98b3f0e8f8b1ae5e94c672325477e2 Mon Sep 17 00:00:00 2001
 From: Mike Frysinger <[email protected]>
 Date: Tue, 10 Oct 2017 22:53:53 +0200
-Subject: [PATCH 03/16] Gentoo: gold/ld: add support for poisoned system
+Subject: [PATCH 3/9] Gentoo: gold/ld: add support for poisoned system
  directories
 
 This is based on the old CodeSourcery patch written by Joseph Myers to add

diff --git 
a/9999/0004-Gentoo-libiberty-install-PIC-version-of-libiberty.a.patch 
b/9999/0004-Gentoo-libiberty-install-PIC-version-of-libiberty.a.patch
index 54e5fdf..a7f8448 100644
--- a/9999/0004-Gentoo-libiberty-install-PIC-version-of-libiberty.a.patch
+++ b/9999/0004-Gentoo-libiberty-install-PIC-version-of-libiberty.a.patch
@@ -1,7 +1,7 @@
 From c11463f5dbeb53c2a600a5b4a3982368ad149ba1 Mon Sep 17 00:00:00 2001
 From: Mike Frysinger <[email protected]>
 Date: Fri, 7 Jan 2005 00:15:53 -0500
-Subject: [PATCH 04/16] Gentoo: libiberty: install PIC version of libiberty.a
+Subject: [PATCH 4/9] Gentoo: libiberty: install PIC version of libiberty.a
 
 This will install a PIC version of libiberty.a by overwriting the non-PIC
 version of libiberty.a while compiling.  We do this because there is no

diff --git 
a/9999/0005-Gentoo-opcodes-link-against-libbfd.la-for-rpath-deps.patch 
b/9999/0005-Gentoo-opcodes-link-against-libbfd.la-for-rpath-deps.patch
index 2ec1013..d236727 100644
--- a/9999/0005-Gentoo-opcodes-link-against-libbfd.la-for-rpath-deps.patch
+++ b/9999/0005-Gentoo-opcodes-link-against-libbfd.la-for-rpath-deps.patch
@@ -1,7 +1,7 @@
 From b4c9e06c3fb0ede497bcc51dde6c9756efe124ad Mon Sep 17 00:00:00 2001
 From: Mike Frysinger <[email protected]>
 Date: Tue, 5 Jul 2016 20:24:00 +0545
-Subject: [PATCH 05/16] Gentoo: opcodes: link against libbfd.la for rpath deps
+Subject: [PATCH 5/9] Gentoo: opcodes: link against libbfd.la for rpath deps
 
 The reason opcodes doesn't link against libbfd.la is to workaround a
 libtool bug where it uses installed -L paths ahead of DESTDIR paths.

diff --git a/9999/0006-Gentoo-Pass-hash-style-sysv-to-ld-in-its-testsuite.patch 
b/9999/0006-Gentoo-Pass-hash-style-sysv-to-ld-in-its-testsuite.patch
deleted file mode 100644
index 30f207b..0000000
--- a/9999/0006-Gentoo-Pass-hash-style-sysv-to-ld-in-its-testsuite.patch
+++ /dev/null
@@ -1,807 +0,0 @@
-From 65535cdfae964cce89a7c03ad720f80c61e09217 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= <[email protected]>
-Date: Wed, 18 Oct 2017 00:44:49 +0200
-Subject: [PATCH 06/16] Gentoo: Pass --hash-style=sysv to ld in its testsuite
-
----
- ld/testsuite/lib/ld-lib.exp | 769 +++++++++++++++++++++++++++++++++++-
- 1 file changed, 767 insertions(+), 2 deletions(-)
-
-diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
-index 015eda6eb9..853a4d87e6 100644
---- a/ld/testsuite/lib/ld-lib.exp
-+++ b/ld/testsuite/lib/ld-lib.exp
-@@ -165,7 +165,7 @@ proc default_ld_relocate { ld target objects } {
-     global HOSTING_EMU
- 
-     remote_file host delete $target
--    return [run_host_cmd_yesno "$ld" "$HOSTING_EMU -o $target -r $objects"]
-+    return [run_host_cmd_yesno "$ld" "$HOSTING_EMU --hash-style=sysv -o 
$target -r $objects"]
- }
- 
- # Check to see if ld is being invoked with a non-endian output format
-@@ -196,8 +196,20 @@ proc default_ld_link { ld target objects } {
-       set flags [big_or_little_endian]
-     }
- 
-+    # Hilariously, this procedure is called sometimes with $CC and sometimes
-+    # with $ld as parameter. If we want to change the default behaviour, we
-+    # need to take the different option formats into account.
-+    # We check the $ld parameter for
-+    # - .*ld/ld-new    -> we're working with the new linker
-+    # - otherwise      -> we're likely working with the system compiler
-+    if {[regexp {ld/ld-new$} $ld]} {
-+      set gentoosysv "--hash-style=sysv"
-+    } else {
-+      set gentoosysv "-Wl,--hash-style=sysv"
-+    }
-+
-     remote_file host delete $target
--    set exec_output [run_host_cmd "$ld" "$flags -o $target $objects"]
-+    set exec_output [run_host_cmd "$ld" "$gentoosysv $flags -o $target 
$objects"]
-     set exec_output [prune_warnings $exec_output]
- 
-     # We don't care if we get a warning about a non-existent start
-@@ -409,6 +421,759 @@ proc ld_link_defsyms {} {
-     return $flags
- }
- 
-+# run_dump_test FILE (optional:) EXTRA_OPTIONS
-+# Copied from gas testsuite, tweaked and further extended.
-+#
-+# Assemble a .s file, then run some utility on it and check the output.
-+#
-+# There should be an assembly language file named FILE.s in the test
-+# suite directory, and a pattern file called FILE.d.  `run_dump_test'
-+# will assemble FILE.s, run some tool like `objdump', `objcopy', or
-+# `nm' on the .o file to produce textual output, and then analyze that
-+# with regexps.  The FILE.d file specifies what program to run, and
-+# what to expect in its output.
-+#
-+# The FILE.d file begins with zero or more option lines, which specify
-+# flags to pass to the assembler, the program to run to dump the
-+# assembler's output, and the options it wants.  The option lines have
-+# the syntax:
-+#
-+#         # OPTION: VALUE
-+#
-+# OPTION is the name of some option, like "name" or "objdump", and
-+# VALUE is OPTION's value.  The valid options are described below.
-+# Whitespace is ignored everywhere, except within VALUE.  The option
-+# list ends with the first line that doesn't match the above syntax
-+# (hmm, not great for error detection).
-+#
-+# The optional EXTRA_OPTIONS argument to `run_dump_test' is a list of
-+# two-element lists.  The first element of each is an option name, and
-+# the second additional arguments to be added on to the end of the
-+# option list as given in FILE.d.  (If omitted, no additional options
-+# are added.)
-+#
-+# The interesting options are:
-+#
-+#   name: TEST-NAME
-+#     The name of this test, passed to DejaGNU's `pass' and `fail'
-+#       commands.  If omitted, this defaults to FILE, the root of the
-+#       .s and .d files' names.
-+#
-+#   as: FLAGS
-+#     When assembling, pass FLAGS to the assembler.
-+#       If assembling several files, you can pass different assembler
-+#       options in the "source" directives.  See below.
-+#
-+#   ld: FLAGS
-+#       Link assembled files using FLAGS, in the order of the "source"
-+#       directives, when using multiple files.
-+#
-+#   ld_after_inputfiles: FLAGS
-+#       Similar to "ld", but put after all input files.
-+#
-+#   objcopy_objects: FLAGS
-+#     Run objcopy with the specified flags after assembling any source
-+#     that has the special marker RUN_OBJCOPY in the source specific
-+#     flags.
-+#
-+#   objcopy_linked_file: FLAGS
-+#     Run objcopy on the linked file with the specified flags.
-+#     This lets you transform the linked file using objcopy, before the
-+#     result is analyzed by an analyzer program specified below (which
-+#     may in turn *also* be objcopy).
-+#
-+#   PROG: PROGRAM-NAME
-+#       The name of the program to run to analyze the .o file produced
-+#       by the assembler or the linker output.  This can be omitted;
-+#       run_dump_test will guess which program to run by seeing which of
-+#       the flags options below is present.
-+#
-+#   readelf: FLAGS
-+#   objdump: FLAGS
-+#   nm: FLAGS
-+#   objcopy: FLAGS
-+#     Use the specified program to analyze the assembler or linker
-+#       output file, and pass it FLAGS, in addition to the output name.
-+#     Note that they are run with LC_ALL=C in the environment to give
-+#     consistent sorting of symbols.
-+#
-+#   source: SOURCE [FLAGS]
-+#     Assemble the file SOURCE.s using the flags in the "as" directive
-+#       and the (optional) FLAGS.  If omitted, the source defaults to
-+#       FILE.s.
-+#       This is useful if several .d files want to share a .s file.
-+#       More than one "source" directive can be given, which is useful
-+#       when testing linking.
-+#
-+#   dump: DUMP
-+#     Match against DUMP.d.  If omitted, this defaults to FILE.d.  This
-+#     is useful if several .d files differ by options only.  Options are
-+#     always read from FILE.d.
-+#
-+#   xfail: TARGET
-+#       The test is expected to fail on TARGET.  This may occur more than
-+#       once.
-+#
-+#   target: TARGET
-+#     Only run the test for TARGET.
-+#     You may provide target name "cfi" for any target supporting the
-+#     CFI statements.  You may provide target name "shared" for any
-+#     target supporting shared libraries.  Otherwise TARGET is called
-+#     as a TCL procedure if surrounded by square brackets, or passed
-+#     to "istarget" if not.
-+#     This may occur more than once; the target being tested must match
-+#     at least one.  Otherwise the test will be marked unsupported.
-+#
-+#   alltargets: TARGET
-+#     Only run the test for TARGET.
-+#     The syntax for TARGET is as with 'target'.
-+#     This may occur more than once; the target being tested must match
-+#     all of them.  Otherwise the test will be marked unsupported.
-+#
-+#   notarget: TARGET
-+#     Do not run the test for TARGET.
-+#     The syntax for TARGET is as with 'target'.
-+#     This may occur more than once; the target being tested must not
-+#     match any of them.  Otherwise the test will be marked unsupported.
-+#
-+#   skip: TARGET
-+#   anyskip: TARGET
-+#   noskip: TARGET
-+#     These are exactly the same as "notarget", "alltargets" and
-+#     "target" respectively, except that they do nothing at all if the
-+#     check fails.  They should only be used in groups, to construct a
-+#     single test which is run on all targets but with variant options
-+#     or expected output on some targets.  (For example, see
-+#     gas/arm/inst.d and gas/arm/wince_inst.d.)
-+#
-+#   error: REGEX
-+#     An error with message matching REGEX must be emitted for the test
-+#     to pass.  The PROG, readelf, objdump, nm and objcopy options have
-+#     no meaning and need not be supplied if this is present.  Multiple
-+#     "error" directives append to the expected linker error message.
-+#
-+#   error_output: FILE
-+#       Means the same as 'error', except the regular expression lines
-+#       are contains in FILE.
-+#
-+#   warning: REGEX
-+#     Expect a linker warning matching REGEX.  It is an error to issue
-+#     both "error" and "warning".  Multiple "warning" directives
-+#     append to the expected linker warning message.
-+#
-+#   warning_output: FILE
-+#       Means the same as 'warning', except the regular expression
-+#       lines are contains in FILE.
-+#
-+#   map: FILE
-+#       Adding this option will cause the linker to generate a linker
-+#       map file, using the -Map=MAPFILE command line option.  If
-+#       there is no -Map=MAPFILE in the 'ld: FLAGS' then one will be
-+#       added to the linker command line.  The contents of the
-+#       generated MAPFILE are then compared against the regexp lines
-+#       in FILE using `regexp_diff' (see below for details).
-+#
-+# Each option may occur at most once unless otherwise mentioned.
-+#
-+# After the option lines come regexp lines.  `run_dump_test' calls
-+# `regexp_diff' to compare the output of the dumping tool against the
-+# regexps in FILE.d.  `regexp_diff' is defined in binutils-common.exp;
-+# see further comments there.
-+#
-+proc run_dump_test { name {extra_options {}} } {
-+    global subdir srcdir
-+    global OBJDUMP NM AS OBJCOPY READELF LD
-+    global OBJDUMPFLAGS NMFLAGS ASFLAGS OBJCOPYFLAGS READELFFLAGS LDFLAGS
-+    global host_triplet runtests
-+    global env verbose
-+    global ld_elf_shared_opt
-+
-+    if { [is_elf_format] && [check_shared_lib_support] } {
-+      set ld_extra_opt "$ld_elf_shared_opt"
-+    } else {
-+      set ld_extra_opt ""
-+    }
-+
-+    if [string match "*/*" $name] {
-+      set file $name
-+      set name [file tail $name]
-+    } else {
-+      set file "$srcdir/$subdir/$name"
-+    }
-+
-+    if ![runtest_file_p $runtests $name] then {
-+      return
-+    }
-+
-+    set opt_array [slurp_options "${file}.d"]
-+    if { $opt_array == -1 } {
-+      perror "error reading options from $file.d"
-+      unresolved $subdir/$name
-+      return
-+    }
-+    set dumpfile tmpdir/dump.out
-+    set run_ld 0
-+    set run_objcopy 0
-+    set objfile_names {}
-+    set opts(as) {}
-+    set opts(ld) {}
-+    set opts(ld_after_inputfiles) {}
-+    set opts(xfail) {}
-+    set opts(target) {}
-+    set opts(alltargets) {}
-+    set opts(notarget) {}
-+    set opts(skip) {}
-+    set opts(anyskip) {}
-+    set opts(noskip) {}
-+    set opts(objdump) {}
-+    set opts(nm) {}
-+    set opts(objcopy) {}
-+    set opts(readelf) {}
-+    set opts(name) {}
-+    set opts(PROG) {}
-+    set opts(source) {}
-+    set opts(dump) {}
-+    set opts(error) {}
-+    set opts(warning) {}
-+    set opts(error_output) {}
-+    set opts(warning_output) {}
-+    set opts(objcopy_linked_file) {}
-+    set opts(objcopy_objects) {}
-+    set opts(map) {}
-+
-+    foreach i $opt_array {
-+      set opt_name [lindex $i 0]
-+      set opt_val [lindex $i 1]
-+      if ![info exists opts($opt_name)] {
-+          perror "unknown option $opt_name in file $file.d"
-+          unresolved $subdir/$name
-+          return
-+      }
-+
-+      switch -- $opt_name {
-+          xfail {}
-+          target {}
-+          alltargets {}
-+          notarget {}
-+          skip {}
-+          anyskip {}
-+          noskip {}
-+          warning {}
-+          error {}
-+          source {
-+              # Move any source-specific as-flags to a separate list to
-+              # simplify processing.
-+              if { [llength $opt_val] > 1 } {
-+                  lappend asflags [lrange $opt_val 1 end]
-+                  set opt_val [lindex $opt_val 0]
-+              } else {
-+                  lappend asflags {}
-+              }
-+
-+                # Create the object file name based on nothing but the source
-+                # file name.
-+                set new_objfile \
-+                    [concat tmpdir/[file rootname [file tail [lindex $opt_val 
0]]].o]
-+                # But, sometimes, we have the exact same source filename in
-+                # different directories (foo/src.s bar/src.s) which would lead
-+                # us to try and create two src.o files.  We detect this
-+                # conflict here, and instead create src.o and src1.o.
-+                set j 0
-+                while { [lsearch $objfile_names $new_objfile] != -1 } {
-+                    incr j
-+                    set new_objfile \
-+                        [concat tmpdir/[file rootname [file tail  [lindex 
$opt_val 0]]]${j}.o]
-+                }
-+              lappend objfile_names $new_objfile
-+          }
-+          default {
-+              if [string length $opts($opt_name)] {
-+                  perror "option $opt_name multiply set in $file.d"
-+                  unresolved $subdir/$name
-+                  return
-+              }
-+
-+              # A single "# ld:" with no options should do the right thing.
-+              if { $opt_name == "ld" } {
-+                  set run_ld 1
-+              }
-+              # Likewise objcopy_linked_file.
-+              if { $opt_name == "objcopy_linked_file" } {
-+                  set run_objcopy 1
-+              }
-+          }
-+      }
-+      if { $opt_name == "as" || $opt_name == "ld" } {
-+          set opt_val [subst $opt_val]
-+      }
-+
-+      # Append differently whether it's a message (without space) or
-+      # an option or list (with space).
-+      switch -- $opt_name {
-+          warning -
-+          error {
-+              append opts($opt_name) $opt_val
-+          }
-+          default {
-+              set opts($opt_name) [concat $opts($opt_name) $opt_val]
-+          }
-+      }
-+    }
-+
-+    foreach i $extra_options {
-+      set opt_name [lindex $i 0]
-+      set opt_val [lindex $i 1]
-+      if ![info exists opts($opt_name)] {
-+          perror "unknown option $opt_name given in extra_opts"
-+          unresolved $subdir/$name
-+          return
-+      }
-+      # Add extra option to end of existing option, adding space
-+      # if necessary.
-+      if { ![regexp "warning|error" $opt_name]
-+           && [string length $opts($opt_name)] } {
-+          append opts($opt_name) " "
-+      }
-+      append opts($opt_name) $opt_val
-+    }
-+
-+    foreach opt { as ld } {
-+      regsub {\[big_or_little_endian\]} $opts($opt) \
-+          [big_or_little_endian] opts($opt)
-+    }
-+
-+    if { $opts(name) == "" } {
-+      set testname "$subdir/$name"
-+    } else {
-+      set testname $opts(name)
-+    }
-+
-+    # Decide early whether we should run the test for this target.
-+    if { [llength $opts(noskip)] > 0 } {
-+      set targmatch 0
-+      foreach targ $opts(noskip) {
-+          if [match_target $targ] {
-+              set targmatch 1
-+              break
-+          }
-+      }
-+      if { $targmatch == 0 } {
-+          return
-+      }
-+    }
-+    foreach targ $opts(anyskip) {
-+      if ![match_target $targ] {
-+          return
-+      }
-+    }
-+    foreach targ $opts(skip) {
-+      if [match_target $targ] {
-+          return
-+      }
-+    }
-+    if { [llength $opts(target)] > 0 } {
-+      set targmatch 0
-+      foreach targ $opts(target) {
-+          if [match_target $targ] {
-+              set targmatch 1
-+              break
-+          }
-+      }
-+      if { $targmatch == 0 } {
-+          unsupported $testname
-+          return
-+      }
-+    }
-+    foreach targ $opts(alltargets) {
-+      if ![match_target $targ] {
-+          unsupported $testname
-+          return
-+      }
-+    }
-+    foreach targ $opts(notarget) {
-+      if [match_target $targ] {
-+          unsupported $testname
-+          return
-+      }
-+    }
-+
-+    set program ""
-+    # It's meaningless to require an output-testing method when we
-+    # expect an error.
-+    if { $opts(error) == "" && $opts(error_output) == "" } {
-+      if {$opts(PROG) != ""} {
-+          switch -- $opts(PROG) {
-+              objdump { set program objdump }
-+              nm      { set program nm }
-+              objcopy { set program objcopy }
-+              readelf { set program readelf }
-+              default
-+              { perror "unrecognized program option $opts(PROG) in $file.d"
-+                unresolved $testname
-+                return }
-+          }
-+      } else {
-+      # Guess which program to run, by seeing which option was specified.
-+          foreach p {objdump objcopy nm readelf} {
-+              if {$opts($p) != ""} {
-+                  if {$program != ""} {
-+                      perror "ambiguous dump program in $file.d"
-+                      unresolved $testname
-+                      return
-+                  } else {
-+                      set program $p
-+                  }
-+              }
-+          }
-+      }
-+      if { $program == "" \
-+                 && $opts(map) == "" \
-+                 && $opts(warning) == "" \
-+                 && $opts(warning_output) == "" \
-+                 && $opts(error) == "" \
-+                 && $opts(error_output) == "" } {
-+          perror "dump program unspecified in $file.d"
-+          unresolved $testname
-+          return
-+      }
-+    }
-+
-+    if { $opts(source) == "" } {
-+      set sourcefiles [list ${file}.s]
-+      set asflags [list ""]
-+      set objfile_names [list tmpdir/[file tail ${file}].o]
-+    } else {
-+      set sourcefiles {}
-+      foreach sf $opts(source) {
-+          if { [string match "/*" $sf] } {
-+              lappend sourcefiles "$sf"
-+          } else {
-+              lappend sourcefiles "$srcdir/$subdir/$sf"
-+          }
-+      }
-+    }
-+
-+    if { $opts(dump) == "" } {
-+      set dfile ${file}.d
-+    } else {
-+      set dfile $srcdir/$subdir/$opts(dump)
-+    }
-+
-+    # Time to setup xfailures.
-+    foreach targ $opts(xfail) {
-+      setup_xfail $targ
-+    }
-+
-+    # Assemble each file.
-+    set objfiles {}
-+    for { set i 0 } { $i < [llength $sourcefiles] } { incr i } {
-+      set sourcefile [lindex $sourcefiles $i]
-+      set sourceasflags [lindex $asflags $i]
-+      set run_objcopy_objects 0
-+
-+      if { [string match "*RUN_OBJCOPY*" $sourceasflags] } {
-+          set run_objcopy_objects 1
-+      }
-+      regsub "RUN_OBJCOPY" $sourceasflags "" sourceasflags
-+
-+      set objfile [lindex $objfile_names $i]
-+      catch "exec rm -f $objfile" exec_output
-+      lappend objfiles $objfile
-+      set cmd "$AS $ASFLAGS $opts(as) $sourceasflags -o $objfile $sourcefile"
-+
-+      send_log "$cmd\n"
-+      set cmdret [remote_exec host [concat sh -c [list "$cmd 2>&1"]] "" 
"/dev/null" "ld.tmp"]
-+      remote_upload host "ld.tmp"
-+      set comp_output [prune_warnings [file_contents "ld.tmp"]]
-+      remote_file host delete "ld.tmp"
-+      remote_file build delete "ld.tmp"
-+
-+      if { [lindex $cmdret 0] != 0 || ![string match "" $comp_output] } then {
-+          send_log -- "$comp_output\n"
-+          verbose "$comp_output" 3
-+
-+          set exitstat "succeeded"
-+          if { $cmdret != 0 } { set exitstat "failed" }
-+          verbose -log "$exitstat with: <$comp_output>"
-+          fail $testname
-+          return
-+      }
-+
-+      if { $run_objcopy_objects } {
-+          set cmd "$OBJCOPY $opts(objcopy_objects) $objfile"
-+
-+          send_log "$cmd\n"
-+          set cmdret [remote_exec host [concat sh -c [list "$cmd 2>&1"]] \
-+                      "" "/dev/null" "objcopy.tmp"]
-+          remote_upload host "objcopy.tmp"
-+          set comp_output [prune_warnings [file_contents "objcopy.tmp"]]
-+          remote_file host delete "objcopy.tmp"
-+          remote_file build delete "objcopy.tmp"
-+
-+          if { [lindex $cmdret 0] != 0 \
-+                || ![string match "" $comp_output] } {
-+              send_log -- "$comp_output\n"
-+              verbose "$comp_output" 3
-+
-+              set exitstat "succeeded"
-+              if { $cmdret != 0 } { set exitstat "failed" }
-+              verbose -log "$exitstat with: <$comp_output>"
-+              fail $testname
-+              return
-+          }
-+      }
-+    }
-+
-+    if { (($opts(warning) != "") && ($opts(error) != "")) \
-+       || (($opts(warning) != "") && ($opts(error_output) != "")) \
-+       || (($opts(warning) != "") && ($opts(warning_output) != "")) \
-+       || (($opts(error) != "") && ($opts(warning_output) != "")) \
-+       || (($opts(error) != "") && ($opts(error_output) != "")) \
-+       || (($opts(warning_output) != "") && ($opts(error_output) != "")) } {
-+      perror "$testname: bad mix of warning, error, warning_output, and 
error_output test-directives"
-+      unresolved $testname
-+      return
-+    }
-+
-+    set check_ld(source) ""
-+    set check_ld(terminal) 0
-+    if { $opts(error) != "" \
-+         || $opts(warning) != "" \
-+         || $opts(error_output) != "" \
-+         || $opts(warning_output) != "" } {
-+
-+        if { $opts(error) != "" || $opts(error_output) != "" } {
-+            set check_ld(terminal) 1
-+        } else {
-+            set check_ld(terminal) 0
-+        }
-+
-+        if { $opts(error) != "" || $opts(warning) != "" } {
-+            set check_ld(source) "regex"
-+            if { $opts(error) != "" } {
-+                set check_ld(regex) $opts(error)
-+            } else {
-+                set check_ld(regex) $opts(warning)
-+            }
-+        } else {
-+            set check_ld(source) "file"
-+            if { $opts(error_output) != "" } {
-+                set check_ld(file) $opts(error_output)
-+            } else {
-+                set check_ld(file) $opts(warning_output)
-+            }
-+        }
-+    }
-+
-+    # Perhaps link the file(s).
-+    if { $run_ld } {
-+      set objfile "tmpdir/dump"
-+      catch "exec rm -f $objfile" exec_output
-+
-+      # Add -L$srcdir/$subdir so that the linker command can use
-+      # linker scripts in the source directory.
-+      set cmd "$LD --hash-style=sysv $ld_extra_opt $LDFLAGS -L$srcdir/$subdir 
\
-+                 $opts(ld) -o $objfile $objfiles $opts(ld_after_inputfiles)"
-+
-+        # If needed then check for, or add a -Map option.
-+        set mapfile ""
-+        if { $opts(map) != "" } then {
-+            if { [regexp -- "-Map=(\[^ \]+)" $cmd all mapfile] } then {
-+                # Found existing mapfile option
-+                verbose -log "Existing mapfile '$mapfile' found"
-+            } else {
-+                # No mapfile option.
-+                set mapfile "tmpdir/dump.map"
-+                verbose -log "Adding mapfile '$mapfile'"
-+                set cmd "$cmd -Map=$mapfile"
-+            }
-+        }
-+
-+      send_log "$cmd\n"
-+      set cmdret [remote_exec host [concat sh -c [list "$cmd 2>&1"]] "" 
"/dev/null" "ld.tmp"]
-+      remote_upload host "ld.tmp"
-+      set comp_output [file_contents "ld.tmp"]
-+      remote_file host delete "ld.tmp"
-+      remote_file build delete "ld.tmp"
-+      set cmdret [lindex $cmdret 0]
-+
-+      if { $cmdret == 0 && $run_objcopy } {
-+          set infile $objfile
-+          set objfile "tmpdir/dump1"
-+          remote_file host delete $objfile
-+
-+          # Note that we don't use OBJCOPYFLAGS here; any flags must be
-+          # explicitly specified.
-+          set cmd "$OBJCOPY $opts(objcopy_linked_file) $infile $objfile"
-+
-+          send_log "$cmd\n"
-+          set cmdret [remote_exec host [concat sh -c [list "$cmd 2>&1"]] "" 
"/dev/null" "ld.tmp"]
-+          remote_upload host "ld.tmp"
-+          append comp_output [file_contents "ld.tmp"]
-+          remote_file host delete "ld.tmp"
-+          remote_file build delete "ld.tmp"
-+          set cmdret [lindex $cmdret 0]
-+      }
-+
-+      regsub "\n$" $comp_output "" comp_output
-+      if { $cmdret != 0 || $comp_output != "" || $check_ld(source) != "" } 
then {
-+          set exitstat "succeeded"
-+          if { $cmdret != 0 } { set exitstat "failed" }
-+
-+            if { $check_ld(source) == "regex" } {
-+                verbose -log "$exitstat with: <$comp_output>, expected: 
<$check_ld(regex)>"
-+            } elseif { $check_ld(source) == "file" } {
-+                verbose -log "$exitstat with: <$comp_output>, expected in 
file $check_ld(file)"
-+                set_file_contents "tmpdir/ld.messages" "$comp_output"
-+            } else {
-+                verbose -log "$exitstat with: <$comp_output>, no expected 
output"
-+            }
-+          send_log -- "$comp_output\n"
-+          verbose "$comp_output" 3
-+
-+          if { (($check_ld(source) == "") == ($comp_output == "")) \
-+                 && (($cmdret == 0) == ($check_ld(terminal) == 0)) \
-+                 && ((($check_ld(source) == "regex") \
-+                      && ($check_ld(regex) == "") == ($comp_output == "") \
-+                      && [regexp -- $check_ld(regex) $comp_output]) \
-+                     || (($check_ld(source) == "file") \
-+                         && (![regexp_diff "tmpdir/ld.messages" 
"$srcdir/$subdir/$check_ld(file)"]))) } {
-+                # We have the expected output from ld.
-+              if { $check_ld(terminal) || $program == "" } {
-+                  pass $testname
-+                  return
-+              }
-+          } else {
-+              fail $testname
-+              return
-+          }
-+      }
-+
-+        if { $opts(map) != "" } then {
-+            # Check the map file matches.
-+            set map_pattern_file $srcdir/$subdir/$opts(map)
-+            verbose -log "Compare '$mapfile' against '$map_pattern_file'"
-+            if { [regexp_diff $mapfile $map_pattern_file] } then {
-+                fail "$testname (map file check)"
-+            } else {
-+                pass "$testname (map file check)"
-+            }
-+
-+            if { $program == "" } then {
-+                return
-+            }
-+        }
-+    } else {
-+      set objfile [lindex $objfiles 0]
-+    }
-+
-+    # We must not have expected failure if we get here.
-+    if { $opts(error) != "" } {
-+      fail $testname
-+      return
-+    }
-+
-+    set progopts1 $opts($program)
-+    eval set progopts \$[string toupper $program]FLAGS
-+    eval set binary \$[string toupper $program]
-+
-+    if { ![is_remote host] && [which $binary] == 0 } {
-+      untested $testname
-+      return
-+    }
-+
-+    if { $progopts1 == "" } { set $progopts1 "-r" }
-+    verbose "running $binary $progopts $progopts1" 3
-+
-+    # Objcopy, unlike the other two, won't send its output to stdout,
-+    # so we have to run it specially.
-+    set cmd "$binary $progopts $progopts1 $objfile > $dumpfile"
-+    if { $program == "objcopy" } {
-+      set cmd "$binary $progopts $progopts1 $objfile $dumpfile"
-+    }
-+
-+    # Ensure consistent sorting of symbols
-+    if {[info exists env(LC_ALL)]} {
-+      set old_lc_all $env(LC_ALL)
-+    }
-+    set env(LC_ALL) "C"
-+    send_log "$cmd\n"
-+    set cmdret [remote_exec host [concat sh -c [list "$cmd 2>ld.tmp"]] "" 
"/dev/null"]
-+    set cmdret [lindex $cmdret 0]
-+    remote_upload host "ld.tmp"
-+    set comp_output [prune_warnings [file_contents "ld.tmp"]]
-+    remote_file host delete "ld.tmp"
-+    remote_file build delete "ld.tmp"
-+    if {[info exists old_lc_all]} {
-+      set env(LC_ALL) $old_lc_all
-+    } else {
-+      unset env(LC_ALL)
-+    }
-+    if { $cmdret != 0 || $comp_output != "" } {
-+      send_log "exited abnormally with $cmdret, output:$comp_output\n"
-+      fail $testname
-+      return
-+    }
-+
-+    if { $verbose > 2 } then { verbose "output is [file_contents $dumpfile]" 
3 }
-+    if { [regexp_diff $dumpfile "${dfile}"] } then {
-+      fail $testname
-+      if { $verbose == 2 } then { verbose "output is [file_contents 
$dumpfile]" 2 }
-+      return
-+    }
-+
-+    pass $testname
-+}
-+
-+proc slurp_options { file } {
-+    # If options_regsub(foo) is set to {a b}, then the contents of a
-+    # "#foo:" line will have regsub -all applied to replace a with b.
-+    global options_regsub
-+
-+    if [catch { set f [open $file r] } x] {
-+      #perror "couldn't open `$file': $x"
-+      perror "$x"
-+      return -1
-+    }
-+    set opt_array {}
-+    # whitespace expression
-+    set ws  {[        ]*}
-+    set nws {[^       ]*}
-+    # whitespace is ignored anywhere except within the options list;
-+    # option names are alphabetic plus underscore only.
-+    set pat "^#${ws}(\[a-zA-Z_\]*)$ws:${ws}(.*)$ws\$"
-+    while { [gets $f line] != -1 } {
-+      set line [string trim $line]
-+      # Whitespace here is space-tab.
-+      if [regexp $pat $line xxx opt_name opt_val] {
-+          # match!
-+          if [info exists options_regsub($opt_name)] {
-+              set subst $options_regsub($opt_name)
-+              regsub -all -- [lindex $subst 0] $opt_val [lindex $subst 1] \
-+                  opt_val
-+          }
-+          lappend opt_array [list $opt_name $opt_val]
-+      } else {
-+          break
-+      }
-+    }
-+    close $f
-+    return $opt_array
-+}
-+
-+proc file_contents { filename } {
-+    set file [open $filename r]
-+    set contents [read $file]
-+    close $file
-+    return $contents
-+}
-+
-+proc set_file_contents { filename contents } {
-+    set file [open $filename w]
-+    puts $file "$contents"
-+    close $file
-+}
-+
- # Create an archive using ar
- #
- proc ar_simple_create { ar aropts target objects } {
--- 
-2.26.2
-

diff --git a/9999/0011-Gentoo-add-with-extra-soversion-suffix-option.patch 
b/9999/0006-Gentoo-add-with-extra-soversion-suffix-option.patch
similarity index 97%
rename from 9999/0011-Gentoo-add-with-extra-soversion-suffix-option.patch
rename to 9999/0006-Gentoo-add-with-extra-soversion-suffix-option.patch
index cc9f0cc..d7f696c 100644
--- a/9999/0011-Gentoo-add-with-extra-soversion-suffix-option.patch
+++ b/9999/0006-Gentoo-add-with-extra-soversion-suffix-option.patch
@@ -1,7 +1,7 @@
-From f1d34965ce140071bb77313bbca01914ace59e27 Mon Sep 17 00:00:00 2001
+From eefafabed03c163287326afaadc4cc0e5840ea7b Mon Sep 17 00:00:00 2001
 From: Sergei Trofimovich <[email protected]>
 Date: Wed, 12 Sep 2018 23:44:29 +0100
-Subject: [PATCH 11/16] Gentoo: add --with-extra-soversion-suffix= option
+Subject: [PATCH 6/9] Gentoo: add --with-extra-soversion-suffix= option
 
 --with-extra-soversion-suffix= will allow Gentoo to
 distinct libbfd.so and libopcodes.so to have more precise

diff --git 
a/9999/0007-Gentoo-Pass-no-warn-shared-textrel-to-ld-in-its-test.patch 
b/9999/0007-Gentoo-Pass-no-warn-shared-textrel-to-ld-in-its-test.patch
deleted file mode 100644
index 74f96cf..0000000
--- a/9999/0007-Gentoo-Pass-no-warn-shared-textrel-to-ld-in-its-test.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 221b8f6dfdfcb5e9d04069fdc2fb1aa6a881cb60 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= <[email protected]>
-Date: Sun, 3 Jun 2018 21:40:36 +0200
-Subject: [PATCH 07/16] Gentoo: Pass --no-warn-shared-textrel to ld in its
- testsuite
-
----
- ld/testsuite/lib/ld-lib.exp | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
-index 853a4d87e6..ec123e2fc1 100644
---- a/ld/testsuite/lib/ld-lib.exp
-+++ b/ld/testsuite/lib/ld-lib.exp
-@@ -165,7 +165,7 @@ proc default_ld_relocate { ld target objects } {
-     global HOSTING_EMU
- 
-     remote_file host delete $target
--    return [run_host_cmd_yesno "$ld" "$HOSTING_EMU --hash-style=sysv -o 
$target -r $objects"]
-+    return [run_host_cmd_yesno "$ld" "$HOSTING_EMU --hash-style=sysv 
--no-warn-shared-textrel -o $target -r $objects"]
- }
- 
- # Check to see if ld is being invoked with a non-endian output format
-@@ -203,9 +203,9 @@ proc default_ld_link { ld target objects } {
-     # - .*ld/ld-new    -> we're working with the new linker
-     # - otherwise      -> we're likely working with the system compiler
-     if {[regexp {ld/ld-new$} $ld]} {
--      set gentoosysv "--hash-style=sysv"
-+      set gentoosysv "--hash-style=sysv --no-warn-shared-textrel"
-     } else {
--      set gentoosysv "-Wl,--hash-style=sysv"
-+      set gentoosysv "-Wl,--hash-style=sysv -Wl,--no-warn-shared-textrel"
-     }
- 
-     remote_file host delete $target
-@@ -972,7 +972,7 @@ proc run_dump_test { name {extra_options {}} } {
- 
-       # Add -L$srcdir/$subdir so that the linker command can use
-       # linker scripts in the source directory.
--      set cmd "$LD --hash-style=sysv $ld_extra_opt $LDFLAGS -L$srcdir/$subdir 
\
-+      set cmd "$LD --hash-style=sysv --no-warn-shared-textrel $ld_extra_opt 
$LDFLAGS -L$srcdir/$subdir \
-                  $opts(ld) -o $objfile $objfiles $opts(ld_after_inputfiles)"
- 
-         # If needed then check for, or add a -Map option.
--- 
-2.26.2
-

diff --git 
a/9999/0013-Gentoo-ld-enable-new-dtags-by-default-for-linux-gnu-.patch 
b/9999/0007-Gentoo-ld-enable-new-dtags-by-default-for-linux-gnu-.patch
similarity index 91%
rename from 9999/0013-Gentoo-ld-enable-new-dtags-by-default-for-linux-gnu-.patch
rename to 9999/0007-Gentoo-ld-enable-new-dtags-by-default-for-linux-gnu-.patch
index 713a0a9..0b0cbfe 100644
--- a/9999/0013-Gentoo-ld-enable-new-dtags-by-default-for-linux-gnu-.patch
+++ b/9999/0007-Gentoo-ld-enable-new-dtags-by-default-for-linux-gnu-.patch
@@ -1,7 +1,7 @@
-From 14ba11502cbc93e938e0b43e9648aedb7462ddeb Mon Sep 17 00:00:00 2001
+From cf8983d602c56eb31ee0e356df670d9c2876ce15 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= <[email protected]>
 Date: Sun, 13 Oct 2019 05:25:28 +0200
-Subject: [PATCH 13/16] Gentoo: ld: enable new dtags by default for linux/gnu
+Subject: [PATCH 7/9] Gentoo: ld: enable new dtags by default for linux/gnu
  targets
 
 Original author: Mike Frysinger <[email protected]>

diff --git 
a/9999/0008-Gentoo-Restore-TEXTREL-warnings-for-non-shared-objec.patch 
b/9999/0008-Gentoo-Restore-TEXTREL-warnings-for-non-shared-objec.patch
index e54ccd1..8e0e091 100644
--- a/9999/0008-Gentoo-Restore-TEXTREL-warnings-for-non-shared-objec.patch
+++ b/9999/0008-Gentoo-Restore-TEXTREL-warnings-for-non-shared-objec.patch
@@ -1,11 +1,12 @@
-From 3439646abc93066af8cc651940f30fd0f9b99760 Mon Sep 17 00:00:00 2001
+From 74afb38257f4a35d681883348ef54317674827e3 Mon Sep 17 00:00:00 2001
 From: Sergei Trofimovich <[email protected]>
 Date: Thu, 1 Mar 2018 12:35:03 +0100
-Subject: [PATCH 08/16] Gentoo: Restore TEXTREL warnings for non-shared objects
+Subject: [PATCH 8/9] Gentoo: Restore TEXTREL warnings for non-shared objects
 
 ---
- bfd/elflink.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
+ bfd/elflink.c                | 4 ++--
+ ld/testsuite/ld-i386/warn1.d | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
 
 diff --git a/bfd/elflink.c b/bfd/elflink.c
 index 90ada7a1cc..b4636885aa 100644
@@ -29,6 +30,16 @@ index 90ada7a1cc..b4636885aa 100644
                  break;
                }
            }
+diff --git a/ld/testsuite/ld-i386/warn1.d b/ld/testsuite/ld-i386/warn1.d
+index 3c78f31efd..49bcb5171f 100644
+--- a/ld/testsuite/ld-i386/warn1.d
++++ b/ld/testsuite/ld-i386/warn1.d
+@@ -1,4 +1,4 @@
+ #name: --warn-shared-textrel --fatal-warnings
+ #as: --32
+ #ld: -shared -melf_i386 --warn-shared-textrel --fatal-warnings
+-#error: .*warning: creating a DT_TEXTREL in a shared object
++#error: .*warning: creating a DT_TEXTREL in object
 -- 
 2.26.2
 

diff --git 
a/9999/0009-Gentoo-Fix-test-for-precise-textrel-warning-message-.patch 
b/9999/0009-Gentoo-Fix-test-for-precise-textrel-warning-message-.patch
deleted file mode 100644
index e87a82d..0000000
--- a/9999/0009-Gentoo-Fix-test-for-precise-textrel-warning-message-.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 61cc50292e7cc3f8871946f0720ff039ddf7a2be Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= <[email protected]>
-Date: Sun, 3 Jun 2018 22:36:40 +0200
-Subject: [PATCH 09/16] Gentoo: Fix test for precise textrel warning message,
- after non-shared object change
-
-(Broken by "Gentoo: Restore TEXTREL warnings for non-shared objects")
----
- ld/testsuite/ld-i386/warn1.d | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/ld/testsuite/ld-i386/warn1.d b/ld/testsuite/ld-i386/warn1.d
-index 3c78f31efd..3319308d33 100644
---- a/ld/testsuite/ld-i386/warn1.d
-+++ b/ld/testsuite/ld-i386/warn1.d
-@@ -1,4 +1,4 @@
- #name: --warn-shared-textrel --fatal-warnings
- #as: --32
- #ld: -shared -melf_i386 --warn-shared-textrel --fatal-warnings
--#error: .*warning: creating a DT_TEXTREL in a shared object
-+#error: .*warning: creating a DT_TEXTREL in object.
--- 
-2.26.2
-

diff --git 
a/9999/0009-Gentoo-Pass-hash-style-sysv-and-no-warn-shared-textr.patch 
b/9999/0009-Gentoo-Pass-hash-style-sysv-and-no-warn-shared-textr.patch
new file mode 100644
index 0000000..4ff406f
--- /dev/null
+++ b/9999/0009-Gentoo-Pass-hash-style-sysv-and-no-warn-shared-textr.patch
@@ -0,0 +1,62 @@
+From 2055e278cb6e984760dbf8627efef2158e215449 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= <[email protected]>
+Date: Wed, 18 Oct 2017 00:44:49 +0200
+Subject: [PATCH 9/9] Gentoo: Pass --hash-style=sysv and
+ --no-warn-shared-textrel to ld in the testsuite
+
+---
+ binutils/testsuite/lib/binutils-common.exp |  2 +-
+ ld/testsuite/lib/ld-lib.exp                | 16 ++++++++++++++--
+ 2 files changed, 15 insertions(+), 3 deletions(-)
+
+diff --git a/binutils/testsuite/lib/binutils-common.exp 
b/binutils/testsuite/lib/binutils-common.exp
+index b9e3c6d817..bb4ef987b3 100644
+--- a/binutils/testsuite/lib/binutils-common.exp
++++ b/binutils/testsuite/lib/binutils-common.exp
+@@ -1125,7 +1125,7 @@ proc run_dump_test { name {extra_options {}} } {
+ 
+             # Add -L$srcdir/$subdir so that the linker command can use
+             # linker scripts in the source directory.
+-            set cmd "$LD $ld_extra_opt $LDFLAGS -L$srcdir/$subdir \
++            set cmd "$LD --hash-style=sysv --no-warn-shared-textrel 
$ld_extra_opt $LDFLAGS -L$srcdir/$subdir \
+                  $opts(ld) -o $objfile $objfiles $opts(ld_after_inputfiles)"
+ 
+             # If needed then check for, or add a -Map option.
+diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
+index 015eda6eb9..0b945b539d 100644
+--- a/ld/testsuite/lib/ld-lib.exp
++++ b/ld/testsuite/lib/ld-lib.exp
+@@ -165,7 +165,7 @@ proc default_ld_relocate { ld target objects } {
+     global HOSTING_EMU
+ 
+     remote_file host delete $target
+-    return [run_host_cmd_yesno "$ld" "$HOSTING_EMU -o $target -r $objects"]
++    return [run_host_cmd_yesno "$ld" "$HOSTING_EMU --hash-style=sysv 
--no-warn-shared-textrel -o $target -r $objects"]
+ }
+ 
+ # Check to see if ld is being invoked with a non-endian output format
+@@ -196,8 +196,20 @@ proc default_ld_link { ld target objects } {
+       set flags [big_or_little_endian]
+     }
+ 
++    # Hilariously, this procedure is called sometimes with $CC and sometimes
++    # with $ld as parameter. If we want to change the default behaviour, we
++    # need to take the different option formats into account.
++    # We check the $ld parameter for
++    # - ld-new         -> we're working with the new linker
++    # - otherwise      -> we're likely working with the system compiler
++    if {[regexp {ld-new$} $ld]} {
++      set gentoosysv "--hash-style=sysv --no-warn-shared-textrel"
++    } else {
++      set gentoosysv "-Wl,--hash-style=sysv -Wl,--no-warn-shared-textrel"
++    }
++
+     remote_file host delete $target
+-    set exec_output [run_host_cmd "$ld" "$flags -o $target $objects"]
++    set exec_output [run_host_cmd "$ld" "$gentoosysv $flags -o $target 
$objects"]
+     set exec_output [prune_warnings $exec_output]
+ 
+     # We don't care if we get a warning about a non-existent start
+-- 
+2.26.2
+

diff --git a/9999/0010-Gentoo-Fix-textrel-warning-format-test.patch 
b/9999/0010-Gentoo-Fix-textrel-warning-format-test.patch
deleted file mode 100644
index f29ae7f..0000000
--- a/9999/0010-Gentoo-Fix-textrel-warning-format-test.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From fab9a66210e065ff5a14d4bc70841406cdecc62e Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= <[email protected]>
-Date: Mon, 16 Jul 2018 12:20:37 +0200
-Subject: [PATCH 10/16] Gentoo: Fix textrel warning format test
-
----
- ld/testsuite/ld-i386/warn1.d | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/ld/testsuite/ld-i386/warn1.d b/ld/testsuite/ld-i386/warn1.d
-index 3319308d33..49bcb5171f 100644
---- a/ld/testsuite/ld-i386/warn1.d
-+++ b/ld/testsuite/ld-i386/warn1.d
-@@ -1,4 +1,4 @@
- #name: --warn-shared-textrel --fatal-warnings
- #as: --32
- #ld: -shared -melf_i386 --warn-shared-textrel --fatal-warnings
--#error: .*warning: creating a DT_TEXTREL in object.
-+#error: .*warning: creating a DT_TEXTREL in object
--- 
-2.26.2
-

diff --git 
a/9999/0012-no-patch-Gentoo-Add-patch-tarball-generation-script.patch 
b/9999/0012-no-patch-Gentoo-Add-patch-tarball-generation-script.patch
deleted file mode 100644
index a60bb9c..0000000
--- a/9999/0012-no-patch-Gentoo-Add-patch-tarball-generation-script.patch
+++ /dev/null
@@ -1,217 +0,0 @@
-From 7343f154ae6bc08bd2c3c051f039824af3d917e5 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= <[email protected]>
-Date: Wed, 11 Oct 2017 21:56:53 +0200
-Subject: [PATCH 12/16] [no patch] Gentoo: Add patch tarball generation script
-
-(cherry picked from commit 90427abb2aac0cc4ebcb73397cc3ad574c6fec5d)
----
- scripts/gentoo/0000-Gentoo-Git-is-development |  12 ++
- scripts/gentoo/9999-Gentoo-We-make-a-release  |  12 ++
- scripts/gentoo/README.Gentoo.patches          |  31 +++++
- scripts/gentoo/make-tarball.sh                | 118 ++++++++++++++++++
- 4 files changed, 173 insertions(+)
- create mode 100644 scripts/gentoo/0000-Gentoo-Git-is-development
- create mode 100644 scripts/gentoo/9999-Gentoo-We-make-a-release
- create mode 100644 scripts/gentoo/README.Gentoo.patches
- create mode 100755 scripts/gentoo/make-tarball.sh
-
-diff --git a/scripts/gentoo/0000-Gentoo-Git-is-development 
b/scripts/gentoo/0000-Gentoo-Git-is-development
-new file mode 100644
-index 0000000000..2b9482d033
---- /dev/null
-+++ b/scripts/gentoo/0000-Gentoo-Git-is-development
-@@ -0,0 +1,12 @@
-+Gentoo: Git is development
-+
-+--- a/bfd/development.sh
-++++ b/bfd/development.sh
-+@@ -16,5 +16,5 @@
-+ # along with this program.  If not, see <http://www.gnu.org/licenses/>.
-+ 
-+ # Controls whether to enable development-mode features by default.
-+-development=false
-++development=true
-+ 
-+
-diff --git a/scripts/gentoo/9999-Gentoo-We-make-a-release 
b/scripts/gentoo/9999-Gentoo-We-make-a-release
-new file mode 100644
-index 0000000000..fea66d97b4
---- /dev/null
-+++ b/scripts/gentoo/9999-Gentoo-We-make-a-release
-@@ -0,0 +1,12 @@
-+Gentoo: We make a release, so switch development flag off
-+
-+--- a/bfd/development.sh
-++++ b/bfd/development.sh
-+@@ -16,5 +16,5 @@
-+ # along with this program.  If not, see <http://www.gnu.org/licenses/>.
-+ 
-+ # Controls whether to enable development-mode features by default.
-+-development=true
-++development=false
-+ 
-+
-diff --git a/scripts/gentoo/README.Gentoo.patches 
b/scripts/gentoo/README.Gentoo.patches
-new file mode 100644
-index 0000000000..504dc67127
---- /dev/null
-+++ b/scripts/gentoo/README.Gentoo.patches
-@@ -0,0 +1,31 @@
-+ ============
-+ === What ===
-+ ============
-+
-+Gentoo patchsets for binutils are maintained as vendor branches of the 
upstream
-+binutils-glb git repository. From there, we bundle all the commits into a 
tarball
-+and distribute it via our public mirroring system.
-+
-+If you want specific info about a patch (like what it does or whose great 
idea 
-+it was to change the code), read the patch!  We try to fill out the commit
-+messages with useful info such as what it does, why it's needed, bug reports, 
-+original creators, etc...  
-+
-+ =============
-+ === Where ===
-+ =============
-+
-+Currently, https://github.com/gentoo/binutils-gdb
-+
-+ ===========
-+ === How ===
-+ ===========
-+ 
-+The patch naming convention is precisely as generated by "git format-patch".
-+
-+All patches should apply with -p1 (so they can be used both with the legacy
-+epatch function and the new, more strict eapply function).
-+
-+Commits where the commit message starts with "[no patch]" will not be included
-+in the patch tarball. This is useful for changes to the tarball generation
-+script, or for the addition of extra files that are not patches.
-diff --git a/scripts/gentoo/make-tarball.sh b/scripts/gentoo/make-tarball.sh
-new file mode 100755
-index 0000000000..575f48bf6a
---- /dev/null
-+++ b/scripts/gentoo/make-tarball.sh
-@@ -0,0 +1,118 @@
-+#!/bin/bash
-+
-+PN="binutils"
-+PV=$1
-+pver=$2
-+
-+if [[ -z ${PV} ]] ; then
-+      echo "Usage: $0 binutils-version patchset-version-to-be-created"
-+      echo "Please read the script before trying to use it :)"
-+      exit 1
-+fi
-+
-+# check that we're in the root of a binutils-gdb git repo
-+
-+if [[ ! -f COPYING.LIBGLOSS ]] || [[ ! -d .git ]] ; then
-+      echo "Error: You need to call this script in the main directory of a 
Gentoo binutils-gdb git clone"
-+      exit 1
-+fi
-+
-+# check that we're on a branch gentoo/${PV}
-+
-+mybranchinfo=$(git status --porcelain -b|grep '^##')
-+mybranch=$(echo ${mybranchinfo}|sed -e 's:^## ::' -e 's:\.\.\..*$::')
-+if [[ ! "gentoo/binutils-${PV}" == "${mybranch}" ]] ; then
-+      echo "Error: Your git repository is on the incorrect branch 
${mybranch}; should be gentoo/binutils-${PV}"
-+      exit 1
-+fi
-+
-+# check that the working directory is clean
-+
-+mystatusinfo=$(git status --porcelain)
-+if [[ ! -z "${mystatusinfo}" ]] ; then
-+      echo "Error: Your working directory is not clean"
-+      exit 1
-+fi
-+
-+# check if the tag already exists
-+
-+mytaginfo=$(git tag -l|grep "gentoo/binutils-${PV}-${pver}")
-+if [[ ! -z "${mytaginfo}" ]] ; then
-+      echo "Error: A tag corresponding to this patch level already exists 
(gentoo/binutils-${PV}-${pver})"
-+      exit 1
-+fi
-+
-+# luckily binutils git has no /tmp dir and no tar.xz files, but let's better 
check and be pathologically careful
-+
-+if [[ -e tmp ]] || [[ -e ${PN}-${PV}-patches-${pver}.tar.xz ]] ; then
-+      echo "Error: tmp or ${PN}-${PV}-patches-${pver}.tar.xz exists in git"
-+      exit 1
-+fi
-+rm -rf tmp
-+rm -f ${PN}-${PV}-*.tar.bz2
-+
-+for myname in 0*.patch ; do
-+      if [[ -e "${myname}" ]]; then
-+              echo "Error: ${myname} exists in git"
-+              exit 1
-+      fi
-+done
-+rm -f 0*.patch
-+
-+# check if we have to override the upstream tag
-+
-+mytaginfo=$(git tag -l|grep "gentoo/binutils-${PV}-upstream")
-+if [[ ! -z "${mytaginfo}" ]] ; then
-+      starttag="gentoo/binutils-${PV}-upstream"
-+else
-+      starttag="binutils-${PV//./_}"
-+fi
-+if [[ "${PV}" == "9999" ]]; then
-+      starttag="master"
-+fi
-+echo "Starting from tag ${starttag}"
-+
-+mkdir -p tmp/patch
-+
-+# copy README.Gentoo.patches
-+
-+cp scripts/gentoo/README.Gentoo.patches tmp/ || exit 1
-+
-+# create and rename patches
-+
-+git format-patch ${starttag}..HEAD > /dev/null || exit 1
-+
-+# remove all patches where the summary line starts with:
-+# - [no-tarball]: not related to upstream tarball
-+# - [no-patch]: not related to upstream patches
-+# - "Automatic date update in version.in": daily bumps
-+rm -f 0???-no-tarball-*.patch
-+rm -f 0???-no-patch-*.patch
-+rm -f 0???-Automatic-date-update-in-version.in.patch
-+
-+for myname in 0*.patch ; do
-+      mv ${myname} tmp/patch/ || exit 1
-+done
-+
-+# add the extra patch if needed
-+
-+if [[ "${PV}" != "9999" ]]; then
-+      cp scripts/gentoo/0000-Gentoo-Git-is-development 
tmp/patch/0000-Gentoo-Git-is-development.patch || exit 1
-+      cp scripts/gentoo/9999-Gentoo-We-make-a-release 
tmp/patch/9999-Gentoo-We-make-a-release.patch || exit 1
-+fi
-+
-+# add a history file
-+
-+git log --stat --decorate ${starttag}..HEAD > tmp/patch/README.history || 
exit 1
-+
-+# package everything up
-+
-+tar -Jcf ${PN}-${PV}-patches-${pver}.tar.xz \
-+      -C tmp patch README.Gentoo.patches || exit 1
-+rm -r tmp
-+
-+du -b *.tar.xz
-+
-+# tag the commit
-+
-+git tag -s -m "Gentoo patchset binutils-${PV}-${pver}" 
"gentoo/binutils-${PV}-${pver}"
--- 
-2.26.2
-

diff --git 
a/9999/0014-Gentoo-Remove-block-mistakenly-duplicated-in-1222895.patch 
b/9999/0014-Gentoo-Remove-block-mistakenly-duplicated-in-1222895.patch
deleted file mode 100644
index 20dbdd1..0000000
--- a/9999/0014-Gentoo-Remove-block-mistakenly-duplicated-in-1222895.patch
+++ /dev/null
@@ -1,777 +0,0 @@
-From e54cd834e32160ac588add78a2990648328c2f06 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= <[email protected]>
-Date: Sun, 10 May 2020 20:13:43 +0300
-Subject: [PATCH 14/16] Gentoo: Remove block mistakenly duplicated in
- 1222895ec55f34a97fb2cbcd80d421e24308f618
-
----
- ld/testsuite/lib/ld-lib.exp | 753 ------------------------------------
- 1 file changed, 753 deletions(-)
-
-diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
-index ec123e2fc1..ae72f21d72 100644
---- a/ld/testsuite/lib/ld-lib.exp
-+++ b/ld/testsuite/lib/ld-lib.exp
-@@ -421,759 +421,6 @@ proc ld_link_defsyms {} {
-     return $flags
- }
- 
--# run_dump_test FILE (optional:) EXTRA_OPTIONS
--# Copied from gas testsuite, tweaked and further extended.
--#
--# Assemble a .s file, then run some utility on it and check the output.
--#
--# There should be an assembly language file named FILE.s in the test
--# suite directory, and a pattern file called FILE.d.  `run_dump_test'
--# will assemble FILE.s, run some tool like `objdump', `objcopy', or
--# `nm' on the .o file to produce textual output, and then analyze that
--# with regexps.  The FILE.d file specifies what program to run, and
--# what to expect in its output.
--#
--# The FILE.d file begins with zero or more option lines, which specify
--# flags to pass to the assembler, the program to run to dump the
--# assembler's output, and the options it wants.  The option lines have
--# the syntax:
--#
--#         # OPTION: VALUE
--#
--# OPTION is the name of some option, like "name" or "objdump", and
--# VALUE is OPTION's value.  The valid options are described below.
--# Whitespace is ignored everywhere, except within VALUE.  The option
--# list ends with the first line that doesn't match the above syntax
--# (hmm, not great for error detection).
--#
--# The optional EXTRA_OPTIONS argument to `run_dump_test' is a list of
--# two-element lists.  The first element of each is an option name, and
--# the second additional arguments to be added on to the end of the
--# option list as given in FILE.d.  (If omitted, no additional options
--# are added.)
--#
--# The interesting options are:
--#
--#   name: TEST-NAME
--#     The name of this test, passed to DejaGNU's `pass' and `fail'
--#       commands.  If omitted, this defaults to FILE, the root of the
--#       .s and .d files' names.
--#
--#   as: FLAGS
--#     When assembling, pass FLAGS to the assembler.
--#       If assembling several files, you can pass different assembler
--#       options in the "source" directives.  See below.
--#
--#   ld: FLAGS
--#       Link assembled files using FLAGS, in the order of the "source"
--#       directives, when using multiple files.
--#
--#   ld_after_inputfiles: FLAGS
--#       Similar to "ld", but put after all input files.
--#
--#   objcopy_objects: FLAGS
--#     Run objcopy with the specified flags after assembling any source
--#     that has the special marker RUN_OBJCOPY in the source specific
--#     flags.
--#
--#   objcopy_linked_file: FLAGS
--#     Run objcopy on the linked file with the specified flags.
--#     This lets you transform the linked file using objcopy, before the
--#     result is analyzed by an analyzer program specified below (which
--#     may in turn *also* be objcopy).
--#
--#   PROG: PROGRAM-NAME
--#       The name of the program to run to analyze the .o file produced
--#       by the assembler or the linker output.  This can be omitted;
--#       run_dump_test will guess which program to run by seeing which of
--#       the flags options below is present.
--#
--#   readelf: FLAGS
--#   objdump: FLAGS
--#   nm: FLAGS
--#   objcopy: FLAGS
--#     Use the specified program to analyze the assembler or linker
--#       output file, and pass it FLAGS, in addition to the output name.
--#     Note that they are run with LC_ALL=C in the environment to give
--#     consistent sorting of symbols.
--#
--#   source: SOURCE [FLAGS]
--#     Assemble the file SOURCE.s using the flags in the "as" directive
--#       and the (optional) FLAGS.  If omitted, the source defaults to
--#       FILE.s.
--#       This is useful if several .d files want to share a .s file.
--#       More than one "source" directive can be given, which is useful
--#       when testing linking.
--#
--#   dump: DUMP
--#     Match against DUMP.d.  If omitted, this defaults to FILE.d.  This
--#     is useful if several .d files differ by options only.  Options are
--#     always read from FILE.d.
--#
--#   xfail: TARGET
--#       The test is expected to fail on TARGET.  This may occur more than
--#       once.
--#
--#   target: TARGET
--#     Only run the test for TARGET.
--#     You may provide target name "cfi" for any target supporting the
--#     CFI statements.  You may provide target name "shared" for any
--#     target supporting shared libraries.  Otherwise TARGET is called
--#     as a TCL procedure if surrounded by square brackets, or passed
--#     to "istarget" if not.
--#     This may occur more than once; the target being tested must match
--#     at least one.  Otherwise the test will be marked unsupported.
--#
--#   alltargets: TARGET
--#     Only run the test for TARGET.
--#     The syntax for TARGET is as with 'target'.
--#     This may occur more than once; the target being tested must match
--#     all of them.  Otherwise the test will be marked unsupported.
--#
--#   notarget: TARGET
--#     Do not run the test for TARGET.
--#     The syntax for TARGET is as with 'target'.
--#     This may occur more than once; the target being tested must not
--#     match any of them.  Otherwise the test will be marked unsupported.
--#
--#   skip: TARGET
--#   anyskip: TARGET
--#   noskip: TARGET
--#     These are exactly the same as "notarget", "alltargets" and
--#     "target" respectively, except that they do nothing at all if the
--#     check fails.  They should only be used in groups, to construct a
--#     single test which is run on all targets but with variant options
--#     or expected output on some targets.  (For example, see
--#     gas/arm/inst.d and gas/arm/wince_inst.d.)
--#
--#   error: REGEX
--#     An error with message matching REGEX must be emitted for the test
--#     to pass.  The PROG, readelf, objdump, nm and objcopy options have
--#     no meaning and need not be supplied if this is present.  Multiple
--#     "error" directives append to the expected linker error message.
--#
--#   error_output: FILE
--#       Means the same as 'error', except the regular expression lines
--#       are contains in FILE.
--#
--#   warning: REGEX
--#     Expect a linker warning matching REGEX.  It is an error to issue
--#     both "error" and "warning".  Multiple "warning" directives
--#     append to the expected linker warning message.
--#
--#   warning_output: FILE
--#       Means the same as 'warning', except the regular expression
--#       lines are contains in FILE.
--#
--#   map: FILE
--#       Adding this option will cause the linker to generate a linker
--#       map file, using the -Map=MAPFILE command line option.  If
--#       there is no -Map=MAPFILE in the 'ld: FLAGS' then one will be
--#       added to the linker command line.  The contents of the
--#       generated MAPFILE are then compared against the regexp lines
--#       in FILE using `regexp_diff' (see below for details).
--#
--# Each option may occur at most once unless otherwise mentioned.
--#
--# After the option lines come regexp lines.  `run_dump_test' calls
--# `regexp_diff' to compare the output of the dumping tool against the
--# regexps in FILE.d.  `regexp_diff' is defined in binutils-common.exp;
--# see further comments there.
--#
--proc run_dump_test { name {extra_options {}} } {
--    global subdir srcdir
--    global OBJDUMP NM AS OBJCOPY READELF LD
--    global OBJDUMPFLAGS NMFLAGS ASFLAGS OBJCOPYFLAGS READELFFLAGS LDFLAGS
--    global host_triplet runtests
--    global env verbose
--    global ld_elf_shared_opt
--
--    if { [is_elf_format] && [check_shared_lib_support] } {
--      set ld_extra_opt "$ld_elf_shared_opt"
--    } else {
--      set ld_extra_opt ""
--    }
--
--    if [string match "*/*" $name] {
--      set file $name
--      set name [file tail $name]
--    } else {
--      set file "$srcdir/$subdir/$name"
--    }
--
--    if ![runtest_file_p $runtests $name] then {
--      return
--    }
--
--    set opt_array [slurp_options "${file}.d"]
--    if { $opt_array == -1 } {
--      perror "error reading options from $file.d"
--      unresolved $subdir/$name
--      return
--    }
--    set dumpfile tmpdir/dump.out
--    set run_ld 0
--    set run_objcopy 0
--    set objfile_names {}
--    set opts(as) {}
--    set opts(ld) {}
--    set opts(ld_after_inputfiles) {}
--    set opts(xfail) {}
--    set opts(target) {}
--    set opts(alltargets) {}
--    set opts(notarget) {}
--    set opts(skip) {}
--    set opts(anyskip) {}
--    set opts(noskip) {}
--    set opts(objdump) {}
--    set opts(nm) {}
--    set opts(objcopy) {}
--    set opts(readelf) {}
--    set opts(name) {}
--    set opts(PROG) {}
--    set opts(source) {}
--    set opts(dump) {}
--    set opts(error) {}
--    set opts(warning) {}
--    set opts(error_output) {}
--    set opts(warning_output) {}
--    set opts(objcopy_linked_file) {}
--    set opts(objcopy_objects) {}
--    set opts(map) {}
--
--    foreach i $opt_array {
--      set opt_name [lindex $i 0]
--      set opt_val [lindex $i 1]
--      if ![info exists opts($opt_name)] {
--          perror "unknown option $opt_name in file $file.d"
--          unresolved $subdir/$name
--          return
--      }
--
--      switch -- $opt_name {
--          xfail {}
--          target {}
--          alltargets {}
--          notarget {}
--          skip {}
--          anyskip {}
--          noskip {}
--          warning {}
--          error {}
--          source {
--              # Move any source-specific as-flags to a separate list to
--              # simplify processing.
--              if { [llength $opt_val] > 1 } {
--                  lappend asflags [lrange $opt_val 1 end]
--                  set opt_val [lindex $opt_val 0]
--              } else {
--                  lappend asflags {}
--              }
--
--                # Create the object file name based on nothing but the source
--                # file name.
--                set new_objfile \
--                    [concat tmpdir/[file rootname [file tail [lindex $opt_val 
0]]].o]
--                # But, sometimes, we have the exact same source filename in
--                # different directories (foo/src.s bar/src.s) which would lead
--                # us to try and create two src.o files.  We detect this
--                # conflict here, and instead create src.o and src1.o.
--                set j 0
--                while { [lsearch $objfile_names $new_objfile] != -1 } {
--                    incr j
--                    set new_objfile \
--                        [concat tmpdir/[file rootname [file tail  [lindex 
$opt_val 0]]]${j}.o]
--                }
--              lappend objfile_names $new_objfile
--          }
--          default {
--              if [string length $opts($opt_name)] {
--                  perror "option $opt_name multiply set in $file.d"
--                  unresolved $subdir/$name
--                  return
--              }
--
--              # A single "# ld:" with no options should do the right thing.
--              if { $opt_name == "ld" } {
--                  set run_ld 1
--              }
--              # Likewise objcopy_linked_file.
--              if { $opt_name == "objcopy_linked_file" } {
--                  set run_objcopy 1
--              }
--          }
--      }
--      if { $opt_name == "as" || $opt_name == "ld" } {
--          set opt_val [subst $opt_val]
--      }
--
--      # Append differently whether it's a message (without space) or
--      # an option or list (with space).
--      switch -- $opt_name {
--          warning -
--          error {
--              append opts($opt_name) $opt_val
--          }
--          default {
--              set opts($opt_name) [concat $opts($opt_name) $opt_val]
--          }
--      }
--    }
--
--    foreach i $extra_options {
--      set opt_name [lindex $i 0]
--      set opt_val [lindex $i 1]
--      if ![info exists opts($opt_name)] {
--          perror "unknown option $opt_name given in extra_opts"
--          unresolved $subdir/$name
--          return
--      }
--      # Add extra option to end of existing option, adding space
--      # if necessary.
--      if { ![regexp "warning|error" $opt_name]
--           && [string length $opts($opt_name)] } {
--          append opts($opt_name) " "
--      }
--      append opts($opt_name) $opt_val
--    }
--
--    foreach opt { as ld } {
--      regsub {\[big_or_little_endian\]} $opts($opt) \
--          [big_or_little_endian] opts($opt)
--    }
--
--    if { $opts(name) == "" } {
--      set testname "$subdir/$name"
--    } else {
--      set testname $opts(name)
--    }
--
--    # Decide early whether we should run the test for this target.
--    if { [llength $opts(noskip)] > 0 } {
--      set targmatch 0
--      foreach targ $opts(noskip) {
--          if [match_target $targ] {
--              set targmatch 1
--              break
--          }
--      }
--      if { $targmatch == 0 } {
--          return
--      }
--    }
--    foreach targ $opts(anyskip) {
--      if ![match_target $targ] {
--          return
--      }
--    }
--    foreach targ $opts(skip) {
--      if [match_target $targ] {
--          return
--      }
--    }
--    if { [llength $opts(target)] > 0 } {
--      set targmatch 0
--      foreach targ $opts(target) {
--          if [match_target $targ] {
--              set targmatch 1
--              break
--          }
--      }
--      if { $targmatch == 0 } {
--          unsupported $testname
--          return
--      }
--    }
--    foreach targ $opts(alltargets) {
--      if ![match_target $targ] {
--          unsupported $testname
--          return
--      }
--    }
--    foreach targ $opts(notarget) {
--      if [match_target $targ] {
--          unsupported $testname
--          return
--      }
--    }
--
--    set program ""
--    # It's meaningless to require an output-testing method when we
--    # expect an error.
--    if { $opts(error) == "" && $opts(error_output) == "" } {
--      if {$opts(PROG) != ""} {
--          switch -- $opts(PROG) {
--              objdump { set program objdump }
--              nm      { set program nm }
--              objcopy { set program objcopy }
--              readelf { set program readelf }
--              default
--              { perror "unrecognized program option $opts(PROG) in $file.d"
--                unresolved $testname
--                return }
--          }
--      } else {
--      # Guess which program to run, by seeing which option was specified.
--          foreach p {objdump objcopy nm readelf} {
--              if {$opts($p) != ""} {
--                  if {$program != ""} {
--                      perror "ambiguous dump program in $file.d"
--                      unresolved $testname
--                      return
--                  } else {
--                      set program $p
--                  }
--              }
--          }
--      }
--      if { $program == "" \
--                 && $opts(map) == "" \
--                 && $opts(warning) == "" \
--                 && $opts(warning_output) == "" \
--                 && $opts(error) == "" \
--                 && $opts(error_output) == "" } {
--          perror "dump program unspecified in $file.d"
--          unresolved $testname
--          return
--      }
--    }
--
--    if { $opts(source) == "" } {
--      set sourcefiles [list ${file}.s]
--      set asflags [list ""]
--      set objfile_names [list tmpdir/[file tail ${file}].o]
--    } else {
--      set sourcefiles {}
--      foreach sf $opts(source) {
--          if { [string match "/*" $sf] } {
--              lappend sourcefiles "$sf"
--          } else {
--              lappend sourcefiles "$srcdir/$subdir/$sf"
--          }
--      }
--    }
--
--    if { $opts(dump) == "" } {
--      set dfile ${file}.d
--    } else {
--      set dfile $srcdir/$subdir/$opts(dump)
--    }
--
--    # Time to setup xfailures.
--    foreach targ $opts(xfail) {
--      setup_xfail $targ
--    }
--
--    # Assemble each file.
--    set objfiles {}
--    for { set i 0 } { $i < [llength $sourcefiles] } { incr i } {
--      set sourcefile [lindex $sourcefiles $i]
--      set sourceasflags [lindex $asflags $i]
--      set run_objcopy_objects 0
--
--      if { [string match "*RUN_OBJCOPY*" $sourceasflags] } {
--          set run_objcopy_objects 1
--      }
--      regsub "RUN_OBJCOPY" $sourceasflags "" sourceasflags
--
--      set objfile [lindex $objfile_names $i]
--      catch "exec rm -f $objfile" exec_output
--      lappend objfiles $objfile
--      set cmd "$AS $ASFLAGS $opts(as) $sourceasflags -o $objfile $sourcefile"
--
--      send_log "$cmd\n"
--      set cmdret [remote_exec host [concat sh -c [list "$cmd 2>&1"]] "" 
"/dev/null" "ld.tmp"]
--      remote_upload host "ld.tmp"
--      set comp_output [prune_warnings [file_contents "ld.tmp"]]
--      remote_file host delete "ld.tmp"
--      remote_file build delete "ld.tmp"
--
--      if { [lindex $cmdret 0] != 0 || ![string match "" $comp_output] } then {
--          send_log -- "$comp_output\n"
--          verbose "$comp_output" 3
--
--          set exitstat "succeeded"
--          if { $cmdret != 0 } { set exitstat "failed" }
--          verbose -log "$exitstat with: <$comp_output>"
--          fail $testname
--          return
--      }
--
--      if { $run_objcopy_objects } {
--          set cmd "$OBJCOPY $opts(objcopy_objects) $objfile"
--
--          send_log "$cmd\n"
--          set cmdret [remote_exec host [concat sh -c [list "$cmd 2>&1"]] \
--                      "" "/dev/null" "objcopy.tmp"]
--          remote_upload host "objcopy.tmp"
--          set comp_output [prune_warnings [file_contents "objcopy.tmp"]]
--          remote_file host delete "objcopy.tmp"
--          remote_file build delete "objcopy.tmp"
--
--          if { [lindex $cmdret 0] != 0 \
--                || ![string match "" $comp_output] } {
--              send_log -- "$comp_output\n"
--              verbose "$comp_output" 3
--
--              set exitstat "succeeded"
--              if { $cmdret != 0 } { set exitstat "failed" }
--              verbose -log "$exitstat with: <$comp_output>"
--              fail $testname
--              return
--          }
--      }
--    }
--
--    if { (($opts(warning) != "") && ($opts(error) != "")) \
--       || (($opts(warning) != "") && ($opts(error_output) != "")) \
--       || (($opts(warning) != "") && ($opts(warning_output) != "")) \
--       || (($opts(error) != "") && ($opts(warning_output) != "")) \
--       || (($opts(error) != "") && ($opts(error_output) != "")) \
--       || (($opts(warning_output) != "") && ($opts(error_output) != "")) } {
--      perror "$testname: bad mix of warning, error, warning_output, and 
error_output test-directives"
--      unresolved $testname
--      return
--    }
--
--    set check_ld(source) ""
--    set check_ld(terminal) 0
--    if { $opts(error) != "" \
--         || $opts(warning) != "" \
--         || $opts(error_output) != "" \
--         || $opts(warning_output) != "" } {
--
--        if { $opts(error) != "" || $opts(error_output) != "" } {
--            set check_ld(terminal) 1
--        } else {
--            set check_ld(terminal) 0
--        }
--
--        if { $opts(error) != "" || $opts(warning) != "" } {
--            set check_ld(source) "regex"
--            if { $opts(error) != "" } {
--                set check_ld(regex) $opts(error)
--            } else {
--                set check_ld(regex) $opts(warning)
--            }
--        } else {
--            set check_ld(source) "file"
--            if { $opts(error_output) != "" } {
--                set check_ld(file) $opts(error_output)
--            } else {
--                set check_ld(file) $opts(warning_output)
--            }
--        }
--    }
--
--    # Perhaps link the file(s).
--    if { $run_ld } {
--      set objfile "tmpdir/dump"
--      catch "exec rm -f $objfile" exec_output
--
--      # Add -L$srcdir/$subdir so that the linker command can use
--      # linker scripts in the source directory.
--      set cmd "$LD --hash-style=sysv --no-warn-shared-textrel $ld_extra_opt 
$LDFLAGS -L$srcdir/$subdir \
--                 $opts(ld) -o $objfile $objfiles $opts(ld_after_inputfiles)"
--
--        # If needed then check for, or add a -Map option.
--        set mapfile ""
--        if { $opts(map) != "" } then {
--            if { [regexp -- "-Map=(\[^ \]+)" $cmd all mapfile] } then {
--                # Found existing mapfile option
--                verbose -log "Existing mapfile '$mapfile' found"
--            } else {
--                # No mapfile option.
--                set mapfile "tmpdir/dump.map"
--                verbose -log "Adding mapfile '$mapfile'"
--                set cmd "$cmd -Map=$mapfile"
--            }
--        }
--
--      send_log "$cmd\n"
--      set cmdret [remote_exec host [concat sh -c [list "$cmd 2>&1"]] "" 
"/dev/null" "ld.tmp"]
--      remote_upload host "ld.tmp"
--      set comp_output [file_contents "ld.tmp"]
--      remote_file host delete "ld.tmp"
--      remote_file build delete "ld.tmp"
--      set cmdret [lindex $cmdret 0]
--
--      if { $cmdret == 0 && $run_objcopy } {
--          set infile $objfile
--          set objfile "tmpdir/dump1"
--          remote_file host delete $objfile
--
--          # Note that we don't use OBJCOPYFLAGS here; any flags must be
--          # explicitly specified.
--          set cmd "$OBJCOPY $opts(objcopy_linked_file) $infile $objfile"
--
--          send_log "$cmd\n"
--          set cmdret [remote_exec host [concat sh -c [list "$cmd 2>&1"]] "" 
"/dev/null" "ld.tmp"]
--          remote_upload host "ld.tmp"
--          append comp_output [file_contents "ld.tmp"]
--          remote_file host delete "ld.tmp"
--          remote_file build delete "ld.tmp"
--          set cmdret [lindex $cmdret 0]
--      }
--
--      regsub "\n$" $comp_output "" comp_output
--      if { $cmdret != 0 || $comp_output != "" || $check_ld(source) != "" } 
then {
--          set exitstat "succeeded"
--          if { $cmdret != 0 } { set exitstat "failed" }
--
--            if { $check_ld(source) == "regex" } {
--                verbose -log "$exitstat with: <$comp_output>, expected: 
<$check_ld(regex)>"
--            } elseif { $check_ld(source) == "file" } {
--                verbose -log "$exitstat with: <$comp_output>, expected in 
file $check_ld(file)"
--                set_file_contents "tmpdir/ld.messages" "$comp_output"
--            } else {
--                verbose -log "$exitstat with: <$comp_output>, no expected 
output"
--            }
--          send_log -- "$comp_output\n"
--          verbose "$comp_output" 3
--
--          if { (($check_ld(source) == "") == ($comp_output == "")) \
--                 && (($cmdret == 0) == ($check_ld(terminal) == 0)) \
--                 && ((($check_ld(source) == "regex") \
--                      && ($check_ld(regex) == "") == ($comp_output == "") \
--                      && [regexp -- $check_ld(regex) $comp_output]) \
--                     || (($check_ld(source) == "file") \
--                         && (![regexp_diff "tmpdir/ld.messages" 
"$srcdir/$subdir/$check_ld(file)"]))) } {
--                # We have the expected output from ld.
--              if { $check_ld(terminal) || $program == "" } {
--                  pass $testname
--                  return
--              }
--          } else {
--              fail $testname
--              return
--          }
--      }
--
--        if { $opts(map) != "" } then {
--            # Check the map file matches.
--            set map_pattern_file $srcdir/$subdir/$opts(map)
--            verbose -log "Compare '$mapfile' against '$map_pattern_file'"
--            if { [regexp_diff $mapfile $map_pattern_file] } then {
--                fail "$testname (map file check)"
--            } else {
--                pass "$testname (map file check)"
--            }
--
--            if { $program == "" } then {
--                return
--            }
--        }
--    } else {
--      set objfile [lindex $objfiles 0]
--    }
--
--    # We must not have expected failure if we get here.
--    if { $opts(error) != "" } {
--      fail $testname
--      return
--    }
--
--    set progopts1 $opts($program)
--    eval set progopts \$[string toupper $program]FLAGS
--    eval set binary \$[string toupper $program]
--
--    if { ![is_remote host] && [which $binary] == 0 } {
--      untested $testname
--      return
--    }
--
--    if { $progopts1 == "" } { set $progopts1 "-r" }
--    verbose "running $binary $progopts $progopts1" 3
--
--    # Objcopy, unlike the other two, won't send its output to stdout,
--    # so we have to run it specially.
--    set cmd "$binary $progopts $progopts1 $objfile > $dumpfile"
--    if { $program == "objcopy" } {
--      set cmd "$binary $progopts $progopts1 $objfile $dumpfile"
--    }
--
--    # Ensure consistent sorting of symbols
--    if {[info exists env(LC_ALL)]} {
--      set old_lc_all $env(LC_ALL)
--    }
--    set env(LC_ALL) "C"
--    send_log "$cmd\n"
--    set cmdret [remote_exec host [concat sh -c [list "$cmd 2>ld.tmp"]] "" 
"/dev/null"]
--    set cmdret [lindex $cmdret 0]
--    remote_upload host "ld.tmp"
--    set comp_output [prune_warnings [file_contents "ld.tmp"]]
--    remote_file host delete "ld.tmp"
--    remote_file build delete "ld.tmp"
--    if {[info exists old_lc_all]} {
--      set env(LC_ALL) $old_lc_all
--    } else {
--      unset env(LC_ALL)
--    }
--    if { $cmdret != 0 || $comp_output != "" } {
--      send_log "exited abnormally with $cmdret, output:$comp_output\n"
--      fail $testname
--      return
--    }
--
--    if { $verbose > 2 } then { verbose "output is [file_contents $dumpfile]" 
3 }
--    if { [regexp_diff $dumpfile "${dfile}"] } then {
--      fail $testname
--      if { $verbose == 2 } then { verbose "output is [file_contents 
$dumpfile]" 2 }
--      return
--    }
--
--    pass $testname
--}
--
--proc slurp_options { file } {
--    # If options_regsub(foo) is set to {a b}, then the contents of a
--    # "#foo:" line will have regsub -all applied to replace a with b.
--    global options_regsub
--
--    if [catch { set f [open $file r] } x] {
--      #perror "couldn't open `$file': $x"
--      perror "$x"
--      return -1
--    }
--    set opt_array {}
--    # whitespace expression
--    set ws  {[        ]*}
--    set nws {[^       ]*}
--    # whitespace is ignored anywhere except within the options list;
--    # option names are alphabetic plus underscore only.
--    set pat "^#${ws}(\[a-zA-Z_\]*)$ws:${ws}(.*)$ws\$"
--    while { [gets $f line] != -1 } {
--      set line [string trim $line]
--      # Whitespace here is space-tab.
--      if [regexp $pat $line xxx opt_name opt_val] {
--          # match!
--          if [info exists options_regsub($opt_name)] {
--              set subst $options_regsub($opt_name)
--              regsub -all -- [lindex $subst 0] $opt_val [lindex $subst 1] \
--                  opt_val
--          }
--          lappend opt_array [list $opt_name $opt_val]
--      } else {
--          break
--      }
--    }
--    close $f
--    return $opt_array
--}
--
--proc file_contents { filename } {
--    set file [open $filename r]
--    set contents [read $file]
--    close $file
--    return $contents
--}
--
--proc set_file_contents { filename contents } {
--    set file [open $filename w]
--    puts $file "$contents"
--    close $file
--}
--
- # Create an archive using ar
- #
- proc ar_simple_create { ar aropts target objects } {
--- 
-2.26.2
-

diff --git 
a/9999/0015-Gentoo-Adapt-generic-test-library-to-our-linker-sett.patch 
b/9999/0015-Gentoo-Adapt-generic-test-library-to-our-linker-sett.patch
deleted file mode 100644
index 8ac5654..0000000
--- a/9999/0015-Gentoo-Adapt-generic-test-library-to-our-linker-sett.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 782c17148cc2a663778c03bb6f78412e79593df4 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= <[email protected]>
-Date: Sun, 10 May 2020 20:24:33 +0300
-Subject: [PATCH 15/16] Gentoo: Adapt generic test library to our linker
- settings
-
----
- binutils/testsuite/lib/binutils-common.exp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/binutils/testsuite/lib/binutils-common.exp 
b/binutils/testsuite/lib/binutils-common.exp
-index b9e3c6d817..bb4ef987b3 100644
---- a/binutils/testsuite/lib/binutils-common.exp
-+++ b/binutils/testsuite/lib/binutils-common.exp
-@@ -1125,7 +1125,7 @@ proc run_dump_test { name {extra_options {}} } {
- 
-             # Add -L$srcdir/$subdir so that the linker command can use
-             # linker scripts in the source directory.
--            set cmd "$LD $ld_extra_opt $LDFLAGS -L$srcdir/$subdir \
-+            set cmd "$LD --hash-style=sysv --no-warn-shared-textrel 
$ld_extra_opt $LDFLAGS -L$srcdir/$subdir \
-                  $opts(ld) -o $objfile $objfiles $opts(ld_after_inputfiles)"
- 
-             # If needed then check for, or add a -Map option.
--- 
-2.26.2
-

diff --git 
a/9999/0016-Gentoo-Fix-regexp-of-hilarious-ld-detection-heuristi.patch 
b/9999/0016-Gentoo-Fix-regexp-of-hilarious-ld-detection-heuristi.patch
deleted file mode 100644
index be9f677..0000000
--- a/9999/0016-Gentoo-Fix-regexp-of-hilarious-ld-detection-heuristi.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 6e0ff9dfef58d03eacc05ef381ef1d5fc7ad072d Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= <[email protected]>
-Date: Sun, 10 May 2020 20:59:05 +0300
-Subject: [PATCH 16/16] Gentoo: Fix regexp of hilarious ld detection heuristic
-
-The new linker used to be called as "ld/ld-new" but is now called as "./ld-new"
-Test for just "ld-new" and hope that the compiler binary never looks like this.
----
- ld/testsuite/lib/ld-lib.exp | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
-index ae72f21d72..0b945b539d 100644
---- a/ld/testsuite/lib/ld-lib.exp
-+++ b/ld/testsuite/lib/ld-lib.exp
-@@ -200,9 +200,9 @@ proc default_ld_link { ld target objects } {
-     # with $ld as parameter. If we want to change the default behaviour, we
-     # need to take the different option formats into account.
-     # We check the $ld parameter for
--    # - .*ld/ld-new    -> we're working with the new linker
-+    # - ld-new         -> we're working with the new linker
-     # - otherwise      -> we're likely working with the system compiler
--    if {[regexp {ld/ld-new$} $ld]} {
-+    if {[regexp {ld-new$} $ld]} {
-       set gentoosysv "--hash-style=sysv --no-warn-shared-textrel"
-     } else {
-       set gentoosysv "-Wl,--hash-style=sysv -Wl,--no-warn-shared-textrel"
--- 
-2.26.2
-

Reply via email to