gdb/riscv/testsuite: fix failures in gdb.arch/riscv-reg-aliases.exp
authorAndrew Burgess <aburgess@redhat.com>
Tue, 9 Aug 2022 16:12:40 +0000 (17:12 +0100)
committerAndrew Burgess <aburgess@redhat.com>
Tue, 9 Aug 2022 16:37:46 +0000 (17:37 +0100)
commitc1abad9ebadc94e2ca215fd0fb6b59072b67351c
tree4a6867a99a44b245ffea809e5f873038aac5b90b
parent410a3464e7960d24de4a200e70502dcd01eff98d
gdb/riscv/testsuite: fix failures in gdb.arch/riscv-reg-aliases.exp

When running on a native RISC-V Linux target I currently see failures
in the gdb.arch/riscv-reg-aliases.exp test like this:

  set $ft0.float = 501
  (gdb) PASS: gdb.arch/riscv-reg-aliases.exp: write non-zero value to ft0
  p/d $ft0.float
  $263 = 1140490240
  (gdb) FAIL: gdb.arch/riscv-reg-aliases.exp: read ft0 after non-zero write to ft0

This test started failing after this commit:

  commit 56262a931b7ca8ee3ec9104bc7e9e0b40cf3d64e
  Date:   Thu Feb 17 13:43:59 2022 -0700

      Change how "print/x" displays floating-point value

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:

  (gdb) info registers $ft0
  ft0            {float = 501, double = 5.6347704700123827e-315} (raw 0x0000000043fa8000)
  (gdb) p/f $ft0.float
  $1 = 501
  (gdb) p/d $ft0.float
  $2 = 1140490240
  (gdb) p/x $ft0.float
  $3 = 0x43fa8000

To fix this test I now print the float registers using the /f format
rather than /d.  With this change the test now passes.
gdb/testsuite/gdb.arch/riscv-reg-aliases.exp