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:
parent
e4b97d48ee
commit
f08877ba09
2 changed files with 12 additions and 5 deletions
|
@ -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>
|
2010-01-09 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
Cannot set the PC on mips-irix.
|
Cannot set the PC on mips-irix.
|
||||||
|
|
|
@ -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
|
(and $f2 if necessary). This is a generalization of the Fortran COMPLEX
|
||||||
case.
|
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).
|
$2 (first 64 bits) and $3 (remainder, if necessary).
|
||||||
|
|
||||||
* Larger composite results are handled by converting the function to a
|
* 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
|
specific exception to return COMPLEX results in the floating point
|
||||||
registers.] */
|
registers.] */
|
||||||
|
|
||||||
if (TYPE_CODE (type) == TYPE_CODE_ARRAY
|
if (TYPE_LENGTH (type) > 2 * MIPS64_REGSIZE)
|
||||||
|| TYPE_LENGTH (type) > 2 * MIPS64_REGSIZE)
|
|
||||||
return RETURN_VALUE_STRUCT_CONVENTION;
|
return RETURN_VALUE_STRUCT_CONVENTION;
|
||||||
else if (TYPE_CODE (type) == TYPE_CODE_FLT
|
else if (TYPE_CODE (type) == TYPE_CODE_FLT
|
||||||
&& TYPE_LENGTH (type) == 16
|
&& TYPE_LENGTH (type) == 16
|
||||||
|
@ -3481,9 +3480,10 @@ mips_n32n64_return_value (struct gdbarch *gdbarch, struct type *func_type,
|
||||||
return RETURN_VALUE_REGISTER_CONVENTION;
|
return RETURN_VALUE_REGISTER_CONVENTION;
|
||||||
}
|
}
|
||||||
else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
|
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
|
regardless of the byte order. I.e. DO NOT USE
|
||||||
mips_xfer_lower. */
|
mips_xfer_lower. */
|
||||||
int offset;
|
int offset;
|
||||||
|
|
Loading…
Reference in a new issue