From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19871 invoked by alias); 6 Dec 2011 15:57:41 -0000 Received: (qmail 19860 invoked by uid 22791); 6 Dec 2011 15:57:40 -0000 X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from mail-bw0-f41.google.com (HELO mail-bw0-f41.google.com) (209.85.214.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 06 Dec 2011 15:57:26 +0000 Received: by bkbzt12 with SMTP id zt12so6523767bkb.0 for ; Tue, 06 Dec 2011 07:57:25 -0800 (PST) Received: by 10.180.95.170 with SMTP id dl10mr18417532wib.31.1323187045369; Tue, 06 Dec 2011 07:57:25 -0800 (PST) MIME-Version: 1.0 Received: by 10.223.64.73 with HTTP; Tue, 6 Dec 2011 07:56:43 -0800 (PST) From: Hui Zhu Date: Tue, 06 Dec 2011 15:57:00 -0000 Message-ID: Subject: [PATCH] Fix tracepoint tstart again get gdb_assert To: gdb-patches ml Content-Type: text/plain; charset=ISO-8859-1 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-12/txt/msg00178.txt.bz2 Hi, I use a gdb tstart again in a section an got: (gdb) tstart (gdb) tstop (gdb) tstart ../../src/gdb/tracepoint.c:1770: internal-error: start_tracing: Assertion `!loc->inserted' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) The reason is: start_tracing: for (loc = b->loc; loc; loc = loc->next) { /* Since tracepoint locations are never duplicated, `inserted' flag should be zero. */ gdb_assert (!loc->inserted); target_download_tracepoint (loc); loc->inserted = 1; } But in stop_tracing and trace_status_command don't have code to set inserted back to 0. So I make a patch for it. Thanks, Hui 2011-12-06 Hui Zhu * tracepoint.c (stop_tracing): Set loc->inserted if need. (trace_status_command): Ditto. --- tracepoint.c | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) --- a/tracepoint.c +++ b/tracepoint.c @@ -1847,6 +1847,9 @@ void stop_tracing (char *note) { int ret; + VEC(breakpoint_p) *tp_vec = NULL; + int ix; + struct breakpoint *b; target_trace_stop (); @@ -1859,6 +1862,22 @@ stop_tracing (char *note) /* Should change in response to reply? */ current_trace_status ()->running = 0; + + tp_vec = all_tracepoints (); + for (ix = 0; VEC_iterate (breakpoint_p, tp_vec, ix, b); ix++) + { + struct tracepoint *t = (struct tracepoint *) b; + struct bp_location *loc; + + if ((b->type == bp_fast_tracepoint + ? !may_insert_fast_tracepoints + : !may_insert_tracepoints)) + continue; + + for (loc = b->loc; loc; loc = loc->next) + loc->inserted = 0; + } + VEC_free (breakpoint_p, tp_vec); } /* tstatus command */ @@ -1868,7 +1887,7 @@ trace_status_command (char *args, int fr struct trace_status *ts = current_trace_status (); int status, ix; VEC(breakpoint_p) *tp_vec = NULL; - struct breakpoint *t; + struct breakpoint *b; status = target_get_trace_status (ts); @@ -2013,8 +2032,24 @@ trace_status_command (char *args, int fr /* Now report any per-tracepoint status available. */ tp_vec = all_tracepoints (); - for (ix = 0; VEC_iterate (breakpoint_p, tp_vec, ix, t); ix++) - target_get_tracepoint_status (t, NULL); + for (ix = 0; VEC_iterate (breakpoint_p, tp_vec, ix, b); ix++) + { + struct tracepoint *t = (struct tracepoint *) b; + struct bp_location *loc; + + target_get_tracepoint_status (b, NULL); + + if (!ts->running) + { + if ((b->type == bp_fast_tracepoint + ? !may_insert_fast_tracepoints + : !may_insert_tracepoints)) + continue; + + for (loc = b->loc; loc; loc = loc->next) + loc->inserted = 0; + } + } VEC_free (breakpoint_p, tp_vec); }