aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Schauer <Peter.Schauer@mytum.de>1995-08-12 10:21:12 +0000
committerPeter Schauer <Peter.Schauer@mytum.de>1995-08-12 10:21:12 +0000
commit07781ac0c3881d419132b855f1c592b0d40d12d9 (patch)
treee19c4e1e77748e9973cf21a130265f7f4c740136
parentf2d1b56f40d1723e46a7969f36ff1c20c73fc204 (diff)
downloadgdb-07781ac0c3881d419132b855f1c592b0d40d12d9.zip
gdb-07781ac0c3881d419132b855f1c592b0d40d12d9.tar.gz
gdb-07781ac0c3881d419132b855f1c592b0d40d12d9.tar.bz2
* rs6000-tdep.c (extract_return_value): Fix returning of values
whose length is less than the register size for big endian targets.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/rs6000-tdep.c11
2 files changed, 14 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index a0addb1..fd4e680 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
index bbfe906..a645645 100644
--- a/gdb/rs6000-tdep.c
+++ b/gdb/rs6000-tdep.c
@@ -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));
+ }
}