# This testcase is part of GDB, the GNU debugger.

# Copyright 2018-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/>.

# Test that gdbserver performs path expansion/adjustment when we
# provide just a filename (without any path specifications) to it.

load_lib gdbserver-support.exp

standard_testfile normal.c

if { [skip_gdbserver_tests] } {
    return 0
}

# Because we're relying on being able to change our CWD before
# executing gdbserver, we just run if we're not testing with a remote
# target.
if { [is_remote target] } {
    return 0
}

save_vars { GDBFLAGS } {
    # If GDB and GDBserver are both running locally, set the sysroot to avoid
    # reading files via the remote protocol (the `is_remote target` check is
    # already done above).
    if { ![is_remote host] } {
	set GDBFLAGS "$GDBFLAGS -ex \"set sysroot\""
    }

    if { [prepare_for_testing "failed to prepare" $testfile $srcfile debug] } {
	return -1
    }
}

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

set target_exec [gdbserver_download_current_prog]

# Switch to where $target_exec lives, and execute gdbserver from
# there.
with_cwd "[file dirname $target_exec]" {
    set target_execname [file tail $target_exec]
    set res [gdbserver_start "" $target_execname]

    set gdbserver_protocol [lindex $res 0]
    set gdbserver_gdbport [lindex $res 1]
    gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport

    gdb_breakpoint main
    gdb_test "continue" "Breakpoint $decimal.* main.*" "continue to main"
}
