aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTristan Gingold <gingold@adacore.com>2009-11-13 10:32:58 +0000
committerTristan Gingold <gingold@adacore.com>2009-11-13 10:32:58 +0000
commitfd6d6815538394e49c70d2df8fd65ebddb05ffbe (patch)
treed2d9d1a0054f1e40c3e26de9fd4816d58f1fa7c5 /gdb
parent2fa554264611910bc0d0f095893b2adc59732232 (diff)
downloadgdb-fd6d6815538394e49c70d2df8fd65ebddb05ffbe.zip
gdb-fd6d6815538394e49c70d2df8fd65ebddb05ffbe.tar.gz
gdb-fd6d6815538394e49c70d2df8fd65ebddb05ffbe.tar.bz2
2009-11-13 Tristan Gingold <gingold@adacore.com>
* avr-tdep.c (avr_push_dummy_call): Fix endianness issue and avoid overlap between returned structure and return address/parameters.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/avr-tdep.c12
2 files changed, 13 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 275955c..5111dbc 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2009-11-13 Tristan Gingold <gingold@adacore.com>
+
+ * avr-tdep.c (avr_push_dummy_call): Fix endianness issue and avoid
+ overlap between returned structure and return address/parameters.
+
2009-11-12 Daniel Jacobowitz <dan@codesourcery.com>
* remote-fileio.c (remote_fileio_func_read): Limit console
diff --git a/gdb/avr-tdep.c b/gdb/avr-tdep.c
index ba6e8cb..0c76cf4 100644
--- a/gdb/avr-tdep.c
+++ b/gdb/avr-tdep.c
@@ -1252,10 +1252,14 @@ avr_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
if (struct_return)
{
- regcache_cooked_write_unsigned (regcache, regnum--,
- struct_addr & 0xff);
- regcache_cooked_write_unsigned (regcache, regnum--,
- (struct_addr >> 8) & 0xff);
+ regcache_cooked_write_unsigned
+ (regcache, regnum--, (struct_addr >> 8) & 0xff);
+ regcache_cooked_write_unsigned
+ (regcache, regnum--, struct_addr & 0xff);
+ /* SP being post decremented, we need to reserve one byte so that the
+ return address won't overwrite the result (or vice-versa). */
+ if (sp == struct_addr)
+ sp--;
}
for (i = 0; i < nargs; i++)