summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '9999/0014-Gentoo-Remove-block-mistakenly-duplicated-in-1222895.patch')
-rw-r--r--9999/0014-Gentoo-Remove-block-mistakenly-duplicated-in-1222895.patch777
1 files changed, 777 insertions, 0 deletions
diff --git a/9999/0014-Gentoo-Remove-block-mistakenly-duplicated-in-1222895.patch b/9999/0014-Gentoo-Remove-block-mistakenly-duplicated-in-1222895.patch
new file mode 100644
index 0000000..20dbdd1
--- /dev/null
+++ b/9999/0014-Gentoo-Remove-block-mistakenly-duplicated-in-1222895.patch
@@ -0,0 +1,777 @@
+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
+