aboutsummaryrefslogtreecommitdiff
path: root/src/target/target.c
diff options
context:
space:
mode:
authorHsiangkai Wang <hsiangkai@gmail.com>2012-12-26 19:11:03 +0800
committerSpencer Oliver <spen@spen-soft.co.uk>2013-08-07 21:01:08 +0000
commit80d412bafc03ce9a0418a2b98de2668b0f8de0e6 (patch)
tree60ad927b0f8c1f3099d41ace002571319d219c26 /src/target/target.c
parentd979d78e97786667d168ba183c9fc60c622d29c1 (diff)
gdb server: new feature, add stop reason in stop reply packet for gdb
In GDB remote serial protocol, the stop reply packet could contain more detail stop reason. The currently defined stop reasons are listed below. * watch * rwatch * awatch * library * replaylog This commit adds stop reason, watch/rwatch/awatch, in stop reply packet for just hit watchpoint. As manual indicates, at most one stop reason should be present. The function needs target to implement new hook, hit_watchpoint. The hook will fill the hit watchpoint in second parameter. The information will assist gdb to locate the watchpoint. If no such information, gdb needs to scan all watchpoints by itself. Refer to GDB Manual, D.3 Stop Reply Packets Change-Id: I1f70a1a9cc772e88e641b6171f1a009629a43bd1 Signed-off-by: Hsiangkai Wang <hsiangkai@gmail.com> Reviewed-on: http://openocd.zylin.com/1092 Tested-by: jenkins Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Diffstat (limited to 'src/target/target.c')
-rw-r--r--src/target/target.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/target/target.c b/src/target/target.c
index c5b80d64..4c31fbea 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -1035,6 +1035,23 @@ int target_remove_watchpoint(struct target *target,
{
return target->type->remove_watchpoint(target, watchpoint);
}
+int target_hit_watchpoint(struct target *target,
+ struct watchpoint **hit_watchpoint)
+{
+ if (target->state != TARGET_HALTED) {
+ LOG_WARNING("target %s is not halted", target->cmd_name);
+ return ERROR_TARGET_NOT_HALTED;
+ }
+
+ if (target->type->hit_watchpoint == NULL) {
+ /* For backward compatible, if hit_watchpoint is not implemented,
+ * return ERROR_FAIL such that gdb_server will not take the nonsense
+ * information. */
+ return ERROR_FAIL;
+ }
+
+ return target->type->hit_watchpoint(target, hit_watchpoint);
+}
int target_get_gdb_reg_list(struct target *target,
struct reg **reg_list[], int *reg_list_size,