* ax-general.c (aop_map): Add pick and rot.
	* dwarf2loc.c (compile_dwarf_to_ax) <DW_OP_over>: Reimplement.
	<DW_OP_rot>: Implement.
	* ax.h (enum agent_op) <aop_pick, aop_rot>: New constants.
	(ax_pick): Declare.
	* ax-general.c (ax_pick): New function.
doc
	* agentexpr.texi (Bytecode Descriptions): Document pick and rot.
gdbserver
	* tracepoint.c (enum gdb_agent_op) <gdb_agent_op_pick,
	gdb_agent_op_rot>: New constants.
	(gdb_agent_op_names): Add pick and roll.
	(eval_agent_expr) <gdb_agent_op_pick, gdb_agent_op_rot>: New
	cases.
This commit is contained in:
Tom Tromey 2011-02-18 20:55:45 +00:00
parent 66694b75a4
commit c7f96d2b95
8 changed files with 76 additions and 23 deletions

View file

@ -517,6 +517,8 @@ enum gdb_agent_op
gdb_agent_op_setv = 0x2d,
gdb_agent_op_tracev = 0x2e,
gdb_agent_op_trace16 = 0x30,
gdb_agent_op_pick = 0x32,
gdb_agent_op_rot = 0x33,
gdb_agent_op_last
};
@ -571,6 +573,9 @@ static const char *gdb_agent_op_names [gdb_agent_op_last] =
"tracev",
"?undef?",
"trace16",
"?undef?",
"pick",
"rot"
};
struct agent_expr
@ -4598,6 +4603,23 @@ eval_agent_expr (struct tracepoint_hit_ctx *ctx,
top = stack[sp];
break;
case gdb_agent_op_pick:
arg = aexpr->bytes[pc++];
stack[sp] = top;
top = stack[sp - arg];
++sp;
break;
case gdb_agent_op_rot:
{
ULONGEST tem = stack[sp - 1];
stack[sp - 1] = stack[sp - 2];
stack[sp - 2] = top;
top = tem;
}
break;
case gdb_agent_op_zero_ext:
arg = aexpr->bytes[pc++];
if (arg < (sizeof (LONGEST) * 8))