aboutsummaryrefslogtreecommitdiff
path: root/ld/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'ld/testsuite')
-rw-r--r--ld/testsuite/ChangeLog21
-rw-r--r--ld/testsuite/ld-sh/arch/arch.exp244
-rw-r--r--ld/testsuite/ld-sh/arch/arch_expected.txt237
-rw-r--r--ld/testsuite/ld-sh/arch/sh-dsp.s3
-rw-r--r--ld/testsuite/ld-sh/arch/sh.s3
-rw-r--r--ld/testsuite/ld-sh/arch/sh2.s3
-rw-r--r--ld/testsuite/ld-sh/arch/sh2e.s3
-rw-r--r--ld/testsuite/ld-sh/arch/sh3-dsp.s4
-rw-r--r--ld/testsuite/ld-sh/arch/sh3-nommu.s3
-rw-r--r--ld/testsuite/ld-sh/arch/sh3.s4
-rw-r--r--ld/testsuite/ld-sh/arch/sh3e.s3
-rw-r--r--ld/testsuite/ld-sh/arch/sh4-nofpu.s4
-rw-r--r--ld/testsuite/ld-sh/arch/sh4-nommu-nofpu.s3
-rw-r--r--ld/testsuite/ld-sh/arch/sh4.s3
-rw-r--r--ld/testsuite/ld-sh/arch/sh4a-nofpu.s3
-rw-r--r--ld/testsuite/ld-sh/arch/sh4a.s3
-rw-r--r--ld/testsuite/ld-sh/arch/sh4al-dsp.s3
17 files changed, 547 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 979d491..e129ab5 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,24 @@
+2004-06-29 J"orn Rennecke <joern.rennecke@superh.com>
+
+ Actually add these files:
+ 2004-05-28 Andrew Stubbs <andrew.stubbs@superh.com>
+ * testsuite/ld-sh/arch/arch.exp: New test script.
+ * testsuite/ld-sh/arch/arch_expected.txt: New file.
+ * testsuite/ld-sh/arch/sh.s: New file.
+ * testsuite/ld-sh/arch/sh2.s: New file.
+ * testsuite/ld-sh/arch/sh-dsp.s: New file.
+ * testsuite/ld-sh/arch/sh2e.s: New file.
+ * testsuite/ld-sh/arch/sh3-nommu.s: New file.
+ * testsuite/ld-sh/arch/sh3.s: New file.
+ * testsuite/ld-sh/arch/sh3-dsp.s: New file.
+ * testsuite/ld-sh/arch/sh3e.s: New file.
+ * testsuite/ld-sh/arch/sh4-nommu-nofpu.s: New file.
+ * testsuite/ld-sh/arch/sh4-nofpu.s: New file.
+ * testsuite/ld-sh/arch/sh4.s: New file.
+ * testsuite/ld-sh/arch/sh4a-nofpu.s: New file.
+ * testsuite/ld-sh/arch/sh4al-dsp.s: New file.
+ * testsuite/ld-sh/arch/sh4a.s: New file.
+
2004-06-29 Alan Modra <amodra@bigpond.net.au>
* ld-elf/frame.exp: Don't run on mcore.
diff --git a/ld/testsuite/ld-sh/arch/arch.exp b/ld/testsuite/ld-sh/arch/arch.exp
new file mode 100644
index 0000000..94120a2
--- /dev/null
+++ b/ld/testsuite/ld-sh/arch/arch.exp
@@ -0,0 +1,244 @@
+# Copyright (C) 2004
+# Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# dejagnu@gnu.org
+
+# This scripts tests of all available SH architectures with all other SH
+# architectures. It ensures that those combinations which should not work
+# do not work, and that those that should work produce the correct output
+# architecture.
+#
+# It looks for files in the same directory as this file named sh*.s .
+# Each file must contain one or more instructions which uniquely identifies
+# that architecture. The architecture name is inferred from the file name.
+#
+# It also creates another architecture named 'sh-unknown' by modifying
+# another arch type (there is no way to assemble such an arch) in order
+# to test what the linker would do with an older object file.
+#
+# The script generates the architecture permutations automatically,
+# but it reads the expected results from the file arch_expected.txt (also
+# found in the same directory as this script).
+#
+# The arch_expected.txt file should NOT be hand edited. Whenever the script
+# is run (e.g. with 'make check') it creates a new (usually identical) file
+# named arch_results.txt in the <objdir>/ld/testsuite directory. When the
+# expected results change (or new architectures are added) this new file
+# can be used to replace arch_expected.txt with no modification required.
+
+
+# The procedure extracts the architecture name from the objdump output.
+# If there is no architecture name (or objdump output changes significantly)
+# then the behaviour is undefined, but it will most likely return junk.
+
+proc get_sh_arch { ofile } {
+ global OBJDUMP
+
+ set cmd "$OBJDUMP -f $ofile"
+ verbose -log $cmd
+ catch "exec $cmd" objdump_output
+ verbose -log $objdump_output
+
+ set objdump_output [string replace $objdump_output 0 \
+ [expr [string first "architecture:" $objdump_output] + 13] ""]
+
+ return [string range $objdump_output 0 [expr [string first "," $objdump_output] - 1]]
+}
+
+
+# This procedure runs two tests:
+# Test 1: Check the linker can link the given files.
+# Test 2: Check that the resultant architecture is as expected.
+# It also writes an entry to the arch_results.txt file.
+
+proc test_arch { file1 file2 arch resultfile } {
+ global LD
+
+ set name1 [file tail $file1]
+ set rootname1 [file rootname $name1]
+
+ set name2 [file tail $file2]
+ set rootname2 [file rootname $name2]
+
+ set result [default_ld_simple_link $LD "${rootname1}_${rootname2}.o" "$file1 $file2"]
+
+ if {$result == 1} then {
+ pass "$rootname1 file should link with $rootname2 file"
+
+ set result [get_sh_arch "${rootname1}_${rootname2}.o"]
+ puts $resultfile [format "%-20s %-20s %s" $file1 $file2 $result]
+
+ if {$result == $arch} then {
+ pass "$rootname1 file with $rootname2 file should link to arch $arch"
+ file delete "${rootname1}_${rootname2}.o"
+ } else {
+ fail "$rootname1 file with $rootname2 file should link to arch $arch"
+ }
+ } else {
+ fail "$rootname1 file should link with $rootname2 file"
+
+ puts $resultfile [format "%-20s %-20s ERROR" $file1 $file2]
+ untested "$rootname2 file with $rootname2 file should link to arch $arch"
+ }
+
+}
+
+
+
+# This procedure tests that a pair of files that are not
+# suposed to link does, in fact, not link.
+# It also writes an entry to the arch_results.txt file.
+
+proc test_arch_error { file1 file2 resultfile} {
+ global link_output LD
+
+ set name1 [file tail $file1]
+ set rootname1 [file rootname $name1]
+
+ set name2 [file tail $file2]
+ set rootname2 [file rootname $name2]
+
+ set result [default_ld_simple_link $LD "${rootname1}_${rootname2}.o" "$file1 $file2"]
+
+ if {$result == 1} then {
+ fail "$rootname1 file should NOT link with $rootname2 file"
+ puts $resultfile [format "%-20s %-20s [get_sh_arch ${rootname1}_${rootname2}.o]" $file1 $file2]
+ } else {
+ pass "$rootname1 file should NOT link with $rootname2 file"
+ puts $resultfile [format "%-20s %-20s ERROR" $file1 $file2]
+ }
+}
+
+# These tests are not suitable for sh-coff because
+# coff does not store the architecture information.
+
+if [istarget sh*-*-elf] then {
+ global subdir srcdir
+ global AS
+
+ # Find all the architectures and assemble all the files
+ # we will use for the linker tests.
+
+ set sfilelist [lsort -ascii [glob "$srcdir/$subdir/sh*.s"]]
+ set ofilelist {}
+ foreach sfile $sfilelist {
+ set ofile "[file rootname [file tail $sfile]].o"
+ lappend ofilelist $ofile
+
+ set endian "-big"
+ if [string equal [big_or_little_endian] " -EL"] then {
+ set endian "-little"
+ }
+
+ set cmd "$AS $endian -isa=any $sfile -o $ofile"
+ verbose -log $cmd
+ catch "exec $cmd" as_output
+ if ![file exists $ofile] then {
+ verbose -log $as_output
+ perror "$sfile: assembly failed"
+ }
+ }
+
+ # Create the default arch ofile
+ # This cannot be created with the assembler
+ # sh4al-dsp is number 6, sh-unknown is 0
+
+ lappend ofilelist "sh-unknown.o"
+
+ if [string equal [big_or_little_endian] " -EL"] then {
+ set cmd {xxd sh4al-dsp.o | sed {s/\(^0000020: .... .... \)06/\100/} | xxd -r - sh-unknown.o}
+ } else {
+ set cmd {xxd sh4al-dsp.o | sed {s/\(^0000020: .... .... .... ..\)06/\100/} | xxd -r - sh-unknown.o}
+ }
+ verbose -log $cmd
+ catch "exec $cmd" xxd_output
+ verbose -log $xxd_output
+ if [string equal [get_sh_arch "sh-unknown.o"] "sh4al-dsp"] then {
+ perror "sh-unknown.o not generated correctly"
+ }
+
+
+ # Initialise the results file
+
+ set outfile [open "arch_results.txt" w 0666]
+ puts $outfile "# Generated file. DO NOT EDIT"
+ puts $outfile "#"
+ puts $outfile "# This file is generated by ld/testsuite/ld-sh/arch/arch.exp ."
+ puts $outfile "# It contains the expected results of the tests."
+ puts $outfile "# If the tests are failing because the expected results"
+ puts $outfile "# have changed then run 'make check' and copy the new file"
+ puts $outfile "# from <objdir>/ld/arch_results.txt"
+ puts $outfile "# to <srcdir>/ld/testsuite/ld-sh/arch/arch_expected.txt ."
+ puts $outfile "# Make sure the new expected results are ALL correct."
+ puts $outfile "#"
+ puts $outfile [format "# %-18s %-20s %s" "FILE1" "FILE2" "OUTPUT"]
+ puts $outfile [format "# %-18s %-20s %s" "-----" "-----" "------"]
+
+ # Open the expected results file and skip the header
+
+ set infile [open "$srcdir/$subdir/arch_expected.txt" r]
+ while {[gets $infile line] >= 0 && [string match {\#*} $line]} {verbose -log "reading '$line'"}
+
+ foreach file1 $ofilelist {
+ foreach file2 $ofilelist {
+ set name1 [file tail $file1]
+ set rootname1 [file rootname $name1]
+
+ set name2 [file tail $file2]
+ set rootname2 [file rootname $name2]
+
+ # Decode the expected result from the file
+
+ scan $line "%s %s %s" exfile1 exfile2 exarch
+ verbose -log "exfile1 = '$exfile1', exfile2 = '$exfile2', exarch = '$exarch'"
+ verbose -log " name1 = '$name1', name2 = '$name2'"
+
+ if {[string equal $exfile1 $name1] && [string equal $exfile2 $file2]} then {
+ # The expected result file makes sense and
+ # appears up-to-date (the file and options match)
+
+ if {[string equal $exarch "ERROR"]} then {
+ test_arch_error $file1 $file2 $outfile
+ } else {
+ test_arch $file1 $file2 $exarch $outfile
+ }
+ } else {
+ # The expected result file isn't right somehow
+ # so just try any old test. This will cause
+ # many failures, but will genrate the results file.
+
+ test_arch $file1 $file2 $rootname1 $outfile
+ }
+
+ # Read the next line from the expected result file.
+ # This is at the end because the process of skipping
+ # the header reads the first real line
+
+ if [gets $infile line] then {
+ verbose -log "reading '$line'"
+ }
+ }
+ }
+
+ close $infile
+ close $outfile
+
+ foreach file $ofilelist {
+ file delete $file
+ }
+}
diff --git a/ld/testsuite/ld-sh/arch/arch_expected.txt b/ld/testsuite/ld-sh/arch/arch_expected.txt
new file mode 100644
index 0000000..60e9338
--- /dev/null
+++ b/ld/testsuite/ld-sh/arch/arch_expected.txt
@@ -0,0 +1,237 @@
+# Generated file. DO NOT EDIT
+#
+# This file is generated by ld/testsuite/ld-sh/arch/arch.exp .
+# It contains the expected results of the tests.
+# If the tests are failing because the expected results
+# have changed then run 'make check' and copy the new file
+# from <objdir>/ld/testsuite/arch_results.txt
+# to <srcdir>/ld/testsuite/ld-sh/arch/arch_expected.txt .
+# Make sure the new expected results are ALL correct.
+#
+# FILE1 FILE2 OUTPUT
+# ----- ----- ------
+sh-dsp.o sh-dsp.o sh-dsp
+sh-dsp.o sh.o sh-dsp
+sh-dsp.o sh2.o sh-dsp
+sh-dsp.o sh2e.o ERROR
+sh-dsp.o sh3-dsp.o sh3-dsp
+sh-dsp.o sh3-nommu.o sh3-dsp
+sh-dsp.o sh3.o sh3-dsp
+sh-dsp.o sh3e.o ERROR
+sh-dsp.o sh4-nofpu.o sh4al-dsp
+sh-dsp.o sh4-nommu-nofpu.o sh4al-dsp
+sh-dsp.o sh4.o ERROR
+sh-dsp.o sh4a-nofpu.o sh4al-dsp
+sh-dsp.o sh4a.o ERROR
+sh-dsp.o sh4al-dsp.o sh4al-dsp
+sh-dsp.o sh-unknown.o sh3-dsp
+sh.o sh-dsp.o sh-dsp
+sh.o sh.o sh
+sh.o sh2.o sh2
+sh.o sh2e.o sh2e
+sh.o sh3-dsp.o sh3-dsp
+sh.o sh3-nommu.o sh3-nommu
+sh.o sh3.o sh3
+sh.o sh3e.o sh3e
+sh.o sh4-nofpu.o sh4-nofpu
+sh.o sh4-nommu-nofpu.o sh4-nommu-nofpu
+sh.o sh4.o sh4
+sh.o sh4a-nofpu.o sh4a-nofpu
+sh.o sh4a.o sh4a
+sh.o sh4al-dsp.o sh4al-dsp
+sh.o sh-unknown.o sh3
+sh2.o sh-dsp.o sh-dsp
+sh2.o sh.o sh2
+sh2.o sh2.o sh2
+sh2.o sh2e.o sh2e
+sh2.o sh3-dsp.o sh3-dsp
+sh2.o sh3-nommu.o sh3-nommu
+sh2.o sh3.o sh3
+sh2.o sh3e.o sh3e
+sh2.o sh4-nofpu.o sh4-nofpu
+sh2.o sh4-nommu-nofpu.o sh4-nommu-nofpu
+sh2.o sh4.o sh4
+sh2.o sh4a-nofpu.o sh4a-nofpu
+sh2.o sh4a.o sh4a
+sh2.o sh4al-dsp.o sh4al-dsp
+sh2.o sh-unknown.o sh3
+sh2e.o sh-dsp.o ERROR
+sh2e.o sh.o sh2e
+sh2e.o sh2.o sh2e
+sh2e.o sh2e.o sh2e
+sh2e.o sh3-dsp.o ERROR
+sh2e.o sh3-nommu.o sh3e
+sh2e.o sh3.o sh3e
+sh2e.o sh3e.o sh3e
+sh2e.o sh4-nofpu.o sh4
+sh2e.o sh4-nommu-nofpu.o sh4
+sh2e.o sh4.o sh4
+sh2e.o sh4a-nofpu.o sh4a
+sh2e.o sh4a.o sh4a
+sh2e.o sh4al-dsp.o ERROR
+sh2e.o sh-unknown.o sh3e
+sh3-dsp.o sh-dsp.o sh3-dsp
+sh3-dsp.o sh.o sh3-dsp
+sh3-dsp.o sh2.o sh3-dsp
+sh3-dsp.o sh2e.o ERROR
+sh3-dsp.o sh3-dsp.o sh3-dsp
+sh3-dsp.o sh3-nommu.o sh3-dsp
+sh3-dsp.o sh3.o sh3-dsp
+sh3-dsp.o sh3e.o ERROR
+sh3-dsp.o sh4-nofpu.o sh4al-dsp
+sh3-dsp.o sh4-nommu-nofpu.o sh4al-dsp
+sh3-dsp.o sh4.o ERROR
+sh3-dsp.o sh4a-nofpu.o sh4al-dsp
+sh3-dsp.o sh4a.o ERROR
+sh3-dsp.o sh4al-dsp.o sh4al-dsp
+sh3-dsp.o sh-unknown.o sh3-dsp
+sh3-nommu.o sh-dsp.o sh3-dsp
+sh3-nommu.o sh.o sh3-nommu
+sh3-nommu.o sh2.o sh3-nommu
+sh3-nommu.o sh2e.o sh3e
+sh3-nommu.o sh3-dsp.o sh3-dsp
+sh3-nommu.o sh3-nommu.o sh3-nommu
+sh3-nommu.o sh3.o sh3
+sh3-nommu.o sh3e.o sh3e
+sh3-nommu.o sh4-nofpu.o sh4-nofpu
+sh3-nommu.o sh4-nommu-nofpu.o sh4-nommu-nofpu
+sh3-nommu.o sh4.o sh4
+sh3-nommu.o sh4a-nofpu.o sh4a-nofpu
+sh3-nommu.o sh4a.o sh4a
+sh3-nommu.o sh4al-dsp.o sh4al-dsp
+sh3-nommu.o sh-unknown.o sh3
+sh3.o sh-dsp.o sh3-dsp
+sh3.o sh.o sh3
+sh3.o sh2.o sh3
+sh3.o sh2e.o sh3e
+sh3.o sh3-dsp.o sh3-dsp
+sh3.o sh3-nommu.o sh3
+sh3.o sh3.o sh3
+sh3.o sh3e.o sh3e
+sh3.o sh4-nofpu.o sh4-nofpu
+sh3.o sh4-nommu-nofpu.o sh4-nofpu
+sh3.o sh4.o sh4
+sh3.o sh4a-nofpu.o sh4a-nofpu
+sh3.o sh4a.o sh4a
+sh3.o sh4al-dsp.o sh4al-dsp
+sh3.o sh-unknown.o sh3
+sh3e.o sh-dsp.o ERROR
+sh3e.o sh.o sh3e
+sh3e.o sh2.o sh3e
+sh3e.o sh2e.o sh3e
+sh3e.o sh3-dsp.o ERROR
+sh3e.o sh3-nommu.o sh3e
+sh3e.o sh3.o sh3e
+sh3e.o sh3e.o sh3e
+sh3e.o sh4-nofpu.o sh4
+sh3e.o sh4-nommu-nofpu.o sh4
+sh3e.o sh4.o sh4
+sh3e.o sh4a-nofpu.o sh4a
+sh3e.o sh4a.o sh4a
+sh3e.o sh4al-dsp.o ERROR
+sh3e.o sh-unknown.o sh3e
+sh4-nofpu.o sh-dsp.o sh4al-dsp
+sh4-nofpu.o sh.o sh4-nofpu
+sh4-nofpu.o sh2.o sh4-nofpu
+sh4-nofpu.o sh2e.o sh4
+sh4-nofpu.o sh3-dsp.o sh4al-dsp
+sh4-nofpu.o sh3-nommu.o sh4-nofpu
+sh4-nofpu.o sh3.o sh4-nofpu
+sh4-nofpu.o sh3e.o sh4
+sh4-nofpu.o sh4-nofpu.o sh4-nofpu
+sh4-nofpu.o sh4-nommu-nofpu.o sh4-nofpu
+sh4-nofpu.o sh4.o sh4
+sh4-nofpu.o sh4a-nofpu.o sh4a-nofpu
+sh4-nofpu.o sh4a.o sh4a
+sh4-nofpu.o sh4al-dsp.o sh4al-dsp
+sh4-nofpu.o sh-unknown.o sh4-nofpu
+sh4-nommu-nofpu.o sh-dsp.o sh4al-dsp
+sh4-nommu-nofpu.o sh.o sh4-nommu-nofpu
+sh4-nommu-nofpu.o sh2.o sh4-nommu-nofpu
+sh4-nommu-nofpu.o sh2e.o sh4
+sh4-nommu-nofpu.o sh3-dsp.o sh4al-dsp
+sh4-nommu-nofpu.o sh3-nommu.o sh4-nommu-nofpu
+sh4-nommu-nofpu.o sh3.o sh4-nofpu
+sh4-nommu-nofpu.o sh3e.o sh4
+sh4-nommu-nofpu.o sh4-nofpu.o sh4-nofpu
+sh4-nommu-nofpu.o sh4-nommu-nofpu.o sh4-nommu-nofpu
+sh4-nommu-nofpu.o sh4.o sh4
+sh4-nommu-nofpu.o sh4a-nofpu.o sh4a-nofpu
+sh4-nommu-nofpu.o sh4a.o sh4a
+sh4-nommu-nofpu.o sh4al-dsp.o sh4al-dsp
+sh4-nommu-nofpu.o sh-unknown.o sh4-nofpu
+sh4.o sh-dsp.o ERROR
+sh4.o sh.o sh4
+sh4.o sh2.o sh4
+sh4.o sh2e.o sh4
+sh4.o sh3-dsp.o ERROR
+sh4.o sh3-nommu.o sh4
+sh4.o sh3.o sh4
+sh4.o sh3e.o sh4
+sh4.o sh4-nofpu.o sh4
+sh4.o sh4-nommu-nofpu.o sh4
+sh4.o sh4.o sh4
+sh4.o sh4a-nofpu.o sh4a
+sh4.o sh4a.o sh4a
+sh4.o sh4al-dsp.o ERROR
+sh4.o sh-unknown.o sh4
+sh4a-nofpu.o sh-dsp.o sh4al-dsp
+sh4a-nofpu.o sh.o sh4a-nofpu
+sh4a-nofpu.o sh2.o sh4a-nofpu
+sh4a-nofpu.o sh2e.o sh4a
+sh4a-nofpu.o sh3-dsp.o sh4al-dsp
+sh4a-nofpu.o sh3-nommu.o sh4a-nofpu
+sh4a-nofpu.o sh3.o sh4a-nofpu
+sh4a-nofpu.o sh3e.o sh4a
+sh4a-nofpu.o sh4-nofpu.o sh4a-nofpu
+sh4a-nofpu.o sh4-nommu-nofpu.o sh4a-nofpu
+sh4a-nofpu.o sh4.o sh4a
+sh4a-nofpu.o sh4a-nofpu.o sh4a-nofpu
+sh4a-nofpu.o sh4a.o sh4a
+sh4a-nofpu.o sh4al-dsp.o sh4al-dsp
+sh4a-nofpu.o sh-unknown.o sh4a-nofpu
+sh4a.o sh-dsp.o ERROR
+sh4a.o sh.o sh4a
+sh4a.o sh2.o sh4a
+sh4a.o sh2e.o sh4a
+sh4a.o sh3-dsp.o ERROR
+sh4a.o sh3-nommu.o sh4a
+sh4a.o sh3.o sh4a
+sh4a.o sh3e.o sh4a
+sh4a.o sh4-nofpu.o sh4a
+sh4a.o sh4-nommu-nofpu.o sh4a
+sh4a.o sh4.o sh4a
+sh4a.o sh4a-nofpu.o sh4a
+sh4a.o sh4a.o sh4a
+sh4a.o sh4al-dsp.o ERROR
+sh4a.o sh-unknown.o sh4a
+sh4al-dsp.o sh-dsp.o sh4al-dsp
+sh4al-dsp.o sh.o sh4al-dsp
+sh4al-dsp.o sh2.o sh4al-dsp
+sh4al-dsp.o sh2e.o ERROR
+sh4al-dsp.o sh3-dsp.o sh4al-dsp
+sh4al-dsp.o sh3-nommu.o sh4al-dsp
+sh4al-dsp.o sh3.o sh4al-dsp
+sh4al-dsp.o sh3e.o ERROR
+sh4al-dsp.o sh4-nofpu.o sh4al-dsp
+sh4al-dsp.o sh4-nommu-nofpu.o sh4al-dsp
+sh4al-dsp.o sh4.o ERROR
+sh4al-dsp.o sh4a-nofpu.o sh4al-dsp
+sh4al-dsp.o sh4a.o ERROR
+sh4al-dsp.o sh4al-dsp.o sh4al-dsp
+sh4al-dsp.o sh-unknown.o sh4al-dsp
+sh-unknown.o sh-dsp.o sh3-dsp
+sh-unknown.o sh.o sh3
+sh-unknown.o sh2.o sh3
+sh-unknown.o sh2e.o sh3e
+sh-unknown.o sh3-dsp.o sh3-dsp
+sh-unknown.o sh3-nommu.o sh3
+sh-unknown.o sh3.o sh3
+sh-unknown.o sh3e.o sh3e
+sh-unknown.o sh4-nofpu.o sh4-nofpu
+sh-unknown.o sh4-nommu-nofpu.o sh4-nofpu
+sh-unknown.o sh4.o sh4
+sh-unknown.o sh4a-nofpu.o sh4a-nofpu
+sh-unknown.o sh4a.o sh4a
+sh-unknown.o sh4al-dsp.o sh4al-dsp
+sh-unknown.o sh-unknown.o sh3
diff --git a/ld/testsuite/ld-sh/arch/sh-dsp.s b/ld/testsuite/ld-sh/arch/sh-dsp.s
new file mode 100644
index 0000000..fcfdbd3
--- /dev/null
+++ b/ld/testsuite/ld-sh/arch/sh-dsp.s
@@ -0,0 +1,3 @@
+ .section .text
+sh2_dsp:
+ ldc r1,mod
diff --git a/ld/testsuite/ld-sh/arch/sh.s b/ld/testsuite/ld-sh/arch/sh.s
new file mode 100644
index 0000000..22feb5f
--- /dev/null
+++ b/ld/testsuite/ld-sh/arch/sh.s
@@ -0,0 +1,3 @@
+ .section .text
+sh1:
+ mov r1,r2
diff --git a/ld/testsuite/ld-sh/arch/sh2.s b/ld/testsuite/ld-sh/arch/sh2.s
new file mode 100644
index 0000000..a1e2607
--- /dev/null
+++ b/ld/testsuite/ld-sh/arch/sh2.s
@@ -0,0 +1,3 @@
+ .section .text
+sh2:
+ bt.s sh2
diff --git a/ld/testsuite/ld-sh/arch/sh2e.s b/ld/testsuite/ld-sh/arch/sh2e.s
new file mode 100644
index 0000000..207cee0
--- /dev/null
+++ b/ld/testsuite/ld-sh/arch/sh2e.s
@@ -0,0 +1,3 @@
+ .section .text
+sh2e:
+ lds r1,fpul
diff --git a/ld/testsuite/ld-sh/arch/sh3-dsp.s b/ld/testsuite/ld-sh/arch/sh3-dsp.s
new file mode 100644
index 0000000..9dfcfee
--- /dev/null
+++ b/ld/testsuite/ld-sh/arch/sh3-dsp.s
@@ -0,0 +1,4 @@
+ .section .text
+sh3_dsp:
+ ldc r1,ssr
+ ldc r1,mod
diff --git a/ld/testsuite/ld-sh/arch/sh3-nommu.s b/ld/testsuite/ld-sh/arch/sh3-nommu.s
new file mode 100644
index 0000000..5abfda9
--- /dev/null
+++ b/ld/testsuite/ld-sh/arch/sh3-nommu.s
@@ -0,0 +1,3 @@
+ .section .text
+sh3_nommu:
+ ldc r1,ssr
diff --git a/ld/testsuite/ld-sh/arch/sh3.s b/ld/testsuite/ld-sh/arch/sh3.s
new file mode 100644
index 0000000..de14a8f
--- /dev/null
+++ b/ld/testsuite/ld-sh/arch/sh3.s
@@ -0,0 +1,4 @@
+ .section .text
+sh3:
+ ldc r1,ssr
+ ldtlb
diff --git a/ld/testsuite/ld-sh/arch/sh3e.s b/ld/testsuite/ld-sh/arch/sh3e.s
new file mode 100644
index 0000000..acb6ac8
--- /dev/null
+++ b/ld/testsuite/ld-sh/arch/sh3e.s
@@ -0,0 +1,3 @@
+ .section .text
+sh3e:
+ fsqrt fr1
diff --git a/ld/testsuite/ld-sh/arch/sh4-nofpu.s b/ld/testsuite/ld-sh/arch/sh4-nofpu.s
new file mode 100644
index 0000000..b8bdec1
--- /dev/null
+++ b/ld/testsuite/ld-sh/arch/sh4-nofpu.s
@@ -0,0 +1,4 @@
+ .section .text
+sh4_nofpu:
+ ldc r1,sgr
+ ldtlb
diff --git a/ld/testsuite/ld-sh/arch/sh4-nommu-nofpu.s b/ld/testsuite/ld-sh/arch/sh4-nommu-nofpu.s
new file mode 100644
index 0000000..a6febe3
--- /dev/null
+++ b/ld/testsuite/ld-sh/arch/sh4-nommu-nofpu.s
@@ -0,0 +1,3 @@
+ .section .text
+sh4_nommu_nofpu:
+ ldc r1,sgr
diff --git a/ld/testsuite/ld-sh/arch/sh4.s b/ld/testsuite/ld-sh/arch/sh4.s
new file mode 100644
index 0000000..13e633d
--- /dev/null
+++ b/ld/testsuite/ld-sh/arch/sh4.s
@@ -0,0 +1,3 @@
+ .section .text
+sh4:
+ fabs dr0
diff --git a/ld/testsuite/ld-sh/arch/sh4a-nofpu.s b/ld/testsuite/ld-sh/arch/sh4a-nofpu.s
new file mode 100644
index 0000000..e5058c7
--- /dev/null
+++ b/ld/testsuite/ld-sh/arch/sh4a-nofpu.s
@@ -0,0 +1,3 @@
+ .section .text
+sh4a_nofpu:
+ icbi @r1
diff --git a/ld/testsuite/ld-sh/arch/sh4a.s b/ld/testsuite/ld-sh/arch/sh4a.s
new file mode 100644
index 0000000..ff96992
--- /dev/null
+++ b/ld/testsuite/ld-sh/arch/sh4a.s
@@ -0,0 +1,3 @@
+ .section .text
+sh4a:
+ fpchg
diff --git a/ld/testsuite/ld-sh/arch/sh4al-dsp.s b/ld/testsuite/ld-sh/arch/sh4al-dsp.s
new file mode 100644
index 0000000..8ff6a8b
--- /dev/null
+++ b/ld/testsuite/ld-sh/arch/sh4al-dsp.s
@@ -0,0 +1,3 @@
+ .section .text
+sh4al_dsp:
+ clrdmxy