This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH 3/4] Use std::vector for traceframe_info::memory
- From: Simon Marchi <simon dot marchi at ericsson dot com>
- To: <gdb-patches at sourceware dot org>
- Cc: Simon Marchi <simon dot marchi at polymtl dot ca>
- Date: Tue, 10 Oct 2017 14:03:12 -0400
- Subject: [PATCH 3/4] Use std::vector for traceframe_info::memory
- Authentication-results: sourceware.org; auth=none
- Authentication-results: spf=none (sender IP is ) smtp.mailfrom=simon dot marchi at ericsson dot com;
- References: <1507658593-28825-1-git-send-email-simon.marchi@ericsson.com>
- Spamdiagnosticmetadata: NSPM
- Spamdiagnosticoutput: 1:99
From: Simon Marchi <simon.marchi@polymtl.ca>
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) <memory>: Change type to
std::vector<mem_range>.
* 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/ctf.c | 8 ++++----
gdb/memrange.h | 6 ++++++
gdb/tracefile-tfile.c | 6 +-----
gdb/tracepoint.c | 22 ++++++----------------
gdb/tracepoint.h | 2 +-
5 files changed, 18 insertions(+), 26 deletions(-)
diff --git a/gdb/ctf.c b/gdb/ctf.c
index 183ee34..bef6f30 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 b181c98..029ec71 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 0075581..cc77b6c 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 f3f47c2..9f0d07b 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 <tvar> 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 625415c..872681d 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<mem_range> memory;
/* Collected trace state variables. */
std::vector<int> tvars;
--
2.7.4