summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/testsuite/ChangeLog17
-rw-r--r--gdb/testsuite/gdb.base/foll-exec.c44
-rw-r--r--gdb/testsuite/gdb.base/foll-exec.exp65
-rw-r--r--gdb/testsuite/gdb.base/foll-vfork.exp29
-rw-r--r--gdb/testsuite/gdb.base/pie-execl.exp24
-rw-r--r--gdb/testsuite/gdb.threads/non-ldr-exc-1.exp24
-rw-r--r--gdb/testsuite/gdb.threads/non-ldr-exc-2.exp24
-rw-r--r--gdb/testsuite/gdb.threads/non-ldr-exc-3.exp30
-rw-r--r--gdb/testsuite/gdb.threads/non-ldr-exc-4.exp24
9 files changed, 178 insertions, 103 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 1538d152f1e..7753bdb47ef 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,20 @@
+2015-09-11 Don Breazeal <donb@codesourcery.com>
+
+ * gdb.base/foll-exec.c: Add copyright header. Fix
+ formatting issues.
+ * gdb.base/foll-exec.exp (zap_session): Delete proc.
+ (do_exec_tests): Use clean_restart in place of zap_session,
+ and for test initialization. Fix formatting issues. Use
+ fail in place of perror.
+ * gdb.base/pie-execl.exp (main): Use 'inferior_spawn_id' in
+ an expect statement to match an expression with output from
+ the program under debug.
+ * gdb.threads/non-ldr-exc-1.exp (do_test, main): Add
+ non-stop tests and use save_vars to enable non-stop in GDBFLAGS.
+ * gdb.threads/non-ldr-exc-2.exp: Likewise.
+ * gdb.threads/non-ldr-exc-3.exp: Likewise.
+ * gdb.threads/non-ldr-exc-4.exp: Likewise.
+
2015-09-09 Doug Evans <dje@google.com>
* gdb.python/py-prettyprint.exp: Check result of run_lang_tests.
diff --git a/gdb/testsuite/gdb.base/foll-exec.c b/gdb/testsuite/gdb.base/foll-exec.c
index 6e302bb8ce3..77287a45c20 100644
--- a/gdb/testsuite/gdb.base/foll-exec.c
+++ b/gdb/testsuite/gdb.base/foll-exec.c
@@ -1,36 +1,52 @@
+/* This test program is part of GDB, the GNU debugger.
+
+ Copyright 1997-2015 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 <http://www.gnu.org/licenses/>. */
+
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
-
-int global_i = 100;
+int global_i = 100;
int main (void)
{
- int local_j = global_i+1;
- int local_k = local_j+1;
+ int local_j = global_i + 1;
+ int local_k = local_j + 1;
printf ("foll-exec is about to execlp(execd-prog)...\n");
execlp (BASEDIR "/execd-prog",
- BASEDIR "/execd-prog",
- "execlp arg1 from foll-exec",
- (char *)0);
+ BASEDIR "/execd-prog",
+ "execlp arg1 from foll-exec",
+ (char *) 0);
printf ("foll-exec is about to execl(execd-prog)...\n");
execl (BASEDIR "/execd-prog", /* tbreak-execl */
- BASEDIR "/execd-prog",
- "execl arg1 from foll-exec",
- "execl arg2 from foll-exec",
- (char *)0);
+ BASEDIR "/execd-prog",
+ "execl arg1 from foll-exec",
+ "execl arg2 from foll-exec",
+ (char *) 0);
{
static char * argv[] = {
- (char *)BASEDIR "/execd-prog",
- (char *)"execv arg1 from foll-exec",
- (char *)0};
+ (char *) BASEDIR "/execd-prog",
+ (char *) "execv arg1 from foll-exec",
+ (char *) 0};
printf ("foll-exec is about to execv(execd-prog)...\n");
diff --git a/gdb/testsuite/gdb.base/foll-exec.exp b/gdb/testsuite/gdb.base/foll-exec.exp
index 5bea3badc04..0a6347c82fd 100644
--- a/gdb/testsuite/gdb.base/foll-exec.exp
+++ b/gdb/testsuite/gdb.base/foll-exec.exp
@@ -13,6 +13,9 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# This is a test of gdb's ability to follow a process through a
+# Unix exec() system call.
+
if { [is_remote target] || ![isnative] } then {
continue
}
@@ -44,44 +47,14 @@ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $com
return -1
}
-proc zap_session {} {
- global gdb_prompt
- global binfile
-
- send_gdb "kill\n"
- gdb_expect {
- -re ".*Kill the program being debugged.*y or n. $" {
- gdb_test_no_output "y" ""
- send_gdb "file $binfile\n"
- gdb_expect {
- -re ".*Load new symbol table from.*y or n. $" {
- send_gdb "y\n"
- gdb_expect {
- -re "Reading symbols from.*$gdb_prompt $" {}
- timeout { fail "loading symbols (timeout)"; return }
- }
- }
- -re ".*gdb_prompt $" {}
- timeout { fail "loading symbols (timeout)"; return }
- }
- }
- -re ".*$gdb_prompt $" {}
- timeout { fail "killing inferior (timeout)" ; return }
- }
-}
-
proc do_exec_tests {} {
+ global binfile srcfile srcfile2 testfile testfile2
global gdb_prompt
- global binfile
- global srcfile
- global srcfile2
- global testfile
- global testfile2
# Start the program running, and stop at main.
#
if ![runto_main] then {
- perror "Couldn't run ${testfile}"
+ fail "Couldn't run ${testfile}"
return
}
@@ -103,12 +76,12 @@ proc do_exec_tests {} {
return
}
- zap_session
+ clean_restart $binfile
# Start the program running, and stop at main.
#
if ![runto_main] then {
- perror "Couldn't run ${testfile}"
+ fail "Couldn't run ${testfile}"
return
}
@@ -192,12 +165,12 @@ proc do_exec_tests {} {
# Explicitly kill this program, or a subsequent rerun actually runs
# the exec'd program, not the original program...
- zap_session
+ clean_restart $binfile
# Start the program running, and stop at main.
#
if ![runto_main] then {
- perror "Couldn't run ${testfile} (2nd try)"
+ fail "Couldn't run ${testfile} (2nd try)"
return
}
@@ -265,12 +238,12 @@ proc do_exec_tests {} {
# Explicitly kill this program, or a subsequent rerun actually runs
# the exec'd program, not the original program...
- zap_session
+ clean_restart $binfile
# Start the program running, and stop at main.
#
if ![runto_main] then {
- perror "Couldn't run ${testfile} (3rd try)"
+ fail "Couldn't run ${testfile} (3rd try)"
return
}
@@ -326,12 +299,12 @@ proc do_exec_tests {} {
# Explicitly kill this program, or a subsequent rerun actually runs
# the exec'd program, not the original program...
- zap_session
+ clean_restart $binfile
# Start the program running, and stop at main.
#
if ![runto_main] then {
- perror "Couldn't run ${testfile} (4th try)"
+ fail "Couldn't run ${testfile} (4th try)"
return
}
@@ -381,12 +354,12 @@ proc do_exec_tests {} {
# Explicitly kill this program, or a subsequent rerun actually runs
# the exec'd program, not the original program...
- zap_session
+ clean_restart $binfile
# Start the program running, and stop at main.
#
if ![runto_main] then {
- perror "Couldn't run ${testfile} (5th try)"
+ fail "Couldn't run ${testfile} (5th try)"
return
}
@@ -406,14 +379,8 @@ proc do_exec_tests {} {
# Start with a fresh gdb
gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
+clean_restart $binfile
-# This is a test of gdb's ability to follow a process through a
-# Unix exec() system call.
-#
do_exec_tests
return 0
diff --git a/gdb/testsuite/gdb.base/foll-vfork.exp b/gdb/testsuite/gdb.base/foll-vfork.exp
index b94b7ea7bc1..78c5cc82245 100644
--- a/gdb/testsuite/gdb.base/foll-vfork.exp
+++ b/gdb/testsuite/gdb.base/foll-vfork.exp
@@ -524,23 +524,18 @@ with_test_prefix "check vfork support" {
check_vfork_catchpoints
}
-# There is no support for exec events in the RSP yet.
-if { ![gdb_is_target_remote] } {
- # Follow parent and follow child vfork tests with a child that execs.
- with_test_prefix "exec" {
- # These are tests of gdb's ability to follow the parent of a Unix
- # vfork system call. The child will subsequently call a variant
- # of the Unix exec system call.
- do_vfork_and_follow_parent_tests
-
- # These are tests of gdb's ability to follow the child of a Unix
- # vfork system call. The child will subsequently call a variant
- # of a Unix exec system call.
- #
- do_vfork_and_follow_child_tests_exec
- }
-} else {
- unsupported "vfork with exec: exec events not supported for remote"
+# Follow parent and follow child vfork tests with a child that execs.
+with_test_prefix "exec" {
+ # These are tests of gdb's ability to follow the parent of a Unix
+ # vfork system call. The child will subsequently call a variant
+ # of the Unix exec system call.
+ do_vfork_and_follow_parent_tests
+
+ # These are tests of gdb's ability to follow the child of a Unix
+ # vfork system call. The child will subsequently call a variant
+ # of a Unix exec system call.
+ #
+ do_vfork_and_follow_child_tests_exec
}
# Switch to test the case of the child exiting. We can't use
diff --git a/gdb/testsuite/gdb.base/pie-execl.exp b/gdb/testsuite/gdb.base/pie-execl.exp
index 182f96f7eda..51edc821df2 100644
--- a/gdb/testsuite/gdb.base/pie-execl.exp
+++ b/gdb/testsuite/gdb.base/pie-execl.exp
@@ -16,6 +16,9 @@
# The problem was due to amd64_skip_prologue attempting to access inferior
# memory before the PIE (Position Independent Executable) gets relocated.
+global inferior_spawn_id
+global gdb_spawn_id
+
if ![istarget *-linux*] {
continue
}
@@ -67,6 +70,7 @@ gdb_test_multiple "p/x &pie_execl_marker" $test {
verbose -log "addr1 is $addr1"
set test "continue"
+set matches_found 0
gdb_test_multiple $test $test {
-re "Error in re-setting breakpoint" {
fail $test
@@ -74,8 +78,24 @@ gdb_test_multiple $test $test {
-re "Cannot access memory" {
fail $test
}
- -re "pie-execl: re-exec.*executing new program.*\r\nBreakpoint \[0-9\]+,\[^\r\n\]* pie_execl_marker .*\r\n$gdb_prompt $" {
- pass $test
+ -i "$inferior_spawn_id" -re "pie-execl: re-exec" {
+ # output from inferior
+ incr matches_found
+ if { $matches_found == 2 } {
+ pass $test
+ } else {
+ exp_continue
+ }
+ }
+ -i "$gdb_spawn_id"
+ -re "executing new program.*\r\nBreakpoint \[0-9\]+,\[^\r\n\]* pie_execl_marker .*\r\n$gdb_prompt $" {
+ # output from gdb
+ incr matches_found
+ if { $matches_found == 2 } {
+ pass $test
+ } else {
+ exp_continue
+ }
}
}
diff --git a/gdb/testsuite/gdb.threads/non-ldr-exc-1.exp b/gdb/testsuite/gdb.threads/non-ldr-exc-1.exp
index 69e5cc6b129..d3a9601540e 100644
--- a/gdb/testsuite/gdb.threads/non-ldr-exc-1.exp
+++ b/gdb/testsuite/gdb.threads/non-ldr-exc-1.exp
@@ -28,11 +28,14 @@ if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executab
return -1
}
-proc do_test { lock_sched } {
- with_test_prefix "lock-sched$lock_sched" {
+proc do_test { lock_sched nonstop } {
+ with_test_prefix "lock-sched=$lock_sched,non-stop=$nonstop" {
global executable
- clean_restart ${executable}
+ save_vars { GDBFLAGS } {
+ append GDBFLAGS " -ex \"set non-stop $nonstop\""
+ clean_restart ${executable}
+ }
if ![runto_main] {
return -1
@@ -48,11 +51,22 @@ proc do_test { lock_sched } {
gdb_test_no_output "set scheduler-locking on"
}
+ if { $nonstop == "on" } {
+ gdb_test "thread 2" "Switching.*"
+ }
+
gdb_test "continue" \
".*is executing new program.*Breakpoint 1, main.* at .*" \
"continue over exec"
}
}
-do_test 0
-do_test 1
+foreach nonstop {"on" "off"} {
+ foreach schedlock {"on" "off"} {
+ if {$schedlock == "on" && $nonstop == "on"} {
+ # Schedule locking has no effect in nonstop mode.
+ continue
+ }
+ do_test $schedlock $nonstop
+ }
+}
diff --git a/gdb/testsuite/gdb.threads/non-ldr-exc-2.exp b/gdb/testsuite/gdb.threads/non-ldr-exc-2.exp
index 9386153b8e3..8b170ec48eb 100644
--- a/gdb/testsuite/gdb.threads/non-ldr-exc-2.exp
+++ b/gdb/testsuite/gdb.threads/non-ldr-exc-2.exp
@@ -29,11 +29,14 @@ if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executab
return -1
}
-proc do_test { lock_sched } {
- with_test_prefix "lock-sched$lock_sched" {
+proc do_test { lock_sched nonstop } {
+ with_test_prefix "lock-sched=$lock_sched,non-stop=$nonstop" {
global executable
- clean_restart ${executable}
+ save_vars { GDBFLAGS } {
+ append GDBFLAGS " -ex \"set non-stop $nonstop\""
+ clean_restart ${executable}
+ }
if ![runto_main] {
return -1
@@ -42,6 +45,10 @@ proc do_test { lock_sched } {
gdb_breakpoint [gdb_get_line_number "break-here"]
gdb_continue_to_breakpoint "break-here" ".* break-here .*"
+ if { $nonstop == "on" } {
+ gdb_test "thread 2" "Switching.*"
+ }
+
gdb_test "info threads" \
"\r\n\[ \t\]*Id\[ \t\]+Target\[ \t\]+Id\[ \t\]+Frame\[ \t\]*\r\n\\* 2 *Thread \[^\r\n\]* at \[^\r\n\]*" \
"single thread left"
@@ -59,5 +66,12 @@ proc do_test { lock_sched } {
}
}
-do_test 0
-do_test 1
+foreach nonstop {"on" "off"} {
+ foreach schedlock {"on" "off"} {
+ if {$schedlock == "on" && $nonstop == "on"} {
+ # Schedule locking has no effect in nonstop mode.
+ continue
+ }
+ do_test $schedlock $nonstop
+ }
+}
diff --git a/gdb/testsuite/gdb.threads/non-ldr-exc-3.exp b/gdb/testsuite/gdb.threads/non-ldr-exc-3.exp
index cc7da1a750e..3e7a3a1295b 100644
--- a/gdb/testsuite/gdb.threads/non-ldr-exc-3.exp
+++ b/gdb/testsuite/gdb.threads/non-ldr-exc-3.exp
@@ -31,18 +31,25 @@ if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executab
return -1
}
-proc do_test { lock_sched } {
- with_test_prefix "lock-sched$lock_sched" {
+proc do_test { lock_sched nonstop } {
+ with_test_prefix "lock-sched=$lock_sched,non-stop=$nonstop" {
global executable
- clean_restart ${executable}
+ save_vars { GDBFLAGS } {
+ append GDBFLAGS " -ex \"set non-stop $nonstop\""
+ clean_restart ${executable}
+ }
if ![runto_main] {
return -1
}
gdb_breakpoint [gdb_get_line_number "break-here"]
- gdb_continue_to_breakpoint "break-here" ".* break-here .*"
+ gdb_test_multiple "continue" "continue to breakpoint" {
+ -re ".*Breakpoint.*break-here.*" {
+ pass "continue to breakpoint"
+ }
+ }
# Also test with sched-lock to make sure we can follow the
# non-leader thread execing even though the main thread wasn't
@@ -51,11 +58,22 @@ proc do_test { lock_sched } {
gdb_test_no_output "set scheduler-locking on"
}
+ if { $nonstop == "on" } {
+ gdb_test "thread 2" "Switching.*"
+ }
+
gdb_test "continue" \
".*is executing new program.*Breakpoint 1, main.* at .*" \
"continue over exec"
}
}
-do_test 0
-do_test 1
+foreach nonstop {"on" "off"} {
+ foreach schedlock {"on" "off"} {
+ if {$schedlock == "on" && $nonstop == "on"} {
+ # Schedule locking has no effect in nonstop mode.
+ continue
+ }
+ do_test $schedlock $nonstop
+ }
+}
diff --git a/gdb/testsuite/gdb.threads/non-ldr-exc-4.exp b/gdb/testsuite/gdb.threads/non-ldr-exc-4.exp
index a89b818b6d0..4d7e97ad5a1 100644
--- a/gdb/testsuite/gdb.threads/non-ldr-exc-4.exp
+++ b/gdb/testsuite/gdb.threads/non-ldr-exc-4.exp
@@ -30,11 +30,14 @@ if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executab
return -1
}
-proc do_test { lock_sched } {
- with_test_prefix "lock-sched$lock_sched" {
+proc do_test { lock_sched nonstop } {
+ with_test_prefix "lock-sched=$lock_sched,non-stop=$nonstop" {
global executable
- clean_restart ${executable}
+ save_vars { GDBFLAGS } {
+ append GDBFLAGS " -ex \"set non-stop $nonstop\""
+ clean_restart ${executable}
+ }
if ![runto_main] {
return -1
@@ -50,11 +53,22 @@ proc do_test { lock_sched } {
gdb_test_no_output "set scheduler-locking on"
}
+ if { $nonstop == "on" } {
+ gdb_test "thread 2" "Switching.*"
+ }
+
gdb_test "continue" \
".*is executing new program.*Breakpoint 1, main.* at .*" \
"continue over exec"
}
}
-do_test 0
-do_test 1
+foreach nonstop {"on" "off"} {
+ foreach schedlock {"on" "off"} {
+ if {$schedlock == "on" && $nonstop == "on"} {
+ # Schedule locking has no effect in nonstop mode.
+ continue
+ }
+ do_test $schedlock $nonstop
+ }
+}