/* Functions for manipulating expressions designed to be executed on the agent
- Copyright (C) 1998-2016 Free Software Foundation, Inc.
+ Copyright (C) 1998-2020 Free Software Foundation, Inc.
This file is part of GDB.
#include "defs.h"
#include "ax.h"
+#include "gdbarch.h"
#include "value.h"
#include "user-regs.h"
\f
/* Functions for building expressions. */
-/* Allocate a new, empty agent expression. */
-struct agent_expr *
-new_agent_expr (struct gdbarch *gdbarch, CORE_ADDR scope)
+agent_expr::agent_expr (struct gdbarch *gdbarch, CORE_ADDR scope)
{
- struct agent_expr *x = XNEW (struct agent_expr);
-
- x->len = 0;
- x->size = 1; /* Change this to a larger value once
+ this->len = 0;
+ this->size = 1; /* Change this to a larger value once
reallocation code is tested. */
- x->buf = (unsigned char *) xmalloc (x->size);
+ this->buf = (unsigned char *) xmalloc (this->size);
- x->gdbarch = gdbarch;
- x->scope = scope;
+ this->gdbarch = gdbarch;
+ this->scope = scope;
/* Bit vector for registers used. */
- x->reg_mask_len = 1;
- x->reg_mask = XCNEWVEC (unsigned char, x->reg_mask_len);
-
- x->tracing = 0;
- x->trace_string = 0;
+ this->reg_mask_len = 1;
+ this->reg_mask = XCNEWVEC (unsigned char, this->reg_mask_len);
- return x;
+ this->tracing = 0;
+ this->trace_string = 0;
}
-/* Free a agent expression. */
-void
-free_agent_expr (struct agent_expr *x)
-{
- xfree (x->buf);
- xfree (x->reg_mask);
- xfree (x);
-}
-
-static void
-do_free_agent_expr_cleanup (void *x)
+agent_expr::~agent_expr ()
{
- free_agent_expr ((struct agent_expr *) x);
+ xfree (this->buf);
+ xfree (this->reg_mask);
}
-struct cleanup *
-make_cleanup_free_agent_expr (struct agent_expr *x)
-{
- return make_cleanup (do_free_agent_expr_cleanup, x);
-}
-
-
/* Make sure that X has room for at least N more bytes. This doesn't
affect the length, just the allocated size. */
static void
}
else
{
+ /* Get the remote register number. */
+ reg = gdbarch_remote_register_number (x->gdbarch, reg);
+
/* Make sure the register number is in range. */
if (reg < 0 || reg > 0xffff)
error (_("GDB bug: ax-general.c (ax_reg): "
{0, 0, 0, 0, 0}
#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE) \
, { # NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED }
-#include "ax.def"
+#include "gdbsupport/ax.def"
#undef DEFOP
};
}
else
{
- int byte = reg / 8;
+ int byte;
+
+ /* Get the remote register number. */
+ reg = gdbarch_remote_register_number (ax->gdbarch, reg);
+ byte = reg / 8;
/* Grow the bit mask if necessary. */
if (byte >= ax->reg_mask_len)