From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 81237 invoked by alias); 5 Jun 2018 19:23:23 -0000 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 Received: (qmail 80780 invoked by uid 89); 5 Jun 2018 19:23:22 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.1 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=registering, tracepointc, tracepoint.c, Pending X-HELO: gateway22.websitewelcome.com Received: from gateway22.websitewelcome.com (HELO gateway22.websitewelcome.com) (192.185.46.233) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 05 Jun 2018 19:23:20 +0000 Received: from cm16.websitewelcome.com (cm16.websitewelcome.com [100.42.49.19]) by gateway22.websitewelcome.com (Postfix) with ESMTP id 1E7A9B1A6 for ; Tue, 5 Jun 2018 14:23:19 -0500 (CDT) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id QHY7f203NaSeyQHY7flhF2; Tue, 05 Jun 2018 14:23:19 -0500 X-Authority-Reason: nr=8 Received: from 75-166-37-59.hlrn.qwest.net ([75.166.37.59]:38512 helo=bapiya.Home) by box5379.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.91) (envelope-from ) id 1fQHY6-0003Ng-Np; Tue, 05 Jun 2018 14:23:18 -0500 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [RFA] Remove VEC from breakpoint Date: Tue, 05 Jun 2018 19:23:00 -0000 Message-Id: <20180605192316.5423-1-tom@tromey.com> X-BWhitelist: no X-Source-L: No X-Exim-ID: 1fQHY6-0003Ng-Np X-Source-Sender: 75-166-37-59.hlrn.qwest.net (bapiya.Home) [75.166.37.59]:38512 X-Source-Auth: tom+tromey.com X-Email-Count: 2 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-SW-Source: 2018-06/txt/msg00112.txt.bz2 This removes a use of VEC from breakpoint.h, also removing the now-unnecessary breakpoint_p typedef. This patch fixes a latent memory leak in find_matching_tracepoint_location, which neglected to free the vector returned by all_tracepoints. Tested by the buildbot. gdb/ChangeLog 2018-06-05 Tom Tromey * tracepoint.c (process_tracepoint_on_disconnect, start_tracing) (stop_tracing, tstatus_command) (find_matching_tracepoint_location, merge_uploaded_tracepoints) (print_one_static_tracepoint_marker): Update. * breakpoint.c (static_tracepoints_here, all_tracepoints): Return std::vector. * breakpoint.h (breakpoint_p): Remove typedef. Don't declare VEC. (all_tracepoints, static_tracepoints_here): Return std::vector. --- gdb/ChangeLog | 12 +++++++++ gdb/breakpoint.c | 12 ++++----- gdb/breakpoint.h | 13 +++------ gdb/tracepoint.c | 81 +++++++++++++++----------------------------------------- 4 files changed, 44 insertions(+), 74 deletions(-) diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 00c538e989e..64925ff719a 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -1145,11 +1145,11 @@ validate_commands_for_breakpoint (struct breakpoint *b, /* Return a vector of all the static tracepoints set at ADDR. The caller is responsible for releasing the vector. */ -VEC(breakpoint_p) * +std::vector static_tracepoints_here (CORE_ADDR addr) { struct breakpoint *b; - VEC(breakpoint_p) *found = 0; + std::vector found; struct bp_location *loc; ALL_BREAKPOINTS (b) @@ -1157,7 +1157,7 @@ static_tracepoints_here (CORE_ADDR addr) { for (loc = b->loc; loc; loc = loc->next) if (loc->address == addr) - VEC_safe_push(breakpoint_p, found, b); + found.push_back (b); } return found; @@ -15164,15 +15164,15 @@ save_tracepoints_command (const char *args, int from_tty) /* Create a vector of all tracepoints. */ -VEC(breakpoint_p) * +std::vector all_tracepoints (void) { - VEC(breakpoint_p) *tp_vec = 0; + std::vector tp_vec; struct breakpoint *tp; ALL_TRACEPOINTS (tp) { - VEC_safe_push (breakpoint_p, tp_vec, tp); + tp_vec.push_back (tp); } return tp_vec; diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h index 4223158fbc0..74db377a090 100644 --- a/gdb/breakpoint.h +++ b/gdb/breakpoint.h @@ -903,8 +903,6 @@ struct tracepoint : public breakpoint int static_trace_marker_id_idx; }; -typedef struct breakpoint *breakpoint_p; -DEF_VEC_P(breakpoint_p); /* The following stuff is an abstract data type "bpstat" ("breakpoint status"). This provides the ability to determine whether we have @@ -1625,16 +1623,13 @@ extern struct tracepoint * get_tracepoint_by_number (const char **arg, number_or_range_parser *parser); -/* Return a vector of all tracepoints currently defined. The vector - is newly allocated; the caller should free when done with it. */ -extern VEC(breakpoint_p) *all_tracepoints (void); +/* Return a vector of all tracepoints currently defined. */ +extern std::vector all_tracepoints (void); extern int is_tracepoint (const struct breakpoint *b); -/* Return a vector of all static tracepoints defined at ADDR. The - vector is newly allocated; the caller should free when done with - it. */ -extern VEC(breakpoint_p) *static_tracepoints_here (CORE_ADDR addr); +/* Return a vector of all static tracepoints defined at ADDR. */ +extern std::vector static_tracepoints_here (CORE_ADDR addr); /* Create an instance of this to start registering breakpoint numbers for a later "commands" command. */ diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index d99d663895f..63c25499554 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -1495,15 +1495,11 @@ collection_list::add_aexpr (agent_expr_up aexpr) static void process_tracepoint_on_disconnect (void) { - VEC(breakpoint_p) *tp_vec = NULL; - int ix; - struct breakpoint *b; int has_pending_p = 0; /* Check whether we still have pending tracepoint. If we have, warn the user that pending tracepoint will no longer work. */ - tp_vec = all_tracepoints (); - for (ix = 0; VEC_iterate (breakpoint_p, tp_vec, ix, b); ix++) + for (breakpoint *b : all_tracepoints ()) { if (b->loc == NULL) { @@ -1527,7 +1523,6 @@ process_tracepoint_on_disconnect (void) break; } } - VEC_free (breakpoint_p, tp_vec); if (has_pending_p) warning (_("Pending tracepoints will not be resolved while" @@ -1548,23 +1543,17 @@ trace_reset_local_state (void) void start_tracing (const char *notes) { - VEC(breakpoint_p) *tp_vec = NULL; - int ix; - struct breakpoint *b; struct trace_state_variable *tsv; int any_enabled = 0, num_to_download = 0; int ret; - tp_vec = all_tracepoints (); + std::vector tp_vec = all_tracepoints (); /* No point in tracing without any tracepoints... */ - if (VEC_length (breakpoint_p, tp_vec) == 0) - { - VEC_free (breakpoint_p, tp_vec); - error (_("No tracepoints defined, not starting trace")); - } + if (tp_vec.empty ()) + error (_("No tracepoints defined, not starting trace")); - for (ix = 0; VEC_iterate (breakpoint_p, tp_vec, ix, b); ix++) + for (breakpoint *b : tp_vec) { if (b->enable_state == bp_enabled) any_enabled = 1; @@ -1586,20 +1575,16 @@ start_tracing (const char *notes) { /* No point in tracing with only disabled tracepoints that cannot be re-enabled. */ - VEC_free (breakpoint_p, tp_vec); error (_("No tracepoints enabled, not starting trace")); } } if (num_to_download <= 0) - { - VEC_free (breakpoint_p, tp_vec); - error (_("No tracepoints that may be downloaded, not starting trace")); - } + error (_("No tracepoints that may be downloaded, not starting trace")); target_trace_init (); - for (ix = 0; VEC_iterate (breakpoint_p, tp_vec, ix, b); ix++) + for (breakpoint *b : tp_vec) { struct tracepoint *t = (struct tracepoint *) b; struct bp_location *loc; @@ -1638,7 +1623,6 @@ start_tracing (const char *notes) if (bp_location_downloaded) gdb::observers::breakpoint_modified.notify (b); } - VEC_free (breakpoint_p, tp_vec); /* Send down all the trace state variables too. */ for (const trace_state_variable &tsv : tvariables) @@ -1705,14 +1689,10 @@ void stop_tracing (const char *note) { int ret; - VEC(breakpoint_p) *tp_vec = NULL; - int ix; - struct breakpoint *t; target_trace_stop (); - tp_vec = all_tracepoints (); - for (ix = 0; VEC_iterate (breakpoint_p, tp_vec, ix, t); ix++) + for (breakpoint *t : all_tracepoints ()) { struct bp_location *loc; @@ -1733,8 +1713,6 @@ stop_tracing (const char *note) } } - VEC_free (breakpoint_p, tp_vec); - if (!note) note = trace_stop_notes; ret = target_set_trace_notes (NULL, NULL, note); @@ -1751,9 +1729,7 @@ static void tstatus_command (const char *args, int from_tty) { struct trace_status *ts = current_trace_status (); - int status, ix; - VEC(breakpoint_p) *tp_vec = NULL; - struct breakpoint *t; + int status; status = target_get_trace_status (ts); @@ -1896,12 +1872,8 @@ tstatus_command (const char *args, int from_tty) (long int) (ts->stop_time % 1000000)); /* Now report any per-tracepoint status available. */ - tp_vec = all_tracepoints (); - - for (ix = 0; VEC_iterate (breakpoint_p, tp_vec, ix, t); ix++) + for (breakpoint *t : all_tracepoints ()) target_get_tracepoint_status (t, NULL); - - VEC_free (breakpoint_p, tp_vec); } /* Report the trace status to uiout, in a way suitable for MI, and not @@ -3058,12 +3030,9 @@ cond_string_is_same (char *str1, char *str2) static struct bp_location * find_matching_tracepoint_location (struct uploaded_tp *utp) { - VEC(breakpoint_p) *tp_vec = all_tracepoints (); - int ix; - struct breakpoint *b; struct bp_location *loc; - for (ix = 0; VEC_iterate (breakpoint_p, tp_vec, ix, b); ix++) + for (breakpoint *b : all_tracepoints ()) { struct tracepoint *t = (struct tracepoint *) b; @@ -3094,9 +3063,8 @@ merge_uploaded_tracepoints (struct uploaded_tp **uploaded_tps) { struct uploaded_tp *utp; /* A set of tracepoints which are modified. */ - VEC(breakpoint_p) *modified_tp = NULL; + std::vector modified_tp; int ix; - struct breakpoint *b; /* Look for GDB tracepoints that match up with our uploaded versions. */ for (utp = *uploaded_tps; utp; utp = utp->next) @@ -3122,16 +3090,14 @@ merge_uploaded_tracepoints (struct uploaded_tp **uploaded_tps) MODIFIED_TP if not there yet. The 'breakpoint-modified' observers will be notified later once for each tracepoint saved in MODIFIED_TP. */ - for (ix = 0; - VEC_iterate (breakpoint_p, modified_tp, ix, b); - ix++) + for (breakpoint *b : modified_tp) if (b == loc->owner) { found = 1; break; } if (!found) - VEC_safe_push (breakpoint_p, modified_tp, loc->owner); + modified_tp.push_back (loc->owner); } else { @@ -3156,10 +3122,9 @@ merge_uploaded_tracepoints (struct uploaded_tp **uploaded_tps) /* Notify 'breakpoint-modified' observer that at least one of B's locations was changed. */ - for (ix = 0; VEC_iterate (breakpoint_p, modified_tp, ix, b); ix++) + for (breakpoint *b : modified_tp) gdb::observers::breakpoint_modified.notify (b); - VEC_free (breakpoint_p, modified_tp); free_uploaded_tps (uploaded_tps); } @@ -3643,12 +3608,12 @@ print_one_static_tracepoint_marker (int count, char wrap_indent[80]; char extra_field_indent[80]; struct ui_out *uiout = current_uiout; - VEC(breakpoint_p) *tracepoints; symtab_and_line sal; sal.pc = marker.address; - tracepoints = static_tracepoints_here (marker.address); + std::vector tracepoints + = static_tracepoints_here (marker.address); ui_out_emit_tuple tuple_emitter (uiout, "marker"); @@ -3659,7 +3624,7 @@ print_one_static_tracepoint_marker (int count, uiout->field_string ("marker-id", marker.str_id.c_str ()); uiout->field_fmt ("enabled", "%c", - !VEC_empty (breakpoint_p, tracepoints) ? 'y' : 'n'); + !tracepoints.empty () ? 'y' : 'n'); uiout->spaces (2); strcpy (wrap_indent, " "); @@ -3715,7 +3680,7 @@ print_one_static_tracepoint_marker (int count, uiout->field_string ("extra-data", marker.extra.c_str ()); uiout->text ("\"\n"); - if (!VEC_empty (breakpoint_p, tracepoints)) + if (!tracepoints.empty ()) { int ix; struct breakpoint *b; @@ -3725,22 +3690,20 @@ print_one_static_tracepoint_marker (int count, uiout->text (extra_field_indent); uiout->text (_("Probed by static tracepoints: ")); - for (ix = 0; VEC_iterate(breakpoint_p, tracepoints, ix, b); ix++) + for (ix = 0; ix < tracepoints.size (); ix++) { if (ix > 0) uiout->text (", "); uiout->text ("#"); - uiout->field_int ("tracepoint-id", b->number); + uiout->field_int ("tracepoint-id", tracepoints[ix]->number); } } if (uiout->is_mi_like_p ()) - uiout->field_int ("number-of-tracepoints", - VEC_length(breakpoint_p, tracepoints)); + uiout->field_int ("number-of-tracepoints", tracepoints.size ()); else uiout->text ("\n"); } - VEC_free (breakpoint_p, tracepoints); } static void -- 2.13.6