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

# This testcase was originally for PR gdb/15415, a problem with the "run"
# command expanding symlinks in the name of the program being run.
# This test uses pathnames on build to create symbolic links on host and
# expects the test program running on target to see those symbolic links.
# Therefore, it can't work reliably on anything other than configurations 
# where build/host/target are all the same.

if { ![isnative] } {
    unsupported "argv0-symlink.exp not supported on non-native target"
    return -1
}

if { [is_remote host] } {
    unsupported "argv0-symlink.exp not supported on remote host"
    return -1
}

standard_testfile

set has_argv0 [gdb_has_argv0]

if { [build_executable ${testfile}.exp ${testfile} ${srcfile}] == -1 } {
    return -1
}

with_test_prefix "file symlink" {

    set test "kept name"
    set filelink "${testfile}-filelink"

    remote_file host delete [standard_output_file $filelink]
    set status [remote_exec host \
		    "ln -sf ${testfile} [standard_output_file $filelink]"]
    if {[lindex $status 0] != 0} {
	unsupported "$test (host does not support symbolic links)"
	return 0
    }

    clean_restart "$filelink"

    if ![runto_main] {
	untested "could not run to main"
	return -1
    }

    gdb_test_no_output "set print repeats 10000"
    gdb_test_no_output "set print elements 10000"

    if { $has_argv0 } {
	gdb_test {print argv[0]} "/$filelink\"" $test
    } else {
	unsupported $test
    }

    # For a link named /PATH/TO/DIR/LINK, we want to check the output
    # against "/DIR/LINK", but computed in a way that doesn't make
    # assumptions about the test directory layout.
    set full_filelink [standard_output_file $filelink]
    set lastdir [file tail [file dirname $full_filelink]]

    gdb_test "info inferiors" "/$lastdir/$filelink *" \
	"$test for info inferiors"
}

with_test_prefix "dir symlink" {

    set test "kept name"
    set dirlink "${testfile}-dirlink"

    # 'ln -sf' does not overwrite symbol link to a directory.
    # 'remote_file host delete' uses stat (not lstat), therefore it refuses to
    # delete a directory.
    remote_exec host "rm -f [standard_output_file $dirlink]"
    set status [remote_exec host "ln -sf . [standard_output_file $dirlink]"]
    if {[lindex $status 0] != 0} {
	unsupported "$test (host does not support symbolic links)"
	return 0
    }

    clean_restart "$dirlink/$filelink"

    if ![runto_main] {
	untested "could not run to main"
	return -1
    }

    gdb_test_no_output "set print repeats 10000"
    gdb_test_no_output "set print elements 10000"

    if { $has_argv0 } {
	# gdbserver in extended-remote mode does not have this issue.
	# Plain remote does, however.
	if { [target_info gdb_protocol] != "extended-remote"
	     || ![target_is_gdbserver] } {
	    setup_kfail "*-*-*" gdb/15934
	}
	gdb_test {print argv[0]} "/$dirlink/$filelink\"" $test
    } else {
	unsupported $test
    }

    gdb_test "info inferiors" "/$lastdir/$filelink *" \
	"$test for info inferiors"
}
