#   Copyright 2009
#   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 "bfin-*-*"]} then {
  return
}

if {[which $OBJDUMP] == 0} then {
    perror "$OBJDUMP does not exist"
    return
}

send_user "Version [binutil_version $OBJDUMP]"

###################################
# Set up the test of unknown-mode.s
###################################

if {![binutils_assemble $srcdir/$subdir/unknown-mode.s tmpdir/unknown-mode.o]} then {
    return
}

if [is_remote host] {
    set objfile [remote_download host tmpdir/unknown-mode.o]
} else {
    set objfile tmpdir/unknown-mode.o
}

# Make sure that the unknown mode does not cause abort.

set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -D $objfile"]

set want "e1 c1\[ \t\]*ILLEGAL.*34 98 .*\[\r\n\]"

if [regexp $want $got] then {
    pass "unknown mode test"
} else {
    fail "unknown mode test"
}
