diff options
author | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-11-18 19:55:44 +0000 |
---|---|---|
committer | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-11-18 19:55:44 +0000 |
commit | d6fc1b397bca686d2ac92f4e8f470c98472a3c4d (patch) | |
tree | e33d40551dafefa685990eeef1fe8b10e6e55a4e /gdbstub.c | |
parent | 6b9175478e9ad8ef2a9569fd8e2a83440747aae5 (diff) |
gdbstub: Return appropriate watch message to gdb (Jan Kiszka)
Return the appropriate type prefix (r, a, none) when reporting
watchpoint hits to the gdb front-end.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5737 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'gdbstub.c')
-rw-r--r-- | gdbstub.c | 17 |
1 files changed, 15 insertions, 2 deletions
@@ -1493,6 +1493,7 @@ static void gdb_vm_stopped(void *opaque, int reason) { GDBState *s = opaque; char buf[256]; + const char *type; int ret; if (s->state == RS_SYSCALL) @@ -1503,8 +1504,20 @@ static void gdb_vm_stopped(void *opaque, int reason) if (reason == EXCP_DEBUG) { if (s->env->watchpoint_hit) { - snprintf(buf, sizeof(buf), "T%02xwatch:" TARGET_FMT_lx ";", - SIGTRAP, + switch (s->env->watchpoint[s->env->watchpoint_hit - 1].type & + (PAGE_READ | PAGE_WRITE)) { + case PAGE_READ: + type = "r"; + break; + case PAGE_READ | PAGE_WRITE: + type = "a"; + break; + default: + type = ""; + break; + } + snprintf(buf, sizeof(buf), "T%02x%swatch:" TARGET_FMT_lx ";", + SIGTRAP, type, s->env->watchpoint[s->env->watchpoint_hit - 1].vaddr); put_packet(s, buf); s->env->watchpoint_hit = 0; |