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

if $tracelevel {
    strace $tracelevel
}

# The intent of this testcase is to verify that GDB does not keep
# a filesystem lock on the executable file once the executable
# is no longer running.

set testfile "arrayidx"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
    untested "Couldn't compile ${srcfile}"
    return -1
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

# Sanity-check: Verify that the executable exists. This is just to
# make sure that, when we verify later that the file does not exist,
# it really has been deleted.
if { ! [file exists $binfile] } {
    fail "executable does not exist (${binfile})"
    return -1
    }

if ![runto_main] then {
    perror "couldn't run to breakpoint"
    continue
}

gdb_test "continue" \
         ".*Program exited normally\\." \
         "continue until program exits"

# Try deleting the executable file, now that the program has exited,
# and make sure that the deletion worked by verifying that the exe
# is no longer there (the "file delete" tcl command does not return
# any status, apparently).
file delete $binfile
if { [file exists $binfile] } {
    fail "executable still exists (${binfile})"
    }


