# This testcase is part of GDB, the GNU debugger.
#
# Copyright 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/>.

# Test backward compatibility with older GDBservers which did not
# include ";thread:NNN" in T stop replies when debugging
# single-threaded programs, even though they'd list the main thread in
# response to qfThreadInfo/qsThreadInfo.  See PR remote/22597.

load_lib gdbserver-support.exp

if { [skip_gdbserver_tests] } {
    verbose "skipping gdbserver tests"
    return -1
}

standard_testfile
if [prepare_for_testing "failed to prepare" $testfile $srcfile] {
    return -1
}

# Make sure we're disconnected, in case we're testing with an
# extended-remote board, therefore already connected.
gdb_test "disconnect" ".*"

# Start GDBserver, with ";thread:NNN" in T stop replies disabled,
# emulating old gdbservers when debugging single-threaded programs.
set res [gdbserver_start "--disable-packet=Tthread" $binfile]
set gdbserver_protocol [lindex $res 0]
set gdbserver_gdbport [lindex $res 1]

# Disable XML-based thread listing, and multi-process extensions.
gdb_test_no_output "set remote threads-packet off"
gdb_test_no_output "set remote multiprocess-feature-packet off"

set res [gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport]
if ![gdb_assert {$res == 0} "connect"] {
    return
}

# There should be only one thread listed.
set test "info threads"
gdb_test_multiple $test $test {
    -re "2 Thread.*$gdb_prompt $" {
	fail $test
    }
    -re "has terminated.*$gdb_prompt $" {
	fail $test
    }
    -re "\\\* 1\[\t \]*Thread\[^\r\n\]*\r\n$gdb_prompt $" {
	pass $test
    }
}

gdb_breakpoint "main"

# Bad GDB behaved like this:
#  (gdb) c
#  Cannot execute this command without a live selected thread.
#  (gdb)
gdb_test "c" "Breakpoint $decimal, main.*" "continue to main"
