This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch] [binutils][testsuite] Allow multiple lines of "as" in testsuite.


On 21/02/19 15:49, Nick Clifton wrote:
> Hi Matthew,
> 
>> Great, would the attached extra comments be OK?
> 
> In theory yes.  In practice no.  Actually it is not the extra comments
> that are the problem, but the original patch.  Now that I have tested
> it locally, I found that it introduces some new testsuite failures. :-(
> 
> For example:
> 
> Checking Binutils in: s390-linux ... GAS REGRESSION: s390x opcode
> 
> Checking Binutils in: mips64-linux ... LD REGRESSION: ld-mips-elf/no-shared-1-n64
>    LD REGRESSION: MIPS ELF got reloc n64
>    LD REGRESSION: MIPS ELF xgot reloc n64
>    LD REGRESSION: MIPS rel32 o32
>    LD REGRESSION: MIPS rel64 n64
>    LD REGRESSION: PIC and non-PIC test 3
>    LD REGRESSION: PIC and non-PIC test 4
>   
> (These failures also show up when testing a toolchain configured with
>   mipsel-linux-gnu and also with mipsisa32el-linux-gnu).
> 
> The worst affected toolchain however is the PowerPC:
> 
>   powerpc-ibm-aix5.2.0 ... LD ERROR: powerpc-ibm-aix5.2.0-readelf does not exist
>    LD REGRESSION: --gc-sections -r without -e
>    LD ERROR: powerpc-ibm-aix5.2.0-as does not exist
>    LD ERROR: /work/sources/binutils/current/ld/testsuite/ld-libs/lib-1.s: assembly failed
>    LD ERROR: powerpc-ibm-aix5.2.0-as does not exist
>    LD ERROR: /work/sources/binutils/current/ld/testsuite/ld-libs/lib-2.s: assembly failed
>    LD ERROR: powerpc-ibm-aix5.2.0-as does not exist
>    LD ERROR: /work/sources/binutils/current/ld/testsuite/ld-misc/start.s: assembly failed
>    LD ERROR: powerpc-ibm-aix5.2.0-as does not exist
>    [...and so on, there are lots more like this...]
> 
> Please could you have a look at these.  I suspect that the S390 and MIPS failures
> might be due to a variable being set by a previous test which is not cleared before
> the failing test runs.  (But this is just a guess).  The PowerPC ones all appear to
> be because the new code is not checking for the presence of a locally built assembler
> rather than one installed into the execution path.  But again that is just off the
> top of my head.
> 
> Cheers
>    Nick
> 

Thanks for catching that -- I didn't think to look into other 
configurations (oops!)

It looks like the problem for the mips toolchains was due to me not 
handling multiple extra "as" flags passed directly in the TCL function, 
and this is an easy fix.


I'm having trouble reproducing the PowerPC errors, what was the target 
triple?
You mentioned it might be a problem with choosing which assembler to use 
-- does that mean you have one on the execution pass?

I've attached the patch with the fix for the mips toolchains, hopefully 
that would fix the PowerPC problems, but I'll have a harder look at 
reproducing the PowerPC problems tomorrow.


Cheers,
Matthew
diff --git a/binutils/testsuite/lib/binutils-common.exp b/binutils/testsuite/lib/binutils-common.exp
index bbbbfbe8adaeb2337f997d15e226fc28f0eb83c1..9171ad68da28cf76f625bb6f732b94d787417324 100644
--- a/binutils/testsuite/lib/binutils-common.exp
+++ b/binutils/testsuite/lib/binutils-common.exp
@@ -523,6 +523,13 @@ if ![string length [info proc prune_warnings]] {
 #	When assembling, pass FLAGS to the assembler.
 #	If assembling several files, you can pass different assembler
 #	options in the "source" directives.  See below.
+#       Multiple instances of this directive tells run_dump_test to run the test
+#       multiple times -- one time with each set of flags provided.
+#       Each instance will run exactly as a file with a single "as" line, it is
+#       not possible to condition any behaviour on which set of "as" flags is
+#       used.  That means that the "source" specific options are appended to
+#       the "as" flags for their corresponding files, and any extra processing
+#       (e.g. with "ld" and "objcopy") is repeated for each test.
 #
 #   ld: FLAGS
 #	Link assembled files using FLAGS, in the order of the "source"
@@ -690,6 +697,8 @@ proc run_dump_test { name {extra_options {}} } {
     set opts(anyskip) {}
     set opts(ar) {}
     set opts(as) {}
+    set as_final_flags {}
+    set as_additional_flags {}
     set opts(dump) {}
     set opts(elfedit) {}
     set opts(error) {}
@@ -781,7 +790,9 @@ proc run_dump_test { name {extra_options {}} } {
 		lappend objfile_names $new_objfile
 	    }
 	    default {
-		if { !$in_extra && [string length $opts($opt_name)] } {
+		if { !$in_extra
+                     && [string length $opts($opt_name)]
+                     && $opt_name != "as" } {
 		    perror "option $opt_name multiply set in $file.d"
 		    unresolved $subdir/$name
 		    return
@@ -805,16 +816,35 @@ proc run_dump_test { name {extra_options {}} } {
 	    error {
 		append opts($opt_name) $opt_val
 	    }
+            as {
+                if { $in_extra } {
+                    set as_additional_flags [concat $as_additional_flags $opt_val]
+                } else {
+                    lappend opts(as) $opt_val
+                }
+            }
 	    default {
 		set opts($opt_name) [concat $opts($opt_name) $opt_val]
 	    }
 	}
     }
 
-    foreach opt { as ld } {
-	regsub {\[big_or_little_endian\]} $opts($opt) \
-	    [big_or_little_endian] opts($opt)
+    # Ensure there is something in $opts(as) for the lmap below.
+    if { [llength $opts(as)] == 0 } {
+        set opts(as) [list " "]
     }
+    set as_final_flags [lmap x $opts(as) {
+        if { [string length $x] && [string length $as_additional_flags] } {
+            append x " "
+        }
+        append x $as_additional_flags
+        regsub {\[big_or_little_endian\]} $x \
+            [big_or_little_endian] x
+        expr {$x}
+    }]
+
+    regsub {\[big_or_little_endian\]} $opts(ld) \
+        [big_or_little_endian] opts(ld)
 
     if { $opts(name) == "" } {
 	set testname "$subdir/$name"
@@ -947,334 +977,336 @@ proc run_dump_test { name {extra_options {}} } {
 	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
-
-	if { $opts(as) == "binary" } {
-	    while {[file type $sourcefile] eq "link"} {
-		set newfile [file readlink $sourcefile]
-		if {[string index $newfile 0] ne "/"} {
-		    set newfile [file dirname $sourcefile]/$newfile
-		}
-		set sourcefile $newfile
-	    }
-	    set newfile [remote_download host $sourcefile $objfile]
-	    set cmdret 0
-	    if { $newfile == "" } {
-		set cmdret 1
-	    }
-	} else {
-	    if { [istarget "hppa*-*-*"] \
-		     && ![istarget "*-*-linux*"] \
-		     && ![istarget "*-*-netbsd*" ] } {
-		set cmd "sed -e 's/^\[	 \]*\.comm \\(\[^,\]*\\),\\(.*\\)/\\1 .comm \\2/' < $sourcefile > tmpdir/asm.s"
-		send_log "$cmd\n"
-		set cmdret [remote_exec host [concat sh -c [list "$cmd"]]]
-		set cmdret [lindex $cmdret 0]
-		if { $cmdret != 0 } {
-		    perror "sed failure"
-		    unresolved $testname
-		    return
-		}
-		set sourcefile tmpdir/asm.s
-	    }
-	    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" "dump.tmp"]
-	    remote_upload host "dump.tmp"
-	    set comp_output [prune_warnings [file_contents "dump.tmp"]]
-	    remote_file host delete "dump.tmp"
-	    remote_file build delete "dump.tmp"
-	    set cmdret [lindex $cmdret 0]
-	}
-	if { $cmdret == 0 && $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" "dump.tmp"]
-	    remote_upload host "dump.tmp"
-	    append comp_output [prune_warnings [file_contents "dump.tmp"]]
-	    remote_file host delete "dump.tmp"
-	    remote_file build delete "dump.tmp"
-	    set cmdret [lindex $cmdret 0]
-	}
-    }
-
-    # Perhaps link the file(s).
-    if { $cmdret == 0 && $run_ld } {
-	set objfile "tmpdir/dump"
-	catch "exec rm -f $objfile" exec_output
-
-	set ld_extra_opt ""
-	global ld
-	set ld "$LD"
-	if { [is_elf_format] && [check_shared_lib_support] } {
-	    set ld_extra_opt "$ld_elf_shared_opt"
-	}
-
-	# 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 \
+    foreach as_flags $as_final_flags {
+        # 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
+
+            if { $as_flags == "binary" } {
+                while {[file type $sourcefile] eq "link"} {
+                    set newfile [file readlink $sourcefile]
+                    if {[string index $newfile 0] ne "/"} {
+                        set newfile [file dirname $sourcefile]/$newfile
+                    }
+                    set sourcefile $newfile
+                }
+                set newfile [remote_download host $sourcefile $objfile]
+                set cmdret 0
+                if { $newfile == "" } {
+                    set cmdret 1
+                }
+            } else {
+                if { [istarget "hppa*-*-*"] \
+                         && ![istarget "*-*-linux*"] \
+                         && ![istarget "*-*-netbsd*" ] } {
+                    set cmd "sed -e 's/^\[	 \]*\.comm \\(\[^,\]*\\),\\(.*\\)/\\1 .comm \\2/' < $sourcefile > tmpdir/asm.s"
+                    send_log "$cmd\n"
+                    set cmdret [remote_exec host [concat sh -c [list "$cmd"]]]
+                    set cmdret [lindex $cmdret 0]
+                    if { $cmdret != 0 } {
+                        perror "sed failure"
+                        unresolved $testname
+                        continue
+                    }
+                    set sourcefile tmpdir/asm.s
+                }
+                set cmd "$AS $ASFLAGS $as_flags $sourceasflags -o $objfile $sourcefile"
+
+                send_log "$cmd\n"
+                set cmdret [remote_exec host [concat sh -c [list "$cmd 2>&1"]] "" "/dev/null" "dump.tmp"]
+                remote_upload host "dump.tmp"
+                set comp_output [prune_warnings [file_contents "dump.tmp"]]
+                remote_file host delete "dump.tmp"
+                remote_file build delete "dump.tmp"
+                set cmdret [lindex $cmdret 0]
+            }
+            if { $cmdret == 0 && $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" "dump.tmp"]
+                remote_upload host "dump.tmp"
+                append comp_output [prune_warnings [file_contents "dump.tmp"]]
+                remote_file host delete "dump.tmp"
+                remote_file build delete "dump.tmp"
+                set cmdret [lindex $cmdret 0]
+            }
+        }
+
+        # Perhaps link the file(s).
+        if { $cmdret == 0 && $run_ld } {
+            set objfile "tmpdir/dump"
+            catch "exec rm -f $objfile" exec_output
+
+            set ld_extra_opt ""
+            global ld
+            set ld "$LD"
+            if { [is_elf_format] && [check_shared_lib_support] } {
+                set ld_extra_opt "$ld_elf_shared_opt"
+            }
+
+            # 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 \
 		   $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" "dump.tmp"]
-	remote_upload host "dump.tmp"
-	append comp_output [file_contents "dump.tmp"]
-	remote_file host delete "dump.tmp"
-	remote_file build delete "dump.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" "dump.tmp"]
-	    remote_upload host "dump.tmp"
-	    append comp_output [file_contents "dump.tmp"]
-	    remote_file host delete "dump.tmp"
-	    remote_file build delete "dump.tmp"
-	    set cmdret [lindex $cmdret 0]
-	}
-    } else {
-	set objfile [lindex $objfiles 0]
-    }
-
-    if { $cmdret == 0 && $opts(PROG) != "" } {
-	set destopt ${copyfile}.o
-	switch -- $opts(PROG) {
-	    ar		{ set program ar }
-	    elfedit	{
-		set program elfedit
-		set destopt ""
-	    }
-	    nm		{ set program nm }
-	    objcopy	{ set program objcopy }
-	    ranlib	{ set program ranlib }
-	    strings	{ set program strings }
-	    strip	{
-		set program strip
-		set destopt "-o $destopt"
-	    }
-	    default	{
-		perror "unrecognized PROG option $opts(PROG) in $file.d"
-		unresolved $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
-	}
-
-	verbose "running $binary $progopts $progopts1" 3
-	set cmd "$binary $progopts $progopts1 $objfile $destopt"
-
-	# 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>dump.tmp"]] "" "/dev/null"]
-	set cmdret [lindex $cmdret 0]
-	remote_upload host "dump.tmp"
-	append comp_output [prune_warnings [file_contents "dump.tmp"]]
-	remote_file host delete "dump.tmp"
-	remote_file build delete "dump.tmp"
-	if {[info exists old_lc_all]} {
-	    set env(LC_ALL) $old_lc_all
-	} else {
-	    unset env(LC_ALL)
-	}
-	if { $destopt != "" } {
-	    set objfile ${copyfile}.o
-	}
+            # 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" "dump.tmp"]
+            remote_upload host "dump.tmp"
+            append comp_output [file_contents "dump.tmp"]
+            remote_file host delete "dump.tmp"
+            remote_file build delete "dump.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" "dump.tmp"]
+                remote_upload host "dump.tmp"
+                append comp_output [file_contents "dump.tmp"]
+                remote_file host delete "dump.tmp"
+                remote_file build delete "dump.tmp"
+                set cmdret [lindex $cmdret 0]
+            }
+        } else {
+            set objfile [lindex $objfiles 0]
+        }
+
+        if { $cmdret == 0 && $opts(PROG) != "" } {
+            set destopt ${copyfile}.o
+            switch -- $opts(PROG) {
+                ar		{ set program ar }
+                elfedit	{
+                    set program elfedit
+                    set destopt ""
+                }
+                nm		{ set program nm }
+                objcopy	{ set program objcopy }
+                ranlib	{ set program ranlib }
+                strings	{ set program strings }
+                strip	{
+                    set program strip
+                    set destopt "-o $destopt"
+                }
+                default	{
+                    perror "unrecognized PROG option $opts(PROG) in $file.d"
+                    unresolved $testname
+                    continue
+                }
+            }
+
+            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
+                continue
+            }
+
+            verbose "running $binary $progopts $progopts1" 3
+            set cmd "$binary $progopts $progopts1 $objfile $destopt"
+
+            # 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>dump.tmp"]] "" "/dev/null"]
+            set cmdret [lindex $cmdret 0]
+            remote_upload host "dump.tmp"
+            append comp_output [prune_warnings [file_contents "dump.tmp"]]
+            remote_file host delete "dump.tmp"
+            remote_file build delete "dump.tmp"
+            if {[info exists old_lc_all]} {
+                set env(LC_ALL) $old_lc_all
+            } else {
+                unset env(LC_ALL)
+            }
+            if { $destopt != "" } {
+                set objfile ${copyfile}.o
+            }
+        }
+
+        set want_out(source) ""
+        set want_out(terminal) 0
+        if { $err_warn } {
+            if { $opts(error) != "" || $opts(error_output) != "" } {
+                set want_out(terminal) 1
+            }
+
+            if { $opts(error) != "" || $opts(warning) != "" } {
+                set want_out(source) "regex"
+                if { $opts(error) != "" } {
+                    set want_out(regex) $opts(error)
+                } else {
+                    set want_out(regex) $opts(warning)
+                }
+            } else {
+                set want_out(source) "file"
+                if { $opts(error_output) != "" } {
+                    set want_out(file) $opts(error_output)
+                } else {
+                    set want_out(file) $opts(warning_output)
+                }
+            }
+        }
+
+        regsub "\n$" $comp_output "" comp_output
+        if { $cmdret != 0 || $comp_output != "" || $want_out(source) != "" } {
+            set exitstat "succeeded"
+            if { $cmdret != 0 } { set exitstat "failed" }
+
+            if { $want_out(source) == "regex" } {
+                verbose -log "$exitstat with: <$comp_output>, expected: <$want_out(regex)>"
+            } elseif { $want_out(source) == "file" } {
+                verbose -log "$exitstat with: <$comp_output>, expected in file $want_out(file)"
+                set_file_contents "tmpdir/ld.messages" "$comp_output"
+            } else {
+                verbose -log "$exitstat with: <$comp_output>, no expected output"
+            }
+
+            if { (($want_out(source) == "") == ($comp_output == "")) \
+                     && (($cmdret == 0) == ($want_out(terminal) == 0)) \
+                     && ((($want_out(source) == "regex") \
+                              && [regexp -- $want_out(regex) $comp_output]) \
+                             || (($want_out(source) == "file") \
+                                     && (![regexp_diff "tmpdir/ld.messages" "$srcdir/$subdir/$want_out(file)"]))) } {
+                # We have the expected output.
+                if { $want_out(terminal) || $dumpprogram == "" } {
+                    pass $testname
+                    continue
+                }
+            } else {
+                fail $testname
+                continue
+            }
+        }
+
+        # We must not have expected failure if we get here.
+        if { $opts(error) != "" } {
+            fail $testname
+            continue
+        }
+
+        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 { $dumpprogram == "" } then {
+                continue
+            }
+        }
+
+        set progopts1 $opts($dumpprogram)
+        eval set progopts \$[string toupper $dumpprogram]FLAGS
+        eval set binary \$[string toupper $dumpprogram]
+
+        if { ![is_remote host] && [which $binary] == 0 } {
+            untested $testname
+            continue
+        }
+
+        # For objdump of gas output, automatically translate standard section names
+        set sect_names ""
+        if { !$run_ld && $dumpprogram == "objdump" \
+                 && $opts(section_subst) != "no" \
+                 && ![string match "*-b binary*" $progopts1] } {
+            set sect_names [get_standard_section_names]
+            if { $sect_names != ""} {
+                regsub -- "\\.text" $progopts1 "[lindex $sect_names 0]" progopts1
+                regsub -- "\\.data" $progopts1 "[lindex $sect_names 1]" progopts1
+                regsub -- "\\.bss"  $progopts1 "[lindex $sect_names 2]" progopts1
+            }
+        }
+
+        if { $progopts1 == "" } { set $progopts1 "-r" }
+        verbose "running $binary $progopts $progopts1" 3
+
+        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>dump.tmp"]] "" "/dev/null"]
+        set cmdret [lindex $cmdret 0]
+        remote_upload host "dump.tmp"
+        set comp_output [prune_warnings [file_contents "dump.tmp"]]
+        remote_file host delete "dump.tmp"
+        remote_file build delete "dump.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
+            continue
+        }
+
+        if { $verbose > 2 } then { verbose "output is [file_contents $dumpfile]" 3 }
+
+        # Create the substition list for objdump output.
+        set regexp_subst ""
+        if { $sect_names != "" } {
+            set regexp_subst [list "\\\\?\\.text" [lindex $sect_names 0] \
+                                  "\\\\?\\.data" [lindex $sect_names 1] \
+                                  "\\\\?\\.bss" [lindex $sect_names 2] ]
+        }
+
+        if { [regexp_diff $dumpfile "${dfile}" $regexp_subst] } then {
+            fail $testname
+            if { $verbose == 2 } then { verbose "output is [file_contents $dumpfile]" 2 }
+            continue
+        }
+
+        pass $testname
     }
-
-    set want_out(source) ""
-    set want_out(terminal) 0
-    if { $err_warn } {
-	if { $opts(error) != "" || $opts(error_output) != "" } {
-	    set want_out(terminal) 1
-	}
-
-	if { $opts(error) != "" || $opts(warning) != "" } {
-	    set want_out(source) "regex"
-	    if { $opts(error) != "" } {
-		set want_out(regex) $opts(error)
-	    } else {
-		set want_out(regex) $opts(warning)
-	    }
-	} else {
-	    set want_out(source) "file"
-	    if { $opts(error_output) != "" } {
-		set want_out(file) $opts(error_output)
-	    } else {
-		set want_out(file) $opts(warning_output)
-	    }
-	}
-    }
-
-    regsub "\n$" $comp_output "" comp_output
-    if { $cmdret != 0 || $comp_output != "" || $want_out(source) != "" } {
-	set exitstat "succeeded"
-	if { $cmdret != 0 } { set exitstat "failed" }
-
-	if { $want_out(source) == "regex" } {
-	    verbose -log "$exitstat with: <$comp_output>, expected: <$want_out(regex)>"
-	} elseif { $want_out(source) == "file" } {
-	    verbose -log "$exitstat with: <$comp_output>, expected in file $want_out(file)"
-	    set_file_contents "tmpdir/ld.messages" "$comp_output"
-	} else {
-	    verbose -log "$exitstat with: <$comp_output>, no expected output"
-	}
-
-	if { (($want_out(source) == "") == ($comp_output == "")) \
-	     && (($cmdret == 0) == ($want_out(terminal) == 0)) \
-	     && ((($want_out(source) == "regex") \
-		  && [regexp -- $want_out(regex) $comp_output]) \
-		 || (($want_out(source) == "file") \
-		     && (![regexp_diff "tmpdir/ld.messages" "$srcdir/$subdir/$want_out(file)"]))) } {
-	    # We have the expected output.
-	    if { $want_out(terminal) || $dumpprogram == "" } {
-		pass $testname
-		return
-	    }
-	} else {
-	    fail $testname
-	    return
-	}
-    }
-
-    # We must not have expected failure if we get here.
-    if { $opts(error) != "" } {
-	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 { $dumpprogram == "" } then {
-	    return
-	}
-    }
-
-    set progopts1 $opts($dumpprogram)
-    eval set progopts \$[string toupper $dumpprogram]FLAGS
-    eval set binary \$[string toupper $dumpprogram]
-
-    if { ![is_remote host] && [which $binary] == 0 } {
-	untested $testname
-	return
-    }
-
-    # For objdump of gas output, automatically translate standard section names
-    set sect_names ""
-    if { !$run_ld && $dumpprogram == "objdump" \
-	     && $opts(section_subst) != "no" \
-	     && ![string match "*-b binary*" $progopts1] } {
-	set sect_names [get_standard_section_names]
-	if { $sect_names != ""} {
-	    regsub -- "\\.text" $progopts1 "[lindex $sect_names 0]" progopts1
-	    regsub -- "\\.data" $progopts1 "[lindex $sect_names 1]" progopts1
-	    regsub -- "\\.bss"  $progopts1 "[lindex $sect_names 2]" progopts1
-	}
-    }
-
-    if { $progopts1 == "" } { set $progopts1 "-r" }
-    verbose "running $binary $progopts $progopts1" 3
-
-    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>dump.tmp"]] "" "/dev/null"]
-    set cmdret [lindex $cmdret 0]
-    remote_upload host "dump.tmp"
-    set comp_output [prune_warnings [file_contents "dump.tmp"]]
-    remote_file host delete "dump.tmp"
-    remote_file build delete "dump.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 }
-
-    # Create the substition list for objdump output.
-    set regexp_subst ""
-    if { $sect_names != "" } {
-	set regexp_subst [list "\\\\?\\.text" [lindex $sect_names 0] \
-			      "\\\\?\\.data" [lindex $sect_names 1] \
-			      "\\\\?\\.bss" [lindex $sect_names 2] ]
-    }
-
-    if { [regexp_diff $dumpfile "${dfile}" $regexp_subst] } then {
-	fail $testname
-	if { $verbose == 2 } then { verbose "output is [file_contents $dumpfile]" 2 }
-	return
-    }
-
-    pass $testname
 }
 
 proc slurp_options { file } {
diff --git a/gas/testsuite/gas/aarch64/dotproduct.d b/gas/testsuite/gas/aarch64/dotproduct.d
index 54ac62be634890f57d6c1d84d57db42629359ca9..fd2f0ebf4c66de3e9bd3e831c8cb9828cae932aa 100644
--- a/gas/testsuite/gas/aarch64/dotproduct.d
+++ b/gas/testsuite/gas/aarch64/dotproduct.d
@@ -1,4 +1,5 @@
 #as: -march=armv8.2-a+dotprod
+#as: -march=armv8.4-a
 #objdump: -dr
 
 .*:     file format .*
diff --git a/gas/testsuite/gas/aarch64/dotproduct_armv8_4.d b/gas/testsuite/gas/aarch64/dotproduct_armv8_4.d
deleted file mode 100644
index 121eb11bb40a12b57ebf1f52beaeade1bdb29e16..0000000000000000000000000000000000000000
--- a/gas/testsuite/gas/aarch64/dotproduct_armv8_4.d
+++ /dev/null
@@ -1,10 +0,0 @@
-#as: -march=armv8.4-a
-#objdump: -dr
-
-.*:     file format .*
-
-Disassembly of section \.text:
-
-0+ <.*>:
-[^:]+:\s+2e809400 	udot	v0.2s, v0.8b, v0.8b
-[^:]+:\s+2e8b9400 	udot	v0.2s, v0.8b, v11.8b
diff --git a/gas/testsuite/gas/aarch64/dotproduct_armv8_4.s b/gas/testsuite/gas/aarch64/dotproduct_armv8_4.s
deleted file mode 100644
index 37538d9bb8270832a003a27e89e3f2d0e6ab44c0..0000000000000000000000000000000000000000
--- a/gas/testsuite/gas/aarch64/dotproduct_armv8_4.s
+++ /dev/null
@@ -1,2 +0,0 @@
-UDOT	V0.2S, V0.8B, V0.8B
-UDOT	V0.2S, V0.8B, V11.8B
diff --git a/gas/testsuite/gas/aarch64/illegal-dotproduct.d b/gas/testsuite/gas/aarch64/illegal-dotproduct.d
index 3f8928da83bb64891528cf5860236f4b73c184b8..0e15b9fbed4f90dd9d68c1923f73239e73dcde20 100644
--- a/gas/testsuite/gas/aarch64/illegal-dotproduct.d
+++ b/gas/testsuite/gas/aarch64/illegal-dotproduct.d
@@ -1,4 +1,5 @@
 #as: -march=armv8.2-a+dotprod
+#as: -march=armv8.4-a
 #name: Invalid dotproduct instructions.
 #source: illegal-dotproduct.s
 #error_output: illegal-dotproduct.l
diff --git a/gas/testsuite/gas/aarch64/ldst-rcpc-armv8_2.d b/gas/testsuite/gas/aarch64/ldst-rcpc-armv8_2.d
deleted file mode 100644
index ac8938fc086c6d55170d1de2900420fbe70881d3..0000000000000000000000000000000000000000
--- a/gas/testsuite/gas/aarch64/ldst-rcpc-armv8_2.d
+++ /dev/null
@@ -1,21 +0,0 @@
-#objdump: -dr
-#as: -march=armv8.2-a+rcpc
-#source: ldst-rcpc.s
-
-.*:     file format .*
-
-Disassembly of section \.text:
-
-0+ <.*>:
-   0:	38bfc0e1 	ldaprb	w1, \[x7\]
-   4:	38bfc0e1 	ldaprb	w1, \[x7\]
-   8:	38bfc0e1 	ldaprb	w1, \[x7\]
-   c:	78bfc0e1 	ldaprh	w1, \[x7\]
-  10:	78bfc0e1 	ldaprh	w1, \[x7\]
-  14:	78bfc0e1 	ldaprh	w1, \[x7\]
-  18:	b8bfc0e1 	ldapr	w1, \[x7\]
-  1c:	b8bfc0e1 	ldapr	w1, \[x7\]
-  20:	b8bfc0e1 	ldapr	w1, \[x7\]
-  24:	f8bfc0e1 	ldapr	x1, \[x7\]
-  28:	f8bfc0e1 	ldapr	x1, \[x7\]
-  2c:	f8bfc0e1 	ldapr	x1, \[x7\]
diff --git a/gas/testsuite/gas/aarch64/ldst-rcpc.d b/gas/testsuite/gas/aarch64/ldst-rcpc.d
index 73a0c9f6960126b7cf04f84aaaa4d6ecb4933bc7..f9e951bdcb49ce1e7e1be57f37cf0e1938a2fc8a 100644
--- a/gas/testsuite/gas/aarch64/ldst-rcpc.d
+++ b/gas/testsuite/gas/aarch64/ldst-rcpc.d
@@ -1,5 +1,7 @@
 #objdump: -dr
 #as: -march=armv8.3-a
+#as: -march=armv8.2-a+rcpc
+#source: ldst-rcpc.s
 
 .*:     file format .*
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]