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

# This test was introduced to reproduce a specific bug in GDBserver, where
# attaching an inferior while another one was running would trigger a segfault
# in GDBserver.  Reproducing the bug required specific circumstances:
#
#  - The first process must be far enough to have loaded its libc or
#    libpthread (whatever triggers the loading of libthread_db), such that
#    its proc->priv->thread_db is not nullptr
#
#  - However, its lwp must still be in the `!lwp->thread_known` state,
#    meaning GDBserver hasn't asked libthread_db to compute the thread
#    handle yet.  That means, GDB must not have refreshed the thread list
#    yet, since that would cause the thread handles to be computed.  That
#    means, no stopping on a breakpoint, since that causes a thread list
#    update.  That's why the first inferior needs to be started with "run
#    &".
#
#  - Attaching the second process would segfault GDBserver.
#
# All of this to say, if modifying this test, please keep in mind the original
# intent.

standard_testfile

require can_spawn_for_attach

if { [build_executable "failed to prepare" ${testfile} ${srcfile}] } {
    return
}

proc do_test {} {
    save_vars { ::GDBFLAGS } {
	append ::GDBFLAGS " -ex \"maint set target-non-stop on\""
	clean_restart $::binfile
    }

    gdb_test -no-prompt-anchor "run &"
    gdb_test "add-inferior" "Added inferior 2 on connection 1 .*"
    gdb_test "inferior 2" "Switching to inferior 2 .*"

    set spawn_id [spawn_wait_for_attach $::binfile]
    set pid [spawn_id_get_pid $spawn_id]

    # This call would crash GDBserver.
    gdb_attach $pid

    # Read a variable from the inferior, just to make sure the attach worked
    # fine.
    gdb_test "print global_var" " = 123"
}

do_test
