aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Buettner <kevinb@redhat.com>2007-05-03 17:51:19 +0000
committerKevin Buettner <kevinb@redhat.com>2007-05-03 17:51:19 +0000
commit6da397e0ebe6a3c39efe93bb7f40946c8ba92947 (patch)
tree39a37f46edc1a4bdf70c5ac5ea2230d974cf8b8c
parent2219d63c86d52fe7f954d8ebf92a4353add7010f (diff)
downloadgdb-6da397e0ebe6a3c39efe93bb7f40946c8ba92947.zip
gdb-6da397e0ebe6a3c39efe93bb7f40946c8ba92947.tar.gz
gdb-6da397e0ebe6a3c39efe93bb7f40946c8ba92947.tar.bz2
* mips-tdep.c (mips_eabi_push_dummy_call): When pushing floating
point arguments, test explicitly for use of the EABI32 ABI instead of inferring this condition from tests on register sizes.
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/mips-tdep.c7
2 files changed, 13 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 188bed3..754592e 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,12 @@
2007-05-03 Kevin Buettner <kevinb@redhat.com>
+ * mips-tdep.c (mips_eabi_push_dummy_call): When pushing floating
+ point arguments, test explicitly for use of the EABI32 ABI
+ instead of inferring this condition from tests on register
+ sizes.
+
+2007-05-03 Kevin Buettner <kevinb@redhat.com>
+
* breakpoint.c (set_raw_breakpoint): Adjust breakpoint's address
prior to allocating its location.
diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c
index d53b602..a291aa5 100644
--- a/gdb/mips-tdep.c
+++ b/gdb/mips-tdep.c
@@ -2507,7 +2507,12 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
if (fp_register_arg_p (typecode, arg_type)
&& float_argreg <= MIPS_LAST_FP_ARG_REGNUM)
{
- if (register_size (gdbarch, float_argreg) < 8 && len == 8)
+ /* EABI32 will pass doubles in consecutive registers, even on
+ 64-bit cores. At one time, we used to check the size of
+ `float_argreg' to determine whether or not to pass doubles
+ in consecutive registers, but this is not sufficient for
+ making the ABI determination. */
+ if (len == 8 && mips_abi (gdbarch) == MIPS_ABI_EABI32)
{
int low_offset = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? 4 : 0;
unsigned long regval;