# 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 the "load" command.

standard_testfile

# Disable generation of position independent executable (PIE).  Otherwise, we
# would have to manually specify an offset to load.

set opts {debug nopie}

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

if ![runto_main] {
    return -1
}

# The native target does not support the load command.
if [gdb_is_target_native] {
    unsupported "the native target does not support the load command"
    return
}

# Manually change the value of the_variable.
gdb_test "print/x the_variable" " = 0x1234" "check initial value of the_variable"
gdb_test_no_output "set the_variable = 0x5555" "manually change the_variable"
gdb_test "print/x the_variable" " = 0x5555" "check manually changed value of the_variable"

with_test_prefix "reload" {
    # Re-load the binary using the load command.
    gdb_test "load ${binfile}" ".*Loading section .data.*Transfer rate:.*" \
	"re-load binary"

    # Re-loading the binary should have reset the variable value.
    gdb_test "print/x the_variable" " = 0x1234" \
	"check initial value of the_variable"
}
