From 6fb16ce6eaba92b86a22eac58eb0eb61b3fd8804 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Fri, 2 Mar 2018 23:22:08 -0500 Subject: Make program_space::deleted_solibs a vector of std::string This allows removing a usage of free_char_ptr_vec. gdb/ChangeLog: * progspace.h (struct program_space) : Change type to std::vector. * progspace.c (clear_program_space_solib_cache): Adjust. * breakpoint.c (print_solib_event): Adjust. (check_status_catch_solib): Adjust. * solib.c (update_solib_list): Adjust. * ui-out.h (class ui_out) : New overload. * ui-out.c (ui_out::field_string): New overload. --- gdb/ChangeLog | 11 +++++++++++ gdb/breakpoint.c | 25 +++++++------------------ gdb/progspace.c | 3 +-- gdb/progspace.h | 2 +- gdb/solib.c | 3 +-- gdb/ui-out.c | 6 ++++++ gdb/ui-out.h | 1 + 7 files changed, 28 insertions(+), 23 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f6ab3bb..31c0d5c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,16 @@ 2018-03-02 Simon Marchi + * progspace.h (struct program_space) : Change + type to std::vector. + * progspace.c (clear_program_space_solib_cache): Adjust. + * breakpoint.c (print_solib_event): Adjust. + (check_status_catch_solib): Adjust. + * solib.c (update_solib_list): Adjust. + * ui-out.h (class ui_out) : New overload. + * ui-out.c (ui_out::field_string): New overload. + +2018-03-02 Simon Marchi + * progspace.h (struct program_space): Add constructor and destructor, initialize fields. (add_program_space): Remove. diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index c56084c..454fda7 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -4604,8 +4604,7 @@ print_bp_stop_message (bpstat bs) static void print_solib_event (int is_catchpoint) { - int any_deleted - = !VEC_empty (char_ptr, current_program_space->deleted_solibs); + bool any_deleted = !current_program_space->deleted_solibs.empty (); int any_added = !VEC_empty (so_list_ptr, current_program_space->added_solibs); @@ -4624,16 +4623,12 @@ print_solib_event (int is_catchpoint) if (any_deleted) { - char *name; - int ix; - current_uiout->text (_(" Inferior unloaded ")); ui_out_emit_list list_emitter (current_uiout, "removed"); - for (ix = 0; - VEC_iterate (char_ptr, current_program_space->deleted_solibs, - ix, name); - ++ix) + for (int ix = 0; ix < current_program_space->deleted_solibs.size (); ix++) { + const std::string &name = current_program_space->deleted_solibs[ix]; + if (ix > 0) current_uiout->text (" "); current_uiout->field_string ("library", name); @@ -8050,13 +8045,12 @@ check_status_catch_solib (struct bpstats *bs) { struct solib_catchpoint *self = (struct solib_catchpoint *) bs->breakpoint_at; - int ix; if (self->is_load) { struct so_list *iter; - for (ix = 0; + for (int ix = 0; VEC_iterate (so_list_ptr, current_program_space->added_solibs, ix, iter); ++ix) @@ -8068,15 +8062,10 @@ check_status_catch_solib (struct bpstats *bs) } else { - char *iter; - - for (ix = 0; - VEC_iterate (char_ptr, current_program_space->deleted_solibs, - ix, iter); - ++ix) + for (const std::string &iter : current_program_space->deleted_solibs) { if (!self->regex - || self->compiled->exec (iter, 0, NULL, 0) == 0) + || self->compiled->exec (iter.c_str (), 0, NULL, 0) == 0) return; } } diff --git a/gdb/progspace.c b/gdb/progspace.c index f6da7e7..e0bcc5a 100644 --- a/gdb/progspace.c +++ b/gdb/progspace.c @@ -401,8 +401,7 @@ clear_program_space_solib_cache (struct program_space *pspace) { VEC_free (so_list_ptr, pspace->added_solibs); - free_char_ptr_vec (pspace->deleted_solibs); - pspace->deleted_solibs = NULL; + pspace->deleted_solibs.clear (); } diff --git a/gdb/progspace.h b/gdb/progspace.h index c64209c..67c0a24 100644 --- a/gdb/progspace.h +++ b/gdb/progspace.h @@ -207,7 +207,7 @@ struct program_space /* When an solib is removed, its name is added to this vector. This is so we can properly report solib changes to the user. */ - VEC (char_ptr) *deleted_solibs = NULL; + std::vector deleted_solibs; /* Per pspace data-pointers required by other GDB modules. */ REGISTRY_FIELDS {}; diff --git a/gdb/solib.c b/gdb/solib.c index f3eea39..1c78845 100644 --- a/gdb/solib.c +++ b/gdb/solib.c @@ -828,8 +828,7 @@ update_solib_list (int from_tty) unloaded before we remove it from GDB's tables. */ observer_notify_solib_unloaded (gdb); - VEC_safe_push (char_ptr, current_program_space->deleted_solibs, - xstrdup (gdb->so_name)); + current_program_space->deleted_solibs.push_back (gdb->so_name); *gdb_link = gdb->next; diff --git a/gdb/ui-out.c b/gdb/ui-out.c index 8785bfb..0340a44 100644 --- a/gdb/ui-out.c +++ b/gdb/ui-out.c @@ -552,6 +552,12 @@ ui_out::field_string (const char *fldname, const char *string) do_field_string (fldno, width, align, fldname, string); } +void +ui_out::field_string (const char *fldname, const std::string &string) +{ + field_string (fldname, string.c_str ()); +} + /* VARARGS */ void ui_out::field_fmt (const char *fldname, const char *format, ...) diff --git a/gdb/ui-out.h b/gdb/ui-out.h index ce224ed..1708542 100644 --- a/gdb/ui-out.h +++ b/gdb/ui-out.h @@ -104,6 +104,7 @@ class ui_out void field_core_addr (const char *fldname, struct gdbarch *gdbarch, CORE_ADDR address); void field_string (const char *fldname, const char *string); + void field_string (const char *fldname, const std::string &string); void field_stream (const char *fldname, string_file &stream); void field_skip (const char *fldname); void field_fmt (const char *fldname, const char *format, ...) -- cgit v1.1