Fix fixed-point regression with recent GCC
authorTom Tromey <tromey@adacore.com>
Mon, 25 Jan 2021 15:13:51 +0000 (08:13 -0700)
committerTom Tromey <tromey@adacore.com>
Mon, 25 Jan 2021 15:13:51 +0000 (08:13 -0700)
commita625a8c9eb4b5ae67dc3a6f34ef3c03520ab090d
treeadc8a58898928e011b02bdffccf46bbd60a44a10
parent191849105b95e5ac3a3173547fd77f7b1fc3b283
Fix fixed-point regression with recent GCC

A recent version of GCC changed how fixed-point types are described.
For example, a denominator in one test case now looks like:

    GNU_denominator      (exprloc)
     [ 0] implicit_value: 16 byte block: 00 00 b8 9d 0d 69 55 a0 01 00 00 00 00 00 00 00

... the difference being that this now uses exprloc and emits a
DW_OP_implicit_value for the 16-byte block.  (DWARF 5 still uses
DW_FORM_data16.)

This change was made here:

    https://gcc.gnu.org/pipermail/gcc-patches/2020-December/560897.html

This patch updates gdb to handle this situation.

Note that, before GCC 11, this test would not give the same answer.
Earlier versions of GCC fell back to GNAT encodings for this case.

gdb/ChangeLog
2021-01-25  Tom Tromey  <tromey@adacore.com>

* dwarf2/read.c (get_mpz): New function.
(get_dwarf2_rational_constant): Use it.

gdb/testsuite/ChangeLog
2021-01-25  Tom Tromey  <tromey@adacore.com>

* gdb.ada/fixed_points.exp: Add regression test.
* gdb.ada/fixed_points/fixed_points.adb (FP5_Var): New variable.
* gdb.ada/fixed_points/pck.adb (Delta5, FP5_Type): New.
gdb/ChangeLog
gdb/dwarf2/read.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.ada/fixed_points.exp
gdb/testsuite/gdb.ada/fixed_points/fixed_points.adb
gdb/testsuite/gdb.ada/fixed_points/pck.ads