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

load_lib gdbserver-support.exp

# We test for skip_shlib_tests in this test because without a main
# exec file we only have the exec target loaded if shared libraries
# are present.
if {[skip_gdbserver_tests] || [skip_shlib_tests]} {
    return
}

standard_testfile server.c
if [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] {
    return -1
}

# Make sure we're disconnected, in case we're testing with an
# extended-remote board, therefore already connected.
gdb_test "disconnect" ".*"

gdb_test_no_output "set remote pid-to-exec-file-packet off"
gdb_test "file" ".*" "file" \
	 {Discard symbol table from `.*'\? \(y or n\) } "y"
gdbserver_run ""
gdb_test "set sysroot remote:"
gdb_test "info files" "\r\nLocal exec file:\r\n\t<no file loaded>"
