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

# Copyright 2007-2024 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 multiple threaded programs.

standard_testfile

require can_spawn_for_attach

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

# Start the programs running and then wait for a bit, to be sure that
# they can be attached to.

set spawn_id_list [spawn_wait_for_attach [list $binfile $binfile]]
set test_spawn_id1 [lindex $spawn_id_list 0]
set test_spawn_id2 [lindex $spawn_id_list 1]
set testpid1 [spawn_id_get_pid $test_spawn_id1]
set testpid2 [spawn_id_get_pid $test_spawn_id2]

gdb_test "attach $testpid1" \
    "Attaching to program: .*, process $testpid1.*(in|at).*" \
    "attach to program 1"
gdb_test "backtrace" ".*main.*" "backtrace 1"

gdb_test "add-inferior -exec $binfile" \
    "Added inferior 2.*" \
    "add second inferior"
gdb_test "inferior 2" ".*Switching to inferior 2.*" "switch to second inferior"

gdb_test "attach $testpid2" \
    "Attaching to program: .*, process $testpid2.*(in|at).*" \
    "attach to program 2"
gdb_test "backtrace" ".*main.*" "backtrace 2"

gdb_test "kill" "" "kill inferior 2" "Kill the program being debugged. .y or n. " "y"
gdb_test "inferior 1" ".*Switching to inferior 1.*"
gdb_test "kill" "" "kill inferior 1" "Kill the program being debugged. .y or n. " "y"

kill_wait_spawned_process $test_spawn_id1
kill_wait_spawned_process $test_spawn_id2
