/* Definitions for expressions designed to be executed on the agent
- Copyright (C) 1998-2015 Free Software Foundation, Inc.
+ Copyright (C) 1998-2018 Free Software Foundation, Inc.
This file is part of GDB.
#ifndef AGENTEXPR_H
#define AGENTEXPR_H
-#include "doublest.h" /* For DOUBLEST. */
#include "vec.h"
/* It's sometimes useful to be able to debug programs that you can't
/* 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;
int trace_string;
};
-/* 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);
+/* An agent_expr owning pointer. */
+typedef std::unique_ptr<agent_expr> agent_expr_up;
/* The actual values of the various bytecode operations. */
/* 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);