Testsuite: Allow multiple lines of "as" in testsuite.
authorMatthew Malcomson <matthew.malcomson@arm.com>
Wed, 27 Feb 2019 13:15:10 +0000 (13:15 +0000)
committerTamar Christina <tamar.christina@arm.com>
Wed, 27 Feb 2019 13:16:14 +0000 (13:16 +0000)
Committed on behalf of Matthew Malcomson.

This allows checking the command line parsing more easily than before by
allowing many command line invokations from the same .d file.

Each line is used as a set of flags, and the tests are ran against the output
of the assembler with each set.
Each line of assembler is treated as another set of tests (as if the test file
were copied to another with a different #as: line).

This patch includes some example uses where multiple testcases can be merged
into one file using this new functionality.

binutils/ChangeLog:

* testsuite/lib/binutils-common.exp: Allow multiple "as" lines.

gas/ChangeLog:

* testsuite/gas/aarch64/dotproduct.d: Use multiple "as" lines.
* testsuite/gas/aarch64/dotproduct_armv8_4.d: Remove.
* testsuite/gas/aarch64/dotproduct_armv8_4.s: Remove.
* testsuite/gas/aarch64/illegal-dotproduct.d: Use multiple "as"
lines.
* testsuite/gas/aarch64/ldst-rcpc-armv8_2.d: Remove.
* testsuite/gas/aarch64/ldst-rcpc.d: Use multiple "as" lines.

binutils/ChangeLog
binutils/testsuite/lib/binutils-common.exp
gas/ChangeLog
gas/testsuite/gas/aarch64/dotproduct.d
gas/testsuite/gas/aarch64/dotproduct_armv8_4.d [deleted file]
gas/testsuite/gas/aarch64/dotproduct_armv8_4.s [deleted file]
gas/testsuite/gas/aarch64/illegal-dotproduct.d
gas/testsuite/gas/aarch64/ldst-rcpc-armv8_2.d [deleted file]
gas/testsuite/gas/aarch64/ldst-rcpc.d

index f3d8fa2..6bb4384 100644 (file)
@@ -1,3 +1,7 @@
+2019-02-27  Matthew Malcomson  <matthew.malcomson@arm.com>
+
+       * testsuite/lib/binutils-common.exp: Allow multiple "as" lines.
+
 2019-02-25  Nick Clifton  <nickc@redhat.com>
 
        * objdump.c (sym_ok): New function.
index 213e53f..e01b3fb 100644 (file)
@@ -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 } {
index ac18471..3508c5a 100644 (file)
@@ -1,3 +1,13 @@
+2019-02-27  Matthew Malcomson  <matthew.malcomson@arm.com>
+
+       * testsuite/gas/aarch64/dotproduct.d: Use multiple "as" lines.
+       * testsuite/gas/aarch64/dotproduct_armv8_4.d: Remove.
+       * testsuite/gas/aarch64/dotproduct_armv8_4.s: Remove.
+       * testsuite/gas/aarch64/illegal-dotproduct.d: Use multiple "as"
+       lines.
+       * testsuite/gas/aarch64/ldst-rcpc-armv8_2.d: Remove.
+       * testsuite/gas/aarch64/ldst-rcpc.d: Use multiple "as" lines.
+
 2019-02-24  Alan Modra  <amodra@gmail.com>
 
        * config/tc-ppc.c (parse_tls_arg): Wrap in #ifdef OBJ_ELF.
index 54ac62b..fd2f0eb 100644 (file)
@@ -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 (file)
index 121eb11..0000000
+++ /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 (file)
index 37538d9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-UDOT   V0.2S, V0.8B, V0.8B
-UDOT   V0.2S, V0.8B, V11.8B
index 3f8928d..0e15b9f 100644 (file)
@@ -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 (file)
index ac8938f..0000000
+++ /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\]
index 73a0c9f..f9e951b 100644 (file)
@@ -1,5 +1,7 @@
 #objdump: -dr
 #as: -march=armv8.3-a
+#as: -march=armv8.2-a+rcpc
+#source: ldst-rcpc.s
 
 .*:     file format .*