From: Tristan Gingold Date: Fri, 13 Nov 2009 10:32:58 +0000 (+0000) Subject: 2009-11-13 Tristan Gingold X-Git-Tag: cgen-snapshot-20091201~185 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fd6d6815538394e49c70d2df8fd65ebddb05ffbe;p=thirdparty%2Fbinutils-gdb.git 2009-11-13 Tristan Gingold * avr-tdep.c (avr_push_dummy_call): Fix endianness issue and avoid overlap between returned structure and return address/parameters. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 275955c5cae..5111dbc28f6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2009-11-13 Tristan Gingold + + * 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 * remote-fileio.c (remote_fileio_func_read): Limit console diff --git a/gdb/avr-tdep.c b/gdb/avr-tdep.c index ba6e8cb4129..0c76cf4542a 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++)