summaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.hp/gdb.base-hp/reg-pa64.exp
blob: eecefc6cea531e971f3f4a017d1c1ada4c4ba5e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# Tests of wide register displays for GDB on HPPA 2.0 machines
#   Copyright 1994, 1995, 2007, 2008, 2009 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/>.  */

# 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