2010-04-20 Stan Shebs <stan@codesourcery.com>
[platform/upstream/binutils.git] / gdb / printcmd.c
1 /* Print values for GNU debugger GDB.
2
3    Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
4    1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
5    2008, 2009, 2010 Free Software Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23 #include "gdb_string.h"
24 #include "frame.h"
25 #include "symtab.h"
26 #include "gdbtypes.h"
27 #include "value.h"
28 #include "language.h"
29 #include "expression.h"
30 #include "gdbcore.h"
31 #include "gdbcmd.h"
32 #include "target.h"
33 #include "breakpoint.h"
34 #include "demangle.h"
35 #include "valprint.h"
36 #include "annotate.h"
37 #include "symfile.h"            /* for overlay functions */
38 #include "objfiles.h"           /* ditto */
39 #include "completer.h"          /* for completion functions */
40 #include "ui-out.h"
41 #include "gdb_assert.h"
42 #include "block.h"
43 #include "disasm.h"
44 #include "dfp.h"
45 #include "valprint.h"
46 #include "exceptions.h"
47 #include "observer.h"
48 #include "solist.h"
49 #include "solib.h"
50 #include "parser-defs.h"
51 #include "charset.h"
52 #include "arch-utils.h"
53
54 #ifdef TUI
55 #include "tui/tui.h"            /* For tui_active et.al.   */
56 #endif
57
58 #if defined(__MINGW32__) && !defined(PRINTF_HAS_LONG_LONG)
59 # define USE_PRINTF_I64 1
60 # define PRINTF_HAS_LONG_LONG
61 #else
62 # define USE_PRINTF_I64 0
63 #endif
64
65 extern int asm_demangle;        /* Whether to demangle syms in asm printouts */
66
67 struct format_data
68   {
69     int count;
70     char format;
71     char size;
72
73     /* True if the value should be printed raw -- that is, bypassing
74        python-based formatters.  */
75     unsigned char raw;
76   };
77
78 /* Last specified output format.  */
79
80 static char last_format = 0;
81
82 /* Last specified examination size.  'b', 'h', 'w' or `q'.  */
83
84 static char last_size = 'w';
85
86 /* Default address to examine next, and associated architecture.  */
87
88 static struct gdbarch *next_gdbarch;
89 static CORE_ADDR next_address;
90
91 /* Number of delay instructions following current disassembled insn.  */
92
93 static int branch_delay_insns;
94
95 /* Last address examined.  */
96
97 static CORE_ADDR last_examine_address;
98
99 /* Contents of last address examined.
100    This is not valid past the end of the `x' command!  */
101
102 static struct value *last_examine_value;
103
104 /* Largest offset between a symbolic value and an address, that will be
105    printed as `0x1234 <symbol+offset>'.  */
106
107 static unsigned int max_symbolic_offset = UINT_MAX;
108 static void
109 show_max_symbolic_offset (struct ui_file *file, int from_tty,
110                           struct cmd_list_element *c, const char *value)
111 {
112   fprintf_filtered (file, _("\
113 The largest offset that will be printed in <symbol+1234> form is %s.\n"),
114                     value);
115 }
116
117 /* Append the source filename and linenumber of the symbol when
118    printing a symbolic value as `<symbol at filename:linenum>' if set.  */
119 static int print_symbol_filename = 0;
120 static void
121 show_print_symbol_filename (struct ui_file *file, int from_tty,
122                             struct cmd_list_element *c, const char *value)
123 {
124   fprintf_filtered (file, _("\
125 Printing of source filename and line number with <symbol> is %s.\n"),
126                     value);
127 }
128
129 /* Number of auto-display expression currently being displayed.
130    So that we can disable it if we get an error or a signal within it.
131    -1 when not doing one.  */
132
133 int current_display_number;
134
135 struct display
136   {
137     /* Chain link to next auto-display item.  */
138     struct display *next;
139
140     /* The expression as the user typed it.  */
141     char *exp_string;
142
143     /* Expression to be evaluated and displayed.  */
144     struct expression *exp;
145
146     /* Item number of this auto-display item.  */
147     int number;
148
149     /* Display format specified.  */
150     struct format_data format;
151
152     /* Program space associated with `block'.  */
153     struct program_space *pspace;
154
155     /* Innermost block required by this expression when evaluated */
156     struct block *block;
157
158     /* Status of this display (enabled or disabled) */
159     int enabled_p;
160   };
161
162 /* Chain of expressions whose values should be displayed
163    automatically each time the program stops.  */
164
165 static struct display *display_chain;
166
167 static int display_number;
168
169 /* Prototypes for exported functions. */
170
171 void output_command (char *, int);
172
173 void _initialize_printcmd (void);
174
175 /* Prototypes for local functions. */
176
177 static void do_one_display (struct display *);
178 \f
179
180 /* Decode a format specification.  *STRING_PTR should point to it.
181    OFORMAT and OSIZE are used as defaults for the format and size
182    if none are given in the format specification.
183    If OSIZE is zero, then the size field of the returned value
184    should be set only if a size is explicitly specified by the
185    user.
186    The structure returned describes all the data
187    found in the specification.  In addition, *STRING_PTR is advanced
188    past the specification and past all whitespace following it.  */
189
190 static struct format_data
191 decode_format (char **string_ptr, int oformat, int osize)
192 {
193   struct format_data val;
194   char *p = *string_ptr;
195
196   val.format = '?';
197   val.size = '?';
198   val.count = 1;
199   val.raw = 0;
200
201   if (*p >= '0' && *p <= '9')
202     val.count = atoi (p);
203   while (*p >= '0' && *p <= '9')
204     p++;
205
206   /* Now process size or format letters that follow.  */
207
208   while (1)
209     {
210       if (*p == 'b' || *p == 'h' || *p == 'w' || *p == 'g')
211         val.size = *p++;
212       else if (*p == 'r')
213         {
214           val.raw = 1;
215           p++;
216         }
217       else if (*p >= 'a' && *p <= 'z')
218         val.format = *p++;
219       else
220         break;
221     }
222
223   while (*p == ' ' || *p == '\t')
224     p++;
225   *string_ptr = p;
226
227   /* Set defaults for format and size if not specified.  */
228   if (val.format == '?')
229     {
230       if (val.size == '?')
231         {
232           /* Neither has been specified.  */
233           val.format = oformat;
234           val.size = osize;
235         }
236       else
237         /* If a size is specified, any format makes a reasonable
238            default except 'i'.  */
239         val.format = oformat == 'i' ? 'x' : oformat;
240     }
241   else if (val.size == '?')
242     switch (val.format)
243       {
244       case 'a':
245         /* Pick the appropriate size for an address.  This is deferred
246            until do_examine when we know the actual architecture to use.
247            A special size value of 'a' is used to indicate this case.  */
248         val.size = osize ? 'a' : osize;
249         break;
250       case 'f':
251         /* Floating point has to be word or giantword.  */
252         if (osize == 'w' || osize == 'g')
253           val.size = osize;
254         else
255           /* Default it to giantword if the last used size is not
256              appropriate.  */
257           val.size = osize ? 'g' : osize;
258         break;
259       case 'c':
260         /* Characters default to one byte.  */
261         val.size = osize ? 'b' : osize;
262         break;
263       default:
264         /* The default is the size most recently specified.  */
265         val.size = osize;
266       }
267
268   return val;
269 }
270 \f
271 /* Print value VAL on stream according to OPTIONS.
272    Do not end with a newline.
273    SIZE is the letter for the size of datum being printed.
274    This is used to pad hex numbers so they line up.  SIZE is 0
275    for print / output and set for examine.  */
276
277 static void
278 print_formatted (struct value *val, int size,
279                  const struct value_print_options *options,
280                  struct ui_file *stream)
281 {
282   struct type *type = check_typedef (value_type (val));
283   int len = TYPE_LENGTH (type);
284
285   if (VALUE_LVAL (val) == lval_memory)
286     next_address = value_address (val) + len;
287
288   if (size)
289     {
290       switch (options->format)
291         {
292         case 's':
293           {
294             struct type *elttype = value_type (val);
295             next_address = (value_address (val)
296                             + val_print_string (elttype,
297                                                 value_address (val), -1,
298                                                 stream, options));
299           }
300           return;
301
302         case 'i':
303           /* We often wrap here if there are long symbolic names.  */
304           wrap_here ("    ");
305           next_address = (value_address (val)
306                           + gdb_print_insn (get_type_arch (type),
307                                             value_address (val), stream,
308                                             &branch_delay_insns));
309           return;
310         }
311     }
312
313   if (options->format == 0 || options->format == 's'
314       || TYPE_CODE (type) == TYPE_CODE_REF
315       || TYPE_CODE (type) == TYPE_CODE_ARRAY
316       || TYPE_CODE (type) == TYPE_CODE_STRING
317       || TYPE_CODE (type) == TYPE_CODE_STRUCT
318       || TYPE_CODE (type) == TYPE_CODE_UNION
319       || TYPE_CODE (type) == TYPE_CODE_NAMESPACE)
320     value_print (val, stream, options);
321   else
322     /* User specified format, so don't look to the the type to
323        tell us what to do.  */
324     print_scalar_formatted (value_contents (val), type,
325                             options, size, stream);
326 }
327
328 /* Return builtin floating point type of same length as TYPE.
329    If no such type is found, return TYPE itself.  */
330 static struct type *
331 float_type_from_length (struct type *type)
332 {
333   struct gdbarch *gdbarch = get_type_arch (type);
334   const struct builtin_type *builtin = builtin_type (gdbarch);
335   unsigned int len = TYPE_LENGTH (type);
336
337   if (len == TYPE_LENGTH (builtin->builtin_float))
338     type = builtin->builtin_float;
339   else if (len == TYPE_LENGTH (builtin->builtin_double))
340     type = builtin->builtin_double;
341   else if (len == TYPE_LENGTH (builtin->builtin_long_double))
342     type = builtin->builtin_long_double;
343
344   return type;
345 }
346
347 /* Print a scalar of data of type TYPE, pointed to in GDB by VALADDR,
348    according to OPTIONS and SIZE on STREAM.
349    Formats s and i are not supported at this level.
350
351    This is how the elements of an array or structure are printed
352    with a format.  */
353
354 void
355 print_scalar_formatted (const void *valaddr, struct type *type,
356                         const struct value_print_options *options,
357                         int size, struct ui_file *stream)
358 {
359   struct gdbarch *gdbarch = get_type_arch (type);
360   LONGEST val_long = 0;
361   unsigned int len = TYPE_LENGTH (type);
362   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
363
364   /* If we get here with a string format, try again without it.  Go
365      all the way back to the language printers, which may call us
366      again.  */
367   if (options->format == 's')
368     {
369       struct value_print_options opts = *options;
370       opts.format = 0;
371       opts.deref_ref = 0;
372       val_print (type, valaddr, 0, 0, stream, 0, &opts,
373                  current_language);
374       return;
375     }
376
377   if (len > sizeof(LONGEST) &&
378       (TYPE_CODE (type) == TYPE_CODE_INT
379        || TYPE_CODE (type) == TYPE_CODE_ENUM))
380     {
381       switch (options->format)
382         {
383         case 'o':
384           print_octal_chars (stream, valaddr, len, byte_order);
385           return;
386         case 'u':
387         case 'd':
388           print_decimal_chars (stream, valaddr, len, byte_order);
389           return;
390         case 't':
391           print_binary_chars (stream, valaddr, len, byte_order);
392           return;
393         case 'x':
394           print_hex_chars (stream, valaddr, len, byte_order);
395           return;
396         case 'c':
397           print_char_chars (stream, type, valaddr, len, byte_order);
398           return;
399         default:
400           break;
401         };
402     }
403
404   if (options->format != 'f')
405     val_long = unpack_long (type, valaddr);
406
407   /* If the value is a pointer, and pointers and addresses are not the
408      same, then at this point, the value's length (in target bytes) is
409      gdbarch_addr_bit/TARGET_CHAR_BIT, not TYPE_LENGTH (type).  */
410   if (TYPE_CODE (type) == TYPE_CODE_PTR)
411     len = gdbarch_addr_bit (gdbarch) / TARGET_CHAR_BIT;
412
413   /* If we are printing it as unsigned, truncate it in case it is actually
414      a negative signed value (e.g. "print/u (short)-1" should print 65535
415      (if shorts are 16 bits) instead of 4294967295).  */
416   if (options->format != 'd' || TYPE_UNSIGNED (type))
417     {
418       if (len < sizeof (LONGEST))
419         val_long &= ((LONGEST) 1 << HOST_CHAR_BIT * len) - 1;
420     }
421
422   switch (options->format)
423     {
424     case 'x':
425       if (!size)
426         {
427           /* No size specified, like in print.  Print varying # of digits.  */
428           print_longest (stream, 'x', 1, val_long);
429         }
430       else
431         switch (size)
432           {
433           case 'b':
434           case 'h':
435           case 'w':
436           case 'g':
437             print_longest (stream, size, 1, val_long);
438             break;
439           default:
440             error (_("Undefined output size \"%c\"."), size);
441           }
442       break;
443
444     case 'd':
445       print_longest (stream, 'd', 1, val_long);
446       break;
447
448     case 'u':
449       print_longest (stream, 'u', 0, val_long);
450       break;
451
452     case 'o':
453       if (val_long)
454         print_longest (stream, 'o', 1, val_long);
455       else
456         fprintf_filtered (stream, "0");
457       break;
458
459     case 'a':
460       {
461         CORE_ADDR addr = unpack_pointer (type, valaddr);
462         print_address (gdbarch, addr, stream);
463       }
464       break;
465
466     case 'c':
467       {
468         struct value_print_options opts = *options;
469         opts.format = 0;
470
471         if (TYPE_UNSIGNED (type))
472           type = builtin_type (gdbarch)->builtin_true_unsigned_char;
473         else
474           type = builtin_type (gdbarch)->builtin_true_char;
475
476         value_print (value_from_longest (type, val_long), stream, &opts);
477       }
478       break;
479
480     case 'f':
481       type = float_type_from_length (type);
482       print_floating (valaddr, type, stream);
483       break;
484
485     case 0:
486       internal_error (__FILE__, __LINE__,
487                       _("failed internal consistency check"));
488
489     case 't':
490       /* Binary; 't' stands for "two".  */
491       {
492         char bits[8 * (sizeof val_long) + 1];
493         char buf[8 * (sizeof val_long) + 32];
494         char *cp = bits;
495         int width;
496
497         if (!size)
498           width = 8 * (sizeof val_long);
499         else
500           switch (size)
501             {
502             case 'b':
503               width = 8;
504               break;
505             case 'h':
506               width = 16;
507               break;
508             case 'w':
509               width = 32;
510               break;
511             case 'g':
512               width = 64;
513               break;
514             default:
515               error (_("Undefined output size \"%c\"."), size);
516             }
517
518         bits[width] = '\0';
519         while (width-- > 0)
520           {
521             bits[width] = (val_long & 1) ? '1' : '0';
522             val_long >>= 1;
523           }
524         if (!size)
525           {
526             while (*cp && *cp == '0')
527               cp++;
528             if (*cp == '\0')
529               cp--;
530           }
531         strcpy (buf, cp);
532         fputs_filtered (buf, stream);
533       }
534       break;
535
536     default:
537       error (_("Undefined output format \"%c\"."), options->format);
538     }
539 }
540
541 /* Specify default address for `x' command.
542    The `info lines' command uses this.  */
543
544 void
545 set_next_address (struct gdbarch *gdbarch, CORE_ADDR addr)
546 {
547   struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
548
549   next_gdbarch = gdbarch;
550   next_address = addr;
551
552   /* Make address available to the user as $_.  */
553   set_internalvar (lookup_internalvar ("_"),
554                    value_from_pointer (ptr_type, addr));
555 }
556
557 /* Optionally print address ADDR symbolically as <SYMBOL+OFFSET> on STREAM,
558    after LEADIN.  Print nothing if no symbolic name is found nearby.
559    Optionally also print source file and line number, if available.
560    DO_DEMANGLE controls whether to print a symbol in its native "raw" form,
561    or to interpret it as a possible C++ name and convert it back to source
562    form.  However note that DO_DEMANGLE can be overridden by the specific
563    settings of the demangle and asm_demangle variables.  */
564
565 void
566 print_address_symbolic (struct gdbarch *gdbarch, CORE_ADDR addr,
567                         struct ui_file *stream,
568                         int do_demangle, char *leadin)
569 {
570   char *name = NULL;
571   char *filename = NULL;
572   int unmapped = 0;
573   int offset = 0;
574   int line = 0;
575
576   /* Throw away both name and filename.  */
577   struct cleanup *cleanup_chain = make_cleanup (free_current_contents, &name);
578   make_cleanup (free_current_contents, &filename);
579
580   if (build_address_symbolic (gdbarch, addr, do_demangle, &name, &offset,
581                               &filename, &line, &unmapped))
582     {
583       do_cleanups (cleanup_chain);
584       return;
585     }
586
587   fputs_filtered (leadin, stream);
588   if (unmapped)
589     fputs_filtered ("<*", stream);
590   else
591     fputs_filtered ("<", stream);
592   fputs_filtered (name, stream);
593   if (offset != 0)
594     fprintf_filtered (stream, "+%u", (unsigned int) offset);
595
596   /* Append source filename and line number if desired.  Give specific
597      line # of this addr, if we have it; else line # of the nearest symbol.  */
598   if (print_symbol_filename && filename != NULL)
599     {
600       if (line != -1)
601         fprintf_filtered (stream, " at %s:%d", filename, line);
602       else
603         fprintf_filtered (stream, " in %s", filename);
604     }
605   if (unmapped)
606     fputs_filtered ("*>", stream);
607   else
608     fputs_filtered (">", stream);
609
610   do_cleanups (cleanup_chain);
611 }
612
613 /* Given an address ADDR return all the elements needed to print the
614    address in a symbolic form. NAME can be mangled or not depending
615    on DO_DEMANGLE (and also on the asm_demangle global variable,
616    manipulated via ''set print asm-demangle''). Return 0 in case of
617    success, when all the info in the OUT paramters is valid. Return 1
618    otherwise. */
619 int
620 build_address_symbolic (struct gdbarch *gdbarch,
621                         CORE_ADDR addr,  /* IN */
622                         int do_demangle, /* IN */
623                         char **name,     /* OUT */
624                         int *offset,     /* OUT */
625                         char **filename, /* OUT */
626                         int *line,       /* OUT */
627                         int *unmapped)   /* OUT */
628 {
629   struct minimal_symbol *msymbol;
630   struct symbol *symbol;
631   CORE_ADDR name_location = 0;
632   struct obj_section *section = NULL;
633   char *name_temp = "";
634   
635   /* Let's say it is mapped (not unmapped).  */
636   *unmapped = 0;
637
638   /* Determine if the address is in an overlay, and whether it is
639      mapped.  */
640   if (overlay_debugging)
641     {
642       section = find_pc_overlay (addr);
643       if (pc_in_unmapped_range (addr, section))
644         {
645           *unmapped = 1;
646           addr = overlay_mapped_address (addr, section);
647         }
648     }
649
650   /* First try to find the address in the symbol table, then
651      in the minsyms.  Take the closest one.  */
652
653   /* This is defective in the sense that it only finds text symbols.  So
654      really this is kind of pointless--we should make sure that the
655      minimal symbols have everything we need (by changing that we could
656      save some memory, but for many debug format--ELF/DWARF or
657      anything/stabs--it would be inconvenient to eliminate those minimal
658      symbols anyway).  */
659   msymbol = lookup_minimal_symbol_by_pc_section (addr, section);
660   symbol = find_pc_sect_function (addr, section);
661
662   if (symbol)
663     {
664       /* If this is a function (i.e. a code address), strip out any
665          non-address bits.  For instance, display a pointer to the
666          first instruction of a Thumb function as <function>; the
667          second instruction will be <function+2>, even though the
668          pointer is <function+3>.  This matches the ISA behavior.  */
669       addr = gdbarch_addr_bits_remove (gdbarch, addr);
670
671       name_location = BLOCK_START (SYMBOL_BLOCK_VALUE (symbol));
672       if (do_demangle || asm_demangle)
673         name_temp = SYMBOL_PRINT_NAME (symbol);
674       else
675         name_temp = SYMBOL_LINKAGE_NAME (symbol);
676     }
677
678   if (msymbol != NULL)
679     {
680       if (SYMBOL_VALUE_ADDRESS (msymbol) > name_location || symbol == NULL)
681         {
682           /* The msymbol is closer to the address than the symbol;
683              use the msymbol instead.  */
684           symbol = 0;
685           name_location = SYMBOL_VALUE_ADDRESS (msymbol);
686           if (do_demangle || asm_demangle)
687             name_temp = SYMBOL_PRINT_NAME (msymbol);
688           else
689             name_temp = SYMBOL_LINKAGE_NAME (msymbol);
690         }
691     }
692   if (symbol == NULL && msymbol == NULL)
693     return 1;
694
695   /* If the nearest symbol is too far away, don't print anything symbolic.  */
696
697   /* For when CORE_ADDR is larger than unsigned int, we do math in
698      CORE_ADDR.  But when we detect unsigned wraparound in the
699      CORE_ADDR math, we ignore this test and print the offset,
700      because addr+max_symbolic_offset has wrapped through the end
701      of the address space back to the beginning, giving bogus comparison.  */
702   if (addr > name_location + max_symbolic_offset
703       && name_location + max_symbolic_offset > name_location)
704     return 1;
705
706   *offset = addr - name_location;
707
708   *name = xstrdup (name_temp);
709
710   if (print_symbol_filename)
711     {
712       struct symtab_and_line sal;
713
714       sal = find_pc_sect_line (addr, section, 0);
715
716       if (sal.symtab)
717         {
718           *filename = xstrdup (sal.symtab->filename);
719           *line = sal.line;
720         }
721     }
722   return 0;
723 }
724
725
726 /* Print address ADDR symbolically on STREAM.
727    First print it as a number.  Then perhaps print
728    <SYMBOL + OFFSET> after the number.  */
729
730 void
731 print_address (struct gdbarch *gdbarch,
732                CORE_ADDR addr, struct ui_file *stream)
733 {
734   fputs_filtered (paddress (gdbarch, addr), stream);
735   print_address_symbolic (gdbarch, addr, stream, asm_demangle, " ");
736 }
737
738 /* Return a prefix for instruction address:
739    "=> " for current instruction, else "   ".  */
740
741 const char *
742 pc_prefix (CORE_ADDR addr)
743 {
744   if (has_stack_frames ())
745     {
746       struct frame_info *frame;
747       CORE_ADDR pc;
748
749       frame = get_selected_frame (NULL);
750       pc = get_frame_pc (frame);
751
752       if (pc == addr)
753         return "=> ";
754     }
755   return "   ";
756 }
757
758 /* Print address ADDR symbolically on STREAM.  Parameter DEMANGLE
759    controls whether to print the symbolic name "raw" or demangled.
760    Global setting "addressprint" controls whether to print hex address
761    or not.  */
762
763 void
764 print_address_demangle (struct gdbarch *gdbarch, CORE_ADDR addr,
765                         struct ui_file *stream, int do_demangle)
766 {
767   struct value_print_options opts;
768   get_user_print_options (&opts);
769   if (addr == 0)
770     {
771       fprintf_filtered (stream, "0");
772     }
773   else if (opts.addressprint)
774     {
775       fputs_filtered (paddress (gdbarch, addr), stream);
776       print_address_symbolic (gdbarch, addr, stream, do_demangle, " ");
777     }
778   else
779     {
780       print_address_symbolic (gdbarch, addr, stream, do_demangle, "");
781     }
782 }
783 \f
784
785 /* Examine data at address ADDR in format FMT.
786    Fetch it from memory and print on gdb_stdout.  */
787
788 static void
789 do_examine (struct format_data fmt, struct gdbarch *gdbarch, CORE_ADDR addr)
790 {
791   char format = 0;
792   char size;
793   int count = 1;
794   struct type *val_type = NULL;
795   int i;
796   int maxelts;
797   struct value_print_options opts;
798
799   format = fmt.format;
800   size = fmt.size;
801   count = fmt.count;
802   next_gdbarch = gdbarch;
803   next_address = addr;
804
805   /* String or instruction format implies fetch single bytes
806      regardless of the specified size.  */
807   if (format == 's' || format == 'i')
808     size = 'b';
809
810   if (size == 'a')
811     {
812       /* Pick the appropriate size for an address.  */
813       if (gdbarch_ptr_bit (next_gdbarch) == 64)
814         size = 'g';
815       else if (gdbarch_ptr_bit (next_gdbarch) == 32)
816         size = 'w';
817       else if (gdbarch_ptr_bit (next_gdbarch) == 16)
818         size = 'h';
819       else
820         /* Bad value for gdbarch_ptr_bit.  */
821         internal_error (__FILE__, __LINE__,
822                         _("failed internal consistency check"));
823     }
824
825   if (size == 'b')
826     val_type = builtin_type (next_gdbarch)->builtin_int8;
827   else if (size == 'h')
828     val_type = builtin_type (next_gdbarch)->builtin_int16;
829   else if (size == 'w')
830     val_type = builtin_type (next_gdbarch)->builtin_int32;
831   else if (size == 'g')
832     val_type = builtin_type (next_gdbarch)->builtin_int64;
833
834   maxelts = 8;
835   if (size == 'w')
836     maxelts = 4;
837   if (size == 'g')
838     maxelts = 2;
839   if (format == 's' || format == 'i')
840     maxelts = 1;
841
842   get_formatted_print_options (&opts, format);
843
844   /* Print as many objects as specified in COUNT, at most maxelts per line,
845      with the address of the next one at the start of each line.  */
846
847   while (count > 0)
848     {
849       QUIT;
850       if (format == 'i')
851         fputs_filtered (pc_prefix (next_address), gdb_stdout);
852       print_address (next_gdbarch, next_address, gdb_stdout);
853       printf_filtered (":");
854       for (i = maxelts;
855            i > 0 && count > 0;
856            i--, count--)
857         {
858           printf_filtered ("\t");
859           /* Note that print_formatted sets next_address for the next
860              object.  */
861           last_examine_address = next_address;
862
863           if (last_examine_value)
864             value_free (last_examine_value);
865
866           /* The value to be displayed is not fetched greedily.
867              Instead, to avoid the possibility of a fetched value not
868              being used, its retrieval is delayed until the print code
869              uses it.  When examining an instruction stream, the
870              disassembler will perform its own memory fetch using just
871              the address stored in LAST_EXAMINE_VALUE.  FIXME: Should
872              the disassembler be modified so that LAST_EXAMINE_VALUE
873              is left with the byte sequence from the last complete
874              instruction fetched from memory? */
875           last_examine_value = value_at_lazy (val_type, next_address);
876
877           if (last_examine_value)
878             release_value (last_examine_value);
879
880           print_formatted (last_examine_value, size, &opts, gdb_stdout);
881
882           /* Display any branch delay slots following the final insn.  */
883           if (format == 'i' && count == 1)
884             count += branch_delay_insns;
885         }
886       printf_filtered ("\n");
887       gdb_flush (gdb_stdout);
888     }
889 }
890 \f
891 static void
892 validate_format (struct format_data fmt, char *cmdname)
893 {
894   if (fmt.size != 0)
895     error (_("Size letters are meaningless in \"%s\" command."), cmdname);
896   if (fmt.count != 1)
897     error (_("Item count other than 1 is meaningless in \"%s\" command."),
898            cmdname);
899   if (fmt.format == 'i')
900     error (_("Format letter \"%c\" is meaningless in \"%s\" command."),
901            fmt.format, cmdname);
902 }
903
904 /* Evaluate string EXP as an expression in the current language and
905    print the resulting value.  EXP may contain a format specifier as the
906    first argument ("/x myvar" for example, to print myvar in hex).  */
907
908 static void
909 print_command_1 (char *exp, int inspect, int voidprint)
910 {
911   struct expression *expr;
912   struct cleanup *old_chain = 0;
913   char format = 0;
914   struct value *val;
915   struct format_data fmt;
916   int cleanup = 0;
917
918   if (exp && *exp == '/')
919     {
920       exp++;
921       fmt = decode_format (&exp, last_format, 0);
922       validate_format (fmt, "print");
923       last_format = format = fmt.format;
924     }
925   else
926     {
927       fmt.count = 1;
928       fmt.format = 0;
929       fmt.size = 0;
930       fmt.raw = 0;
931     }
932
933   if (exp && *exp)
934     {
935       struct type *type;
936       expr = parse_expression (exp);
937       old_chain = make_cleanup (free_current_contents, &expr);
938       cleanup = 1;
939       val = evaluate_expression (expr);
940     }
941   else
942     val = access_value_history (0);
943
944   if (voidprint || (val && value_type (val) &&
945                     TYPE_CODE (value_type (val)) != TYPE_CODE_VOID))
946     {
947       struct value_print_options opts;
948       int histindex = record_latest_value (val);
949
950       if (histindex >= 0)
951         annotate_value_history_begin (histindex, value_type (val));
952       else
953         annotate_value_begin (value_type (val));
954
955       if (inspect)
956         printf_unfiltered ("\031(gdb-makebuffer \"%s\"  %d '(\"",
957                            exp, histindex);
958       else if (histindex >= 0)
959         printf_filtered ("$%d = ", histindex);
960
961       if (histindex >= 0)
962         annotate_value_history_value ();
963
964       get_formatted_print_options (&opts, format);
965       opts.inspect_it = inspect;
966       opts.raw = fmt.raw;
967
968       print_formatted (val, fmt.size, &opts, gdb_stdout);
969       printf_filtered ("\n");
970
971       if (histindex >= 0)
972         annotate_value_history_end ();
973       else
974         annotate_value_end ();
975
976       if (inspect)
977         printf_unfiltered ("\") )\030");
978     }
979
980   if (cleanup)
981     do_cleanups (old_chain);
982 }
983
984 static void
985 print_command (char *exp, int from_tty)
986 {
987   print_command_1 (exp, 0, 1);
988 }
989
990 /* Same as print, except in epoch, it gets its own window.  */
991 static void
992 inspect_command (char *exp, int from_tty)
993 {
994   extern int epoch_interface;
995
996   print_command_1 (exp, epoch_interface, 1);
997 }
998
999 /* Same as print, except it doesn't print void results.  */
1000 static void
1001 call_command (char *exp, int from_tty)
1002 {
1003   print_command_1 (exp, 0, 0);
1004 }
1005
1006 void
1007 output_command (char *exp, int from_tty)
1008 {
1009   struct expression *expr;
1010   struct cleanup *old_chain;
1011   char format = 0;
1012   struct value *val;
1013   struct format_data fmt;
1014   struct value_print_options opts;
1015
1016   fmt.size = 0;
1017   fmt.raw = 0;
1018
1019   if (exp && *exp == '/')
1020     {
1021       exp++;
1022       fmt = decode_format (&exp, 0, 0);
1023       validate_format (fmt, "output");
1024       format = fmt.format;
1025     }
1026
1027   expr = parse_expression (exp);
1028   old_chain = make_cleanup (free_current_contents, &expr);
1029
1030   val = evaluate_expression (expr);
1031
1032   annotate_value_begin (value_type (val));
1033
1034   get_formatted_print_options (&opts, format);
1035   opts.raw = fmt.raw;
1036   print_formatted (val, fmt.size, &opts, gdb_stdout);
1037
1038   annotate_value_end ();
1039
1040   wrap_here ("");
1041   gdb_flush (gdb_stdout);
1042
1043   do_cleanups (old_chain);
1044 }
1045
1046 static void
1047 set_command (char *exp, int from_tty)
1048 {
1049   struct expression *expr = parse_expression (exp);
1050   struct cleanup *old_chain =
1051     make_cleanup (free_current_contents, &expr);
1052   evaluate_expression (expr);
1053   do_cleanups (old_chain);
1054 }
1055
1056 static void
1057 sym_info (char *arg, int from_tty)
1058 {
1059   struct minimal_symbol *msymbol;
1060   struct objfile *objfile;
1061   struct obj_section *osect;
1062   CORE_ADDR addr, sect_addr;
1063   int matches = 0;
1064   unsigned int offset;
1065
1066   if (!arg)
1067     error_no_arg (_("address"));
1068
1069   addr = parse_and_eval_address (arg);
1070   ALL_OBJSECTIONS (objfile, osect)
1071   {
1072     /* Only process each object file once, even if there's a separate
1073        debug file.  */
1074     if (objfile->separate_debug_objfile_backlink)
1075       continue;
1076
1077     sect_addr = overlay_mapped_address (addr, osect);
1078
1079     if (obj_section_addr (osect) <= sect_addr
1080         && sect_addr < obj_section_endaddr (osect)
1081         && (msymbol = lookup_minimal_symbol_by_pc_section (sect_addr, osect)))
1082       {
1083         const char *obj_name, *mapped, *sec_name, *msym_name;
1084         char *loc_string;
1085         struct cleanup *old_chain;
1086
1087         matches = 1;
1088         offset = sect_addr - SYMBOL_VALUE_ADDRESS (msymbol);
1089         mapped = section_is_mapped (osect) ? _("mapped") : _("unmapped");
1090         sec_name = osect->the_bfd_section->name;
1091         msym_name = SYMBOL_PRINT_NAME (msymbol);
1092
1093         /* Don't print the offset if it is zero.
1094            We assume there's no need to handle i18n of "sym + offset".  */
1095         if (offset)
1096           loc_string = xstrprintf ("%s + %u", msym_name, offset);
1097         else
1098           loc_string = xstrprintf ("%s", msym_name);
1099
1100         /* Use a cleanup to free loc_string in case the user quits
1101            a pagination request inside printf_filtered.  */
1102         old_chain = make_cleanup (xfree, loc_string);
1103
1104         gdb_assert (osect->objfile && osect->objfile->name);
1105         obj_name = osect->objfile->name;
1106
1107         if (MULTI_OBJFILE_P ())
1108           if (pc_in_unmapped_range (addr, osect))
1109             if (section_is_overlay (osect))
1110               printf_filtered (_("%s in load address range of "
1111                                  "%s overlay section %s of %s\n"),
1112                                loc_string, mapped, sec_name, obj_name);
1113             else
1114               printf_filtered (_("%s in load address range of "
1115                                  "section %s of %s\n"),
1116                                loc_string, sec_name, obj_name);
1117           else
1118             if (section_is_overlay (osect))
1119               printf_filtered (_("%s in %s overlay section %s of %s\n"),
1120                                loc_string, mapped, sec_name, obj_name);
1121             else
1122               printf_filtered (_("%s in section %s of %s\n"),
1123                                loc_string, sec_name, obj_name);
1124         else
1125           if (pc_in_unmapped_range (addr, osect))
1126             if (section_is_overlay (osect))
1127               printf_filtered (_("%s in load address range of %s overlay "
1128                                  "section %s\n"),
1129                                loc_string, mapped, sec_name);
1130             else
1131               printf_filtered (_("%s in load address range of section %s\n"),
1132                                loc_string, sec_name);
1133           else
1134             if (section_is_overlay (osect))
1135               printf_filtered (_("%s in %s overlay section %s\n"),
1136                                loc_string, mapped, sec_name);
1137             else
1138               printf_filtered (_("%s in section %s\n"),
1139                                loc_string, sec_name);
1140
1141         do_cleanups (old_chain);
1142       }
1143   }
1144   if (matches == 0)
1145     printf_filtered (_("No symbol matches %s.\n"), arg);
1146 }
1147
1148 static void
1149 address_info (char *exp, int from_tty)
1150 {
1151   struct block *block;
1152   struct gdbarch *gdbarch;
1153   int regno;
1154   struct symbol *sym;
1155   struct minimal_symbol *msymbol;
1156   long val;
1157   struct obj_section *section;
1158   CORE_ADDR load_addr, context_pc = 0;
1159   int is_a_field_of_this;       /* C++: lookup_symbol sets this to nonzero
1160                                    if exp is a field of `this'. */
1161
1162   if (exp == 0)
1163     error (_("Argument required."));
1164
1165   sym = lookup_symbol (exp, get_selected_block (&context_pc), VAR_DOMAIN,
1166                        &is_a_field_of_this);
1167   if (sym == NULL)
1168     {
1169       if (is_a_field_of_this)
1170         {
1171           printf_filtered ("Symbol \"");
1172           fprintf_symbol_filtered (gdb_stdout, exp,
1173                                    current_language->la_language, DMGL_ANSI);
1174           printf_filtered ("\" is a field of the local class variable ");
1175           if (current_language->la_language == language_objc)
1176             printf_filtered ("`self'\n");       /* ObjC equivalent of "this" */
1177           else
1178             printf_filtered ("`this'\n");
1179           return;
1180         }
1181
1182       msymbol = lookup_minimal_symbol (exp, NULL, NULL);
1183
1184       if (msymbol != NULL)
1185         {
1186           gdbarch = get_objfile_arch (msymbol_objfile (msymbol));
1187           load_addr = SYMBOL_VALUE_ADDRESS (msymbol);
1188
1189           printf_filtered ("Symbol \"");
1190           fprintf_symbol_filtered (gdb_stdout, exp,
1191                                    current_language->la_language, DMGL_ANSI);
1192           printf_filtered ("\" is at ");
1193           fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
1194           printf_filtered (" in a file compiled without debugging");
1195           section = SYMBOL_OBJ_SECTION (msymbol);
1196           if (section_is_overlay (section))
1197             {
1198               load_addr = overlay_unmapped_address (load_addr, section);
1199               printf_filtered (",\n -- loaded at ");
1200               fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
1201               printf_filtered (" in overlay section %s",
1202                                section->the_bfd_section->name);
1203             }
1204           printf_filtered (".\n");
1205         }
1206       else
1207         error (_("No symbol \"%s\" in current context."), exp);
1208       return;
1209     }
1210
1211   printf_filtered ("Symbol \"");
1212   fprintf_symbol_filtered (gdb_stdout, SYMBOL_PRINT_NAME (sym),
1213                            current_language->la_language, DMGL_ANSI);
1214   printf_filtered ("\" is ");
1215   val = SYMBOL_VALUE (sym);
1216   section = SYMBOL_OBJ_SECTION (sym);
1217   gdbarch = get_objfile_arch (SYMBOL_SYMTAB (sym)->objfile);
1218
1219   switch (SYMBOL_CLASS (sym))
1220     {
1221     case LOC_CONST:
1222     case LOC_CONST_BYTES:
1223       printf_filtered ("constant");
1224       break;
1225
1226     case LOC_LABEL:
1227       printf_filtered ("a label at address ");
1228       load_addr = SYMBOL_VALUE_ADDRESS (sym);
1229       fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
1230       if (section_is_overlay (section))
1231         {
1232           load_addr = overlay_unmapped_address (load_addr, section);
1233           printf_filtered (",\n -- loaded at ");
1234           fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
1235           printf_filtered (" in overlay section %s",
1236                            section->the_bfd_section->name);
1237         }
1238       break;
1239
1240     case LOC_COMPUTED:
1241       /* FIXME: cagney/2004-01-26: It should be possible to
1242          unconditionally call the SYMBOL_COMPUTED_OPS method when available.
1243          Unfortunately DWARF 2 stores the frame-base (instead of the
1244          function) location in a function's symbol.  Oops!  For the
1245          moment enable this when/where applicable.  */
1246       SYMBOL_COMPUTED_OPS (sym)->describe_location (sym, context_pc, gdb_stdout);
1247       break;
1248
1249     case LOC_REGISTER:
1250       /* GDBARCH is the architecture associated with the objfile the symbol
1251          is defined in; the target architecture may be different, and may
1252          provide additional registers.  However, we do not know the target
1253          architecture at this point.  We assume the objfile architecture
1254          will contain all the standard registers that occur in debug info
1255          in that objfile.  */
1256       regno = SYMBOL_REGISTER_OPS (sym)->register_number (sym, gdbarch);
1257
1258       if (SYMBOL_IS_ARGUMENT (sym))
1259         printf_filtered (_("an argument in register %s"),
1260                          gdbarch_register_name (gdbarch, regno));
1261       else
1262         printf_filtered (_("a variable in register %s"),
1263                          gdbarch_register_name (gdbarch, regno));
1264       break;
1265
1266     case LOC_STATIC:
1267       printf_filtered (_("static storage at address "));
1268       load_addr = SYMBOL_VALUE_ADDRESS (sym);
1269       fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
1270       if (section_is_overlay (section))
1271         {
1272           load_addr = overlay_unmapped_address (load_addr, section);
1273           printf_filtered (_(",\n -- loaded at "));
1274           fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
1275           printf_filtered (_(" in overlay section %s"),
1276                            section->the_bfd_section->name);
1277         }
1278       break;
1279
1280     case LOC_REGPARM_ADDR:
1281       /* Note comment at LOC_REGISTER.  */
1282       regno = SYMBOL_REGISTER_OPS (sym)->register_number (sym, gdbarch);
1283       printf_filtered (_("address of an argument in register %s"),
1284                        gdbarch_register_name (gdbarch, regno));
1285       break;
1286
1287     case LOC_ARG:
1288       printf_filtered (_("an argument at offset %ld"), val);
1289       break;
1290
1291     case LOC_LOCAL:
1292       printf_filtered (_("a local variable at frame offset %ld"), val);
1293       break;
1294
1295     case LOC_REF_ARG:
1296       printf_filtered (_("a reference argument at offset %ld"), val);
1297       break;
1298
1299     case LOC_TYPEDEF:
1300       printf_filtered (_("a typedef"));
1301       break;
1302
1303     case LOC_BLOCK:
1304       printf_filtered (_("a function at address "));
1305       load_addr = BLOCK_START (SYMBOL_BLOCK_VALUE (sym));
1306       fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
1307       if (section_is_overlay (section))
1308         {
1309           load_addr = overlay_unmapped_address (load_addr, section);
1310           printf_filtered (_(",\n -- loaded at "));
1311           fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
1312           printf_filtered (_(" in overlay section %s"),
1313                            section->the_bfd_section->name);
1314         }
1315       break;
1316
1317     case LOC_UNRESOLVED:
1318       {
1319         struct minimal_symbol *msym;
1320
1321         msym = lookup_minimal_symbol (SYMBOL_LINKAGE_NAME (sym), NULL, NULL);
1322         if (msym == NULL)
1323           printf_filtered ("unresolved");
1324         else
1325           {
1326             section = SYMBOL_OBJ_SECTION (msym);
1327             load_addr = SYMBOL_VALUE_ADDRESS (msym);
1328
1329             if (section
1330                 && (section->the_bfd_section->flags & SEC_THREAD_LOCAL) != 0)
1331               printf_filtered (_("a thread-local variable at offset %s "
1332                                  "in the thread-local storage for `%s'"),
1333                                paddress (gdbarch, load_addr),
1334                                section->objfile->name);
1335             else
1336               {
1337                 printf_filtered (_("static storage at address "));
1338                 fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
1339                 if (section_is_overlay (section))
1340                   {
1341                     load_addr = overlay_unmapped_address (load_addr, section);
1342                     printf_filtered (_(",\n -- loaded at "));
1343                     fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
1344                     printf_filtered (_(" in overlay section %s"),
1345                                      section->the_bfd_section->name);
1346                   }
1347               }
1348           }
1349       }
1350       break;
1351
1352     case LOC_OPTIMIZED_OUT:
1353       printf_filtered (_("optimized out"));
1354       break;
1355
1356     default:
1357       printf_filtered (_("of unknown (botched) type"));
1358       break;
1359     }
1360   printf_filtered (".\n");
1361 }
1362 \f
1363
1364 static void
1365 x_command (char *exp, int from_tty)
1366 {
1367   struct expression *expr;
1368   struct format_data fmt;
1369   struct cleanup *old_chain;
1370   struct value *val;
1371
1372   fmt.format = last_format ? last_format : 'x';
1373   fmt.size = last_size;
1374   fmt.count = 1;
1375   fmt.raw = 0;
1376
1377   if (exp && *exp == '/')
1378     {
1379       exp++;
1380       fmt = decode_format (&exp, last_format, last_size);
1381     }
1382
1383   /* If we have an expression, evaluate it and use it as the address.  */
1384
1385   if (exp != 0 && *exp != 0)
1386     {
1387       expr = parse_expression (exp);
1388       /* Cause expression not to be there any more if this command is
1389          repeated with Newline.  But don't clobber a user-defined
1390          command's definition.  */
1391       if (from_tty)
1392         *exp = 0;
1393       old_chain = make_cleanup (free_current_contents, &expr);
1394       val = evaluate_expression (expr);
1395       if (TYPE_CODE (value_type (val)) == TYPE_CODE_REF)
1396         val = value_ind (val);
1397       /* In rvalue contexts, such as this, functions are coerced into
1398          pointers to functions.  This makes "x/i main" work.  */
1399       if (/* last_format == 'i'  && */ 
1400           TYPE_CODE (value_type (val)) == TYPE_CODE_FUNC
1401            && VALUE_LVAL (val) == lval_memory)
1402         next_address = value_address (val);
1403       else
1404         next_address = value_as_address (val);
1405
1406       next_gdbarch = expr->gdbarch;
1407       do_cleanups (old_chain);
1408     }
1409
1410   if (!next_gdbarch)
1411     error_no_arg (_("starting display address"));
1412
1413   do_examine (fmt, next_gdbarch, next_address);
1414
1415   /* If the examine succeeds, we remember its size and format for next
1416      time.  */
1417   last_size = fmt.size;
1418   last_format = fmt.format;
1419
1420   /* Set a couple of internal variables if appropriate. */
1421   if (last_examine_value)
1422     {
1423       /* Make last address examined available to the user as $_.  Use
1424          the correct pointer type.  */
1425       struct type *pointer_type
1426         = lookup_pointer_type (value_type (last_examine_value));
1427       set_internalvar (lookup_internalvar ("_"),
1428                        value_from_pointer (pointer_type,
1429                                            last_examine_address));
1430
1431       /* Make contents of last address examined available to the user
1432          as $__.  If the last value has not been fetched from memory
1433          then don't fetch it now; instead mark it by voiding the $__
1434          variable.  */
1435       if (value_lazy (last_examine_value))
1436         clear_internalvar (lookup_internalvar ("__"));
1437       else
1438         set_internalvar (lookup_internalvar ("__"), last_examine_value);
1439     }
1440 }
1441 \f
1442
1443 /* Add an expression to the auto-display chain.
1444    Specify the expression.  */
1445
1446 static void
1447 display_command (char *exp, int from_tty)
1448 {
1449   struct format_data fmt;
1450   struct expression *expr;
1451   struct display *new;
1452   int display_it = 1;
1453
1454 #if defined(TUI)
1455   /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1456      `tui_version'.  */
1457   if (tui_active && exp != NULL && *exp == '$')
1458     display_it = (tui_set_layout_for_display_command (exp) == TUI_FAILURE);
1459 #endif
1460
1461   if (display_it)
1462     {
1463       if (exp == 0)
1464         {
1465           do_displays ();
1466           return;
1467         }
1468
1469       if (*exp == '/')
1470         {
1471           exp++;
1472           fmt = decode_format (&exp, 0, 0);
1473           if (fmt.size && fmt.format == 0)
1474             fmt.format = 'x';
1475           if (fmt.format == 'i' || fmt.format == 's')
1476             fmt.size = 'b';
1477         }
1478       else
1479         {
1480           fmt.format = 0;
1481           fmt.size = 0;
1482           fmt.count = 0;
1483           fmt.raw = 0;
1484         }
1485
1486       innermost_block = NULL;
1487       expr = parse_expression (exp);
1488
1489       new = (struct display *) xmalloc (sizeof (struct display));
1490
1491       new->exp_string = xstrdup (exp);
1492       new->exp = expr;
1493       new->block = innermost_block;
1494       new->pspace = current_program_space;
1495       new->next = display_chain;
1496       new->number = ++display_number;
1497       new->format = fmt;
1498       new->enabled_p = 1;
1499       display_chain = new;
1500
1501       if (from_tty && target_has_execution)
1502         do_one_display (new);
1503
1504       dont_repeat ();
1505     }
1506 }
1507
1508 static void
1509 free_display (struct display *d)
1510 {
1511   xfree (d->exp_string);
1512   xfree (d->exp);
1513   xfree (d);
1514 }
1515
1516 /* Clear out the display_chain.  Done when new symtabs are loaded,
1517    since this invalidates the types stored in many expressions.  */
1518
1519 void
1520 clear_displays (void)
1521 {
1522   struct display *d;
1523
1524   while ((d = display_chain) != NULL)
1525     {
1526       display_chain = d->next;
1527       free_display (d);
1528     }
1529 }
1530
1531 /* Delete the auto-display number NUM.  */
1532
1533 static void
1534 delete_display (int num)
1535 {
1536   struct display *d1, *d;
1537
1538   if (!display_chain)
1539     error (_("No display number %d."), num);
1540
1541   if (display_chain->number == num)
1542     {
1543       d1 = display_chain;
1544       display_chain = d1->next;
1545       free_display (d1);
1546     }
1547   else
1548     for (d = display_chain;; d = d->next)
1549       {
1550         if (d->next == 0)
1551           error (_("No display number %d."), num);
1552         if (d->next->number == num)
1553           {
1554             d1 = d->next;
1555             d->next = d1->next;
1556             free_display (d1);
1557             break;
1558           }
1559       }
1560 }
1561
1562 /* Delete some values from the auto-display chain.
1563    Specify the element numbers.  */
1564
1565 static void
1566 undisplay_command (char *args, int from_tty)
1567 {
1568   char *p = args;
1569   char *p1;
1570   int num;
1571
1572   if (args == 0)
1573     {
1574       if (query (_("Delete all auto-display expressions? ")))
1575         clear_displays ();
1576       dont_repeat ();
1577       return;
1578     }
1579
1580   while (*p)
1581     {
1582       p1 = p;
1583       while (*p1 >= '0' && *p1 <= '9')
1584         p1++;
1585       if (*p1 && *p1 != ' ' && *p1 != '\t')
1586         error (_("Arguments must be display numbers."));
1587
1588       num = atoi (p);
1589
1590       delete_display (num);
1591
1592       p = p1;
1593       while (*p == ' ' || *p == '\t')
1594         p++;
1595     }
1596   dont_repeat ();
1597 }
1598
1599 /* Display a single auto-display.  
1600    Do nothing if the display cannot be printed in the current context,
1601    or if the display is disabled. */
1602
1603 static void
1604 do_one_display (struct display *d)
1605 {
1606   int within_current_scope;
1607
1608   if (d->enabled_p == 0)
1609     return;
1610
1611   /* The expression carries the architecture that was used at parse time.
1612      This is a problem if the expression depends on architecture features
1613      (e.g. register numbers), and the current architecture is now different.
1614      For example, a display statement like "display/i $pc" is expected to
1615      display the PC register of the current architecture, not the arch at
1616      the time the display command was given.  Therefore, we re-parse the
1617      expression if the current architecture has changed.  */
1618   if (d->exp != NULL && d->exp->gdbarch != get_current_arch ())
1619     {
1620       xfree (d->exp);
1621       d->exp = NULL;
1622       d->block = NULL;
1623     }
1624
1625   if (d->exp == NULL)
1626     {
1627       volatile struct gdb_exception ex;
1628       TRY_CATCH (ex, RETURN_MASK_ALL)
1629         {
1630           innermost_block = NULL;
1631           d->exp = parse_expression (d->exp_string);
1632           d->block = innermost_block;
1633         }
1634       if (ex.reason < 0)
1635         {
1636           /* Can't re-parse the expression.  Disable this display item.  */
1637           d->enabled_p = 0;
1638           warning (_("Unable to display \"%s\": %s"),
1639                    d->exp_string, ex.message);
1640           return;
1641         }
1642     }
1643
1644   if (d->block)
1645     {
1646       if (d->pspace == current_program_space)
1647         within_current_scope = contained_in (get_selected_block (0), d->block);
1648       else
1649         within_current_scope = 0;
1650     }
1651   else
1652     within_current_scope = 1;
1653   if (!within_current_scope)
1654     return;
1655
1656   current_display_number = d->number;
1657
1658   annotate_display_begin ();
1659   printf_filtered ("%d", d->number);
1660   annotate_display_number_end ();
1661   printf_filtered (": ");
1662   if (d->format.size)
1663     {
1664       CORE_ADDR addr;
1665       struct value *val;
1666
1667       annotate_display_format ();
1668
1669       printf_filtered ("x/");
1670       if (d->format.count != 1)
1671         printf_filtered ("%d", d->format.count);
1672       printf_filtered ("%c", d->format.format);
1673       if (d->format.format != 'i' && d->format.format != 's')
1674         printf_filtered ("%c", d->format.size);
1675       printf_filtered (" ");
1676
1677       annotate_display_expression ();
1678
1679       puts_filtered (d->exp_string);
1680       annotate_display_expression_end ();
1681
1682       if (d->format.count != 1 || d->format.format == 'i')
1683         printf_filtered ("\n");
1684       else
1685         printf_filtered ("  ");
1686
1687       val = evaluate_expression (d->exp);
1688       addr = value_as_address (val);
1689       if (d->format.format == 'i')
1690         addr = gdbarch_addr_bits_remove (d->exp->gdbarch, addr);
1691
1692       annotate_display_value ();
1693
1694       do_examine (d->format, d->exp->gdbarch, addr);
1695     }
1696   else
1697     {
1698       struct value_print_options opts;
1699
1700       annotate_display_format ();
1701
1702       if (d->format.format)
1703         printf_filtered ("/%c ", d->format.format);
1704
1705       annotate_display_expression ();
1706
1707       puts_filtered (d->exp_string);
1708       annotate_display_expression_end ();
1709
1710       printf_filtered (" = ");
1711
1712       annotate_display_expression ();
1713
1714       get_formatted_print_options (&opts, d->format.format);
1715       opts.raw = d->format.raw;
1716       print_formatted (evaluate_expression (d->exp),
1717                        d->format.size, &opts, gdb_stdout);
1718       printf_filtered ("\n");
1719     }
1720
1721   annotate_display_end ();
1722
1723   gdb_flush (gdb_stdout);
1724   current_display_number = -1;
1725 }
1726
1727 /* Display all of the values on the auto-display chain which can be
1728    evaluated in the current scope.  */
1729
1730 void
1731 do_displays (void)
1732 {
1733   struct display *d;
1734
1735   for (d = display_chain; d; d = d->next)
1736     do_one_display (d);
1737 }
1738
1739 /* Delete the auto-display which we were in the process of displaying.
1740    This is done when there is an error or a signal.  */
1741
1742 void
1743 disable_display (int num)
1744 {
1745   struct display *d;
1746
1747   for (d = display_chain; d; d = d->next)
1748     if (d->number == num)
1749       {
1750         d->enabled_p = 0;
1751         return;
1752       }
1753   printf_unfiltered (_("No display number %d.\n"), num);
1754 }
1755
1756 void
1757 disable_current_display (void)
1758 {
1759   if (current_display_number >= 0)
1760     {
1761       disable_display (current_display_number);
1762       fprintf_unfiltered (gdb_stderr, _("\
1763 Disabling display %d to avoid infinite recursion.\n"),
1764                           current_display_number);
1765     }
1766   current_display_number = -1;
1767 }
1768
1769 static void
1770 display_info (char *ignore, int from_tty)
1771 {
1772   struct display *d;
1773
1774   if (!display_chain)
1775     printf_unfiltered (_("There are no auto-display expressions now.\n"));
1776   else
1777     printf_filtered (_("Auto-display expressions now in effect:\n\
1778 Num Enb Expression\n"));
1779
1780   for (d = display_chain; d; d = d->next)
1781     {
1782       printf_filtered ("%d:   %c  ", d->number, "ny"[(int) d->enabled_p]);
1783       if (d->format.size)
1784         printf_filtered ("/%d%c%c ", d->format.count, d->format.size,
1785                          d->format.format);
1786       else if (d->format.format)
1787         printf_filtered ("/%c ", d->format.format);
1788       puts_filtered (d->exp_string);
1789       if (d->block && !contained_in (get_selected_block (0), d->block))
1790         printf_filtered (_(" (cannot be evaluated in the current context)"));
1791       printf_filtered ("\n");
1792       gdb_flush (gdb_stdout);
1793     }
1794 }
1795
1796 static void
1797 enable_display (char *args, int from_tty)
1798 {
1799   char *p = args;
1800   char *p1;
1801   int num;
1802   struct display *d;
1803
1804   if (p == 0)
1805     {
1806       for (d = display_chain; d; d = d->next)
1807         d->enabled_p = 1;
1808     }
1809   else
1810     while (*p)
1811       {
1812         p1 = p;
1813         while (*p1 >= '0' && *p1 <= '9')
1814           p1++;
1815         if (*p1 && *p1 != ' ' && *p1 != '\t')
1816           error (_("Arguments must be display numbers."));
1817
1818         num = atoi (p);
1819
1820         for (d = display_chain; d; d = d->next)
1821           if (d->number == num)
1822             {
1823               d->enabled_p = 1;
1824               goto win;
1825             }
1826         printf_unfiltered (_("No display number %d.\n"), num);
1827       win:
1828         p = p1;
1829         while (*p == ' ' || *p == '\t')
1830           p++;
1831       }
1832 }
1833
1834 static void
1835 disable_display_command (char *args, int from_tty)
1836 {
1837   char *p = args;
1838   char *p1;
1839   struct display *d;
1840
1841   if (p == 0)
1842     {
1843       for (d = display_chain; d; d = d->next)
1844         d->enabled_p = 0;
1845     }
1846   else
1847     while (*p)
1848       {
1849         p1 = p;
1850         while (*p1 >= '0' && *p1 <= '9')
1851           p1++;
1852         if (*p1 && *p1 != ' ' && *p1 != '\t')
1853           error (_("Arguments must be display numbers."));
1854
1855         disable_display (atoi (p));
1856
1857         p = p1;
1858         while (*p == ' ' || *p == '\t')
1859           p++;
1860       }
1861 }
1862
1863 /* Return 1 if D uses SOLIB (and will become dangling when SOLIB
1864    is unloaded), otherwise return 0.  */
1865
1866 static int
1867 display_uses_solib_p (const struct display *d,
1868                       const struct so_list *solib)
1869 {
1870   int endpos;
1871   struct expression *const exp = d->exp;
1872   const union exp_element *const elts = exp->elts;
1873
1874   if (d->block != NULL
1875       && d->pspace == solib->pspace
1876       && solib_contains_address_p (solib, d->block->startaddr))
1877     return 1;
1878
1879   for (endpos = exp->nelts; endpos > 0; )
1880     {
1881       int i, args, oplen = 0;
1882
1883       exp->language_defn->la_exp_desc->operator_length (exp, endpos,
1884                                                         &oplen, &args);
1885       gdb_assert (oplen > 0);
1886
1887       i = endpos - oplen;
1888       if (elts[i].opcode == OP_VAR_VALUE)
1889         {
1890           const struct block *const block = elts[i + 1].block;
1891           const struct symbol *const symbol = elts[i + 2].symbol;
1892
1893           if (block != NULL
1894               && solib_contains_address_p (solib,
1895                                            block->startaddr))
1896             return 1;
1897
1898           /* SYMBOL_OBJ_SECTION (symbol) may be NULL.  */
1899           if (SYMBOL_SYMTAB (symbol)->objfile == solib->objfile)
1900             return 1;
1901         }
1902       endpos -= oplen;
1903     }
1904
1905   return 0;
1906 }
1907
1908 /* display_chain items point to blocks and expressions.  Some expressions in
1909    turn may point to symbols.
1910    Both symbols and blocks are obstack_alloc'd on objfile_stack, and are
1911    obstack_free'd when a shared library is unloaded.
1912    Clear pointers that are about to become dangling.
1913    Both .exp and .block fields will be restored next time we need to display
1914    an item by re-parsing .exp_string field in the new execution context.  */
1915
1916 static void
1917 clear_dangling_display_expressions (struct so_list *solib)
1918 {
1919   struct display *d;
1920   struct objfile *objfile = NULL;
1921
1922   for (d = display_chain; d; d = d->next)
1923     {
1924       if (d->exp && display_uses_solib_p (d, solib))
1925         {
1926           xfree (d->exp);
1927           d->exp = NULL;
1928           d->block = NULL;
1929         }
1930     }
1931 }
1932 \f
1933
1934 /* Print the value in stack frame FRAME of a variable specified by a
1935    struct symbol.  NAME is the name to print; if NULL then VAR's print
1936    name will be used.  STREAM is the ui_file on which to print the
1937    value.  INDENT specifies the number of indent levels to print
1938    before printing the variable name.  */
1939
1940 void
1941 print_variable_and_value (const char *name, struct symbol *var,
1942                           struct frame_info *frame,
1943                           struct ui_file *stream, int indent)
1944 {
1945   struct value *val;
1946   struct value_print_options opts;
1947
1948   if (!name)
1949     name = SYMBOL_PRINT_NAME (var);
1950
1951   fprintf_filtered (stream, "%s%s = ", n_spaces (2 * indent), name);
1952
1953   val = read_var_value (var, frame);
1954   get_user_print_options (&opts);
1955   common_val_print (val, stream, indent, &opts, current_language);
1956   fprintf_filtered (stream, "\n");
1957 }
1958
1959 static void
1960 printf_command (char *arg, int from_tty)
1961 {
1962   char *f = NULL;
1963   char *s = arg;
1964   char *string = NULL;
1965   struct value **val_args;
1966   char *substrings;
1967   char *current_substring;
1968   int nargs = 0;
1969   int allocated_args = 20;
1970   struct cleanup *old_cleanups;
1971
1972   val_args = xmalloc (allocated_args * sizeof (struct value *));
1973   old_cleanups = make_cleanup (free_current_contents, &val_args);
1974
1975   if (s == 0)
1976     error_no_arg (_("format-control string and values to print"));
1977
1978   /* Skip white space before format string */
1979   while (*s == ' ' || *s == '\t')
1980     s++;
1981
1982   /* A format string should follow, enveloped in double quotes.  */
1983   if (*s++ != '"')
1984     error (_("Bad format string, missing '\"'."));
1985
1986   /* Parse the format-control string and copy it into the string STRING,
1987      processing some kinds of escape sequence.  */
1988
1989   f = string = (char *) alloca (strlen (s) + 1);
1990
1991   while (*s != '"')
1992     {
1993       int c = *s++;
1994       switch (c)
1995         {
1996         case '\0':
1997           error (_("Bad format string, non-terminated '\"'."));
1998
1999         case '\\':
2000           switch (c = *s++)
2001             {
2002             case '\\':
2003               *f++ = '\\';
2004               break;
2005             case 'a':
2006               *f++ = '\a';
2007               break;
2008             case 'b':
2009               *f++ = '\b';
2010               break;
2011             case 'f':
2012               *f++ = '\f';
2013               break;
2014             case 'n':
2015               *f++ = '\n';
2016               break;
2017             case 'r':
2018               *f++ = '\r';
2019               break;
2020             case 't':
2021               *f++ = '\t';
2022               break;
2023             case 'v':
2024               *f++ = '\v';
2025               break;
2026             case '"':
2027               *f++ = '"';
2028               break;
2029             default:
2030               /* ??? TODO: handle other escape sequences */
2031               error (_("Unrecognized escape character \\%c in format string."),
2032                      c);
2033             }
2034           break;
2035
2036         default:
2037           *f++ = c;
2038         }
2039     }
2040
2041   /* Skip over " and following space and comma.  */
2042   s++;
2043   *f++ = '\0';
2044   while (*s == ' ' || *s == '\t')
2045     s++;
2046
2047   if (*s != ',' && *s != 0)
2048     error (_("Invalid argument syntax"));
2049
2050   if (*s == ',')
2051     s++;
2052   while (*s == ' ' || *s == '\t')
2053     s++;
2054
2055   /* Need extra space for the '\0's.  Doubling the size is sufficient.  */
2056   substrings = alloca (strlen (string) * 2);
2057   current_substring = substrings;
2058
2059   {
2060     /* Now scan the string for %-specs and see what kinds of args they want.
2061        argclass[I] classifies the %-specs so we can give printf_filtered
2062        something of the right size.  */
2063
2064     enum argclass
2065       {
2066         int_arg, long_arg, long_long_arg, ptr_arg,
2067         string_arg, wide_string_arg, wide_char_arg,
2068         double_arg, long_double_arg, decfloat_arg
2069       };
2070     enum argclass *argclass;
2071     enum argclass this_argclass;
2072     char *last_arg;
2073     int nargs_wanted;
2074     int i;
2075
2076     argclass = (enum argclass *) alloca (strlen (s) * sizeof *argclass);
2077     nargs_wanted = 0;
2078     f = string;
2079     last_arg = string;
2080     while (*f)
2081       if (*f++ == '%')
2082         {
2083           int seen_hash = 0, seen_zero = 0, lcount = 0, seen_prec = 0;
2084           int seen_space = 0, seen_plus = 0;
2085           int seen_big_l = 0, seen_h = 0, seen_big_h = 0;
2086           int seen_big_d = 0, seen_double_big_d = 0;
2087           int bad = 0;
2088
2089           /* Check the validity of the format specifier, and work
2090              out what argument it expects.  We only accept C89
2091              format strings, with the exception of long long (which
2092              we autoconf for).  */
2093
2094           /* Skip over "%%".  */
2095           if (*f == '%')
2096             {
2097               f++;
2098               continue;
2099             }
2100
2101           /* The first part of a format specifier is a set of flag
2102              characters.  */
2103           while (strchr ("0-+ #", *f))
2104             {
2105               if (*f == '#')
2106                 seen_hash = 1;
2107               else if (*f == '0')
2108                 seen_zero = 1;
2109               else if (*f == ' ')
2110                 seen_space = 1;
2111               else if (*f == '+')
2112                 seen_plus = 1;
2113               f++;
2114             }
2115
2116           /* The next part of a format specifier is a width.  */
2117           while (strchr ("0123456789", *f))
2118             f++;
2119
2120           /* The next part of a format specifier is a precision.  */
2121           if (*f == '.')
2122             {
2123               seen_prec = 1;
2124               f++;
2125               while (strchr ("0123456789", *f))
2126                 f++;
2127             }
2128
2129           /* The next part of a format specifier is a length modifier.  */
2130           if (*f == 'h')
2131             {
2132               seen_h = 1;
2133               f++;
2134             }
2135           else if (*f == 'l')
2136             {
2137               f++;
2138               lcount++;
2139               if (*f == 'l')
2140                 {
2141                   f++;
2142                   lcount++;
2143                 }
2144             }
2145           else if (*f == 'L')
2146             {
2147               seen_big_l = 1;
2148               f++;
2149             }
2150           /* Decimal32 modifier.  */
2151           else if (*f == 'H')
2152             {
2153               seen_big_h = 1;
2154               f++;
2155             }
2156           /* Decimal64 and Decimal128 modifiers.  */
2157           else if (*f == 'D')
2158             {
2159               f++;
2160
2161               /* Check for a Decimal128.  */
2162               if (*f == 'D')
2163                 {
2164                   f++;
2165                   seen_double_big_d = 1;
2166                 }
2167               else
2168                 seen_big_d = 1;
2169             }
2170
2171           switch (*f)
2172             {
2173             case 'u':
2174               if (seen_hash)
2175                 bad = 1;
2176               /* FALLTHROUGH */
2177
2178             case 'o':
2179             case 'x':
2180             case 'X':
2181               if (seen_space || seen_plus)
2182                 bad = 1;
2183               /* FALLTHROUGH */
2184
2185             case 'd':
2186             case 'i':
2187               if (lcount == 0)
2188                 this_argclass = int_arg;
2189               else if (lcount == 1)
2190                 this_argclass = long_arg;
2191               else
2192                 this_argclass = long_long_arg;
2193
2194               if (seen_big_l)
2195                 bad = 1;
2196               break;
2197
2198             case 'c':
2199               this_argclass = lcount == 0 ? int_arg : wide_char_arg;
2200               if (lcount > 1 || seen_h || seen_big_l)
2201                 bad = 1;
2202               if (seen_prec || seen_zero || seen_space || seen_plus)
2203                 bad = 1;
2204               break;
2205
2206             case 'p':
2207               this_argclass = ptr_arg;
2208               if (lcount || seen_h || seen_big_l)
2209                 bad = 1;
2210               if (seen_prec || seen_zero || seen_space || seen_plus)
2211                 bad = 1;
2212               break;
2213
2214             case 's':
2215               this_argclass = lcount == 0 ? string_arg : wide_string_arg;
2216               if (lcount > 1 || seen_h || seen_big_l)
2217                 bad = 1;
2218               if (seen_zero || seen_space || seen_plus)
2219                 bad = 1;
2220               break;
2221
2222             case 'e':
2223             case 'f':
2224             case 'g':
2225             case 'E':
2226             case 'G':
2227               if (seen_big_h || seen_big_d || seen_double_big_d)
2228                 this_argclass = decfloat_arg;
2229               else if (seen_big_l)
2230                 this_argclass = long_double_arg;
2231               else
2232                 this_argclass = double_arg;
2233
2234               if (lcount || seen_h)
2235                 bad = 1;
2236               break;
2237
2238             case '*':
2239               error (_("`*' not supported for precision or width in printf"));
2240
2241             case 'n':
2242               error (_("Format specifier `n' not supported in printf"));
2243
2244             case '\0':
2245               error (_("Incomplete format specifier at end of format string"));
2246
2247             default:
2248               error (_("Unrecognized format specifier '%c' in printf"), *f);
2249             }
2250
2251           if (bad)
2252             error (_("Inappropriate modifiers to format specifier '%c' in printf"),
2253                    *f);
2254
2255           f++;
2256
2257           if (lcount > 1 && USE_PRINTF_I64)
2258             {
2259               /* Windows' printf does support long long, but not the usual way.
2260                  Convert %lld to %I64d.  */
2261               int length_before_ll = f - last_arg - 1 - lcount;
2262               strncpy (current_substring, last_arg, length_before_ll);
2263               strcpy (current_substring + length_before_ll, "I64");
2264               current_substring[length_before_ll + 3] =
2265                 last_arg[length_before_ll + lcount];
2266               current_substring += length_before_ll + 4;
2267             }
2268           else if (this_argclass == wide_string_arg
2269                    || this_argclass == wide_char_arg)
2270             {
2271               /* Convert %ls or %lc to %s.  */
2272               int length_before_ls = f - last_arg - 2;
2273               strncpy (current_substring, last_arg, length_before_ls);
2274               strcpy (current_substring + length_before_ls, "s");
2275               current_substring += length_before_ls + 2;
2276             }
2277           else
2278             {
2279               strncpy (current_substring, last_arg, f - last_arg);
2280               current_substring += f - last_arg;
2281             }
2282           *current_substring++ = '\0';
2283           last_arg = f;
2284           argclass[nargs_wanted++] = this_argclass;
2285         }
2286
2287     /* Now, parse all arguments and evaluate them.
2288        Store the VALUEs in VAL_ARGS.  */
2289
2290     while (*s != '\0')
2291       {
2292         char *s1;
2293         if (nargs == allocated_args)
2294           val_args = (struct value **) xrealloc ((char *) val_args,
2295                                                  (allocated_args *= 2)
2296                                                  * sizeof (struct value *));
2297         s1 = s;
2298         val_args[nargs] = parse_to_comma_and_eval (&s1);
2299
2300         nargs++;
2301         s = s1;
2302         if (*s == ',')
2303           s++;
2304       }
2305
2306     if (nargs != nargs_wanted)
2307       error (_("Wrong number of arguments for specified format-string"));
2308
2309     /* Now actually print them.  */
2310     current_substring = substrings;
2311     for (i = 0; i < nargs; i++)
2312       {
2313         switch (argclass[i])
2314           {
2315           case string_arg:
2316             {
2317               gdb_byte *str;
2318               CORE_ADDR tem;
2319               int j;
2320               tem = value_as_address (val_args[i]);
2321
2322               /* This is a %s argument.  Find the length of the string.  */
2323               for (j = 0;; j++)
2324                 {
2325                   gdb_byte c;
2326                   QUIT;
2327                   read_memory (tem + j, &c, 1);
2328                   if (c == 0)
2329                     break;
2330                 }
2331
2332               /* Copy the string contents into a string inside GDB.  */
2333               str = (gdb_byte *) alloca (j + 1);
2334               if (j != 0)
2335                 read_memory (tem, str, j);
2336               str[j] = 0;
2337
2338               printf_filtered (current_substring, (char *) str);
2339             }
2340             break;
2341           case wide_string_arg:
2342             {
2343               gdb_byte *str;
2344               CORE_ADDR tem;
2345               int j;
2346               struct gdbarch *gdbarch
2347                 = get_type_arch (value_type (val_args[i]));
2348               enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2349               struct type *wctype = lookup_typename (current_language, gdbarch,
2350                                                      "wchar_t", NULL, 0);
2351               int wcwidth = TYPE_LENGTH (wctype);
2352               gdb_byte *buf = alloca (wcwidth);
2353               struct obstack output;
2354               struct cleanup *inner_cleanup;
2355
2356               tem = value_as_address (val_args[i]);
2357
2358               /* This is a %s argument.  Find the length of the string.  */
2359               for (j = 0;; j += wcwidth)
2360                 {
2361                   QUIT;
2362                   read_memory (tem + j, buf, wcwidth);
2363                   if (extract_unsigned_integer (buf, wcwidth, byte_order) == 0)
2364                     break;
2365                 }
2366
2367               /* Copy the string contents into a string inside GDB.  */
2368               str = (gdb_byte *) alloca (j + wcwidth);
2369               if (j != 0)
2370                 read_memory (tem, str, j);
2371               memset (&str[j], 0, wcwidth);
2372
2373               obstack_init (&output);
2374               inner_cleanup = make_cleanup_obstack_free (&output);
2375
2376               convert_between_encodings (target_wide_charset (gdbarch),
2377                                          host_charset (),
2378                                          str, j, wcwidth,
2379                                          &output, translit_char);
2380               obstack_grow_str0 (&output, "");
2381
2382               printf_filtered (current_substring, obstack_base (&output));
2383               do_cleanups (inner_cleanup);
2384             }
2385             break;
2386           case wide_char_arg:
2387             {
2388               struct gdbarch *gdbarch
2389                 = get_type_arch (value_type (val_args[i]));
2390               enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2391               struct type *wctype = lookup_typename (current_language, gdbarch,
2392                                                      "wchar_t", NULL, 0);
2393               struct type *valtype;
2394               struct obstack output;
2395               struct cleanup *inner_cleanup;
2396               const gdb_byte *bytes;
2397
2398               valtype = value_type (val_args[i]);
2399               if (TYPE_LENGTH (valtype) != TYPE_LENGTH (wctype)
2400                   || TYPE_CODE (valtype) != TYPE_CODE_INT)
2401                 error (_("expected wchar_t argument for %%lc"));
2402
2403               bytes = value_contents (val_args[i]);
2404
2405               obstack_init (&output);
2406               inner_cleanup = make_cleanup_obstack_free (&output);
2407
2408               convert_between_encodings (target_wide_charset (gdbarch),
2409                                          host_charset (),
2410                                          bytes, TYPE_LENGTH (valtype),
2411                                          TYPE_LENGTH (valtype),
2412                                          &output, translit_char);
2413               obstack_grow_str0 (&output, "");
2414
2415               printf_filtered (current_substring, obstack_base (&output));
2416               do_cleanups (inner_cleanup);
2417             }
2418             break;
2419           case double_arg:
2420             {
2421               struct type *type = value_type (val_args[i]);
2422               DOUBLEST val;
2423               int inv;
2424
2425               /* If format string wants a float, unchecked-convert the value
2426                  to floating point of the same size.  */
2427               type = float_type_from_length (type);
2428               val = unpack_double (type, value_contents (val_args[i]), &inv);
2429               if (inv)
2430                 error (_("Invalid floating value found in program."));
2431
2432               printf_filtered (current_substring, (double) val);
2433               break;
2434             }
2435           case long_double_arg:
2436 #ifdef HAVE_LONG_DOUBLE
2437             {
2438               struct type *type = value_type (val_args[i]);
2439               DOUBLEST val;
2440               int inv;
2441
2442               /* If format string wants a float, unchecked-convert the value
2443                  to floating point of the same size.  */
2444               type = float_type_from_length (type);
2445               val = unpack_double (type, value_contents (val_args[i]), &inv);
2446               if (inv)
2447                 error (_("Invalid floating value found in program."));
2448
2449               printf_filtered (current_substring, (long double) val);
2450               break;
2451             }
2452 #else
2453             error (_("long double not supported in printf"));
2454 #endif
2455           case long_long_arg:
2456 #if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG)
2457             {
2458               long long val = value_as_long (val_args[i]);
2459               printf_filtered (current_substring, val);
2460               break;
2461             }
2462 #else
2463             error (_("long long not supported in printf"));
2464 #endif
2465           case int_arg:
2466             {
2467               int val = value_as_long (val_args[i]);
2468               printf_filtered (current_substring, val);
2469               break;
2470             }
2471           case long_arg:
2472             {
2473               long val = value_as_long (val_args[i]);
2474               printf_filtered (current_substring, val);
2475               break;
2476             }
2477
2478           /* Handles decimal floating values.  */
2479         case decfloat_arg:
2480             {
2481               const gdb_byte *param_ptr = value_contents (val_args[i]);
2482 #if defined (PRINTF_HAS_DECFLOAT)
2483               /* If we have native support for Decimal floating
2484                  printing, handle it here.  */
2485               printf_filtered (current_substring, param_ptr);
2486 #else
2487
2488               /* As a workaround until vasprintf has native support for DFP
2489                we convert the DFP values to string and print them using
2490                the %s format specifier.  */
2491
2492               char *eos, *sos;
2493               int nnull_chars = 0;
2494
2495               /* Parameter data.  */
2496               struct type *param_type = value_type (val_args[i]);
2497               unsigned int param_len = TYPE_LENGTH (param_type);
2498               struct gdbarch *gdbarch = get_type_arch (param_type);
2499               enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2500
2501               /* DFP output data.  */
2502               struct value *dfp_value = NULL;
2503               gdb_byte *dfp_ptr;
2504               int dfp_len = 16;
2505               gdb_byte dec[16];
2506               struct type *dfp_type = NULL;
2507               char decstr[MAX_DECIMAL_STRING];
2508
2509               /* Points to the end of the string so that we can go back
2510                  and check for DFP length modifiers.  */
2511               eos = current_substring + strlen (current_substring);
2512
2513               /* Look for the float/double format specifier.  */
2514               while (*eos != 'f' && *eos != 'e' && *eos != 'E'
2515                      && *eos != 'g' && *eos != 'G')
2516                   eos--;
2517
2518               sos = eos;
2519
2520               /* Search for the '%' char and extract the size and type of
2521                  the output decimal value based on its modifiers
2522                  (%Hf, %Df, %DDf).  */
2523               while (*--sos != '%')
2524                 {
2525                   if (*sos == 'H')
2526                     {
2527                       dfp_len = 4;
2528                       dfp_type = builtin_type (gdbarch)->builtin_decfloat;
2529                     }
2530                   else if (*sos == 'D' && *(sos - 1) == 'D')
2531                     {
2532                       dfp_len = 16;
2533                       dfp_type = builtin_type (gdbarch)->builtin_declong;
2534                       sos--;
2535                     }
2536                   else
2537                     {
2538                       dfp_len = 8;
2539                       dfp_type = builtin_type (gdbarch)->builtin_decdouble;
2540                     }
2541                 }
2542
2543               /* Replace %Hf, %Df and %DDf with %s's.  */
2544               *++sos = 's';
2545
2546               /* Go through the whole format string and pull the correct
2547                  number of chars back to compensate for the change in the
2548                  format specifier.  */
2549               while (nnull_chars < nargs - i)
2550                 {
2551                   if (*eos == '\0')
2552                     nnull_chars++;
2553
2554                   *++sos = *++eos;
2555                 }
2556
2557               /* Conversion between different DFP types.  */
2558               if (TYPE_CODE (param_type) == TYPE_CODE_DECFLOAT)
2559                 decimal_convert (param_ptr, param_len, byte_order,
2560                                  dec, dfp_len, byte_order);
2561               else
2562                 /* If this is a non-trivial conversion, just output 0.
2563                    A correct converted value can be displayed by explicitly
2564                    casting to a DFP type.  */
2565                 decimal_from_string (dec, dfp_len, byte_order, "0");
2566
2567               dfp_value = value_from_decfloat (dfp_type, dec);
2568
2569               dfp_ptr = (gdb_byte *) value_contents (dfp_value);
2570
2571               decimal_to_string (dfp_ptr, dfp_len, byte_order, decstr);
2572
2573               /* Print the DFP value.  */
2574               printf_filtered (current_substring, decstr);
2575
2576               break;
2577 #endif
2578             }
2579
2580           case ptr_arg:
2581             {
2582               /* We avoid the host's %p because pointers are too
2583                  likely to be the wrong size.  The only interesting
2584                  modifier for %p is a width; extract that, and then
2585                  handle %p as glibc would: %#x or a literal "(nil)".  */
2586
2587               char *p, *fmt, *fmt_p;
2588 #if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG)
2589               long long val = value_as_long (val_args[i]);
2590 #else
2591               long val = value_as_long (val_args[i]);
2592 #endif
2593
2594               fmt = alloca (strlen (current_substring) + 5);
2595
2596               /* Copy up to the leading %.  */
2597               p = current_substring;
2598               fmt_p = fmt;
2599               while (*p)
2600                 {
2601                   int is_percent = (*p == '%');
2602                   *fmt_p++ = *p++;
2603                   if (is_percent)
2604                     {
2605                       if (*p == '%')
2606                         *fmt_p++ = *p++;
2607                       else
2608                         break;
2609                     }
2610                 }
2611
2612               if (val != 0)
2613                 *fmt_p++ = '#';
2614
2615               /* Copy any width.  */
2616               while (*p >= '0' && *p < '9')
2617                 *fmt_p++ = *p++;
2618
2619               gdb_assert (*p == 'p' && *(p + 1) == '\0');
2620               if (val != 0)
2621                 {
2622 #if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG)
2623                   *fmt_p++ = 'l';
2624 #endif
2625                   *fmt_p++ = 'l';
2626                   *fmt_p++ = 'x';
2627                   *fmt_p++ = '\0';
2628                   printf_filtered (fmt, val);
2629                 }
2630               else
2631                 {
2632                   *fmt_p++ = 's';
2633                   *fmt_p++ = '\0';
2634                   printf_filtered (fmt, "(nil)");
2635                 }
2636
2637               break;
2638             }
2639           default:
2640             internal_error (__FILE__, __LINE__,
2641                             _("failed internal consistency check"));
2642           }
2643         /* Skip to the next substring.  */
2644         current_substring += strlen (current_substring) + 1;
2645       }
2646     /* Print the portion of the format string after the last argument.
2647        Note that this will not include any ordinary %-specs, but it
2648        might include "%%".  That is why we use printf_filtered and not
2649        puts_filtered here.  Also, we pass a dummy argument because
2650        some platforms have modified GCC to include -Wformat-security
2651        by default, which will warn here if there is no argument.  */
2652     printf_filtered (last_arg, 0);
2653   }
2654   do_cleanups (old_cleanups);
2655 }
2656
2657 void
2658 _initialize_printcmd (void)
2659 {
2660   struct cmd_list_element *c;
2661
2662   current_display_number = -1;
2663
2664   observer_attach_solib_unloaded (clear_dangling_display_expressions);
2665
2666   add_info ("address", address_info,
2667             _("Describe where symbol SYM is stored."));
2668
2669   add_info ("symbol", sym_info, _("\
2670 Describe what symbol is at location ADDR.\n\
2671 Only for symbols with fixed locations (global or static scope)."));
2672
2673   add_com ("x", class_vars, x_command, _("\
2674 Examine memory: x/FMT ADDRESS.\n\
2675 ADDRESS is an expression for the memory address to examine.\n\
2676 FMT is a repeat count followed by a format letter and a size letter.\n\
2677 Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),\n\
2678   t(binary), f(float), a(address), i(instruction), c(char) and s(string).\n\
2679 Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).\n\
2680 The specified number of objects of the specified size are printed\n\
2681 according to the format.\n\n\
2682 Defaults for format and size letters are those previously used.\n\
2683 Default count is 1.  Default address is following last thing printed\n\
2684 with this command or \"print\"."));
2685
2686 #if 0
2687   add_com ("whereis", class_vars, whereis_command,
2688            _("Print line number and file of definition of variable."));
2689 #endif
2690
2691   add_info ("display", display_info, _("\
2692 Expressions to display when program stops, with code numbers."));
2693
2694   add_cmd ("undisplay", class_vars, undisplay_command, _("\
2695 Cancel some expressions to be displayed when program stops.\n\
2696 Arguments are the code numbers of the expressions to stop displaying.\n\
2697 No argument means cancel all automatic-display expressions.\n\
2698 \"delete display\" has the same effect as this command.\n\
2699 Do \"info display\" to see current list of code numbers."),
2700            &cmdlist);
2701
2702   add_com ("display", class_vars, display_command, _("\
2703 Print value of expression EXP each time the program stops.\n\
2704 /FMT may be used before EXP as in the \"print\" command.\n\
2705 /FMT \"i\" or \"s\" or including a size-letter is allowed,\n\
2706 as in the \"x\" command, and then EXP is used to get the address to examine\n\
2707 and examining is done as in the \"x\" command.\n\n\
2708 With no argument, display all currently requested auto-display expressions.\n\
2709 Use \"undisplay\" to cancel display requests previously made."));
2710
2711   add_cmd ("display", class_vars, enable_display, _("\
2712 Enable some expressions to be displayed when program stops.\n\
2713 Arguments are the code numbers of the expressions to resume displaying.\n\
2714 No argument means enable all automatic-display expressions.\n\
2715 Do \"info display\" to see current list of code numbers."), &enablelist);
2716
2717   add_cmd ("display", class_vars, disable_display_command, _("\
2718 Disable some expressions to be displayed when program stops.\n\
2719 Arguments are the code numbers of the expressions to stop displaying.\n\
2720 No argument means disable all automatic-display expressions.\n\
2721 Do \"info display\" to see current list of code numbers."), &disablelist);
2722
2723   add_cmd ("display", class_vars, undisplay_command, _("\
2724 Cancel some expressions to be displayed when program stops.\n\
2725 Arguments are the code numbers of the expressions to stop displaying.\n\
2726 No argument means cancel all automatic-display expressions.\n\
2727 Do \"info display\" to see current list of code numbers."), &deletelist);
2728
2729   add_com ("printf", class_vars, printf_command, _("\
2730 printf \"printf format string\", arg1, arg2, arg3, ..., argn\n\
2731 This is useful for formatted output in user-defined commands."));
2732
2733   add_com ("output", class_vars, output_command, _("\
2734 Like \"print\" but don't put in value history and don't print newline.\n\
2735 This is useful in user-defined commands."));
2736
2737   add_prefix_cmd ("set", class_vars, set_command, _("\
2738 Evaluate expression EXP and assign result to variable VAR, using assignment\n\
2739 syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n\
2740 example).  VAR may be a debugger \"convenience\" variable (names starting\n\
2741 with $), a register (a few standard names starting with $), or an actual\n\
2742 variable in the program being debugged.  EXP is any valid expression.\n\
2743 Use \"set variable\" for variables with names identical to set subcommands.\n\
2744 \n\
2745 With a subcommand, this command modifies parts of the gdb environment.\n\
2746 You can see these environment settings with the \"show\" command."),
2747                   &setlist, "set ", 1, &cmdlist);
2748   if (dbx_commands)
2749     add_com ("assign", class_vars, set_command, _("\
2750 Evaluate expression EXP and assign result to variable VAR, using assignment\n\
2751 syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n\
2752 example).  VAR may be a debugger \"convenience\" variable (names starting\n\
2753 with $), a register (a few standard names starting with $), or an actual\n\
2754 variable in the program being debugged.  EXP is any valid expression.\n\
2755 Use \"set variable\" for variables with names identical to set subcommands.\n\
2756 \nWith a subcommand, this command modifies parts of the gdb environment.\n\
2757 You can see these environment settings with the \"show\" command."));
2758
2759   /* "call" is the same as "set", but handy for dbx users to call fns. */
2760   c = add_com ("call", class_vars, call_command, _("\
2761 Call a function in the program.\n\
2762 The argument is the function name and arguments, in the notation of the\n\
2763 current working language.  The result is printed and saved in the value\n\
2764 history, if it is not void."));
2765   set_cmd_completer (c, expression_completer);
2766
2767   add_cmd ("variable", class_vars, set_command, _("\
2768 Evaluate expression EXP and assign result to variable VAR, using assignment\n\
2769 syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n\
2770 example).  VAR may be a debugger \"convenience\" variable (names starting\n\
2771 with $), a register (a few standard names starting with $), or an actual\n\
2772 variable in the program being debugged.  EXP is any valid expression.\n\
2773 This may usually be abbreviated to simply \"set\"."),
2774            &setlist);
2775
2776   c = add_com ("print", class_vars, print_command, _("\
2777 Print value of expression EXP.\n\
2778 Variables accessible are those of the lexical environment of the selected\n\
2779 stack frame, plus all those whose scope is global or an entire file.\n\
2780 \n\
2781 $NUM gets previous value number NUM.  $ and $$ are the last two values.\n\
2782 $$NUM refers to NUM'th value back from the last one.\n\
2783 Names starting with $ refer to registers (with the values they would have\n\
2784 if the program were to return to the stack frame now selected, restoring\n\
2785 all registers saved by frames farther in) or else to debugger\n\
2786 \"convenience\" variables (any such name not a known register).\n\
2787 Use assignment expressions to give values to convenience variables.\n\
2788 \n\
2789 {TYPE}ADREXP refers to a datum of data type TYPE, located at address ADREXP.\n\
2790 @ is a binary operator for treating consecutive data objects\n\
2791 anywhere in memory as an array.  FOO@NUM gives an array whose first\n\
2792 element is FOO, whose second element is stored in the space following\n\
2793 where FOO is stored, etc.  FOO must be an expression whose value\n\
2794 resides in memory.\n\
2795 \n\
2796 EXP may be preceded with /FMT, where FMT is a format letter\n\
2797 but no count or size letter (see \"x\" command)."));
2798   set_cmd_completer (c, expression_completer);
2799   add_com_alias ("p", "print", class_vars, 1);
2800
2801   c = add_com ("inspect", class_vars, inspect_command, _("\
2802 Same as \"print\" command, except that if you are running in the epoch\n\
2803 environment, the value is printed in its own window."));
2804   set_cmd_completer (c, expression_completer);
2805
2806   add_setshow_uinteger_cmd ("max-symbolic-offset", no_class,
2807                             &max_symbolic_offset, _("\
2808 Set the largest offset that will be printed in <symbol+1234> form."), _("\
2809 Show the largest offset that will be printed in <symbol+1234> form."), NULL,
2810                             NULL,
2811                             show_max_symbolic_offset,
2812                             &setprintlist, &showprintlist);
2813   add_setshow_boolean_cmd ("symbol-filename", no_class,
2814                            &print_symbol_filename, _("\
2815 Set printing of source filename and line number with <symbol>."), _("\
2816 Show printing of source filename and line number with <symbol>."), NULL,
2817                            NULL,
2818                            show_print_symbol_filename,
2819                            &setprintlist, &showprintlist);
2820 }