
This commit brings all the changes made by running gdb/copyright.py as per GDB's Start of New Year Procedure. For the avoidance of doubt, all changes in this commits were performed by the script.
120 lines
3.6 KiB
Text
120 lines
3.6 KiB
Text
# Copyright 2009-2022 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/>.
|
|
|
|
# Generic subroutines for handling valgrind vgdb server.
|
|
|
|
#
|
|
# Start a vgdb server, and connect gdb to it. Return 0 on success, and -1 on
|
|
# error.
|
|
#
|
|
proc vgdb_start { {active_at_startup 1} } {
|
|
global binfile use_gdb_stub board testfile
|
|
global valgrind_spawn_id gdb_spawn_id
|
|
global decimal
|
|
|
|
set test "spawn valgrind"
|
|
set cmd_list [list]
|
|
lappend cmd_list "valgrind"
|
|
if { $active_at_startup } {
|
|
lappend cmd_list "--vgdb-error=0"
|
|
}
|
|
lappend cmd_list $binfile
|
|
set cmd [join $cmd_list]
|
|
set res [remote_spawn host $cmd]
|
|
if { $res < 0 || $res == "" } {
|
|
verbose -log "Spawning $cmd failed."
|
|
unsupported $test
|
|
return -1
|
|
}
|
|
pass $test
|
|
# Declare GDB now as running.
|
|
set gdb_spawn_id $res
|
|
|
|
# GDB started by vgdb stops already after the startup is executed, like with
|
|
# non-extended gdbserver. It is also not correct to run/attach the inferior.
|
|
set use_gdb_stub 1
|
|
|
|
set test "valgrind started"
|
|
# The trailing '.' differs for different memcheck versions.
|
|
gdb_test_multiple "" $test {
|
|
-re "==($decimal)== Memcheck, a memory error detector\\.?\r\n" {
|
|
set vgdbpid $expect_out(1,string)
|
|
pass $test
|
|
}
|
|
-re "valgrind: failed to start tool 'memcheck' for platform '.*': No such file or directory" {
|
|
unsupported $test
|
|
return -1
|
|
}
|
|
-re "valgrind: wrong ELF executable class" {
|
|
unsupported $test
|
|
return -1
|
|
}
|
|
-re "command not found" {
|
|
# The spawn succeeded, but then valgrind was not found - e.g. if
|
|
# we spawned SSH to a remote system.
|
|
unsupported $test
|
|
return -1
|
|
}
|
|
-re "valgrind: Bad option.*--vgdb-error=0" {
|
|
# valgrind is not >= 3.7.0.
|
|
unsupported $test
|
|
return -1
|
|
}
|
|
}
|
|
|
|
# Do not kill valgrind.
|
|
set valgrind_spawn_id [board_info host fileid]
|
|
unset gdb_spawn_id
|
|
set board [host_info name]
|
|
unset_board_info fileid
|
|
|
|
clean_restart $testfile
|
|
|
|
set_remotetimeout 4
|
|
|
|
# Make sure we're disconnected, in case we're testing with the
|
|
# native-extended-gdbserver board, where gdb_start/gdb_load spawn
|
|
# gdbserver and connect to it.
|
|
gdb_test "disconnect" ".*"
|
|
|
|
set vgdbcmd "target remote | vgdb --wait=2 --max-invoke-ms=2500 --pid=$vgdbpid"
|
|
|
|
if { $active_at_startup } {
|
|
gdb_test "$vgdbcmd" " in \\.?_start .*" "target remote for vgdb"
|
|
} else {
|
|
# Let $binfile run a bit before attaching. This is a bit of a hack,
|
|
# in that it lets test-case valgrind-infcall-2.exp run to the point of
|
|
# nanosleep, which seems to be required to trigger the error condition.
|
|
# So, without this, we hit
|
|
# "UNSUPPORTED: gdb.base/valgrind-infcall-2.exp: do printf".
|
|
exec sleep 1
|
|
|
|
# Connect to vgdb. Don't expect to be anywhere in particular.
|
|
gdb_test "$vgdbcmd" "" "target remote for vgdb"
|
|
}
|
|
|
|
gdb_test "monitor v.set gdb_output" "valgrind output will go to gdb.*"
|
|
return 0
|
|
}
|
|
|
|
#
|
|
# Stop vgdb server.
|
|
#
|
|
proc vgdb_stop { } {
|
|
global valgrind_spawn_id
|
|
|
|
# Only if valgrind got stuck.
|
|
kill_wait_spawned_process $valgrind_spawn_id
|
|
}
|