public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Andreas K. Hüttel" <dilfridge@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/toolchain/binutils-patches:master commit in: 9999/
Date: Tue, 19 May 2020 21:12:27 +0000 (UTC)	[thread overview]
Message-ID: <1589922717.b3b149f3d1d004f29ce9b3fdf1a636aae92c5d6f.dilfridge@gentoo> (raw)

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 <vapier@gentoo.org>
 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?= <dilfridge@gentoo.org>
 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 <vapier@gentoo.org>
 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 <vapier@gentoo.org>
 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 <vapier@gentoo.org>
 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?= <dilfridge@gentoo.org>
-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 <slyfox@gentoo.org>
 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?= <dilfridge@gentoo.org>
-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?= <dilfridge@gentoo.org>
 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 <vapier@gentoo.org>

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 <slyfox@gentoo.org>
 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?= <dilfridge@gentoo.org>
-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?= <dilfridge@gentoo.org>
+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?= <dilfridge@gentoo.org>
-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?= <dilfridge@gentoo.org>
-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?= <dilfridge@gentoo.org>
-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?= <dilfridge@gentoo.org>
-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?= <dilfridge@gentoo.org>
-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	other threads:[~2020-05-19 21:12 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-19 21:12 Andreas K. Hüttel [this message]
  -- strict thread matches above, loose matches on Subject: below --
2020-07-25 12:20 [gentoo-commits] proj/toolchain/binutils-patches:master commit in: 9999/ Andreas K. Hüttel
2020-07-25 12:23 Andreas K. Hüttel
2020-07-25 12:26 Andreas K. Hüttel
2020-07-25 17:27 Andreas K. Hüttel
2021-07-06  7:04 Sergei Trofimovich
2021-07-06  7:04 Sergei Trofimovich
2021-07-06  7:04 Sergei Trofimovich
2021-07-20 19:50 Andreas K. Hüttel
2021-07-20 19:53 Andreas K. Hüttel
2021-07-24 20:57 Andreas K. Hüttel
2021-07-30 23:25 Andreas K. Hüttel
2021-08-17 20:07 Andreas K. Hüttel
2022-01-15 22:27 Andreas K. Hüttel
2022-07-29  7:55 WANG Xuerui
2022-10-08 12:15 WANG Xuerui
2023-01-02 23:50 Andreas K. Hüttel
2023-01-03 23:03 Andreas K. Hüttel
2023-01-05 16:21 Andreas K. Hüttel
2023-01-05 16:22 Andreas K. Hüttel
2023-04-02 11:44 Andreas K. Hüttel
2023-06-30  9:21 WANG Xuerui
2023-07-28 16:23 Andreas K. Hüttel
2023-07-30 14:49 Andreas K. Hüttel
2023-10-27  0:44 Sam James
2023-10-27  0:44 Sam James
2024-06-28 21:48 Andreas K. Hüttel
2024-06-29 16:32 Andreas K. Hüttel
2024-06-29 16:32 Andreas K. Hüttel
2024-06-29 17:05 Andreas K. Hüttel
2024-08-03 22:43 Andreas K. Hüttel
2024-12-21  0:09 Sam James
2024-12-24  6:27 Sam James
2024-12-26  1:21 Sam James
2025-01-01 14:05 Sam James
2025-01-02 13:48 Sam James
2025-01-13  6:11 Sam James
2025-01-14  2:09 Sam James
2025-02-03 18:02 Andreas K. Hüttel
2025-03-06  4:54 Sam James
2025-03-06 12:54 Sam James

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1589922717.b3b149f3d1d004f29ce9b3fdf1a636aae92c5d6f.dilfridge@gentoo \
    --to=dilfridge@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox