# 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.

# Load the tool-specific configuration for this board, as well as the
# generic configuration. This will define any routines needed by the
# tool to communicate with the board.
load_generic_config "i386-bozo"

# Use no multilib options by default.
process_multilib_options ""

# Default to COFF.
set add_flags ""
if { [board_info $board obj_format] == "a.out" } {
    set_board_info support_libs "${prefix_dir}/i386-aout/"
    set_board_info gdb_load_offset "0x41000000"
    set_board_info gdb_sect_offset "0x41000000"
    set add_flags "-N "
} elseif { [board_info $board obj_format] == "elf" } {
    set_board_info support_libs "${prefix_dir}/i386-elf/"
} else {
    set_board_info support_libs "${prefix_dir}/i386-coff/"
}

# The default compiler for this target.
set_board_info compiler "[find_gcc]"

# We only support newlib on this target. We assume that all multilib
# options have been specified before we get here.
set_board_info cflags "[newlib_include_flags]"
set_board_info ldflags "${add_flags}[newlib_link_flags] -B[board_info $board support_libs]"
# Whee, magic linker scripts hidden away.
set_board_info ldscript "-Tbozo.ld"

# The GDB protocol used with this board.
set_board_info gdb_protocol "remote"
# It's running a GDB stub in ROM.
set_board_info use_gdb_stub 1

# There's no support for argument-passing.
set_board_info noargs 1
# Can't do input.
set_board_info gdb,noinferiorio 1
# Nor does it have real signals.
set_board_info gdb,nosignals 1

# Limit the stack size.
set_board_info gcc,stack_size 16384

# Status wrapper will work, although exit statuses are reliable.
set_board_info needs_status_wrapper 1

# This is the start symbol in crt0.o.
set_board_info gdb,start_symbol "_start"
