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

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
