Fix range-type "return" command on ARM
authorTom Tromey <tromey@adacore.com>
Wed, 20 Sep 2023 16:04:12 +0000 (10:04 -0600)
committerTom Tromey <tromey@adacore.com>
Mon, 30 Oct 2023 13:45:39 +0000 (07:45 -0600)
On big-endian ARM, "return"ing from a function that returned a range
type did not work.  This patch strips the range type to treat the
function as though it were returning the underlying type instead.

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

index 493e5b84758b1bd99fcb13bd1069b8ed2bcf42ac..62412d92f855f864a0ef28294733b96dee4d3abc 100644 (file)
@@ -9132,6 +9132,9 @@ arm_store_return_value (struct type *type, struct regcache *regs,
   struct gdbarch *gdbarch = regs->arch ();
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
 
+  while (type->code () == TYPE_CODE_RANGE)
+    type = check_typedef (type->target_type ());
+
   if (type->code () == TYPE_CODE_FLT)
     {
       gdb_byte buf[ARM_FP_REGISTER_SIZE];