# Copyright 2023-2025 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/>.  */

# This test only works on GNU/Linux.
require !use_gdb_stub isnative
require {!is_remote host}
require {istarget *-linux*}

standard_testfile

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

if {![runto "parent_stop"]} {
  return -1
}

# We don't want to be bothered.
gdb_test_no_output "set confirm off"

set child_pid [get_integer_valueof child_thread_pid -1 "get child pid"]

# We should not be able to attach to the child at all, because one
# thread is being traced.  The bug here was that gdb would get into an
# infinite loop trying to attach to this thread.
gdb_test "add-inferior" "Added inferior 2.*" "add empty inferior 2"
gdb_test "inferior 2" "Switching to inferior 2.*" "switch to inferior 2"
# Recognize failures from either gdb or gdbserver.
gdb_test "attach $child_pid" \
    "(Cannot attach to|Attaching to process $decimal failed).*" \
    "should not attach to child process"


# Now kill the parent process, ending the trace.
gdb_test "inferior 1" "Switching to inferior 1.*" "switch to inferior 1"
gdb_test "kill" ".*" "kill the parent process"

# Kill the child process as well.  Use the shell to avoid funny
# business with gdbserver testing.
remote_exec target "kill -9 $child_pid"
