From: Tom de Vries Date: Thu, 25 Oct 2018 14:09:57 +0000 (+0200) Subject: [gdb/testsuite] Move valgrind-db-attach.{c,exp} to valgrind-bt.{c,exp} X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ac732bc9fd501d1e9288b6087848cc3ecabafe0c;p=binutils-gdb.git [gdb/testsuite] Move valgrind-db-attach.{c,exp} to valgrind-bt.{c,exp} Now that valgrind-db-attach.exp no longer use --db-attach, rename valgrind-db-attach.{c,exp} to valgrind-bt.{c,exp}. 2018-10-25 Tom de Vries * gdb.base/valgrind-db-attach.c: Rename to ... * gdb.base/valgrind-bt.c: ... this. * gdb.base/valgrind-db-attach.exp: Rename to ... * gdb.base/valgrind-bt.exp: ... this. --- diff --git a/gdb/testsuite/gdb.base/valgrind-bt.c b/gdb/testsuite/gdb.base/valgrind-bt.c new file mode 100644 index 00000000000..5dec68005e7 --- /dev/null +++ b/gdb/testsuite/gdb.base/valgrind-bt.c @@ -0,0 +1,30 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009-2018 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 . */ + +#include + +int main() +{ + void *p; + + p = malloc (1); + if (p == NULL) + return 1; + free (p); + free (p); /* double-free */ + return 0; +} diff --git a/gdb/testsuite/gdb.base/valgrind-bt.exp b/gdb/testsuite/gdb.base/valgrind-bt.exp new file mode 100644 index 00000000000..348f74379dd --- /dev/null +++ b/gdb/testsuite/gdb.base/valgrind-bt.exp @@ -0,0 +1,129 @@ +# Copyright 2009-2018 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 . + +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 --vgdb-error=0 $binfile" +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 "Memcheck, a memory error detector\\.?\r\n" { + 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 + } +} + +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 test "continue" +gdb_test_multiple "continue" $test { + -re "Invalid free\\(\\).*: main \\(${srcfile}:$double_free\\)\r\n.*$gdb_prompt $" { + pass $test + } + -re "Remote connection closed.*\r\n$gdb_prompt $" { + fail "$test (remote connection closed)" + # 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)" + } +} + +# Initialization from default_gdb_start. +gdb_test_no_output "set height 0" +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" + +# Only if valgrind got stuck. +kill_wait_spawned_process $valgrind_spawn_id diff --git a/gdb/testsuite/gdb.base/valgrind-db-attach.c b/gdb/testsuite/gdb.base/valgrind-db-attach.c deleted file mode 100644 index 5dec68005e7..00000000000 --- a/gdb/testsuite/gdb.base/valgrind-db-attach.c +++ /dev/null @@ -1,30 +0,0 @@ -/* This testcase is part of GDB, the GNU debugger. - - Copyright 2009-2018 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 . */ - -#include - -int main() -{ - void *p; - - p = malloc (1); - if (p == NULL) - return 1; - free (p); - free (p); /* double-free */ - return 0; -} diff --git a/gdb/testsuite/gdb.base/valgrind-db-attach.exp b/gdb/testsuite/gdb.base/valgrind-db-attach.exp deleted file mode 100644 index 348f74379dd..00000000000 --- a/gdb/testsuite/gdb.base/valgrind-db-attach.exp +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright 2009-2018 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 . - -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 --vgdb-error=0 $binfile" -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 "Memcheck, a memory error detector\\.?\r\n" { - 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 - } -} - -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 test "continue" -gdb_test_multiple "continue" $test { - -re "Invalid free\\(\\).*: main \\(${srcfile}:$double_free\\)\r\n.*$gdb_prompt $" { - pass $test - } - -re "Remote connection closed.*\r\n$gdb_prompt $" { - fail "$test (remote connection closed)" - # 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)" - } -} - -# Initialization from default_gdb_start. -gdb_test_no_output "set height 0" -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" - -# Only if valgrind got stuck. -kill_wait_spawned_process $valgrind_spawn_id