This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Remove a VEC from remote.c


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=eefce37f62d87a65f63e12e421a3f727b2685e9d

commit eefce37f62d87a65f63e12e421a3f727b2685e9d
Author: Tom Tromey <tom@tromey.com>
Date:   Mon Jul 23 19:47:39 2018 -0600

    Remove a VEC from remote.c
    
    This removes the VEC from remote_g_packet_data, replacing it with a
    std::vector.  This is a bit odd in that this object is never
    destroyed, and is obstack-allocated.  I believe a gdbarch is never
    destroyed, so this seemed ok.
    
    Tested by the buildbot.
    
    gdb/ChangeLog
    2018-11-09  Tom Tromey  <tom@tromey.com>
    
    	* remote.c (remote_g_packet_guess_s): Remove typedef and DEF_VEC.
    	(struct remote_g_packet_data): Derive from allocate_on_obstack.
    	<guesses>: Now a std::vector.
    	(remote_g_packet_data_init, register_remote_g_packet_guess):
    	Update.
    	(remote_read_description_p): Update.  Return bool.
    	(remote_target::read_description): Update.
    	(struct remote_g_packet_guess): Add constructor.

Diff:
---
 gdb/ChangeLog | 11 +++++++++++
 gdb/remote.c  | 51 +++++++++++++++++++++------------------------------
 2 files changed, 32 insertions(+), 30 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 2284038..b8ca2ff 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,16 @@
 2018-11-09  Tom Tromey  <tom@tromey.com>
 
+	* remote.c (remote_g_packet_guess_s): Remove typedef and DEF_VEC.
+	(struct remote_g_packet_data): Derive from allocate_on_obstack.
+	<guesses>: Now a std::vector.
+	(remote_g_packet_data_init, register_remote_g_packet_guess):
+	Update.
+	(remote_read_description_p): Update.  Return bool.
+	(remote_target::read_description): Update.
+	(struct remote_g_packet_guess): Add constructor.
+
+2018-11-09  Tom Tromey  <tom@tromey.com>
+
 	* common/scoped_fd.h (class scoped_fd): Add move constructor and
 	move assignment operator.
 	* psymtab.c (psymtab_to_fullname): Update.
diff --git a/gdb/remote.c b/gdb/remote.c
index c53553a..6004509 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -1030,7 +1030,7 @@ static ptid_t read_ptid (const char *buf, const char **obuf);
 
 static void remote_async_inferior_event_handler (gdb_client_data);
 
-static int remote_read_description_p (struct target_ops *target);
+static bool remote_read_description_p (struct target_ops *target);
 
 static void remote_console_output (char *msg);
 
@@ -11617,15 +11617,19 @@ remote_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr)
 
 struct remote_g_packet_guess
 {
+  remote_g_packet_guess (int bytes_, const struct target_desc *tdesc_)
+    : bytes (bytes_),
+      tdesc (tdesc_)
+  {
+  }
+
   int bytes;
   const struct target_desc *tdesc;
 };
-typedef struct remote_g_packet_guess remote_g_packet_guess_s;
-DEF_VEC_O(remote_g_packet_guess_s);
 
-struct remote_g_packet_data
+struct remote_g_packet_data : public allocate_on_obstack
 {
-  VEC(remote_g_packet_guess_s) *guesses;
+  std::vector<remote_g_packet_guess> guesses;
 };
 
 static struct gdbarch_data *remote_g_packet_data_handle;
@@ -11633,7 +11637,7 @@ static struct gdbarch_data *remote_g_packet_data_handle;
 static void *
 remote_g_packet_data_init (struct obstack *obstack)
 {
-  return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
+  return new (obstack) remote_g_packet_data;
 }
 
 void
@@ -11643,38 +11647,29 @@ register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
   struct remote_g_packet_data *data
     = ((struct remote_g_packet_data *)
        gdbarch_data (gdbarch, remote_g_packet_data_handle));
-  struct remote_g_packet_guess new_guess, *guess;
-  int ix;
 
   gdb_assert (tdesc != NULL);
 
-  for (ix = 0;
-       VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
-       ix++)
-    if (guess->bytes == bytes)
+  for (const remote_g_packet_guess &guess : data->guesses)
+    if (guess.bytes == bytes)
       internal_error (__FILE__, __LINE__,
 		      _("Duplicate g packet description added for size %d"),
 		      bytes);
 
-  new_guess.bytes = bytes;
-  new_guess.tdesc = tdesc;
-  VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
+  data->guesses.emplace_back (bytes, tdesc);
 }
 
-/* Return 1 if remote_read_description would do anything on this target
-   and architecture, 0 otherwise.  */
+/* Return true if remote_read_description would do anything on this target
+   and architecture, false otherwise.  */
 
-static int
+static bool
 remote_read_description_p (struct target_ops *target)
 {
   struct remote_g_packet_data *data
     = ((struct remote_g_packet_data *)
        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
 
-  if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
-    return 1;
-
-  return 0;
+  return !data->guesses.empty ();
 }
 
 const struct target_desc *
@@ -11689,17 +11684,13 @@ remote_target::read_description ()
   if (!target_has_execution || inferior_ptid == null_ptid)
     return beneath ()->read_description ();
 
-  if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
+  if (!data->guesses.empty ())
     {
-      struct remote_g_packet_guess *guess;
-      int ix;
       int bytes = send_g_packet ();
 
-      for (ix = 0;
-	   VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
-	   ix++)
-	if (guess->bytes == bytes)
-	  return guess->tdesc;
+      for (const remote_g_packet_guess &guess : data->guesses)
+	if (guess.bytes == bytes)
+	  return guess.tdesc;
 
       /* We discard the g packet.  A minor optimization would be to
 	 hold on to it, and fill the register cache once we have selected


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]