X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;ds=sidebyside;f=gdb%2Fax.h;h=e5bdbf621934bee71607106811840cf8dc1c27f1;hb=1d29ab86cb5145cac5045c1a4113d8b8fbd4d9c6;hp=1c36125f65a273e4b46fbeacdbd065a5ab7259fd;hpb=28e7fd62340426746f9c896cbc40c5d374ec47aa;p=deliverable%2Fbinutils-gdb.git
diff --git a/gdb/ax.h b/gdb/ax.h
index 1c36125f65..e5bdbf6219 100644
--- a/gdb/ax.h
+++ b/gdb/ax.h
@@ -1,5 +1,5 @@
/* Definitions for expressions designed to be executed on the agent
- Copyright (C) 1998-2013 Free Software Foundation, Inc.
+ Copyright (C) 1998-2019 Free Software Foundation, Inc.
This file is part of GDB.
@@ -16,11 +16,8 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see . */
-#ifndef AGENTEXPR_H
-#define AGENTEXPR_H
-
-#include "doublest.h" /* For DOUBLEST. */
-#include "vec.h"
+#ifndef AX_H
+#define AX_H
/* It's sometimes useful to be able to debug programs that you can't
really stop for more than a fraction of a second. To this end, the
@@ -80,20 +77,14 @@ enum agent_flaws
/* Agent expression data structures. */
-/* The type of an element of the agent expression stack.
- The bytecode operation indicates which element we should access;
- the value itself has no typing information. GDB generates all
- bytecode streams, so we don't have to worry about type errors. */
-
-union agent_val
- {
- LONGEST l;
- DOUBLEST d;
- };
-
/* A buffer containing a agent expression. */
struct agent_expr
{
+ /* Construct an empty agent expression. */
+ explicit agent_expr (struct gdbarch *gdbarch, CORE_ADDR scope);
+
+ ~agent_expr ();
+
/* The bytes of the expression. */
unsigned char *buf;
@@ -143,13 +134,27 @@ struct agent_expr
*/
int reg_mask_len;
unsigned char *reg_mask;
- };
-/* Pointer to an agent_expr structure. */
-typedef struct agent_expr *agent_expr_p;
+ /* For the data tracing facility, we need to insert `trace' bytecodes
+ before each data fetch; this records all the memory that the
+ expression touches in the course of evaluation, so that memory will
+ be available when the user later tries to evaluate the expression
+ in GDB.
+
+ Setting the flag 'tracing' to non-zero enables the code that
+ emits the trace bytecodes at the appropriate points. */
-/* Vector of pointers to agent expressions. */
-DEF_VEC_P (agent_expr_p);
+ unsigned int tracing : 1;
+
+ /* This indicates that pointers to chars should get an added
+ tracenz bytecode to record nonzero bytes, up to a length that
+ is the value of trace_string. */
+
+ int trace_string;
+ };
+
+/* An agent_expr owning pointer. */
+typedef std::unique_ptr agent_expr_up;
/* The actual values of the various bytecode operations. */
@@ -157,7 +162,7 @@ enum agent_op
{
#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE) \
aop_ ## NAME = VALUE,
-#include "ax.def"
+#include "gdbsupport/ax.def"
#undef DEFOP
aop_last
};
@@ -166,12 +171,8 @@ enum agent_op
/* Functions for building expressions. */
-/* Allocate a new, empty agent expression. */
-extern struct agent_expr *new_agent_expr (struct gdbarch *, CORE_ADDR);
-
-/* Free a agent expression. */
-extern void free_agent_expr (struct agent_expr *);
-extern struct cleanup *make_cleanup_free_agent_expr (struct agent_expr *);
+/* Append a raw byte to EXPR. */
+extern void ax_raw_byte (struct agent_expr *expr, gdb_byte byte);
/* Append a simple operator OP to EXPR. */
extern void ax_simple (struct agent_expr *EXPR, enum agent_op OP);
@@ -221,7 +222,7 @@ extern void ax_reg_mask (struct agent_expr *ax, int reg);
extern void ax_tsv (struct agent_expr *expr, enum agent_op op, int num);
/* Append a string to the bytecode stream. */
-extern void ax_string (struct agent_expr *x, char *str, int slen);
+extern void ax_string (struct agent_expr *x, const char *str, int slen);
/* Functions for printing out expressions, and otherwise debugging
@@ -264,4 +265,4 @@ extern struct aop_map aop_map[];
extern void ax_reqs (struct agent_expr *ax);
-#endif /* AGENTEXPR_H */
+#endif /* AX_H */