Revert the following change (not approved yet):
authorJoel Brobecker <brobecker@gnat.com>
Thu, 24 Feb 2011 07:39:48 +0000 (07:39 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Thu, 24 Feb 2011 07:39:48 +0000 (07:39 +0000)
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.

gdb/ChangeLog
gdb/Makefile.in
gdb/ax-gdb.c
gdb/ax-gdb.h
gdb/ax-general.c
gdb/ax.h
gdb/common/ax.def
gdb/printcmd.c
gdb/printcmd.h [deleted file]
gdb/tracepoint.c

index bc358a0..0b03569 100644 (file)
@@ -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>
 
        * ax-general.c (ax_pick): Add missing newline.
index 6363773..fae43b2 100644 (file)
@@ -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 \
 sentinel-frame.h bcache.h symfile.h windows-tdep.h linux-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.
 
index d995d87..d1736e1 100644 (file)
@@ -2445,65 +2445,6 @@ gen_eval_for_expr (CORE_ADDR scope, struct expression *expr)
   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
 agent_command (char *exp, int from_tty)
 {
index 9b15230..a2367a6 100644 (file)
@@ -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 void gen_printf_expr_callback (char *, char **, void *, void *);
-
 extern int trace_kludge;
 
 #endif /* AX_GDB_H */
index 62c382c..889fac9 100644 (file)
@@ -331,14 +331,6 @@ ax_tsv (struct agent_expr *x, enum agent_op op, int num)
   x->buf[x->len + 2] = (num) & 0xff;
   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;
-}
 \f
 
 
@@ -377,7 +369,6 @@ ax_print (struct ui_file *f, struct agent_expr *x)
   for (i = 0; i < x->len;)
     {
       enum agent_op op = x->buf[i];
-      int op_size;
 
       if (op >= (sizeof (aop_map) / sizeof (aop_map[0]))
          || !aop_map[op].name)
@@ -386,19 +377,7 @@ ax_print (struct ui_file *f, struct agent_expr *x)
          i++;
          continue;
        }
-      if (op == aop_printf)
-        {
-         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)
+      if (i + 1 + aop_map[op].op_size > x->len)
        {
          fprintf_filtered (f, _("%3d  <incomplete opcode %s>\n"),
                            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);
-      if (op_size > 0)
+      if (aop_map[op].op_size > 0)
        {
          fputs_filtered (" ", f);
 
          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");
-      i += 1 + op_size;
+      i += 1 + aop_map[op].op_size;
 
       is_float = (op == aop_float);
     }
@@ -482,8 +461,6 @@ ax_reqs (struct agent_expr *ax)
   /* Pointer to a description of the present op.  */
   struct aop_map *op;
 
-  int op_size = 0, consumed = 0;
-
   memset (targets, 0, ax->len * sizeof (targets[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->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])))
        {
@@ -507,23 +484,7 @@ ax_reqs (struct agent_expr *ax)
          return;
        }
 
-      if (ax->buf[i] == aop_printf)
-        {
-         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)
+      if (i + 1 + op->op_size > ax->len)
        {
          ax->flaw = agent_flaw_incomplete_instruction;
          return;
@@ -541,7 +502,7 @@ ax_reqs (struct agent_expr *ax)
       boundary[i] = 1;
       heights[i] = height;
 
-      height -= consumed;
+      height -= op->consumed;
       if (height < ax->min_height)
        ax->min_height = height;
       height += op->produced;
index 05dc6a1..a124575 100644 (file)
--- a/gdb/ax.h
+++ b/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.  */
 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);
 \f
 
 /* Functions for printing out expressions, and otherwise debugging
index f1be688..56ddd4a 100644 (file)
@@ -86,8 +86,12 @@ DEFOP (swap, 0, 0, 2, 2, 0x2b)
 DEFOP (getv, 2, 0, 0, 1, 0x2c)
 DEFOP (setv, 2, 0, 0, 1, 0x2d)
 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 (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 (rot, 0, 0, 3, 3, 0x33)
index ebca5a3..39ac8a8 100644 (file)
@@ -49,7 +49,6 @@
 #include "parser-defs.h"
 #include "charset.h"
 #include "arch-utils.h"
-#include "printcmd.h"
 #include "cli/cli-utils.h"
 
 #ifdef TUI
@@ -1962,9 +1961,10 @@ print_variable_and_value (const char *name, struct symbol *var,
   fprintf_filtered (stream, "\n");
 }
 
-void
-string_printf (char *arg, struct ui_file *stream, printf_callback callback,
-              void *loc_v, void *aexpr_v)
+/* printf "printf format string" ARG to STREAM.  */
+
+static void
+ui_printf (char *arg, struct ui_file *stream)
 {
   char *f = NULL;
   char *s = arg;
@@ -1975,8 +1975,6 @@ string_printf (char *arg, struct ui_file *stream, printf_callback callback,
   int nargs = 0;
   int allocated_args = 20;
   struct cleanup *old_cleanups;
-  struct bp_location *loc = loc_v;
-  struct agent_expr *aexpr = aexpr_v;
 
   val_args = xmalloc (allocated_args * sizeof (struct value *));
   old_cleanups = make_cleanup (free_current_contents, &val_args);
@@ -2295,42 +2293,26 @@ string_printf (char *arg, struct ui_file *stream, printf_callback callback,
     /* Now, parse all arguments and evaluate them.
        Store the VALUEs in VAL_ARGS.  */
 
-    if (callback)
-      current_substring = substrings;
     while (*s != '\0')
       {
        char *s1;
 
-       s1 = s;
        if (nargs == allocated_args)
          val_args = (struct value **) xrealloc ((char *) val_args,
                                                 (allocated_args *= 2)
                                                 * sizeof (struct value *));
-       if (callback)
-         {
-           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);
+       s1 = s;
+       val_args[nargs] = parse_to_comma_and_eval (&s1);
 
        nargs++;
        s = s1;
        if (*s == ',')
          s++;
       }
-    if (callback)
-      callback (last_arg, NULL, loc, aexpr);
 
     if (nargs != nargs_wanted)
       error (_("Wrong number of arguments for specified format-string"));
 
-    if (!stream)
-      goto after_print;
-
     /* Now actually print them.  */
     current_substring = substrings;
     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.  */
     fprintf_filtered (stream, last_arg, 0);
   }
-
-after_print:
   do_cleanups (old_cleanups);
 }
 
 /* Implement the "printf" command.  */
 
-void
+static void
 printf_command (char *arg, int from_tty)
 {
-  string_printf (arg, gdb_stdout, NULL, NULL, NULL);
+  ui_printf (arg, gdb_stdout);
 }
 
 /* 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);
   char *expanded;
 
-  string_printf (arg, ui_out, NULL, NULL, NULL);
+  ui_printf (arg, ui_out);
 
   expanded = ui_file_xstrdup (ui_out, NULL);
   make_cleanup (xfree, expanded);
diff --git a/gdb/printcmd.h b/gdb/printcmd.h
deleted file mode 100644 (file)
index 0a1c2a9..0000000
+++ /dev/null
@@ -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_ */
index 987edcc..2d675ce 100644 (file)
@@ -51,7 +51,6 @@
 #include "ax.h"
 #include "ax-gdb.h"
 #include "memrange.h"
-#include "printcmd.h"
 
 /* readline include files */
 #include "readline/readline.h"
@@ -764,28 +763,6 @@ validate_actionline (char **line, struct breakpoint *t)
        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))
     ;
 
@@ -1497,22 +1474,6 @@ encode_actions_1 (struct command_line *action,
          encode_actions_1 (action->body_list[0], t, tloc, frame_reg,
                            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
        error (_("Invalid tracepoint command '%s'"), action->line);
     }                          /* for */