# 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
}

set testfile attach-pie-noexec
set executable ${testfile}
set binfile ${objdir}/${subdir}/${executable}

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
