* 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:
Richard Henderson 2003-06-02 16:17:54 +00:00
parent 7b5e1cb37d
commit 0ede8ecaa0
2 changed files with 17 additions and 2 deletions

View File

@ -1,5 +1,9 @@
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_extract_return_value): Likewise.
(alpha_store_return_value): Likewise.

View File

@ -276,9 +276,16 @@ alpha_push_dummy_call (struct gdbarch *gdbarch, CORE_ADDR func_addr,
case TYPE_CODE_CHAR:
case TYPE_CODE_RANGE:
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);
}
break;
@ -541,6 +548,10 @@ alpha_store_return_value (struct type *valtype, struct regcache *regcache,
default:
/* 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);
regcache_cooked_write_unsigned (regcache, ALPHA_V0_REGNUM, l);
break;