# 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 is a list of toolchains that are supported on this board.
set_board_info target_install {sparclet-aout}

# Load the generic configuration for this board. This will define any
# routines needed by the tool to communicate with the board,.
load_generic_config "sparclet"

# It needs broken-saverestore by default.
process_multilib_options "-mbroken-saverestore"

# We only support newlib on this target. We assume that all multilib
# options have been specified before we get here.
set_board_info compiler "[find_gcc]"
set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]"
set_board_info ldflags "-nostdlib [libgloss_link_flags] [newlib_link_flags] -Wl,-Ttext,0x12020000 -N"

# tsc701 linker script.
set_board_info ldscript "-Ttsc701.ld"

# The board doesn't return exit statuses and we need to indicate this.
# However, the standard GCC wrapper won't work with this target because
# it doesn't return stuff from printf ().
#set_board_info needs_status_wrapper 1

# The monitor uses a GDB stub.
set_board_info use_gdb_stub 1
# The GDB protocol used to communicate with this board.
set_board_info gdb_protocol "sparclet"
# The offset in memory that we load programs.
set_board_info gdb_load_offset "0x12020000"
# And the place in memory where we load the stub.
set_board_info gdb_stub_offset "0x12010000"
# No mathlib.
set_board_info mathlib ""
# We can't do I/O in GDB.
set_board_info gdb,noinferiorio 1
# Or pass arguments.
set_board_info noargs 1

set_board_info gcc,no_varargs 1
set_board_info gcc,no_label_values 1

# This is the old GDB prompt for the toolchain.
# Uncomment for old tests
set_board_info gdb_prompt "\\(gdb\\)"

# We always have to set a breakpoint at exit(), instead of just _exit().
set_board_info always_break_exit 1
