+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
char regbuf[REGISTER_BYTES];
char *valbuf;
{
+ int offset = 0;
if (TYPE_CODE (valtype) == TYPE_CODE_FLT) {
memcpy (valbuf, &ff, sizeof(float));
}
}
- else
+ else {
/* return value is copied starting from r3. */
- memcpy (valbuf, ®buf[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));
+ }
}