* mips-tdep.c (mips_eabi_push_dummy_call): When pushing floating
authorKevin Buettner <kevinb@redhat.com>
Thu, 3 May 2007 17:51:19 +0000 (17:51 +0000)
committerKevin Buettner <kevinb@redhat.com>
Thu, 3 May 2007 17:51:19 +0000 (17:51 +0000)
point arguments, test explicitly for use of the EABI32 ABI
instead of inferring this condition from tests on register
sizes.

gdb/ChangeLog
gdb/mips-tdep.c

index 188bed35b02791d823d1b878b5328eff5efa2f01..754592e364952352de06685aed125f7f146e6d88 100644 (file)
@@ -1,3 +1,10 @@
+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
index d53b602575e0d3ad265176e659c8d291008f422c..a291aa523a01b70210da105b1b76fe9c60b5b249 100644 (file)
@@ -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;