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

require can_spawn_for_attach

standard_testfile .c
set executable ${testfile}

if { [prepare_for_testing "failed to prepare" $executable "" [list debug pie]] } {
    return -1
}

set arch ""
set test "show architecture"
gdb_test_multiple $test $test {
    -re "The target architecture is set to \"auto\" \\(currently \"(.*)\"\\)\\.\r\n$gdb_prompt $" {
	set arch $expect_out(1,string)
	pass $test
    }
}
if {![runto_main]} {
    return 0
}
set test "sanity check info shared"
gdb_test_multiple "info shared" $test {
    -re "From\[ \t\]+To(\\s+NS)?\[ \t\]+Syms Read\[ \t\]+Shared Object Library\r\n0x.*\r\n$gdb_prompt $" {
	pass $test
    }
    -re "No shared libraries loaded at this time\\.\r\n$gdb_prompt $" {
	untested "no shared libraries loaded"
    }
}
gdb_exit

if {$arch == ""} {
    untested "no architecture set"
    return 0
}

# 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_start
file delete -- $binfile
if { ![gdb_attach $testpid] } {
    kill_wait_spawned_process $test_spawn_id
    return
}
gdb_test "set architecture $arch" "The target architecture is set to \"$arch\"\\."
gdb_test "info shared" "From\[ \t\]+To(\\s+NS)?\[ \t\]+Syms Read\[ \t\]+Shared Object Library\r\n0x.*"

kill_wait_spawned_process $test_spawn_id
