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

standard_testfile

set gdbfile [standard_output_file ${testfile}.gdb]

# Test rereading executable.  See PR gdb/21337.

proc generate_cmd_file {gdbfile binfile} {
    set ofd [open $gdbfile w]

    puts $ofd "file ${binfile}"
    puts $ofd "shell sleep 1; touch ${binfile}"
    puts $ofd "run"
    puts $ofd "file"
    puts $ofd "file ${binfile}"
    puts $ofd "shell sleep 1; touch ${binfile}"
    puts $ofd "run"
    puts $ofd "file"
    puts $ofd "file ${binfile}"
    puts $ofd "shell sleep 1; touch ${binfile}"
    puts $ofd "run"
    puts $ofd "file"
    puts $ofd "p \"source-command-completed\""
    close $ofd
}

if [use_gdb_stub] {
    return 0
}

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

# Using the source command to read commands from a file is important,
# otherwise section data is freed and reallocated using the same
# memory locations and the bug is not exposed.
generate_cmd_file $gdbfile $binfile

gdb_test "source $gdbfile" ".*source-command-completed.*" \
    "source $testfile.gdb 1"
# Sometimes the failure only occurs on the second invocation.
gdb_test "source $gdbfile" ".*source-command-completed.*" \
    "source $testfile.gdb 2"
