* spu-tdep.c (spu_push_dummy_call): Update all stack pointer slots

when allocating stack frame for inferior call.
This commit is contained in:
Ulrich Weigand 2008-09-03 21:27:05 +00:00
parent c4891da7f9
commit 9ff3afda84
2 changed files with 14 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2008-09-03 Ulrich Weigand <uweigand@de.ibm.com>
* spu-tdep.c (spu_push_dummy_call): Update all stack pointer slots
when allocating stack frame for inferior call.
2008-09-03 Ulrich Weigand <uweigand@de.ibm.com>
* spu-tdep.c (spu_frame_unwind_cache): Do not attempt to unwind

View File

@ -1107,6 +1107,7 @@ spu_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
int nargs, struct value **args, CORE_ADDR sp,
int struct_return, CORE_ADDR struct_addr)
{
CORE_ADDR sp_delta;
int i;
int regnum = SPU_ARG1_REGNUM;
int stack_arg = -1;
@ -1186,8 +1187,14 @@ spu_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
regcache_cooked_read (regcache, SPU_RAW_SP_REGNUM, buf);
target_write_memory (sp, buf, 16);
/* Finally, update the SP register. */
regcache_cooked_write_unsigned (regcache, SPU_SP_REGNUM, sp);
/* Finally, update all slots of the SP register. */
sp_delta = sp - extract_unsigned_integer (buf, 4);
for (i = 0; i < 4; i++)
{
CORE_ADDR sp_slot = extract_unsigned_integer (buf + 4*i, 4);
store_unsigned_integer (buf + 4*i, 4, sp_slot + sp_delta);
}
regcache_cooked_write (regcache, SPU_RAW_SP_REGNUM, buf);
return sp;
}