Change riscv_return_value to use RETURN_VALUE_ABI_PRESERVES_ADDRESS
authorTom Tromey <tromey@adacore.com>
Tue, 14 Dec 2021 15:46:59 +0000 (08:46 -0700)
committerTom Tromey <tromey@adacore.com>
Wed, 5 Jan 2022 19:35:42 +0000 (12:35 -0700)
Internally, AdaCore has a test that is equivalent to (really a direct
translation of) gdb.base/gnu_vector.exp.  On 32-bit RISC-V, the
"return" part of this test fails.

Joel tracked this down to riscv_return_value returning
RETURN_VALUE_ABI_RETURNS_ADDRESS.  Using
RETURN_VALUE_ABI_PRESERVES_ADDRESS is more correct here, and fixes the
bug.

I tested this for both 32- and 64-bit RISC-V using the AdaCore
internal test suite, and Andrew Burgess tested it using
gnu_vector.exp.

gdb/riscv-tdep.c

index 5a6269887e7de44540b7b1344774e34b46e3603a..886996ce5b759c4f6b7a1b7fd043640a9fb00a4e 100644 (file)
@@ -3301,7 +3301,7 @@ riscv_return_value (struct gdbarch  *gdbarch,
     case riscv_arg_info::location::in_reg:
       return RETURN_VALUE_REGISTER_CONVENTION;
     case riscv_arg_info::location::by_ref:
-      return RETURN_VALUE_ABI_RETURNS_ADDRESS;
+      return RETURN_VALUE_ABI_PRESERVES_ADDRESS;
     case riscv_arg_info::location::on_stack:
     default:
       error (_("invalid argument location"));