From b4b9074dc0dfab4fb00562b359315d78b09a1564 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 20 Sep 2023 07:50:58 -0600 Subject: [PATCH] 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 --- gdb/arm-tdep.c | 3 +++ 1 file changed, 3 insertions(+) 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) -- 2.30.2