Wrong return convention for arrays (mips-irix).

* mips-tdep.c (mips_n32n64_return_value): Arrays whose size is
        128 bits or smaller are returned the same way as structs
        and unions of the the same size.
This commit is contained in:
Joel Brobecker 2010-01-09 04:42:54 +00:00
parent e4b97d48ee
commit f08877ba09
2 changed files with 12 additions and 5 deletions

View File

@ -1,3 +1,10 @@
2010-01-09 Joel Brobecker <brobecker@adacore.com>
Wrong return convention for arrays (mips-irix).
* mips-tdep.c (mips_n32n64_return_value): Arrays whose size is
128 bits or smaller are returned the same way as structs
and unions of the the same size.
2010-01-09 Joel Brobecker <brobecker@adacore.com>
Cannot set the PC on mips-irix.

View File

@ -3379,7 +3379,7 @@ mips_n32n64_return_value (struct gdbarch *gdbarch, struct type *func_type,
(and $f2 if necessary). This is a generalization of the Fortran COMPLEX
case.
* Any other struct or union results of at most 128 bits are returned in
* Any other composite results of at most 128 bits are returned in
$2 (first 64 bits) and $3 (remainder, if necessary).
* Larger composite results are handled by converting the function to a
@ -3390,8 +3390,7 @@ mips_n32n64_return_value (struct gdbarch *gdbarch, struct type *func_type,
specific exception to return COMPLEX results in the floating point
registers.] */
if (TYPE_CODE (type) == TYPE_CODE_ARRAY
|| TYPE_LENGTH (type) > 2 * MIPS64_REGSIZE)
if (TYPE_LENGTH (type) > 2 * MIPS64_REGSIZE)
return RETURN_VALUE_STRUCT_CONVENTION;
else if (TYPE_CODE (type) == TYPE_CODE_FLT
&& TYPE_LENGTH (type) == 16
@ -3481,9 +3480,10 @@ mips_n32n64_return_value (struct gdbarch *gdbarch, struct type *func_type,
return RETURN_VALUE_REGISTER_CONVENTION;
}
else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
|| TYPE_CODE (type) == TYPE_CODE_UNION)
|| TYPE_CODE (type) == TYPE_CODE_UNION
|| TYPE_CODE (type) == TYPE_CODE_ARRAY)
{
/* A structure or union. Extract the left justified value,
/* A composite type. Extract the left justified value,
regardless of the byte order. I.e. DO NOT USE
mips_xfer_lower. */
int offset;