| Index: gdb/gdbserver/ax.h
|
| diff --git a/gdb/gdbserver/ax.h b/gdb/gdbserver/ax.h
|
| index 3ada3dd2c1f19020ce788dfa7cee2c124ebcb152..3ecc5d8c46f5d079b105378922ba0ee2683a697d 100644
|
| --- a/gdb/gdbserver/ax.h
|
| +++ b/gdb/gdbserver/ax.h
|
| @@ -1,5 +1,5 @@
|
| /* Data structures and functions associated with agent expressions in GDB.
|
| - Copyright (C) 2009-2012 Free Software Foundation, Inc.
|
| + Copyright (C) 2009-2013 Free Software Foundation, Inc.
|
|
|
| This file is part of GDB.
|
|
|
| @@ -67,8 +67,77 @@ void emit_epilogue (void);
|
| enum eval_result_type compile_bytecodes (struct agent_expr *aexpr);
|
| #endif
|
|
|
| -enum eval_result_type gdb_eval_agent_expr (struct regcache *regcache,
|
| - struct traceframe *tframe,
|
| - struct agent_expr *aexpr,
|
| - ULONGEST *rslt);
|
| +/* The context when evaluating agent expression. */
|
| +
|
| +struct eval_agent_expr_context
|
| +{
|
| + /* The registers when evaluating agent expression. */
|
| + struct regcache *regcache;
|
| + /* The traceframe, if any, when evaluating agent expression. */
|
| + struct traceframe *tframe;
|
| + /* The tracepoint, if any, when evaluating agent expression. */
|
| + struct tracepoint *tpoint;
|
| +};
|
| +
|
| +enum eval_result_type
|
| + gdb_eval_agent_expr (struct eval_agent_expr_context *ctx,
|
| + struct agent_expr *aexpr,
|
| + ULONGEST *rslt);
|
| +
|
| +/* Bytecode compilation function vector. */
|
| +
|
| +struct emit_ops
|
| +{
|
| + void (*emit_prologue) (void);
|
| + void (*emit_epilogue) (void);
|
| + void (*emit_add) (void);
|
| + void (*emit_sub) (void);
|
| + void (*emit_mul) (void);
|
| + void (*emit_lsh) (void);
|
| + void (*emit_rsh_signed) (void);
|
| + void (*emit_rsh_unsigned) (void);
|
| + void (*emit_ext) (int arg);
|
| + void (*emit_log_not) (void);
|
| + void (*emit_bit_and) (void);
|
| + void (*emit_bit_or) (void);
|
| + void (*emit_bit_xor) (void);
|
| + void (*emit_bit_not) (void);
|
| + void (*emit_equal) (void);
|
| + void (*emit_less_signed) (void);
|
| + void (*emit_less_unsigned) (void);
|
| + void (*emit_ref) (int size);
|
| + void (*emit_if_goto) (int *offset_p, int *size_p);
|
| + void (*emit_goto) (int *offset_p, int *size_p);
|
| + void (*write_goto_address) (CORE_ADDR from, CORE_ADDR to, int size);
|
| + void (*emit_const) (LONGEST num);
|
| + void (*emit_call) (CORE_ADDR fn);
|
| + void (*emit_reg) (int reg);
|
| + void (*emit_pop) (void);
|
| + void (*emit_stack_flush) (void);
|
| + void (*emit_zero_ext) (int arg);
|
| + void (*emit_swap) (void);
|
| + void (*emit_stack_adjust) (int n);
|
| +
|
| + /* Emit code for a generic function that takes one fixed integer
|
| + argument and returns a 64-bit int (for instance, tsv getter). */
|
| + void (*emit_int_call_1) (CORE_ADDR fn, int arg1);
|
| +
|
| + /* Emit code for a generic function that takes one fixed integer
|
| + argument and a 64-bit int from the top of the stack, and returns
|
| + nothing (for instance, tsv setter). */
|
| + void (*emit_void_call_2) (CORE_ADDR fn, int arg1);
|
| +
|
| + /* Emit code specialized for common combinations of compare followed
|
| + by a goto. */
|
| + void (*emit_eq_goto) (int *offset_p, int *size_p);
|
| + void (*emit_ne_goto) (int *offset_p, int *size_p);
|
| + void (*emit_lt_goto) (int *offset_p, int *size_p);
|
| + void (*emit_le_goto) (int *offset_p, int *size_p);
|
| + void (*emit_gt_goto) (int *offset_p, int *size_p);
|
| + void (*emit_ge_goto) (int *offset_p, int *size_p);
|
| +};
|
| +
|
| +extern CORE_ADDR current_insn_ptr;
|
| +extern int emit_error;
|
| +
|
| #endif /* AX_H */
|
|
|