# Copyright 2020-2021 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, see <http://www.gnu.org/licenses/>.

# This file is a dejagnu "board file" and is used to run the testsuite
# with gold --gdb-index.
#
# Example usage:
# bash$ make check RUNTESTFLAGS='--target_board=gold-gdb-index'

load_board_description "local-board"

# This is based on baseboards/unix.exp.
# At the moment we only support systems that unix.exp supports.
load_generic_config "unix"
process_multilib_options ""
set found_gcc [find_gcc]
set found_gxx [find_g++]
set found_gnatmake [find_gnatmake]
set found_f90 [find_gfortran]
set found_f77 [find_g77]
set_board_info compiler "$found_gcc"

set opts [list]
lappend opts \
    "-g" \
    "-Wl,--gdb-index" \
    "-fuse-ld=gold"

# Note: Gold also produces an index when -ggnu-pubnames is not used.  Comment
# out this line to exercise this scenario.
lappend opts -ggnu-pubnames

set_board_info debug_flags [join $opts]
