* rs6000-tdep.c (extract_return_value): Fix returning of values

whose length is less than the register size for big endian targets.
This commit is contained in:
Peter Schauer 1995-08-12 10:21:12 +00:00
parent f2d1b56f40
commit 07781ac0c3
2 changed files with 14 additions and 2 deletions

View File

@ -1,3 +1,8 @@
Sat Aug 12 03:18:04 1995 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
* rs6000-tdep.c (extract_return_value): Fix returning of values
whose length is less than the register size for big endian targets.
Fri Aug 11 13:04:32 1995 Kung Hsu <kung@mexican.cygnus.com>
* symtab.c (list_symbols): if break command set breakpoint on matched

View File

@ -826,6 +826,7 @@ extract_return_value (valtype, regbuf, valbuf)
char regbuf[REGISTER_BYTES];
char *valbuf;
{
int offset = 0;
if (TYPE_CODE (valtype) == TYPE_CODE_FLT) {
@ -843,9 +844,15 @@ extract_return_value (valtype, regbuf, valbuf)
memcpy (valbuf, &ff, sizeof(float));
}
}
else
else {
/* return value is copied starting from r3. */
memcpy (valbuf, &regbuf[REGISTER_BYTE (3)], TYPE_LENGTH (valtype));
if (TARGET_BYTE_ORDER == BIG_ENDIAN
&& TYPE_LENGTH (valtype) < REGISTER_RAW_SIZE (3))
offset = REGISTER_RAW_SIZE (3) - TYPE_LENGTH (valtype);
memcpy (valbuf, regbuf + REGISTER_BYTE (3) + offset,
TYPE_LENGTH (valtype));
}
}