mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-20 15:03:31 +08:00
2011-02-21 Hui Zhu <teawater@gmail.com>
* tracepoint.c (tp_printf): New function. (eval_agent_expr): Handle gdb_agent_op_printf.
This commit is contained in:
parent
d0e92d82d8
commit
f9c6ff7236
@ -1,3 +1,8 @@
|
||||
2011-02-21 Hui Zhu <teawater@gmail.com>
|
||||
|
||||
* tracepoint.c (tp_printf): New function.
|
||||
(eval_agent_expr): Handle gdb_agent_op_printf.
|
||||
|
||||
2011-02-18 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* Makefile.in (tracepoint-ipa.o): Depend on ax.def.
|
||||
|
@ -4214,6 +4214,16 @@ gdb_agent_op_name (int op)
|
||||
return gdb_agent_op_names[op];
|
||||
}
|
||||
|
||||
int
|
||||
tp_printf (const char *format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start (ap, format);
|
||||
vprintf (format, ap);
|
||||
va_end (ap);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* The agent expression evaluator, as specified by the GDB docs. It
|
||||
returns 0 if everything went OK, and a nonzero error code
|
||||
otherwise. */
|
||||
@ -4573,6 +4583,40 @@ eval_agent_expr (struct tracepoint_hit_ctx *ctx,
|
||||
agent_tsv_read (tframe, arg);
|
||||
break;
|
||||
|
||||
case gdb_agent_op_printf:
|
||||
{
|
||||
void *argv;
|
||||
arg = aexpr->bytes[pc++];
|
||||
argv = (void *) (unsigned long) top;
|
||||
if (--sp >= 0)
|
||||
top = stack[sp];
|
||||
|
||||
if (arg)
|
||||
{
|
||||
if (strstr ((char *) (aexpr->bytes + pc), "%s"))
|
||||
{
|
||||
int i;
|
||||
unsigned char buf[100];
|
||||
|
||||
for (i = 0; i < 100; i++)
|
||||
{
|
||||
agent_mem_read (tframe, buf + i,
|
||||
(CORE_ADDR) ((unsigned long)argv + i),
|
||||
1);
|
||||
if (!buf[i])
|
||||
break;
|
||||
}
|
||||
tp_printf ((char *) (aexpr->bytes + pc), buf);
|
||||
}
|
||||
else
|
||||
tp_printf ((char *) (aexpr->bytes + pc), argv);
|
||||
}
|
||||
else
|
||||
tp_printf ((char *) (aexpr->bytes + pc));
|
||||
pc += strlen ((char *) aexpr->bytes + pc) + 1;
|
||||
}
|
||||
break;
|
||||
|
||||
/* GDB never (currently) generates any of these ops. */
|
||||
case gdb_agent_op_float:
|
||||
case gdb_agent_op_ref_float:
|
||||
|
Loading…
Reference in New Issue
Block a user