diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 22866e2d3c2..4242b98702c 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2020-05-25 Simon Marchi + + * boards/simavr.exp: New file. + 2020-05-25 Simon Marchi * lib/gdb.exp (gdb_run_cmd): Return success or failure. diff --git a/gdb/testsuite/boards/simavr.exp b/gdb/testsuite/boards/simavr.exp new file mode 100644 index 00000000000..386febfbfd8 --- /dev/null +++ b/gdb/testsuite/boards/simavr.exp @@ -0,0 +1,95 @@ +# Copyright 2020 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 . + +# Let the user override the path to the simavr binary with the SIMAVR_PATH +# environment variable. + +if { [info exists ::env(SIMAVR_PATH)] } { + set simavr_path $::env(SIMAVR_PATH) +} else { + set simavr_path simavr +} + +# Let the user override the simulated AVR chip with the SIMAVR_PATH environment +# variable. +# +# The value passed here must be supported by avr-gcc (see the -mmcu flag in the +# `AVR Options` section of the gcc(1) man page) and by simavr (see output of +# `simavr --list-cores`). + +if { [info exists ::env(SIMAVR_MCU)] } { + set simavr_mcu $::env(SIMAVR_MCU) +} else { + set simavr_mcu atmega2560 +} + +set simavr_last_load_file "" +set simavr_spawn_id "" + +set_board_info compiler avr-gcc +set_board_info c++compiler avr-g++ + +set_board_info cflags "-mmcu=${simavr_mcu}" +set_board_info ldflags "-mmcu=${simavr_mcu}" + +set_board_info use_gdb_stub 1 +set_board_info gdb_protocol "remote" +set_board_info gdb,do_reload_on_run 1 +set_board_info noargs 1 +set_board_info gdb,noinferiorio 1 +set_board_info gdb,nofileio 1 +set_board_info gdb,noresults 1 +set_board_info gdb,nosignals 1 + +proc gdb_load { file } { + global simavr_last_load_file + global simavr_spawn_id + global simavr_mcu + global simavr_path + global gdb_prompt + + if { $file == "" } { + set file $simavr_last_load_file + } else { + set simavr_last_load_file $file + } + + gdb_file_cmd $file + + # Close any previous simavr instance. + if { $simavr_spawn_id != "" } { + close -i $simavr_spawn_id + set simavr_spawn_id "" + } + + # Run simavr. + set cmd "spawn -noecho ${simavr_path} --mcu ${simavr_mcu} -g $file" + verbose -log "Spawning simavr: $cmd" + eval $cmd + set simavr_spawn_id $spawn_id + gdb_expect { + -i $simavr_spawn_id -re ".*avr_gdb_init listening on port 1234" {} + timeout { error "unable to start simavr" } + } + + # Connect to simavr. + send_gdb "target remote :1234\n" + gdb_expect { + -re ".*Remote debugging using :1234.*\[\r\n\]+$gdb_prompt $" {} + timeout { error "unable to connect to simavr stub" } + } + + return 0 +}