diff options
author | Peter Schauer <Peter.Schauer@mytum.de> | 1995-08-01 09:20:05 +0000 |
---|---|---|
committer | Peter Schauer <Peter.Schauer@mytum.de> | 1995-08-01 09:20:05 +0000 |
commit | 92a6d6005325167e4e33d2c5d5d9e4d6d98de91d (patch) | |
tree | 2068c221942229e8001952e5cc4e562daefe8b29 /gdb/alpha-tdep.c | |
parent | 4f2f30116bbef513af63b7b45bd7ef13bd7b4673 (diff) | |
download | gdb-92a6d6005325167e4e33d2c5d5d9e4d6d98de91d.zip gdb-92a6d6005325167e4e33d2c5d5d9e4d6d98de91d.tar.gz gdb-92a6d6005325167e4e33d2c5d5d9e4d6d98de91d.tar.bz2 |
* mips-tdep.c (mips_extract_return_value): Fix returning of
values whose length is less than the register size for big endian
targets.
* alpha-tdep.c (alpha_extract_return_value,
alpha_store_return_value): Use alpha_convert_register_to_*
to handle functions returning "float" correctly.
Diffstat (limited to 'gdb/alpha-tdep.c')
-rw-r--r-- | gdb/alpha-tdep.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c index fd752f6..83f1602 100644 --- a/gdb/alpha-tdep.c +++ b/gdb/alpha-tdep.c @@ -1099,11 +1099,12 @@ alpha_extract_return_value (valtype, regbuf, valbuf) char regbuf[REGISTER_BYTES]; char *valbuf; { - int regnum; - - regnum = TYPE_CODE (valtype) == TYPE_CODE_FLT ? FP0_REGNUM : V0_REGNUM; - - memcpy (valbuf, regbuf + REGISTER_BYTE (regnum), TYPE_LENGTH (valtype)); + if (TYPE_CODE (valtype) == TYPE_CODE_FLT) + alpha_register_convert_to_virtual (FP0_REGNUM, valtype, + regbuf + REGISTER_BYTE (FP0_REGNUM), + valbuf); + else + memcpy (valbuf, regbuf + REGISTER_BYTE (V0_REGNUM), TYPE_LENGTH (valtype)); } /* Given a return value in `regbuf' with a type `valtype', @@ -1114,13 +1115,20 @@ alpha_store_return_value (valtype, valbuf) struct type *valtype; char *valbuf; { - int regnum; char raw_buffer[MAX_REGISTER_RAW_SIZE]; + int regnum = V0_REGNUM; + int length = TYPE_LENGTH (valtype); - regnum = TYPE_CODE (valtype) == TYPE_CODE_FLT ? FP0_REGNUM : V0_REGNUM; - memcpy(raw_buffer, valbuf, TYPE_LENGTH (valtype)); + if (TYPE_CODE (valtype) == TYPE_CODE_FLT) + { + regnum = FP0_REGNUM; + length = REGISTER_RAW_SIZE (regnum); + alpha_register_convert_to_raw (valtype, regnum, valbuf, raw_buffer); + } + else + memcpy (raw_buffer, valbuf, length); - write_register_bytes(REGISTER_BYTE (regnum), raw_buffer, TYPE_LENGTH (valtype)); + write_register_bytes (REGISTER_BYTE (regnum), raw_buffer, length); } /* Just like reinit_frame_cache, but with the right arguments to be |