# Copyright (C) 2016-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/>.

if {![can_spawn_for_attach]} {
    return 0
}

standard_testfile .c
set executable ${testfile}

if { [build_executable ${testfile}.exp $executable $srcfile \
			  [list debug pthreads pie]] } {
    return -1
}

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

set test_spawn_id [spawn_wait_for_attach $binfile]
set testpid [spawn_id_get_pid $test_spawn_id]

# gdb_load ("file" command) must not be executed for the bug reproducibility.
# That includes prepare_for_testing or clean_restart.
gdb_start

set test "attach"
gdb_test_multiple "attach $testpid" $test {
    -re "Attaching to process $testpid\r\n.*Cannot insert breakpoint .*\r\n$gdb_prompt $" {
	fail $test
    }
    -re "Attaching to process $testpid\r\n.*\r\n$gdb_prompt $" {
	pass $test
    }
}

kill_wait_spawned_process $test_spawn_id
