diff options
author | Markus Metzger <markus.t.metzger@intel.com> | 2013-06-03 15:39:35 +0200 |
---|---|---|
committer | Markus Metzger <markus.t.metzger@intel.com> | 2014-01-16 13:11:42 +0100 |
commit | 969c39fbcd6a5675c1f4b97cd23d680e4b5b6487 (patch) | |
tree | 54d7a2c546ecf86fbe37536db86d0916734203d8 /gdb/remote.c | |
parent | 0b722aec57e2e54083c1d56657762945ad4604fc (diff) | |
download | gdb-969c39fbcd6a5675c1f4b97cd23d680e4b5b6487.zip gdb-969c39fbcd6a5675c1f4b97cd23d680e4b5b6487.tar.gz gdb-969c39fbcd6a5675c1f4b97cd23d680e4b5b6487.tar.bz2 |
btrace, gdbserver: read branch trace incrementally
Read branch trace data incrementally and extend the current trace rather than
discarding it and reading the entire trace buffer each time.
If the branch trace buffer overflowed, we can't extend the current trace so we
discard it and start anew by reading the entire branch trace buffer.
2014-01-16 Markus Metzger <markus.t.metzger@intel.com>
* common/linux-btrace.c (perf_event_read_bts, linux_read_btrace):
Support delta reads.
(linux_disable_btrace): Change return type.
* common/linux-btrace.h (linux_read_btrace): Change parameters
and return type to allow error reporting. Update users.
(linux_disable_btrace): Change return type. Update users.
* common/btrace-common.h (btrace_read_type) <BTRACE_READ_DELTA>:
New.
(btrace_error): New.
(btrace_block) <begin>: Comment on BEGIN == 0.
* btrace.c (btrace_compute_ftrace): Start from the end of
the current trace.
(btrace_stitch_trace, btrace_clear_history): New.
(btrace_fetch): Read delta trace, return if replaying.
(btrace_clear): Move clear history code to btrace_clear_history.
(parse_xml_btrace): Throw an error if parsing failed.
* target.h (struct target_ops) <to_read_btrace>: Change parameters
and return type to allow error reporting.
(target_read_btrace): Change parameters and return type to allow
error reporting.
* target.c (target_read_btrace): Update.
* remote.c (remote_read_btrace): Support delta reads. Pass
errors on.
* NEWS: Announce it.
gdbserver/
* target.h (target_ops) <read_btrace>: Change parameters and
return type to allow error reporting.
* server.c (handle_qxfer_btrace): Support delta reads. Pass
trace reading errors on.
* linux-low.c (linux_low_read_btrace): Pass trace reading
errors on.
(linux_low_disable_btrace): New.
Diffstat (limited to 'gdb/remote.c')
-rw-r--r-- | gdb/remote.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/gdb/remote.c b/gdb/remote.c index 10aab66..d40485a 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -11489,13 +11489,14 @@ remote_teardown_btrace (struct btrace_target_info *tinfo) /* Read the branch trace. */ -static VEC (btrace_block_s) * -remote_read_btrace (struct btrace_target_info *tinfo, +static enum btrace_error +remote_read_btrace (VEC (btrace_block_s) **btrace, + struct btrace_target_info *tinfo, enum btrace_read_type type) { struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace]; struct remote_state *rs = get_remote_state (); - VEC (btrace_block_s) *btrace = NULL; + struct cleanup *cleanup; const char *annex; char *xml; @@ -11514,6 +11515,9 @@ remote_read_btrace (struct btrace_target_info *tinfo, case BTRACE_READ_NEW: annex = "new"; break; + case BTRACE_READ_DELTA: + annex = "delta"; + break; default: internal_error (__FILE__, __LINE__, _("Bad branch tracing read type: %u."), @@ -11522,15 +11526,14 @@ remote_read_btrace (struct btrace_target_info *tinfo, xml = target_read_stralloc (¤t_target, TARGET_OBJECT_BTRACE, annex); - if (xml != NULL) - { - struct cleanup *cleanup = make_cleanup (xfree, xml); + if (xml == NULL) + return BTRACE_ERR_UNKNOWN; - btrace = parse_xml_btrace (xml); - do_cleanups (cleanup); - } + cleanup = make_cleanup (xfree, xml); + *btrace = parse_xml_btrace (xml); + do_cleanups (cleanup); - return btrace; + return BTRACE_ERR_NONE; } static int |