* spu-tdep.c (spu_get_longjmp_target): New function.

(spu_gdbarch_init): Install it.
This commit is contained in:
Ulrich Weigand 2009-06-22 17:14:43 +00:00
parent df4b58feaa
commit 6e3f70d70b
2 changed files with 26 additions and 0 deletions

View file

@ -1,3 +1,8 @@
2009-06-22 Ulrich Weigand <uweigand@de.ibm.com>
* spu-tdep.c (spu_get_longjmp_target): New function.
(spu_gdbarch_init): Install it.
2009-06-22 H.J. Lu <hongjiu.lu@intel.com>
PR server/10306

View file

@ -1329,6 +1329,26 @@ spu_software_single_step (struct frame_info *frame)
return 1;
}
/* Longjmp support. */
static int
spu_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
{
gdb_byte buf[4];
CORE_ADDR jb_addr;
/* Jump buffer is pointed to by the argument register $r3. */
get_frame_register_bytes (frame, SPU_ARG1_REGNUM, 0, 4, buf);
jb_addr = extract_unsigned_integer (buf, 4);
if (target_read_memory (jb_addr, buf, 4))
return 0;
*pc = extract_unsigned_integer (buf, 4);
return 1;
}
/* Target overlays for the SPU overlay manager.
See the documentation of simple_overlay_update for how the
@ -2148,6 +2168,7 @@ spu_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_breakpoint_from_pc (gdbarch, spu_breakpoint_from_pc);
set_gdbarch_cannot_step_breakpoint (gdbarch, 1);
set_gdbarch_software_single_step (gdbarch, spu_software_single_step);
set_gdbarch_get_longjmp_target (gdbarch, spu_get_longjmp_target);
/* Overlays. */
set_gdbarch_overlay_update (gdbarch, spu_overlay_update);