From c4b90788516fd431c86c22deac5001d6c4648227 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Fri, 5 Oct 2018 00:04:27 +0200 Subject: [PATCH] [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-16 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/ChangeLog | 7 ++++ gdb/testsuite/gdb.base/catch-follow-exec.c | 17 +++++++++ gdb/testsuite/gdb.base/catch-follow-exec.exp | 52 +++++++++++++++++++++------- 3 files changed, 63 insertions(+), 13 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index fae9921..90ce8af 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2018-10-16 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. + 2018-10-12 Sandra Loosemore * gdb.trace/actions-changed.exp: Check for arch support. diff --git a/gdb/testsuite/gdb.base/catch-follow-exec.c b/gdb/testsuite/gdb.base/catch-follow-exec.c index fa68a2a..1a59f58 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 0e32ed4..c3c7c7e 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 } } -- 2.7.4