# Copyright (C) 2001-2014 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 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.

if { ! [istarget "mmix-*"] } {
    return
}

proc run_mmix_tests { } {
    global srcdir subdir runtests
    foreach test_name [lsort [find ${srcdir}/${subdir} *.d]] {
	# Keep basename.
	regsub -all ".*/\(\[^\.\]*\)\.d$" $test_name "\\1" test_name

	run_dump_test $test_name
    }

    # FIXME: more tests needed.
    # BFD_RELOC_MMIX_REG_OR_BYTE with symbol-difference with
    # relaxable thing in between.
    #
    # Other normal reloc with symbol-difference with
    # relaxable thing in between.
}

run_mmix_tests
