diff options
Diffstat (limited to 'gdb/testsuite/gdb.threads/fork-plus-threads.exp')
-rw-r--r-- | gdb/testsuite/gdb.threads/fork-plus-threads.exp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.threads/fork-plus-threads.exp b/gdb/testsuite/gdb.threads/fork-plus-threads.exp new file mode 100644 index 0000000..53d1102 --- /dev/null +++ b/gdb/testsuite/gdb.threads/fork-plus-threads.exp @@ -0,0 +1,69 @@ +# Copyright (C) 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/>. + +# This test verifies that threads created by the child fork are +# properly handled. Specifically, GDB used to have a bug where it +# would leave child fork threads stuck stopped, even though "info +# threads" would show them running. +# +# See https://sourceware.org/bugzilla/show_bug.cgi?id=18600 + +standard_testfile + +proc do_test { detach_on_fork } { + global GDBFLAGS + global srcfile testfile + global gdb_prompt + + set saved_gdbflags $GDBFLAGS + set GDBFLAGS [concat $GDBFLAGS " -ex \"set non-stop on\""] + + if {[prepare_for_testing "failed to prepare" \ + $testfile $srcfile {debug pthreads}] == -1} { + set GDBFLAGS $saved_gdbflags + return -1 + } + + set GDBFLAGS $saved_gdbflags + + if ![runto_main] then { + fail "Can't run to main" + return 0 + } + + gdb_test_no_output "set detach-on-fork $detach_on_fork" + set test "continue &" + gdb_test_multiple $test $test { + -re "$gdb_prompt " { + pass $test + } + } + + set test "inferior 1 exited" + gdb_test_multiple "" $test { + -re "Inferior 1 \(\[^\r\n\]+\) exited normally" { + pass $test + } + } + + gdb_test "info threads" "No threads\." \ + "no threads left" +} + +foreach detach_on_fork {"on" "off"} { + with_test_prefix "detach-on-fork=$detach_on_fork" { + do_test $detach_on_fork + } +} |