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] Eliminate agent_expr_p; VEC -> std::vector in struct bp_target_info


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

commit 3cde5c42d1c1ddcf8bbde5c47233c644370c959c
Author: Pedro Alves <palves@redhat.com>
Date:   Tue Nov 8 15:26:47 2016 +0000

    Eliminate agent_expr_p; VEC -> std::vector in struct bp_target_info
    
    After the previous patch, we end up with these two types with quite
    similar, and potentially confusing names:
    
      typedef gdb::unique_ptr<agent_expr> agent_expr_up;
    
      /* Pointer to an agent_expr structure.  */
      typedef struct agent_expr *agent_expr_p;
    
    The latter is only necessary to put agent_expr pointers in VECs.  So
    just eliminate it and use std::vector instead.
    
    gdb/ChangeLog:
    2016-11-08  Pedro Alves  <palves@redhat.com>
    
    	* ax.h (agent_expr_p): Delete.
    	(DEF_VEC_P (agent_expr_p)): Delete.
    	* breakpoint.c (build_target_condition_list)
    	(build_target_command_list): Adjust to use of std::vector.
    	(bp_location_dtor): Remove now unnecessary VEC_free calls.
    	* breakpoint.h: Include <vector>.
    	(struct bp_target_info) <conditions, tcommands>: Now
    	std::vector's.
    	* remote.c (remote_add_target_side_condition): bp_tgt->conditions
    	is now a std::vector; adjust.
    	(remote_add_target_side_commands, remote_insert_breakpoint):
    	bp_tgt->tcommands is now a std::vector; adjust.

Diff:
---
 gdb/ChangeLog    | 15 +++++++++++++++
 gdb/ax.h         |  6 ------
 gdb/breakpoint.c | 27 +++++++++++++--------------
 gdb/breakpoint.h | 13 +++++++------
 gdb/remote.c     | 28 +++++++++++-----------------
 5 files changed, 46 insertions(+), 43 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 8c7d06f..9036413 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,20 @@
 2016-11-08  Pedro Alves  <palves@redhat.com>
 
+	* ax.h (agent_expr_p): Delete.
+	(DEF_VEC_P (agent_expr_p)): Delete.
+	* breakpoint.c (build_target_condition_list)
+	(build_target_command_list): Adjust to use of std::vector.
+	(bp_location_dtor): Remove now unnecessary VEC_free calls.
+	* breakpoint.h: Include <vector>.
+	(struct bp_target_info) <conditions, tcommands>: Now
+	std::vector's.
+	* remote.c (remote_add_target_side_condition): bp_tgt->conditions
+	is now a std::vector; adjust.
+	(remote_add_target_side_commands, remote_insert_breakpoint):
+	bp_tgt->tcommands is now a std::vector; adjust.
+
+2016-11-08  Pedro Alves  <palves@redhat.com>
+
 	* ax-gdb.c (is_nontrivial_conversion): Use agent_expr_up.
 	(gen_trace_for_var, gen_trace_for_expr, gen_eval_for_expr)
 	(gen_trace_for_return_address, gen_printf): Use and return an
diff --git a/gdb/ax.h b/gdb/ax.h
index 4b90229..85d2943 100644
--- a/gdb/ax.h
+++ b/gdb/ax.h
@@ -170,12 +170,6 @@ struct agent_expr
 /* An agent_expr owning pointer.  */
 typedef gdb::unique_ptr<agent_expr> agent_expr_up;
 
-/* Pointer to an agent_expr structure.  */
-typedef struct agent_expr *agent_expr_p;
-
-/* Vector of pointers to agent expressions.  */
-DEF_VEC_P (agent_expr_p);
-
 /* The actual values of the various bytecode operations.  */
 
 enum agent_op
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index c883145..a3a81f7 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -2298,7 +2298,7 @@ build_target_condition_list (struct bp_location *bl)
   struct bp_location *loc;
 
   /* Release conditions left over from a previous insert.  */
-  VEC_free (agent_expr_p, bl->target_info.conditions);
+  bl->target_info.conditions.clear ();
 
   /* This is only meaningful if the target is
      evaluating conditions and if the user has
@@ -2371,10 +2371,11 @@ build_target_condition_list (struct bp_location *bl)
 	  && loc->pspace->num == bl->pspace->num
 	  && loc->owner->enable_state == bp_enabled
 	  && loc->enabled)
-	/* Add the condition to the vector.  This will be used later to send the
-	   conditions to the target.  */
-	VEC_safe_push (agent_expr_p, bl->target_info.conditions,
-		       loc->cond_bytecode.get ());
+	{
+	  /* Add the condition to the vector.  This will be used later
+	     to send the conditions to the target.  */
+	  bl->target_info.conditions.push_back (loc->cond_bytecode.get ());
+	}
     }
 
   return;
@@ -2481,8 +2482,8 @@ build_target_command_list (struct bp_location *bl)
   int modified = bl->needs_update;
   struct bp_location *loc;
 
-  /* Release commands left over from a previous insert.  */
-  VEC_free (agent_expr_p, bl->target_info.tcommands);
+  /* Clear commands left over from a previous insert.  */
+  bl->target_info.tcommands.clear ();
 
   if (!target_can_run_breakpoint_commands ())
     return;
@@ -2565,10 +2566,11 @@ build_target_command_list (struct bp_location *bl)
 	  && loc->pspace->num == bl->pspace->num
 	  && loc->owner->enable_state == bp_enabled
 	  && loc->enabled)
-	/* Add the command to the vector.  This will be used later
-	   to send the commands to the target.  */
-	VEC_safe_push (agent_expr_p, bl->target_info.tcommands,
-		       loc->cmd_bytecode.get ());
+	{
+	  /* Add the command to the vector.  This will be used later
+	     to send the commands to the target.  */
+	  bl->target_info.tcommands.push_back (loc->cmd_bytecode.get ());
+	}
     }
 
   bl->target_info.persist = 0;
@@ -12888,9 +12890,6 @@ static void
 bp_location_dtor (struct bp_location *self)
 {
   xfree (self->function_name);
-
-  VEC_free (agent_expr_p, self->target_info.conditions);
-  VEC_free (agent_expr_p, self->target_info.tcommands);
 }
 
 static const struct bp_location_ops bp_location_ops =
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
index 8c2dfaf..99133a2 100644
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -26,6 +26,7 @@
 #include "command.h"
 #include "break-common.h"
 #include "probe.h"
+#include <vector>
 
 struct value;
 struct block;
@@ -264,13 +265,13 @@ struct bp_target_info
      packets.  */
   int kind;
 
-  /* Vector of conditions the target should evaluate if it supports target-side
-     breakpoint conditions.  */
-  VEC(agent_expr_p) *conditions;
+  /* Conditions the target should evaluate if it supports target-side
+     breakpoint conditions.  These are non-owning pointers.  */
+  std::vector<agent_expr *> conditions;
 
-  /* Vector of commands the target should evaluate if it supports
-     target-side breakpoint commands.  */
-  VEC(agent_expr_p) *tcommands;
+  /* Commands the target should evaluate if it supports target-side
+     breakpoint commands.  These are non-owning pointers.  */
+  std::vector<agent_expr *> tcommands;
 
   /* Flag that is true if the breakpoint should be left in place even
      when GDB is not connected.  */
diff --git a/gdb/remote.c b/gdb/remote.c
index 419ebf9..ef6c54e 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -9623,10 +9623,7 @@ remote_add_target_side_condition (struct gdbarch *gdbarch,
 				  struct bp_target_info *bp_tgt, char *buf,
 				  char *buf_end)
 {
-  struct agent_expr *aexpr = NULL;
-  int i, ix;
-
-  if (VEC_empty (agent_expr_p, bp_tgt->conditions))
+  if (bp_tgt->conditions.empty ())
     return 0;
 
   buf += strlen (buf);
@@ -9634,13 +9631,13 @@ remote_add_target_side_condition (struct gdbarch *gdbarch,
   buf++;
 
   /* Send conditions to the target and free the vector.  */
-  for (ix = 0;
-       VEC_iterate (agent_expr_p, bp_tgt->conditions, ix, aexpr);
-       ix++)
+  for (int ix = 0; ix < bp_tgt->conditions.size (); ix++)
     {
+      struct agent_expr *aexpr = bp_tgt->conditions[ix];
+
       xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
       buf += strlen (buf);
-      for (i = 0; i < aexpr->len; ++i)
+      for (int i = 0; i < aexpr->len; ++i)
 	buf = pack_hex_byte (buf, aexpr->buf[i]);
       *buf = '\0';
     }
@@ -9651,10 +9648,7 @@ static void
 remote_add_target_side_commands (struct gdbarch *gdbarch,
 				 struct bp_target_info *bp_tgt, char *buf)
 {
-  struct agent_expr *aexpr = NULL;
-  int i, ix;
-
-  if (VEC_empty (agent_expr_p, bp_tgt->tcommands))
+  if (bp_tgt->tcommands.empty ())
     return;
 
   buf += strlen (buf);
@@ -9664,13 +9658,13 @@ remote_add_target_side_commands (struct gdbarch *gdbarch,
 
   /* Concatenate all the agent expressions that are commands into the
      cmds parameter.  */
-  for (ix = 0;
-       VEC_iterate (agent_expr_p, bp_tgt->tcommands, ix, aexpr);
-       ix++)
+  for (int ix = 0; ix < bp_tgt->tcommands.size (); ix++)
     {
+      struct agent_expr *aexpr = bp_tgt->tcommands[ix];
+
       sprintf (buf, "X%x,", aexpr->len);
       buf += strlen (buf);
-      for (i = 0; i < aexpr->len; ++i)
+      for (int i = 0; i < aexpr->len; ++i)
 	buf = pack_hex_byte (buf, aexpr->buf[i]);
       *buf = '\0';
     }
@@ -9735,7 +9729,7 @@ remote_insert_breakpoint (struct target_ops *ops,
 
   /* If this breakpoint has target-side commands but this stub doesn't
      support Z0 packets, throw error.  */
-  if (!VEC_empty (agent_expr_p, bp_tgt->tcommands))
+  if (!bp_tgt->tcommands.empty ())
     throw_error (NOT_SUPPORTED_ERROR, _("\
 Target doesn't support breakpoints that have target side commands."));


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