diff options
Diffstat (limited to 'gdb/mem-break.c')
-rw-r--r-- | gdb/mem-break.c | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/gdb/mem-break.c b/gdb/mem-break.c index 810f8ae..2d9851b 100644 --- a/gdb/mem-break.c +++ b/gdb/mem-break.c @@ -33,60 +33,57 @@ #include "target.h" -/* Insert a breakpoint on targets that don't have any better breakpoint - support. We read the contents of the target location and stash it, - then overwrite it with a breakpoint instruction. ADDR is the target - location in the target machine. CONTENTS_CACHE is a pointer to - memory allocated for saving the target contents. It is guaranteed - by the caller to be long enough to save BREAKPOINT_LEN bytes (this - is accomplished via BREAKPOINT_MAX). */ +/* Insert a breakpoint on targets that don't have any better + breakpoint support. We read the contents of the target location + and stash it, then overwrite it with a breakpoint instruction. + BP_TGT->placed_address is the target location in the target + machine. BP_TGT->shadow_contents is some memory allocated for + saving the target contents. It is guaranteed by the caller to be + long enough to save BREAKPOINT_LEN bytes (this is accomplished via + BREAKPOINT_MAX). */ int -default_memory_insert_breakpoint (CORE_ADDR addr, bfd_byte *contents_cache) +default_memory_insert_breakpoint (struct bp_target_info *bp_tgt) { int val; const unsigned char *bp; int bplen; /* Determine appropriate breakpoint contents and size for this address. */ - bp = BREAKPOINT_FROM_PC (&addr, &bplen); + bp = BREAKPOINT_FROM_PC (&bp_tgt->placed_address, &bp_tgt->placed_size); if (bp == NULL) error (_("Software breakpoints not implemented for this target.")); /* Save the memory contents. */ - val = target_read_memory (addr, contents_cache, bplen); + bp_tgt->shadow_len = bp_tgt->placed_size; + val = target_read_memory (bp_tgt->placed_address, bp_tgt->shadow_contents, + bp_tgt->placed_size); /* Write the breakpoint. */ if (val == 0) - val = target_write_memory (addr, bp, bplen); + val = target_write_memory (bp_tgt->placed_address, bp, + bp_tgt->placed_size); return val; } int -default_memory_remove_breakpoint (CORE_ADDR addr, bfd_byte *contents_cache) +default_memory_remove_breakpoint (struct bp_target_info *bp_tgt) { - const bfd_byte *bp; - int bplen; - - /* Determine appropriate breakpoint contents and size for this address. */ - bp = BREAKPOINT_FROM_PC (&addr, &bplen); - if (bp == NULL) - error (_("Software breakpoints not implemented for this target.")); - - return target_write_memory (addr, contents_cache, bplen); + return target_write_memory (bp_tgt->placed_address, bp_tgt->shadow_contents, + bp_tgt->placed_size); } int -memory_insert_breakpoint (CORE_ADDR addr, bfd_byte *contents_cache) +memory_insert_breakpoint (struct bp_target_info *bp_tgt) { - return MEMORY_INSERT_BREAKPOINT(addr, contents_cache); + return MEMORY_INSERT_BREAKPOINT (bp_tgt); } int -memory_remove_breakpoint (CORE_ADDR addr, bfd_byte *contents_cache) +memory_remove_breakpoint (struct bp_target_info *bp_tgt) { - return MEMORY_REMOVE_BREAKPOINT(addr, contents_cache); + return MEMORY_REMOVE_BREAKPOINT (bp_tgt); } |