diff options
author | Yao Qi <yao@codesourcery.com> | 2013-02-27 01:39:26 +0000 |
---|---|---|
committer | Yao Qi <yao@codesourcery.com> | 2013-02-27 01:39:26 +0000 |
commit | 6c8e944d79644e2ddf3e909971cb38774c517666 (patch) | |
tree | 94420d9190e16d80b78ff126efb0c884cc99d12d | |
parent | 32cc08a209444a258680bb46c2fe06f375be16b1 (diff) | |
download | gdb-6c8e944d79644e2ddf3e909971cb38774c517666.zip gdb-6c8e944d79644e2ddf3e909971cb38774c517666.tar.gz gdb-6c8e944d79644e2ddf3e909971cb38774c517666.tar.bz2 |
gdb/
2013-02-27 Yao Qi <yao@codesourcery.com>
Pedro Alves <palves@redhat.com>
* tracepoint.c (tfile_trace_find): For tfind
pc/tp/range/outside, look for the next trace frame instead of
always starting from frame 0.
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/tracepoint.c | 61 |
2 files changed, 43 insertions, 25 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d8389f2..908af6b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2013-02-27 Yao Qi <yao@codesourcery.com> + Pedro Alves <palves@redhat.com> + + * tracepoint.c (tfile_trace_find): For tfind + pc/tp/range/outside, look for the next trace frame instead of + always starting from frame 0. + 2013-02-26 Anthony Green <green@moxielogic.com> * configure.tgt: Add support for moxie-*-rtems* target. diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index ca104aa..9a80aa3 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -4316,35 +4316,46 @@ tfile_trace_find (enum trace_find_type type, int num, ((gdb_byte *) &data_size, 4, gdbarch_byte_order (target_gdbarch ())); offset += 4; - switch (type) + + if (type == tfind_number) { - case tfind_number: + /* Looking for a specific trace frame. */ if (tfnum == num) found = 1; - break; - case tfind_pc: - tfaddr = tfile_get_traceframe_address (tframe_offset); - if (tfaddr == addr1) - found = 1; - break; - case tfind_tp: - tp = get_tracepoint (num); - if (tp && tpnum == tp->number_on_target) - found = 1; - break; - case tfind_range: - tfaddr = tfile_get_traceframe_address (tframe_offset); - if (addr1 <= tfaddr && tfaddr <= addr2) - found = 1; - break; - case tfind_outside: - tfaddr = tfile_get_traceframe_address (tframe_offset); - if (!(addr1 <= tfaddr && tfaddr <= addr2)) - found = 1; - break; - default: - internal_error (__FILE__, __LINE__, _("unknown tfind type")); } + else + { + /* Start from the _next_ trace frame. */ + if (tfnum > traceframe_number) + { + switch (type) + { + case tfind_pc: + tfaddr = tfile_get_traceframe_address (tframe_offset); + if (tfaddr == addr1) + found = 1; + break; + case tfind_tp: + tp = get_tracepoint (num); + if (tp && tpnum == tp->number_on_target) + found = 1; + break; + case tfind_range: + tfaddr = tfile_get_traceframe_address (tframe_offset); + if (addr1 <= tfaddr && tfaddr <= addr2) + found = 1; + break; + case tfind_outside: + tfaddr = tfile_get_traceframe_address (tframe_offset); + if (!(addr1 <= tfaddr && tfaddr <= addr2)) + found = 1; + break; + default: + internal_error (__FILE__, __LINE__, _("unknown tfind type")); + } + } + } + if (found) { if (tpp) |