# Test Framework Driver for GDB driving a builtin simulator
#   Copyright 1994-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/>.

#
# gdb_target_sim
# Set gdb to target the simulator
#
proc gdb_target_sim { } {
    global gdb_prompt
    
    set target_sim_options "[board_info target gdb,target_sim_options]"

    send_gdb "target sim $target_sim_options\n"
    gdb_expect 60 {
	-re "Connected to the simulator.*$gdb_prompt $"	{
	    verbose "Set target to sim"
	}
	timeout { 
	    perror "Couldn't set target for simulator."
	    return -1
	}
    }
    return 0
}

#
# gdb_load -- load a file into the debugger.
#             return a -1 if anything goes wrong.
#
proc gdb_load { arg } {
    global verbose
    global loadpath
    global loadfile
    global GDB
    global gdb_prompt

    if { $arg != "" } {
	if [gdb_file_cmd $arg] then { return -1 }
    }

    if [gdb_target_sim] then { return -1 }

    send_gdb "load\n"
    gdb_expect 2400 {
	-re ".*$gdb_prompt $" {
	    if $verbose>1 then {
		send_user "Loaded $arg into $GDB\n"
	    }
	    return 0
	}
	-re "$gdb_prompt $"     {
	    if $verbose>1 then {
		perror "GDB couldn't load."
	    }
	}
	timeout {
	    if $verbose>1 then {
		perror "Timed out trying to load $arg."
	    }
	}
    }
    return -1
}
