-# Copyright 2009 Free Software Foundation, Inc.
+# Copyright 2009-2016 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
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-set test valgrind-db-attach
-set srcfile $test.c
-set executable $test
-set binfile ${objdir}/${subdir}/${executable}
-if {[build_executable $test.exp $executable $srcfile {debug}] == -1} {
+if [is_remote target] {
+ # The test always runs locally.
+ return 0
+}
+
+standard_testfile .c
+if {[build_executable $testfile.exp $testfile $srcfile {debug}] == -1} {
return -1
}
set test "spawn valgrind"
set cmd "valgrind --db-attach=yes $db_command $binfile"
-set res [remote_spawn host $cmd];
+set res [remote_spawn host $cmd]
if { $res < 0 || $res == "" } {
verbose -log "Spawning $cmd failed."
unsupported $test
}
pass $test
# Declare GDB now as running.
-set gdb_spawn_id -1
+set gdb_spawn_id $res
+
+# GDB spawned by `valgrind --db-attach=yes' 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.
set double_free [gdb_get_line_number "double-free"]
+set test "attach to debugger"
gdb_test_multiple "" $test {
- -re "Invalid free\\(\\) / delete / delete\\\[\\\]\r\n.*: main \\(${srcfile}:$double_free\\)\r\n.*---- Attach to debugger \\? --- \[^\r\n\]* ---- " {
+ -re "Invalid free\\(\\).*: main \\(${srcfile}:$double_free\\)\r\n.*---- Attach to debugger \\? --- \[^\r\n\]* ---- " {
send_gdb "y\r"
}
-re "---- Attach to debugger \\? --- \[^\r\n\]* ---- " {
gdb_test_no_output "set width 0"
gdb_test "bt" "in main \\(.*\\) at .*${srcfile}:$double_free"
+
+# Explicitly kill the program so it doesn't dump core when we quit->detach.
+gdb_test "kill" "" "kill program" "Kill the program being debugged.*y or n. $" "y"