# Copyright 2022-2023 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 . # Test that with "next N", all threads are resumed at each of the N # steps. GDB used to have a bug where in target-non-stop targets, and # in all-stop mode, after the first "next" (or "step/stepi/nexti"), # GDB would prematurely stop all threads. For the subsequent N-1 # steps, only the stepped thread would continue running, while all the # other threads would remain stopped. standard_testfile if { [build_executable "failed to prepare" $testfile \ $srcfile {debug pthreads}] == -1 } { return } proc test {non-stop target-non-stop} { save_vars ::GDBFLAGS { append ::GDBFLAGS " -ex \"maintenance set target-non-stop ${target-non-stop}\"" append ::GDBFLAGS " -ex \"set non-stop ${non-stop}\"" clean_restart $::binfile } if { ![runto_main] } { return } set lineno [gdb_get_line_number "set break here"] gdb_breakpoint $lineno gdb_continue_to_breakpoint "break here" gdb_test "next 3" "return 0;" } foreach_with_prefix non-stop {off on} { foreach_with_prefix target-non-stop {off on} { if {${non-stop} == "on" && ${target-non-stop} == "off"} { # Invalid combination. continue } test ${non-stop} ${target-non-stop} } }