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

# Manipulation with PID on target is not supported.
if [is_remote target] then {
    return 0
}

standard_testfile .c
set executable ${testfile}

if { [prepare_for_testing ${testfile}.exp $executable "" [list debug "additional_flags=-fPIE -pie"]] } {
    return -1
}

clean_restart $executable
set arch ""
set test "show architecture"
gdb_test_multiple $test $test {
    -re "The target architecture is set automatically \\(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\[ \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 ${testfile}.exp
    }
}
gdb_exit

if {$arch == ""} {
    untested ${testfile}.exp
    return 0
}

set testpid [eval exec $binfile &]
exec sleep 2

gdb_start
file delete -- $binfile
gdb_test "attach $testpid" "Attaching to process $testpid\r\n.*: No such file or directory\\." "attach"
gdb_test "set architecture $arch" "The target architecture is assumed to be $arch"
gdb_test "info shared" "From\[ \t\]+To\[ \t\]+Syms Read\[ \t\]+Shared Object Library\r\n0x.*"

eval exec kill -9 $testpid
