Home | History | Annotate | Line # | Download | only in gdb
      1   1.1  christos /* Print values for GNU debugger GDB.
      2   1.1  christos 
      3  1.11  christos    Copyright (C) 1986-2024 Free Software Foundation, Inc.
      4   1.1  christos 
      5   1.1  christos    This file is part of GDB.
      6   1.1  christos 
      7   1.1  christos    This program is free software; you can redistribute it and/or modify
      8   1.1  christos    it under the terms of the GNU General Public License as published by
      9   1.1  christos    the Free Software Foundation; either version 3 of the License, or
     10   1.1  christos    (at your option) any later version.
     11   1.1  christos 
     12   1.1  christos    This program is distributed in the hope that it will be useful,
     13   1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14   1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15   1.1  christos    GNU General Public License for more details.
     16   1.1  christos 
     17   1.1  christos    You should have received a copy of the GNU General Public License
     18   1.1  christos    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19   1.1  christos 
     20  1.11  christos #include "event-top.h"
     21  1.11  christos #include "extract-store-integer.h"
     22   1.1  christos #include "frame.h"
     23   1.1  christos #include "symtab.h"
     24   1.1  christos #include "gdbtypes.h"
     25  1.11  christos #include "top.h"
     26   1.1  christos #include "value.h"
     27   1.1  christos #include "language.h"
     28   1.9  christos #include "c-lang.h"
     29   1.1  christos #include "expression.h"
     30   1.1  christos #include "gdbcore.h"
     31  1.11  christos #include "cli/cli-cmds.h"
     32   1.1  christos #include "target.h"
     33   1.1  christos #include "breakpoint.h"
     34   1.1  christos #include "demangle.h"
     35   1.1  christos #include "gdb-demangle.h"
     36   1.1  christos #include "valprint.h"
     37   1.1  christos #include "annotate.h"
     38  1.11  christos #include "symfile.h"
     39  1.11  christos #include "objfiles.h"
     40  1.11  christos #include "completer.h"
     41   1.1  christos #include "ui-out.h"
     42   1.1  christos #include "block.h"
     43   1.1  christos #include "disasm.h"
     44   1.8  christos #include "target-float.h"
     45   1.8  christos #include "observable.h"
     46   1.1  christos #include "solist.h"
     47   1.1  christos #include "parser-defs.h"
     48   1.1  christos #include "charset.h"
     49   1.1  christos #include "arch-utils.h"
     50   1.1  christos #include "cli/cli-utils.h"
     51   1.9  christos #include "cli/cli-option.h"
     52   1.7  christos #include "cli/cli-script.h"
     53   1.8  christos #include "cli/cli-style.h"
     54   1.9  christos #include "gdbsupport/format.h"
     55   1.1  christos #include "source.h"
     56   1.9  christos #include "gdbsupport/byte-vector.h"
     57  1.11  christos #include <optional>
     58  1.11  christos #include "gdbsupport/gdb-safe-ctype.h"
     59  1.10  christos #include "gdbsupport/rsp-low.h"
     60  1.11  christos #include "inferior.h"
     61  1.10  christos 
     62  1.10  christos /* Chain containing all defined memory-tag subcommands.  */
     63  1.10  christos 
     64  1.10  christos static struct cmd_list_element *memory_tag_list;
     65   1.1  christos 
     66   1.1  christos /* Last specified output format.  */
     67   1.1  christos 
     68   1.1  christos static char last_format = 0;
     69   1.1  christos 
     70   1.1  christos /* Last specified examination size.  'b', 'h', 'w' or `q'.  */
     71   1.1  christos 
     72   1.1  christos static char last_size = 'w';
     73   1.1  christos 
     74   1.8  christos /* Last specified count for the 'x' command.  */
     75   1.8  christos 
     76   1.8  christos static int last_count;
     77   1.8  christos 
     78  1.10  christos /* Last specified tag-printing option.  */
     79  1.10  christos 
     80  1.10  christos static bool last_print_tags = false;
     81  1.10  christos 
     82   1.1  christos /* Default address to examine next, and associated architecture.  */
     83   1.1  christos 
     84   1.1  christos static struct gdbarch *next_gdbarch;
     85   1.1  christos static CORE_ADDR next_address;
     86   1.1  christos 
     87   1.1  christos /* Number of delay instructions following current disassembled insn.  */
     88   1.1  christos 
     89   1.1  christos static int branch_delay_insns;
     90   1.1  christos 
     91   1.1  christos /* Last address examined.  */
     92   1.1  christos 
     93   1.1  christos static CORE_ADDR last_examine_address;
     94   1.1  christos 
     95   1.1  christos /* Contents of last address examined.
     96   1.1  christos    This is not valid past the end of the `x' command!  */
     97   1.1  christos 
     98   1.8  christos static value_ref_ptr last_examine_value;
     99   1.1  christos 
    100   1.1  christos /* Largest offset between a symbolic value and an address, that will be
    101   1.1  christos    printed as `0x1234 <symbol+offset>'.  */
    102   1.1  christos 
    103   1.1  christos static unsigned int max_symbolic_offset = UINT_MAX;
    104   1.1  christos static void
    105   1.1  christos show_max_symbolic_offset (struct ui_file *file, int from_tty,
    106   1.1  christos 			  struct cmd_list_element *c, const char *value)
    107   1.1  christos {
    108  1.10  christos   gdb_printf (file,
    109  1.10  christos 	      _("The largest offset that will be "
    110  1.10  christos 		"printed in <symbol+1234> form is %s.\n"),
    111  1.10  christos 	      value);
    112   1.1  christos }
    113   1.1  christos 
    114   1.1  christos /* Append the source filename and linenumber of the symbol when
    115   1.1  christos    printing a symbolic value as `<symbol at filename:linenum>' if set.  */
    116   1.9  christos static bool print_symbol_filename = false;
    117   1.1  christos static void
    118   1.1  christos show_print_symbol_filename (struct ui_file *file, int from_tty,
    119   1.1  christos 			    struct cmd_list_element *c, const char *value)
    120   1.1  christos {
    121  1.10  christos   gdb_printf (file, _("Printing of source filename and "
    122  1.10  christos 		      "line number with <symbol> is %s.\n"),
    123  1.10  christos 	      value);
    124   1.1  christos }
    125   1.1  christos 
    126   1.1  christos /* Number of auto-display expression currently being displayed.
    127   1.1  christos    So that we can disable it if we get a signal within it.
    128   1.1  christos    -1 when not doing one.  */
    129   1.1  christos 
    130   1.1  christos static int current_display_number;
    131   1.1  christos 
    132   1.9  christos /* Last allocated display number.  */
    133   1.9  christos 
    134   1.9  christos static int display_number;
    135   1.9  christos 
    136   1.1  christos struct display
    137   1.1  christos   {
    138   1.9  christos     display (const char *exp_string_, expression_up &&exp_,
    139   1.9  christos 	     const struct format_data &format_, struct program_space *pspace_,
    140   1.9  christos 	     const struct block *block_)
    141   1.9  christos       : exp_string (exp_string_),
    142   1.9  christos 	exp (std::move (exp_)),
    143   1.9  christos 	number (++display_number),
    144   1.9  christos 	format (format_),
    145   1.9  christos 	pspace (pspace_),
    146   1.9  christos 	block (block_),
    147   1.9  christos 	enabled_p (true)
    148   1.9  christos     {
    149   1.9  christos     }
    150   1.1  christos 
    151   1.1  christos     /* The expression as the user typed it.  */
    152   1.9  christos     std::string exp_string;
    153   1.1  christos 
    154   1.1  christos     /* Expression to be evaluated and displayed.  */
    155   1.7  christos     expression_up exp;
    156   1.1  christos 
    157   1.1  christos     /* Item number of this auto-display item.  */
    158   1.1  christos     int number;
    159   1.1  christos 
    160   1.1  christos     /* Display format specified.  */
    161   1.1  christos     struct format_data format;
    162   1.1  christos 
    163   1.1  christos     /* Program space associated with `block'.  */
    164   1.1  christos     struct program_space *pspace;
    165   1.1  christos 
    166   1.1  christos     /* Innermost block required by this expression when evaluated.  */
    167   1.1  christos     const struct block *block;
    168   1.1  christos 
    169   1.1  christos     /* Status of this display (enabled or disabled).  */
    170   1.9  christos     bool enabled_p;
    171   1.1  christos   };
    172   1.1  christos 
    173   1.9  christos /* Expressions whose values should be displayed automatically each
    174   1.9  christos    time the program stops.  */
    175   1.1  christos 
    176   1.9  christos static std::vector<std::unique_ptr<struct display>> all_displays;
    177   1.1  christos 
    178   1.1  christos /* Prototypes for local functions.  */
    179   1.1  christos 
    180   1.1  christos static void do_one_display (struct display *);
    181   1.1  christos 
    182   1.1  christos 
    184   1.1  christos /* Decode a format specification.  *STRING_PTR should point to it.
    185   1.1  christos    OFORMAT and OSIZE are used as defaults for the format and size
    186   1.1  christos    if none are given in the format specification.
    187   1.1  christos    If OSIZE is zero, then the size field of the returned value
    188   1.1  christos    should be set only if a size is explicitly specified by the
    189   1.1  christos    user.
    190   1.1  christos    The structure returned describes all the data
    191   1.1  christos    found in the specification.  In addition, *STRING_PTR is advanced
    192   1.1  christos    past the specification and past all whitespace following it.  */
    193   1.1  christos 
    194   1.1  christos static struct format_data
    195   1.1  christos decode_format (const char **string_ptr, int oformat, int osize)
    196   1.1  christos {
    197   1.1  christos   struct format_data val;
    198   1.1  christos   const char *p = *string_ptr;
    199   1.1  christos 
    200   1.1  christos   val.format = '?';
    201   1.1  christos   val.size = '?';
    202   1.1  christos   val.count = 1;
    203  1.10  christos   val.raw = 0;
    204   1.1  christos   val.print_tags = false;
    205   1.6  christos 
    206   1.6  christos   if (*p == '-')
    207   1.6  christos     {
    208   1.6  christos       val.count = -1;
    209   1.6  christos       p++;
    210   1.1  christos     }
    211   1.6  christos   if (*p >= '0' && *p <= '9')
    212   1.1  christos     val.count *= atoi (p);
    213   1.1  christos   while (*p >= '0' && *p <= '9')
    214   1.1  christos     p++;
    215   1.1  christos 
    216   1.1  christos   /* Now process size or format letters that follow.  */
    217   1.1  christos 
    218   1.1  christos   while (1)
    219   1.1  christos     {
    220   1.1  christos       if (*p == 'b' || *p == 'h' || *p == 'w' || *p == 'g')
    221   1.1  christos 	val.size = *p++;
    222   1.1  christos       else if (*p == 'r')
    223   1.1  christos 	{
    224   1.1  christos 	  val.raw = 1;
    225   1.1  christos 	  p++;
    226  1.10  christos 	}
    227  1.10  christos       else if (*p == 'm')
    228  1.10  christos 	{
    229  1.10  christos 	  val.print_tags = true;
    230  1.10  christos 	  p++;
    231   1.1  christos 	}
    232   1.1  christos       else if (*p >= 'a' && *p <= 'z')
    233   1.1  christos 	val.format = *p++;
    234   1.1  christos       else
    235   1.1  christos 	break;
    236   1.1  christos     }
    237   1.8  christos 
    238   1.1  christos   *string_ptr = skip_spaces (p);
    239   1.1  christos 
    240   1.1  christos   /* Set defaults for format and size if not specified.  */
    241   1.1  christos   if (val.format == '?')
    242   1.1  christos     {
    243   1.1  christos       if (val.size == '?')
    244   1.1  christos 	{
    245   1.1  christos 	  /* Neither has been specified.  */
    246   1.1  christos 	  val.format = oformat;
    247   1.1  christos 	  val.size = osize;
    248   1.1  christos 	}
    249   1.1  christos       else
    250   1.1  christos 	/* If a size is specified, any format makes a reasonable
    251   1.1  christos 	   default except 'i'.  */
    252   1.1  christos 	val.format = oformat == 'i' ? 'x' : oformat;
    253   1.1  christos     }
    254   1.1  christos   else if (val.size == '?')
    255   1.1  christos     switch (val.format)
    256   1.1  christos       {
    257   1.1  christos       case 'a':
    258   1.1  christos 	/* Pick the appropriate size for an address.  This is deferred
    259   1.1  christos 	   until do_examine when we know the actual architecture to use.
    260   1.1  christos 	   A special size value of 'a' is used to indicate this case.  */
    261   1.1  christos 	val.size = osize ? 'a' : osize;
    262   1.1  christos 	break;
    263   1.1  christos       case 'f':
    264   1.1  christos 	/* Floating point has to be word or giantword.  */
    265   1.1  christos 	if (osize == 'w' || osize == 'g')
    266   1.1  christos 	  val.size = osize;
    267   1.1  christos 	else
    268   1.1  christos 	  /* Default it to giantword if the last used size is not
    269   1.1  christos 	     appropriate.  */
    270   1.1  christos 	  val.size = osize ? 'g' : osize;
    271   1.1  christos 	break;
    272   1.1  christos       case 'c':
    273   1.1  christos 	/* Characters default to one byte.  */
    274   1.1  christos 	val.size = osize ? 'b' : osize;
    275   1.1  christos 	break;
    276   1.1  christos       case 's':
    277   1.1  christos 	/* Display strings with byte size chars unless explicitly
    278   1.1  christos 	   specified.  */
    279   1.1  christos 	val.size = '\0';
    280   1.1  christos 	break;
    281   1.1  christos 
    282   1.1  christos       default:
    283   1.1  christos 	/* The default is the size most recently specified.  */
    284   1.1  christos 	val.size = osize;
    285   1.1  christos       }
    286   1.1  christos 
    287   1.1  christos   return val;
    288   1.1  christos }
    289   1.1  christos 
    290   1.1  christos /* Print value VAL on stream according to OPTIONS.
    292   1.1  christos    Do not end with a newline.
    293   1.1  christos    SIZE is the letter for the size of datum being printed.
    294   1.1  christos    This is used to pad hex numbers so they line up.  SIZE is 0
    295   1.1  christos    for print / output and set for examine.  */
    296   1.1  christos 
    297   1.1  christos static void
    298   1.1  christos print_formatted (struct value *val, int size,
    299   1.1  christos 		 const struct value_print_options *options,
    300  1.11  christos 		 struct ui_file *stream)
    301  1.10  christos {
    302   1.1  christos   struct type *type = check_typedef (val->type ());
    303  1.11  christos   int len = type->length ();
    304  1.11  christos 
    305   1.1  christos   if (val->lval () == lval_memory)
    306   1.1  christos     next_address = val->address () + len;
    307   1.1  christos 
    308   1.1  christos   if (size)
    309   1.1  christos     {
    310   1.1  christos       switch (options->format)
    311   1.1  christos 	{
    312  1.11  christos 	case 's':
    313   1.1  christos 	  {
    314  1.11  christos 	    struct type *elttype = val->type ();
    315   1.1  christos 
    316  1.11  christos 	    next_address = (val->address ()
    317   1.1  christos 			    + val_print_string (elttype, NULL,
    318   1.1  christos 						val->address (), -1,
    319   1.1  christos 						stream, options) * len);
    320   1.1  christos 	  }
    321   1.1  christos 	  return;
    322   1.1  christos 
    323  1.10  christos 	case 'i':
    324  1.11  christos 	  /* We often wrap here if there are long symbolic names.  */
    325  1.10  christos 	  stream->wrap_here (4);
    326  1.11  christos 	  next_address = (val->address ()
    327   1.1  christos 			  + gdb_print_insn (type->arch (),
    328   1.1  christos 					    val->address (), stream,
    329   1.1  christos 					    &branch_delay_insns));
    330   1.1  christos 	  return;
    331   1.1  christos 	}
    332   1.1  christos     }
    333  1.10  christos 
    334   1.9  christos   if (options->format == 0 || options->format == 's'
    335   1.9  christos       || type->code () == TYPE_CODE_VOID
    336   1.9  christos       || type->code () == TYPE_CODE_REF
    337   1.9  christos       || type->code () == TYPE_CODE_ARRAY
    338   1.9  christos       || type->code () == TYPE_CODE_STRING
    339   1.9  christos       || type->code () == TYPE_CODE_STRUCT
    340   1.1  christos       || type->code () == TYPE_CODE_UNION
    341   1.1  christos       || type->code () == TYPE_CODE_NAMESPACE)
    342   1.1  christos     value_print (val, stream, options);
    343   1.1  christos   else
    344   1.9  christos     /* User specified format, so don't look to the type to tell us
    345   1.1  christos        what to do.  */
    346   1.1  christos     value_print_scalar_formatted (val, options, size, stream);
    347   1.1  christos }
    348   1.1  christos 
    349   1.1  christos /* Return builtin floating point type of same length as TYPE.
    350   1.1  christos    If no such type is found, return TYPE itself.  */
    351   1.1  christos static struct type *
    352  1.10  christos float_type_from_length (struct type *type)
    353   1.1  christos {
    354   1.1  christos   struct gdbarch *gdbarch = type->arch ();
    355  1.11  christos   const struct builtin_type *builtin = builtin_type (gdbarch);
    356  1.11  christos 
    357  1.11  christos   if (type->length () == builtin->builtin_half->length ())
    358   1.1  christos     type = builtin->builtin_half;
    359  1.10  christos   else if (type->length () == builtin->builtin_float->length ())
    360   1.1  christos     type = builtin->builtin_float;
    361  1.10  christos   else if (type->length () == builtin->builtin_double->length ())
    362   1.1  christos     type = builtin->builtin_double;
    363   1.1  christos   else if (type->length () == builtin->builtin_long_double->length ())
    364   1.1  christos     type = builtin->builtin_long_double;
    365   1.1  christos 
    366   1.1  christos   return type;
    367   1.1  christos }
    368   1.1  christos 
    369   1.1  christos /* Print a scalar of data of type TYPE, pointed to in GDB by VALADDR,
    370   1.1  christos    according to OPTIONS and SIZE on STREAM.  Formats s and i are not
    371   1.1  christos    supported at this level.  */
    372   1.6  christos 
    373   1.1  christos void
    374   1.1  christos print_scalar_formatted (const gdb_byte *valaddr, struct type *type,
    375   1.1  christos 			const struct value_print_options *options,
    376  1.10  christos 			int size, struct ui_file *stream)
    377  1.10  christos {
    378   1.9  christos   struct gdbarch *gdbarch = type->arch ();
    379   1.1  christos   unsigned int len = type->length ();
    380   1.1  christos   enum bfd_endian byte_order = type_byte_order (type);
    381   1.1  christos 
    382   1.1  christos   /* String printing should go through val_print_scalar_formatted.  */
    383   1.1  christos   gdb_assert (options->format != 's');
    384   1.1  christos 
    385  1.10  christos   /* If the value is a pointer, and pointers and addresses are not the
    386   1.9  christos      same, then at this point, the value's length (in target bytes) is
    387   1.1  christos      gdbarch_addr_bit/TARGET_CHAR_BIT, not type->length ().  */
    388   1.1  christos   if (type->code () == TYPE_CODE_PTR)
    389   1.1  christos     len = gdbarch_addr_bit (gdbarch) / TARGET_CHAR_BIT;
    390   1.1  christos 
    391   1.1  christos   /* If we are printing it as unsigned, truncate it in case it is actually
    392   1.8  christos      a negative signed value (e.g. "print/u (short)-1" should print 65535
    393  1.10  christos      (if shorts are 16 bits) instead of 4294967295).  */
    394  1.10  christos   if (options->format != 'c'
    395  1.10  christos       && (options->format != 'd' || type->is_unsigned ()))
    396  1.10  christos     {
    397  1.10  christos       if (len < type->length () && byte_order == BFD_ENDIAN_BIG)
    398  1.10  christos 	valaddr += type->length () - len;
    399  1.10  christos     }
    400  1.10  christos 
    401  1.10  christos   /* Allow LEN == 0, and in this case, don't assume that VALADDR is
    402  1.10  christos      valid.  */
    403   1.1  christos   const gdb_byte zero = 0;
    404  1.10  christos   if (len == 0)
    405  1.10  christos     {
    406   1.1  christos       len = 1;
    407   1.1  christos       valaddr = &zero;
    408   1.8  christos     }
    409   1.1  christos 
    410   1.8  christos   if (size != 0 && (options->format == 'x' || options->format == 't'))
    411   1.8  christos     {
    412   1.8  christos       /* Truncate to fit.  */
    413   1.1  christos       unsigned newlen;
    414   1.8  christos       switch (size)
    415   1.8  christos 	{
    416   1.8  christos 	case 'b':
    417   1.8  christos 	  newlen = 1;
    418   1.8  christos 	  break;
    419   1.8  christos 	case 'h':
    420   1.8  christos 	  newlen = 2;
    421   1.8  christos 	  break;
    422   1.8  christos 	case 'w':
    423   1.8  christos 	  newlen = 4;
    424   1.8  christos 	  break;
    425   1.8  christos 	case 'g':
    426   1.8  christos 	  newlen = 8;
    427   1.8  christos 	  break;
    428   1.1  christos 	default:
    429   1.8  christos 	  error (_("Undefined output size \"%c\"."), size);
    430   1.8  christos 	}
    431   1.8  christos       if (newlen < len && byte_order == BFD_ENDIAN_BIG)
    432   1.8  christos 	valaddr += len - newlen;
    433   1.8  christos       len = newlen;
    434  1.10  christos     }
    435  1.10  christos 
    436   1.9  christos   /* Biased range types and sub-word scalar types must be handled
    437   1.9  christos      here; the value is correctly computed by unpack_long.  */
    438   1.9  christos   gdb::byte_vector converted_bytes;
    439   1.9  christos   /* Some cases below will unpack the value again.  In the biased
    440  1.11  christos      range case, we want to avoid this, so we store the unpacked value
    441  1.10  christos      here for possible use later.  */
    442   1.9  christos   std::optional<LONGEST> val_long;
    443   1.9  christos   if ((is_fixed_point_type (type)
    444   1.9  christos        && (options->format == 'o'
    445   1.9  christos 	   || options->format == 'x'
    446   1.9  christos 	   || options->format == 't'
    447   1.9  christos 	   || options->format == 'z'
    448  1.10  christos 	   || options->format == 'd'
    449  1.10  christos 	   || options->format == 'u'))
    450   1.9  christos       || (type->code () == TYPE_CODE_RANGE && type->bounds ()->bias != 0)
    451   1.9  christos       || type->bit_size_differs_p ())
    452  1.10  christos     {
    453  1.10  christos       val_long.emplace (unpack_long (type, valaddr));
    454   1.9  christos       converted_bytes.resize (type->length ());
    455   1.9  christos       store_signed_integer (converted_bytes.data (), type->length (),
    456   1.8  christos 			    byte_order, *val_long);
    457   1.8  christos       valaddr = converted_bytes.data ();
    458   1.8  christos     }
    459   1.8  christos 
    460   1.8  christos   /* Printing a non-float type as 'f' will interpret the data as if it were
    461   1.8  christos      of a floating-point type of the same length, if that exists.  Otherwise,
    462   1.9  christos      the data is printed as integer.  */
    463   1.8  christos   char format = options->format;
    464   1.8  christos   if (format == 'f' && type->code () != TYPE_CODE_FLT)
    465   1.9  christos     {
    466  1.10  christos       type = float_type_from_length (type);
    467   1.8  christos       if (type->code () != TYPE_CODE_FLT)
    468   1.8  christos 	format = 0;
    469   1.8  christos     }
    470   1.8  christos 
    471   1.8  christos   switch (format)
    472   1.8  christos     {
    473   1.1  christos     case 'o':
    474   1.1  christos       print_octal_chars (stream, valaddr, len, byte_order);
    475   1.8  christos       break;
    476   1.1  christos     case 'd':
    477   1.1  christos       print_decimal_chars (stream, valaddr, len, true, byte_order);
    478   1.8  christos       break;
    479   1.8  christos     case 'u':
    480   1.8  christos       print_decimal_chars (stream, valaddr, len, false, byte_order);
    481   1.9  christos       break;
    482   1.8  christos     case 0:
    483  1.10  christos       if (type->code () != TYPE_CODE_FLT)
    484   1.8  christos 	{
    485   1.8  christos 	  print_decimal_chars (stream, valaddr, len, !type->is_unsigned (),
    486   1.8  christos 			       byte_order);
    487  1.11  christos 	  break;
    488   1.8  christos 	}
    489   1.8  christos       [[fallthrough]];
    490   1.1  christos     case 'f':
    491   1.1  christos       print_floating (valaddr, type, stream);
    492   1.8  christos       break;
    493  1.10  christos 
    494   1.8  christos     case 't':
    495   1.8  christos       print_binary_chars (stream, valaddr, len, byte_order, size > 0, options);
    496   1.8  christos       break;
    497   1.1  christos     case 'x':
    498   1.8  christos       print_hex_chars (stream, valaddr, len, byte_order, size > 0);
    499   1.8  christos       break;
    500   1.1  christos     case 'z':
    501   1.1  christos       print_hex_chars (stream, valaddr, len, byte_order, true);
    502   1.1  christos       break;
    503   1.1  christos     case 'c':
    504   1.1  christos       {
    505   1.9  christos 	struct value_print_options opts = *options;
    506   1.9  christos 
    507   1.8  christos 	if (!val_long.has_value ())
    508   1.1  christos 	  val_long.emplace (unpack_long (type, valaddr));
    509  1.10  christos 
    510   1.1  christos 	opts.format = 0;
    511  1.10  christos 	if (type->is_unsigned ())
    512   1.1  christos 	  type = builtin_type (gdbarch)->builtin_true_unsigned_char;
    513   1.1  christos 	else
    514   1.9  christos 	  type = builtin_type (gdbarch)->builtin_true_char;
    515   1.1  christos 
    516   1.1  christos 	value_print (value_from_longest (type, *val_long), stream, &opts);
    517   1.1  christos       }
    518   1.8  christos       break;
    519   1.1  christos 
    520   1.9  christos     case 'a':
    521   1.9  christos       {
    522   1.9  christos 	if (!val_long.has_value ())
    523   1.1  christos 	  val_long.emplace (unpack_long (type, valaddr));
    524   1.1  christos 	print_address (gdbarch, *val_long, stream);
    525   1.1  christos       }
    526   1.1  christos       break;
    527   1.8  christos 
    528   1.1  christos     default:
    529   1.1  christos       error (_("Undefined output format \"%c\"."), format);
    530   1.1  christos     }
    531   1.1  christos }
    532   1.1  christos 
    533   1.1  christos /* Specify default address for `x' command.
    534   1.1  christos    The `info lines' command uses this.  */
    535   1.1  christos 
    536   1.1  christos void
    537   1.1  christos set_next_address (struct gdbarch *gdbarch, CORE_ADDR addr)
    538   1.1  christos {
    539   1.1  christos   struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
    540   1.1  christos 
    541   1.1  christos   next_gdbarch = gdbarch;
    542   1.1  christos   next_address = addr;
    543   1.1  christos 
    544   1.1  christos   /* Make address available to the user as $_.  */
    545   1.1  christos   set_internalvar (lookup_internalvar ("_"),
    546   1.1  christos 		   value_from_pointer (ptr_type, addr));
    547   1.1  christos }
    548   1.1  christos 
    549   1.1  christos /* Optionally print address ADDR symbolically as <SYMBOL+OFFSET> on STREAM,
    550   1.1  christos    after LEADIN.  Print nothing if no symbolic name is found nearby.
    551   1.1  christos    Optionally also print source file and line number, if available.
    552   1.1  christos    DO_DEMANGLE controls whether to print a symbol in its native "raw" form,
    553   1.1  christos    or to interpret it as a possible C++ name and convert it back to source
    554   1.1  christos    form.  However note that DO_DEMANGLE can be overridden by the specific
    555   1.1  christos    settings of the demangle and asm_demangle variables.  Returns
    556   1.1  christos    non-zero if anything was printed; zero otherwise.  */
    557   1.1  christos 
    558   1.1  christos int
    559   1.7  christos print_address_symbolic (struct gdbarch *gdbarch, CORE_ADDR addr,
    560   1.1  christos 			struct ui_file *stream,
    561   1.8  christos 			int do_demangle, const char *leadin)
    562   1.1  christos {
    563   1.1  christos   std::string name, filename;
    564   1.1  christos   int unmapped = 0;
    565   1.1  christos   int offset = 0;
    566   1.9  christos   int line = 0;
    567  1.10  christos 
    568   1.8  christos   if (build_address_symbolic (gdbarch, addr, do_demangle, false, &name,
    569   1.1  christos 			      &offset, &filename, &line, &unmapped))
    570  1.10  christos     return 0;
    571   1.1  christos 
    572  1.10  christos   gdb_puts (leadin, stream);
    573   1.1  christos   if (unmapped)
    574  1.10  christos     gdb_puts ("<*", stream);
    575   1.8  christos   else
    576   1.1  christos     gdb_puts ("<", stream);
    577  1.10  christos   fputs_styled (name.c_str (), function_name_style.style (), stream);
    578   1.1  christos   if (offset != 0)
    579   1.1  christos     gdb_printf (stream, "%+d", offset);
    580   1.1  christos 
    581   1.8  christos   /* Append source filename and line number if desired.  Give specific
    582   1.1  christos      line # of this addr, if we have it; else line # of the nearest symbol.  */
    583  1.10  christos   if (print_symbol_filename && !filename.empty ())
    584   1.8  christos     {
    585   1.1  christos       gdb_puts (line == -1 ? " in " : " at ", stream);
    586  1.10  christos       fputs_styled (filename.c_str (), file_name_style.style (), stream);
    587   1.1  christos       if (line != -1)
    588   1.1  christos 	gdb_printf (stream, ":%d", line);
    589  1.10  christos     }
    590   1.1  christos   if (unmapped)
    591  1.10  christos     gdb_puts ("*>", stream);
    592   1.1  christos   else
    593   1.1  christos     gdb_puts (">", stream);
    594   1.1  christos 
    595   1.1  christos   return 1;
    596   1.8  christos }
    597   1.8  christos 
    598   1.1  christos /* See valprint.h.  */
    599   1.1  christos 
    600   1.1  christos int
    601   1.9  christos build_address_symbolic (struct gdbarch *gdbarch,
    602   1.9  christos 			CORE_ADDR addr,  /* IN */
    603   1.8  christos 			bool do_demangle, /* IN */
    604   1.1  christos 			bool prefer_sym_over_minsym, /* IN */
    605   1.8  christos 			std::string *name, /* OUT */
    606   1.1  christos 			int *offset,     /* OUT */
    607   1.1  christos 			std::string *filename, /* OUT */
    608   1.1  christos 			int *line,       /* OUT */
    609   1.1  christos 			int *unmapped)   /* OUT */
    610   1.1  christos {
    611   1.1  christos   struct symbol *symbol;
    612   1.1  christos   CORE_ADDR name_location = 0;
    613   1.1  christos   struct obj_section *section = NULL;
    614   1.1  christos   const char *name_temp = "";
    615   1.1  christos 
    616   1.1  christos   /* Let's say it is mapped (not unmapped).  */
    617   1.1  christos   *unmapped = 0;
    618   1.1  christos 
    619   1.1  christos   /* Determine if the address is in an overlay, and whether it is
    620   1.1  christos      mapped.  */
    621   1.1  christos   if (overlay_debugging)
    622   1.1  christos     {
    623   1.1  christos       section = find_pc_overlay (addr);
    624   1.1  christos       if (pc_in_unmapped_range (addr, section))
    625   1.1  christos 	{
    626   1.1  christos 	  *unmapped = 1;
    627   1.1  christos 	  addr = overlay_mapped_address (addr, section);
    628   1.1  christos 	}
    629   1.9  christos     }
    630   1.9  christos 
    631   1.9  christos   /* Try to find the address in both the symbol table and the minsyms.
    632   1.9  christos      In most cases, we'll prefer to use the symbol instead of the
    633   1.1  christos      minsym.  However, there are cases (see below) where we'll choose
    634   1.1  christos      to use the minsym instead.  */
    635   1.1  christos 
    636   1.1  christos   /* This is defective in the sense that it only finds text symbols.  So
    637   1.1  christos      really this is kind of pointless--we should make sure that the
    638   1.1  christos      minimal symbols have everything we need (by changing that we could
    639   1.1  christos      save some memory, but for many debug format--ELF/DWARF or
    640  1.12  christos      anything/stabs--it would be inconvenient to eliminate those minimal
    641  1.12  christos      symbols anyway).  */
    642   1.1  christos   bound_minimal_symbol msymbol
    643   1.1  christos     = lookup_minimal_symbol_by_pc_section (addr, section);
    644   1.1  christos   symbol = find_pc_sect_function (addr, section);
    645   1.1  christos 
    646   1.1  christos   if (symbol)
    647   1.1  christos     {
    648   1.1  christos       /* If this is a function (i.e. a code address), strip out any
    649   1.1  christos 	 non-address bits.  For instance, display a pointer to the
    650   1.1  christos 	 first instruction of a Thumb function as <function>; the
    651   1.1  christos 	 second instruction will be <function+2>, even though the
    652   1.1  christos 	 pointer is <function+3>.  This matches the ISA behavior.  */
    653  1.10  christos       addr = gdbarch_addr_bits_remove (gdbarch, addr);
    654   1.1  christos 
    655   1.9  christos       name_location = symbol->value_block ()->entry_pc ();
    656   1.1  christos       if (do_demangle || asm_demangle)
    657   1.9  christos 	name_temp = symbol->print_name ();
    658   1.1  christos       else
    659   1.1  christos 	name_temp = symbol->linkage_name ();
    660   1.3  christos     }
    661  1.10  christos 
    662  1.10  christos   if (msymbol.minsym != NULL
    663  1.10  christos       && msymbol.minsym->has_size ()
    664  1.10  christos       && msymbol.minsym->size () == 0
    665  1.10  christos       && msymbol.minsym->type () != mst_text
    666   1.3  christos       && msymbol.minsym->type () != mst_text_gnu_ifunc
    667   1.1  christos       && msymbol.minsym->type () != mst_file_text)
    668   1.3  christos     msymbol.minsym = NULL;
    669   1.1  christos 
    670   1.9  christos   if (msymbol.minsym != NULL)
    671   1.9  christos     {
    672   1.9  christos       /* Use the minsym if no symbol is found.
    673   1.9  christos 
    674   1.9  christos 	 Additionally, use the minsym instead of a (found) symbol if
    675   1.9  christos 	 the following conditions all hold:
    676   1.9  christos 	   1) The prefer_sym_over_minsym flag is false.
    677   1.9  christos 	   2) The minsym address is identical to that of the address under
    678   1.9  christos 	      consideration.
    679   1.9  christos 	   3) The symbol address is not identical to that of the address
    680  1.10  christos 	      under consideration.  */
    681  1.10  christos       if (symbol == NULL ||
    682   1.9  christos 	   (!prefer_sym_over_minsym
    683   1.1  christos 	    && msymbol.value_address () == addr
    684   1.1  christos 	    && name_location != addr))
    685   1.1  christos 	{
    686   1.1  christos 	  /* If this is a function (i.e. a code address), strip out any
    687   1.1  christos 	     non-address bits.  For instance, display a pointer to the
    688   1.1  christos 	     first instruction of a Thumb function as <function>; the
    689  1.10  christos 	     second instruction will be <function+2>, even though the
    690  1.10  christos 	     pointer is <function+3>.  This matches the ISA behavior.  */
    691  1.10  christos 	  if (msymbol.minsym->type () == mst_text
    692  1.10  christos 	      || msymbol.minsym->type () == mst_text_gnu_ifunc
    693   1.1  christos 	      || msymbol.minsym->type () == mst_file_text
    694   1.1  christos 	      || msymbol.minsym->type () == mst_solib_trampoline)
    695   1.1  christos 	    addr = gdbarch_addr_bits_remove (gdbarch, addr);
    696  1.10  christos 
    697   1.1  christos 	  symbol = 0;
    698   1.9  christos 	  name_location = msymbol.value_address ();
    699   1.1  christos 	  if (do_demangle || asm_demangle)
    700   1.9  christos 	    name_temp = msymbol.minsym->print_name ();
    701   1.1  christos 	  else
    702   1.1  christos 	    name_temp = msymbol.minsym->linkage_name ();
    703   1.3  christos 	}
    704   1.1  christos     }
    705   1.1  christos   if (symbol == NULL && msymbol.minsym == NULL)
    706   1.1  christos     return 1;
    707   1.1  christos 
    708   1.1  christos   /* If the nearest symbol is too far away, don't print anything symbolic.  */
    709   1.1  christos 
    710   1.1  christos   /* For when CORE_ADDR is larger than unsigned int, we do math in
    711   1.1  christos      CORE_ADDR.  But when we detect unsigned wraparound in the
    712   1.1  christos      CORE_ADDR math, we ignore this test and print the offset,
    713   1.1  christos      because addr+max_symbolic_offset has wrapped through the end
    714   1.1  christos      of the address space back to the beginning, giving bogus comparison.  */
    715   1.1  christos   if (addr > name_location + max_symbolic_offset
    716   1.1  christos       && name_location + max_symbolic_offset > name_location)
    717   1.9  christos     return 1;
    718   1.1  christos 
    719   1.8  christos   *offset = (LONGEST) addr - name_location;
    720   1.1  christos 
    721   1.1  christos   *name = name_temp;
    722   1.1  christos 
    723   1.1  christos   if (print_symbol_filename)
    724   1.1  christos     {
    725   1.1  christos       struct symtab_and_line sal;
    726   1.1  christos 
    727   1.1  christos       sal = find_pc_sect_line (addr, section, 0);
    728   1.1  christos 
    729   1.8  christos       if (sal.symtab)
    730   1.1  christos 	{
    731   1.1  christos 	  *filename = symtab_to_filename_for_display (sal.symtab);
    732   1.1  christos 	  *line = sal.line;
    733   1.1  christos 	}
    734   1.1  christos     }
    735   1.1  christos   return 0;
    736   1.1  christos }
    737   1.1  christos 
    738   1.1  christos 
    739   1.1  christos /* Print address ADDR symbolically on STREAM.
    740   1.1  christos    First print it as a number.  Then perhaps print
    741   1.1  christos    <SYMBOL + OFFSET> after the number.  */
    742   1.1  christos 
    743   1.1  christos void
    744   1.1  christos print_address (struct gdbarch *gdbarch,
    745   1.8  christos 	       CORE_ADDR addr, struct ui_file *stream)
    746   1.1  christos {
    747   1.1  christos   fputs_styled (paddress (gdbarch, addr), address_style.style (), stream);
    748   1.1  christos   print_address_symbolic (gdbarch, addr, stream, asm_demangle, " ");
    749   1.1  christos }
    750   1.1  christos 
    751   1.1  christos /* Return a prefix for instruction address:
    752   1.1  christos    "=> " for current instruction, else "   ".  */
    753   1.1  christos 
    754   1.1  christos const char *
    755   1.1  christos pc_prefix (CORE_ADDR addr)
    756   1.1  christos {
    757  1.10  christos   if (has_stack_frames ())
    758   1.1  christos     {
    759   1.1  christos       frame_info_ptr frame;
    760   1.1  christos       CORE_ADDR pc;
    761   1.1  christos 
    762   1.1  christos       frame = get_selected_frame (NULL);
    763   1.1  christos       if (get_frame_pc_if_available (frame, &pc) && pc == addr)
    764   1.1  christos 	return "=> ";
    765   1.1  christos     }
    766   1.1  christos   return "   ";
    767   1.1  christos }
    768   1.1  christos 
    769   1.1  christos /* Print address ADDR symbolically on STREAM.  Parameter DEMANGLE
    770   1.1  christos    controls whether to print the symbolic name "raw" or demangled.
    771   1.1  christos    Return non-zero if anything was printed; zero otherwise.  */
    772   1.1  christos 
    773   1.1  christos int
    774   1.1  christos print_address_demangle (const struct value_print_options *opts,
    775   1.1  christos 			struct gdbarch *gdbarch, CORE_ADDR addr,
    776   1.1  christos 			struct ui_file *stream, int do_demangle)
    777   1.1  christos {
    778   1.8  christos   if (opts->addressprint)
    779   1.1  christos     {
    780   1.1  christos       fputs_styled (paddress (gdbarch, addr), address_style.style (), stream);
    781   1.1  christos       print_address_symbolic (gdbarch, addr, stream, do_demangle, " ");
    782   1.1  christos     }
    783   1.1  christos   else
    784   1.1  christos     {
    785   1.1  christos       return print_address_symbolic (gdbarch, addr, stream, do_demangle, "");
    786   1.1  christos     }
    787   1.1  christos   return 1;
    788   1.1  christos }
    789   1.6  christos 
    790   1.6  christos 
    792   1.6  christos /* Find the address of the instruction that is INST_COUNT instructions before
    793   1.6  christos    the instruction at ADDR.
    794   1.6  christos    Since some architectures have variable-length instructions, we can't just
    795   1.6  christos    simply subtract INST_COUNT * INSN_LEN from ADDR.  Instead, we use line
    796   1.6  christos    number information to locate the nearest known instruction boundary,
    797   1.6  christos    and disassemble forward from there.  If we go out of the symbol range
    798   1.6  christos    during disassembling, we return the lowest address we've got so far and
    799   1.6  christos    set the number of instructions read to INST_READ.  */
    800  1.10  christos 
    801   1.6  christos static CORE_ADDR
    802   1.6  christos find_instruction_backward (struct gdbarch *gdbarch, CORE_ADDR addr,
    803   1.6  christos 			   int inst_count, int *inst_read)
    804   1.6  christos {
    805   1.7  christos   /* The vector PCS is used to store instruction addresses within
    806   1.6  christos      a pc range.  */
    807   1.6  christos   CORE_ADDR loop_start, loop_end, p;
    808   1.6  christos   std::vector<CORE_ADDR> pcs;
    809   1.6  christos   struct symtab_and_line sal;
    810   1.6  christos 
    811   1.6  christos   *inst_read = 0;
    812   1.6  christos   loop_start = loop_end = addr;
    813   1.6  christos 
    814   1.6  christos   /* In each iteration of the outer loop, we get a pc range that ends before
    815   1.6  christos      LOOP_START, then we count and store every instruction address of the range
    816   1.6  christos      iterated in the loop.
    817   1.6  christos      If the number of instructions counted reaches INST_COUNT, return the
    818   1.6  christos      stored address that is located INST_COUNT instructions back from ADDR.
    819   1.6  christos      If INST_COUNT is not reached, we subtract the number of counted
    820   1.7  christos      instructions from INST_COUNT, and go to the next iteration.  */
    821   1.6  christos   do
    822   1.6  christos     {
    823  1.10  christos       pcs.clear ();
    824  1.10  christos       sal = find_pc_sect_line (loop_start, NULL, 1);
    825  1.10  christos       if (sal.line <= 0)
    826  1.10  christos 	{
    827  1.10  christos 	  /* We reach here when line info is not available.  In this case,
    828  1.10  christos 	     we print a message and just exit the loop.  The return value
    829  1.10  christos 	     is calculated after the loop.  */
    830  1.10  christos 	  gdb_printf (_("No line number information available "
    831  1.10  christos 			"for address "));
    832  1.10  christos 	  gdb_stdout->wrap_here (2);
    833  1.10  christos 	  print_address (gdbarch, loop_start - 1, gdb_stdout);
    834   1.6  christos 	  gdb_printf ("\n");
    835   1.6  christos 	  break;
    836   1.6  christos 	}
    837   1.6  christos 
    838   1.6  christos       loop_end = loop_start;
    839  1.10  christos       loop_start = sal.pc;
    840   1.6  christos 
    841  1.10  christos       /* This loop pushes instruction addresses in the range from
    842   1.7  christos 	 LOOP_START to LOOP_END.  */
    843  1.10  christos       for (p = loop_start; p < loop_end;)
    844  1.10  christos 	{
    845   1.6  christos 	  pcs.push_back (p);
    846   1.7  christos 	  p += gdb_insn_length (gdbarch, p);
    847   1.7  christos 	}
    848   1.6  christos 
    849   1.6  christos       inst_count -= pcs.size ();
    850   1.6  christos       *inst_read += pcs.size ();
    851   1.6  christos     }
    852   1.6  christos   while (inst_count > 0);
    853   1.6  christos 
    854   1.6  christos   /* After the loop, the vector PCS has instruction addresses of the last
    855   1.6  christos      source line we processed, and INST_COUNT has a negative value.
    856   1.6  christos      We return the address at the index of -INST_COUNT in the vector for
    857  1.10  christos      the reason below.
    858  1.10  christos      Let's assume the following instruction addresses and run 'x/-4i 0x400e'.
    859  1.10  christos        Line X of File
    860   1.6  christos 	  0x4000
    861  1.10  christos 	  0x4001
    862  1.10  christos 	  0x4005
    863   1.6  christos        Line Y of File
    864  1.10  christos 	  0x4009
    865   1.6  christos 	  0x400c
    866   1.6  christos        => 0x400e
    867   1.6  christos 	  0x4011
    868   1.6  christos      find_instruction_backward is called with INST_COUNT = 4 and expected to
    869   1.6  christos      return 0x4001.  When we reach here, INST_COUNT is set to -1 because
    870   1.6  christos      it was subtracted by 2 (from Line Y) and 3 (from Line X).  The value
    871   1.6  christos      4001 is located at the index 1 of the last iterated line (= Line X),
    872   1.6  christos      which is simply calculated by -INST_COUNT.
    873   1.7  christos      The case when the length of PCS is 0 means that we reached an area for
    874   1.6  christos      which line info is not available.  In such case, we return LOOP_START,
    875   1.6  christos      which was the lowest instruction address that had line info.  */
    876   1.6  christos   p = pcs.size () > 0 ? pcs[-inst_count] : loop_start;
    877   1.6  christos 
    878   1.6  christos   /* INST_READ includes all instruction addresses in a pc range.  Need to
    879   1.6  christos      exclude the beginning part up to the address we're returning.  That
    880   1.6  christos      is, exclude {0x4000} in the example above.  */
    881   1.6  christos   if (inst_count < 0)
    882   1.6  christos     *inst_read += inst_count;
    883   1.6  christos 
    884   1.6  christos   return p;
    885   1.6  christos }
    886   1.6  christos 
    887   1.6  christos /* Backward read LEN bytes of target memory from address MEMADDR + LEN,
    888   1.6  christos    placing the results in GDB's memory from MYADDR + LEN.  Returns
    889   1.6  christos    a count of the bytes actually read.  */
    890  1.10  christos 
    891   1.6  christos static int
    892   1.6  christos read_memory_backward (struct gdbarch *gdbarch,
    893   1.6  christos 		      CORE_ADDR memaddr, gdb_byte *myaddr, int len)
    894   1.6  christos {
    895   1.6  christos   int errcode;
    896   1.6  christos   int nread;      /* Number of bytes actually read.  */
    897   1.6  christos 
    898   1.6  christos   /* First try a complete read.  */
    899   1.6  christos   errcode = target_read_memory (memaddr, myaddr, len);
    900   1.6  christos   if (errcode == 0)
    901   1.6  christos     {
    902   1.6  christos       /* Got it all.  */
    903   1.6  christos       nread = len;
    904   1.6  christos     }
    905   1.6  christos   else
    906   1.6  christos     {
    907   1.6  christos       /* Loop, reading one byte at a time until we get as much as we can.  */
    908  1.10  christos       memaddr += len;
    909  1.10  christos       myaddr += len;
    910  1.10  christos       for (nread = 0; nread < len; ++nread)
    911  1.10  christos 	{
    912  1.10  christos 	  errcode = target_read_memory (--memaddr, --myaddr, 1);
    913  1.10  christos 	  if (errcode != 0)
    914  1.10  christos 	    {
    915  1.10  christos 	      /* The read was unsuccessful, so exit the loop.  */
    916  1.10  christos 	      gdb_printf (_("Cannot access memory at address %s\n"),
    917  1.10  christos 			  paddress (gdbarch, memaddr));
    918   1.6  christos 	      break;
    919   1.6  christos 	    }
    920   1.6  christos 	}
    921   1.6  christos     }
    922   1.6  christos   return nread;
    923   1.6  christos }
    924   1.6  christos 
    925   1.6  christos /* Returns true if X (which is LEN bytes wide) is the number zero.  */
    926   1.6  christos 
    927   1.6  christos static int
    928   1.6  christos integer_is_zero (const gdb_byte *x, int len)
    929   1.6  christos {
    930   1.6  christos   int i = 0;
    931   1.6  christos 
    932   1.6  christos   while (i < len && x[i] == 0)
    933   1.6  christos     ++i;
    934   1.6  christos   return (i == len);
    935   1.6  christos }
    936   1.6  christos 
    937   1.6  christos /* Find the start address of a string in which ADDR is included.
    938   1.6  christos    Basically we search for '\0' and return the next address,
    939   1.6  christos    but if OPTIONS->PRINT_MAX is smaller than the length of a string,
    940   1.6  christos    we stop searching and return the address to print characters as many as
    941   1.6  christos    PRINT_MAX from the string.  */
    942  1.10  christos 
    943  1.10  christos static CORE_ADDR
    944  1.10  christos find_string_backward (struct gdbarch *gdbarch,
    945   1.6  christos 		      CORE_ADDR addr, int count, int char_size,
    946   1.6  christos 		      const struct value_print_options *options,
    947   1.6  christos 		      int *strings_counted)
    948   1.6  christos {
    949   1.6  christos   const int chunk_size = 0x20;
    950   1.6  christos   int read_error = 0;
    951   1.6  christos   int chars_read = 0;
    952   1.6  christos   int chars_to_read = chunk_size;
    953   1.6  christos   int chars_counted = 0;
    954   1.6  christos   int count_original = count;
    955   1.8  christos   CORE_ADDR string_start_addr = addr;
    956   1.6  christos 
    957   1.6  christos   gdb_assert (char_size == 1 || char_size == 2 || char_size == 4);
    958   1.6  christos   gdb::byte_vector buffer (chars_to_read * char_size);
    959   1.6  christos   while (count > 0 && read_error == 0)
    960   1.6  christos     {
    961   1.8  christos       int i;
    962  1.10  christos 
    963   1.6  christos       addr -= chars_to_read * char_size;
    964   1.6  christos       chars_read = read_memory_backward (gdbarch, addr, buffer.data (),
    965  1.11  christos 					 chars_to_read * char_size);
    966   1.6  christos       chars_read /= char_size;
    967   1.6  christos       read_error = (chars_read == chars_to_read) ? 0 : 1;
    968  1.10  christos       unsigned int print_max_chars = get_print_max_chars (options);
    969  1.10  christos       /* Searching for '\0' from the end of buffer in backward direction.  */
    970   1.6  christos       for (i = 0; i < chars_read && count > 0 ; ++i, ++chars_counted)
    971  1.10  christos 	{
    972  1.11  christos 	  int offset = (chars_to_read - i - 1) * char_size;
    973  1.10  christos 
    974  1.11  christos 	  if (integer_is_zero (&buffer[offset], char_size)
    975  1.11  christos 	      || chars_counted == print_max_chars)
    976  1.11  christos 	    {
    977  1.10  christos 	      /* Found '\0' or reached `print_max_chars'.  As OFFSET
    978  1.10  christos 		 is the offset to '\0', we add CHAR_SIZE to return
    979  1.10  christos 		 the start address of a string.  */
    980  1.10  christos 	      --count;
    981  1.10  christos 	      string_start_addr = addr + offset + char_size;
    982   1.6  christos 	      chars_counted = 0;
    983   1.6  christos 	    }
    984   1.6  christos 	}
    985   1.6  christos     }
    986   1.6  christos 
    987   1.6  christos   /* Update STRINGS_COUNTED with the actual number of loaded strings.  */
    988   1.6  christos   *strings_counted = count_original - count;
    989   1.6  christos 
    990  1.10  christos   if (read_error != 0)
    991   1.6  christos     {
    992   1.6  christos       /* In error case, STRING_START_ADDR is pointing to the string that
    993   1.6  christos 	 was last successfully loaded.  Rewind the partially loaded string.  */
    994   1.6  christos       string_start_addr -= chars_counted * char_size;
    995   1.6  christos     }
    996   1.6  christos 
    997   1.1  christos   return string_start_addr;
    998   1.1  christos }
    999   1.1  christos 
   1000   1.1  christos /* Examine data at address ADDR in format FMT.
   1001   1.1  christos    Fetch it from memory and print on gdb_stdout.  */
   1002   1.1  christos 
   1003   1.1  christos static void
   1004   1.1  christos do_examine (struct format_data fmt, struct gdbarch *gdbarch, CORE_ADDR addr)
   1005   1.1  christos {
   1006   1.1  christos   char format = 0;
   1007   1.1  christos   char size;
   1008   1.1  christos   int count = 1;
   1009   1.1  christos   struct type *val_type = NULL;
   1010   1.6  christos   int i;
   1011   1.6  christos   int maxelts;
   1012   1.1  christos   struct value_print_options opts;
   1013   1.1  christos   int need_to_update_next_address = 0;
   1014   1.1  christos   CORE_ADDR addr_rewound = 0;
   1015   1.1  christos 
   1016   1.1  christos   format = fmt.format;
   1017   1.1  christos   size = fmt.size;
   1018   1.1  christos   count = fmt.count;
   1019   1.1  christos   next_gdbarch = gdbarch;
   1020   1.1  christos   next_address = addr;
   1021   1.1  christos 
   1022   1.1  christos   /* Instruction format implies fetch single bytes
   1023   1.1  christos      regardless of the specified size.
   1024   1.1  christos      The case of strings is handled in decode_format, only explicit
   1025   1.1  christos      size operator are not changed to 'b'.  */
   1026   1.1  christos   if (format == 'i')
   1027   1.1  christos     size = 'b';
   1028   1.1  christos 
   1029   1.1  christos   if (size == 'a')
   1030   1.1  christos     {
   1031   1.1  christos       /* Pick the appropriate size for an address.  */
   1032   1.1  christos       if (gdbarch_ptr_bit (next_gdbarch) == 64)
   1033   1.1  christos 	size = 'g';
   1034   1.1  christos       else if (gdbarch_ptr_bit (next_gdbarch) == 32)
   1035   1.1  christos 	size = 'w';
   1036   1.1  christos       else if (gdbarch_ptr_bit (next_gdbarch) == 16)
   1037  1.10  christos 	size = 'h';
   1038   1.1  christos       else
   1039   1.1  christos 	/* Bad value for gdbarch_ptr_bit.  */
   1040   1.1  christos 	internal_error (_("failed internal consistency check"));
   1041   1.1  christos     }
   1042   1.1  christos 
   1043   1.1  christos   if (size == 'b')
   1044   1.1  christos     val_type = builtin_type (next_gdbarch)->builtin_int8;
   1045   1.1  christos   else if (size == 'h')
   1046   1.1  christos     val_type = builtin_type (next_gdbarch)->builtin_int16;
   1047   1.1  christos   else if (size == 'w')
   1048   1.1  christos     val_type = builtin_type (next_gdbarch)->builtin_int32;
   1049   1.1  christos   else if (size == 'g')
   1050   1.1  christos     val_type = builtin_type (next_gdbarch)->builtin_int64;
   1051   1.1  christos 
   1052   1.1  christos   if (format == 's')
   1053   1.1  christos     {
   1054   1.1  christos       struct type *char_type = NULL;
   1055   1.1  christos 
   1056   1.1  christos       /* Search for "char16_t"  or "char32_t" types or fall back to 8-bit char
   1057   1.1  christos 	 if type is not found.  */
   1058   1.1  christos       if (size == 'h')
   1059   1.1  christos 	char_type = builtin_type (next_gdbarch)->builtin_char16;
   1060  1.10  christos       else if (size == 'w')
   1061   1.1  christos 	char_type = builtin_type (next_gdbarch)->builtin_char32;
   1062  1.10  christos       if (char_type)
   1063   1.1  christos 	val_type = char_type;
   1064   1.1  christos       else
   1065   1.1  christos 	{
   1066   1.1  christos 	  if (size != '\0' && size != 'b')
   1067   1.1  christos 	    warning (_("Unable to display strings with "
   1068  1.10  christos 		       "size '%c', using 'b' instead."), size);
   1069   1.1  christos 	  size = 'b';
   1070   1.1  christos 	  val_type = builtin_type (next_gdbarch)->builtin_int8;
   1071   1.1  christos 	}
   1072   1.1  christos     }
   1073   1.1  christos 
   1074   1.1  christos   maxelts = 8;
   1075   1.1  christos   if (size == 'w')
   1076   1.1  christos     maxelts = 4;
   1077   1.1  christos   if (size == 'g')
   1078   1.1  christos     maxelts = 2;
   1079   1.1  christos   if (format == 's' || format == 'i')
   1080   1.1  christos     maxelts = 1;
   1081   1.6  christos 
   1082   1.6  christos   get_formatted_print_options (&opts, format);
   1083   1.6  christos 
   1084  1.10  christos   if (count < 0)
   1085  1.10  christos     {
   1086   1.6  christos       /* This is the negative repeat count case.
   1087   1.6  christos 	 We rewind the address based on the given repeat count and format,
   1088   1.6  christos 	 then examine memory from there in forward direction.  */
   1089  1.10  christos 
   1090  1.10  christos       count = -count;
   1091  1.10  christos       if (format == 'i')
   1092  1.10  christos 	{
   1093   1.6  christos 	  next_address = find_instruction_backward (gdbarch, addr, count,
   1094  1.10  christos 						    &count);
   1095  1.10  christos 	}
   1096  1.10  christos       else if (format == 's')
   1097  1.10  christos 	{
   1098  1.10  christos 	  next_address = find_string_backward (gdbarch, addr, count,
   1099   1.6  christos 					       val_type->length (),
   1100  1.10  christos 					       &opts, &count);
   1101  1.10  christos 	}
   1102  1.10  christos       else
   1103   1.6  christos 	{
   1104   1.6  christos 	  next_address = addr - count * val_type->length ();
   1105  1.10  christos 	}
   1106  1.10  christos 
   1107   1.6  christos       /* The following call to print_formatted updates next_address in every
   1108  1.10  christos 	 iteration.  In backward case, we store the start address here
   1109  1.10  christos 	 and update next_address with it before exiting the function.  */
   1110   1.6  christos       addr_rewound = (format == 's'
   1111   1.6  christos 		      ? next_address - val_type->length ()
   1112   1.6  christos 		      : next_address);
   1113  1.10  christos       need_to_update_next_address = 1;
   1114  1.10  christos     }
   1115  1.10  christos 
   1116  1.10  christos   /* Whether we need to print the memory tag information for the current
   1117  1.10  christos      address range.  */
   1118   1.1  christos   bool print_range_tag = true;
   1119   1.1  christos   uint32_t gsize = gdbarch_memtag_granule_size (gdbarch);
   1120   1.1  christos 
   1121   1.1  christos   /* Print as many objects as specified in COUNT, at most maxelts per line,
   1122   1.1  christos      with the address of the next one at the start of each line.  */
   1123   1.1  christos 
   1124  1.10  christos   while (count > 0)
   1125  1.10  christos     {
   1126  1.10  christos       QUIT;
   1127  1.10  christos 
   1128  1.10  christos       CORE_ADDR tag_laddr = 0, tag_haddr = 0;
   1129  1.10  christos 
   1130  1.10  christos       /* Print the memory tag information if requested.  */
   1131  1.10  christos       if (fmt.print_tags && print_range_tag
   1132  1.10  christos 	  && target_supports_memory_tagging ())
   1133  1.10  christos 	{
   1134  1.10  christos 	  tag_laddr = align_down (next_address, gsize);
   1135  1.10  christos 	  tag_haddr = align_down (next_address + gsize, gsize);
   1136  1.10  christos 
   1137  1.10  christos 	  struct value *v_addr
   1138  1.11  christos 	    = value_from_ulongest (builtin_type (gdbarch)->builtin_data_ptr,
   1139  1.10  christos 				   tag_laddr);
   1140  1.10  christos 
   1141  1.10  christos 	  if (target_is_address_tagged (gdbarch, value_as_address (v_addr)))
   1142  1.10  christos 	    {
   1143  1.10  christos 	      /* Fetch the allocation tag.  */
   1144  1.10  christos 	      struct value *tag
   1145  1.10  christos 		= gdbarch_get_memtag (gdbarch, v_addr, memtag_type::allocation);
   1146  1.10  christos 	      std::string atag
   1147  1.10  christos 		= gdbarch_memtag_to_string (gdbarch, tag);
   1148  1.10  christos 
   1149  1.10  christos 	      if (!atag.empty ())
   1150  1.10  christos 		{
   1151  1.10  christos 		  gdb_printf (_("<Allocation Tag %s for range [%s,%s)>\n"),
   1152  1.10  christos 			      atag.c_str (),
   1153  1.10  christos 			      paddress (gdbarch, tag_laddr),
   1154  1.10  christos 			      paddress (gdbarch, tag_haddr));
   1155  1.10  christos 		}
   1156  1.10  christos 	    }
   1157   1.1  christos 	  print_range_tag = false;
   1158  1.10  christos 	}
   1159   1.1  christos 
   1160  1.10  christos       if (format == 'i')
   1161   1.1  christos 	gdb_puts (pc_prefix (next_address));
   1162   1.1  christos       print_address (next_gdbarch, next_address, gdb_stdout);
   1163   1.1  christos       gdb_printf (":");
   1164   1.1  christos       for (i = maxelts;
   1165  1.10  christos 	   i > 0 && count > 0;
   1166   1.1  christos 	   i--, count--)
   1167   1.1  christos 	{
   1168   1.1  christos 	  gdb_printf ("\t");
   1169   1.1  christos 	  /* Note that print_formatted sets next_address for the next
   1170   1.1  christos 	     object.  */
   1171   1.1  christos 	  last_examine_address = next_address;
   1172   1.1  christos 
   1173   1.1  christos 	  /* The value to be displayed is not fetched greedily.
   1174   1.1  christos 	     Instead, to avoid the possibility of a fetched value not
   1175   1.1  christos 	     being used, its retrieval is delayed until the print code
   1176   1.1  christos 	     uses it.  When examining an instruction stream, the
   1177   1.1  christos 	     disassembler will perform its own memory fetch using just
   1178   1.1  christos 	     the address stored in LAST_EXAMINE_VALUE.  FIXME: Should
   1179   1.8  christos 	     the disassembler be modified so that LAST_EXAMINE_VALUE
   1180   1.8  christos 	     is left with the byte sequence from the last complete
   1181   1.1  christos 	     instruction fetched from memory?  */
   1182   1.8  christos 	  last_examine_value
   1183   1.1  christos 	    = release_value (value_at_lazy (val_type, next_address));
   1184   1.1  christos 
   1185   1.1  christos 	  print_formatted (last_examine_value.get (), size, &opts, gdb_stdout);
   1186   1.1  christos 
   1187  1.10  christos 	  /* Display any branch delay slots following the final insn.  */
   1188  1.10  christos 	  if (format == 'i' && count == 1)
   1189  1.10  christos 	    count += branch_delay_insns;
   1190  1.10  christos 
   1191  1.10  christos 	  /* Update the tag range based on the current address being
   1192   1.1  christos 	     processed.  */
   1193  1.10  christos 	  if (tag_haddr <= next_address)
   1194   1.1  christos 	      print_range_tag = true;
   1195   1.6  christos 	}
   1196   1.6  christos       gdb_printf ("\n");
   1197   1.6  christos     }
   1198   1.1  christos 
   1199   1.1  christos   if (need_to_update_next_address)
   1200   1.1  christos     next_address = addr_rewound;
   1201   1.5  christos }
   1202   1.1  christos 
   1203   1.1  christos static void
   1205   1.1  christos validate_format (struct format_data fmt, const char *cmdname)
   1206   1.1  christos {
   1207   1.1  christos   if (fmt.size != 0)
   1208   1.1  christos     error (_("Size letters are meaningless in \"%s\" command."), cmdname);
   1209   1.1  christos   if (fmt.count != 1)
   1210   1.1  christos     error (_("Item count other than 1 is meaningless in \"%s\" command."),
   1211   1.1  christos 	   cmdname);
   1212   1.1  christos   if (fmt.format == 'i')
   1213   1.9  christos     error (_("Format letter \"%c\" is meaningless in \"%s\" command."),
   1214   1.5  christos 	   fmt.format, cmdname);
   1215   1.5  christos }
   1216   1.5  christos 
   1217   1.5  christos /* Parse print command format string into *OPTS and update *EXPP.
   1218   1.9  christos    CMDNAME should name the current command.  */
   1219   1.5  christos 
   1220   1.5  christos void
   1221   1.5  christos print_command_parse_format (const char **expp, const char *cmdname,
   1222   1.9  christos 			    value_print_options *opts)
   1223   1.9  christos {
   1224   1.9  christos   const char *exp = *expp;
   1225   1.5  christos 
   1226   1.5  christos   /* opts->raw value might already have been set by 'set print raw-values'
   1227   1.9  christos      or by using 'print -raw-values'.
   1228   1.9  christos      So, do not set opts->raw to 0, only set it to 1 if /r is given.  */
   1229   1.5  christos   if (exp && *exp == '/')
   1230   1.9  christos     {
   1231   1.9  christos       format_data fmt;
   1232   1.9  christos 
   1233   1.9  christos       exp++;
   1234   1.9  christos       fmt = decode_format (&exp, last_format, 0);
   1235   1.9  christos       validate_format (fmt, cmdname);
   1236   1.5  christos       last_format = fmt.format;
   1237   1.5  christos 
   1238   1.5  christos       opts->format = fmt.format;
   1239   1.9  christos       opts->raw = opts->raw || fmt.raw;
   1240   1.5  christos     }
   1241   1.5  christos   else
   1242   1.5  christos     {
   1243   1.5  christos       opts->format = 0;
   1244   1.5  christos     }
   1245   1.9  christos 
   1246   1.5  christos   *expp = exp;
   1247   1.5  christos }
   1248   1.9  christos 
   1249   1.5  christos /* See valprint.h.  */
   1250  1.11  christos 
   1251  1.11  christos void
   1252  1.11  christos print_value (value *val, const value_print_options &opts)
   1253  1.11  christos {
   1254  1.11  christos   /* This setting allows large arrays to be printed by limiting the
   1255  1.11  christos      number of elements that are loaded into GDB's memory; we only
   1256  1.11  christos      need to load as many array elements as we plan to print.  */
   1257  1.11  christos   scoped_array_length_limiting limit_large_arrays (opts.print_max);
   1258  1.11  christos 
   1259  1.11  christos   int histindex = val->record_latest ();
   1260  1.11  christos 
   1261  1.11  christos   annotate_value_history_begin (histindex, val->type ());
   1262   1.5  christos 
   1263   1.5  christos   std::string idx = string_printf ("$%d", histindex);
   1264   1.5  christos   gdb_printf ("%ps = ", styled_string (variable_name_style.style (),
   1265   1.9  christos 				       idx.c_str ()));
   1266  1.10  christos 
   1267   1.5  christos   annotate_value_history_value ();
   1268   1.5  christos 
   1269   1.5  christos   print_formatted (val, 0, &opts, gdb_stdout);
   1270   1.5  christos   gdb_printf ("\n");
   1271  1.10  christos 
   1272   1.1  christos   annotate_value_history_end ();
   1273  1.10  christos }
   1274  1.11  christos 
   1275   1.1  christos /* Returns true if memory tags should be validated.  False otherwise.  */
   1276  1.11  christos 
   1277  1.10  christos static bool
   1278  1.10  christos should_validate_memtags (gdbarch *gdbarch, struct value *value)
   1279  1.10  christos {
   1280  1.10  christos   gdb_assert (value != nullptr && value->type () != nullptr);
   1281  1.11  christos 
   1282  1.10  christos   if (!target_supports_memory_tagging ())
   1283  1.10  christos     return false;
   1284  1.10  christos 
   1285  1.11  christos   enum type_code code = value->type ()->code ();
   1286  1.10  christos 
   1287  1.10  christos   /* Skip non-address values.  */
   1288  1.10  christos   if (code != TYPE_CODE_PTR
   1289  1.10  christos       && !TYPE_IS_REFERENCE (value->type ()))
   1290  1.11  christos     return false;
   1291  1.11  christos 
   1292  1.10  christos   /* OK, we have an address value.  Check we have a complete value we
   1293  1.10  christos      can extract.  */
   1294  1.10  christos   if (value->optimized_out ()
   1295  1.11  christos       || !value->entirely_available ())
   1296  1.10  christos     return false;
   1297  1.10  christos 
   1298  1.10  christos   /* We do.  Check whether it includes any tags.  */
   1299   1.9  christos   return target_is_address_tagged (gdbarch, value_as_address (value));
   1300  1.10  christos }
   1301  1.10  christos 
   1302  1.10  christos /* Helper for parsing arguments for print_command_1.  */
   1303  1.10  christos 
   1304  1.10  christos static struct value *
   1305   1.9  christos process_print_command_args (const char *args, value_print_options *print_opts,
   1306  1.10  christos 			    bool voidprint)
   1307   1.9  christos {
   1308   1.9  christos   get_user_print_options (print_opts);
   1309   1.9  christos   /* Override global settings with explicit options, if any.  */
   1310  1.10  christos   auto group = make_value_print_options_def_group (print_opts);
   1311   1.1  christos   gdb::option::process_options
   1312   1.9  christos     (&args, gdb::option::PROCESS_OPTIONS_REQUIRE_DELIMITER, group);
   1313   1.1  christos 
   1314   1.9  christos   print_command_parse_format (&args, "print", print_opts);
   1315   1.1  christos 
   1316  1.11  christos   const char *exp = args;
   1317  1.11  christos 
   1318  1.11  christos   if (exp != nullptr && *exp)
   1319  1.11  christos     {
   1320  1.11  christos       /* This setting allows large arrays to be printed by limiting the
   1321  1.10  christos 	 number of elements that are loaded into GDB's memory; we only
   1322  1.10  christos 	 need to load as many array elements as we plan to print.  */
   1323  1.11  christos       scoped_array_length_limiting limit_large_arrays (print_opts->print_max);
   1324  1.11  christos 
   1325  1.11  christos       /* VOIDPRINT is true to indicate that we do want to print a void
   1326  1.11  christos 	 value, so invert it for parse_expression.  */
   1327  1.11  christos       parser_flags flags = 0;
   1328   1.1  christos       if (!voidprint)
   1329  1.10  christos 	flags = PARSER_VOID_CONTEXT;
   1330  1.10  christos       expression_up expr = parse_expression (exp, nullptr, flags);
   1331  1.10  christos       return expr->evaluate ();
   1332  1.10  christos     }
   1333  1.10  christos 
   1334  1.10  christos   return access_value_history (0);
   1335  1.10  christos }
   1336  1.10  christos 
   1337  1.10  christos /* Implementation of the "print" and "call" commands.  */
   1338  1.10  christos 
   1339  1.10  christos static void
   1340  1.10  christos print_command_1 (const char *args, int voidprint)
   1341   1.1  christos {
   1342  1.11  christos   value_print_options print_opts;
   1343  1.11  christos 
   1344  1.10  christos   struct value *val = process_print_command_args (args, &print_opts, voidprint);
   1345  1.10  christos 
   1346  1.10  christos   if (voidprint || (val && val->type () &&
   1347  1.10  christos 		    val->type ()->code () != TYPE_CODE_VOID))
   1348  1.10  christos     {
   1349  1.10  christos       /* If memory tagging validation is on, check if the tag is valid.  */
   1350  1.11  christos       if (print_opts.memory_tag_violations)
   1351  1.11  christos 	{
   1352  1.11  christos 	  try
   1353  1.11  christos 	    {
   1354  1.10  christos 	      gdbarch *arch = current_inferior ()->arch ();
   1355  1.10  christos 
   1356  1.10  christos 	      if (should_validate_memtags (arch, val)
   1357  1.11  christos 		  && !gdbarch_memtag_matches_p (arch, val))
   1358  1.11  christos 		{
   1359  1.10  christos 		  /* Fetch the logical tag.  */
   1360  1.10  christos 		  struct value *tag
   1361  1.11  christos 		    = gdbarch_get_memtag (arch, val, memtag_type::logical);
   1362  1.10  christos 		  std::string ltag = gdbarch_memtag_to_string (arch, tag);
   1363  1.11  christos 
   1364  1.10  christos 		  /* Fetch the allocation tag.  */
   1365  1.10  christos 		  tag = gdbarch_get_memtag (arch, val,
   1366  1.10  christos 					    memtag_type::allocation);
   1367  1.10  christos 		  std::string atag = gdbarch_memtag_to_string (arch, tag);
   1368  1.10  christos 
   1369  1.10  christos 		  gdb_printf (_("Logical tag (%s) does not match the "
   1370  1.10  christos 				"allocation tag (%s).\n"),
   1371  1.10  christos 			      ltag.c_str (), atag.c_str ());
   1372  1.10  christos 		}
   1373  1.10  christos 	    }
   1374  1.10  christos 	  catch (gdb_exception_error &ex)
   1375  1.10  christos 	    {
   1376  1.10  christos 	      if (ex.error == TARGET_CLOSE_ERROR)
   1377  1.10  christos 		throw;
   1378  1.10  christos 
   1379  1.10  christos 	      gdb_printf (gdb_stderr,
   1380  1.10  christos 			  _("Could not validate memory tag: %s\n"),
   1381  1.10  christos 			  ex.message->c_str ());
   1382  1.10  christos 	    }
   1383  1.10  christos 	}
   1384  1.10  christos 
   1385   1.9  christos       print_value (val, print_opts);
   1386   1.9  christos     }
   1387   1.9  christos }
   1388   1.9  christos 
   1389   1.9  christos /* See valprint.h.  */
   1390   1.9  christos 
   1391   1.9  christos void
   1392   1.9  christos print_command_completer (struct cmd_list_element *ignore,
   1393   1.9  christos 			 completion_tracker &tracker,
   1394   1.9  christos 			 const char *text, const char * /*word*/)
   1395   1.9  christos {
   1396   1.9  christos   const auto group = make_value_print_options_def_group (nullptr);
   1397  1.10  christos   if (gdb::option::complete_options
   1398  1.10  christos       (tracker, &text, gdb::option::PROCESS_OPTIONS_REQUIRE_DELIMITER, group))
   1399  1.10  christos     return;
   1400   1.9  christos 
   1401   1.9  christos   if (skip_over_slash_fmt (tracker, &text))
   1402   1.1  christos     return;
   1403   1.1  christos 
   1404   1.1  christos   const char *word = advance_to_expression_complete_word_point (tracker, text);
   1405   1.8  christos   expression_completer (ignore, tracker, text, word);
   1406   1.1  christos }
   1407  1.10  christos 
   1408   1.1  christos static void
   1409   1.1  christos print_command (const char *exp, int from_tty)
   1410   1.1  christos {
   1411   1.1  christos   print_command_1 (exp, true);
   1412   1.8  christos }
   1413   1.1  christos 
   1414  1.10  christos /* Same as print, except it doesn't print void results.  */
   1415   1.1  christos static void
   1416   1.1  christos call_command (const char *exp, int from_tty)
   1417   1.1  christos {
   1418   1.1  christos   print_command_1 (exp, false);
   1419   1.1  christos }
   1420   1.8  christos 
   1421   1.1  christos /* Implementation of the "output" command.  */
   1422   1.1  christos 
   1423   1.1  christos void
   1424   1.1  christos output_command (const char *exp, int from_tty)
   1425   1.1  christos {
   1426   1.1  christos   char format = 0;
   1427   1.1  christos   struct value *val;
   1428   1.1  christos   struct format_data fmt;
   1429   1.1  christos   struct value_print_options opts;
   1430   1.1  christos 
   1431   1.1  christos   fmt.size = 0;
   1432   1.1  christos   fmt.raw = 0;
   1433   1.1  christos 
   1434   1.1  christos   if (exp && *exp == '/')
   1435   1.1  christos     {
   1436   1.1  christos       exp++;
   1437   1.1  christos       fmt = decode_format (&exp, 0, 0);
   1438   1.7  christos       validate_format (fmt, "output");
   1439   1.1  christos       format = fmt.format;
   1440  1.11  christos     }
   1441   1.1  christos 
   1442  1.11  christos   expression_up expr = parse_expression (exp);
   1443   1.1  christos 
   1444   1.1  christos   val = expr->evaluate ();
   1445   1.1  christos 
   1446  1.11  christos   annotate_value_begin (val->type ());
   1447  1.11  christos 
   1448  1.11  christos   get_formatted_print_options (&opts, format);
   1449  1.11  christos   opts.raw = fmt.raw;
   1450  1.11  christos 
   1451  1.11  christos   /* This setting allows large arrays to be printed by limiting the
   1452   1.1  christos      number of elements that are loaded into GDB's memory; we only
   1453   1.1  christos      need to load as many array elements as we plan to print.  */
   1454   1.1  christos   scoped_array_length_limiting limit_large_arrays (opts.print_max);
   1455   1.1  christos 
   1456   1.1  christos   print_formatted (val, fmt.size, &opts, gdb_stdout);
   1457   1.1  christos 
   1458   1.1  christos   annotate_value_end ();
   1459   1.1  christos 
   1460   1.8  christos   gdb_flush (gdb_stdout);
   1461   1.1  christos }
   1462   1.7  christos 
   1463   1.1  christos static void
   1464  1.11  christos set_command (const char *exp, int from_tty)
   1465  1.10  christos {
   1466  1.10  christos   expression_up expr = parse_expression (exp);
   1467  1.10  christos 
   1468  1.10  christos   switch (expr->first_opcode ())
   1469  1.10  christos     {
   1470  1.10  christos     case UNOP_PREINCREMENT:
   1471  1.10  christos     case UNOP_POSTINCREMENT:
   1472  1.10  christos     case UNOP_PREDECREMENT:
   1473  1.10  christos     case UNOP_POSTDECREMENT:
   1474  1.10  christos     case BINOP_ASSIGN:
   1475  1.10  christos     case BINOP_ASSIGN_MODIFY:
   1476  1.10  christos     case BINOP_COMMA:
   1477  1.10  christos       break;
   1478   1.1  christos     default:
   1479  1.11  christos       warning
   1480   1.1  christos 	(_("Expression is not an assignment (and might have no effect)"));
   1481   1.1  christos     }
   1482   1.1  christos 
   1483   1.8  christos   expr->evaluate ();
   1484   1.1  christos }
   1485   1.1  christos 
   1486   1.1  christos static void
   1487   1.1  christos info_symbol_command (const char *arg, int from_tty)
   1488   1.1  christos {
   1489   1.1  christos   struct minimal_symbol *msymbol;
   1490   1.1  christos   CORE_ADDR addr, sect_addr;
   1491   1.1  christos   int matches = 0;
   1492   1.1  christos   unsigned int offset;
   1493   1.1  christos 
   1494   1.8  christos   if (!arg)
   1495  1.11  christos     error_no_arg (_("address"));
   1496   1.1  christos 
   1497   1.8  christos   addr = parse_and_eval_address (arg);
   1498   1.8  christos   for (objfile *objfile : current_program_space->objfiles ())
   1499   1.8  christos     for (obj_section *osect : objfile->sections ())
   1500   1.8  christos       {
   1501   1.8  christos 	/* Only process each object file once, even if there's a separate
   1502   1.8  christos 	   debug file.  */
   1503   1.8  christos 	if (objfile->separate_debug_objfile_backlink)
   1504  1.11  christos 	  continue;
   1505   1.8  christos 
   1506   1.8  christos 	sect_addr = overlay_mapped_address (addr, osect);
   1507   1.8  christos 
   1508   1.8  christos 	if (osect->contains (sect_addr)
   1509   1.8  christos 	    && (msymbol
   1510   1.8  christos 		= lookup_minimal_symbol_by_pc_section (sect_addr,
   1511   1.1  christos 						       osect).minsym))
   1512   1.8  christos 	  {
   1513  1.10  christos 	    const char *obj_name, *mapped, *sec_name, *msym_name;
   1514   1.8  christos 	    const char *loc_string;
   1515   1.8  christos 
   1516   1.9  christos 	    matches = 1;
   1517   1.8  christos 	    offset = sect_addr - msymbol->value_address (objfile);
   1518   1.8  christos 	    mapped = section_is_mapped (osect) ? _("mapped") : _("unmapped");
   1519   1.8  christos 	    sec_name = osect->the_bfd_section->name;
   1520   1.8  christos 	    msym_name = msymbol->print_name ();
   1521   1.8  christos 
   1522   1.8  christos 	    /* Don't print the offset if it is zero.
   1523   1.8  christos 	       We assume there's no need to handle i18n of "sym + offset".  */
   1524   1.8  christos 	    std::string string_holder;
   1525   1.8  christos 	    if (offset)
   1526   1.1  christos 	      {
   1527   1.8  christos 		string_holder = string_printf ("%s + %u", msym_name, offset);
   1528   1.8  christos 		loc_string = string_holder.c_str ();
   1529   1.8  christos 	      }
   1530   1.8  christos 	    else
   1531   1.8  christos 	      loc_string = msym_name;
   1532   1.9  christos 
   1533   1.8  christos 	    gdb_assert (osect->objfile && objfile_name (osect->objfile));
   1534   1.8  christos 	    obj_name = objfile_name (osect->objfile);
   1535  1.10  christos 
   1536  1.10  christos 	    if (current_program_space->multi_objfile_p ())
   1537  1.10  christos 	      if (pc_in_unmapped_range (addr, osect))
   1538   1.8  christos 		if (section_is_overlay (osect))
   1539  1.10  christos 		  gdb_printf (_("%s in load address range of "
   1540  1.10  christos 				"%s overlay section %s of %s\n"),
   1541  1.10  christos 			      loc_string, mapped, sec_name, obj_name);
   1542   1.8  christos 		else
   1543   1.8  christos 		  gdb_printf (_("%s in load address range of "
   1544  1.10  christos 				"section %s of %s\n"),
   1545  1.10  christos 			      loc_string, sec_name, obj_name);
   1546   1.8  christos 	      else
   1547  1.10  christos 		if (section_is_overlay (osect))
   1548  1.10  christos 		  gdb_printf (_("%s in %s overlay section %s of %s\n"),
   1549   1.1  christos 			      loc_string, mapped, sec_name, obj_name);
   1550   1.8  christos 		else
   1551   1.8  christos 		  gdb_printf (_("%s in section %s of %s\n"),
   1552  1.10  christos 			      loc_string, sec_name, obj_name);
   1553  1.10  christos 	    else
   1554  1.10  christos 	      if (pc_in_unmapped_range (addr, osect))
   1555   1.8  christos 		if (section_is_overlay (osect))
   1556  1.10  christos 		  gdb_printf (_("%s in load address range of %s overlay "
   1557   1.8  christos 				"section %s\n"),
   1558   1.8  christos 			      loc_string, mapped, sec_name);
   1559   1.8  christos 		else
   1560   1.8  christos 		  gdb_printf
   1561  1.10  christos 		    (_("%s in load address range of section %s\n"),
   1562  1.10  christos 		     loc_string, sec_name);
   1563   1.8  christos 	      else
   1564  1.10  christos 		if (section_is_overlay (osect))
   1565  1.10  christos 		  gdb_printf (_("%s in %s overlay section %s\n"),
   1566   1.8  christos 			      loc_string, mapped, sec_name);
   1567   1.1  christos 		else
   1568   1.1  christos 		  gdb_printf (_("%s in section %s\n"),
   1569  1.10  christos 			      loc_string, sec_name);
   1570   1.1  christos 	  }
   1571   1.1  christos       }
   1572   1.1  christos   if (matches == 0)
   1573   1.8  christos     gdb_printf (_("No symbol matches %s.\n"), arg);
   1574   1.1  christos }
   1575   1.1  christos 
   1576   1.1  christos static void
   1577   1.1  christos info_address_command (const char *exp, int from_tty)
   1578   1.1  christos {
   1579   1.1  christos   struct gdbarch *gdbarch;
   1580   1.1  christos   int regno;
   1581   1.1  christos   struct symbol *sym;
   1582   1.1  christos   long val;
   1583   1.1  christos   struct obj_section *section;
   1584   1.1  christos   CORE_ADDR load_addr, context_pc = 0;
   1585   1.1  christos   struct field_of_this_result is_a_field_of_this;
   1586  1.11  christos 
   1587   1.6  christos   if (exp == 0)
   1588   1.1  christos     error (_("Argument required."));
   1589   1.1  christos 
   1590   1.1  christos   sym = lookup_symbol (exp, get_selected_block (&context_pc), SEARCH_VFT,
   1591   1.1  christos 		       &is_a_field_of_this).symbol;
   1592  1.10  christos   if (sym == NULL)
   1593  1.10  christos     {
   1594  1.10  christos       if (is_a_field_of_this.type != NULL)
   1595  1.10  christos 	{
   1596   1.1  christos 	  gdb_printf ("Symbol \"");
   1597  1.10  christos 	  fprintf_symbol (gdb_stdout, exp,
   1598   1.1  christos 			  current_language->la_language, DMGL_ANSI);
   1599  1.10  christos 	  gdb_printf ("\" is a field of the local class variable ");
   1600   1.1  christos 	  if (current_language->la_language == language_objc)
   1601   1.1  christos 	    gdb_printf ("`self'\n");	/* ObjC equivalent of "this" */
   1602   1.1  christos 	  else
   1603  1.12  christos 	    gdb_printf ("`this'\n");
   1604  1.12  christos 	  return;
   1605   1.1  christos 	}
   1606   1.1  christos 
   1607   1.1  christos       bound_minimal_symbol msymbol
   1608   1.1  christos 	= lookup_minimal_symbol (current_program_space, exp);
   1609   1.1  christos 
   1610   1.9  christos       if (msymbol.minsym != NULL)
   1611  1.10  christos 	{
   1612   1.1  christos 	  struct objfile *objfile = msymbol.objfile;
   1613  1.10  christos 
   1614  1.10  christos 	  gdbarch = objfile->arch ();
   1615  1.10  christos 	  load_addr = msymbol.value_address ();
   1616  1.10  christos 
   1617   1.8  christos 	  gdb_printf ("Symbol \"");
   1618   1.8  christos 	  fprintf_symbol (gdb_stdout, exp,
   1619  1.10  christos 			  current_language->la_language, DMGL_ANSI);
   1620  1.10  christos 	  gdb_printf ("\" is at ");
   1621   1.1  christos 	  fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
   1622   1.1  christos 			gdb_stdout);
   1623   1.1  christos 	  gdb_printf (" in a file compiled without debugging");
   1624  1.10  christos 	  section = msymbol.minsym->obj_section (objfile);
   1625   1.8  christos 	  if (section_is_overlay (section))
   1626   1.8  christos 	    {
   1627   1.8  christos 	      load_addr = overlay_unmapped_address (load_addr, section);
   1628  1.10  christos 	      gdb_printf (",\n -- loaded at ");
   1629  1.10  christos 	      fputs_styled (paddress (gdbarch, load_addr),
   1630   1.1  christos 			    address_style.style (),
   1631  1.10  christos 			    gdb_stdout);
   1632   1.1  christos 	      gdb_printf (" in overlay section %s",
   1633   1.1  christos 			  section->the_bfd_section->name);
   1634   1.1  christos 	    }
   1635   1.1  christos 	  gdb_printf (".\n");
   1636   1.1  christos 	}
   1637   1.1  christos       else
   1638  1.10  christos 	error (_("No symbol \"%s\" in current context."), exp);
   1639  1.10  christos       return;
   1640  1.10  christos     }
   1641  1.10  christos 
   1642  1.10  christos   gdb_printf ("Symbol \"");
   1643  1.10  christos   gdb_puts (sym->print_name ());
   1644   1.3  christos   gdb_printf ("\" is ");
   1645   1.3  christos   val = sym->value_longest ();
   1646  1.10  christos   if (sym->is_objfile_owned ())
   1647   1.1  christos     section = sym->obj_section (sym->objfile ());
   1648  1.11  christos   else
   1649  1.11  christos     section = NULL;
   1650   1.1  christos   gdbarch = sym->arch ();
   1651  1.11  christos 
   1652  1.10  christos   if (const symbol_computed_ops *computed_ops = sym->computed_ops ();
   1653   1.1  christos       computed_ops != nullptr)
   1654   1.1  christos     {
   1655   1.1  christos       computed_ops->describe_location (sym, context_pc, gdb_stdout);
   1656  1.10  christos       gdb_printf (".\n");
   1657   1.1  christos       return;
   1658   1.1  christos     }
   1659   1.1  christos 
   1660  1.10  christos   switch (sym->aclass ())
   1661   1.1  christos     {
   1662   1.1  christos     case LOC_CONST:
   1663   1.1  christos     case LOC_CONST_BYTES:
   1664  1.10  christos       gdb_printf ("constant");
   1665  1.10  christos       break;
   1666   1.8  christos 
   1667   1.8  christos     case LOC_LABEL:
   1668   1.1  christos       gdb_printf ("a label at address ");
   1669   1.1  christos       load_addr = sym->value_address ();
   1670   1.1  christos       fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
   1671  1.10  christos 		    gdb_stdout);
   1672   1.8  christos       if (section_is_overlay (section))
   1673   1.8  christos 	{
   1674  1.10  christos 	  load_addr = overlay_unmapped_address (load_addr, section);
   1675  1.10  christos 	  gdb_printf (",\n -- loaded at ");
   1676   1.1  christos 	  fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
   1677   1.1  christos 			gdb_stdout);
   1678   1.1  christos 	  gdb_printf (" in overlay section %s",
   1679   1.1  christos 		      section->the_bfd_section->name);
   1680  1.10  christos 	}
   1681   1.1  christos       break;
   1682   1.1  christos 
   1683   1.1  christos     case LOC_COMPUTED:
   1684   1.1  christos       gdb_assert_not_reached ("LOC_COMPUTED variable missing a method");
   1685   1.1  christos 
   1686   1.1  christos     case LOC_REGISTER:
   1687   1.1  christos       /* GDBARCH is the architecture associated with the objfile the symbol
   1688   1.1  christos 	 is defined in; the target architecture may be different, and may
   1689  1.11  christos 	 provide additional registers.  However, we do not know the target
   1690   1.1  christos 	 architecture at this point.  We assume the objfile architecture
   1691  1.10  christos 	 will contain all the standard registers that occur in debug info
   1692  1.10  christos 	 in that objfile.  */
   1693  1.10  christos       regno = sym->register_ops ()->register_number (sym, gdbarch);
   1694   1.1  christos 
   1695  1.10  christos       if (sym->is_argument ())
   1696  1.10  christos 	gdb_printf (_("an argument in register %s"),
   1697   1.1  christos 		    gdbarch_register_name (gdbarch, regno));
   1698   1.1  christos       else
   1699   1.1  christos 	gdb_printf (_("a variable in register %s"),
   1700  1.10  christos 		    gdbarch_register_name (gdbarch, regno));
   1701  1.10  christos       break;
   1702   1.8  christos 
   1703   1.8  christos     case LOC_STATIC:
   1704   1.1  christos       gdb_printf (_("static storage at address "));
   1705   1.1  christos       load_addr = sym->value_address ();
   1706   1.1  christos       fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
   1707  1.10  christos 		    gdb_stdout);
   1708   1.8  christos       if (section_is_overlay (section))
   1709   1.8  christos 	{
   1710  1.10  christos 	  load_addr = overlay_unmapped_address (load_addr, section);
   1711  1.10  christos 	  gdb_printf (_(",\n -- loaded at "));
   1712   1.1  christos 	  fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
   1713   1.1  christos 			gdb_stdout);
   1714   1.1  christos 	  gdb_printf (_(" in overlay section %s"),
   1715   1.1  christos 		      section->the_bfd_section->name);
   1716   1.1  christos 	}
   1717  1.11  christos       break;
   1718  1.10  christos 
   1719  1.10  christos     case LOC_REGPARM_ADDR:
   1720   1.1  christos       /* Note comment at LOC_REGISTER.  */
   1721   1.1  christos       regno = sym->register_ops ()->register_number (sym, gdbarch);
   1722   1.1  christos       gdb_printf (_("address of an argument in register %s"),
   1723  1.10  christos 		  gdbarch_register_name (gdbarch, regno));
   1724   1.1  christos       break;
   1725   1.1  christos 
   1726   1.1  christos     case LOC_ARG:
   1727  1.10  christos       gdb_printf (_("an argument at offset %ld"), val);
   1728   1.1  christos       break;
   1729   1.1  christos 
   1730   1.1  christos     case LOC_LOCAL:
   1731  1.10  christos       gdb_printf (_("a local variable at frame offset %ld"), val);
   1732   1.1  christos       break;
   1733   1.1  christos 
   1734   1.1  christos     case LOC_REF_ARG:
   1735  1.10  christos       gdb_printf (_("a reference argument at offset %ld"), val);
   1736   1.1  christos       break;
   1737   1.1  christos 
   1738   1.1  christos     case LOC_TYPEDEF:
   1739  1.10  christos       gdb_printf (_("a typedef"));
   1740  1.10  christos       break;
   1741   1.8  christos 
   1742   1.8  christos     case LOC_BLOCK:
   1743   1.1  christos       gdb_printf (_("a function at address "));
   1744   1.1  christos       load_addr = sym->value_block ()->entry_pc ();
   1745   1.1  christos       fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
   1746  1.10  christos 		    gdb_stdout);
   1747   1.8  christos       if (section_is_overlay (section))
   1748   1.8  christos 	{
   1749  1.10  christos 	  load_addr = overlay_unmapped_address (load_addr, section);
   1750  1.10  christos 	  gdb_printf (_(",\n -- loaded at "));
   1751   1.1  christos 	  fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
   1752   1.1  christos 			gdb_stdout);
   1753   1.1  christos 	  gdb_printf (_(" in overlay section %s"),
   1754   1.1  christos 		      section->the_bfd_section->name);
   1755   1.1  christos 	}
   1756  1.12  christos       break;
   1757  1.12  christos 
   1758  1.12  christos     case LOC_UNRESOLVED:
   1759   1.1  christos       {
   1760  1.10  christos 	bound_minimal_symbol msym
   1761   1.1  christos 	  = lookup_minimal_symbol (current_program_space,
   1762   1.1  christos 				   sym->linkage_name ());
   1763  1.10  christos 	if (msym.minsym == NULL)
   1764   1.1  christos 	  gdb_printf ("unresolved");
   1765   1.1  christos 	else
   1766   1.1  christos 	  {
   1767   1.6  christos 	    section = msym.obj_section ();
   1768  1.11  christos 
   1769  1.10  christos 	    if (section
   1770  1.10  christos 		&& (section->the_bfd_section->flags & SEC_THREAD_LOCAL) != 0)
   1771  1.10  christos 	      {
   1772  1.10  christos 		load_addr = CORE_ADDR (msym.minsym->unrelocated_address ());
   1773   1.6  christos 		gdb_printf (_("a thread-local variable at offset %s "
   1774   1.1  christos 			      "in the thread-local storage for `%s'"),
   1775   1.1  christos 			    paddress (gdbarch, load_addr),
   1776  1.10  christos 			    objfile_name (section->objfile));
   1777  1.10  christos 	      }
   1778   1.8  christos 	    else
   1779   1.8  christos 	      {
   1780   1.1  christos 		load_addr = msym.value_address ();
   1781   1.1  christos 		gdb_printf (_("static storage at address "));
   1782   1.1  christos 		fputs_styled (paddress (gdbarch, load_addr),
   1783  1.10  christos 			      address_style.style (), gdb_stdout);
   1784   1.8  christos 		if (section_is_overlay (section))
   1785   1.8  christos 		  {
   1786   1.8  christos 		    load_addr = overlay_unmapped_address (load_addr, section);
   1787  1.10  christos 		    gdb_printf (_(",\n -- loaded at "));
   1788  1.10  christos 		    fputs_styled (paddress (gdbarch, load_addr),
   1789   1.1  christos 				  address_style.style (),
   1790   1.1  christos 				  gdb_stdout);
   1791   1.1  christos 		    gdb_printf (_(" in overlay section %s"),
   1792   1.1  christos 				section->the_bfd_section->name);
   1793   1.1  christos 		  }
   1794   1.1  christos 	      }
   1795   1.1  christos 	  }
   1796  1.10  christos       }
   1797   1.1  christos       break;
   1798   1.1  christos 
   1799   1.1  christos     case LOC_OPTIMIZED_OUT:
   1800  1.10  christos       gdb_printf (_("optimized out"));
   1801   1.1  christos       break;
   1802   1.1  christos 
   1803  1.10  christos     default:
   1804   1.1  christos       gdb_printf (_("of unknown (botched) type"));
   1805   1.1  christos       break;
   1806   1.1  christos     }
   1807   1.1  christos   gdb_printf (".\n");
   1808   1.8  christos }
   1809   1.1  christos 
   1810   1.1  christos 
   1812   1.1  christos static void
   1813   1.1  christos x_command (const char *exp, int from_tty)
   1814  1.10  christos {
   1815   1.1  christos   struct format_data fmt;
   1816   1.1  christos   struct value *val;
   1817   1.1  christos 
   1818   1.1  christos   fmt.format = last_format ? last_format : 'x';
   1819   1.8  christos   fmt.print_tags = last_print_tags;
   1820   1.8  christos   fmt.size = last_size;
   1821   1.8  christos   fmt.count = 1;
   1822   1.8  christos   fmt.raw = 0;
   1823   1.8  christos 
   1824   1.1  christos   /* If there is no expression and no format, use the most recent
   1825   1.1  christos      count.  */
   1826   1.1  christos   if (exp == nullptr && last_count > 0)
   1827   1.1  christos     fmt.count = last_count;
   1828   1.1  christos 
   1829   1.1  christos   if (exp && *exp == '/')
   1830   1.1  christos     {
   1831   1.1  christos       const char *tmp = exp + 1;
   1832   1.8  christos 
   1833   1.8  christos       fmt = decode_format (&tmp, last_format, last_size);
   1834   1.1  christos       exp = (char *) tmp;
   1835   1.1  christos     }
   1836   1.1  christos 
   1837   1.1  christos   last_count = fmt.count;
   1838   1.7  christos 
   1839   1.1  christos   /* If we have an expression, evaluate it and use it as the address.  */
   1840  1.10  christos 
   1841  1.10  christos   if (exp != 0 && *exp != 0)
   1842   1.1  christos     {
   1843   1.8  christos       expression_up expr = parse_expression (exp);
   1844  1.11  christos       /* Cause expression not to be there any more if this command is
   1845  1.11  christos 	 repeated with Newline.  But don't clobber a user-defined
   1846   1.1  christos 	 command's definition.  */
   1847   1.1  christos       if (from_tty)
   1848  1.10  christos 	set_repeat_arguments ("");
   1849  1.11  christos       val = expr->evaluate ();
   1850  1.11  christos       if (TYPE_IS_REFERENCE (val->type ()))
   1851  1.11  christos 	val = coerce_ref (val);
   1852   1.1  christos       /* In rvalue contexts, such as this, functions are coerced into
   1853   1.1  christos 	 pointers to functions.  This makes "x/i main" work.  */
   1854   1.1  christos       if (val->type ()->code () == TYPE_CODE_FUNC
   1855   1.1  christos 	  && val->lval () == lval_memory)
   1856   1.1  christos 	next_address = val->address ();
   1857   1.1  christos       else
   1858   1.1  christos 	next_address = value_as_address (val);
   1859   1.1  christos 
   1860   1.1  christos       next_gdbarch = expr->gdbarch;
   1861   1.1  christos     }
   1862   1.1  christos 
   1863   1.1  christos   if (!next_gdbarch)
   1864   1.1  christos     error_no_arg (_("starting display address"));
   1865   1.1  christos 
   1866   1.1  christos   do_examine (fmt, next_gdbarch, next_address);
   1867   1.1  christos 
   1868   1.1  christos   /* If the examine succeeds, we remember its size and format for next
   1869   1.1  christos      time.  Set last_size to 'b' for strings.  */
   1870   1.1  christos   if (fmt.format == 's')
   1871  1.10  christos     last_size = 'b';
   1872  1.10  christos   else
   1873  1.10  christos     last_size = fmt.size;
   1874   1.1  christos   last_format = fmt.format;
   1875   1.8  christos 
   1876   1.1  christos   /* Remember tag-printing setting.  */
   1877   1.1  christos   last_print_tags = fmt.print_tags;
   1878  1.10  christos 
   1879   1.1  christos   /* Set a couple of internal variables if appropriate.  */
   1880  1.11  christos   if (last_examine_value != nullptr)
   1881   1.1  christos     {
   1882   1.1  christos       /* Make last address examined available to the user as $_.  Use
   1883   1.1  christos 	 the correct pointer type.  */
   1884   1.1  christos       struct type *pointer_type
   1885   1.1  christos 	= lookup_pointer_type (last_examine_value->type ());
   1886   1.1  christos       set_internalvar (lookup_internalvar ("_"),
   1887   1.1  christos 		       value_from_pointer (pointer_type,
   1888   1.1  christos 					   last_examine_address));
   1889  1.11  christos 
   1890   1.1  christos       /* Make contents of last address examined available to the user
   1891   1.1  christos 	 as $__.  If the last value has not been fetched from memory
   1892   1.8  christos 	 then don't fetch it now; instead mark it by voiding the $__
   1893   1.1  christos 	 variable.  */
   1894   1.1  christos       if (last_examine_value->lazy ())
   1895  1.10  christos 	clear_internalvar (lookup_internalvar ("__"));
   1896  1.10  christos       else
   1897  1.10  christos 	set_internalvar (lookup_internalvar ("__"), last_examine_value.get ());
   1898  1.10  christos     }
   1899  1.10  christos }
   1900  1.10  christos 
   1901  1.10  christos /* Command completion for the 'display' and 'x' commands.  */
   1902  1.10  christos 
   1903  1.10  christos static void
   1904  1.10  christos display_and_x_command_completer (struct cmd_list_element *ignore,
   1905  1.10  christos 				 completion_tracker &tracker,
   1906  1.10  christos 				 const char *text, const char * /*word*/)
   1907  1.10  christos {
   1908  1.10  christos   if (skip_over_slash_fmt (tracker, &text))
   1909  1.10  christos     return;
   1910   1.1  christos 
   1911   1.1  christos   const char *word = advance_to_expression_complete_word_point (tracker, text);
   1912   1.1  christos   expression_completer (ignore, tracker, text, word);
   1913   1.1  christos }
   1914   1.1  christos 
   1915   1.1  christos 
   1916   1.8  christos 
   1918   1.1  christos /* Add an expression to the auto-display chain.
   1919   1.5  christos    Specify the expression.  */
   1920   1.1  christos 
   1921   1.1  christos static void
   1922   1.5  christos display_command (const char *arg, int from_tty)
   1923   1.5  christos {
   1924   1.5  christos   struct format_data fmt;
   1925   1.5  christos   struct display *newobj;
   1926   1.5  christos   const char *exp = arg;
   1927   1.1  christos 
   1928   1.5  christos   if (exp == 0)
   1929   1.1  christos     {
   1930   1.5  christos       do_displays ();
   1931   1.5  christos       return;
   1932   1.5  christos     }
   1933   1.5  christos 
   1934   1.5  christos   if (*exp == '/')
   1935   1.5  christos     {
   1936   1.5  christos       exp++;
   1937   1.5  christos       fmt = decode_format (&exp, 0, 0);
   1938   1.5  christos       if (fmt.size && fmt.format == 0)
   1939   1.5  christos 	fmt.format = 'x';
   1940   1.5  christos       if (fmt.format == 'i' || fmt.format == 's')
   1941   1.5  christos 	fmt.size = 'b';
   1942   1.5  christos     }
   1943   1.5  christos   else
   1944   1.1  christos     {
   1945   1.9  christos       fmt.format = 0;
   1946   1.9  christos       fmt.size = 0;
   1947   1.6  christos       fmt.count = 0;
   1948   1.9  christos       fmt.raw = 0;
   1949   1.9  christos     }
   1950   1.9  christos 
   1951   1.1  christos   innermost_block_tracker tracker;
   1952   1.5  christos   expression_up expr = parse_expression (exp, &tracker);
   1953   1.5  christos 
   1954   1.1  christos   newobj = new display (exp, std::move (expr), fmt,
   1955   1.5  christos 			current_program_space, tracker.block ());
   1956   1.1  christos   all_displays.emplace_back (newobj);
   1957   1.1  christos 
   1958   1.1  christos   if (from_tty)
   1959   1.1  christos     do_one_display (newobj);
   1960   1.1  christos 
   1961   1.1  christos   dont_repeat ();
   1962   1.9  christos }
   1963   1.1  christos 
   1964   1.9  christos /* Clear out the display_chain.  Done when new symtabs are loaded,
   1965   1.1  christos    since this invalidates the types stored in many expressions.  */
   1966   1.1  christos 
   1967   1.1  christos void
   1968   1.1  christos clear_displays ()
   1969   1.1  christos {
   1970   1.1  christos   all_displays.clear ();
   1971   1.1  christos }
   1972   1.1  christos 
   1973   1.1  christos /* Delete the auto-display DISPLAY.  */
   1974   1.9  christos 
   1975   1.9  christos static void
   1976   1.9  christos delete_display (struct display *display)
   1977   1.9  christos {
   1978   1.9  christos   gdb_assert (display != NULL);
   1979   1.9  christos 
   1980   1.9  christos   auto iter = std::find_if (all_displays.begin (),
   1981   1.9  christos 			    all_displays.end (),
   1982   1.1  christos 			    [=] (const std::unique_ptr<struct display> &item)
   1983   1.1  christos 			    {
   1984   1.1  christos 			      return item.get () == display;
   1985   1.1  christos 			    });
   1986   1.1  christos   gdb_assert (iter != all_displays.end ());
   1987   1.1  christos   all_displays.erase (iter);
   1988   1.8  christos }
   1989   1.9  christos 
   1990   1.1  christos /* Call FUNCTION on each of the displays whose numbers are given in
   1991   1.1  christos    ARGS.  DATA is passed unmodified to FUNCTION.  */
   1992   1.1  christos 
   1993   1.1  christos static void
   1994   1.1  christos map_display_numbers (const char *args,
   1995   1.1  christos 		     gdb::function_view<void (struct display *)> function)
   1996   1.7  christos {
   1997   1.1  christos   int num;
   1998   1.7  christos 
   1999   1.1  christos   if (args == NULL)
   2000   1.7  christos     error_no_arg (_("one or more display numbers"));
   2001   1.1  christos 
   2002   1.7  christos   number_or_range_parser parser (args);
   2003   1.1  christos 
   2004   1.1  christos   while (!parser.finished ())
   2005   1.1  christos     {
   2006   1.1  christos       const char *p = parser.cur_tok ();
   2007   1.9  christos 
   2008   1.9  christos       num = parser.get_number ();
   2009   1.9  christos       if (num == 0)
   2010   1.9  christos 	warning (_("bad display number at or near '%s'"), p);
   2011   1.9  christos       else
   2012   1.9  christos 	{
   2013   1.9  christos 	  auto iter = std::find_if (all_displays.begin (),
   2014  1.10  christos 				    all_displays.end (),
   2015   1.1  christos 				    [=] (const std::unique_ptr<display> &item)
   2016   1.9  christos 				    {
   2017   1.1  christos 				      return item->number == num;
   2018   1.1  christos 				    });
   2019   1.1  christos 	  if (iter == all_displays.end ())
   2020   1.1  christos 	    gdb_printf (_("No display number %d.\n"), num);
   2021   1.1  christos 	  else
   2022   1.1  christos 	    function (iter->get ());
   2023   1.1  christos 	}
   2024   1.8  christos     }
   2025   1.1  christos }
   2026   1.1  christos 
   2027   1.1  christos /* "undisplay" command.  */
   2028   1.1  christos 
   2029   1.1  christos static void
   2030   1.1  christos undisplay_command (const char *args, int from_tty)
   2031   1.1  christos {
   2032   1.1  christos   if (args == NULL)
   2033   1.1  christos     {
   2034   1.9  christos       if (query (_("Delete all auto-display expressions? ")))
   2035   1.1  christos 	clear_displays ();
   2036   1.1  christos       dont_repeat ();
   2037   1.1  christos       return;
   2038   1.1  christos     }
   2039   1.1  christos 
   2040   1.1  christos   map_display_numbers (args, delete_display);
   2041   1.1  christos   dont_repeat ();
   2042   1.1  christos }
   2043   1.1  christos 
   2044   1.1  christos /* Display a single auto-display.
   2045   1.1  christos    Do nothing if the display cannot be printed in the current context,
   2046   1.1  christos    or if the display is disabled.  */
   2047   1.9  christos 
   2048   1.1  christos static void
   2049   1.1  christos do_one_display (struct display *d)
   2050   1.1  christos {
   2051   1.1  christos   int within_current_scope;
   2052   1.1  christos 
   2053   1.1  christos   if (!d->enabled_p)
   2054   1.1  christos     return;
   2055   1.1  christos 
   2056   1.1  christos   /* The expression carries the architecture that was used at parse time.
   2057   1.1  christos      This is a problem if the expression depends on architecture features
   2058   1.1  christos      (e.g. register numbers), and the current architecture is now different.
   2059   1.7  christos      For example, a display statement like "display/i $pc" is expected to
   2060   1.1  christos      display the PC register of the current architecture, not the arch at
   2061   1.1  christos      the time the display command was given.  Therefore, we re-parse the
   2062   1.1  christos      expression if the current architecture has changed.  */
   2063   1.1  christos   if (d->exp != NULL && d->exp->gdbarch != get_current_arch ())
   2064   1.1  christos     {
   2065   1.1  christos       d->exp.reset ();
   2066   1.9  christos       d->block = NULL;
   2067   1.1  christos     }
   2068   1.9  christos 
   2069   1.9  christos   if (d->exp == NULL)
   2070   1.9  christos     {
   2071   1.1  christos 
   2072  1.11  christos       try
   2073   1.1  christos 	{
   2074   1.1  christos 	  innermost_block_tracker tracker;
   2075   1.9  christos 	  d->exp = parse_expression (d->exp_string.c_str (), &tracker);
   2076   1.1  christos 	  d->block = tracker.block ();
   2077   1.9  christos 	}
   2078   1.1  christos       catch (const gdb_exception_error &ex)
   2079   1.1  christos 	{
   2080   1.1  christos 	  /* Can't re-parse the expression.  Disable this display item.  */
   2081   1.1  christos 	  d->enabled_p = false;
   2082   1.1  christos 	  warning (_("Unable to display \"%s\": %s"),
   2083   1.1  christos 		   d->exp_string.c_str (), ex.what ());
   2084   1.1  christos 	  return;
   2085  1.11  christos 	}
   2086  1.11  christos     }
   2087   1.1  christos 
   2088   1.1  christos   if (d->block)
   2089   1.1  christos     {
   2090   1.1  christos       if (d->pspace == current_program_space)
   2091   1.1  christos 	within_current_scope = d->block->contains (get_selected_block (0),
   2092   1.1  christos 						   true);
   2093   1.1  christos       else
   2094   1.1  christos 	within_current_scope = 0;
   2095   1.7  christos     }
   2096   1.7  christos   else
   2097   1.1  christos     within_current_scope = 1;
   2098   1.1  christos   if (!within_current_scope)
   2099  1.10  christos     return;
   2100   1.1  christos 
   2101  1.10  christos   scoped_restore save_display_number
   2102   1.1  christos     = make_scoped_restore (&current_display_number, d->number);
   2103   1.1  christos 
   2104   1.1  christos   annotate_display_begin ();
   2105   1.1  christos   gdb_printf ("%d", d->number);
   2106   1.1  christos   annotate_display_number_end ();
   2107  1.10  christos   gdb_printf (": ");
   2108   1.1  christos   if (d->format.size)
   2109  1.10  christos     {
   2110  1.10  christos 
   2111   1.1  christos       annotate_display_format ();
   2112  1.10  christos 
   2113  1.10  christos       gdb_printf ("x/");
   2114   1.1  christos       if (d->format.count != 1)
   2115   1.1  christos 	gdb_printf ("%d", d->format.count);
   2116   1.1  christos       gdb_printf ("%c", d->format.format);
   2117  1.10  christos       if (d->format.format != 'i' && d->format.format != 's')
   2118   1.1  christos 	gdb_printf ("%c", d->format.size);
   2119   1.1  christos       gdb_printf (" ");
   2120   1.1  christos 
   2121  1.10  christos       annotate_display_expression ();
   2122   1.1  christos 
   2123  1.10  christos       gdb_puts (d->exp_string.c_str ());
   2124   1.1  christos       annotate_display_expression_end ();
   2125   1.1  christos 
   2126   1.1  christos       if (d->format.count != 1 || d->format.format == 'i')
   2127   1.9  christos 	gdb_printf ("\n");
   2128  1.10  christos       else
   2129   1.1  christos 	gdb_printf ("  ");
   2130   1.1  christos 
   2131   1.1  christos       annotate_display_value ();
   2132  1.11  christos 
   2133   1.1  christos       try
   2134   1.1  christos 	{
   2135   1.1  christos 	  struct value *val;
   2136   1.1  christos 	  CORE_ADDR addr;
   2137   1.1  christos 
   2138   1.9  christos 	  val = d->exp->evaluate ();
   2139   1.5  christos 	  addr = value_as_address (val);
   2140  1.10  christos 	  if (d->format.format == 'i')
   2141  1.10  christos 	    addr = gdbarch_addr_bits_remove (d->exp->gdbarch, addr);
   2142  1.10  christos 	  do_examine (d->format, d->exp->gdbarch, addr);
   2143   1.5  christos 	}
   2144   1.1  christos       catch (const gdb_exception_error &ex)
   2145   1.1  christos 	{
   2146   1.1  christos 	  gdb_printf (_("%p[<error: %s>%p]\n"),
   2147   1.1  christos 		      metadata_style.style ().ptr (), ex.what (),
   2148   1.1  christos 		      nullptr);
   2149   1.1  christos 	}
   2150   1.1  christos     }
   2151   1.1  christos   else
   2152  1.10  christos     {
   2153   1.1  christos       struct value_print_options opts;
   2154   1.1  christos 
   2155   1.1  christos       annotate_display_format ();
   2156  1.10  christos 
   2157   1.1  christos       if (d->format.format)
   2158   1.1  christos 	gdb_printf ("/%c ", d->format.format);
   2159  1.10  christos 
   2160   1.1  christos       annotate_display_expression ();
   2161   1.1  christos 
   2162   1.1  christos       gdb_puts (d->exp_string.c_str ());
   2163   1.1  christos       annotate_display_expression_end ();
   2164   1.1  christos 
   2165   1.1  christos       gdb_printf (" = ");
   2166   1.9  christos 
   2167  1.10  christos       annotate_display_expression ();
   2168   1.1  christos 
   2169   1.1  christos       get_formatted_print_options (&opts, d->format.format);
   2170  1.11  christos       opts.raw = d->format.raw;
   2171   1.1  christos 
   2172   1.1  christos       try
   2173   1.9  christos 	{
   2174   1.5  christos 	  struct value *val;
   2175   1.9  christos 
   2176   1.9  christos 	  val = d->exp->evaluate ();
   2177   1.5  christos 	  print_formatted (val, d->format.size, &opts, gdb_stdout);
   2178   1.5  christos 	}
   2179  1.10  christos       catch (const gdb_exception_error &ex)
   2180   1.1  christos 	{
   2181   1.1  christos 	  fprintf_styled (gdb_stdout, metadata_style.style (),
   2182   1.1  christos 			  _("<error: %s>"), ex.what ());
   2183   1.1  christos 	}
   2184   1.1  christos 
   2185   1.1  christos       gdb_printf ("\n");
   2186   1.1  christos     }
   2187   1.1  christos 
   2188   1.1  christos   annotate_display_end ();
   2189   1.1  christos 
   2190   1.1  christos   gdb_flush (gdb_stdout);
   2191   1.1  christos }
   2192   1.1  christos 
   2193   1.9  christos /* Display all of the values on the auto-display chain which can be
   2194   1.9  christos    evaluated in the current scope.  */
   2195   1.1  christos 
   2196   1.1  christos void
   2197   1.1  christos do_displays (void)
   2198   1.1  christos {
   2199   1.1  christos   for (auto &d : all_displays)
   2200   1.1  christos     do_one_display (d.get ());
   2201   1.1  christos }
   2202   1.1  christos 
   2203   1.9  christos /* Delete the auto-display which we were in the process of displaying.
   2204   1.1  christos    This is done when there is an error or a signal.  */
   2205   1.1  christos 
   2206   1.9  christos void
   2207   1.1  christos disable_display (int num)
   2208   1.1  christos {
   2209  1.10  christos   for (auto &d : all_displays)
   2210   1.1  christos     if (d->number == num)
   2211   1.1  christos       {
   2212   1.1  christos 	d->enabled_p = false;
   2213   1.1  christos 	return;
   2214   1.1  christos       }
   2215   1.1  christos   gdb_printf (_("No display number %d.\n"), num);
   2216   1.1  christos }
   2217   1.1  christos 
   2218  1.10  christos void
   2219  1.10  christos disable_current_display (void)
   2220  1.10  christos {
   2221  1.10  christos   if (current_display_number >= 0)
   2222   1.1  christos     {
   2223   1.1  christos       disable_display (current_display_number);
   2224   1.1  christos       gdb_printf (gdb_stderr,
   2225   1.1  christos 		  _("Disabling display %d to "
   2226   1.1  christos 		    "avoid infinite recursion.\n"),
   2227   1.8  christos 		  current_display_number);
   2228   1.1  christos     }
   2229   1.9  christos   current_display_number = -1;
   2230  1.10  christos }
   2231   1.1  christos 
   2232  1.10  christos static void
   2233   1.1  christos info_display_command (const char *ignore, int from_tty)
   2234   1.1  christos {
   2235   1.9  christos   if (all_displays.empty ())
   2236   1.1  christos     gdb_printf (_("There are no auto-display expressions now.\n"));
   2237  1.10  christos   else
   2238   1.1  christos     gdb_printf (_("Auto-display expressions now in effect:\n\
   2239  1.10  christos Num Enb Expression\n"));
   2240  1.10  christos 
   2241   1.1  christos   for (auto &d : all_displays)
   2242  1.10  christos     {
   2243  1.10  christos       gdb_printf ("%d:   %c  ", d->number, "ny"[(int) d->enabled_p]);
   2244  1.11  christos       if (d->format.size)
   2245  1.10  christos 	gdb_printf ("/%d%c%c ", d->format.count, d->format.size,
   2246  1.10  christos 		    d->format.format);
   2247   1.1  christos       else if (d->format.format)
   2248   1.1  christos 	gdb_printf ("/%c ", d->format.format);
   2249   1.1  christos       gdb_puts (d->exp_string.c_str ());
   2250   1.9  christos       if (d->block && !d->block->contains (get_selected_block (0), true))
   2251   1.1  christos 	gdb_printf (_(" (cannot be evaluated in the current context)"));
   2252   1.1  christos       gdb_printf ("\n");
   2253   1.1  christos     }
   2254   1.9  christos }
   2255   1.1  christos 
   2256   1.1  christos /* Implementation of both the "disable display" and "enable display"
   2257   1.1  christos    commands.  ENABLE decides what to do.  */
   2258   1.9  christos 
   2259   1.1  christos static void
   2260   1.1  christos enable_disable_display_command (const char *args, int from_tty, bool enable)
   2261   1.1  christos {
   2262   1.1  christos   if (args == NULL)
   2263   1.9  christos     {
   2264   1.9  christos       for (auto &d : all_displays)
   2265   1.9  christos 	d->enabled_p = enable;
   2266   1.9  christos       return;
   2267   1.9  christos     }
   2268   1.1  christos 
   2269   1.1  christos   map_display_numbers (args,
   2270   1.1  christos 		       [=] (struct display *d)
   2271   1.1  christos 		       {
   2272   1.1  christos 			 d->enabled_p = enable;
   2273   1.8  christos 		       });
   2274   1.1  christos }
   2275   1.9  christos 
   2276   1.1  christos /* The "enable display" command.  */
   2277   1.1  christos 
   2278   1.1  christos static void
   2279   1.1  christos enable_display_command (const char *args, int from_tty)
   2280   1.1  christos {
   2281   1.8  christos   enable_disable_display_command (args, from_tty, true);
   2282   1.1  christos }
   2283   1.9  christos 
   2284   1.1  christos /* The "disable display" command.  */
   2285   1.1  christos 
   2286   1.1  christos static void
   2287   1.1  christos disable_display_command (const char *args, int from_tty)
   2288   1.1  christos {
   2289   1.1  christos   enable_disable_display_command (args, from_tty, false);
   2290   1.1  christos }
   2291   1.1  christos 
   2292   1.1  christos /* display_chain items point to blocks and expressions.  Some expressions in
   2293   1.1  christos    turn may point to symbols.
   2294   1.1  christos    Both symbols and blocks are obstack_alloc'd on objfile_stack, and are
   2295   1.1  christos    obstack_free'd when a shared library is unloaded.
   2296   1.1  christos    Clear pointers that are about to become dangling.
   2297  1.12  christos    Both .exp and .block fields will be restored next time we need to display
   2298   1.1  christos    an item by re-parsing .exp_string field in the new execution context.  */
   2299   1.1  christos 
   2300   1.1  christos static void
   2301  1.12  christos clear_dangling_display_expressions (struct objfile *objfile)
   2302   1.1  christos {
   2303   1.1  christos   program_space *pspace = objfile->pspace ();
   2304   1.9  christos   if (objfile->separate_debug_objfile_backlink)
   2305   1.1  christos     {
   2306   1.1  christos       objfile = objfile->separate_debug_objfile_backlink;
   2307   1.1  christos       gdb_assert (objfile->pspace () == pspace);
   2308   1.1  christos     }
   2309   1.9  christos 
   2310   1.9  christos   for (auto &d : all_displays)
   2311   1.9  christos     {
   2312  1.11  christos       if (d->pspace != pspace)
   2313   1.9  christos 	continue;
   2314   1.9  christos 
   2315   1.9  christos       struct objfile *bl_objf = nullptr;
   2316   1.9  christos       if (d->block != nullptr)
   2317   1.9  christos 	{
   2318  1.11  christos 	  bl_objf = d->block->objfile ();
   2319   1.9  christos 	  if (bl_objf->separate_debug_objfile_backlink != nullptr)
   2320   1.9  christos 	    bl_objf = bl_objf->separate_debug_objfile_backlink;
   2321   1.9  christos 	}
   2322   1.9  christos 
   2323   1.1  christos       if (bl_objf == objfile
   2324   1.1  christos 	  || (d->exp != nullptr && d->exp->uses_objfile (objfile)))
   2325   1.1  christos 	{
   2326   1.1  christos 	  d->exp.reset ();
   2327   1.1  christos 	  d->block = NULL;
   2328   1.1  christos 	}
   2329   1.1  christos     }
   2330   1.1  christos }
   2331  1.11  christos 
   2332   1.1  christos 
   2334   1.1  christos /* Print the value in stack frame FRAME of a variable specified by a
   2335  1.11  christos    struct symbol.  NAME is the name to print; if NULL then VAR's print
   2336   1.1  christos    name will be used.  STREAM is the ui_file on which to print the
   2337   1.1  christos    value.  INDENT specifies the number of indent levels to print
   2338   1.1  christos    before printing the variable name.  */
   2339   1.1  christos 
   2340   1.9  christos void
   2341   1.1  christos print_variable_and_value (const char *name, struct symbol *var,
   2342  1.10  christos 			  const frame_info_ptr &frame,
   2343  1.10  christos 			  struct ui_file *stream, int indent)
   2344   1.8  christos {
   2345   1.9  christos 
   2346   1.1  christos   if (!name)
   2347   1.1  christos     name = var->print_name ();
   2348   1.1  christos 
   2349   1.1  christos   gdb_printf (stream, "%*s%ps = ", 2 * indent, "",
   2350   1.6  christos 	      styled_string (variable_name_style.style (), name));
   2351   1.6  christos 
   2352   1.6  christos   try
   2353   1.6  christos     {
   2354   1.6  christos       struct value *val;
   2355   1.1  christos       struct value_print_options opts;
   2356  1.11  christos 
   2357  1.10  christos       /* READ_VAR_VALUE needs a block in order to deal with non-local
   2358   1.1  christos 	 references (i.e. to handle nested functions).  In this context, we
   2359   1.9  christos 	 print variables that are local to this frame, so we can avoid passing
   2360   1.5  christos 	 a block to it.  */
   2361   1.9  christos       val = read_var_value (var, NULL, frame);
   2362   1.9  christos       get_user_print_options (&opts);
   2363   1.9  christos       opts.deref_ref = true;
   2364   1.5  christos       common_val_print_checked (val, stream, indent, &opts, current_language);
   2365   1.5  christos     }
   2366  1.10  christos   catch (const gdb_exception_error &except)
   2367   1.1  christos     {
   2368   1.1  christos       fprintf_styled (stream, metadata_style.style (),
   2369   1.1  christos 		      "<error reading variable %s (%s)>", name,
   2370   1.1  christos 		      except.what ());
   2371   1.9  christos     }
   2372   1.9  christos 
   2373   1.1  christos   gdb_printf (stream, "\n");
   2374   1.1  christos }
   2375   1.1  christos 
   2376   1.1  christos /* Subroutine of ui_printf to simplify it.
   2377   1.1  christos    Print VALUE to STREAM using FORMAT.
   2378  1.11  christos    VALUE is a C-style string either on the target or
   2379   1.1  christos    in a GDB internal variable.  */
   2380  1.11  christos 
   2381  1.11  christos static void
   2382  1.11  christos printf_c_string (struct ui_file *stream, const char *format,
   2383   1.9  christos 		 struct value *value)
   2384  1.11  christos {
   2385   1.9  christos   gdb::byte_vector str;
   2386   1.9  christos 
   2387   1.9  christos   if (((value->type ()->code () != TYPE_CODE_PTR && value->lval () == lval_internalvar)
   2388   1.9  christos        || value->type ()->code () == TYPE_CODE_ARRAY)
   2389   1.9  christos       && c_is_string_type_p (value->type ()))
   2390  1.11  christos     {
   2391   1.9  christos       size_t len = value->type ()->length ();
   2392  1.11  christos 
   2393  1.11  christos       /* Copy the internal var value to TEM_STR and append a terminating null
   2394   1.9  christos 	 character.  This protects against corrupted C-style strings that lack
   2395   1.9  christos 	 the terminating null char.  It also allows Ada-style strings (not
   2396   1.8  christos 	 null terminated) to be printed without problems.  */
   2397   1.9  christos       str.resize (len + 1);
   2398   1.9  christos 
   2399   1.9  christos       memcpy (str.data (), value->contents ().data (), len);
   2400   1.9  christos       str [len] = 0;
   2401   1.9  christos     }
   2402   1.9  christos   else
   2403  1.10  christos     {
   2404   1.9  christos       CORE_ADDR tem = value_as_address (value);;
   2405   1.9  christos 
   2406   1.9  christos       if (tem == 0)
   2407   1.9  christos 	{
   2408  1.11  christos 	  DIAGNOSTIC_PUSH
   2409  1.11  christos 	  DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
   2410  1.11  christos 	    gdb_printf (stream, format, "(null)");
   2411   1.9  christos 	  DIAGNOSTIC_POP
   2412   1.9  christos 	  return;
   2413   1.9  christos 	}
   2414   1.9  christos 
   2415   1.9  christos       /* This is a %s argument.  Build the string in STR which is
   2416   1.9  christos 	 currently empty.  */
   2417  1.11  christos       gdb_assert (str.size () == 0);
   2418   1.9  christos       size_t len;
   2419  1.11  christos       for (len = 0;; len++)
   2420  1.11  christos 	{
   2421   1.9  christos 	  gdb_byte c;
   2422   1.9  christos 
   2423   1.9  christos 	  QUIT;
   2424   1.1  christos 
   2425  1.11  christos 	  read_memory (tem + len, &c, 1);
   2426  1.11  christos 	  if (!exceeds_max_value_size (len + 1))
   2427  1.11  christos 	    str.push_back (c);
   2428  1.11  christos 	  if (c == 0)
   2429  1.11  christos 	    break;
   2430  1.11  christos 	}
   2431  1.11  christos 
   2432  1.11  christos       if (exceeds_max_value_size (len + 1))
   2433  1.11  christos 	error (_("printed string requires %s bytes, which is more than "
   2434   1.1  christos 		 "max-value-size"), plongest (len + 1));
   2435   1.1  christos 
   2436   1.8  christos       /* We will have passed through the above loop at least once, and will
   2437   1.8  christos 	 only exit the loop when we have pushed a zero byte onto the end of
   2438  1.11  christos 	 STR.  */
   2439   1.8  christos       gdb_assert (str.size () > 0);
   2440   1.1  christos       gdb_assert (str.back () == 0);
   2441   1.1  christos     }
   2442   1.1  christos 
   2443   1.1  christos   DIAGNOSTIC_PUSH
   2444   1.9  christos   DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
   2445   1.9  christos     gdb_printf (stream, format, (char *) str.data ());
   2446   1.1  christos   DIAGNOSTIC_POP
   2447   1.1  christos }
   2448   1.1  christos 
   2449   1.1  christos /* Subroutine of ui_printf to simplify it.
   2450   1.1  christos    Print VALUE to STREAM using FORMAT.
   2451   1.9  christos    VALUE is a wide C-style string on the target or
   2452   1.9  christos    in a GDB internal variable.  */
   2453  1.11  christos 
   2454   1.9  christos static void
   2455   1.1  christos printf_wide_c_string (struct ui_file *stream, const char *format,
   2456  1.10  christos 		      struct value *value)
   2457  1.11  christos {
   2458   1.1  christos   const gdb_byte *str;
   2459  1.11  christos   size_t len;
   2460  1.11  christos   struct gdbarch *gdbarch = value->type ()->arch ();
   2461   1.8  christos   struct type *wctype = lookup_typename (current_language,
   2462  1.11  christos 					 "wchar_t", NULL, 0);
   2463  1.11  christos   int wcwidth = wctype->length ();
   2464   1.8  christos   std::optional<gdb::byte_vector> tem_str;
   2465   1.9  christos 
   2466   1.9  christos   if (value->lval () == lval_internalvar
   2467   1.9  christos       && c_is_string_type_p (value->type ()))
   2468   1.9  christos     {
   2469   1.9  christos       str = value->contents ().data ();
   2470   1.9  christos       len = value->type ()->length ();
   2471   1.9  christos     }
   2472   1.9  christos   else
   2473  1.10  christos     {
   2474   1.9  christos       CORE_ADDR tem = value_as_address (value);
   2475   1.9  christos 
   2476   1.9  christos       if (tem == 0)
   2477   1.9  christos 	{
   2478   1.9  christos 	  DIAGNOSTIC_PUSH
   2479   1.9  christos 	  DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
   2480  1.11  christos 	    gdb_printf (stream, format, "(null)");
   2481   1.9  christos 	  DIAGNOSTIC_POP
   2482   1.9  christos 	  return;
   2483   1.9  christos 	}
   2484   1.9  christos 
   2485  1.11  christos       /* This is a %s argument.  Find the length of the string.  */
   2486  1.11  christos       enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   2487  1.11  christos       tem_str.emplace ();
   2488  1.11  christos 
   2489  1.11  christos       for (len = 0;; len += wcwidth)
   2490  1.11  christos 	{
   2491  1.11  christos 	  QUIT;
   2492  1.11  christos 	  gdb_byte *dst;
   2493  1.11  christos 	  if (!exceeds_max_value_size (len + wcwidth))
   2494  1.11  christos 	    {
   2495  1.11  christos 	      tem_str->resize (tem_str->size () + wcwidth);
   2496  1.11  christos 	      dst = tem_str->data () + len;
   2497  1.11  christos 	    }
   2498  1.11  christos 	  else
   2499  1.11  christos 	    {
   2500  1.11  christos 	      /* We still need to check for the null-character, so we need
   2501  1.11  christos 		 somewhere to place the data read from the inferior.  We
   2502  1.11  christos 		 can't keep growing TEM_STR, it's gotten too big, so
   2503  1.11  christos 		 instead just read the new character into the start of
   2504  1.11  christos 		 TEMS_STR.  This will corrupt the previously read contents,
   2505  1.11  christos 		 but we're not going to print this string anyway, we just
   2506  1.11  christos 		 want to know how big it would have been so we can tell the
   2507  1.11  christos 		 user in the error message (see below).
   2508  1.11  christos 
   2509   1.9  christos 		 And we know there will be space in this buffer so long as
   2510   1.9  christos 		 WCWIDTH is smaller than our LONGEST type, the
   2511   1.1  christos 		 max-value-size can't be smaller than a LONGEST.  */
   2512  1.11  christos 	      dst = tem_str->data ();
   2513  1.11  christos 	    }
   2514  1.11  christos 	  read_memory (tem + len, dst, wcwidth);
   2515   1.9  christos 	  if (extract_unsigned_integer (dst, wcwidth, byte_order) == 0)
   2516  1.11  christos 	    break;
   2517   1.1  christos 	}
   2518   1.1  christos 
   2519   1.8  christos       if (exceeds_max_value_size (len + wcwidth))
   2520   1.1  christos 	error (_("printed string requires %s bytes, which is more than "
   2521   1.1  christos 		 "max-value-size"), plongest (len + wcwidth));
   2522   1.1  christos 
   2523   1.9  christos       str = tem_str->data ();
   2524   1.1  christos     }
   2525   1.1  christos 
   2526   1.1  christos   auto_obstack output;
   2527   1.8  christos 
   2528   1.8  christos   convert_between_encodings (target_wide_charset (gdbarch),
   2529  1.10  christos 			     host_charset (),
   2530   1.8  christos 			     str, len, wcwidth,
   2531   1.1  christos 			     &output, translit_char);
   2532   1.1  christos   obstack_grow_str0 (&output, "");
   2533   1.1  christos 
   2534   1.8  christos   DIAGNOSTIC_PUSH
   2535   1.1  christos   DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
   2536   1.1  christos     gdb_printf (stream, format, obstack_base (&output));
   2537   1.8  christos   DIAGNOSTIC_POP
   2538   1.8  christos }
   2539   1.1  christos 
   2540   1.1  christos /* Subroutine of ui_printf to simplify it.
   2541  1.11  christos    Print VALUE, a floating point value, to STREAM using FORMAT.  */
   2542  1.10  christos 
   2543   1.1  christos static void
   2544   1.8  christos printf_floating (struct ui_file *stream, const char *format,
   2545   1.8  christos 		 struct value *value, enum argclass argclass)
   2546   1.8  christos {
   2547   1.1  christos   /* Parameter data.  */
   2548   1.8  christos   struct type *param_type = value->type ();
   2549   1.8  christos   struct gdbarch *gdbarch = param_type->arch ();
   2550   1.8  christos 
   2551   1.8  christos   /* Determine target type corresponding to the format string.  */
   2552   1.8  christos   struct type *fmt_type;
   2553   1.8  christos   switch (argclass)
   2554   1.8  christos     {
   2555   1.8  christos       case double_arg:
   2556   1.8  christos 	fmt_type = builtin_type (gdbarch)->builtin_double;
   2557   1.8  christos 	break;
   2558   1.8  christos       case long_double_arg:
   2559   1.8  christos 	fmt_type = builtin_type (gdbarch)->builtin_long_double;
   2560   1.8  christos 	break;
   2561   1.8  christos       case dec32float_arg:
   2562   1.8  christos 	fmt_type = builtin_type (gdbarch)->builtin_decfloat;
   2563   1.8  christos 	break;
   2564   1.8  christos       case dec64float_arg:
   2565   1.1  christos 	fmt_type = builtin_type (gdbarch)->builtin_decdouble;
   2566   1.1  christos 	break;
   2567   1.8  christos       case dec128float_arg:
   2568   1.8  christos 	fmt_type = builtin_type (gdbarch)->builtin_declong;
   2569   1.8  christos 	break;
   2570   1.8  christos       default:
   2571   1.8  christos 	gdb_assert_not_reached ("unexpected argument class");
   2572   1.8  christos     }
   2573   1.8  christos 
   2574   1.8  christos   /* To match the traditional GDB behavior, the conversion is
   2575   1.8  christos      done differently depending on the type of the parameter:
   2576   1.8  christos 
   2577   1.8  christos      - if the parameter has floating-point type, it's value
   2578   1.8  christos        is converted to the target type;
   2579   1.8  christos 
   2580   1.8  christos      - otherwise, if the parameter has a type that is of the
   2581   1.8  christos        same size as a built-in floating-point type, the value
   2582   1.8  christos        bytes are interpreted as if they were of that type, and
   2583   1.1  christos        then converted to the target type (this is not done for
   2584   1.8  christos        decimal floating-point argument classes);
   2585   1.8  christos 
   2586   1.1  christos      - otherwise, if the source value has an integer value,
   2587   1.9  christos        it's value is converted to the target type;
   2588   1.8  christos 
   2589   1.8  christos      - otherwise, an error is raised.
   2590  1.11  christos 
   2591  1.10  christos      In either case, the result of the conversion is a byte buffer
   2592  1.11  christos      formatted in the target format for the target type.  */
   2593   1.8  christos 
   2594   1.1  christos   if (fmt_type->code () == TYPE_CODE_FLT)
   2595   1.8  christos     {
   2596   1.1  christos       param_type = float_type_from_length (param_type);
   2597   1.8  christos       if (param_type != value->type ())
   2598   1.8  christos 	value = value_from_contents (param_type,
   2599  1.11  christos 				     value->contents ().data ());
   2600  1.10  christos     }
   2601   1.1  christos 
   2602   1.1  christos   value = value_cast (fmt_type, value);
   2603   1.1  christos 
   2604   1.1  christos   /* Convert the value to a string and print it.  */
   2605   1.1  christos   std::string str
   2606   1.1  christos     = target_float_to_string (value->contents ().data (), fmt_type, format);
   2607   1.1  christos   gdb_puts (str.c_str (), stream);
   2608   1.1  christos }
   2609   1.1  christos 
   2610   1.1  christos /* Subroutine of ui_printf to simplify it.
   2611   1.1  christos    Print VALUE, a target pointer, to STREAM using FORMAT.  */
   2612   1.1  christos 
   2613   1.1  christos static void
   2614   1.1  christos printf_pointer (struct ui_file *stream, const char *format,
   2615   1.1  christos 		struct value *value)
   2616   1.1  christos {
   2617   1.1  christos   /* We avoid the host's %p because pointers are too
   2618   1.1  christos      likely to be the wrong size.  The only interesting
   2619   1.1  christos      modifier for %p is a width; extract that, and then
   2620   1.1  christos      handle %p as glibc would: %#x or a literal "(nil)".  */
   2621  1.11  christos 
   2622  1.11  christos #ifdef PRINTF_HAS_LONG_LONG
   2623   1.1  christos   long long val = value_as_long (value);
   2624   1.1  christos #else
   2625  1.11  christos   long val = value_as_long (value);
   2626   1.1  christos #endif
   2627   1.1  christos 
   2628   1.1  christos   /* Build the new output format in FMT.  */
   2629   1.1  christos   std::string fmt;
   2630  1.11  christos 
   2631   1.1  christos   /* Copy up to the leading %.  */
   2632   1.1  christos   const char *p = format;
   2633   1.1  christos   while (*p)
   2634  1.11  christos     {
   2635   1.1  christos       int is_percent = (*p == '%');
   2636   1.1  christos 
   2637   1.1  christos       fmt.push_back (*p++);
   2638   1.1  christos       if (is_percent)
   2639   1.1  christos 	{
   2640   1.1  christos 	  if (*p == '%')
   2641  1.11  christos 	    fmt.push_back (*p++);
   2642   1.1  christos 	  else
   2643   1.8  christos 	    break;
   2644   1.8  christos 	}
   2645   1.8  christos     }
   2646  1.11  christos 
   2647   1.1  christos   if (val != 0)
   2648   1.1  christos     fmt.push_back ('#');
   2649   1.1  christos 
   2650   1.1  christos   /* Copy any width or flags.  Only the "-" flag is valid for pointers
   2651   1.1  christos      -- see the format_pieces constructor.  */
   2652  1.11  christos   while (*p == '-' || (*p >= '0' && *p < '9'))
   2653   1.1  christos     fmt.push_back (*p++);
   2654  1.11  christos 
   2655  1.11  christos   gdb_assert (*p == 'p' && *(p + 1) == '\0');
   2656   1.8  christos   if (val != 0)
   2657   1.8  christos     {
   2658  1.11  christos #ifdef PRINTF_HAS_LONG_LONG
   2659   1.8  christos       fmt.push_back ('l');
   2660   1.1  christos #endif
   2661   1.1  christos       fmt.push_back ('l');
   2662   1.1  christos       fmt.push_back ('x');
   2663  1.11  christos       DIAGNOSTIC_PUSH
   2664   1.8  christos       DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
   2665   1.8  christos 	gdb_printf (stream, fmt.c_str (), val);
   2666  1.11  christos       DIAGNOSTIC_POP
   2667   1.8  christos     }
   2668   1.1  christos   else
   2669   1.1  christos     {
   2670   1.1  christos       fmt.push_back ('s');
   2671   1.1  christos       DIAGNOSTIC_PUSH
   2672   1.1  christos       DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
   2673   1.1  christos 	gdb_printf (stream, fmt.c_str (), "(nil)");
   2674   1.1  christos       DIAGNOSTIC_POP
   2675   1.1  christos     }
   2676   1.1  christos }
   2677   1.8  christos 
   2678   1.1  christos /* printf "printf format string" ARG to STREAM.  */
   2679   1.1  christos 
   2680   1.1  christos static void
   2681   1.1  christos ui_printf (const char *arg, struct ui_file *stream)
   2682   1.8  christos {
   2683   1.1  christos   const char *s = arg;
   2684   1.1  christos   std::vector<struct value *> val_args;
   2685   1.1  christos 
   2686   1.1  christos   if (s == 0)
   2687   1.1  christos     error_no_arg (_("format-control string and values to print"));
   2688  1.11  christos 
   2689   1.1  christos   s = skip_spaces (s);
   2690   1.1  christos 
   2691   1.1  christos   /* A format string should follow, enveloped in double quotes.  */
   2692   1.1  christos   if (*s++ != '"')
   2693   1.8  christos     error (_("Bad format string, missing '\"'."));
   2694   1.1  christos 
   2695   1.1  christos   format_pieces fpieces (&s, false, true);
   2696   1.1  christos 
   2697   1.1  christos   if (*s++ != '"')
   2698   1.1  christos     error (_("Bad format string, non-terminated '\"'."));
   2699   1.1  christos 
   2700   1.8  christos   s = skip_spaces (s);
   2701   1.1  christos 
   2702   1.1  christos   if (*s != ',' && *s != 0)
   2703   1.1  christos     error (_("Invalid argument syntax"));
   2704   1.8  christos 
   2705   1.8  christos   if (*s == ',')
   2706   1.1  christos     s++;
   2707   1.1  christos   s = skip_spaces (s);
   2708   1.8  christos 
   2709   1.8  christos   {
   2710   1.1  christos     int nargs_wanted;
   2711   1.1  christos     int i;
   2712   1.1  christos     const char *current_substring;
   2713   1.1  christos 
   2714   1.1  christos     nargs_wanted = 0;
   2715   1.1  christos     for (auto &&piece : fpieces)
   2716   1.1  christos       if (piece.argclass != literal_piece)
   2717   1.1  christos 	++nargs_wanted;
   2718   1.1  christos 
   2719   1.1  christos     /* Now, parse all arguments and evaluate them.
   2720   1.8  christos        Store the VALUEs in VAL_ARGS.  */
   2721   1.1  christos 
   2722   1.1  christos     while (*s != '\0')
   2723   1.1  christos       {
   2724   1.1  christos 	const char *s1;
   2725   1.1  christos 
   2726   1.1  christos 	s1 = s;
   2727   1.8  christos 	val_args.push_back (parse_to_comma_and_eval (&s1));
   2728   1.1  christos 
   2729   1.1  christos 	s = s1;
   2730   1.1  christos 	if (*s == ',')
   2731   1.1  christos 	  s++;
   2732   1.8  christos       }
   2733   1.1  christos 
   2734   1.8  christos     if (val_args.size () != nargs_wanted)
   2735   1.8  christos       error (_("Wrong number of arguments for specified format-string"));
   2736   1.1  christos 
   2737   1.1  christos     /* Now actually print them.  */
   2738   1.1  christos     i = 0;
   2739   1.1  christos     for (auto &&piece : fpieces)
   2740   1.1  christos       {
   2741   1.1  christos 	current_substring = piece.string;
   2742   1.1  christos 	switch (piece.argclass)
   2743   1.1  christos 	  {
   2744   1.1  christos 	  case string_arg:
   2745  1.11  christos 	    printf_c_string (stream, current_substring, val_args[i]);
   2746   1.9  christos 	    break;
   2747   1.1  christos 	  case wide_string_arg:
   2748   1.1  christos 	    printf_wide_c_string (stream, current_substring, val_args[i]);
   2749   1.1  christos 	    break;
   2750   1.1  christos 	  case wide_char_arg:
   2751  1.11  christos 	    {
   2752  1.10  christos 	      struct gdbarch *gdbarch = val_args[i]->type ()->arch ();
   2753   1.9  christos 	      struct type *wctype = lookup_typename (current_language,
   2754   1.1  christos 						     "wchar_t", NULL, 0);
   2755   1.1  christos 	      struct type *valtype;
   2756  1.11  christos 	      const gdb_byte *bytes;
   2757   1.1  christos 
   2758   1.8  christos 	      valtype = val_args[i]->type ();
   2759   1.1  christos 	      if (valtype->length () != wctype->length ()
   2760   1.1  christos 		  || valtype->code () != TYPE_CODE_INT)
   2761   1.1  christos 		error (_("expected wchar_t argument for %%lc"));
   2762  1.10  christos 
   2763  1.10  christos 	      bytes = val_args[i]->contents ().data ();
   2764   1.1  christos 
   2765   1.1  christos 	      auto_obstack output;
   2766   1.1  christos 
   2767   1.8  christos 	      convert_between_encodings (target_wide_charset (gdbarch),
   2768   1.8  christos 					 host_charset (),
   2769  1.10  christos 					 bytes, valtype->length (),
   2770  1.10  christos 					 valtype->length (),
   2771   1.8  christos 					 &output, translit_char);
   2772   1.1  christos 	      obstack_grow_str0 (&output, "");
   2773   1.1  christos 
   2774   1.1  christos 	      DIAGNOSTIC_PUSH
   2775   1.1  christos 	      DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
   2776   1.1  christos 		gdb_printf (stream, current_substring,
   2777   1.1  christos 			    obstack_base (&output));
   2778   1.1  christos 	      DIAGNOSTIC_POP
   2779   1.8  christos 	    }
   2780   1.8  christos 	    break;
   2781  1.10  christos 	  case long_long_arg:
   2782   1.8  christos #ifdef PRINTF_HAS_LONG_LONG
   2783   1.1  christos 	    {
   2784   1.1  christos 	      long long val = value_as_long (val_args[i]);
   2785   1.1  christos 
   2786   1.1  christos 	      DIAGNOSTIC_PUSH
   2787   1.1  christos 	      DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
   2788   1.1  christos 		gdb_printf (stream, current_substring, val);
   2789   1.1  christos 	      DIAGNOSTIC_POP
   2790   1.1  christos 	      break;
   2791   1.1  christos 	    }
   2792   1.8  christos #else
   2793   1.8  christos 	    error (_("long long not supported in printf"));
   2794  1.10  christos #endif
   2795   1.8  christos 	  case int_arg:
   2796   1.1  christos 	    {
   2797   1.1  christos 	      int val = value_as_long (val_args[i]);
   2798   1.1  christos 
   2799   1.1  christos 	      DIAGNOSTIC_PUSH
   2800   1.1  christos 	      DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
   2801   1.1  christos 		gdb_printf (stream, current_substring, val);
   2802   1.8  christos 	      DIAGNOSTIC_POP
   2803   1.8  christos 	      break;
   2804  1.10  christos 	    }
   2805   1.8  christos 	  case long_arg:
   2806   1.1  christos 	    {
   2807   1.1  christos 	      long val = value_as_long (val_args[i]);
   2808   1.9  christos 
   2809   1.9  christos 	      DIAGNOSTIC_PUSH
   2810   1.9  christos 	      DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
   2811   1.9  christos 		gdb_printf (stream, current_substring, val);
   2812   1.9  christos 	      DIAGNOSTIC_POP
   2813   1.9  christos 	      break;
   2814  1.10  christos 	    }
   2815   1.9  christos 	  case size_t_arg:
   2816   1.9  christos 	    {
   2817   1.9  christos 	      size_t val = value_as_long (val_args[i]);
   2818   1.8  christos 
   2819   1.8  christos 	      DIAGNOSTIC_PUSH
   2820   1.8  christos 	      DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
   2821   1.8  christos 		gdb_printf (stream, current_substring, val);
   2822   1.8  christos 	      DIAGNOSTIC_POP
   2823   1.8  christos 	      break;
   2824   1.8  christos 	    }
   2825   1.8  christos 	  /* Handles floating-point values.  */
   2826   1.1  christos 	  case double_arg:
   2827   1.1  christos 	  case long_double_arg:
   2828   1.1  christos 	  case dec32float_arg:
   2829   1.1  christos 	  case dec64float_arg:
   2830  1.11  christos 	  case dec128float_arg:
   2831  1.11  christos 	    printf_floating (stream, current_substring, val_args[i],
   2832  1.11  christos 			     piece.argclass);
   2833  1.11  christos 	    break;
   2834  1.11  christos 	  case ptr_arg:
   2835  1.11  christos 	    printf_pointer (stream, current_substring, val_args[i]);
   2836  1.11  christos 	    break;
   2837  1.11  christos 	  case value_arg:
   2838  1.11  christos 	    {
   2839  1.11  christos 	      value_print_options print_opts;
   2840  1.11  christos 	      get_user_print_options (&print_opts);
   2841  1.11  christos 
   2842  1.11  christos 	      if (current_substring[2] == '[')
   2843  1.11  christos 		{
   2844  1.11  christos 		  std::string args (&current_substring[3],
   2845  1.11  christos 				    strlen (&current_substring[3]) - 1);
   2846  1.11  christos 
   2847  1.11  christos 		  const char *args_ptr = args.c_str ();
   2848  1.11  christos 
   2849  1.11  christos 		  /* Override global settings with explicit options, if
   2850  1.11  christos 		     any.  */
   2851  1.11  christos 		  auto group
   2852  1.11  christos 		    = make_value_print_options_def_group (&print_opts);
   2853  1.11  christos 		  gdb::option::process_options
   2854  1.11  christos 		    (&args_ptr, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR,
   2855  1.11  christos 		     group);
   2856  1.11  christos 
   2857  1.11  christos 		  if (*args_ptr != '\0')
   2858   1.1  christos 		    error (_("unexpected content in print options: %s"),
   2859   1.1  christos 			     args_ptr);
   2860   1.1  christos 		}
   2861   1.1  christos 
   2862  1.10  christos 	      print_formatted (val_args[i], 0, &print_opts, stream);
   2863   1.1  christos 	    }
   2864   1.1  christos 	    break;
   2865   1.1  christos 	  case literal_piece:
   2866   1.1  christos 	    /* Print a portion of the format string that has no
   2867   1.8  christos 	       directives.  Note that this will not include any
   2868   1.8  christos 	       ordinary %-specs, but it might include "%%".  That is
   2869  1.10  christos 	       why we use gdb_printf and not gdb_puts here.
   2870   1.8  christos 	       Also, we pass a dummy argument because some platforms
   2871   1.1  christos 	       have modified GCC to include -Wformat-security by
   2872   1.1  christos 	       default, which will warn here if there is no
   2873  1.10  christos 	       argument.  */
   2874   1.1  christos 	    DIAGNOSTIC_PUSH
   2875   1.1  christos 	    DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
   2876   1.8  christos 	      gdb_printf (stream, current_substring, 0);
   2877   1.1  christos 	    DIAGNOSTIC_POP
   2878   1.1  christos 	    break;
   2879   1.1  christos 	  default:
   2880   1.1  christos 	    internal_error (_("failed internal consistency check"));
   2881   1.1  christos 	  }
   2882   1.1  christos 	/* Maybe advance to the next argument.  */
   2883   1.1  christos 	if (piece.argclass != literal_piece)
   2884   1.1  christos 	  ++i;
   2885   1.8  christos       }
   2886   1.1  christos   }
   2887   1.1  christos }
   2888  1.10  christos 
   2889  1.10  christos /* Implement the "printf" command.  */
   2890   1.9  christos 
   2891   1.1  christos static void
   2892   1.1  christos printf_command (const char *arg, int from_tty)
   2893   1.1  christos {
   2894   1.1  christos   ui_printf (arg, gdb_stdout);
   2895   1.1  christos   gdb_stdout->reset_style ();
   2896   1.8  christos   gdb_stdout->wrap_here (0);
   2897   1.1  christos   gdb_stdout->flush ();
   2898   1.7  christos }
   2899   1.1  christos 
   2900   1.7  christos /* Implement the "eval" command.  */
   2901   1.1  christos 
   2902   1.7  christos static void
   2903   1.1  christos eval_command (const char *arg, int from_tty)
   2904   1.8  christos {
   2905   1.1  christos   string_file stb;
   2906   1.1  christos 
   2907  1.10  christos   ui_printf (arg, &stb);
   2908  1.10  christos 
   2909  1.10  christos   std::string expanded = insert_user_defined_cmd_args (stb.c_str ());
   2910  1.10  christos 
   2911  1.10  christos   execute_command (expanded.c_str (), from_tty);
   2912  1.10  christos }
   2913  1.11  christos 
   2914  1.10  christos /* Convenience function for error checking in memory-tag commands.  */
   2915  1.10  christos 
   2916  1.10  christos static void
   2917  1.10  christos show_addr_not_tagged (CORE_ADDR address)
   2918  1.10  christos {
   2919  1.10  christos   error (_("Address %s not in a region mapped with a memory tagging flag."),
   2920  1.10  christos 	 paddress (current_inferior ()->arch (), address));
   2921  1.10  christos }
   2922  1.10  christos 
   2923  1.10  christos /* Convenience function for error checking in memory-tag commands.  */
   2924  1.10  christos 
   2925  1.10  christos static void
   2926  1.10  christos show_memory_tagging_unsupported (void)
   2927  1.10  christos {
   2928  1.10  christos   error (_("Memory tagging not supported or disabled by the current"
   2929  1.10  christos 	   " architecture."));
   2930  1.10  christos }
   2931  1.10  christos 
   2932  1.10  christos /* Implement the "memory-tag" prefix command.  */
   2933  1.10  christos 
   2934  1.10  christos static void
   2935  1.10  christos memory_tag_command (const char *arg, int from_tty)
   2936  1.10  christos {
   2937  1.10  christos   help_list (memory_tag_list, "memory-tag ", all_commands, gdb_stdout);
   2938  1.10  christos }
   2939  1.10  christos 
   2940  1.10  christos /* Helper for print-logical-tag and print-allocation-tag.  */
   2941  1.10  christos 
   2942  1.10  christos static void
   2943  1.10  christos memory_tag_print_tag_command (const char *args, enum memtag_type tag_type)
   2944  1.10  christos {
   2945  1.10  christos   if (args == nullptr)
   2946  1.11  christos     error_no_arg (_("address or pointer"));
   2947  1.10  christos 
   2948  1.10  christos   /* Parse args into a value.  If the value is a pointer or an address,
   2949  1.10  christos      then fetch the logical or allocation tag.  */
   2950  1.10  christos   value_print_options print_opts;
   2951  1.10  christos 
   2952  1.11  christos   struct value *val = process_print_command_args (args, &print_opts, true);
   2953  1.10  christos   gdbarch *arch = current_inferior ()->arch ();
   2954  1.11  christos 
   2955  1.11  christos   /* If the address is not in a region memory mapped with a memory tagging
   2956  1.10  christos      flag, it is no use trying to access/manipulate its allocation tag.
   2957  1.11  christos 
   2958  1.11  christos      It is OK to manipulate the logical tag though.  */
   2959  1.10  christos   CORE_ADDR addr = value_as_address (val);
   2960  1.10  christos   if (tag_type == memtag_type::allocation
   2961  1.10  christos       && !target_is_address_tagged (arch, addr))
   2962  1.10  christos     show_addr_not_tagged (addr);
   2963  1.10  christos 
   2964  1.10  christos   value *tag_value = gdbarch_get_memtag (arch, val, tag_type);
   2965  1.10  christos   std::string tag = gdbarch_memtag_to_string (arch, tag_value);
   2966  1.10  christos 
   2967  1.10  christos   if (tag.empty ())
   2968  1.10  christos     gdb_printf (_("%s tag unavailable.\n"),
   2969  1.10  christos 		tag_type
   2970  1.10  christos 		== memtag_type::logical? "Logical" : "Allocation");
   2971  1.10  christos 
   2972  1.10  christos   struct value *v_tag = process_print_command_args (tag.c_str (),
   2973  1.10  christos 						    &print_opts,
   2974  1.10  christos 						    true);
   2975  1.10  christos   print_opts.output_format = 'x';
   2976  1.10  christos   print_value (v_tag, print_opts);
   2977  1.10  christos }
   2978  1.10  christos 
   2979  1.10  christos /* Implement the "memory-tag print-logical-tag" command.  */
   2980  1.10  christos 
   2981  1.10  christos static void
   2982  1.10  christos memory_tag_print_logical_tag_command (const char *args, int from_tty)
   2983  1.10  christos {
   2984  1.10  christos   if (!target_supports_memory_tagging ())
   2985  1.10  christos     show_memory_tagging_unsupported ();
   2986  1.10  christos 
   2987  1.10  christos   memory_tag_print_tag_command (args, memtag_type::logical);
   2988  1.10  christos }
   2989  1.10  christos 
   2990  1.10  christos /* Implement the "memory-tag print-allocation-tag" command.  */
   2991  1.10  christos 
   2992  1.10  christos static void
   2993  1.10  christos memory_tag_print_allocation_tag_command (const char *args, int from_tty)
   2994  1.10  christos {
   2995  1.10  christos   if (!target_supports_memory_tagging ())
   2996  1.10  christos     show_memory_tagging_unsupported ();
   2997  1.10  christos 
   2998  1.10  christos   memory_tag_print_tag_command (args, memtag_type::allocation);
   2999  1.10  christos }
   3000  1.10  christos 
   3001  1.10  christos /* Parse ARGS and extract ADDR and TAG.
   3002  1.10  christos    ARGS should have format <expression> <tag bytes>.  */
   3003  1.10  christos 
   3004  1.10  christos static void
   3005  1.10  christos parse_with_logical_tag_input (const char *args, struct value **val,
   3006  1.10  christos 			      gdb::byte_vector &tags,
   3007  1.10  christos 			      value_print_options *print_opts)
   3008  1.10  christos {
   3009  1.10  christos   /* Fetch the address.  */
   3010  1.10  christos   std::string address_string = extract_string_maybe_quoted (&args);
   3011  1.10  christos 
   3012  1.10  christos   /* Parse the address into a value.  */
   3013  1.10  christos   *val = process_print_command_args (address_string.c_str (), print_opts,
   3014  1.10  christos 				     true);
   3015  1.10  christos 
   3016  1.10  christos   /* Fetch the tag bytes.  */
   3017  1.10  christos   std::string tag_string = extract_string_maybe_quoted (&args);
   3018  1.10  christos 
   3019  1.10  christos   /* Validate the input.  */
   3020  1.10  christos   if (address_string.empty () || tag_string.empty ())
   3021  1.10  christos     error (_("Missing arguments."));
   3022  1.10  christos 
   3023  1.10  christos   if (tag_string.length () != 2)
   3024  1.10  christos     error (_("Error parsing tags argument. The tag should be 2 digits."));
   3025  1.10  christos 
   3026  1.10  christos   tags = hex2bin (tag_string.c_str ());
   3027  1.10  christos }
   3028  1.10  christos 
   3029  1.10  christos /* Implement the "memory-tag with-logical-tag" command.  */
   3030  1.10  christos 
   3031  1.10  christos static void
   3032  1.10  christos memory_tag_with_logical_tag_command (const char *args, int from_tty)
   3033  1.10  christos {
   3034  1.10  christos   if (!target_supports_memory_tagging ())
   3035  1.10  christos     show_memory_tagging_unsupported ();
   3036  1.11  christos 
   3037  1.10  christos   if (args == nullptr)
   3038  1.10  christos     error_no_arg (_("<address> <tag>"));
   3039  1.10  christos 
   3040  1.10  christos   gdb::byte_vector tags;
   3041  1.10  christos   struct value *val;
   3042  1.10  christos   value_print_options print_opts;
   3043  1.10  christos   gdbarch *arch = current_inferior ()->arch ();
   3044  1.10  christos 
   3045  1.10  christos   /* Parse the input.  */
   3046  1.10  christos   parse_with_logical_tag_input (args, &val, tags, &print_opts);
   3047  1.10  christos 
   3048  1.10  christos   /* Setting the logical tag is just a local operation that does not touch
   3049  1.10  christos      any memory from the target.  Given an input value, we modify the value
   3050  1.10  christos      to include the appropriate tag.
   3051  1.10  christos 
   3052  1.10  christos      For this reason we need to cast the argument value to a
   3053  1.10  christos      (void *) pointer.  This is so we have the right type for the gdbarch
   3054  1.11  christos      hook to manipulate the value and insert the tag.
   3055  1.10  christos 
   3056  1.10  christos      Otherwise, this would fail if, for example, GDB parsed the argument value
   3057  1.10  christos      into an int-sized value and the pointer value has a type of greater
   3058  1.11  christos      length.  */
   3059  1.10  christos 
   3060  1.10  christos   /* Cast to (void *).  */
   3061  1.10  christos   val = value_cast (builtin_type (current_inferior ()->arch ())->builtin_data_ptr,
   3062  1.10  christos 		    val);
   3063  1.10  christos 
   3064  1.10  christos   /* Length doesn't matter for a logical tag.  Pass 0.  */
   3065  1.10  christos   if (!gdbarch_set_memtags (arch, val, 0, tags,  memtag_type::logical))
   3066  1.10  christos     gdb_printf (_("Could not update the logical tag data.\n"));
   3067  1.10  christos   else
   3068  1.10  christos     {
   3069  1.10  christos       /* Always print it in hex format.  */
   3070  1.10  christos       print_opts.output_format = 'x';
   3071  1.10  christos       print_value (val, print_opts);
   3072  1.10  christos     }
   3073  1.10  christos }
   3074  1.10  christos 
   3075  1.10  christos /* Parse ARGS and extract ADDR, LENGTH and TAGS.  */
   3076  1.10  christos 
   3077  1.10  christos static void
   3078  1.10  christos parse_set_allocation_tag_input (const char *args, struct value **val,
   3079  1.10  christos 				size_t *length, gdb::byte_vector &tags)
   3080  1.10  christos {
   3081  1.10  christos   /* Fetch the address.  */
   3082  1.10  christos   std::string address_string = extract_string_maybe_quoted (&args);
   3083  1.10  christos 
   3084  1.10  christos   /* Parse the address into a value.  */
   3085  1.10  christos   value_print_options print_opts;
   3086  1.10  christos   *val = process_print_command_args (address_string.c_str (), &print_opts,
   3087  1.10  christos 				     true);
   3088  1.10  christos 
   3089  1.10  christos   /* Fetch the length.  */
   3090  1.10  christos   std::string length_string = extract_string_maybe_quoted (&args);
   3091  1.10  christos 
   3092  1.10  christos   /* Fetch the tag bytes.  */
   3093  1.10  christos   std::string tags_string = extract_string_maybe_quoted (&args);
   3094  1.10  christos 
   3095  1.10  christos   /* Validate the input.  */
   3096  1.10  christos   if (address_string.empty () || length_string.empty () || tags_string.empty ())
   3097  1.10  christos     error (_("Missing arguments."));
   3098  1.10  christos 
   3099  1.10  christos   errno = 0;
   3100  1.10  christos   const char *trailer = nullptr;
   3101  1.10  christos   LONGEST parsed_length = strtoulst (length_string.c_str (), &trailer, 10);
   3102  1.10  christos 
   3103  1.10  christos   if (errno != 0 || (trailer != nullptr && trailer[0] != '\0'))
   3104  1.10  christos     error (_("Error parsing length argument."));
   3105  1.10  christos 
   3106  1.10  christos   if (parsed_length <= 0)
   3107  1.10  christos     error (_("Invalid zero or negative length."));
   3108  1.10  christos 
   3109  1.10  christos   *length = parsed_length;
   3110  1.10  christos 
   3111  1.10  christos   if (tags_string.length () % 2)
   3112  1.10  christos     error (_("Error parsing tags argument. Tags should be 2 digits per byte."));
   3113  1.10  christos 
   3114  1.10  christos   tags = hex2bin (tags_string.c_str ());
   3115  1.10  christos }
   3116  1.10  christos 
   3117  1.10  christos /* Implement the "memory-tag set-allocation-tag" command.
   3118  1.10  christos    ARGS should be in the format <address> <length> <tags>.  */
   3119  1.10  christos 
   3120  1.10  christos static void
   3121  1.10  christos memory_tag_set_allocation_tag_command (const char *args, int from_tty)
   3122  1.10  christos {
   3123  1.10  christos   if (!target_supports_memory_tagging ())
   3124  1.10  christos     show_memory_tagging_unsupported ();
   3125  1.10  christos 
   3126  1.10  christos   if (args == nullptr)
   3127  1.10  christos     error_no_arg (_("<starting address> <length> <tag bytes>"));
   3128  1.10  christos 
   3129  1.11  christos   gdb::byte_vector tags;
   3130  1.11  christos   size_t length = 0;
   3131  1.11  christos   struct value *val;
   3132  1.11  christos 
   3133  1.11  christos   /* Parse the input.  */
   3134  1.11  christos   parse_set_allocation_tag_input (args, &val, &length, tags);
   3135  1.11  christos 
   3136  1.10  christos   /* If the address is not in a region memory-mapped with a memory tagging
   3137  1.10  christos      flag, it is no use trying to manipulate its allocation tag.  */
   3138  1.10  christos   CORE_ADDR addr = value_as_address (val);
   3139  1.10  christos   if (!target_is_address_tagged (current_inferior ()-> arch(), addr))
   3140  1.10  christos     show_addr_not_tagged (addr);
   3141  1.10  christos 
   3142  1.10  christos   if (!gdbarch_set_memtags (current_inferior ()->arch (), val, length, tags,
   3143  1.10  christos 			    memtag_type::allocation))
   3144  1.10  christos     gdb_printf (_("Could not update the allocation tag(s).\n"));
   3145  1.10  christos   else
   3146  1.10  christos     gdb_printf (_("Allocation tag(s) updated successfully.\n"));
   3147  1.10  christos }
   3148  1.10  christos 
   3149  1.10  christos /* Implement the "memory-tag check" command.  */
   3150  1.10  christos 
   3151  1.11  christos static void
   3152  1.10  christos memory_tag_check_command (const char *args, int from_tty)
   3153  1.10  christos {
   3154  1.10  christos   if (!target_supports_memory_tagging ())
   3155  1.10  christos     show_memory_tagging_unsupported ();
   3156  1.10  christos 
   3157  1.10  christos   if (args == nullptr)
   3158  1.11  christos     error_no_arg (_("address or pointer"));
   3159  1.11  christos 
   3160  1.11  christos   /* Parse the expression into a value.  If the value is an address or
   3161  1.10  christos      pointer, then check its logical tag against the allocation tag.  */
   3162  1.10  christos   value_print_options print_opts;
   3163  1.10  christos 
   3164  1.11  christos   struct value *val = process_print_command_args (args, &print_opts, true);
   3165  1.11  christos   gdbarch *arch = current_inferior ()->arch ();
   3166  1.10  christos 
   3167  1.10  christos   CORE_ADDR addr = value_as_address (val);
   3168  1.11  christos 
   3169  1.10  christos   /* If the address is not in a region memory mapped with a memory tagging
   3170  1.11  christos      flag, it is no use trying to access/manipulate its allocation tag.  */
   3171  1.11  christos   if (!target_is_address_tagged (arch, addr))
   3172  1.10  christos     show_addr_not_tagged (addr);
   3173  1.11  christos 
   3174  1.11  christos   /* Check if the tag is valid.  */
   3175  1.10  christos   if (!gdbarch_memtag_matches_p (arch, val))
   3176  1.10  christos     {
   3177  1.10  christos       value *tag = gdbarch_get_memtag (arch, val, memtag_type::logical);
   3178  1.10  christos       std::string ltag = gdbarch_memtag_to_string (arch, tag);
   3179  1.11  christos 
   3180  1.10  christos       tag = gdbarch_get_memtag (arch, val, memtag_type::allocation);
   3181  1.10  christos       std::string atag = gdbarch_memtag_to_string (arch, tag);
   3182  1.10  christos 
   3183  1.10  christos       gdb_printf (_("Logical tag (%s) does not match"
   3184  1.11  christos 		    " the allocation tag (%s) for address %s.\n"),
   3185  1.11  christos 		  ltag.c_str (), atag.c_str (),
   3186  1.10  christos 		  paddress (current_inferior ()->arch (), addr));
   3187  1.11  christos     }
   3188  1.10  christos   else
   3189  1.10  christos     {
   3190  1.11  christos       struct value *tag
   3191  1.10  christos 	= gdbarch_get_memtag (current_inferior ()->arch (), val,
   3192  1.10  christos 			      memtag_type::logical);
   3193  1.10  christos       std::string ltag
   3194   1.9  christos 	= gdbarch_memtag_to_string (current_inferior ()->arch (), tag);
   3195   1.1  christos 
   3196   1.9  christos       gdb_printf (_("Memory tags for address %s match (%s).\n"),
   3197   1.1  christos 		  paddress (current_inferior ()->arch (), addr), ltag.c_str ());
   3198   1.1  christos     }
   3199   1.1  christos }
   3200   1.1  christos 
   3201   1.1  christos void _initialize_printcmd ();
   3202  1.10  christos void
   3203  1.10  christos _initialize_printcmd ()
   3204   1.1  christos {
   3205   1.8  christos   struct cmd_list_element *c;
   3206   1.9  christos 
   3207   1.9  christos   current_display_number = -1;
   3208   1.1  christos 
   3209   1.8  christos   gdb::observers::free_objfile.attach (clear_dangling_display_expressions,
   3210   1.1  christos 				       "printcmd");
   3211   1.9  christos 
   3212   1.1  christos   add_info ("address", info_address_command,
   3213   1.1  christos 	    _("Describe where symbol SYM is stored.\n\
   3214  1.10  christos Usage: info address SYM"));
   3215   1.1  christos 
   3216   1.1  christos   add_info ("symbol", info_symbol_command, _("\
   3217   1.1  christos Describe what symbol is at location ADDR.\n\
   3218   1.1  christos Usage: info symbol ADDR\n\
   3219   1.1  christos Only for symbols with fixed locations (global or static scope)."));
   3220   1.1  christos 
   3221   1.1  christos   c = add_com ("x", class_vars, x_command, _("\
   3222   1.1  christos Examine memory: x/FMT ADDRESS.\n\
   3223   1.6  christos ADDRESS is an expression for the memory address to examine.\n\
   3224   1.6  christos FMT is a repeat count followed by a format letter and a size letter.\n\
   3225   1.1  christos Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),\n\
   3226   1.1  christos   t(binary), f(float), a(address), i(instruction), c(char), s(string)\n\
   3227   1.1  christos   and z(hex, zero padded on the left).\n\
   3228  1.10  christos Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).\n\
   3229   1.1  christos The specified number of objects of the specified size are printed\n\
   3230   1.8  christos according to the format.  If a negative number is specified, memory is\n\
   3231   1.9  christos examined backward from the address.\n\n\
   3232   1.9  christos Defaults for format and size letters are those previously used.\n\
   3233   1.1  christos Default count is 1.  Default address is following last thing printed\n\
   3234   1.1  christos with this command or \"print\"."));
   3235   1.1  christos   set_cmd_completer_handle_brkchars (c, display_and_x_command_completer);
   3236   1.9  christos 
   3237   1.1  christos   add_info ("display", info_display_command, _("\
   3238   1.1  christos Expressions to display when program stops, with code numbers.\n\
   3239   1.1  christos Usage: info display"));
   3240   1.1  christos 
   3241   1.1  christos   add_cmd ("undisplay", class_vars, undisplay_command, _("\
   3242   1.1  christos Cancel some expressions to be displayed when program stops.\n\
   3243  1.10  christos Usage: undisplay [NUM]...\n\
   3244   1.1  christos Arguments are the code numbers of the expressions to stop displaying.\n\
   3245   1.9  christos No argument means cancel all automatic-display expressions.\n\
   3246   1.1  christos \"delete display\" has the same effect as this command.\n\
   3247   1.1  christos Do \"info display\" to see current list of code numbers."),
   3248   1.1  christos 	   &cmdlist);
   3249   1.1  christos 
   3250   1.1  christos   c = add_com ("display", class_vars, display_command, _("\
   3251   1.1  christos Print value of expression EXP each time the program stops.\n\
   3252  1.10  christos Usage: display[/FMT] EXP\n\
   3253   1.1  christos /FMT may be used before EXP as in the \"print\" command.\n\
   3254   1.1  christos /FMT \"i\" or \"s\" or including a size-letter is allowed,\n\
   3255   1.1  christos as in the \"x\" command, and then EXP is used to get the address to examine\n\
   3256   1.9  christos and examining is done as in the \"x\" command.\n\n\
   3257   1.1  christos With no argument, display all currently requested auto-display expressions.\n\
   3258   1.1  christos Use \"undisplay\" to cancel display requests previously made."));
   3259   1.1  christos   set_cmd_completer_handle_brkchars (c, display_and_x_command_completer);
   3260   1.1  christos 
   3261   1.1  christos   add_cmd ("display", class_vars, enable_display_command, _("\
   3262   1.1  christos Enable some expressions to be displayed when program stops.\n\
   3263   1.9  christos Usage: enable display [NUM]...\n\
   3264   1.1  christos Arguments are the code numbers of the expressions to resume displaying.\n\
   3265   1.1  christos No argument means enable all automatic-display expressions.\n\
   3266   1.1  christos Do \"info display\" to see current list of code numbers."), &enablelist);
   3267   1.1  christos 
   3268   1.1  christos   add_cmd ("display", class_vars, disable_display_command, _("\
   3269   1.1  christos Disable some expressions to be displayed when program stops.\n\
   3270   1.9  christos Usage: disable display [NUM]...\n\
   3271   1.1  christos Arguments are the code numbers of the expressions to stop displaying.\n\
   3272   1.1  christos No argument means disable all automatic-display expressions.\n\
   3273   1.1  christos Do \"info display\" to see current list of code numbers."), &disablelist);
   3274   1.1  christos 
   3275   1.1  christos   add_cmd ("display", class_vars, undisplay_command, _("\
   3276   1.8  christos Cancel some expressions to be displayed when program stops.\n\
   3277   1.9  christos Usage: delete display [NUM]...\n\
   3278   1.8  christos Arguments are the code numbers of the expressions to stop displaying.\n\
   3279   1.1  christos No argument means cancel all automatic-display expressions.\n\
   3280   1.1  christos Do \"info display\" to see current list of code numbers."), &deletelist);
   3281   1.1  christos 
   3282   1.9  christos   add_com ("printf", class_vars, printf_command, _("\
   3283   1.1  christos Formatted printing, like the C \"printf\" function.\n\
   3284   1.1  christos Usage: printf \"format string\", ARG1, ARG2, ARG3, ..., ARGN\n\
   3285   1.1  christos This supports most C printf format specifications, like %s, %d, etc."));
   3286   1.9  christos 
   3287   1.9  christos   add_com ("output", class_vars, output_command, _("\
   3288   1.9  christos Like \"print\" but don't put in value history and don't print newline.\n\
   3289   1.9  christos Usage: output EXP\n\
   3290   1.9  christos This is useful in user-defined commands."));
   3291   1.1  christos 
   3292   1.1  christos   add_prefix_cmd ("set", class_vars, set_command, _("\
   3293   1.1  christos Evaluate expression EXP and assign result to variable VAR.\n\
   3294   1.1  christos Usage: set VAR = EXP\n\
   3295   1.1  christos This uses assignment syntax appropriate for the current language\n\
   3296   1.1  christos (VAR = EXP or VAR := EXP for example).\n\
   3297  1.10  christos VAR may be a debugger \"convenience\" variable (names starting\n\
   3298   1.1  christos with $), a register (a few standard names starting with $), or an actual\n\
   3299   1.1  christos variable in the program being debugged.  EXP is any valid expression.\n\
   3300   1.1  christos Use \"set variable\" for variables with names identical to set subcommands.\n\
   3301   1.1  christos \n\
   3302   1.9  christos With a subcommand, this command modifies parts of the gdb environment.\n\
   3303   1.1  christos You can see these environment settings with the \"show\" command."),
   3304   1.1  christos 		  &setlist, 1, &cmdlist);
   3305   1.1  christos 
   3306   1.9  christos   /* "call" is the same as "set", but handy for dbx users to call fns.  */
   3307   1.1  christos   c = add_com ("call", class_vars, call_command, _("\
   3308  1.10  christos Call a function in the program.\n\
   3309  1.10  christos Usage: call EXP\n\
   3310   1.9  christos The argument is the function name and arguments, in the notation of the\n\
   3311   1.9  christos current working language.  The result is printed and saved in the value\n\
   3312   1.9  christos history, if it is not void."));
   3313   1.9  christos   set_cmd_completer_handle_brkchars (c, print_command_completer);
   3314   1.9  christos 
   3315   1.1  christos   cmd_list_element *set_variable_cmd
   3316   1.1  christos     = add_cmd ("variable", class_vars, set_command, _("\
   3317   1.1  christos Evaluate expression EXP and assign result to variable VAR.\n\
   3318  1.10  christos Usage: set variable VAR = EXP\n\
   3319  1.10  christos This uses assignment syntax appropriate for the current language\n\
   3320   1.1  christos (VAR = EXP or VAR := EXP for example).\n\
   3321   1.9  christos VAR may be a debugger \"convenience\" variable (names starting\n\
   3322   1.9  christos with $), a register (a few standard names starting with $), or an actual\n\
   3323   1.9  christos variable in the program being debugged.  EXP is any valid expression.\n\
   3324   1.1  christos This may usually be abbreviated to simply \"set\"."),
   3325   1.9  christos 	       &setlist);
   3326   1.9  christos   add_alias_cmd ("var", set_variable_cmd, class_vars, 0, &setlist);
   3327   1.9  christos 
   3328   1.9  christos   const auto print_opts = make_value_print_options_def_group (nullptr);
   3329   1.9  christos 
   3330   1.9  christos   static const std::string print_help = gdb::option::build_help (_("\
   3331   1.9  christos Print value of expression EXP.\n\
   3332   1.9  christos Usage: print [[OPTION]... --] [/FMT] [EXP]\n\
   3333   1.9  christos \n\
   3334   1.1  christos Options:\n\
   3335   1.1  christos %OPTIONS%\n\
   3336   1.1  christos \n\
   3337   1.1  christos Note: because this command accepts arbitrary expressions, if you\n\
   3338   1.1  christos specify any command option, you must use a double dash (\"--\")\n\
   3339   1.1  christos to mark the end of option processing.  E.g.: \"print -o -- myobj\".\n\
   3340   1.1  christos \n\
   3341   1.1  christos Variables accessible are those of the lexical environment of the selected\n\
   3342   1.1  christos stack frame, plus all those whose scope is global or an entire file.\n\
   3343   1.1  christos \n\
   3344   1.1  christos $NUM gets previous value number NUM.  $ and $$ are the last two values.\n\
   3345   1.1  christos $$NUM refers to NUM'th value back from the last one.\n\
   3346   1.1  christos Names starting with $ refer to registers (with the values they would have\n\
   3347   1.1  christos if the program were to return to the stack frame now selected, restoring\n\
   3348   1.1  christos all registers saved by frames farther in) or else to debugger\n\
   3349   1.1  christos \"convenience\" variables (any such name not a known register).\n\
   3350   1.1  christos Use assignment expressions to give values to convenience variables.\n\
   3351   1.1  christos \n\
   3352   1.1  christos {TYPE}ADREXP refers to a datum of data type TYPE, located at address ADREXP.\n\
   3353   1.9  christos @ is a binary operator for treating consecutive data objects\n\
   3354   1.9  christos anywhere in memory as an array.  FOO@NUM gives an array whose first\n\
   3355   1.9  christos element is FOO, whose second element is stored in the space following\n\
   3356  1.10  christos where FOO is stored, etc.  FOO must be an expression whose value\n\
   3357  1.10  christos resides in memory.\n\
   3358  1.10  christos \n\
   3359  1.10  christos EXP may be preceded with /FMT, where FMT is a format letter\n\
   3360  1.10  christos but no count or size letter (see \"x\" command)."),
   3361   1.1  christos 					      print_opts);
   3362   1.1  christos 
   3363   1.1  christos   cmd_list_element *print_cmd
   3364   1.9  christos     = add_com ("print", class_vars, print_command, print_help.c_str ());
   3365   1.9  christos   set_cmd_completer_handle_brkchars (print_cmd, print_command_completer);
   3366   1.1  christos   add_com_alias ("p", print_cmd, class_vars, 1);
   3367   1.1  christos   add_com_alias ("inspect", print_cmd, class_vars, 1);
   3368   1.1  christos 
   3369   1.1  christos   add_setshow_uinteger_cmd ("max-symbolic-offset", no_class,
   3370   1.1  christos 			    &max_symbolic_offset, _("\
   3371   1.1  christos Set the largest offset that will be printed in <SYMBOL+1234> form."), _("\
   3372   1.1  christos Show the largest offset that will be printed in <SYMBOL+1234> form."), _("\
   3373   1.1  christos Tell GDB to only display the symbolic form of an address if the\n\
   3374   1.1  christos offset between the closest earlier symbol and the address is less than\n\
   3375   1.1  christos the specified maximum offset.  The default is \"unlimited\", which tells GDB\n\
   3376   1.9  christos to always print the symbolic form of an address if any symbol precedes\n\
   3377   1.9  christos it.  Zero is equivalent to \"unlimited\"."),
   3378   1.1  christos 			    NULL,
   3379   1.1  christos 			    show_max_symbolic_offset,
   3380   1.1  christos 			    &setprintlist, &showprintlist);
   3381   1.1  christos   add_setshow_boolean_cmd ("symbol-filename", no_class,
   3382   1.1  christos 			   &print_symbol_filename, _("\
   3383   1.9  christos Set printing of source filename and line number with <SYMBOL>."), _("\
   3384   1.9  christos Show printing of source filename and line number with <SYMBOL>."), NULL,
   3385   1.9  christos 			   NULL,
   3386   1.9  christos 			   show_print_symbol_filename,
   3387  1.10  christos 			   &setprintlist, &showprintlist);
   3388  1.10  christos 
   3389  1.10  christos   add_com ("eval", no_class, eval_command, _("\
   3390  1.10  christos Construct a GDB command and then evaluate it.\n\
   3391  1.10  christos Usage: eval \"format string\", ARG1, ARG2, ARG3, ..., ARGN\n\
   3392  1.10  christos Convert the arguments to a string as \"printf\" would, but then\n\
   3393  1.10  christos treat this string as a command line, and evaluate it."));
   3394  1.10  christos 
   3395  1.10  christos   /* Memory tagging commands.  */
   3396  1.10  christos   add_prefix_cmd ("memory-tag", class_vars, memory_tag_command, _("\
   3397  1.10  christos Generic command for printing and manipulating memory tag properties."),
   3398  1.10  christos 		  &memory_tag_list, 0, &cmdlist);
   3399  1.10  christos   add_cmd ("print-logical-tag", class_vars,
   3400  1.10  christos 	   memory_tag_print_logical_tag_command,
   3401  1.10  christos 	   ("Print the logical tag from POINTER.\n\
   3402  1.10  christos Usage: memory-tag print-logical-tag <POINTER>.\n\
   3403  1.10  christos <POINTER> is an expression that evaluates to a pointer.\n\
   3404  1.10  christos Print the logical tag contained in POINTER.  The tag interpretation is\n\
   3405  1.10  christos architecture-specific."),
   3406  1.10  christos 	   &memory_tag_list);
   3407  1.10  christos   add_cmd ("print-allocation-tag", class_vars,
   3408  1.10  christos 	   memory_tag_print_allocation_tag_command,
   3409  1.10  christos 	   _("Print the allocation tag for ADDRESS.\n\
   3410  1.10  christos Usage: memory-tag print-allocation-tag <ADDRESS>.\n\
   3411  1.10  christos <ADDRESS> is an expression that evaluates to a memory address.\n\
   3412  1.10  christos Print the allocation tag associated with the memory address ADDRESS.\n\
   3413  1.10  christos The tag interpretation is architecture-specific."),
   3414  1.10  christos 	   &memory_tag_list);
   3415  1.10  christos   add_cmd ("with-logical-tag", class_vars, memory_tag_with_logical_tag_command,
   3416  1.10  christos 	   _("Print a POINTER with a specific logical TAG.\n\
   3417  1.10  christos Usage: memory-tag with-logical-tag <POINTER> <TAG>\n\
   3418  1.10  christos <POINTER> is an expression that evaluates to a pointer.\n\
   3419  1.10  christos <TAG> is a sequence of hex bytes that is interpreted by the architecture\n\
   3420  1.10  christos as a single memory tag."),
   3421  1.10  christos 	   &memory_tag_list);
   3422  1.10  christos   add_cmd ("set-allocation-tag", class_vars,
   3423  1.10  christos 	   memory_tag_set_allocation_tag_command,
   3424  1.10  christos 	   _("Set the allocation tag(s) for a memory range.\n\
   3425  1.10  christos Usage: memory-tag set-allocation-tag <ADDRESS> <LENGTH> <TAG_BYTES>\n\
   3426  1.10  christos <ADDRESS> is an expression that evaluates to a memory address\n\
   3427  1.10  christos <LENGTH> is the number of bytes that is added to <ADDRESS> to calculate\n\
   3428  1.10  christos the memory range.\n\
   3429  1.10  christos <TAG_BYTES> is a sequence of hex bytes that is interpreted by the\n\
   3430  1.10  christos architecture as one or more memory tags.\n\
   3431  1.10  christos Sets the tags of the memory range [ADDRESS, ADDRESS + LENGTH)\n\
   3432  1.10  christos to TAG_BYTES.\n\
   3433  1.10  christos \n\
   3434  1.10  christos If the number of tags is greater than or equal to the number of tag granules\n\
   3435  1.10  christos in the [ADDRESS, ADDRESS + LENGTH) range, only the tags up to the\n\
   3436  1.10  christos number of tag granules are updated.\n\
   3437  1.10  christos \n\
   3438  1.10  christos If the number of tags is less than the number of tag granules, then the\n\
   3439  1.10  christos command is a fill operation.  The TAG_BYTES are interpreted as a pattern\n\
   3440  1.10  christos that gets repeated until the number of tag granules in the memory range\n\
   3441  1.10  christos [ADDRESS, ADDRESS + LENGTH) is updated."),
   3442  1.10  christos 	   &memory_tag_list);
   3443  1.10  christos   add_cmd ("check", class_vars, memory_tag_check_command,
   3444   1.1  christos 	   _("Validate a pointer's logical tag against the allocation tag.\n\
   3445                 Usage: memory-tag check <POINTER>\n\
   3446                 <POINTER> is an expression that evaluates to a pointer\n\
   3447                 Fetch the logical and allocation tags for POINTER and compare them\n\
   3448                 for equality.  If the tags do not match, print additional information about\n\
   3449                 the tag mismatch."),
   3450                 	   &memory_tag_list);
   3451                 }
   3452