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

# The doco makes reference to built-in registers -- $pc and $fp.  If
# the ISA contains registers by that name then they should be
# displayed.  If the ISA contains registers identified as being
# equivalent, but have different names, then GDB will provide these as
# aliases.  If the ISA doesn't provide any equivalent registers, then
# GDB will provide registers that map onto the frame's PC and FP.

#
# test running programs
#

standard_testfile

if [get_compiler_info] {
    return -1
}

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

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


# Get the value of PC and FP

set valueof_pc [get_hexadecimal_valueof "\$pc" "0"]
set valueof_fp [get_hexadecimal_valueof "\$fp" "0"]

# Check that the sequence $REGNAME -> REGNUM -> $REGNAME works.  Use
# display since that encodes and then decodes the expression parameter
# (and hence uses the mechanisms we're trying to test).

gdb_test "display/i \$pc" "1: x/i +\\\$pc( +|\r\n)=> ${valueof_pc}.*"
gdb_test "display/w \$fp" "2: x/xw +\\\$fp +${valueof_fp}.*"

gdb_test "info register \$pc" "${valueof_pc}.*"
gdb_test "info register \$fp" "${valueof_fp}.*"

# Regression test for
# http://sourceware.org/bugzilla/show_bug.cgi?id=12659
gdb_test "info register pc fp" \
    "pc +${valueof_pc}\[ \t\]+${valueof_pc} <.*>\[\r\n\]+fp +${valueof_fp}\[ \t\]+${valueof_fp}\[\r\n\]+"
