Revert the following change (not approved yet):
2011-02-21 Hui Zhu <teawater@gmail.com> * Makefile.in (HFILES_NO_SRCDIR): Add printcmd.h. * ax-gdb.c (gen_printf_expr_callback): New function. * ax-gdb.h (gen_printf_expr_callback): Forward declare. * ax-general.c (ax_memcpy): New function. (ax_print): Handle "printf". (ax_reqs): Ditto. * ax.h (ax_memcpy): Forward declare. * common/ax.def (invalid2): Removed. (printf): New entry. * printcmd.c (printcmd.h): New include. (string_printf): New function. (ui_printf): Removed. (printf_command): Remove static. Call string_printf. (eval_command): Call string_printf. * printcmd.h: New file. * tracepoint.c (validate_actionline, encode_actions_1): handle printf_command.
This commit is contained in:
parent
633ff500c5
commit
a04b0428ab
@ -1,3 +1,25 @@
|
|||||||
|
2011-02-24 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
|
Revert the following patch (not approved yet):
|
||||||
|
2011-02-21 Hui Zhu <teawater@gmail.com>
|
||||||
|
* Makefile.in (HFILES_NO_SRCDIR): Add printcmd.h.
|
||||||
|
* ax-gdb.c (gen_printf_expr_callback): New function.
|
||||||
|
* ax-gdb.h (gen_printf_expr_callback): Forward declare.
|
||||||
|
* ax-general.c (ax_memcpy): New function.
|
||||||
|
(ax_print): Handle "printf".
|
||||||
|
(ax_reqs): Ditto.
|
||||||
|
* ax.h (ax_memcpy): Forward declare.
|
||||||
|
* common/ax.def (invalid2): Removed.
|
||||||
|
(printf): New entry.
|
||||||
|
* printcmd.c (printcmd.h): New include.
|
||||||
|
(string_printf): New function.
|
||||||
|
(ui_printf): Removed.
|
||||||
|
(printf_command): Remove static. Call string_printf.
|
||||||
|
(eval_command): Call string_printf.
|
||||||
|
* printcmd.h: New file.
|
||||||
|
* tracepoint.c (validate_actionline,
|
||||||
|
encode_actions_1): handle printf_command.
|
||||||
|
|
||||||
2011-02-23 Tom Tromey <tromey@redhat.com>
|
2011-02-23 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
* ax-general.c (ax_pick): Add missing newline.
|
* ax-general.c (ax_pick): Add missing newline.
|
||||||
|
@ -808,7 +808,7 @@ annotate.h sim-regno.h dictionary.h dfp.h main.h frame-unwind.h \
|
|||||||
remote-fileio.h i386-linux-tdep.h vax-tdep.h objc-lang.h \
|
remote-fileio.h i386-linux-tdep.h vax-tdep.h objc-lang.h \
|
||||||
sentinel-frame.h bcache.h symfile.h windows-tdep.h linux-tdep.h \
|
sentinel-frame.h bcache.h symfile.h windows-tdep.h linux-tdep.h \
|
||||||
gdb_usleep.h jit.h xml-syscall.h microblaze-tdep.h \
|
gdb_usleep.h jit.h xml-syscall.h microblaze-tdep.h \
|
||||||
psymtab.h psympriv.h progspace.h bfin-tdep.h ia64-hpux-tdep.h printcmd.h
|
psymtab.h psympriv.h progspace.h bfin-tdep.h ia64-hpux-tdep.h
|
||||||
|
|
||||||
# Header files that already have srcdir in them, or which are in objdir.
|
# Header files that already have srcdir in them, or which are in objdir.
|
||||||
|
|
||||||
|
59
gdb/ax-gdb.c
59
gdb/ax-gdb.c
@ -2445,65 +2445,6 @@ gen_eval_for_expr (CORE_ADDR scope, struct expression *expr)
|
|||||||
return ax;
|
return ax;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
gen_printf_expr_callback (char *fbuf, char **expp, void *loc_v, void *aexpr_v)
|
|
||||||
{
|
|
||||||
struct bp_location *loc = loc_v;
|
|
||||||
struct agent_expr *aexpr = aexpr_v;
|
|
||||||
|
|
||||||
if (expp)
|
|
||||||
{
|
|
||||||
struct cleanup *old_chain = NULL;
|
|
||||||
struct expression *expr = NULL;
|
|
||||||
union exp_element *pc;
|
|
||||||
struct axs_value value;
|
|
||||||
|
|
||||||
expr = parse_exp_1 (expp, block_for_pc (loc->address), 1);
|
|
||||||
old_chain = make_cleanup (free_current_contents, &expr);
|
|
||||||
|
|
||||||
pc = expr->elts;
|
|
||||||
trace_kludge = 0;
|
|
||||||
value.optimized_out = 0;
|
|
||||||
gen_expr (expr, &pc, aexpr, &value);
|
|
||||||
|
|
||||||
if (value.optimized_out)
|
|
||||||
error (_("value has been optimized out"));
|
|
||||||
switch (value.kind)
|
|
||||||
{
|
|
||||||
case axs_lvalue_memory:
|
|
||||||
if (TYPE_CODE (value.type) != TYPE_CODE_ARRAY)
|
|
||||||
{
|
|
||||||
int length = TYPE_LENGTH (check_typedef (value.type));
|
|
||||||
switch (length)
|
|
||||||
{
|
|
||||||
case 4:
|
|
||||||
ax_simple (aexpr, aop_ref32);
|
|
||||||
break;
|
|
||||||
case 8:
|
|
||||||
ax_simple (aexpr, aop_ref64);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
error (_("Size of value is not OK."));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case axs_lvalue_register:
|
|
||||||
ax_reg (aexpr, value.u.reg);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
do_cleanups (old_chain);
|
|
||||||
}
|
|
||||||
|
|
||||||
ax_simple (aexpr, aop_printf);
|
|
||||||
if (expp)
|
|
||||||
ax_simple (aexpr, 1);
|
|
||||||
else
|
|
||||||
ax_simple (aexpr, 0);
|
|
||||||
ax_memcpy (aexpr, fbuf, strlen (fbuf) + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
agent_command (char *exp, int from_tty)
|
agent_command (char *exp, int from_tty)
|
||||||
{
|
{
|
||||||
|
@ -108,8 +108,6 @@ extern struct agent_expr *gen_trace_for_var (CORE_ADDR, struct gdbarch *,
|
|||||||
|
|
||||||
extern struct agent_expr *gen_eval_for_expr (CORE_ADDR, struct expression *);
|
extern struct agent_expr *gen_eval_for_expr (CORE_ADDR, struct expression *);
|
||||||
|
|
||||||
extern void gen_printf_expr_callback (char *, char **, void *, void *);
|
|
||||||
|
|
||||||
extern int trace_kludge;
|
extern int trace_kludge;
|
||||||
|
|
||||||
#endif /* AX_GDB_H */
|
#endif /* AX_GDB_H */
|
||||||
|
@ -331,14 +331,6 @@ ax_tsv (struct agent_expr *x, enum agent_op op, int num)
|
|||||||
x->buf[x->len + 2] = (num) & 0xff;
|
x->buf[x->len + 2] = (num) & 0xff;
|
||||||
x->len += 3;
|
x->len += 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
ax_memcpy (struct agent_expr *x, const void *src, size_t n)
|
|
||||||
{
|
|
||||||
grow_expr (x, n);
|
|
||||||
memcpy (x->buf + x->len, src, n);
|
|
||||||
x->len += n;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -377,7 +369,6 @@ ax_print (struct ui_file *f, struct agent_expr *x)
|
|||||||
for (i = 0; i < x->len;)
|
for (i = 0; i < x->len;)
|
||||||
{
|
{
|
||||||
enum agent_op op = x->buf[i];
|
enum agent_op op = x->buf[i];
|
||||||
int op_size;
|
|
||||||
|
|
||||||
if (op >= (sizeof (aop_map) / sizeof (aop_map[0]))
|
if (op >= (sizeof (aop_map) / sizeof (aop_map[0]))
|
||||||
|| !aop_map[op].name)
|
|| !aop_map[op].name)
|
||||||
@ -386,19 +377,7 @@ ax_print (struct ui_file *f, struct agent_expr *x)
|
|||||||
i++;
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (op == aop_printf)
|
if (i + 1 + aop_map[op].op_size > x->len)
|
||||||
{
|
|
||||||
if (i + 2 >= x->len)
|
|
||||||
{
|
|
||||||
fprintf_filtered (f, _("%3d <bad opcode %02x>\n"), i, op);
|
|
||||||
i++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
op_size = 1 + strlen (x->buf + i + 2) + 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
op_size = aop_map[op].op_size;
|
|
||||||
if (i + 1 + op_size > x->len)
|
|
||||||
{
|
{
|
||||||
fprintf_filtered (f, _("%3d <incomplete opcode %s>\n"),
|
fprintf_filtered (f, _("%3d <incomplete opcode %s>\n"),
|
||||||
i, aop_map[op].name);
|
i, aop_map[op].name);
|
||||||
@ -406,15 +385,15 @@ ax_print (struct ui_file *f, struct agent_expr *x)
|
|||||||
}
|
}
|
||||||
|
|
||||||
fprintf_filtered (f, "%3d %s", i, aop_map[op].name);
|
fprintf_filtered (f, "%3d %s", i, aop_map[op].name);
|
||||||
if (op_size > 0)
|
if (aop_map[op].op_size > 0)
|
||||||
{
|
{
|
||||||
fputs_filtered (" ", f);
|
fputs_filtered (" ", f);
|
||||||
|
|
||||||
print_longest (f, 'd', 0,
|
print_longest (f, 'd', 0,
|
||||||
read_const (x, i + 1, op_size));
|
read_const (x, i + 1, aop_map[op].op_size));
|
||||||
}
|
}
|
||||||
fprintf_filtered (f, "\n");
|
fprintf_filtered (f, "\n");
|
||||||
i += 1 + op_size;
|
i += 1 + aop_map[op].op_size;
|
||||||
|
|
||||||
is_float = (op == aop_float);
|
is_float = (op == aop_float);
|
||||||
}
|
}
|
||||||
@ -482,8 +461,6 @@ ax_reqs (struct agent_expr *ax)
|
|||||||
/* Pointer to a description of the present op. */
|
/* Pointer to a description of the present op. */
|
||||||
struct aop_map *op;
|
struct aop_map *op;
|
||||||
|
|
||||||
int op_size = 0, consumed = 0;
|
|
||||||
|
|
||||||
memset (targets, 0, ax->len * sizeof (targets[0]));
|
memset (targets, 0, ax->len * sizeof (targets[0]));
|
||||||
memset (boundary, 0, ax->len * sizeof (boundary[0]));
|
memset (boundary, 0, ax->len * sizeof (boundary[0]));
|
||||||
|
|
||||||
@ -491,7 +468,7 @@ ax_reqs (struct agent_expr *ax)
|
|||||||
ax->flaw = agent_flaw_none;
|
ax->flaw = agent_flaw_none;
|
||||||
ax->max_data_size = 0;
|
ax->max_data_size = 0;
|
||||||
|
|
||||||
for (i = 0; i < ax->len; i += 1 + op_size)
|
for (i = 0; i < ax->len; i += 1 + op->op_size)
|
||||||
{
|
{
|
||||||
if (ax->buf[i] > (sizeof (aop_map) / sizeof (aop_map[0])))
|
if (ax->buf[i] > (sizeof (aop_map) / sizeof (aop_map[0])))
|
||||||
{
|
{
|
||||||
@ -507,23 +484,7 @@ ax_reqs (struct agent_expr *ax)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ax->buf[i] == aop_printf)
|
if (i + 1 + op->op_size > ax->len)
|
||||||
{
|
|
||||||
if (i + 2 >= ax->len)
|
|
||||||
{
|
|
||||||
ax->flaw = agent_flaw_incomplete_instruction;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
consumed = ax->buf[i + 1];
|
|
||||||
op_size = 1 + strlen (ax->buf + i + 2) + 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
op_size = op->op_size;
|
|
||||||
consumed = op->consumed;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i + 1 + op_size > ax->len)
|
|
||||||
{
|
{
|
||||||
ax->flaw = agent_flaw_incomplete_instruction;
|
ax->flaw = agent_flaw_incomplete_instruction;
|
||||||
return;
|
return;
|
||||||
@ -541,7 +502,7 @@ ax_reqs (struct agent_expr *ax)
|
|||||||
boundary[i] = 1;
|
boundary[i] = 1;
|
||||||
heights[i] = height;
|
heights[i] = height;
|
||||||
|
|
||||||
height -= consumed;
|
height -= op->consumed;
|
||||||
if (height < ax->min_height)
|
if (height < ax->min_height)
|
||||||
ax->min_height = height;
|
ax->min_height = height;
|
||||||
height += op->produced;
|
height += op->produced;
|
||||||
|
2
gdb/ax.h
2
gdb/ax.h
@ -213,8 +213,6 @@ extern void ax_reg_mask (struct agent_expr *ax, int reg);
|
|||||||
|
|
||||||
/* Assemble code to operate on a trace state variable. */
|
/* Assemble code to operate on a trace state variable. */
|
||||||
extern void ax_tsv (struct agent_expr *expr, enum agent_op op, int num);
|
extern void ax_tsv (struct agent_expr *expr, enum agent_op op, int num);
|
||||||
|
|
||||||
extern void ax_memcpy (struct agent_expr *x, const void *src, size_t n);
|
|
||||||
|
|
||||||
|
|
||||||
/* Functions for printing out expressions, and otherwise debugging
|
/* Functions for printing out expressions, and otherwise debugging
|
||||||
|
@ -86,8 +86,12 @@ DEFOP (swap, 0, 0, 2, 2, 0x2b)
|
|||||||
DEFOP (getv, 2, 0, 0, 1, 0x2c)
|
DEFOP (getv, 2, 0, 0, 1, 0x2c)
|
||||||
DEFOP (setv, 2, 0, 0, 1, 0x2d)
|
DEFOP (setv, 2, 0, 0, 1, 0x2d)
|
||||||
DEFOP (tracev, 2, 0, 0, 1, 0x2e)
|
DEFOP (tracev, 2, 0, 0, 1, 0x2e)
|
||||||
|
/* We need something here just to make the tables come out ok. */
|
||||||
DEFOP (invalid, 0, 0, 0, 0, 0x2f)
|
DEFOP (invalid, 0, 0, 0, 0, 0x2f)
|
||||||
DEFOP (trace16, 2, 0, 1, 1, 0x30)
|
DEFOP (trace16, 2, 0, 1, 1, 0x30)
|
||||||
DEFOP (printf, 0, 0, 0, 0, 0x31)
|
/* We need something here just to make the tables come out ok. */
|
||||||
|
DEFOP (invalid2, 0, 0, 0, 0, 0x2f)
|
||||||
|
/* The "consumed" number for pick is wrong, but there's no way to
|
||||||
|
express the right thing. */
|
||||||
DEFOP (pick, 1, 0, 0, 1, 0x32)
|
DEFOP (pick, 1, 0, 0, 1, 0x32)
|
||||||
DEFOP (rot, 0, 0, 3, 3, 0x33)
|
DEFOP (rot, 0, 0, 3, 3, 0x33)
|
||||||
|
@ -49,7 +49,6 @@
|
|||||||
#include "parser-defs.h"
|
#include "parser-defs.h"
|
||||||
#include "charset.h"
|
#include "charset.h"
|
||||||
#include "arch-utils.h"
|
#include "arch-utils.h"
|
||||||
#include "printcmd.h"
|
|
||||||
#include "cli/cli-utils.h"
|
#include "cli/cli-utils.h"
|
||||||
|
|
||||||
#ifdef TUI
|
#ifdef TUI
|
||||||
@ -1962,9 +1961,10 @@ print_variable_and_value (const char *name, struct symbol *var,
|
|||||||
fprintf_filtered (stream, "\n");
|
fprintf_filtered (stream, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
/* printf "printf format string" ARG to STREAM. */
|
||||||
string_printf (char *arg, struct ui_file *stream, printf_callback callback,
|
|
||||||
void *loc_v, void *aexpr_v)
|
static void
|
||||||
|
ui_printf (char *arg, struct ui_file *stream)
|
||||||
{
|
{
|
||||||
char *f = NULL;
|
char *f = NULL;
|
||||||
char *s = arg;
|
char *s = arg;
|
||||||
@ -1975,8 +1975,6 @@ string_printf (char *arg, struct ui_file *stream, printf_callback callback,
|
|||||||
int nargs = 0;
|
int nargs = 0;
|
||||||
int allocated_args = 20;
|
int allocated_args = 20;
|
||||||
struct cleanup *old_cleanups;
|
struct cleanup *old_cleanups;
|
||||||
struct bp_location *loc = loc_v;
|
|
||||||
struct agent_expr *aexpr = aexpr_v;
|
|
||||||
|
|
||||||
val_args = xmalloc (allocated_args * sizeof (struct value *));
|
val_args = xmalloc (allocated_args * sizeof (struct value *));
|
||||||
old_cleanups = make_cleanup (free_current_contents, &val_args);
|
old_cleanups = make_cleanup (free_current_contents, &val_args);
|
||||||
@ -2295,26 +2293,15 @@ string_printf (char *arg, struct ui_file *stream, printf_callback callback,
|
|||||||
/* Now, parse all arguments and evaluate them.
|
/* Now, parse all arguments and evaluate them.
|
||||||
Store the VALUEs in VAL_ARGS. */
|
Store the VALUEs in VAL_ARGS. */
|
||||||
|
|
||||||
if (callback)
|
|
||||||
current_substring = substrings;
|
|
||||||
while (*s != '\0')
|
while (*s != '\0')
|
||||||
{
|
{
|
||||||
char *s1;
|
char *s1;
|
||||||
|
|
||||||
s1 = s;
|
|
||||||
if (nargs == allocated_args)
|
if (nargs == allocated_args)
|
||||||
val_args = (struct value **) xrealloc ((char *) val_args,
|
val_args = (struct value **) xrealloc ((char *) val_args,
|
||||||
(allocated_args *= 2)
|
(allocated_args *= 2)
|
||||||
* sizeof (struct value *));
|
* sizeof (struct value *));
|
||||||
if (callback)
|
s1 = s;
|
||||||
{
|
|
||||||
if (nargs >= nargs_wanted)
|
|
||||||
error (_("Wrong number of arguments for specified "
|
|
||||||
"format-string"));
|
|
||||||
callback (current_substring, &s1, loc, aexpr);
|
|
||||||
current_substring += strlen (current_substring) + 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
val_args[nargs] = parse_to_comma_and_eval (&s1);
|
val_args[nargs] = parse_to_comma_and_eval (&s1);
|
||||||
|
|
||||||
nargs++;
|
nargs++;
|
||||||
@ -2322,15 +2309,10 @@ string_printf (char *arg, struct ui_file *stream, printf_callback callback,
|
|||||||
if (*s == ',')
|
if (*s == ',')
|
||||||
s++;
|
s++;
|
||||||
}
|
}
|
||||||
if (callback)
|
|
||||||
callback (last_arg, NULL, loc, aexpr);
|
|
||||||
|
|
||||||
if (nargs != nargs_wanted)
|
if (nargs != nargs_wanted)
|
||||||
error (_("Wrong number of arguments for specified format-string"));
|
error (_("Wrong number of arguments for specified format-string"));
|
||||||
|
|
||||||
if (!stream)
|
|
||||||
goto after_print;
|
|
||||||
|
|
||||||
/* Now actually print them. */
|
/* Now actually print them. */
|
||||||
current_substring = substrings;
|
current_substring = substrings;
|
||||||
for (i = 0; i < nargs; i++)
|
for (i = 0; i < nargs; i++)
|
||||||
@ -2685,17 +2667,15 @@ string_printf (char *arg, struct ui_file *stream, printf_callback callback,
|
|||||||
by default, which will warn here if there is no argument. */
|
by default, which will warn here if there is no argument. */
|
||||||
fprintf_filtered (stream, last_arg, 0);
|
fprintf_filtered (stream, last_arg, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
after_print:
|
|
||||||
do_cleanups (old_cleanups);
|
do_cleanups (old_cleanups);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Implement the "printf" command. */
|
/* Implement the "printf" command. */
|
||||||
|
|
||||||
void
|
static void
|
||||||
printf_command (char *arg, int from_tty)
|
printf_command (char *arg, int from_tty)
|
||||||
{
|
{
|
||||||
string_printf (arg, gdb_stdout, NULL, NULL, NULL);
|
ui_printf (arg, gdb_stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Implement the "eval" command. */
|
/* Implement the "eval" command. */
|
||||||
@ -2707,7 +2687,7 @@ eval_command (char *arg, int from_tty)
|
|||||||
struct cleanup *cleanups = make_cleanup_ui_file_delete (ui_out);
|
struct cleanup *cleanups = make_cleanup_ui_file_delete (ui_out);
|
||||||
char *expanded;
|
char *expanded;
|
||||||
|
|
||||||
string_printf (arg, ui_out, NULL, NULL, NULL);
|
ui_printf (arg, ui_out);
|
||||||
|
|
||||||
expanded = ui_file_xstrdup (ui_out, NULL);
|
expanded = ui_file_xstrdup (ui_out, NULL);
|
||||||
make_cleanup (xfree, expanded);
|
make_cleanup (xfree, expanded);
|
||||||
|
@ -1,30 +0,0 @@
|
|||||||
/* Print values for GNU debugger GDB.
|
|
||||||
|
|
||||||
Copyright (C) 2011 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
This file is part of GDB.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
#ifndef _PRINTCMD_H_
|
|
||||||
#define _PRINTCMD_H_
|
|
||||||
|
|
||||||
extern void printf_command (char *arg, int from_tty);
|
|
||||||
typedef void (printf_callback) (char *fbuf, char **expp, void *loc_v,
|
|
||||||
void *aexpr_v);
|
|
||||||
extern void string_printf (char *arg, struct ui_file *stream,
|
|
||||||
printf_callback callback, void *loc_v,
|
|
||||||
void *aexpr_v);
|
|
||||||
|
|
||||||
#endif /* _PRINTCMD_H_ */
|
|
@ -51,7 +51,6 @@
|
|||||||
#include "ax.h"
|
#include "ax.h"
|
||||||
#include "ax-gdb.h"
|
#include "ax-gdb.h"
|
||||||
#include "memrange.h"
|
#include "memrange.h"
|
||||||
#include "printcmd.h"
|
|
||||||
|
|
||||||
/* readline include files */
|
/* readline include files */
|
||||||
#include "readline/readline.h"
|
#include "readline/readline.h"
|
||||||
@ -764,28 +763,6 @@ validate_actionline (char **line, struct breakpoint *t)
|
|||||||
error (_("while-stepping step count `%s' is malformed."), *line);
|
error (_("while-stepping step count `%s' is malformed."), *line);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (cmd_cfunc_eq (c, printf_command))
|
|
||||||
{
|
|
||||||
char fbuf[101];
|
|
||||||
|
|
||||||
for (loc = t->loc; loc; loc = loc->next)
|
|
||||||
{
|
|
||||||
int nargs;
|
|
||||||
aexpr = new_agent_expr (loc->gdbarch, loc->address);
|
|
||||||
old_chain = make_cleanup_free_agent_expr (aexpr);
|
|
||||||
string_printf (p, NULL, gen_printf_expr_callback,
|
|
||||||
loc, aexpr);
|
|
||||||
ax_simple (aexpr, aop_end);
|
|
||||||
/* The agent expr include expr for arguments, format string, 1 byte
|
|
||||||
for aop_printf, 1 byte for the number of arguments, 1 byte for
|
|
||||||
size of format string, 1 byte for blank after format string
|
|
||||||
and 1 byte for aop_end. */
|
|
||||||
if (aexpr->len > MAX_AGENT_EXPR_LEN)
|
|
||||||
error (_("Expression is too complicated."));
|
|
||||||
do_cleanups (old_chain);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (cmd_cfunc_eq (c, end_actions_pseudocommand))
|
else if (cmd_cfunc_eq (c, end_actions_pseudocommand))
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -1497,22 +1474,6 @@ encode_actions_1 (struct command_line *action,
|
|||||||
encode_actions_1 (action->body_list[0], t, tloc, frame_reg,
|
encode_actions_1 (action->body_list[0], t, tloc, frame_reg,
|
||||||
frame_offset, stepping_list, NULL);
|
frame_offset, stepping_list, NULL);
|
||||||
}
|
}
|
||||||
else if (cmd_cfunc_eq (cmd, printf_command))
|
|
||||||
{
|
|
||||||
char fbuf[101];
|
|
||||||
struct cleanup *old_chain = NULL;
|
|
||||||
|
|
||||||
aexpr = new_agent_expr (tloc->gdbarch, tloc->address);
|
|
||||||
old_chain = make_cleanup_free_agent_expr (aexpr);
|
|
||||||
string_printf (action_exp, NULL, gen_printf_expr_callback,
|
|
||||||
tloc, aexpr);
|
|
||||||
ax_simple (aexpr, aop_end);
|
|
||||||
|
|
||||||
ax_reqs (aexpr);
|
|
||||||
report_agent_reqs_errors (aexpr);
|
|
||||||
discard_cleanups (old_chain);
|
|
||||||
add_aexpr (collect, aexpr);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
error (_("Invalid tracepoint command '%s'"), action->line);
|
error (_("Invalid tracepoint command '%s'"), action->line);
|
||||||
} /* for */
|
} /* for */
|
||||||
|
Loading…
Reference in New Issue
Block a user