summaryrefslogtreecommitdiff
path: root/9999
diff options
context:
space:
mode:
authorAndreas K. Hüttel <dilfridge@gentoo.org>2020-05-20 00:10:06 +0300
committerAndreas K. Hüttel <dilfridge@gentoo.org>2020-05-20 00:11:57 +0300
commitb3b149f3d1d004f29ce9b3fdf1a636aae92c5d6f (patch)
treea2acbde35244a703019532a057270e41ea88da65 /9999
parentSort away generic patches (diff)
downloadbinutils-patches-b3b149f3d1d004f29ce9b3fdf1a636aae92c5d6f.tar.gz
binutils-patches-b3b149f3d1d004f29ce9b3fdf1a636aae92c5d6f.tar.bz2
binutils-patches-b3b149f3d1d004f29ce9b3fdf1a636aae92c5d6f.zip
Consolidate patches
Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
Diffstat (limited to '9999')
-rw-r--r--9999/0001-Gentoo-ld-always-warn-about-textrels-in-files.patch2
-rw-r--r--9999/0002-Gentoo-Add-an-option-no-warn-shared-textrel-self-exp.patch2
-rw-r--r--9999/0003-Gentoo-gold-ld-add-support-for-poisoned-system-direc.patch2
-rw-r--r--9999/0004-Gentoo-libiberty-install-PIC-version-of-libiberty.a.patch2
-rw-r--r--9999/0005-Gentoo-opcodes-link-against-libbfd.la-for-rpath-deps.patch2
-rw-r--r--9999/0006-Gentoo-Pass-hash-style-sysv-to-ld-in-its-testsuite.patch807
-rw-r--r--9999/0006-Gentoo-add-with-extra-soversion-suffix-option.patch (renamed from 9999/0011-Gentoo-add-with-extra-soversion-suffix-option.patch)4
-rw-r--r--9999/0007-Gentoo-Pass-no-warn-shared-textrel-to-ld-in-its-test.patch47
-rw-r--r--9999/0007-Gentoo-ld-enable-new-dtags-by-default-for-linux-gnu-.patch (renamed from 9999/0013-Gentoo-ld-enable-new-dtags-by-default-for-linux-gnu-.patch)4
-rw-r--r--9999/0008-Gentoo-Restore-TEXTREL-warnings-for-non-shared-objec.patch19
-rw-r--r--9999/0009-Gentoo-Fix-test-for-precise-textrel-warning-message-.patch24
-rw-r--r--9999/0009-Gentoo-Pass-hash-style-sysv-and-no-warn-shared-textr.patch62
-rw-r--r--9999/0010-Gentoo-Fix-textrel-warning-format-test.patch22
-rw-r--r--9999/0012-no-patch-Gentoo-Add-patch-tarball-generation-script.patch217
-rw-r--r--9999/0014-Gentoo-Remove-block-mistakenly-duplicated-in-1222895.patch777
-rw-r--r--9999/0015-Gentoo-Adapt-generic-test-library-to-our-linker-sett.patch26
-rw-r--r--9999/0016-Gentoo-Fix-regexp-of-hilarious-ld-detection-heuristi.patch30
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
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
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
-