From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1726) id 3ADC73856DD3; Tue, 9 Aug 2022 16:39:01 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3ADC73856DD3 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Andrew Burgess To: gdb-cvs@sourceware.org Subject: [binutils-gdb] gdb/riscv/testsuite: fix failures in gdb.arch/riscv-reg-aliases.exp X-Act-Checkin: binutils-gdb X-Git-Author: Andrew Burgess X-Git-Refname: refs/heads/master X-Git-Oldrev: 410a3464e7960d24de4a200e70502dcd01eff98d X-Git-Newrev: c1abad9ebadc94e2ca215fd0fb6b59072b67351c Message-Id: <20220809163901.3ADC73856DD3@sourceware.org> Date: Tue, 9 Aug 2022 16:39:01 +0000 (GMT) X-BeenThere: gdb-cvs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Aug 2022 16:39:01 -0000 https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3Dc1abad9ebadc= 94e2ca215fd0fb6b59072b67351c commit c1abad9ebadc94e2ca215fd0fb6b59072b67351c Author: Andrew Burgess Date: Tue Aug 9 17:12:40 2022 +0100 gdb/riscv/testsuite: fix failures in gdb.arch/riscv-reg-aliases.exp =20 When running on a native RISC-V Linux target I currently see failures in the gdb.arch/riscv-reg-aliases.exp test like this: =20 set $ft0.float =3D 501 (gdb) PASS: gdb.arch/riscv-reg-aliases.exp: write non-zero value to f= t0 p/d $ft0.float $263 =3D 1140490240 (gdb) FAIL: gdb.arch/riscv-reg-aliases.exp: read ft0 after non-zero w= rite to ft0 =20 This test started failing after this commit: =20 commit 56262a931b7ca8ee3ec9104bc7e9e0b40cf3d64e Date: Thu Feb 17 13:43:59 2022 -0700 =20 Change how "print/x" displays floating-point value =20 The problem is that when 501 is written to $ft0.float the value is converted to floating point format and stored in the register. Prior to the above commit printing with /x and /d would first extract the value as a float, and then convert the value to an integer for display. After the above commit GDB now uses the raw register value when displaying /x and /d, and so we see this behaviour: =20 (gdb) info registers $ft0 ft0 {float =3D 501, double =3D 5.6347704700123827e-315} = (raw 0x0000000043fa8000) (gdb) p/f $ft0.float $1 =3D 501 (gdb) p/d $ft0.float $2 =3D 1140490240 (gdb) p/x $ft0.float $3 =3D 0x43fa8000 =20 To fix this test I now print the float registers using the /f format rather than /d. With this change the test now passes. Diff: --- gdb/testsuite/gdb.arch/riscv-reg-aliases.exp | 32 +++++++++++++++++-------= ---- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/gdb/testsuite/gdb.arch/riscv-reg-aliases.exp b/gdb/testsuite/g= db.arch/riscv-reg-aliases.exp index 0c413a4d040..4c188b78b1f 100644 --- a/gdb/testsuite/gdb.arch/riscv-reg-aliases.exp +++ b/gdb/testsuite/gdb.arch/riscv-reg-aliases.exp @@ -67,18 +67,22 @@ proc check_zero_register_value {testname} { # and we need to read/write using a ".float" extension. This is passed in # REG_EXTENSION. If no extension is needed then REG_EXTENSION is the empty # string. -proc check_setting_registers_to_zero { reg_set reg_extension } { +# +# PRINT_FMT is used when inspecting the registers, and should be a +# character that can be used in a GDB print command as an output +# format, e.g. 'd' (decimal), or 'f' (float). +proc check_setting_registers_to_zero { reg_set reg_extension print_fmt } { foreach reg_desc ${reg_set} { set primary_name [lindex ${reg_desc} 0] set alias_names [lindex ${reg_desc} 1] =20 gdb_test_no_output "set \$${primary_name}${reg_extension} =3D 0" \ "set register ${primary_name} to an initial value of zero" - gdb_test "p/d \$${primary_name}${reg_extension}" " =3D 0" \ + gdb_test "p/${print_fmt} \$${primary_name}${reg_extension}" " =3D 0" \ "check the initial value of ${primary_name} is now zero" =20 foreach reg_alias ${alias_names} { - gdb_test "p/d \$${reg_alias}${reg_extension}" " =3D 0" \ + gdb_test "p/${print_fmt} \$${reg_alias}${reg_extension}" " =3D 0" \ "check the initial value of ${reg_alias} is now zero" } } @@ -94,7 +98,11 @@ proc check_setting_registers_to_zero { reg_set reg_exten= sion } { # of the aliases. # # The REG_EXTENSION field is used as in CHECK_SETTING_REGISTERS_TO_ZERO. -proc check_setting_registers_to_value { reg_set reg_extension reg_value } { +# +# PRINT_FMT is used when inspecting the registers, and should be a +# character that can be used in a GDB print command as an output +# format, e.g. 'd' (decimal), or 'f' (float). +proc check_setting_registers_to_value { reg_set reg_extension reg_value pr= int_fmt } { foreach reg_desc ${reg_set} { set primary_name [lindex ${reg_desc} 0] set alias_names [lindex ${reg_desc} 1] @@ -104,10 +112,10 @@ proc check_setting_registers_to_value { reg_set reg_e= xtension reg_value } { set reg_value [incr reg_value] gdb_test_no_output "set \$${primary_name}${reg_extension} =3D $reg_value"= \ "write non-zero value to ${primary_name}" - gdb_test "p/d \$${primary_name}${reg_extension}" " =3D $reg_value" \ + gdb_test "p/${print_fmt} \$${primary_name}${reg_extension}" " =3D $reg_va= lue" \ "read ${primary_name} after non-zero write to ${primary_name}" foreach reg_alias ${alias_names} { - gdb_test "p/d \$${reg_alias}${reg_extension}" " =3D $reg_value" \ + gdb_test "p/${print_fmt} \$${reg_alias}${reg_extension}" " =3D $reg_v= alue" \ "read ${reg_alias} after non-zero write to ${primary_name}" } =20 @@ -119,11 +127,11 @@ proc check_setting_registers_to_value { reg_set reg_e= xtension reg_value } { gdb_test_no_output "set \$${reg_alias}${reg_extension} =3D $reg_value= " \ "write non-zero value to ${reg_alias}" =20 - gdb_test "p/d \$${primary_name}${reg_extension}" " =3D $reg_value" \ + gdb_test "p/${print_fmt} \$${primary_name}${reg_extension}" " =3D $re= g_value" \ "read ${primary_name} after non-zero write to ${reg_alias}" =20 foreach other_reg_alias ${alias_names} { - gdb_test "p/d \$${other_reg_alias}${reg_extension}" " =3D $reg_value" \ + gdb_test "p/${print_fmt} \$${other_reg_alias}${reg_extension}" " =3D $re= g_value" \ "read ${other_reg_alias} after non-zero write to ${reg_alias}" } } @@ -173,10 +181,10 @@ gdb_assert ![string eq "${freg_extension}" "INVALID"]= \ =20 # Now check that we can write zero, and read zero back to all of the integ= er # and floating point registers. -check_setting_registers_to_zero ${xreg_names} "" +check_setting_registers_to_zero ${xreg_names} "" "d" =20 if { ! $skip_freg_tests } { - check_setting_registers_to_zero ${freg_names} ${freg_extension} + check_setting_registers_to_zero ${freg_names} ${freg_extension} "f" } =20 # Set each register in turn to a new value, and confirm that the new value= can @@ -184,8 +192,8 @@ if { ! $skip_freg_tests } { # value passed in to each test invocation here is arbitrary, they are # significantly different so that the float tests don't reuse value from t= he # integer tests. -check_setting_registers_to_value ${xreg_names} "" 100 +check_setting_registers_to_value ${xreg_names} "" 100 "d" =20 if { ! $skip_freg_tests } { - check_setting_registers_to_value ${freg_names} ${freg_extension} 500 + check_setting_registers_to_value ${freg_names} ${freg_extension} 500 "= f" }