* alpha-tdep.c (alpha_push_dummy_call): Handle ABI mandated
sign-extension of 32-bit values. (alpha_store_return_value): Similarly.
This commit is contained in:
parent
7b5e1cb37d
commit
0ede8ecaa0
2 changed files with 17 additions and 2 deletions
|
@ -1,5 +1,9 @@
|
||||||
2003-06-02 Richard Henderson <rth@redhat.com>
|
2003-06-02 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
|
* alpha-tdep.c (alpha_push_dummy_call): Handle ABI mandated
|
||||||
|
sign-extension of 32-bit values.
|
||||||
|
(alpha_store_return_value): Similarly.
|
||||||
|
|
||||||
* alpha-tdep.c (alpha_push_dummy_call): Handle COMPLEX types.
|
* alpha-tdep.c (alpha_push_dummy_call): Handle COMPLEX types.
|
||||||
(alpha_extract_return_value): Likewise.
|
(alpha_extract_return_value): Likewise.
|
||||||
(alpha_store_return_value): Likewise.
|
(alpha_store_return_value): Likewise.
|
||||||
|
|
|
@ -276,9 +276,16 @@ alpha_push_dummy_call (struct gdbarch *gdbarch, CORE_ADDR func_addr,
|
||||||
case TYPE_CODE_CHAR:
|
case TYPE_CODE_CHAR:
|
||||||
case TYPE_CODE_RANGE:
|
case TYPE_CODE_RANGE:
|
||||||
case TYPE_CODE_ENUM:
|
case TYPE_CODE_ENUM:
|
||||||
if (TYPE_LENGTH (arg_type) < TYPE_LENGTH (builtin_type_long))
|
if (TYPE_LENGTH (arg_type) == 4)
|
||||||
{
|
{
|
||||||
arg_type = builtin_type_long;
|
/* 32-bit values must be sign-extended to 64 bits
|
||||||
|
even if the base data type is unsigned. */
|
||||||
|
arg_type = builtin_type_int32;
|
||||||
|
arg = value_cast (arg_type, arg);
|
||||||
|
}
|
||||||
|
if (TYPE_LENGTH (arg_type) < ALPHA_REGISTER_SIZE)
|
||||||
|
{
|
||||||
|
arg_type = builtin_type_int64;
|
||||||
arg = value_cast (arg_type, arg);
|
arg = value_cast (arg_type, arg);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -541,6 +548,10 @@ alpha_store_return_value (struct type *valtype, struct regcache *regcache,
|
||||||
|
|
||||||
default:
|
default:
|
||||||
/* Assume everything else degenerates to an integer. */
|
/* Assume everything else degenerates to an integer. */
|
||||||
|
/* 32-bit values must be sign-extended to 64 bits
|
||||||
|
even if the base data type is unsigned. */
|
||||||
|
if (length == 4)
|
||||||
|
valtype = builtin_type_int32;
|
||||||
l = unpack_long (valtype, valbuf);
|
l = unpack_long (valtype, valbuf);
|
||||||
regcache_cooked_write_unsigned (regcache, ALPHA_V0_REGNUM, l);
|
regcache_cooked_write_unsigned (regcache, ALPHA_V0_REGNUM, l);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue