From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26494 invoked by alias); 27 Jun 2004 05:31:41 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 26478 invoked from network); 27 Jun 2004 05:31:40 -0000 Received: from unknown (HELO mclean.mail.mindspring.net) (207.69.200.57) by sourceware.org with SMTP; 27 Jun 2004 05:31:40 -0000 Received: from user-119a90a.biz.mindspring.com ([66.149.36.10] helo=berman.michael-chastain.com) by mclean.mail.mindspring.net with esmtp (Exim 3.33 #1) id 1BeSGQ-0005E9-00; Sun, 27 Jun 2004 01:31:38 -0400 Received: by berman.michael-chastain.com (Postfix, from userid 502) id A0BAB4B104; Sun, 27 Jun 2004 01:31:45 -0400 (EDT) To: gdb-patches@sources.redhat.com Subject: [patch/testsuite/hp] reg.exp: modernize integer-register format Cc: tausq@debian.org Message-Id: <20040627053145.A0BAB4B104@berman.michael-chastain.com> Date: Sun, 27 Jun 2004 05:31:00 -0000 From: mec.gnu@mindspring.com (Michael Elizabeth Chastain) X-SW-Source: 2004-06/txt/msg00589.txt.bz2 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 * 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 $ ! # ! # 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. #