X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gdb%2Fax-general.c;h=d377d0b6eb254f2488c21d031517a89f75c1b27c;hb=12a8555a5402b46da5ad39e29156c0d6b3a81a78;hp=8bd4df6acfa0d1b19a84af83b023e712a739ba1b;hpb=741d92cf3986c9327b90b1153c9f6e2a6a2cc13f;p=external%2Fbinutils.git diff --git a/gdb/ax-general.c b/gdb/ax-general.c index 8bd4df6..d377d0b 100644 --- a/gdb/ax-general.c +++ b/gdb/ax-general.c @@ -1,5 +1,5 @@ /* Functions for manipulating 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. @@ -23,10 +23,9 @@ #include "defs.h" #include "ax.h" +#include "gdbarch.h" #include "value.h" -#include "gdb_string.h" - #include "user-regs.h" static void grow_expr (struct agent_expr *x, int n); @@ -39,50 +38,30 @@ static void generic_ext (struct agent_expr *x, enum agent_op op, int n); /* 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 = xmalloc (sizeof (*x)); - - 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 = 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 = xmalloc (x->reg_mask_len * sizeof (x->reg_mask[0])); - memset (x->reg_mask, 0, x->reg_mask_len * sizeof (x->reg_mask[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) +agent_expr::~agent_expr () { - xfree (x->buf); - xfree (x->reg_mask); - xfree (x); + xfree (this->buf); + xfree (this->reg_mask); } -static void -do_free_agent_expr_cleanup (void *x) -{ - free_agent_expr (x); -} - -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 @@ -93,7 +72,7 @@ grow_expr (struct agent_expr *x, int n) x->size *= 2; if (x->size < x->len + n) x->size = x->len + n + 10; - x->buf = xrealloc (x->buf, x->size); + x->buf = (unsigned char *) xrealloc (x->buf, x->size); } } @@ -133,13 +112,20 @@ read_const (struct agent_expr *x, int o, int n) return accum; } +/* See ax.h. */ + +void +ax_raw_byte (struct agent_expr *x, gdb_byte byte) +{ + grow_expr (x, 1); + x->buf[x->len++] = byte; +} /* Append a simple operator OP to EXPR. */ void ax_simple (struct agent_expr *x, enum agent_op op) { - grow_expr (x, 1); - x->buf[x->len++] = op; + ax_raw_byte (x, op); } /* Append a pick operator to EXPR. DEPTH is the stack item to pick, @@ -301,6 +287,9 @@ ax_reg (struct agent_expr *x, int reg) } 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): " @@ -365,7 +354,7 @@ struct aop_map aop_map[] = {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 }; @@ -390,7 +379,7 @@ ax_print (struct ui_file *f, struct agent_expr *x) for (i = 0; i < x->len;) { - enum agent_op op = x->buf[i]; + enum agent_op op = (enum agent_op) x->buf[i]; if (op >= (sizeof (aop_map) / sizeof (aop_map[0])) || !aop_map[op].name) @@ -449,7 +438,11 @@ ax_reg_mask (struct agent_expr *ax, int reg) } 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) @@ -457,9 +450,9 @@ ax_reg_mask (struct agent_expr *ax, int reg) /* It's not appropriate to double here. This isn't a string buffer. */ int new_len = byte + 1; - unsigned char *new_reg_mask = xrealloc (ax->reg_mask, - new_len - * sizeof (ax->reg_mask[0])); + unsigned char *new_reg_mask + = XRESIZEVEC (unsigned char, ax->reg_mask, new_len); + memset (new_reg_mask + ax->reg_mask_len, 0, (new_len - ax->reg_mask_len) * sizeof (ax->reg_mask[0])); ax->reg_mask_len = new_len;