# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software
# Foundation, Inc.
#
# This file is part of DejaGnu.
#
# DejaGnu 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.
#
# DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

# This file is useful for gdb testing with libremote on an embedded linux
# board. In this case a Matsushita ASB2305 AM33 v2.0 board.

load_generic_config "libremote_server"

process_multilib_options ""

# The default compiler for this target.
#set_board_info compiler     "[find_gcc]"
set_board_info compiler     "am33_2.0-linux-gnu-gcc"

# We will be using the standard GDB remote protocol
set_board_info gdb_protocol "remote"

# Use techniques appropriate to a stub
set_board_info use_gdb_stub 1
set_board_info gdb,gdb_stub 1

# This gdbserver can only run a process once per session.
set_board_info gdb,do_reload_on_run 1

# There's no support for argument-passing (yet).
set_board_info noargs 1

# Can't do input (or output) in the current gdbserver.
set_board_info gdb,noinferiorio 1

# Can't do hardware watchpoints, in general
set_board_info gdb,no_hardware_watchpoints 1

# New
set_board_info gdb,nosignals 1
