# Copyright 2008-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

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

proc address_get { testname } {
    global gdb_prompt

    if {![runto_main]} {
	return -1
    }

    # Do not rely on printf; some test configurations don't work with stdio.

    gdb_breakpoint [gdb_get_line_number "print p"]
    gdb_continue_to_breakpoint "$testname - address set"

    gdb_test_multiple "print/x p" $testname {
	-re "\\$\[0-9\]+ = (0x\[0-9a-f\]*)\r?\n$gdb_prompt $" {
	    pass $testname
	    return $expect_out(1,string)
	}
    }
}

set test "set disable-randomization off"
gdb_test_multiple "${test}" "${test}" {
    -re "Disabling randomization .* unsupported .*$gdb_prompt $" {
	untested "disabling randomization is not supported on this Linux GDB"
	return -1
    }
    -re "No symbol .* in current context.*$gdb_prompt $" {
	untested "disabling randomization is not supported on this GDB platform"
	return -1
    }
    -re "$gdb_prompt $" {
	pass $test
    }
}
gdb_test "show disable-randomization"	      \
         "Disabling randomization .* is off." \
         "show disable-randomization off"

set addr1 [address_get "randomized first address"]
set addr2 [address_get "randomized second address"]
set test "randomized addresses should not match"
if [string equal $addr1 $addr2] {
    untested "no randomization detected on this system"
    return -1
} else {
    pass $test
}

gdb_test_no_output "set disable-randomization on"
gdb_test "show disable-randomization"	      \
         "Disabling randomization .* is on." \
         "show disable-randomization on"

set addr1 [address_get "fixed first address"]
set addr2 [address_get "fixed second address"]
set test "fixed addresses should match"
if [string equal $addr1 $addr2] {
    pass $test
} else {
    fail $test
}
