diff options
Diffstat (limited to 'gdb/gdbserver/server.c')
-rw-r--r-- | gdb/gdbserver/server.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index 9ae28f8..28ea048 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -1348,7 +1348,7 @@ handle_qxfer_btrace (const char *annex, { static struct buffer cache; struct thread_info *thread; - int type; + int type, result; if (the_target->read_btrace == NULL || writebuf != NULL) return -2; @@ -1380,6 +1380,8 @@ handle_qxfer_btrace (const char *annex, type = BTRACE_READ_ALL; else if (strcmp (annex, "new") == 0) type = BTRACE_READ_NEW; + else if (strcmp (annex, "delta") == 0) + type = BTRACE_READ_DELTA; else { strcpy (own_buf, "E.Bad annex."); @@ -1390,7 +1392,12 @@ handle_qxfer_btrace (const char *annex, { buffer_free (&cache); - target_read_btrace (thread->btrace, &cache, type); + result = target_read_btrace (thread->btrace, &cache, type); + if (result != 0) + { + memcpy (own_buf, cache.buffer, cache.used_size); + return -3; + } } else if (offset > cache.used_size) { |