Fix "finish" with range types on ARM
authorTom Tromey <tromey@adacore.com>
Wed, 20 Sep 2023 13:50:58 +0000 (07:50 -0600)
committerTom Tromey <tromey@adacore.com>
Mon, 30 Oct 2023 13:45:39 +0000 (07:45 -0600)
On ARM (I tested big-endian but it may not matter), "finish" can
sometimes print the wrong result when the return type is a range type.
Range types should really be treated as their underlying type
(normally integer, but sometimes fixed-point).  This patch implements
this.

Approved-By: Luis Machado <luis.machado@arm.com>
gdb/arm-tdep.c

index 97d7c5140d2e7ea912f7b10e80dde6ebd7fe67fa..ab0df0f16a8f385c7649427dd1e9559f412b8663 100644 (file)
@@ -8915,6 +8915,9 @@ arm_extract_return_value (struct type *type, struct regcache *regs,
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   arm_gdbarch_tdep *tdep = gdbarch_tdep<arm_gdbarch_tdep> (gdbarch);
 
+  while (type->code () == TYPE_CODE_RANGE)
+    type = check_typedef (type->target_type ());
+
   if (TYPE_CODE_FLT == type->code ())
     {
       switch (tdep->fp_model)