This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch/testsuite/hp] reg.exp: modernize integer-register format


This is an hppa test patch.

Between gdb 6.1 and gdb HEAD, the hppa registers underwent some
cosmetic changes and some 32/64 changes.  In gdb 6.1, hppa-tdep.c
has special code to fetch and print registers.  The output looks
like this:

  # gdb 6.1.1
  (gdb) info reg r1
  r1 1

In gdb HEAD, the registers use the more regular gdb code,
and the output format is different:

  # gdb HEAD 2004-06-01
  (gdb) info reg r1
  r1             0x1     1

This patch changes reg.exp to accept both formats.  (I accept the old
format because I'm going to use the test suite from gdb HEAD on both
gdb 6.1.1 and gdb HEAD to look for regressions -- it is more informative
to use the same test suite on both gdb's, rather than different test
suites on different gdb's).

This test script also has some 32/64 tests.  I rewrote these to use
gdb_test_multiple, but I left the logic the same as the previous
version of reg.exp.  I'm not sure what the right results are for each
case but once we figure that out, it will be easy to write them in.
Until then, the script behaves the same as before.

Note that there are real differences between the gdb versions:
gdb 6.1.1 prints a 64-bit value for "info reg r19" and gdb HEAD
prints a 32-bit value.

There's also a simple format change on the "invalid register" test.

Finally, there's some floating point register tests, which I did not
touch at all.

I tested this on native hppa2.0w-hp-hpux11.00 with gcc 3.3.2,
with gdb 6.1 and gdb HEAD 2004-06-01.

(Yeah, that date really is 2004-06-01, that's the tarball I had
convenient at hand, sigh).

I'll give this 24 hours for any comments and then commit it.

2004-06-27  Michael Chastain  <mec.gnu@mindspring.com>

	* gdb.hp/gdb.base-hp/reg.exp: Accept both old and new gdb output
	formats for "info register".  Use gdb_test_multiple.  Fix
	the "invalid register" test.

Michael C

Index: gdb.hp/gdb.base-hp/reg.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.hp/gdb.base-hp/reg.exp,v
retrieving revision 1.3
diff -c -3 -p -r1.3 reg.exp
*** gdb.hp/gdb.base-hp/reg.exp	26 Jun 2004 22:20:50 -0000	1.3
--- gdb.hp/gdb.base-hp/reg.exp	27 Jun 2004 05:18:10 -0000
*************** runto mainend
*** 107,150 ****
  
  # 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 0.*" "fpe1"
! gdb_test "info reg fpe2" ".*fpe2 0.*" "fpe2"
! gdb_test "info reg fpe3" ".*fpe3 0.*" "fpe3"
! gdb_test "info reg fpe4" ".*fpe4 0.*" "fpe4"
! gdb_test "info reg fpe5" ".*fpe5 0.*" "fpe5"
! gdb_test "info reg fpe6" ".*fpe6 0.*" "fpe6"
! gdb_test "info reg fpe7" ".*fpe7 0.*" "fpe7"
  
  gdb_test "info reg fr4"  ".*fr4.*(double precision).* 1"
  gdb_test "info reg fr5"  ".*fr5.*(double precision).* 2"
--- 107,187 ----
  
  # Look for known values
  #
! # The output format changed between gdb 6.1.1 and gdb HEAD 2004-06-01.
! #
! #   gdb 6.1.1:
! #   (gdb) info reg r1
! #   r1 1
! #
! #   gdb HEAD 2004-06-01:
! #   (gdb) info reg r1
! #   r1             0x1     1
! #
! # For now, I accept both formats.  In the future, you can remove
! # the old gdb 6.1.1 format.
! #
! # -- chastain 2004-06-26
! 
! set ws "\[\r\n\t \]+"
! 
! proc hp_integer_reg {regname vhex vdec} {
!   global ws
!   set value_611 "$regname${ws}$vhex"
!   set value_new "$regname${ws}0x$vhex${ws}$vdec"
!   gdb_test "info reg $regname" "$value_611|$value_new"
! }
! 
! hp_integer_reg "r1"      "1"     "1"
! hp_integer_reg "r4"      "2"     "2"
! hp_integer_reg "r5"      "4"     "4"
! hp_integer_reg "r6"      "8"     "8"
! hp_integer_reg "r7"     "10"    "16"
! hp_integer_reg "r8"     "20"    "32"
! hp_integer_reg "r9"     "40"    "64"
! hp_integer_reg "r10"    "80"   "128"
! hp_integer_reg "r11"   "100"   "256"
! hp_integer_reg "r12"   "200"   "512"
! hp_integer_reg "r13"   "400"  "1024"
! hp_integer_reg "r14"   "800"  "2048"
! hp_integer_reg "r15"  "1000"  "4096"
! hp_integer_reg "r16"  "2000"  "8192"
  
  # Two odd variants that GDB supports are:
  #   "1" means "r1", and
  #   "$1" means "r1"
! 
! hp_integer_reg "1" "1" "1"
! hp_integer_reg "4" "2" "2"
! 
! set name "info reg \$1"
! gdb_test_multiple "info reg \$1" "$name" {
!     -re "r1${ws}1\r\n$gdb_prompt $" {
! 	pass "$name"
!     }
!     -re "r1${ws}0x1${ws}1\r\n$gdb_prompt $" {
! 	pass "$name"
!     }
! }
  
  # Verify that GDB responds gracefully to a register ID number that
  # is out of range.
! 
! gdb_test "info reg 999" "Invalid register.*999.*"
  
  # Make sure the floating point status and error registers
  # don't show up as floating point numbers!
! 
! hp_integer_reg "fpsr" "0" "0"
! hp_integer_reg "fpe1" "0" "0"
! hp_integer_reg "fpe2" "0" "0"
! hp_integer_reg "fpe3" "0" "0"
! hp_integer_reg "fpe4" "0" "0"
! hp_integer_reg "fpe5" "0" "0"
! hp_integer_reg "fpe6" "0" "0"
! hp_integer_reg "fpe7" "0" "0"
! 
! # Floating point registers.
! # TODO: these are old format only.
  
  gdb_test "info reg fr4"  ".*fr4.*(double precision).* 1"
  gdb_test "info reg fr5"  ".*fr5.*(double precision).* 2"
*************** gdb_test "info reg fr8"  ".*fr8.*(double
*** 154,186 ****
  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.
  #
--- 191,229 ----
  gdb_test "info reg fr9"  ".*fr9.*(double precision).* 32"
  gdb_test "info reg fr10" ".*fr10.*(double precision).* 256"
  
! # An integer register with a 64-bit value.
  
! set name "info reg r19"
! gdb_test_multiple "info reg r19" "$name" {
!     -re "r19${ws}deadbeefbadcadee\r\n$gdb_prompt $" {
! 	# old gdb 6.1.1 format, good result
! 	pass "$name"
!     }
!     -re "r19${ws}badcadee\r\n$gdb_prompt $" {
! 	# old gdb 6.1.1 format, bad result
! 	fail "$name (32-bit truncation)"
!     }
!     -re "r19${ws}0xdeadbeefbadcadee${ws}16045690984232431086\r\n$gdb_prompt $" {
! 	# new gdb HEAD 2004-06-01 format, good result
! 	pass "$name"
!     }
!     -re "r19${ws}0xbadcadee${ws}3135024622\r\n$gdb_prompt $" {
! 	# new gdb HEAD 2004-06-01 format, 32 bit truncation
! 	fail "$name (32-bit truncation)"
!     }
! }
! 
! set name "print /x \$r19"
! gdb_test_multiple "print /x \$r19" "$name" {
!     -re "= 0xdeadbeefbadcadee\r\n$gdb_prompt $" {
! 	pass "$name"
!     }
!     -re "= 0xbadcadee\r\n$gdb_prompt $" {
! 	# this was a PASS in the last version so keep it PASS for now
! 	# -- chastain 2004-06-26
! 	pass "$name (32-bit truncation)"
      }
+ }
  
  # Need to add tests of setting wide regs too.  E.g.
  #


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]