| # Copyright (C) 2018-2020 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/>. */ |
| |
| # multiple-successive-infcall.exp -- Test if GDB can invoke functions on |
| # multiple inferiors, one after the other. |
| |
| standard_testfile |
| |
| if [get_compiler_info] { |
| return -1 |
| } |
| |
| if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" \ |
| executable {debug}] != "" } { |
| return -1 |
| } |
| |
| clean_restart "${binfile}" |
| |
| if ![runto_main] then { |
| fail "can't run to main" |
| return 0 |
| } |
| |
| # Ensure that each new thread is detected by GDB in the order that the |
| # test case creates them, so the thread identifiers match between |
| # test and test case. |
| gdb_breakpoint [gdb_get_line_number "prethreadcreationmarker"] |
| gdb_continue_to_breakpoint "prethreadcreationmarker" |
| set after_new_thread_message "created new thread" |
| foreach_with_prefix thread {5 4 3} { |
| gdb_test_multiple "continue" "${after_new_thread_message}" { |
| -re "\\\[New Thread ${hex} \\\(LWP \[0-9\]+\\\)\\\].*${gdb_prompt}" { |
| pass "${after_new_thread_message}" |
| } |
| } |
| } |
| |
| gdb_breakpoint [gdb_get_line_number "testmarker01"] |
| gdb_continue_to_breakpoint "testmarker01" |
| gdb_test_no_output "set scheduler-locking on" |
| gdb_test "show scheduler-locking" \ |
| "Mode for locking scheduler during execution is \"on\"." |
| |
| foreach_with_prefix thread {5 4 3 2 1} { |
| gdb_test "thread ${thread}" "Switching to .*" |
| gdb_test "call get_value()" "= ${thread}" \ |
| "call inferior function" |
| } |