Copyright updates for 2007.
[deliverable/binutils-gdb.git] / gdb / printcmd.c
index c98a7f4af0de8507d2fdb8fa05d88dbc1bc5bfad..155dff1a59a7dda5adcefa215de67f9fedb6490c 100644 (file)
@@ -1,7 +1,7 @@
 /* Print values for GNU debugger GDB.
 
-   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
-   1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+   Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
+   1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
    Free Software Foundation, Inc.
 
    This file is part of GDB.
@@ -18,8 +18,8 @@
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 #include "defs.h"
 #include "gdb_string.h"
@@ -83,10 +83,26 @@ static struct value *last_examine_value;
    printed as `0x1234 <symbol+offset>'.  */
 
 static unsigned int max_symbolic_offset = UINT_MAX;
+static void
+show_max_symbolic_offset (struct ui_file *file, int from_tty,
+                         struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file, _("\
+The largest offset that will be printed in <symbol+1234> form is %s.\n"),
+                   value);
+}
 
 /* Append the source filename and linenumber of the symbol when
    printing a symbolic value as `<symbol at filename:linenum>' if set.  */
 static int print_symbol_filename = 0;
+static void
+show_print_symbol_filename (struct ui_file *file, int from_tty,
+                           struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file, _("\
+Printing of source filename and line number with <symbol> is %s.\n"),
+                   value);
+}
 
 /* Number of auto-display expression currently being displayed.
    So that we can disable it if we get an error or a signal within it.
@@ -132,45 +148,7 @@ void _initialize_printcmd (void);
 
 /* Prototypes for local functions. */
 
-static void delete_display (int);
-
-static void enable_display (char *, int);
-
-static void disable_display_command (char *, int);
-
-static void printf_command (char *, int);
-
-static void display_info (char *, int);
-
 static void do_one_display (struct display *);
-
-static void undisplay_command (char *, int);
-
-static void free_display (struct display *);
-
-static void display_command (char *, int);
-
-void x_command (char *, int);
-
-static void address_info (char *, int);
-
-static void set_command (char *, int);
-
-static void call_command (char *, int);
-
-static void inspect_command (char *, int);
-
-static void print_command (char *, int);
-
-static void print_command_1 (char *, int, int);
-
-static void validate_format (struct format_data, char *);
-
-static void print_formatted (struct value *, int, int, struct ui_file *);
-
-static struct format_data decode_format (char **, int, int);
-
-static void sym_info (char *, int);
 \f
 
 /* Decode a format specification.  *STRING_PTR should point to it.
@@ -241,8 +219,9 @@ decode_format (char **string_ptr, int oformat, int osize)
        else if (TARGET_PTR_BIT == 16)
          val.size = osize ? 'h' : osize;
        else
-         /* Bad value for TARGET_PTR_BIT */
-         internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
+         /* Bad value for TARGET_PTR_BIT.  */
+         internal_error (__FILE__, __LINE__,
+                         _("failed internal consistency check"));
        break;
       case 'f':
        /* Floating point has to be word or giantword.  */
@@ -279,9 +258,7 @@ print_formatted (struct value *val, int format, int size,
   int len = TYPE_LENGTH (type);
 
   if (VALUE_LVAL (val) == lval_memory)
-    {
-      next_address = VALUE_ADDRESS (val) + len;
-    }
+    next_address = VALUE_ADDRESS (val) + len;
 
   switch (format)
     {
@@ -311,16 +288,13 @@ print_formatted (struct value *val, int format, int size,
          || TYPE_CODE (type) == TYPE_CODE_STRUCT
          || TYPE_CODE (type) == TYPE_CODE_UNION
          || TYPE_CODE (type) == TYPE_CODE_NAMESPACE)
-       /* If format is 0, use the 'natural' format for
-        * that type of value.  If the type is non-scalar,
-        * we have to use language rules to print it as
-        * a series of scalars.
-        */
+       /* If format is 0, use the 'natural' format for that type of
+          value.  If the type is non-scalar, we have to use language
+          rules to print it as a series of scalars.  */
        value_print (val, stream, format, Val_pretty_default);
       else
-       /* User specified format, so don't look to the
-        * the type to tell us what to do.
-        */
+       /* User specified format, so don't look to the the type to
+          tell us what to do.  */
        print_scalar_formatted (value_contents (val), type,
                                format, size, stream);
     }
@@ -390,7 +364,7 @@ print_scalar_formatted (const void *valaddr, struct type *type,
     case 'x':
       if (!size)
        {
-         /* no size specified, like in print.  Print varying # of digits. */
+         /* No size specified, like in print.  Print varying # of digits.  */
          print_longest (stream, 'x', 1, val_long);
        }
       else
@@ -445,7 +419,8 @@ print_scalar_formatted (const void *valaddr, struct type *type,
       break;
 
     case 0:
-      internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
+      internal_error (__FILE__, __LINE__,
+                     _("failed internal consistency check"));
 
     case 't':
       /* Binary; 't' stands for "two".  */
@@ -500,7 +475,7 @@ print_scalar_formatted (const void *valaddr, struct type *type,
 }
 
 /* Specify default address for `x' command.
-   `info lines' uses this.  */
+   The `info lines' command uses this.  */
 
 void
 set_next_address (CORE_ADDR addr)
@@ -522,8 +497,8 @@ set_next_address (CORE_ADDR addr)
    settings of the demangle and asm_demangle variables.  */
 
 void
-print_address_symbolic (CORE_ADDR addr, struct ui_file *stream, int do_demangle,
-                       char *leadin)
+print_address_symbolic (CORE_ADDR addr, struct ui_file *stream,
+                       int do_demangle, char *leadin)
 {
   char *name = NULL;
   char *filename = NULL;
@@ -531,11 +506,12 @@ print_address_symbolic (CORE_ADDR addr, struct ui_file *stream, int do_demangle,
   int offset = 0;
   int line = 0;
 
-  /* throw away both name and filename */
+  /* Throw away both name and filename.  */
   struct cleanup *cleanup_chain = make_cleanup (free_current_contents, &name);
   make_cleanup (free_current_contents, &filename);
 
-  if (build_address_symbolic (addr, do_demangle, &name, &offset, &filename, &line, &unmapped))
+  if (build_address_symbolic (addr, do_demangle, &name, &offset,
+                             &filename, &line, &unmapped))
     {
       do_cleanups (cleanup_chain);
       return;
@@ -589,11 +565,11 @@ build_address_symbolic (CORE_ADDR addr,  /* IN */
   asection *section = 0;
   char *name_temp = "";
   
-  /* Let's say it is unmapped. */
+  /* Let's say it is unmapped.  */
   *unmapped = 0;
 
   /* Determine if the address is in an overlay, and whether it is
-     mapped. */
+     mapped.  */
   if (overlay_debugging)
     {
       section = find_pc_overlay (addr);
@@ -718,7 +694,8 @@ print_address (CORE_ADDR addr, struct ui_file *stream)
    or not.  */
 
 void
-print_address_demangle (CORE_ADDR addr, struct ui_file *stream, int do_demangle)
+print_address_demangle (CORE_ADDR addr, struct ui_file *stream,
+                       int do_demangle)
 {
   if (addr == 0)
     {
@@ -842,10 +819,9 @@ validate_format (struct format_data fmt, char *cmdname)
           fmt.format, cmdname);
 }
 
-/*  Evaluate string EXP as an expression in the current language and
+/* Evaluate string EXP as an expression in the current language and
    print the resulting value.  EXP may contain a format specifier as the
-   first argument ("/x myvar" for example, to print myvar in hex).
- */
+   first argument ("/x myvar" for example, to print myvar in hex).  */
 
 static void
 print_command_1 (char *exp, int inspect, int voidprint)
@@ -857,7 +833,8 @@ print_command_1 (char *exp, int inspect, int voidprint)
   struct format_data fmt;
   int cleanup = 0;
 
-  /* Pass inspect flag to the rest of the print routines in a global (sigh). */
+  /* Pass inspect flag to the rest of the print routines in a global
+     (sigh).  */
   inspect_it = inspect;
 
   if (exp && *exp == '/')
@@ -896,7 +873,8 @@ print_command_1 (char *exp, int inspect, int voidprint)
        annotate_value_begin (value_type (val));
 
       if (inspect)
-       printf_unfiltered ("\031(gdb-makebuffer \"%s\"  %d '(\"", exp, histindex);
+       printf_unfiltered ("\031(gdb-makebuffer \"%s\"  %d '(\"",
+                          exp, histindex);
       else if (histindex >= 0)
        printf_filtered ("$%d = ", histindex);
 
@@ -917,7 +895,7 @@ print_command_1 (char *exp, int inspect, int voidprint)
 
   if (cleanup)
     do_cleanups (old_chain);
-  inspect_it = 0;              /* Reset print routines to normal */
+  inspect_it = 0;              /* Reset print routines to normal */
 }
 
 static void
@@ -926,7 +904,7 @@ print_command (char *exp, int from_tty)
   print_command_1 (exp, 0, 1);
 }
 
-/* Same as print, except in epoch, it gets its own window */
+/* Same as print, except in epoch, it gets its own window */
 static void
 inspect_command (char *exp, int from_tty)
 {
@@ -935,7 +913,7 @@ inspect_command (char *exp, int from_tty)
   print_command_1 (exp, epoch_interface, 1);
 }
 
-/* Same as print, except it doesn't print void results. */
+/* Same as print, except it doesn't print void results.  */
 static void
 call_command (char *exp, int from_tty)
 {
@@ -951,6 +929,8 @@ output_command (char *exp, int from_tty)
   struct value *val;
   struct format_data fmt;
 
+  fmt.size = 0;
+
   if (exp && *exp == '/')
     {
       exp++;
@@ -1003,6 +983,11 @@ sym_info (char *arg, int from_tty)
   addr = parse_and_eval_address (arg);
   ALL_OBJSECTIONS (objfile, osect)
   {
+    /* Only process each object file once, even if there's a separate
+       debug file.  */
+    if (objfile->separate_debug_objfile_backlink)
+      continue;
+
     sect = osect->the_bfd_section;
     sect_addr = overlay_mapped_address (addr, sect);
 
@@ -1163,7 +1148,8 @@ address_info (char *exp, int from_tty)
       break;
 
     case LOC_REGPARM_ADDR:
-      printf_filtered (_("address of an argument in register %s"), REGISTER_NAME (val));
+      printf_filtered (_("address of an argument in register %s"),
+                      REGISTER_NAME (val));
       break;
 
     case LOC_ARG:
@@ -1198,8 +1184,8 @@ address_info (char *exp, int from_tty)
 
     case LOC_BLOCK:
       printf_filtered (_("a function at address "));
-      deprecated_print_address_numeric (load_addr = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)),
-                            1, gdb_stdout);
+      load_addr = BLOCK_START (SYMBOL_BLOCK_VALUE (sym));
+      deprecated_print_address_numeric (load_addr, 1, gdb_stdout);
       if (section_is_overlay (section))
        {
          load_addr = overlay_unmapped_address (load_addr, section);
@@ -1220,8 +1206,8 @@ address_info (char *exp, int from_tty)
          {
            section = SYMBOL_BFD_SECTION (msym);
            printf_filtered (_("static storage at address "));
-           deprecated_print_address_numeric (load_addr = SYMBOL_VALUE_ADDRESS (msym),
-                                  1, gdb_stdout);
+           load_addr = SYMBOL_VALUE_ADDRESS (msym);
+           deprecated_print_address_numeric (load_addr, 1, gdb_stdout);
            if (section_is_overlay (section))
              {
                load_addr = overlay_unmapped_address (load_addr, section);
@@ -1234,9 +1220,9 @@ address_info (char *exp, int from_tty)
       break;
 
     case LOC_HP_THREAD_LOCAL_STATIC:
-      printf_filtered (
-                       "a thread-local variable at offset %ld from the thread base register %s",
-                       val, REGISTER_NAME (basereg));
+      printf_filtered (_("\
+a thread-local variable at offset %ld from the thread base register %s"),
+                      val, REGISTER_NAME (basereg));
       break;
 
     case LOC_OPTIMIZED_OUT:
@@ -1250,7 +1236,8 @@ address_info (char *exp, int from_tty)
   printf_filtered (".\n");
 }
 \f
-void
+
+static void
 x_command (char *exp, int from_tty)
 {
   struct expression *expr;
@@ -1273,9 +1260,9 @@ x_command (char *exp, int from_tty)
   if (exp != 0 && *exp != 0)
     {
       expr = parse_expression (exp);
-      /* Cause expression not to be there any more
-         if this command is repeated with Newline.
-         But don't clobber a user-defined command's definition.  */
+      /* Cause expression not to be there any more if this command is
+         repeated with Newline.  But don't clobber a user-defined
+         command's definition.  */
       if (from_tty)
        *exp = 0;
       old_chain = make_cleanup (free_current_contents, &expr);
@@ -1295,7 +1282,8 @@ x_command (char *exp, int from_tty)
 
   do_examine (fmt, next_address);
 
-  /* If the examine succeeds, we remember its size and format for next time.  */
+  /* If the examine succeeds, we remember its size and format for next
+     time.  */
   last_size = fmt.size;
   last_format = fmt.format;
 
@@ -1310,9 +1298,10 @@ x_command (char *exp, int from_tty)
                       value_from_pointer (pointer_type,
                                           last_examine_address));
 
-      /* Make contents of last address examined available to the user as $__. */
-      /* If the last value has not been fetched from memory then don't
-         fetch it now - instead mark it by voiding the $__ variable. */
+      /* Make contents of last address examined available to the user
+        as $__.  If the last value has not been fetched from memory
+        then don't fetch it now; instead mark it by voiding the $__
+        variable.  */
       if (value_lazy (last_examine_value))
        set_internalvar (lookup_internalvar ("__"),
                         allocate_value (builtin_type_void));
@@ -1391,9 +1380,8 @@ free_display (struct display *d)
   xfree (d);
 }
 
-/* Clear out the display_chain.
-   Done when new symtabs are loaded, since this invalidates
-   the types stored in many expressions.  */
+/* Clear out the display_chain.  Done when new symtabs are loaded,
+   since this invalidates the types stored in many expressions.  */
 
 void
 clear_displays (void)
@@ -1597,7 +1585,8 @@ disable_current_display (void)
   if (current_display_number >= 0)
     {
       disable_display (current_display_number);
-      fprintf_unfiltered (gdb_stderr, "Disabling display %d to avoid infinite recursion.\n",
+      fprintf_unfiltered (gdb_stderr, _("\
+Disabling display %d to avoid infinite recursion.\n"),
                          current_display_number);
     }
   current_display_number = -1;
@@ -1698,8 +1687,8 @@ disable_display_command (char *args, int from_tty)
 }
 \f
 
-/* Print the value in stack frame FRAME of a variable
-   specified by a struct symbol.  */
+/* Print the value in stack frame FRAME of a variable specified by a
+   struct symbol.  */
 
 void
 print_variable_value (struct symbol *var, struct frame_info *frame,
@@ -1723,8 +1712,7 @@ printf_command (char *arg, int from_tty)
   int allocated_args = 20;
   struct cleanup *old_cleanups;
 
-  val_args = (struct value **) xmalloc (allocated_args
-                                       * sizeof (struct value *));
+  val_args = xmalloc (allocated_args * sizeof (struct value *));
   old_cleanups = make_cleanup (free_current_contents, &val_args);
 
   if (s == 0)
@@ -1734,7 +1722,7 @@ printf_command (char *arg, int from_tty)
   while (*s == ' ' || *s == '\t')
     s++;
 
-  /* A format string should follow, enveloped in double quotes */
+  /* A format string should follow, enveloped in double quotes */
   if (*s++ != '"')
     error (_("Bad format string, missing '\"'."));
 
@@ -1818,13 +1806,13 @@ printf_command (char *arg, int from_tty)
 
     enum argclass
       {
-       no_arg, int_arg, string_arg, double_arg, long_long_arg
+       int_arg, long_arg, long_long_arg, ptr_arg, string_arg,
+       double_arg, long_double_arg
       };
     enum argclass *argclass;
     enum argclass this_argclass;
     char *last_arg;
     int nargs_wanted;
-    int lcount;
     int i;
 
     argclass = (enum argclass *) alloca (strlen (s) * sizeof *argclass);
@@ -1834,23 +1822,136 @@ printf_command (char *arg, int from_tty)
     while (*f)
       if (*f++ == '%')
        {
-         lcount = 0;
-         while (strchr ("0123456789.hlL-+ #", *f))
+         int seen_hash = 0, seen_zero = 0, lcount = 0, seen_prec = 0;
+         int seen_space = 0, seen_plus = 0;
+         int seen_big_l = 0, seen_h = 0;
+         int bad = 0;
+
+         /* Check the validity of the format specifier, and work
+            out what argument it expects.  We only accept C89
+            format strings, with the exception of long long (which
+            we autoconf for).  */
+
+         /* Skip over "%%".  */
+         if (*f == '%')
+           {
+             f++;
+             continue;
+           }
+
+         /* The first part of a format specifier is a set of flag
+            characters.  */
+         while (strchr ("0-+ #", *f))
+           {
+             if (*f == '#')
+               seen_hash = 1;
+             else if (*f == '0')
+               seen_zero = 1;
+             else if (*f == ' ')
+               seen_space = 1;
+             else if (*f == '+')
+               seen_plus = 1;
+             f++;
+           }
+
+         /* The next part of a format specifier is a width.  */
+         while (strchr ("0123456789", *f))
+           f++;
+
+         /* The next part of a format specifier is a precision.  */
+         if (*f == '.')
+           {
+             seen_prec = 1;
+             f++;
+             while (strchr ("0123456789", *f))
+               f++;
+           }
+
+         /* The next part of a format specifier is a length modifier.  */
+         if (*f == 'h')
+           {
+             seen_h = 1;
+             f++;
+           }
+         else if (*f == 'l')
+           {
+             f++;
+             lcount++;
+             if (*f == 'l')
+               {
+                 f++;
+                 lcount++;
+               }
+           }
+         else if (*f == 'L')
            {
-             if (*f == 'l' || *f == 'L')
-               lcount++;
+             seen_big_l = 1;
              f++;
            }
+
          switch (*f)
            {
+           case 'u':
+             if (seen_hash)
+               bad = 1;
+             /* FALLTHROUGH */
+
+           case 'o':
+           case 'x':
+           case 'X':
+             if (seen_space || seen_plus)
+               bad = 1;
+             /* FALLTHROUGH */
+
+           case 'd':
+           case 'i':
+             if (lcount == 0)
+               this_argclass = int_arg;
+             else if (lcount == 1)
+               this_argclass = long_arg;
+             else
+               this_argclass = long_long_arg;
+
+             if (seen_big_l)
+               bad = 1;
+             break;
+
+           case 'c':
+             this_argclass = int_arg;
+             if (lcount || seen_h || seen_big_l)
+               bad = 1;
+             if (seen_prec || seen_zero || seen_space || seen_plus)
+               bad = 1;
+             break;
+
+           case 'p':
+             this_argclass = ptr_arg;
+             if (lcount || seen_h || seen_big_l)
+               bad = 1;
+             if (seen_prec || seen_zero || seen_space || seen_plus)
+               bad = 1;
+             break;
+
            case 's':
              this_argclass = string_arg;
+             if (lcount || seen_h || seen_big_l)
+               bad = 1;
+             if (seen_zero || seen_space || seen_plus)
+               bad = 1;
              break;
 
            case 'e':
            case 'f':
            case 'g':
-             this_argclass = double_arg;
+           case 'E':
+           case 'G':
+             if (seen_big_l)
+               this_argclass = long_double_arg;
+             else
+               this_argclass = double_arg;
+
+             if (lcount || seen_h)
+               bad = 1;
              break;
 
            case '*':
@@ -1859,26 +1960,23 @@ printf_command (char *arg, int from_tty)
            case 'n':
              error (_("Format specifier `n' not supported in printf"));
 
-           case '%':
-             this_argclass = no_arg;
-             break;
+           case '\0':
+             error (_("Incomplete format specifier at end of format string"));
 
            default:
-             if (lcount > 1)
-               this_argclass = long_long_arg;
-             else
-               this_argclass = int_arg;
-             break;
+             error (_("Unrecognized format specifier '%c' in printf"), *f);
            }
+
+         if (bad)
+           error (_("Inappropriate modifiers to format specifier '%c' in printf"),
+                  *f);
+
          f++;
-         if (this_argclass != no_arg)
-           {
-             strncpy (current_substring, last_arg, f - last_arg);
-             current_substring += f - last_arg;
-             *current_substring++ = '\0';
-             last_arg = f;
-             argclass[nargs_wanted++] = this_argclass;
-           }
+         strncpy (current_substring, last_arg, f - last_arg);
+         current_substring += f - last_arg;
+         *current_substring++ = '\0';
+         last_arg = f;
+         argclass[nargs_wanted++] = this_argclass;
        }
 
     /* Now, parse all arguments and evaluate them.
@@ -1922,7 +2020,7 @@ printf_command (char *arg, int from_tty)
          {
          case string_arg:
            {
-             char *str;
+             gdb_byte *str;
              CORE_ADDR tem;
              int j;
              tem = value_as_address (val_args[i]);
@@ -1930,7 +2028,7 @@ printf_command (char *arg, int from_tty)
              /* This is a %s argument.  Find the length of the string.  */
              for (j = 0;; j++)
                {
-                 char c;
+                 gdb_byte c;
                  QUIT;
                  read_memory (tem + j, &c, 1);
                  if (c == 0)
@@ -1938,12 +2036,12 @@ printf_command (char *arg, int from_tty)
                }
 
              /* Copy the string contents into a string inside GDB.  */
-             str = (char *) alloca (j + 1);
+             str = (gdb_byte *) alloca (j + 1);
              if (j != 0)
                read_memory (tem, str, j);
              str[j] = 0;
 
-             printf_filtered (current_substring, str);
+             printf_filtered (current_substring, (char *) str);
            }
            break;
          case double_arg:
@@ -1952,6 +2050,16 @@ printf_command (char *arg, int from_tty)
              printf_filtered (current_substring, val);
              break;
            }
+         case long_double_arg:
+#ifdef HAVE_LONG_DOUBLE
+           {
+             long double val = value_as_double (val_args[i]);
+             printf_filtered (current_substring, val);
+             break;
+           }
+#else
+           error (_("long double not supported in printf"));
+#endif
          case long_long_arg:
 #if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG)
            {
@@ -1964,13 +2072,19 @@ printf_command (char *arg, int from_tty)
 #endif
          case int_arg:
            {
-             /* FIXME: there should be separate int_arg and long_arg.  */
+             int val = value_as_long (val_args[i]);
+             printf_filtered (current_substring, val);
+             break;
+           }
+         case long_arg:
+           {
              long val = value_as_long (val_args[i]);
              printf_filtered (current_substring, val);
              break;
            }
-         default:              /* purecov: deadcode */
-           error (_("internal error in printf_command"));              /* purecov: deadcode */
+         default:
+           internal_error (__FILE__, __LINE__,
+                           _("failed internal consitency check"));
          }
        /* Skip to the next substring.  */
        current_substring += strlen (current_substring) + 1;
@@ -2128,18 +2242,20 @@ Same as \"print\" command, except that if you are running in the epoch\n\
 environment, the value is printed in its own window."));
   set_cmd_completer (c, location_completer);
 
-  deprecated_add_show_from_set
-    (add_set_cmd ("max-symbolic-offset", no_class, var_uinteger,
-                 (char *) &max_symbolic_offset,
-       "Set the largest offset that will be printed in <symbol+1234> form.",
-                 &setprintlist),
-     &showprintlist);
-  deprecated_add_show_from_set
-    (add_set_cmd ("symbol-filename", no_class, var_boolean,
-                 (char *) &print_symbol_filename, "\
-Set printing of source filename and line number with <symbol>.",
-                 &setprintlist),
-     &showprintlist);
+  add_setshow_uinteger_cmd ("max-symbolic-offset", no_class,
+                           &max_symbolic_offset, _("\
+Set the largest offset that will be printed in <symbol+1234> form."), _("\
+Show the largest offset that will be printed in <symbol+1234> form."), NULL,
+                           NULL,
+                           show_max_symbolic_offset,
+                           &setprintlist, &showprintlist);
+  add_setshow_boolean_cmd ("symbol-filename", no_class,
+                          &print_symbol_filename, _("\
+Set printing of source filename and line number with <symbol>."), _("\
+Show printing of source filename and line number with <symbol>."), NULL,
+                          NULL,
+                          show_print_symbol_filename,
+                          &setprintlist, &showprintlist);
 
   /* For examine/instruction a single byte quantity is specified as
      the data.  This avoids problems with value_at_lazy() requiring a
This page took 0.0323909999999999 seconds and 4 git commands to generate.