diff options
Diffstat (limited to 'gdb/testsuite/gdb.threads/next-bp-other-thread.exp')
-rw-r--r-- | gdb/testsuite/gdb.threads/next-bp-other-thread.exp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.threads/next-bp-other-thread.exp b/gdb/testsuite/gdb.threads/next-bp-other-thread.exp new file mode 100644 index 0000000..c2361fa --- /dev/null +++ b/gdb/testsuite/gdb.threads/next-bp-other-thread.exp @@ -0,0 +1,54 @@ +# Copyright (C) 2014 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/>. + +# Test that GDB behaves correctly when a "next" steps over a call, and +# another thread hits a breakpoint that doesn't cause a user visible +# stop (and so needs to be stepped over). GDB used to trip on an +# invalid assertion - PR17408. + +standard_testfile + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug pthreads}] == -1} { + return -1 +} + +# Test all "set scheduler-locking" variants. +foreach schedlock {"off" "step" "on" } { + with_test_prefix "schedlock=$schedlock" { + clean_restart $binfile + + if ![runto_main] { + continue + } + + gdb_breakpoint [gdb_get_line_number "set wait-thread breakpoint here"] + gdb_continue_to_breakpoint "run to wait-thread breakpoint" + gdb_test "info threads" "2 .*\\\* 1.*" "info threads shows all threads" + + delete_breakpoints + + gdb_breakpoint [gdb_get_line_number "set breakpoint child here"] + # Give it a condition that always fails. + gdb_test "condition \$bpnum global_zero == 1" ".*" + + gdb_test_no_output "set scheduler-locking $schedlock" + + # While stepping over the sleep call, the other thread hits a + # breakpoint that doesn't cause a user visible stop (and so + # needs to be stepped over). The next should complete as if + # that breakpoint never triggered. + gdb_test "next" "EXIT_SUCCESS.*" "next over function call" + } +} |