From 6c8e944d79644e2ddf3e909971cb38774c517666 Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Wed, 27 Feb 2013 01:39:26 +0000 Subject: [PATCH] gdb/ 2013-02-27 Yao Qi Pedro Alves * tracepoint.c (tfile_trace_find): For tfind pc/tp/range/outside, look for the next trace frame instead of always starting from frame 0. --- gdb/ChangeLog | 7 ++++++ gdb/tracepoint.c | 61 ++++++++++++++++++++++++++++-------------------- 2 files changed, 43 insertions(+), 25 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d8389f2107..908af6b9e3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2013-02-27 Yao Qi + Pedro Alves + + * 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 * configure.tgt: Add support for moxie-*-rtems* target. diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index ca104aa7b2..9a80aa333a 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)