# Copyright 2014-2021 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/>.

standard_testfile
set corefile [standard_output_file ${testfile}.core]

if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable debug] != ""} {
    return -1
}

clean_restart ${testfile}

gdb_test_no_output "set non-stop on"

if { ! [ runto_main ] } then {
    return -1
}

gdb_test_multiple "info threads" "threads are supported" {
    -re ".* main .*\r\n$gdb_prompt $" {
	# OK, threads are supported.
    }
    -re "\r\n$gdb_prompt $" {
	unsupported "gdb does not support threads on this target"
	return -1
    }
}

gdb_breakpoint ${srcfile}:[gdb_get_line_number "break-here"]
# gdb_continue_to_breakpoint does not work as it uses "$gdb_prompt $" regex
# which does not work due to the output: (gdb) [Thread ... exited]
set name "continue to breakpoint: break-here"
gdb_test_multiple "continue" $name {
    -re "Breakpoint .* (at|in) .* break-here .*\r\n$gdb_prompt " {
	pass $name
    }
}

gdb_gcore_cmd "$corefile" "save a corefile"

# Do not run "info threads" before "gcore" as it could workaround the bug
# by discarding non-current exited threads.
gdb_test "info threads" \
         {The current thread <Thread ID 1> has terminated\.  See `help thread'\.} \
	 "exited thread is current due to non-stop"
