From: Tom Tromey Date: Wed, 20 Sep 2023 13:50:58 +0000 (-0600) Subject: Fix "finish" with range types on ARM X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b4b9074dc0dfab4fb00562b359315d78b09a1564;p=binutils-gdb.git Fix "finish" with range types on ARM 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 --- diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index 97d7c5140d2..ab0df0f16a8 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -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 (gdbarch); + while (type->code () == TYPE_CODE_RANGE) + type = check_typedef (type->target_type ()); + if (TYPE_CODE_FLT == type->code ()) { switch (tdep->fp_model)