[gdb/testsuite] Rewrite valgrind-db-attach.exp to use vgdb
The valgrind option --db-attach has been deprecated in version 3.10.0, and removed in version 3.11.0, so the valgrind-db-attach.exp testcase is unsupported starting version 3.11.0. Rewrite the test-case to use vgdb instead (making it supported starting version 3.7.0). Tested on x86_64-linux with and without --target_board=native-gdbserver. 2018-10-25 Tom de Vries <tdevries@suse.de> * gdb.base/valgrind-db-attach.exp: Rewrite to use vgdb.
This commit is contained in:
parent
b352ceb6b4
commit
bfcc0eba9e
|
@ -1,3 +1,7 @@
|
||||||
|
2018-10-25 Tom de Vries <tdevries@suse.de>
|
||||||
|
|
||||||
|
* gdb.base/valgrind-db-attach.exp: Rewrite to use vgdb.
|
||||||
|
|
||||||
2018-10-24 Tom de Vries <tdevries@suse.de>
|
2018-10-24 Tom de Vries <tdevries@suse.de>
|
||||||
|
|
||||||
* lib/gdb.exp (gdb_test_multiple): Log wait status on process no
|
* lib/gdb.exp (gdb_test_multiple): Log wait status on process no
|
||||||
|
|
|
@ -23,16 +23,8 @@ if {[build_executable $testfile.exp $testfile $srcfile {debug}] == -1} {
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
|
|
||||||
gdb_exit
|
|
||||||
|
|
||||||
# remote_spawn breaks the command on each whitespace despite possible quoting.
|
|
||||||
# Use backslash-escaped whitespace there instead:
|
|
||||||
|
|
||||||
set db_command "--db-command=$GDB $INTERNAL_GDBFLAGS $GDBFLAGS [host_info gdb_opts] %f %p"
|
|
||||||
regsub -all " " $db_command "\\ " db_command
|
|
||||||
|
|
||||||
set test "spawn valgrind"
|
set test "spawn valgrind"
|
||||||
set cmd "valgrind --db-attach=yes $db_command $binfile"
|
set cmd "valgrind --vgdb-error=0 $binfile"
|
||||||
set res [remote_spawn host $cmd]
|
set res [remote_spawn host $cmd]
|
||||||
if { $res < 0 || $res == "" } {
|
if { $res < 0 || $res == "" } {
|
||||||
verbose -log "Spawning $cmd failed."
|
verbose -log "Spawning $cmd failed."
|
||||||
|
@ -43,18 +35,13 @@ pass $test
|
||||||
# Declare GDB now as running.
|
# Declare GDB now as running.
|
||||||
set gdb_spawn_id $res
|
set gdb_spawn_id $res
|
||||||
|
|
||||||
# GDB spawned by `valgrind --db-attach=yes' stops already after the startup is
|
# GDB started by vgdb stops already after the startup is executed, like with
|
||||||
# executed, like with non-extended gdbserver. It is also not correct to
|
# non-extended gdbserver. It is also not correct to run/attach the inferior.
|
||||||
# run/attach the inferior.
|
|
||||||
set use_gdb_stub 1
|
set use_gdb_stub 1
|
||||||
|
|
||||||
set test "valgrind started"
|
set test "valgrind started"
|
||||||
# The trailing '.' differs for different memcheck versions.
|
# The trailing '.' differs for different memcheck versions.
|
||||||
gdb_test_multiple "" $test {
|
gdb_test_multiple "" $test {
|
||||||
-re "valgrind: Unknown option: --db-attach=yes" {
|
|
||||||
unsupported $test
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
-re "Memcheck, a memory error detector\\.?\r\n" {
|
-re "Memcheck, a memory error detector\\.?\r\n" {
|
||||||
pass $test
|
pass $test
|
||||||
}
|
}
|
||||||
|
@ -72,23 +59,63 @@ gdb_test_multiple "" $test {
|
||||||
unsupported $test
|
unsupported $test
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
|
-re "valgrind: Bad option.*--vgdb-error=0" {
|
||||||
|
# valgrind is not >= 3.7.0.
|
||||||
|
unsupported $test
|
||||||
|
return -1
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
set test "vgdb prompt"
|
||||||
|
# The trailing '.' differs for different memcheck versions.
|
||||||
|
gdb_test_multiple "" $test {
|
||||||
|
-re " (target remote | \[^\r\n\]*/vgdb \[^\r\n\]*)\r\n" {
|
||||||
|
set vgdbcmd $expect_out(1,string)
|
||||||
|
pass $test
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# 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" ".*"
|
||||||
|
|
||||||
|
gdb_test "$vgdbcmd" " in \\.?_start .*" "target remote for vgdb"
|
||||||
|
|
||||||
|
gdb_test "monitor v.set gdb_output" "valgrind output will go to gdb.*"
|
||||||
|
|
||||||
set double_free [gdb_get_line_number "double-free"]
|
set double_free [gdb_get_line_number "double-free"]
|
||||||
|
|
||||||
set test "attach to debugger"
|
set test "continue"
|
||||||
gdb_test_multiple "" $test {
|
gdb_test_multiple "continue" $test {
|
||||||
-re "Invalid free\\(\\).*: main \\(${srcfile}:$double_free\\)\r\n.*---- Attach to debugger \\? --- \[^\r\n\]* ---- " {
|
-re "Invalid free\\(\\).*: main \\(${srcfile}:$double_free\\)\r\n.*$gdb_prompt $" {
|
||||||
send_gdb "y\r"
|
pass $test
|
||||||
}
|
}
|
||||||
-re "---- Attach to debugger \\? --- \[^\r\n\]* ---- " {
|
-re "Remote connection closed.*\r\n$gdb_prompt $" {
|
||||||
send_gdb "n\r"
|
fail "$test (remote connection closed)"
|
||||||
exp_continue
|
# Only if valgrind got stuck.
|
||||||
|
kill_wait_spawned_process $valgrind_spawn_id
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
-re "The program is not being run\\.\r\n$gdb_prompt $" {
|
||||||
|
fail "$test (valgrind vgdb has terminated)"
|
||||||
|
# Only if valgrind got stuck.
|
||||||
|
kill_wait_spawned_process $valgrind_spawn_id
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
-re "\r\n$gdb_prompt $" {
|
||||||
|
pass "$test (false warning)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gdb_test "" ".*" "eat first prompt"
|
|
||||||
|
|
||||||
# Initialization from default_gdb_start.
|
# Initialization from default_gdb_start.
|
||||||
gdb_test_no_output "set height 0"
|
gdb_test_no_output "set height 0"
|
||||||
gdb_test_no_output "set width 0"
|
gdb_test_no_output "set width 0"
|
||||||
|
@ -97,3 +124,6 @@ gdb_test "bt" "in main \\(.*\\) at .*${srcfile}:$double_free"
|
||||||
|
|
||||||
# Explicitly kill the program so it doesn't dump core when we quit->detach.
|
# 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"
|
gdb_test "kill" "" "kill program" "Kill the program being debugged.*y or n. $" "y"
|
||||||
|
|
||||||
|
# Only if valgrind got stuck.
|
||||||
|
kill_wait_spawned_process $valgrind_spawn_id
|
||||||
|
|
Loading…
Reference in New Issue