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

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

# Test attaching to multiple threaded programs.

standard_testfile

if {![can_spawn_for_attach]} {
    return 0
}

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
