This commit was manufactured by cvs2svn to create branch
[external/binutils.git] / ld / testsuite / ld-sh / sh64 / sh64.exp
index f939441..afd0304 100644 (file)
@@ -23,18 +23,22 @@ if ![istarget sh64-*-*] {
     return
 }
 
-# FIXME: This isn't set by testsuite/config/default.exp; make it.
-if ![info exists readelf] then {
-    set readelf [findfile $base_dir/../binutils/readelf]
+if [istarget sh64*-*-linux*] {
+    return
+}
+
+if { [istarget sh64*-*-netbsd*] || [istarget sh5*-*-netbsd*] } then {
+       return
 }
 
 # List contains test-items with 3 items followed by 2 lists:
 # 0:name 1:ld options 2:assembler options
-# 3:filenames of assembler files 4: action and options.
+# 3:filenames of assembler files 4: action and options. 5: name of output file
 
 # Actions:
 # objdump: Apply objdump options on result.  Compare with regex (last arg).
 # nm: Apply nm options on result.  Compare with regex (last arg).
+# readelf: Apply readelf options on result.  Compare with regex (last arg).
 
 # Note that the contents dump is the same for "inter-file datalabel
 # references, 64-bit ABI" as for 32-bit ABI and ELF so we re-use it.
@@ -42,323 +46,89 @@ if ![info exists readelf] then {
 set sh64tests {
     {"SH64 linking, 64-bit ABI" "-mshelf64"
      "--abi=64" {sh64-1.s sh64-2.s}
-     {{objdump -sr abi64.sd} {objdump -x abi64.xd}}}
+     {{objdump -sr abi64.sd} {objdump -x abi64.xd}} "abi64.bin" }
     {"SH64 linking, 64-bit ABI, -no-expand" "-mshelf64"
      "--abi=64 -no-expand" {sh64-1.s sh64-2.s}
-     {{objdump -sr abixx-noexp.sd}}}
+     {{objdump -sr abixx-noexp.sd}} "abi64-noexp.bin" }
     {"SH64 linking, 32-bit ABI" "-mshelf32"
      "--abi=32" {sh64-1.s sh64-2.s}
-     {{objdump -sr abi32.sd} {objdump -x abi32.xd}}}
+     {{objdump -sr abi32.sd} {objdump -x abi32.xd}} "abi32.bin" }
     {"SH64 linking, 32-bit ABI, -no-expand" "-mshelf32"
      "--abi=32 -no-expand" {sh64-1.s sh64-2.s}
-     {{objdump -sr abixx-noexp.sd}}}
+     {{objdump -sr abixx-noexp.sd}} "abi32-noexp.bin" }
     {"SH64 linking, single multi-ISA object" "-mshelf32"
      "--abi=32" {shmix-1.s}
-     {{objdump -sr mix1.sd} {objdump -x mix1.xd}}}
+     {{objdump -sr mix1.sd} {objdump -x mix1.xd}} "mix1.bin" }
     {"SH64 linking, single multi-ISA object, -no-expand" "-mshelf32"
      "--abi=32 -no-expand" {shmix-1.s}
-     {{objdump -sr mix1-noexp.sd}}}
+     {{objdump -sr mix1-noexp.sd}} "mix1-noexp.bin" }
     {"SH64 linking, two different-ISA objects" "-mshelf32"
      "--abi=32" {shmix-2.s shmix-3.s}
-     {{objdump -sr mix2.sd} {objdump -x mix2.xd}}}
+     {{objdump -sr mix2.sd} {objdump -x mix2.xd}} "mix2.bin" }
     {"SH64 linking, two different-ISA objects, -no-expand" "-mshelf32"
      "--abi=32 -no-expand" {shmix-2.s shmix-3.s}
-     {{objdump -sr mix2-noexp.sd}}}
+     {{objdump -sr mix2-noexp.sd}} "mix2-noexp.bin" }
     {"SH64 linking, single SHcompact" "-mshelf32"
      "--isa=SHcompact" {shcmp-1.s}
-     {{objdump -sr cmpct1.sd} {objdump -x cmpct1.xd}}}
+     {{objdump -sr cmpct1.sd} {objdump -x cmpct1.xd}} "cmpct1.bin" }
     {"SH64 inter-file datalabel references, 64-bit ABI" "-mshelf64"
      "--abi=64" {shdl-1.s shdl-2.s}
-     {{objdump -sr shdl64.sd} {objdump -x shdl64.xd}}}
+     {{objdump -sr shdl64.sd} {objdump -x shdl64.xd}} "shdl64.bin" }
     {"SH64 inter-file datalabel references, 32-bit ABI" "-mshelf32"
      "--abi=32" {shdl-1.s shdl-2.s}
-     {{objdump -sr shdl64.sd} {objdump -x shdl32.xd}}}
+     {{objdump -sr shdl64.sd} {objdump -x shdl32.xd}} "shdl32.bin" }
     {"SH64 inter-file datalabel references and gc-sections, 32-bit ABI" "-mshelf32 --gc-sections"
      "--abi=32" {dlsection-1.s }
-     {{objdump -sr dlsection.sd}}}
+     {{objdump -sr dlsection.sd}} "dlsection32.bin" }
     {"SH64 inter-file datalabel references and gc-sections, 64-bit ABI" "-mshelf64 --gc-sections"
      "--abi=64" {dlsection-1.s }
-     {{objdump -sr dlsection.sd}}}
+     {{objdump -sr dlsection.sd}} "dlsection64.bin" }
     {"SH64 simple partial linking, 32-bit ABI" "-mshelf32 -r"
      "--abi=32" {rel-1.s rel-2.s}
-     {{objdump -sx rel32.xd}}}
+     {{objdump -sx rel32.xd}} "rel32.bin" }
     {"SH64 simple partial linking, 64-bit ABI" "-mshelf64 -r"
      "--abi=64" {rel-1.s rel-2.s}
-     {{objdump -sx rel64.xd}}}
+     {{objdump -sx rel64.xd}} "rel64.bin" }
     {"SH64 partial linking with datalabel references, 32-bit ABI" "-mshelf32 -r"
      "--abi=32" {reldl-1.s reldl-2.s}
-     {{readelf {-s -r -x 1 -x 3} reldl32.rd}}}
+     {{readelf {-s -r -x 1 -x 3} reldl32.rd}} "reldl32.bin" }
     {"SH64 partial linking with datalabel references, 64-bit ABI" "-mshelf64 -r"
      "--abi=64" {reldl-1.s reldl-2.s}
-     {{readelf {-s -r -x 1 -x 3} reldl64.rd}}}
+     {{readelf {-s -r -x 1 -x 3} reldl64.rd}} "reldl64.bin" }
     {"Handling SH64 assembler-generated .cranges" "-mshelf32"
      "--abi=32" {crange-2a.s crange-1.s}
-     {{readelf {-S -s -r -x 1 -x 2 -x 9} crange1.rd}}}
+     {{readelf {-S -s -r -x 1 -x 2 -x 9} crange1.rd}} "crange1.bin" }
     {"Handling SH64 assembler-generated .cranges, partial linking" "-mshelf32 -r"
      "--abi=32" {crange-2a.s}
-     {{readelf {-S -s -r -x 2 -x 5} crangerel1.rd}}}
+     {{readelf {-S -s -r -x 2 -x 6} crangerel1.rd}} "crangerel1.bin" }
     {"Mixing SH64 assembler-generated with linker-generated .cranges" "-mshelf32"
      "--abi=32" {crange-2a.s crange-2b.s crange-1.s}
-     {{readelf {-S -s -r -x 2 -x 9} crange2.rd}}}
+     {{readelf {-S -s -r -x 2 -x 9} crange2.rd}} "crange2.bin" }
     {"Mixing SH64 assembler-generated with linker-generated .cranges, partial linking"
      "-mshelf32 -r"
      "--abi=32" {crange-2a.s crange-2c.s crange-2d.s crange-2e.s}
-     {{readelf {-S -s -r -x 2 -x 5} crangerel2.rd}}}
+     {{readelf {-S -s -r -x 2 -x 6} crangerel2.rd}} "crangerel2.bin" }
     {"Merge and use of SH64 .cranges, some not originally in order" "-mshelf32"
      "--abi=32"
      {crange-2e.s crange-2f.s crange-2g.s crange-2a.s crange-2d.s crange-2i.s
       crange-2h.s crange-1.s}
-      {{readelf {-S -s -x 2 -x 9} crange3.rd} {objdump -d crange3.dd}}}
+      {{readelf {-S -s -x 2 -x 9} crange3.rd} {objdump -d crange3.dd}} "crange3.bin" }
     {"Sorted SH64 .cranges, entry at SHcompact code" "-mshelf32 --entry diversion"
      "--abi=32"
      {crange-2e.s crange-2f.s crange-2g.s crange-2a.s crange-2d.s crange-2i.s
       crange-2h.s crange-1.s}
-      {{readelf {-h -S -s -x 2 -x 9} crange3-cmpct.rd}}}
+      {{readelf {-h -S -s -x 2 -x 9} crange3-cmpct.rd}} "crange3-cmpct.bin" }
     {"Sorted SH64 .cranges, entry at SHmedia code" "-mshelf32 --entry diversion2"
      "--abi=32"
      {crange-2e.s crange-2f.s crange-2g.s crange-2a.s crange-2d.s crange-2i.s
       crange-2h.s crange-1.s}
-      {{readelf {-h -S -s -x 2 -x 9} crange3-media.rd}}}
+      {{readelf {-h -S -s -x 2 -x 9} crange3-media.rd}} "crange3-media.bin" }
     {"SH64 Big Endianness" "-mshelf64 -Tendian.ld"
      "--abi=64" {endian.s}
-     {{objdump -s endian.sbd} {objdump -d endian.dbd}}}
+     {{objdump -s endian.sbd} {objdump -d endian.dbd}} "endianb.bin" }
     {"SH64 Little Endianness" "-mshlelf64 -Tendian.ld"
      "--abi=64 --little" {endian.s}
-     {{objdump -s endian.sld} {objdump -d endian.dld}}}
-
-}
-
-# FIXME: Generalize and move this to ld-lib.exp
-
-proc run_ld_link_tests { ldtests } {
-    global ld
-    global as
-    global nm
-    global objdump
-    global readelf
-    global srcdir
-    global subdir
-    global env
-
-    set binfile "tmpdir/linked"
-
-    foreach testitem $ldtests {
-       set testname [lindex $testitem 0]
-       set ld_options [lindex $testitem 1]
-       set as_options [lindex $testitem 2]
-       set as_files  [lindex $testitem 3]
-       set actions [lindex $testitem 4]
-       set objfiles {}
-       set is_unresolved 0
-       set failed 0
-
-#      verbose -log "Testname is $testname"
-#      verbose -log "ld_options is $ld_options"
-#      verbose -log "as_options is $as_options"
-#      verbose -log "as_files is $as_files"
-#      verbose -log "actions is $actions"
-
-       # Assemble each file in the test.
-       foreach as_file $as_files {
-           set objfile "tmpdir/[file rootname $as_file].o"
-           lappend objfiles $objfile
-
-           if ![ld_assemble $as "$as_options $srcdir/$subdir/$as_file" $objfile] {
-               set is_unresolved 1
-               break
-           }
-       }
-
-       # Catch assembler errors.
-       if { $is_unresolved != 0 } {
-           unresolved $testname
-           continue
-       }
-
-       if ![ld_simple_link $ld $binfile "-L$srcdir/$subdir $ld_options $objfiles"] {
-           fail $testname
-       } else {
-           set failed 0
-           foreach actionlist $actions {
-               set action [lindex $actionlist 0]
-               set progopts [lindex $actionlist 1]
-
-               # There are actions where we run regexp_diff on the
-               # output, and there are other actions (presumably).
-               # Handling of the former look the same.
-               set dump_prog ""
-               switch -- $action {
-                   objdump
-                       { set dump_prog $objdump }
-                   nm
-                       { set dump_prog $nm }
-                   readelf
-                       { set dump_prog $readelf }
-                   default
-                       {
-                           perror "Unrecognized action $action"
-                           set is_unresolved 1
-                           break
-                       }
-                   }
-
-               if { $dump_prog != "" } {
-                   set dumpfile [lindex $actionlist 2]
-                   set binary $dump_prog
-
-                   # Ensure consistent sorting of symbols
-                   if {[info exists env(LC_ALL)]} {
-                       set old_lc_all $env(LC_ALL)
-                   }
-                   set env(LC_ALL) "C"
-                   set cmd "$binary $progopts $binfile > dump.out"
-                   send_log "$cmd\n"
-                   catch "exec $cmd" comp_output
-                   if {[info exists old_lc_all]} {
-                       set env(LC_ALL) $old_lc_all
-                   } else {
-                       unset env(LC_ALL)
-                   }
-                   set comp_output [prune_warnings $comp_output]
-
-                   if ![string match "" $comp_output] then {
-                       send_log "$comp_output\n"
-                       set failed 1
-                       break
-                   }
-
-                   if { [regexp_diff "dump.out" "$srcdir/$subdir/$dumpfile"] } then {
-                       verbose "output is [file_contents "dump.out"]" 2
-                       set failed 1
-                       break
-                   }
-               }
-           }
-
-           if { $failed != 0 } {
-               fail $testname
-           } else { if { $is_unresolved == 0 } {
-               pass $testname
-           } }
-       }
-
-       # Catch action errors.
-       if { $is_unresolved != 0 } {
-           unresolved $testname
-           continue
-       }
-    }
-}
-
-# FIXME: Move this to ld-lib.exp or higher up.
-
-# 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
-#
-proc regexp_diff { file_1 file_2 } {
-
-    set eof -1
-    set end_1 0
-    set end_2 0
-    set differences 0
-    set diff_pass 0
-
-    if [file exists $file_1] then {
-       set file_a [open $file_1 r]
-    } else {
-       warning "$file_1 doesn't exist"
-       return 1
-    }
-
-    if [file exists $file_2] then {
-       set file_b [open $file_2 r]
-    } else {
-       fail "$file_2 doesn't exist"
-       close $file_a
-       return 1
-    }
-
-    verbose " Regexp-diff'ing: $file_1 $file_2" 2
-
-    while { 1 } {
-       set line_a ""
-       set line_b ""
-       while { [string length $line_a] == 0 } {
-           if { [gets $file_a line_a] == $eof } {
-               set end_1 1
-               break
-           }
-       }
-       while { [string length $line_b] == 0 || [string match "#*" $line_b] } {
-           if [ string match "#pass" $line_b ] {
-               set end_2 1
-               set diff_pass 1
-               break
-           } elseif [ string match "#..." $line_b ] {
-               if { [gets $file_b line_b] == $eof } {
-                   set end_2 1
-                   break
-               }
-               verbose "looking for \"^$line_b$\"" 3
-               while { ![regexp "^$line_b$" "$line_a"] } {
-                   verbose "skipping    \"$line_a\"" 3
-                   if { [gets $file_a line_a] == $eof } {
-                       set end_1 1
-                       break
-                   }
-               }
-               break
-           }
-           if { [gets $file_b line_b] == $eof } {
-               set end_2 1
-               break
-           }
-       }
-
-        if { $diff_pass } {
-            break
-        } elseif { $end_1 && $end_2 } {
-            break
-        } elseif { $end_1 } {
-            send_log "extra regexps in $file_2 starting with \"^$line_b$\"\nEOF from $file_1\n"
-            verbose "extra regexps in $file_2 starting with \"^$line_b$\"\nEOF from $file_1" 3
-            set differences 1
-            break
-        } elseif { $end_2 } {
-            send_log "extra lines in $file_1 starting with \"^$line_a$\"\nEOF from $file_2\n"
-            verbose "extra lines in $file_1 starting with \"^$line_a$\"\nEOF from $file_2\n" 3
-            set differences 1
-            break
-        } else {
-            verbose "regexp \"^$line_b$\"\nline   \"$line_a\"" 3
-            if ![regexp "^$line_b$" "$line_a"] {
-               send_log "regexp_diff match failure\n"
-               send_log "regexp \"^$line_b$\"\nline   \"$line_a\"\n"
-               set differences 1
-            }
-        }
-    }
-
-    if { $differences == 0 && !$diff_pass && [eof $file_a] != [eof $file_b] } {
-       send_log "$file_1 and $file_2 are different lengths\n"
-       verbose "$file_1 and $file_2 are different lengths" 3
-       set differences 1
-    }
-
-    close $file_a
-    close $file_b
-
-    return $differences
-}
-
-proc file_contents { filename } {
-    set file [open $filename r]
-    set contents [read $file]
-    close $file
-    return $contents
+     {{objdump -s endian.sld} {objdump -d endian.dld}} "endinanl.bin" }
 }
 
 run_ld_link_tests $sh64tests