From 4cdd21a8d3fd943d6993e9d053edf09583802744 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Sat, 14 Oct 2017 08:43:54 -0400 Subject: [PATCH] Use std::vector for traceframe_info::memory Straightforward change from a VEC to std::vector. This allows making the destruction of a traceframe_info trivial. I added a constructor with parameters to mem_range to be able to emplace_back directly with the values. It is necessary to leave a default constructor there because mem_range is still used in a VEC. gdb/ChangeLog: * memrange.h (struct mem_range): Add constructors. * tracepoint.h (struct traceframe_info) : Change type to std::vector. * tracepoint.c (free_traceframe_info): Don't manually free vector. (traceframe_info_start_memory): Adjust to vector change. (traceframe_available_memory): Likewise. * tracefile-tfile.c (build_traceframe_info): Likewise. * ctf.c (ctf_traceframe_info): Likewise. --- gdb/ChangeLog | 12 ++++++++++++ gdb/ctf.c | 8 ++++---- gdb/memrange.h | 6 ++++++ gdb/tracefile-tfile.c | 6 +----- gdb/tracepoint.c | 22 ++++++---------------- gdb/tracepoint.h | 2 +- 6 files changed, 30 insertions(+), 26 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 51f37c3681..a66c594211 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2017-10-14 Simon Marchi + + * memrange.h (struct mem_range): Add constructors. + * tracepoint.h (struct traceframe_info) : Change type to + std::vector. + * tracepoint.c (free_traceframe_info): Don't manually free + vector. + (traceframe_info_start_memory): Adjust to vector change. + (traceframe_available_memory): Likewise. + * tracefile-tfile.c (build_traceframe_info): Likewise. + * ctf.c (ctf_traceframe_info): Likewise. + 2017-10-14 Simon Marchi * tracepoint.h (struct traceframe_info) : Change type to diff --git a/gdb/ctf.c b/gdb/ctf.c index 183ee34f96..bef6f30a36 100644 --- a/gdb/ctf.c +++ b/gdb/ctf.c @@ -1663,14 +1663,14 @@ ctf_traceframe_info (struct target_ops *self) = bt_ctf_get_top_level_scope (event, BT_EVENT_FIELDS); const struct bt_definition *def; - struct mem_range *r; - r = VEC_safe_push (mem_range_s, info->memory, NULL); def = bt_ctf_get_field (event, scope, "address"); - r->start = bt_ctf_get_uint64 (def); + CORE_ADDR start = bt_ctf_get_uint64 (def); def = bt_ctf_get_field (event, scope, "length"); - r->length = (uint16_t) bt_ctf_get_uint64 (def); + int length = (uint16_t) bt_ctf_get_uint64 (def); + + info->memory.emplace_back (start, length); } else if (strcmp (name, "tsv") == 0) { diff --git a/gdb/memrange.h b/gdb/memrange.h index b181c98e78..029ec7104c 100644 --- a/gdb/memrange.h +++ b/gdb/memrange.h @@ -26,6 +26,12 @@ struct mem_range { + mem_range () = default; + + mem_range (CORE_ADDR start_, int length_) + : start (start_), length (length_) + {} + /* Lowest address in the range. */ CORE_ADDR start; diff --git a/gdb/tracefile-tfile.c b/gdb/tracefile-tfile.c index 007558167e..cc77b6c610 100644 --- a/gdb/tracefile-tfile.c +++ b/gdb/tracefile-tfile.c @@ -1050,7 +1050,6 @@ build_traceframe_info (char blocktype, void *data) { case 'M': { - struct mem_range *r; ULONGEST maddr; unsigned short mlen; @@ -1064,10 +1063,7 @@ build_traceframe_info (char blocktype, void *data) 2, gdbarch_byte_order (target_gdbarch ())); - r = VEC_safe_push (mem_range_s, info->memory, NULL); - - r->start = maddr; - r->length = mlen; + info->memory.emplace_back (maddr, mlen); break; } case 'V': diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index 2605c0ada9..a4a6584c3a 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -196,12 +196,7 @@ current_trace_status (void) static void free_traceframe_info (struct traceframe_info *info) { - if (info != NULL) - { - VEC_free (mem_range_s, info->memory); - - delete info; - } + delete info; } /* Free and clear the traceframe info cache of the current @@ -3999,7 +3994,6 @@ traceframe_info_start_memory (struct gdb_xml_parser *parser, void *user_data, VEC(gdb_xml_value_s) *attributes) { struct traceframe_info *info = (struct traceframe_info *) user_data; - struct mem_range *r = VEC_safe_push (mem_range_s, info->memory, NULL); ULONGEST *start_p, *length_p; start_p @@ -4007,8 +4001,7 @@ traceframe_info_start_memory (struct gdb_xml_parser *parser, length_p = (ULONGEST *) xml_find_attribute (attributes, "length")->value; - r->start = *start_p; - r->length = *length_p; + info->memory.emplace_back (*start_p, *length_p); } /* Handle the start of a element. */ @@ -4119,13 +4112,10 @@ traceframe_available_memory (VEC(mem_range_s) **result, if (info != NULL) { - struct mem_range *r; - int i; - *result = NULL; - for (i = 0; VEC_iterate (mem_range_s, info->memory, i, r); i++) - if (mem_ranges_overlap (r->start, r->length, memaddr, len)) + for (mem_range &r : info->memory) + if (mem_ranges_overlap (r.start, r.length, memaddr, len)) { ULONGEST lo1, hi1, lo2, hi2; struct mem_range *nr; @@ -4133,8 +4123,8 @@ traceframe_available_memory (VEC(mem_range_s) **result, lo1 = memaddr; hi1 = memaddr + len; - lo2 = r->start; - hi2 = r->start + r->length; + lo2 = r.start; + hi2 = r.start + r.length; nr = VEC_safe_push (mem_range_s, *result, NULL); diff --git a/gdb/tracepoint.h b/gdb/tracepoint.h index 625415c558..872681db9a 100644 --- a/gdb/tracepoint.h +++ b/gdb/tracepoint.h @@ -32,7 +32,7 @@ struct traceframe_info { /* Collected memory. */ - VEC(mem_range_s) *memory = NULL; + std::vector memory; /* Collected trace state variables. */ std::vector tvars; -- 2.34.1