diff options
author | Markus Metzger <markus.t.metzger@intel.com> | 2013-12-18 11:09:34 +0100 |
---|---|---|
committer | Markus Metzger <markus.t.metzger@intel.com> | 2014-01-16 13:12:00 +0100 |
commit | 118e6252ca1cabce6d4480a4f24c53e5456a2cfa (patch) | |
tree | a08bdea923afba0540633d88e19f84842cbc0580 /gdb/infrun.c | |
parent | 6e07b1d27e5d3fb20e7d13f0cadfd923243fc48d (diff) | |
download | gdb-118e6252ca1cabce6d4480a4f24c53e5456a2cfa.zip gdb-118e6252ca1cabce6d4480a4f24c53e5456a2cfa.tar.gz gdb-118e6252ca1cabce6d4480a4f24c53e5456a2cfa.tar.bz2 |
target: allow decr_pc_after_break to be defined by the target
Allow the target to define which value to use in decr_pc_after_break.
It defaults to gdbarch_decr_pc_after_break (GDBARCH).
2014-01-16 Markus Metzger <markus.t.metzger@intel.com>
* target.h (struct target_ops) <to_decr_pc_after_break>: New.
(forward_target_decr_pc_after_break)
(target_decr_pc_after_break): New.
* target.c (forward_target_decr_pc_after_break)
(target_decr_pc_after_break): New.
* aix-thread.c (aix_thread_wait): Call target_decr_pc_after_break
instead of gdbarch_decr_pc_after_break.
* darwin-nat.c (cancel_breakpoint): Call target_decr_pc_after_break
instead of gdbarch_decr_pc_after_break.
* infrun.c (adjust_pc_after_break): Call target_decr_pc_after_break
instead of gdbarch_decr_pc_after_break.
* linux-nat.c (cancel_breakpoint): Call target_decr_pc_after_break
instead of gdbarch_decr_pc_after_break.
* linux-thread-db.c (check_event): Call target_decr_pc_after_break
instead of gdbarch_decr_pc_after_break.
* record-full.c (record_full_wait_1): Call target_decr_pc_after_break
instead of gdbarch_decr_pc_after_break.
Diffstat (limited to 'gdb/infrun.c')
-rw-r--r-- | gdb/infrun.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/gdb/infrun.c b/gdb/infrun.c index 311bf9c..71d9615 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -2963,7 +2963,7 @@ adjust_pc_after_break (struct execution_control_state *ecs) struct regcache *regcache; struct gdbarch *gdbarch; struct address_space *aspace; - CORE_ADDR breakpoint_pc; + CORE_ADDR breakpoint_pc, decr_pc; /* If we've hit a breakpoint, we'll normally be stopped with SIGTRAP. If we aren't, just return. @@ -3025,15 +3025,16 @@ adjust_pc_after_break (struct execution_control_state *ecs) we have nothing to do. */ regcache = get_thread_regcache (ecs->ptid); gdbarch = get_regcache_arch (regcache); - if (gdbarch_decr_pc_after_break (gdbarch) == 0) + + decr_pc = target_decr_pc_after_break (gdbarch); + if (decr_pc == 0) return; aspace = get_regcache_aspace (regcache); /* Find the location where (if we've hit a breakpoint) the breakpoint would be. */ - breakpoint_pc = regcache_read_pc (regcache) - - gdbarch_decr_pc_after_break (gdbarch); + breakpoint_pc = regcache_read_pc (regcache) - decr_pc; /* Check whether there actually is a software breakpoint inserted at that location. |