* 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
@ -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.
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user