Patchwork [3/4] Use std::vector for traceframe_info::memory

login
register
mail settings
Submitter Simon Marchi
Date Oct. 10, 2017, 6:03 p.m.
Message ID <1507658593-28825-3-git-send-email-simon.marchi@ericsson.com>
Download mbox | patch
Permalink /patch/23430/
State New
Headers show

Comments

Simon Marchi - Oct. 10, 2017, 6:03 p.m.
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(-)

Patch

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;