mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-30 12:44:10 +08:00
213516ef31
This commit is the result of running the gdb/copyright.py script, which automated the update of the copyright year range for all source files managed by the GDB project to be updated to include year 2023.
121 lines
3.6 KiB
Plaintext
121 lines
3.6 KiB
Plaintext
# Copyright 2009-2023 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
|
|
}
|