# This testcase is part of GDB, the GNU debugger.

# Copyright 2021-2022 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 attaching to a multi-threaded process using gdbserver's --attach flag.

load_lib gdbserver-support.exp

standard_testfile

if { [skip_gdbserver_tests] } {
    return 0
}

if {![can_spawn_for_attach]} {
    return 0
}

# Start the test program, attach to it using gdbserver's --attach flag, connect
# to it with GDB, check that what we see makes sense.

proc run_one_test { non-stop target-non-stop } {
    save_vars { ::GDBFLAGS } {
	# If GDB and GDBserver are both running locally, set the sysroot to avoid
	# reading files via the remote protocol.
	if { ![is_remote host] && ![is_remote target] } {
	    set ::GDBFLAGS "$::GDBFLAGS -ex \"set sysroot\""
	}

	if { [prepare_for_testing "failed to prepare" $::testfile $::srcfile \
		{debug pthreads}] } {
	    return -1
	}
    }

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

    set target_exec [gdbserver_download_current_prog]
    set test_spawn_id [spawn_wait_for_attach $::binfile]
    set testpid [spawn_id_get_pid $test_spawn_id]

    lassign [gdbserver_start "" "--attach $testpid"] unused gdbserver_address

    gdb_test_no_output "set non-stop ${non-stop}"
    gdb_test_no_output "maint set target-non-stop ${target-non-stop}"
    gdb_target_cmd "remote" $gdbserver_address

    # There should be 11 threads.
    gdb_test "thread 11" "Switching to thread 11.*"

    kill_wait_spawned_process $test_spawn_id
    gdbserver_exit 0
}

foreach_with_prefix non-stop {0 1} {
    foreach_with_prefix target-non-stop {0 1} {
	# This combination does not make sense.
	if { ${non-stop} == 1 && ${target-non-stop} == 0} {
	    continue
	}

	run_one_test ${non-stop} ${target-non-stop}
    }
}
