OSDN Git Service

2010-08-02 Tristan Gingold <gingold@adacore.com>
authorgingold <gingold>
Mon, 2 Aug 2010 08:48:55 +0000 (08:48 +0000)
committergingold <gingold>
Mon, 2 Aug 2010 08:48:55 +0000 (08:48 +0000)
* lib/gas-defs.exp (get_standard_section_names): New function.
(run_dump_tests): Document the new behavior for objdump,
document to new section-subst option.  Automatically perform
substitutions for objdump.
(objdump_finish): Add REF_SUBST argument.
(run_list_test): Adjust call of regexp_diff.
(run_list_test_stdin): Ditto.
* gas/all/gas.exp (test_cond): Adjust call of regexp_diff.
* gas/symver/symver.exp (run_error_test): Ditto.
* gas/mt/relocs.exp (regexp_test): Ditto.
* gas/mep/complex-relocs.exp (regexp_test): Ditto.
* gas/m68k/all.exp: Ditto.
* gas/elf/elf.exp (run_elf_list_test): Ditto.
* gas/rx/rx-asm-good.d: Set section-subst to no.

gas/testsuite/ChangeLog
gas/testsuite/gas/all/gas.exp
gas/testsuite/gas/elf/elf.exp
gas/testsuite/gas/m68k/all.exp
gas/testsuite/gas/mep/complex-relocs.exp
gas/testsuite/gas/mt/relocs.exp
gas/testsuite/gas/rx/rx-asm-good.d
gas/testsuite/gas/symver/symver.exp
gas/testsuite/lib/gas-defs.exp

index 4cae3f9..6e590f9 100644 (file)
@@ -1,3 +1,20 @@
+2010-08-02  Tristan Gingold  <gingold@adacore.com>
+
+       * lib/gas-defs.exp (get_standard_section_names): New function.
+       (run_dump_tests): Document the new behavior for objdump,
+       document to new section-subst option.  Automatically perform
+       substitutions for objdump.
+       (objdump_finish): Add REF_SUBST argument.
+       (run_list_test): Adjust call of regexp_diff.
+       (run_list_test_stdin): Ditto.
+       * gas/all/gas.exp (test_cond): Adjust call of regexp_diff.
+       * gas/symver/symver.exp (run_error_test): Ditto.
+       * gas/mt/relocs.exp (regexp_test): Ditto.
+       * gas/mep/complex-relocs.exp (regexp_test): Ditto.
+       * gas/m68k/all.exp: Ditto.
+       * gas/elf/elf.exp (run_elf_list_test): Ditto.
+       * gas/rx/rx-asm-good.d: Set section-subst to no.
+
 2010-08-02  Alan Modra  <amodra@gmail.com>
 
        * gas/i386/i386.exp (dw2-compress-1): Only run on ELF targets.
index 51d7a58..4f18192 100644 (file)
@@ -111,12 +111,12 @@ case $target_triplet in {
        # This is usually revealed by the error message:
        #  symbol `sym' required but not present
        setup_xfail "*arm*-*-*aout*" "*arm*-*-*coff" \
-           "*arm*-*-pe" "m68hc*-*-*" "maxq-*-*" \
+           "*arm*-*-pe" "m68hc*-*-*" \
            "rx-*-*" "vax*-*-*" "z8k-*-*"
        run_dump_test redef2
        setup_xfail "*-*-aix*" "*-*-coff" "*-*-cygwin" "*-*-mingw*" "*-*-pe*" \
            "bfin-*-*" "hppa*-*-hpux*" \
-           "m68hc*-*-*" "maxq-*-*" "or32-*-*" \
+           "m68hc*-*-*" "or32-*-*" \
            "rx-*-*" "vax*-*-*" "z8k-*-*"
        run_dump_test redef3
        gas_test_error "redef4.s" "" ".set for symbol already used as label"
@@ -287,7 +287,7 @@ proc test_cond {} {
        send_log "$comp_output\n"
        fail $testname
     } else {
-       if { [regexp_diff dump.out $srcdir/$subdir/cond.l] } {
+       if { [regexp_diff dump.out $srcdir/$subdir/cond.l ""] } {
            fail $testname
        } else {
            pass $testname
index 55a08b1..7c12305 100644 (file)
@@ -9,7 +9,7 @@ proc run_elf_list_test { name suffix opts readelf_opts readelf_pipe } {
     set file $srcdir/$subdir/$name
     gas_run ${name}.s "$opts -o dump.o" ">&dump.out"
     if { ![string match "" $opts]
-         && [regexp_diff "dump.out" "${file}.l"] } then {
+         && [regexp_diff "dump.out" "${file}.l" ""] } then {
        fail $testname
        verbose "output is [file_contents "dump.out"]" 2
        return
@@ -28,7 +28,7 @@ proc run_elf_list_test { name suffix opts readelf_opts readelf_pipe } {
        return
     }
     verbose_eval {[file_contents "dump.out"]} 3
-    if { [regexp_diff "dump.out" "${file}.e${suffix}"] } then {
+    if { [regexp_diff "dump.out" "${file}.e${suffix}" ""] } then {
        fail $testname
        verbose "output is [file_contents "dump.out"]" 2
        return
index feb33a4..53fa62c 100644 (file)
@@ -83,7 +83,7 @@ if { [istarget m68*-*-*] || [istarget fido*-*-*] } then {
        verbose "$comp_output" 3
        fail $testname
     } else {
-       if [regexp_diff "err.out" "$srcdir/$subdir/op68000.d"] then {
+       if [regexp_diff "err.out" "$srcdir/$subdir/op68000.d" ""] then {
            fail $testname
        } else {
            pass $testname
index 83d89bb..a5a3127 100644 (file)
@@ -18,7 +18,7 @@ proc objdump_test { exec flags dest test } {
 }
 
 proc regexp_test { file1 file2 test } {
-    if [regexp_diff $file1 $file2] then { fail $test } else { pass $test }
+    if [regexp_diff $file1 $file2 ""] then { fail $test } else { pass $test }
 }
 
 
index 076f428..d47742e 100644 (file)
@@ -15,7 +15,7 @@ proc objdump_test { exec flags dest test } {
 }
 
 proc regexp_test { file1 file2 test } {
-    if [regexp_diff $file1 $file2] then { fail $test } else { pass $test }
+    if [regexp_diff $file1 $file2 ""] then { fail $test } else { pass $test }
 }
 
 
index 6733bbf..659b51e 100644 (file)
@@ -1,5 +1,6 @@
 # name: Compatibility with Renesas's own assembler
 # objdump: -D --prefix-addresses --show-raw-insn 
+# section-subst: no
 
 .*: +file format elf32-rx-.*
 
index 075d93f..737bc85 100644 (file)
@@ -6,7 +6,7 @@ proc run_error_test { name opts } {
     set testname "symver $name"
     set file $srcdir/$subdir/$name
     gas_run ${name}.s $opts ">&dump.out"
-    if { [regexp_diff "dump.out" "${file}.l"] } then {
+    if { [regexp_diff "dump.out" "${file}.l" ""] } then {
        fail $testname
        verbose "output is [file_contents "dump.out"]" 2
        return
index e6260ad..2df4222 100644 (file)
@@ -341,6 +341,15 @@ proc is_pecoff_format {} {
     return 1
 }
 
+# Internal procedure: return the names of the standard sections
+#
+proc get_standard_section_names {} {
+    if [istarget "rx-*-*"] {
+        return { "P" "D_1" "B_1" }
+    }
+    return
+}
+
 # run_dump_tests TESTCASES EXTRA_OPTIONS
 # Wrapper for run_dump_test, which is suitable for invoking as
 #   run_dump_tests [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
@@ -413,6 +422,11 @@ proc run_dump_tests { testcases {extra_options {}} } {
 #      of symbols.  If no FLAGS are needed then use:
 #        PROG: [nm objcopy objdump readelf addr2line]
 #       instead.
+#      Note: for objdump, we automatically replaces the standard section
+#      names (.text, .data and .bss) by target ones if any (eg. rx-elf
+#      uses "P" instead of .text).  The substition is done for both
+#      the objdump options (eg: "-j .text" is replaced by "-j P") and the
+#      reference file.
 #
 #   source: SOURCE
 #      Assemble the file SOURCE.s.  If omitted, this defaults to FILE.s.
@@ -463,6 +477,9 @@ proc run_dump_tests { testcases {extra_options {}} } {
 #       is expected to exit unsuccessfully (therefore PROG, objdump, nm,
 #       and objcopy have no meaning and should not be supplied).
 #
+#   section-subst: no
+#       Means that the section substitution for objdump is disabled.
+#
 # Each option may occur at most once.
 #
 # After the option lines come regexp lines.  `run_dump_test' calls
@@ -508,6 +525,7 @@ proc run_dump_test { name {extra_options {}} } {
     set opts(not-target) {}
     set opts(skip) {}
     set opts(not-skip) {}
+    set opts(section-subst) {}
 
     foreach i $opt_array {
        set opt_name [lindex $i 0]
@@ -718,7 +736,7 @@ proc run_dump_test { name {extra_options {}} } {
            }
            set stderrfile $srcdir/$subdir/$opts(stderr)
            verbose "wrote pruned stderr to dump.stderr" 3
-           if { [regexp_diff "dump.stderr" "$stderrfile"] } then {
+           if { [regexp_diff "dump.stderr" "$stderrfile" ""] } then {
                if { $opts(error) != "" } {
                    verbose -log "$exitstat with: <$comp_output>, expected: <$opts(error)>"
                    if [regexp $opts(error) $comp_output] {
@@ -752,6 +770,15 @@ proc run_dump_test { name {extra_options {}} } {
        return
     }
 
+    # For objdump, automatically translate standard section names to the targets one,
+    # if they are different.
+    set sect_names [get_standard_section_names]
+    if { $sect_names != "" && $program == "objdump" && $opts(section-subst) == ""} {
+        regsub -- "-j \\.text" $progopts1 "-j [lindex $sect_names 0]" progopts1
+        regsub -- "-j \\.data" $progopts1 "-j [lindex $sect_names 1]" progopts1
+        regsub -- "-j \\.bss"  $progopts1 "-j [lindex $sect_names 2]" progopts1
+    }
+
     if { $progopts1 == "" } { set $progopts1 "-r" }
     verbose "running $binary $progopts $progopts1" 3
 
@@ -784,8 +811,18 @@ proc run_dump_test { name {extra_options {}} } {
        return
     }
 
+    # Create the substition list only for objdump reference.
+    if { $sect_names != "" && $program == "objdump" } {
+        # Some testcases use ".text" while others use "\.text".
+        set regexp_subst [list "\\\\?\\.text" [lindex $sect_names 0] \
+                           "\\\\?\\.data" [lindex $sect_names 1] \
+                          "\\\\?\\.bss" [lindex $sect_names 2] ]
+    } else {
+        set regexp_subst ""
+    }
+
     verbose_eval {[file_contents "dump.out"]} 3
-    if { [regexp_diff "dump.out" "${dumpfile}"] } then {
+    if { [regexp_diff "dump.out" "${dumpfile}" $regexp_subst] } then {
        fail $testname
        verbose "output is [file_contents "dump.out"]" 2
        return
@@ -859,13 +896,14 @@ expect_after -i {
     eof                                { perror "eof" }
 }
 
-# regexp_diff, based on simple_diff taken from ld test suite
-#      compares two files line-by-line
-#      file1 contains strings, file2 contains regexps and #-comments
-#      blank lines are ignored in either file
-#      returns non-zero if differences exist
+# regexp_diff, based on simple_diff taken from ld test suite.
+#      Compares two files line-by-line.
+#      FILE_1 contains strings, FILE_2 contains regexps and #-comments
+#      Blank lines are ignored in either file.
+#      Subsitutions in REF_SUBST are applied on FILE_2 lines.
+#      Returns non-zero if differences exist.
 #
-proc regexp_diff { file_1 file_2 } {
+proc regexp_diff { file_1 file_2 ref_subst} {
 
     set eof -1
     set end_1 0
@@ -894,6 +932,7 @@ proc regexp_diff { file_1 file_2 } {
        set line_a ""
        set line_b ""
        while { [string length $line_a] == 0 } {
+            # Ignore blank line in FILE_1.
            if { [gets $file_a line_a] == $eof } {
                set end_1 1
                break
@@ -910,6 +949,10 @@ proc regexp_diff { file_1 file_2 } {
                    set diff_pass 1
                    break
                }
+                # Substitute on the reference.
+                foreach {name value} $ref_subst {
+                    regsub -- $name $line_b $value line_b
+                }
                verbose "looking for \"^$line_b$\"" 3
                while { ![regexp "^$line_b$" "$line_a"] } {
                    verbose "skipping    \"$line_a\"" 3
@@ -941,6 +984,10 @@ proc regexp_diff { file_1 file_2 } {
             set differences 1
             break
         } else {
+            # Substitute on the reference.
+            foreach {name value} $ref_subst {
+                regsub -- $name $line_b $value line_b
+            }
             verbose "regexp \"^$line_b$\"\nline   \"$line_a\"" 3
             if ![regexp "^$line_b$" "$line_a"] {
                send_log "regexp_diff match failure\n"
@@ -1018,7 +1065,7 @@ proc run_list_test { name {opts {}} {testname {}} } {
     }
     set file $srcdir/$subdir/$name
     gas_run ${name}.s $opts ">&dump.out"
-    if { [regexp_diff "dump.out" "${file}.l"] } then {
+    if { [regexp_diff "dump.out" "${file}.l" ""] } then {
        fail $testname
        verbose "output is [file_contents "dump.out"]" 2
        return
@@ -1037,7 +1084,7 @@ proc run_list_test_stdin { name {opts {}} {testname {}} } {
     }
     set file $srcdir/$subdir/$name
     gas_run_stdin ${name}.s $opts ">&dump.out"
-    if { [regexp_diff "dump.out" "${file}.l"] } then {
+    if { [regexp_diff "dump.out" "${file}.l" ""] } then {
        fail $testname
        verbose "output is [file_contents "dump.out"]" 2
        return