X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gdb%2Fax.h;h=9fcb40ae8b0eeec92608e0bb2377919ea0e460a1;hb=ed34ef5ed3b11141a622e3edfb0c47e790f1fea7;hp=6ff18aaf4a0923ea4235756ee0093451472d0816;hpb=35c9c7ba77c07c52aa0c81e62919bb3984b86c3a;p=platform%2Fupstream%2Fbinutils.git diff --git a/gdb/ax.h b/gdb/ax.h index 6ff18aa..9fcb40a 100644 --- a/gdb/ax.h +++ b/gdb/ax.h @@ -1,6 +1,5 @@ /* Definitions for expressions designed to be executed on the agent - Copyright (C) 1998, 1999, 2000, 2007, 2008, 2009, 2010 - Free Software Foundation, Inc. + Copyright (C) 1998-2014 Free Software Foundation, Inc. This file is part of GDB. @@ -21,6 +20,7 @@ #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 really stop for more than a fraction of a second. To this end, the @@ -143,67 +143,39 @@ struct agent_expr */ int reg_mask_len; unsigned char *reg_mask; + + /* 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. */ + + 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; }; -/* The actual values of the various bytecode operations. +/* 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); - Other independent implementations of the agent bytecode engine will - rely on the exact values of these enums, and may not be recompiled - when we change this table. The numeric values should remain fixed - whenever possible. Thus, we assign them values explicitly here (to - allow gaps to form safely), and the disassembly table in - agentexpr.h behaves like an opcode map. If you want to see them - grouped logically, see doc/agentexpr.texi. */ +/* The actual values of the various bytecode operations. */ enum agent_op { - aop_float = 0x01, - aop_add = 0x02, - aop_sub = 0x03, - aop_mul = 0x04, - aop_div_signed = 0x05, - aop_div_unsigned = 0x06, - aop_rem_signed = 0x07, - aop_rem_unsigned = 0x08, - aop_lsh = 0x09, - aop_rsh_signed = 0x0a, - aop_rsh_unsigned = 0x0b, - aop_trace = 0x0c, - aop_trace_quick = 0x0d, - aop_log_not = 0x0e, - aop_bit_and = 0x0f, - aop_bit_or = 0x10, - aop_bit_xor = 0x11, - aop_bit_not = 0x12, - aop_equal = 0x13, - aop_less_signed = 0x14, - aop_less_unsigned = 0x15, - aop_ext = 0x16, - aop_ref8 = 0x17, - aop_ref16 = 0x18, - aop_ref32 = 0x19, - aop_ref64 = 0x1a, - aop_ref_float = 0x1b, - aop_ref_double = 0x1c, - aop_ref_long_double = 0x1d, - aop_l_to_d = 0x1e, - aop_d_to_l = 0x1f, - aop_if_goto = 0x20, - aop_goto = 0x21, - aop_const8 = 0x22, - aop_const16 = 0x23, - aop_const32 = 0x24, - aop_const64 = 0x25, - aop_reg = 0x26, - aop_end = 0x27, - aop_dup = 0x28, - aop_pop = 0x29, - aop_zero_ext = 0x2a, - aop_swap = 0x2b, - aop_getv = 0x2c, - aop_setv = 0x2d, - aop_tracev = 0x2e, - aop_trace16 = 0x30, +#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE) \ + aop_ ## NAME = VALUE, +#include "ax.def" +#undef DEFOP aop_last }; @@ -221,6 +193,10 @@ extern struct cleanup *make_cleanup_free_agent_expr (struct agent_expr *); /* Append a simple operator OP to EXPR. */ extern void ax_simple (struct agent_expr *EXPR, enum agent_op OP); +/* Append a pick operator to EXPR. DEPTH is the stack item to pick, + with 0 being top of stack. */ +extern void ax_pick (struct agent_expr *EXPR, int DEPTH); + /* Append the floating-point prefix, for the next bytecode. */ #define ax_float(EXPR) (ax_simple ((EXPR), aop_float)) @@ -260,6 +236,9 @@ extern void ax_reg_mask (struct agent_expr *ax, int reg); /* Assemble code to operate on a trace state variable. */ 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, const char *str, int slen); /* Functions for printing out expressions, and otherwise debugging @@ -274,7 +253,7 @@ struct aop_map /* The name of the opcode. Null means that this entry is not a valid opcode --- a hole in the opcode space. */ - char *name; + const char *name; /* All opcodes take no operands from the bytecode stream, or take unsigned integers of various sizes. If this is a positive number