[gdb/testsuite] Rewrite catch-follow-exec.exp There are two problems with the current catch-follow-exec.exp: - INTERNAL_GDBFLAGS (containing the datadir setting) is not used - remote host testing doesn't work Fix the former by using gdb_spawn_with_cmdline_opts. Fix the latter by requiring gdb-native. Build on x86_64-linux with and without ubsan, and tested. 2018-10-05 Tom de Vries PR gdb/23730 * gdb.base/catch-follow-exec.c: Add copyright notice. * gdb.base/catch-follow-exec.exp: Rewrite to use gdb_spawn_with_cmdline_opts. Require gdb-native. --- gdb/testsuite/gdb.base/catch-follow-exec.c | 17 +++++++++ gdb/testsuite/gdb.base/catch-follow-exec.exp | 52 +++++++++++++++++++++------- 2 files changed, 56 insertions(+), 13 deletions(-) diff --git a/gdb/testsuite/gdb.base/catch-follow-exec.c b/gdb/testsuite/gdb.base/catch-follow-exec.c index fa68a2a34e..1a59f58aa5 100644 --- a/gdb/testsuite/gdb.base/catch-follow-exec.c +++ b/gdb/testsuite/gdb.base/catch-follow-exec.c @@ -1,3 +1,20 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 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 #include #include diff --git a/gdb/testsuite/gdb.base/catch-follow-exec.exp b/gdb/testsuite/gdb.base/catch-follow-exec.exp index 0e32ed4a6f..c3c7c7ecdd 100644 --- a/gdb/testsuite/gdb.base/catch-follow-exec.exp +++ b/gdb/testsuite/gdb.base/catch-follow-exec.exp @@ -18,12 +18,11 @@ standard_testfile -if {[build_executable "failed to prepare" $testfile $srcfile debug] == -1} { - return -1 -} - -if { ![remote_file target exists /bin/bash] } { - unsupported "no bash" +if { [target_info gdb_protocol] != "" } { + # Even though the feature under features being tested are supported by + # gdbserver, the way this test is written doesn't make it easy with a + # remote target. + unsupported "not native" return } @@ -32,9 +31,13 @@ if { ![remote_file target exists /bin/ls] } { return } +if { [build_executable "failed to prepare" $testfile $srcfile debug] == -1 } { + return -1 +} + proc catch_follow_exec { } { global binfile - global GDB + global gdb_spawn_id set test "catch-follow-exec" @@ -45,13 +48,36 @@ proc catch_follow_exec { } { append FLAGS " -ex \"run\"" append FLAGS " -ex \"info prog\"" - catch {exec /bin/bash -c "$GDB $FLAGS"} catchlog - send_log "$catchlog\n" + gdb_exit + if {[gdb_spawn_with_cmdline_opts "$FLAGS"] != 0} { + fail "spawn" + return + } + + gdb_test_multiple "" "run til exit" { + "runtime error:" { + # Error in case of --enable-ubsan + fail "no runtime error" + } + eof { + set result [wait -i $gdb_spawn_id] + verbose $result + + gdb_assert { [lindex $result 2] == 0 } + + # We suspect this will be zero instead of one after fixing PR23368 + # - "gdb goes to into background when hitting exec catchpoint with + # follow-exec-mode new" + gdb_assert { [lindex $result 3] != 0 } + + # Error in case of --disable-ubsan, we get + # "CHILDKILLED SIGSEGV {segmentation violation}" as extra + # argument(s). + gdb_assert { [llength $result] == 4 } + } - if { [regexp {No selected thread} $catchlog] } { - pass $test - } else { - fail $test + remote_close host + clear_gdb_spawn_id } }