rs6000, Fix test gdb.base/store.exp
authorCarl Love <cel@linux.ibm.com>
Wed, 8 Nov 2023 16:33:15 +0000 (11:33 -0500)
committerCarl Love <cel@linux.ibm.com>
Wed, 8 Nov 2023 16:36:07 +0000 (11:36 -0500)
commita0a97b8cac56ea498bfcfa0afbbe943bf79b7894
treeaabf9e0a62fbde6d3049afc95255bbdb9784c864
parent1bd70cb9f833660a249b0467fab3d07a97e21a07
rs6000, Fix test gdb.base/store.exp

The test currently fails for IEEE 128-bit floating point types.  PowerPC
supports the IBM double 128-bit floating point format and IEEE 128-bit
format.  The IBM double 128-bit floating point format uses two 64-bit
floating point registers to store the 128-bit value.  The IEEE 128-bit
floating point format stores the value in a single 128-bit vector-scalar
register (vsr).

The various floating point values, 32-bit float, 64-bit double, IBM double
128-bit float and IEEE 128-bit floating point numbers are all mapped to the
DWARF fpr numbers.  The issue is the IEEE 128-bit floating point values are
actually stored in a vsr not the fprs.  This patch changes the register
mapping for the vsrs from the fpr to the vsr registers so the value is
properly accessed by GDB.  The functions rs6000_linux_register_to_value,
rs6000_linux_value_to_register, rs6000_linux_value_from_register check if
the value is an IEEE 128-bit floating point value and adjust the register
number as needed.  The test in function rs6000_convert_register_p is fixed
so it is only true for floating point values.

This patch fixes three regression tests in gdb.base/store.exp.

The patch has been tested on Power 8 LE/BE, Power 9 LE/BE and Power 10 LE
with no regressions.
gdb/ppc-linux-tdep.c
gdb/rs6000-tdep.c