[binutils-gdb] Fix range-type "return" command on ARM

Tom Tromey tromey@sourceware.org
Mon Oct 30 13:50:19 GMT 2023


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=47231c30a0475092cd452d6062ed06ee904e28f8

commit 47231c30a0475092cd452d6062ed06ee904e28f8
Author: Tom Tromey <tromey@adacore.com>
Date:   Wed Sep 20 10:04:12 2023 -0600

    Fix range-type "return" command on ARM
    
    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>

Diff:
---
 gdb/arm-tdep.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index 493e5b84758..62412d92f85 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -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];


More information about the Gdb-cvs mailing list