(Ada/AArch64) fix fixed point argument passing in inferior funcall
authorXavier Roirand <roirand@adacore.com>
Fri, 12 May 2017 13:02:28 +0000 (15:02 +0200)
committerTom Tromey <tromey@adacore.com>
Thu, 2 Dec 2021 16:08:50 +0000 (09:08 -0700)
commit28397ae781e0780259648991f981909c5a5045e7
tree965ddb40bfaf93324d408a37c727baf02ef3b439
parentbc75fb44c5693114b3dc654a2e4b39c9b5a9ca26
(Ada/AArch64) fix fixed point argument passing in inferior funcall

Consider the following code:

   type FP1_Type is delta 0.1 range -1.0 .. +1.0; --  Ordinary

   function Call_FP1 (F : FP1_Type) return FP1_Type is
   begin
      return F;
   end Call_FP1;

When the default in GCC is to generate proper DWARF info for fixed point
types, then in gdb, printing the result of a call to call_fp1 with a
decimal parameter leads to:

  (gdb) p call_fp1(0.5)
  $1 = 0

The displayed value is wrong, and we actually expected:

  (gdb) p call_fp1(0.5)
  $1 = 0.5

What happened is that our fixed point type parameter got promoted to a
32bit integer because we detected that the length of that object was less
than 4 bytes. The compiler does not perform this promotion and therefore
GDB should not either.

This patch fixes the behavior described above.
gdb/aarch64-tdep.c
gdb/testsuite/gdb.ada/fixed_points_function.exp [new file with mode: 0644]
gdb/testsuite/gdb.ada/fixed_points_function/fixed_points_function.adb [new file with mode: 0644]
gdb/testsuite/gdb.ada/fixed_points_function/pck.adb [new file with mode: 0644]
gdb/testsuite/gdb.ada/fixed_points_function/pck.ads [new file with mode: 0644]