e22f8b7c8c
Switch the license of all .f and .f90 files to GPLv3. Switch the license of all .s and .S files to GPLv3.
189 lines
5.2 KiB
Text
189 lines
5.2 KiB
Text
# Tests of wide register displays for GDB on HPPA 2.0 machines
|
|
# Copyright 1994, 1995, 2007 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/>. */
|
|
|
|
# Please email any bugs, comments, and/or additions to this file to:
|
|
# bug-gdb@prep.ai.mit.edu
|
|
|
|
# use this to debug:
|
|
#log_user 1
|
|
|
|
if $tracelevel {
|
|
strace $tracelevel
|
|
}
|
|
|
|
if { [skip_hp_tests] } { continue }
|
|
|
|
if ![istarget "hppa*-*-*"] {
|
|
verbose "Wide register test ignored for non-hppa targets."
|
|
return 0
|
|
}
|
|
|
|
if ![istarget "hppa64-hp-hpux*"] {
|
|
verbose "reg-pa64.exp is only for PA2.0W (aka PA64)."
|
|
return 0
|
|
}
|
|
|
|
set testfile "reg-pa64"
|
|
set srcfile ${testfile}.s
|
|
set binfile ${objdir}/${subdir}/${testfile}
|
|
|
|
# To build a pa 2.0 executable
|
|
#
|
|
# as +DA2.0W -o reg-pa64 reg-pa64.s
|
|
# or
|
|
# cc +DA2.0W -g -o reg-pa64 reg-pa64.s
|
|
#
|
|
# Don't reject if there are warnings, as we expect this warning:
|
|
#
|
|
# (Warning) At least one PA 2.0 object file (pa2.0_test2.o) was detected.
|
|
# The linked output may not run on a PA 1.x system.
|
|
#
|
|
|
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
|
|
untested reg-pa64.exp
|
|
return -1
|
|
}
|
|
|
|
gdb_exit
|
|
gdb_start
|
|
gdb_reinitialize_dir $srcdir/$subdir
|
|
gdb_load ${binfile}
|
|
|
|
# test machine--there's no 2.0n architecture, so we have
|
|
# to try to run the app.
|
|
#
|
|
gdb_test "break main" "Breakpoint.*" "initial set-up"
|
|
|
|
send_gdb "run\n"
|
|
gdb_expect {
|
|
-re ".*Executable file incompatible with hardware.*$gdb_prompt $" {
|
|
# Not hppa2.0 machine
|
|
#
|
|
return 0
|
|
}
|
|
-re "Cannot exec.*$gdb_prompt $" {
|
|
# Not hppa2.0 machine
|
|
#
|
|
return 0
|
|
}
|
|
-re ".*Starting program:.*$gdb_prompt $" {
|
|
pass "Ready to start test"
|
|
}
|
|
timeout {
|
|
fail "initial set-up, part 2 (timeout)"
|
|
return 0
|
|
}
|
|
}
|
|
|
|
# Let the program set known values. This secretly deletes
|
|
# the breakpoint at main and re-runs to mainend.
|
|
#
|
|
runto mainend
|
|
|
|
# Look for known values
|
|
#
|
|
gdb_test "info reg r1" "r1 1"
|
|
gdb_test "info reg r4" "r4 2"
|
|
gdb_test "info reg r5" "r5 4"
|
|
gdb_test "info reg r6" "r6 8"
|
|
gdb_test "info reg r7" "r7 10"
|
|
gdb_test "info reg r8" "r8 20"
|
|
gdb_test "info reg r9" "r9 40"
|
|
gdb_test "info reg r10" "r10 80"
|
|
gdb_test "info reg r11" "r11 100"
|
|
gdb_test "info reg r12" "r12 200"
|
|
gdb_test "info reg r13" "r13 400"
|
|
gdb_test "info reg r14" "r14 800"
|
|
gdb_test "info reg r15" "r15 1000"
|
|
gdb_test "info reg r16" "r16 2000"
|
|
|
|
# Two odd variants that GDB supports are:
|
|
# "1" means "r1", and
|
|
# "$1" means "r1"
|
|
#
|
|
gdb_test "info reg 1 4" "r1 1.*r4 2"
|
|
gdb_test "info reg \$1" "r1 1"
|
|
|
|
# Verify that GDB responds gracefully to a register ID number that
|
|
# is out of range.
|
|
#
|
|
gdb_test "info reg 999" "999: invalid register"
|
|
|
|
# Make sure the floating point status and error registers
|
|
# don't show up as floating point numbers!
|
|
#
|
|
gdb_test "info reg fpsr" ".*fpsr 0.*" "fpsr"
|
|
gdb_test "info reg fpe1" ".*fpe1 .*" "fpe1"
|
|
gdb_test "info reg fpe2" ".*fpe2 .*" "fpe2"
|
|
gdb_test "info reg fpe3" ".*fpe3 .*" "fpe3"
|
|
#DTS CLLbs16708
|
|
#info reg should recognize fpe4..fpe7.
|
|
setup_xfail hppa64-hp-hpux* CLLbs16708
|
|
gdb_test "info reg fpe4" ".*fpe4 .*" "fpe4"
|
|
setup_xfail hppa64-hp-hpux* CLLbs16708
|
|
gdb_test "info reg fpe5" ".*fpe5 .*" "fpe5"
|
|
setup_xfail hppa64-hp-hpux* CLLbs16708
|
|
gdb_test "info reg fpe6" ".*fpe6 .*" "fpe6"
|
|
setup_xfail hppa64-hp-hpux* CLLbs16708
|
|
gdb_test "info reg fpe7" ".*fpe7 .*" "fpe7"
|
|
|
|
gdb_test "info reg fr4" ".*fr4.*(double precision).* 1.*"
|
|
gdb_test "info reg fr5" ".*fr5.*(double precision).* 2.*"
|
|
gdb_test "info reg fr6" ".*fr6.*(double precision).* 2.*"
|
|
gdb_test "info reg fr7" ".*fr7.*(double precision).* 4.*"
|
|
gdb_test "info reg fr8" ".*fr8.*(double precision).* 8.*"
|
|
gdb_test "info reg fr9" ".*fr9.*(double precision).* 32.*"
|
|
gdb_test "info reg fr10" ".*fr10.*(double precision).* 256.*"
|
|
|
|
gdb_test "info reg r19" "r19 deadbeefbadcadee"
|
|
|
|
# Need to add test of use of $<register-name>
|
|
#
|
|
# Q: How do you say a literal "$" in expect?
|
|
# A: You say "\$". A literal "\" is "\\".
|
|
#
|
|
# Please note that this test will fail as long as we are running
|
|
# in 32-bit mode: it will produce "$1 = 0xbadcadee". To fix it
|
|
# would require building a real 64-bit gdb (expression evaluation,
|
|
# in particular).
|
|
#
|
|
send_gdb "p/x \$r19\n"
|
|
gdb_expect {
|
|
-re ".*= 0xdeadbeefbadcadee.*$gdb_prompt $" {
|
|
pass "64-bit works"
|
|
}
|
|
-re ".*= 0xbadcadee.*$gdb_prompt $" {
|
|
pass "32-bit extract when using PRINT; expected but not good"
|
|
}
|
|
-re ".*$gdb_prompt $" {
|
|
fail "didn't print any part of right value"
|
|
}
|
|
timeout {
|
|
fail "timeout on print"
|
|
}
|
|
}
|
|
|
|
# Need to add tests of setting wide regs too. E.g.
|
|
#
|
|
# set $r4 = 0x1234567890123456
|
|
# p/x $r4
|
|
#
|
|
|
|
# done
|
|
#
|
|
gdb_exit
|
|
|
|
return 0
|