0528e2b042695cff0ff3e6810a17c5eb6f5557be
[external/binutils.git] / gdb / printcmd.c
1 /* Print values for GNU debugger GDB.
2    Copyright 1986-1991, 1993-1995, 1998, 2000 Free Software Foundation, Inc.
3
4    This file is part of GDB.
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 59 Temple Place - Suite 330,
19    Boston, MA 02111-1307, USA.  */
20
21 #include "defs.h"
22 #include "gdb_string.h"
23 #include "frame.h"
24 #include "symtab.h"
25 #include "gdbtypes.h"
26 #include "value.h"
27 #include "language.h"
28 #include "expression.h"
29 #include "gdbcore.h"
30 #include "gdbcmd.h"
31 #include "target.h"
32 #include "breakpoint.h"
33 #include "demangle.h"
34 #include "valprint.h"
35 #include "annotate.h"
36 #include "symfile.h"            /* for overlay functions */
37 #include "objfiles.h"           /* ditto */
38 #ifdef UI_OUT
39 #include "ui-out.h"
40 #endif
41
42 extern int asm_demangle;        /* Whether to demangle syms in asm printouts */
43 extern int addressprint;        /* Whether to print hex addresses in HLL " */
44
45 struct format_data
46   {
47     int count;
48     char format;
49     char size;
50   };
51
52 /* Last specified output format.  */
53
54 static char last_format = 'x';
55
56 /* Last specified examination size.  'b', 'h', 'w' or `q'.  */
57
58 static char last_size = 'w';
59
60 /* Default address to examine next.  */
61
62 static CORE_ADDR next_address;
63
64 /* Default section to examine next. */
65
66 static asection *next_section;
67
68 /* Last address examined.  */
69
70 static CORE_ADDR last_examine_address;
71
72 /* Contents of last address examined.
73    This is not valid past the end of the `x' command!  */
74
75 static value_ptr last_examine_value;
76
77 /* Largest offset between a symbolic value and an address, that will be
78    printed as `0x1234 <symbol+offset>'.  */
79
80 static unsigned int max_symbolic_offset = UINT_MAX;
81
82 /* Append the source filename and linenumber of the symbol when
83    printing a symbolic value as `<symbol at filename:linenum>' if set.  */
84 static int print_symbol_filename = 0;
85
86 /* Number of auto-display expression currently being displayed.
87    So that we can disable it if we get an error or a signal within it.
88    -1 when not doing one.  */
89
90 int current_display_number;
91
92 /* Flag to low-level print routines that this value is being printed
93    in an epoch window.  We'd like to pass this as a parameter, but
94    every routine would need to take it.  Perhaps we can encapsulate
95    this in the I/O stream once we have GNU stdio. */
96
97 int inspect_it = 0;
98
99 struct display
100   {
101     /* Chain link to next auto-display item.  */
102     struct display *next;
103     /* Expression to be evaluated and displayed.  */
104     struct expression *exp;
105     /* Item number of this auto-display item.  */
106     int number;
107     /* Display format specified.  */
108     struct format_data format;
109     /* Innermost block required by this expression when evaluated */
110     struct block *block;
111     /* Status of this display (enabled or disabled) */
112     enum enable status;
113   };
114
115 /* Chain of expressions whose values should be displayed
116    automatically each time the program stops.  */
117
118 static struct display *display_chain;
119
120 static int display_number;
121
122 /* Prototypes for exported functions. */
123
124 void output_command PARAMS ((char *, int));
125
126 void _initialize_printcmd PARAMS ((void));
127
128 /* Prototypes for local functions. */
129
130 static void delete_display PARAMS ((int));
131
132 static void enable_display PARAMS ((char *, int));
133
134 static void disable_display_command PARAMS ((char *, int));
135
136 static void disassemble_command PARAMS ((char *, int));
137
138 static void printf_command PARAMS ((char *, int));
139
140 static void print_frame_nameless_args (struct frame_info *, long,
141                                        int, int, struct ui_file *);
142
143 static void display_info PARAMS ((char *, int));
144
145 static void do_one_display PARAMS ((struct display *));
146
147 static void undisplay_command PARAMS ((char *, int));
148
149 static void free_display PARAMS ((struct display *));
150
151 static void display_command PARAMS ((char *, int));
152
153 void x_command PARAMS ((char *, int));
154
155 static void address_info PARAMS ((char *, int));
156
157 static void set_command PARAMS ((char *, int));
158
159 static void call_command PARAMS ((char *, int));
160
161 static void inspect_command PARAMS ((char *, int));
162
163 static void print_command PARAMS ((char *, int));
164
165 static void print_command_1 PARAMS ((char *, int, int));
166
167 static void validate_format PARAMS ((struct format_data, char *));
168
169 static void do_examine PARAMS ((struct format_data, CORE_ADDR addr, asection * section));
170
171 static void print_formatted (value_ptr, int, int, struct ui_file *);
172
173 static struct format_data decode_format PARAMS ((char **, int, int));
174
175 static int print_insn (CORE_ADDR, struct ui_file *);
176
177 static void sym_info PARAMS ((char *, int));
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 (string_ptr, oformat, osize)
192      char **string_ptr;
193      int oformat;
194      int osize;
195 {
196   struct format_data val;
197   register char *p = *string_ptr;
198
199   val.format = '?';
200   val.size = '?';
201   val.count = 1;
202
203   if (*p >= '0' && *p <= '9')
204     val.count = atoi (p);
205   while (*p >= '0' && *p <= '9')
206     p++;
207
208   /* Now process size or format letters that follow.  */
209
210   while (1)
211     {
212       if (*p == 'b' || *p == 'h' || *p == 'w' || *p == 'g')
213         val.size = *p++;
214       else if (*p >= 'a' && *p <= 'z')
215         val.format = *p++;
216       else
217         break;
218     }
219
220   while (*p == ' ' || *p == '\t')
221     p++;
222   *string_ptr = p;
223
224   /* Set defaults for format and size if not specified.  */
225   if (val.format == '?')
226     {
227       if (val.size == '?')
228         {
229           /* Neither has been specified.  */
230           val.format = oformat;
231           val.size = osize;
232         }
233       else
234         /* If a size is specified, any format makes a reasonable
235            default except 'i'.  */
236         val.format = oformat == 'i' ? 'x' : oformat;
237     }
238   else if (val.size == '?')
239     switch (val.format)
240       {
241       case 'a':
242       case 's':
243         /* Pick the appropriate size for an address.  */
244         if (TARGET_PTR_BIT == 64)
245           val.size = osize ? 'g' : osize;
246         else if (TARGET_PTR_BIT == 32)
247           val.size = osize ? 'w' : osize;
248         else if (TARGET_PTR_BIT == 16)
249           val.size = osize ? 'h' : osize;
250         else
251           /* Bad value for TARGET_PTR_BIT */
252           abort ();
253         break;
254       case 'f':
255         /* Floating point has to be word or giantword.  */
256         if (osize == 'w' || osize == 'g')
257           val.size = osize;
258         else
259           /* Default it to giantword if the last used size is not
260              appropriate.  */
261           val.size = osize ? 'g' : osize;
262         break;
263       case 'c':
264         /* Characters default to one byte.  */
265         val.size = osize ? 'b' : osize;
266         break;
267       default:
268         /* The default is the size most recently specified.  */
269         val.size = osize;
270       }
271
272   return val;
273 }
274 \f
275 /* Print value VAL on stream according to FORMAT, a letter or 0.
276    Do not end with a newline.
277    0 means print VAL according to its own type.
278    SIZE is the letter for the size of datum being printed.
279    This is used to pad hex numbers so they line up.  */
280
281 static void
282 print_formatted (val, format, size, stream)
283      register value_ptr val;
284      register int format;
285      int size;
286      struct ui_file *stream;
287 {
288   struct type *type = check_typedef (VALUE_TYPE (val));
289   int len = TYPE_LENGTH (type);
290
291   if (VALUE_LVAL (val) == lval_memory)
292     {
293       next_address = VALUE_ADDRESS (val) + len;
294       next_section = VALUE_BFD_SECTION (val);
295     }
296
297   switch (format)
298     {
299     case 's':
300       /* FIXME: Need to handle wchar_t's here... */
301       next_address = VALUE_ADDRESS (val)
302         + val_print_string (VALUE_ADDRESS (val), -1, 1, stream);
303       next_section = VALUE_BFD_SECTION (val);
304       break;
305
306     case 'i':
307       /* The old comment says
308          "Force output out, print_insn not using _filtered".
309          I'm not completely sure what that means, I suspect most print_insn
310          now do use _filtered, so I guess it's obsolete.
311          --Yes, it does filter now, and so this is obsolete.  -JB  */
312
313       /* We often wrap here if there are long symbolic names.  */
314       wrap_here ("    ");
315       next_address = VALUE_ADDRESS (val)
316         + print_insn (VALUE_ADDRESS (val), stream);
317       next_section = VALUE_BFD_SECTION (val);
318       break;
319
320     default:
321       if (format == 0
322           || TYPE_CODE (type) == TYPE_CODE_ARRAY
323           || TYPE_CODE (type) == TYPE_CODE_STRING
324           || TYPE_CODE (type) == TYPE_CODE_STRUCT
325           || TYPE_CODE (type) == TYPE_CODE_UNION)
326         /* If format is 0, use the 'natural' format for
327          * that type of value.  If the type is non-scalar,
328          * we have to use language rules to print it as
329          * a series of scalars.
330          */
331         value_print (val, stream, format, Val_pretty_default);
332       else
333         /* User specified format, so don't look to the
334          * the type to tell us what to do.
335          */
336         print_scalar_formatted (VALUE_CONTENTS (val), type,
337                                 format, size, stream);
338     }
339 }
340
341 /* Print a scalar of data of type TYPE, pointed to in GDB by VALADDR,
342    according to letters FORMAT and SIZE on STREAM.
343    FORMAT may not be zero.  Formats s and i are not supported at this level.
344
345    This is how the elements of an array or structure are printed
346    with a format.  */
347
348 void
349 print_scalar_formatted (valaddr, type, format, size, stream)
350      char *valaddr;
351      struct type *type;
352      int format;
353      int size;
354      struct ui_file *stream;
355 {
356   LONGEST val_long;
357   unsigned int len = TYPE_LENGTH (type);
358
359   if (len > sizeof (LONGEST)
360       && (format == 't'
361           || format == 'c'
362           || format == 'o'
363           || format == 'u'
364           || format == 'd'
365           || format == 'x'))
366     {
367       if (!TYPE_UNSIGNED (type)
368           || !extract_long_unsigned_integer (valaddr, len, &val_long))
369         {
370           /* We can't print it normally, but we can print it in hex.
371              Printing it in the wrong radix is more useful than saying
372              "use /x, you dummy".  */
373           /* FIXME:  we could also do octal or binary if that was the
374              desired format.  */
375           /* FIXME:  we should be using the size field to give us a
376              minimum field width to print.  */
377
378           if (format == 'o')
379             print_octal_chars (stream, valaddr, len);
380           else if (format == 'd')
381             print_decimal_chars (stream, valaddr, len);
382           else if (format == 't')
383             print_binary_chars (stream, valaddr, len);
384           else
385             /* replace with call to print_hex_chars? Looks
386                like val_print_type_code_int is redoing
387                work.  - edie */
388
389             val_print_type_code_int (type, valaddr, stream);
390
391           return;
392         }
393
394       /* If we get here, extract_long_unsigned_integer set val_long.  */
395     }
396   else if (format != 'f')
397     val_long = unpack_long (type, valaddr);
398
399   /* If we are printing it as unsigned, truncate it in case it is actually
400      a negative signed value (e.g. "print/u (short)-1" should print 65535
401      (if shorts are 16 bits) instead of 4294967295).  */
402   if (format != 'd')
403     {
404       if (len < sizeof (LONGEST))
405         val_long &= ((LONGEST) 1 << HOST_CHAR_BIT * len) - 1;
406     }
407
408   switch (format)
409     {
410     case 'x':
411       if (!size)
412         {
413           /* no size specified, like in print.  Print varying # of digits. */
414           print_longest (stream, 'x', 1, val_long);
415         }
416       else
417         switch (size)
418           {
419           case 'b':
420           case 'h':
421           case 'w':
422           case 'g':
423             print_longest (stream, size, 1, val_long);
424             break;
425           default:
426             error ("Undefined output size \"%c\".", size);
427           }
428       break;
429
430     case 'd':
431       print_longest (stream, 'd', 1, val_long);
432       break;
433
434     case 'u':
435       print_longest (stream, 'u', 0, val_long);
436       break;
437
438     case 'o':
439       if (val_long)
440         print_longest (stream, 'o', 1, val_long);
441       else
442         fprintf_filtered (stream, "0");
443       break;
444
445     case 'a':
446       print_address (unpack_pointer (type, valaddr), stream);
447       break;
448
449     case 'c':
450       value_print (value_from_longest (builtin_type_true_char, val_long),
451                    stream, 0, Val_pretty_default);
452       break;
453
454     case 'f':
455       if (len == sizeof (float))
456           type = builtin_type_float;
457       else if (len == sizeof (double))
458           type = builtin_type_double;
459       print_floating (valaddr, type, stream);
460       break;
461
462     case 0:
463       abort ();
464
465     case 't':
466       /* Binary; 't' stands for "two".  */
467       {
468         char bits[8 * (sizeof val_long) + 1];
469         char buf[8 * (sizeof val_long) + 32];
470         char *cp = bits;
471         int width;
472
473         if (!size)
474           width = 8 * (sizeof val_long);
475         else
476           switch (size)
477             {
478             case 'b':
479               width = 8;
480               break;
481             case 'h':
482               width = 16;
483               break;
484             case 'w':
485               width = 32;
486               break;
487             case 'g':
488               width = 64;
489               break;
490             default:
491               error ("Undefined output size \"%c\".", size);
492             }
493
494         bits[width] = '\0';
495         while (width-- > 0)
496           {
497             bits[width] = (val_long & 1) ? '1' : '0';
498             val_long >>= 1;
499           }
500         if (!size)
501           {
502             while (*cp && *cp == '0')
503               cp++;
504             if (*cp == '\0')
505               cp--;
506           }
507         strcpy (buf, local_binary_format_prefix ());
508         strcat (buf, cp);
509         strcat (buf, local_binary_format_suffix ());
510         fprintf_filtered (stream, buf);
511       }
512       break;
513
514     default:
515       error ("Undefined output format \"%c\".", format);
516     }
517 }
518
519 /* Specify default address for `x' command.
520    `info lines' uses this.  */
521
522 void
523 set_next_address (addr)
524      CORE_ADDR addr;
525 {
526   next_address = addr;
527
528   /* Make address available to the user as $_.  */
529   set_internalvar (lookup_internalvar ("_"),
530                 value_from_longest (lookup_pointer_type (builtin_type_void),
531                                     (LONGEST) addr));
532 }
533
534 /* Optionally print address ADDR symbolically as <SYMBOL+OFFSET> on STREAM,
535    after LEADIN.  Print nothing if no symbolic name is found nearby.
536    Optionally also print source file and line number, if available.
537    DO_DEMANGLE controls whether to print a symbol in its native "raw" form,
538    or to interpret it as a possible C++ name and convert it back to source
539    form.  However note that DO_DEMANGLE can be overridden by the specific
540    settings of the demangle and asm_demangle variables.  */
541
542 void
543 print_address_symbolic (addr, stream, do_demangle, leadin)
544      CORE_ADDR addr;
545      struct ui_file *stream;
546      int do_demangle;
547      char *leadin;
548 {
549   struct minimal_symbol *msymbol;
550   struct symbol *symbol;
551   struct symtab *symtab = 0;
552   CORE_ADDR name_location = 0;
553   char *name = "";
554   asection *section = 0;
555   int unmapped = 0;
556
557   /* Determine if the address is in an overlay, and whether it is mapped. */
558   if (overlay_debugging)
559     {
560       section = find_pc_overlay (addr);
561       if (pc_in_unmapped_range (addr, section))
562         {
563           unmapped = 1;
564           addr = overlay_mapped_address (addr, section);
565         }
566     }
567
568   /* On some targets, add in extra "flag" bits to PC for
569      disassembly.  This should ensure that "rounding errors" in
570      symbol addresses that are masked for disassembly favour the
571      the correct symbol. */
572
573 #ifdef GDB_TARGET_UNMASK_DISAS_PC
574   addr = GDB_TARGET_UNMASK_DISAS_PC (addr);
575 #endif
576
577   /* First try to find the address in the symbol table, then
578      in the minsyms.  Take the closest one.  */
579
580   /* This is defective in the sense that it only finds text symbols.  So
581      really this is kind of pointless--we should make sure that the
582      minimal symbols have everything we need (by changing that we could
583      save some memory, but for many debug format--ELF/DWARF or
584      anything/stabs--it would be inconvenient to eliminate those minimal
585      symbols anyway).  */
586   msymbol = lookup_minimal_symbol_by_pc_section (addr, section);
587   symbol = find_pc_sect_function (addr, section);
588
589   if (symbol)
590     {
591       name_location = BLOCK_START (SYMBOL_BLOCK_VALUE (symbol));
592       if (do_demangle)
593         name = SYMBOL_SOURCE_NAME (symbol);
594       else
595         name = SYMBOL_LINKAGE_NAME (symbol);
596     }
597
598   if (msymbol != NULL)
599     {
600       if (SYMBOL_VALUE_ADDRESS (msymbol) > name_location || symbol == NULL)
601         {
602           /* The msymbol is closer to the address than the symbol;
603              use the msymbol instead.  */
604           symbol = 0;
605           symtab = 0;
606           name_location = SYMBOL_VALUE_ADDRESS (msymbol);
607           if (do_demangle)
608             name = SYMBOL_SOURCE_NAME (msymbol);
609           else
610             name = SYMBOL_LINKAGE_NAME (msymbol);
611         }
612     }
613   if (symbol == NULL && msymbol == NULL)
614     return;
615
616   /* On some targets, mask out extra "flag" bits from PC for handsome
617      disassembly. */
618
619 #ifdef GDB_TARGET_MASK_DISAS_PC
620   name_location = GDB_TARGET_MASK_DISAS_PC (name_location);
621   addr = GDB_TARGET_MASK_DISAS_PC (addr);
622 #endif
623
624   /* If the nearest symbol is too far away, don't print anything symbolic.  */
625
626   /* For when CORE_ADDR is larger than unsigned int, we do math in
627      CORE_ADDR.  But when we detect unsigned wraparound in the
628      CORE_ADDR math, we ignore this test and print the offset,
629      because addr+max_symbolic_offset has wrapped through the end
630      of the address space back to the beginning, giving bogus comparison.  */
631   if (addr > name_location + max_symbolic_offset
632       && name_location + max_symbolic_offset > name_location)
633     return;
634
635   fputs_filtered (leadin, stream);
636   if (unmapped)
637     fputs_filtered ("<*", stream);
638   else
639     fputs_filtered ("<", stream);
640   fputs_filtered (name, stream);
641   if (addr != name_location)
642     fprintf_filtered (stream, "+%u", (unsigned int) (addr - name_location));
643
644   /* Append source filename and line number if desired.  Give specific
645      line # of this addr, if we have it; else line # of the nearest symbol.  */
646   if (print_symbol_filename)
647     {
648       struct symtab_and_line sal;
649
650       sal = find_pc_sect_line (addr, section, 0);
651
652       if (sal.symtab)
653         fprintf_filtered (stream, " at %s:%d", sal.symtab->filename, sal.line);
654       else if (symtab && symbol && symbol->line)
655         fprintf_filtered (stream, " at %s:%d", symtab->filename, symbol->line);
656       else if (symtab)
657         fprintf_filtered (stream, " in %s", symtab->filename);
658     }
659   if (unmapped)
660     fputs_filtered ("*>", stream);
661   else
662     fputs_filtered (">", stream);
663 }
664
665
666 /* Print address ADDR on STREAM.  USE_LOCAL means the same thing as for
667    print_longest.  */
668 void
669 print_address_numeric (addr, use_local, stream)
670      CORE_ADDR addr;
671      int use_local;
672      struct ui_file *stream;
673 {
674   /* This assumes a CORE_ADDR can fit in a LONGEST.  Probably a safe
675      assumption.  */
676   print_longest (stream, 'x', use_local, (ULONGEST) addr);
677 }
678
679 /* Print address ADDR symbolically on STREAM.
680    First print it as a number.  Then perhaps print
681    <SYMBOL + OFFSET> after the number.  */
682
683 void
684 print_address (addr, stream)
685      CORE_ADDR addr;
686      struct ui_file *stream;
687 {
688   print_address_numeric (addr, 1, stream);
689   print_address_symbolic (addr, stream, asm_demangle, " ");
690 }
691
692 /* Print address ADDR symbolically on STREAM.  Parameter DEMANGLE
693    controls whether to print the symbolic name "raw" or demangled.
694    Global setting "addressprint" controls whether to print hex address
695    or not.  */
696
697 void
698 print_address_demangle (addr, stream, do_demangle)
699      CORE_ADDR addr;
700      struct ui_file *stream;
701      int do_demangle;
702 {
703   if (addr == 0)
704     {
705       fprintf_filtered (stream, "0");
706     }
707   else if (addressprint)
708     {
709       print_address_numeric (addr, 1, stream);
710       print_address_symbolic (addr, stream, do_demangle, " ");
711     }
712   else
713     {
714       print_address_symbolic (addr, stream, do_demangle, "");
715     }
716 }
717 \f
718
719 /* These are the types that $__ will get after an examine command of one
720    of these sizes.  */
721
722 static struct type *examine_i_type;
723
724 static struct type *examine_b_type;
725 static struct type *examine_h_type;
726 static struct type *examine_w_type;
727 static struct type *examine_g_type;
728
729 /* Examine data at address ADDR in format FMT.
730    Fetch it from memory and print on gdb_stdout.  */
731
732 static void
733 do_examine (fmt, addr, sect)
734      struct format_data fmt;
735      CORE_ADDR addr;
736      asection *sect;
737 {
738   register char format = 0;
739   register char size;
740   register int count = 1;
741   struct type *val_type = NULL;
742   register int i;
743   register int maxelts;
744
745   format = fmt.format;
746   size = fmt.size;
747   count = fmt.count;
748   next_address = addr;
749   next_section = sect;
750
751   /* String or instruction format implies fetch single bytes
752      regardless of the specified size.  */
753   if (format == 's' || format == 'i')
754     size = 'b';
755
756   if (format == 'i')
757     val_type = examine_i_type;
758   else if (size == 'b')
759     val_type = examine_b_type;
760   else if (size == 'h')
761     val_type = examine_h_type;
762   else if (size == 'w')
763     val_type = examine_w_type;
764   else if (size == 'g')
765     val_type = examine_g_type;
766
767   maxelts = 8;
768   if (size == 'w')
769     maxelts = 4;
770   if (size == 'g')
771     maxelts = 2;
772   if (format == 's' || format == 'i')
773     maxelts = 1;
774
775   /* Print as many objects as specified in COUNT, at most maxelts per line,
776      with the address of the next one at the start of each line.  */
777
778   while (count > 0)
779     {
780       QUIT;
781       print_address (next_address, gdb_stdout);
782       printf_filtered (":");
783       for (i = maxelts;
784            i > 0 && count > 0;
785            i--, count--)
786         {
787           printf_filtered ("\t");
788           /* Note that print_formatted sets next_address for the next
789              object.  */
790           last_examine_address = next_address;
791
792           if (last_examine_value)
793             value_free (last_examine_value);
794
795           /* The value to be displayed is not fetched greedily.
796              Instead, to avoid the posibility of a fetched value not
797              being used, its retreval is delayed until the print code
798              uses it.  When examining an instruction stream, the
799              disassembler will perform its own memory fetch using just
800              the address stored in LAST_EXAMINE_VALUE.  FIXME: Should
801              the disassembler be modified so that LAST_EXAMINE_VALUE
802              is left with the byte sequence from the last complete
803              instruction fetched from memory? */
804           last_examine_value = value_at_lazy (val_type, next_address, sect);
805
806           if (last_examine_value)
807             release_value (last_examine_value);
808
809           print_formatted (last_examine_value, format, size, gdb_stdout);
810         }
811       printf_filtered ("\n");
812       gdb_flush (gdb_stdout);
813     }
814 }
815 \f
816 static void
817 validate_format (fmt, cmdname)
818      struct format_data fmt;
819      char *cmdname;
820 {
821   if (fmt.size != 0)
822     error ("Size letters are meaningless in \"%s\" command.", cmdname);
823   if (fmt.count != 1)
824     error ("Item count other than 1 is meaningless in \"%s\" command.",
825            cmdname);
826   if (fmt.format == 'i' || fmt.format == 's')
827     error ("Format letter \"%c\" is meaningless in \"%s\" command.",
828            fmt.format, cmdname);
829 }
830
831 /*  Evaluate string EXP as an expression in the current language and
832    print the resulting value.  EXP may contain a format specifier as the
833    first argument ("/x myvar" for example, to print myvar in hex).
834  */
835
836 static void
837 print_command_1 (exp, inspect, voidprint)
838      char *exp;
839      int inspect;
840      int voidprint;
841 {
842   struct expression *expr;
843   register struct cleanup *old_chain = 0;
844   register char format = 0;
845   register value_ptr val;
846   struct format_data fmt;
847   int cleanup = 0;
848
849   /* Pass inspect flag to the rest of the print routines in a global (sigh). */
850   inspect_it = inspect;
851
852   if (exp && *exp == '/')
853     {
854       exp++;
855       fmt = decode_format (&exp, last_format, 0);
856       validate_format (fmt, "print");
857       last_format = format = fmt.format;
858     }
859   else
860     {
861       fmt.count = 1;
862       fmt.format = 0;
863       fmt.size = 0;
864     }
865
866   if (exp && *exp)
867     {
868       struct type *type;
869       expr = parse_expression (exp);
870       old_chain = make_cleanup ((make_cleanup_func) free_current_contents,
871                                 &expr);
872       cleanup = 1;
873       val = evaluate_expression (expr);
874
875       /* C++: figure out what type we actually want to print it as.  */
876       type = VALUE_TYPE (val);
877
878       if (objectprint
879           && (TYPE_CODE (type) == TYPE_CODE_PTR
880               || TYPE_CODE (type) == TYPE_CODE_REF)
881           && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT
882               || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_UNION))
883         {
884           value_ptr v;
885
886           v = value_from_vtable_info (val, TYPE_TARGET_TYPE (type));
887           if (v != 0)
888             {
889               val = v;
890               type = VALUE_TYPE (val);
891             }
892         }
893     }
894   else
895     val = access_value_history (0);
896
897   if (voidprint || (val && VALUE_TYPE (val) &&
898                     TYPE_CODE (VALUE_TYPE (val)) != TYPE_CODE_VOID))
899     {
900       int histindex = record_latest_value (val);
901
902       if (histindex >= 0)
903         annotate_value_history_begin (histindex, VALUE_TYPE (val));
904       else
905         annotate_value_begin (VALUE_TYPE (val));
906
907       if (inspect)
908         printf_unfiltered ("\031(gdb-makebuffer \"%s\"  %d '(\"", exp, histindex);
909       else if (histindex >= 0)
910         printf_filtered ("$%d = ", histindex);
911
912       if (histindex >= 0)
913         annotate_value_history_value ();
914
915       print_formatted (val, format, fmt.size, gdb_stdout);
916       printf_filtered ("\n");
917
918       if (histindex >= 0)
919         annotate_value_history_end ();
920       else
921         annotate_value_end ();
922
923       if (inspect)
924         printf_unfiltered ("\") )\030");
925     }
926
927   if (cleanup)
928     do_cleanups (old_chain);
929   inspect_it = 0;               /* Reset print routines to normal */
930 }
931
932 /* ARGSUSED */
933 static void
934 print_command (exp, from_tty)
935      char *exp;
936      int from_tty;
937 {
938   print_command_1 (exp, 0, 1);
939 }
940
941 /* Same as print, except in epoch, it gets its own window */
942 /* ARGSUSED */
943 static void
944 inspect_command (exp, from_tty)
945      char *exp;
946      int from_tty;
947 {
948   extern int epoch_interface;
949
950   print_command_1 (exp, epoch_interface, 1);
951 }
952
953 /* Same as print, except it doesn't print void results. */
954 /* ARGSUSED */
955 static void
956 call_command (exp, from_tty)
957      char *exp;
958      int from_tty;
959 {
960   print_command_1 (exp, 0, 0);
961 }
962
963 /* ARGSUSED */
964 void
965 output_command (exp, from_tty)
966      char *exp;
967      int from_tty;
968 {
969   struct expression *expr;
970   register struct cleanup *old_chain;
971   register char format = 0;
972   register value_ptr val;
973   struct format_data fmt;
974
975   if (exp && *exp == '/')
976     {
977       exp++;
978       fmt = decode_format (&exp, 0, 0);
979       validate_format (fmt, "output");
980       format = fmt.format;
981     }
982
983   expr = parse_expression (exp);
984   old_chain = make_cleanup ((make_cleanup_func) free_current_contents, &expr);
985
986   val = evaluate_expression (expr);
987
988   annotate_value_begin (VALUE_TYPE (val));
989
990   print_formatted (val, format, fmt.size, gdb_stdout);
991
992   annotate_value_end ();
993
994   wrap_here ("");
995   gdb_flush (gdb_stdout);
996
997   do_cleanups (old_chain);
998 }
999
1000 /* ARGSUSED */
1001 static void
1002 set_command (exp, from_tty)
1003      char *exp;
1004      int from_tty;
1005 {
1006   struct expression *expr = parse_expression (exp);
1007   register struct cleanup *old_chain
1008   = make_cleanup ((make_cleanup_func) free_current_contents, &expr);
1009   evaluate_expression (expr);
1010   do_cleanups (old_chain);
1011 }
1012
1013 /* ARGSUSED */
1014 static void
1015 sym_info (arg, from_tty)
1016      char *arg;
1017      int from_tty;
1018 {
1019   struct minimal_symbol *msymbol;
1020   struct objfile *objfile;
1021   struct obj_section *osect;
1022   asection *sect;
1023   CORE_ADDR addr, sect_addr;
1024   int matches = 0;
1025   unsigned int offset;
1026
1027   if (!arg)
1028     error_no_arg ("address");
1029
1030   addr = parse_and_eval_address (arg);
1031   ALL_OBJSECTIONS (objfile, osect)
1032   {
1033     sect = osect->the_bfd_section;
1034     sect_addr = overlay_mapped_address (addr, sect);
1035
1036     if (osect->addr <= sect_addr && sect_addr < osect->endaddr &&
1037         (msymbol = lookup_minimal_symbol_by_pc_section (sect_addr, sect)))
1038       {
1039         matches = 1;
1040         offset = sect_addr - SYMBOL_VALUE_ADDRESS (msymbol);
1041         if (offset)
1042           printf_filtered ("%s + %u in ",
1043                            SYMBOL_SOURCE_NAME (msymbol), offset);
1044         else
1045           printf_filtered ("%s in ",
1046                            SYMBOL_SOURCE_NAME (msymbol));
1047         if (pc_in_unmapped_range (addr, sect))
1048           printf_filtered ("load address range of ");
1049         if (section_is_overlay (sect))
1050           printf_filtered ("%s overlay ",
1051                            section_is_mapped (sect) ? "mapped" : "unmapped");
1052         printf_filtered ("section %s", sect->name);
1053         printf_filtered ("\n");
1054       }
1055   }
1056   if (matches == 0)
1057     printf_filtered ("No symbol matches %s.\n", arg);
1058 }
1059
1060 /* ARGSUSED */
1061 static void
1062 address_info (exp, from_tty)
1063      char *exp;
1064      int from_tty;
1065 {
1066   register struct symbol *sym;
1067   register struct minimal_symbol *msymbol;
1068   register long val;
1069   register long basereg;
1070   asection *section;
1071   CORE_ADDR load_addr;
1072   int is_a_field_of_this;       /* C++: lookup_symbol sets this to nonzero
1073                                    if exp is a field of `this'. */
1074
1075   if (exp == 0)
1076     error ("Argument required.");
1077
1078   sym = lookup_symbol (exp, get_selected_block (), VAR_NAMESPACE,
1079                        &is_a_field_of_this, (struct symtab **) NULL);
1080   if (sym == NULL)
1081     {
1082       if (is_a_field_of_this)
1083         {
1084           printf_filtered ("Symbol \"");
1085           fprintf_symbol_filtered (gdb_stdout, exp,
1086                                    current_language->la_language, DMGL_ANSI);
1087           printf_filtered ("\" is a field of the local class variable `this'\n");
1088           return;
1089         }
1090
1091       msymbol = lookup_minimal_symbol (exp, NULL, NULL);
1092
1093       if (msymbol != NULL)
1094         {
1095           load_addr = SYMBOL_VALUE_ADDRESS (msymbol);
1096
1097           printf_filtered ("Symbol \"");
1098           fprintf_symbol_filtered (gdb_stdout, exp,
1099                                    current_language->la_language, DMGL_ANSI);
1100           printf_filtered ("\" is at ");
1101           print_address_numeric (load_addr, 1, gdb_stdout);
1102           printf_filtered (" in a file compiled without debugging");
1103           section = SYMBOL_BFD_SECTION (msymbol);
1104           if (section_is_overlay (section))
1105             {
1106               load_addr = overlay_unmapped_address (load_addr, section);
1107               printf_filtered (",\n -- loaded at ");
1108               print_address_numeric (load_addr, 1, gdb_stdout);
1109               printf_filtered (" in overlay section %s", section->name);
1110             }
1111           printf_filtered (".\n");
1112         }
1113       else
1114         error ("No symbol \"%s\" in current context.", exp);
1115       return;
1116     }
1117
1118   printf_filtered ("Symbol \"");
1119   fprintf_symbol_filtered (gdb_stdout, SYMBOL_NAME (sym),
1120                            current_language->la_language, DMGL_ANSI);
1121   printf_filtered ("\" is ");
1122   val = SYMBOL_VALUE (sym);
1123   basereg = SYMBOL_BASEREG (sym);
1124   section = SYMBOL_BFD_SECTION (sym);
1125
1126   switch (SYMBOL_CLASS (sym))
1127     {
1128     case LOC_CONST:
1129     case LOC_CONST_BYTES:
1130       printf_filtered ("constant");
1131       break;
1132
1133     case LOC_LABEL:
1134       printf_filtered ("a label at address ");
1135       print_address_numeric (load_addr = SYMBOL_VALUE_ADDRESS (sym),
1136                              1, gdb_stdout);
1137       if (section_is_overlay (section))
1138         {
1139           load_addr = overlay_unmapped_address (load_addr, section);
1140           printf_filtered (",\n -- loaded at ");
1141           print_address_numeric (load_addr, 1, gdb_stdout);
1142           printf_filtered (" in overlay section %s", section->name);
1143         }
1144       break;
1145
1146     case LOC_REGISTER:
1147       printf_filtered ("a variable in register %s", REGISTER_NAME (val));
1148       break;
1149
1150     case LOC_STATIC:
1151       printf_filtered ("static storage at address ");
1152       print_address_numeric (load_addr = SYMBOL_VALUE_ADDRESS (sym),
1153                              1, gdb_stdout);
1154       if (section_is_overlay (section))
1155         {
1156           load_addr = overlay_unmapped_address (load_addr, section);
1157           printf_filtered (",\n -- loaded at ");
1158           print_address_numeric (load_addr, 1, gdb_stdout);
1159           printf_filtered (" in overlay section %s", section->name);
1160         }
1161       break;
1162
1163     case LOC_INDIRECT:
1164       printf_filtered ("external global (indirect addressing), at address *(");
1165       print_address_numeric (load_addr = SYMBOL_VALUE_ADDRESS (sym),
1166                              1, gdb_stdout);
1167       printf_filtered (")");
1168       if (section_is_overlay (section))
1169         {
1170           load_addr = overlay_unmapped_address (load_addr, section);
1171           printf_filtered (",\n -- loaded at ");
1172           print_address_numeric (load_addr, 1, gdb_stdout);
1173           printf_filtered (" in overlay section %s", section->name);
1174         }
1175       break;
1176
1177     case LOC_REGPARM:
1178       printf_filtered ("an argument in register %s", REGISTER_NAME (val));
1179       break;
1180
1181     case LOC_REGPARM_ADDR:
1182       printf_filtered ("address of an argument in register %s", REGISTER_NAME (val));
1183       break;
1184
1185     case LOC_ARG:
1186       printf_filtered ("an argument at offset %ld", val);
1187       break;
1188
1189     case LOC_LOCAL_ARG:
1190       printf_filtered ("an argument at frame offset %ld", val);
1191       break;
1192
1193     case LOC_LOCAL:
1194       printf_filtered ("a local variable at frame offset %ld", val);
1195       break;
1196
1197     case LOC_REF_ARG:
1198       printf_filtered ("a reference argument at offset %ld", val);
1199       break;
1200
1201     case LOC_BASEREG:
1202       printf_filtered ("a variable at offset %ld from register %s",
1203                        val, REGISTER_NAME (basereg));
1204       break;
1205
1206     case LOC_BASEREG_ARG:
1207       printf_filtered ("an argument at offset %ld from register %s",
1208                        val, REGISTER_NAME (basereg));
1209       break;
1210
1211     case LOC_TYPEDEF:
1212       printf_filtered ("a typedef");
1213       break;
1214
1215     case LOC_BLOCK:
1216       printf_filtered ("a function at address ");
1217 #ifdef GDB_TARGET_MASK_DISAS_PC
1218       print_address_numeric
1219         (load_addr = GDB_TARGET_MASK_DISAS_PC (BLOCK_START (SYMBOL_BLOCK_VALUE (sym))),
1220          1, gdb_stdout);
1221 #else
1222       print_address_numeric (load_addr = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)),
1223                              1, gdb_stdout);
1224 #endif
1225       if (section_is_overlay (section))
1226         {
1227           load_addr = overlay_unmapped_address (load_addr, section);
1228           printf_filtered (",\n -- loaded at ");
1229           print_address_numeric (load_addr, 1, gdb_stdout);
1230           printf_filtered (" in overlay section %s", section->name);
1231         }
1232       break;
1233
1234     case LOC_UNRESOLVED:
1235       {
1236         struct minimal_symbol *msym;
1237
1238         msym = lookup_minimal_symbol (SYMBOL_NAME (sym), NULL, NULL);
1239         if (msym == NULL)
1240           printf_filtered ("unresolved");
1241         else
1242           {
1243             section = SYMBOL_BFD_SECTION (msym);
1244             printf_filtered ("static storage at address ");
1245             print_address_numeric (load_addr = SYMBOL_VALUE_ADDRESS (msym),
1246                                    1, gdb_stdout);
1247             if (section_is_overlay (section))
1248               {
1249                 load_addr = overlay_unmapped_address (load_addr, section);
1250                 printf_filtered (",\n -- loaded at ");
1251                 print_address_numeric (load_addr, 1, gdb_stdout);
1252                 printf_filtered (" in overlay section %s", section->name);
1253               }
1254           }
1255       }
1256       break;
1257
1258     case LOC_THREAD_LOCAL_STATIC:
1259       printf_filtered (
1260                         "a thread-local variable at offset %ld from the thread base register %s",
1261                         val, REGISTER_NAME (basereg));
1262       break;
1263
1264     case LOC_OPTIMIZED_OUT:
1265       printf_filtered ("optimized out");
1266       break;
1267
1268     default:
1269       printf_filtered ("of unknown (botched) type");
1270       break;
1271     }
1272   printf_filtered (".\n");
1273 }
1274 \f
1275 void
1276 x_command (exp, from_tty)
1277      char *exp;
1278      int from_tty;
1279 {
1280   struct expression *expr;
1281   struct format_data fmt;
1282   struct cleanup *old_chain;
1283   struct value *val;
1284
1285   fmt.format = last_format;
1286   fmt.size = last_size;
1287   fmt.count = 1;
1288
1289   if (exp && *exp == '/')
1290     {
1291       exp++;
1292       fmt = decode_format (&exp, last_format, last_size);
1293     }
1294
1295   /* If we have an expression, evaluate it and use it as the address.  */
1296
1297   if (exp != 0 && *exp != 0)
1298     {
1299       expr = parse_expression (exp);
1300       /* Cause expression not to be there any more
1301          if this command is repeated with Newline.
1302          But don't clobber a user-defined command's definition.  */
1303       if (from_tty)
1304         *exp = 0;
1305       old_chain = make_cleanup ((make_cleanup_func) free_current_contents,
1306                                 &expr);
1307       val = evaluate_expression (expr);
1308       if (TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_REF)
1309         val = value_ind (val);
1310       /* In rvalue contexts, such as this, functions are coerced into
1311          pointers to functions.  This makes "x/i main" work.  */
1312       if (                      /* last_format == 'i'
1313                                    && */ TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_FUNC
1314            && VALUE_LVAL (val) == lval_memory)
1315         next_address = VALUE_ADDRESS (val);
1316       else
1317         next_address = value_as_pointer (val);
1318       if (VALUE_BFD_SECTION (val))
1319         next_section = VALUE_BFD_SECTION (val);
1320       do_cleanups (old_chain);
1321     }
1322
1323   do_examine (fmt, next_address, next_section);
1324
1325   /* If the examine succeeds, we remember its size and format for next time.  */
1326   last_size = fmt.size;
1327   last_format = fmt.format;
1328
1329   /* Set a couple of internal variables if appropriate. */
1330   if (last_examine_value)
1331     {
1332       /* Make last address examined available to the user as $_.  Use
1333          the correct pointer type.  */
1334       set_internalvar (lookup_internalvar ("_"),
1335                        value_from_longest (
1336                       lookup_pointer_type (VALUE_TYPE (last_examine_value)),
1337                                             (LONGEST) last_examine_address));
1338
1339       /* Make contents of last address examined available to the user as $__. */
1340       /* If the last value has not been fetched from memory then don't
1341          fetch it now - instead mark it by voiding the $__ variable. */
1342       if (VALUE_LAZY (last_examine_value))
1343         set_internalvar (lookup_internalvar ("__"),
1344                          allocate_value (builtin_type_void));
1345       else
1346         set_internalvar (lookup_internalvar ("__"), last_examine_value);
1347     }
1348 }
1349 \f
1350
1351 /* Add an expression to the auto-display chain.
1352    Specify the expression.  */
1353
1354 static void
1355 display_command (exp, from_tty)
1356      char *exp;
1357      int from_tty;
1358 {
1359   struct format_data fmt;
1360   register struct expression *expr;
1361   register struct display *new;
1362   int display_it = 1;
1363
1364 #if defined(TUI)
1365   if (tui_version && *exp == '$')
1366     display_it = ((TuiStatus) tuiDo (
1367                   (TuiOpaqueFuncPtr) tui_vSetLayoutTo, exp) == TUI_FAILURE);
1368 #endif
1369
1370   if (display_it)
1371     {
1372       if (exp == 0)
1373         {
1374           do_displays ();
1375           return;
1376         }
1377
1378       if (*exp == '/')
1379         {
1380           exp++;
1381           fmt = decode_format (&exp, 0, 0);
1382           if (fmt.size && fmt.format == 0)
1383             fmt.format = 'x';
1384           if (fmt.format == 'i' || fmt.format == 's')
1385             fmt.size = 'b';
1386         }
1387       else
1388         {
1389           fmt.format = 0;
1390           fmt.size = 0;
1391           fmt.count = 0;
1392         }
1393
1394       innermost_block = 0;
1395       expr = parse_expression (exp);
1396
1397       new = (struct display *) xmalloc (sizeof (struct display));
1398
1399       new->exp = expr;
1400       new->block = innermost_block;
1401       new->next = display_chain;
1402       new->number = ++display_number;
1403       new->format = fmt;
1404       new->status = enabled;
1405       display_chain = new;
1406
1407       if (from_tty && target_has_execution)
1408         do_one_display (new);
1409
1410       dont_repeat ();
1411     }
1412 }
1413
1414 static void
1415 free_display (d)
1416      struct display *d;
1417 {
1418   free ((PTR) d->exp);
1419   free ((PTR) d);
1420 }
1421
1422 /* Clear out the display_chain.
1423    Done when new symtabs are loaded, since this invalidates
1424    the types stored in many expressions.  */
1425
1426 void
1427 clear_displays ()
1428 {
1429   register struct display *d;
1430
1431   while ((d = display_chain) != NULL)
1432     {
1433       free ((PTR) d->exp);
1434       display_chain = d->next;
1435       free ((PTR) d);
1436     }
1437 }
1438
1439 /* Delete the auto-display number NUM.  */
1440
1441 static void
1442 delete_display (num)
1443      int num;
1444 {
1445   register struct display *d1, *d;
1446
1447   if (!display_chain)
1448     error ("No display number %d.", num);
1449
1450   if (display_chain->number == num)
1451     {
1452       d1 = display_chain;
1453       display_chain = d1->next;
1454       free_display (d1);
1455     }
1456   else
1457     for (d = display_chain;; d = d->next)
1458       {
1459         if (d->next == 0)
1460           error ("No display number %d.", num);
1461         if (d->next->number == num)
1462           {
1463             d1 = d->next;
1464             d->next = d1->next;
1465             free_display (d1);
1466             break;
1467           }
1468       }
1469 }
1470
1471 /* Delete some values from the auto-display chain.
1472    Specify the element numbers.  */
1473
1474 static void
1475 undisplay_command (args, from_tty)
1476      char *args;
1477      int from_tty;
1478 {
1479   register char *p = args;
1480   register char *p1;
1481   register int num;
1482
1483   if (args == 0)
1484     {
1485       if (query ("Delete all auto-display expressions? "))
1486         clear_displays ();
1487       dont_repeat ();
1488       return;
1489     }
1490
1491   while (*p)
1492     {
1493       p1 = p;
1494       while (*p1 >= '0' && *p1 <= '9')
1495         p1++;
1496       if (*p1 && *p1 != ' ' && *p1 != '\t')
1497         error ("Arguments must be display numbers.");
1498
1499       num = atoi (p);
1500
1501       delete_display (num);
1502
1503       p = p1;
1504       while (*p == ' ' || *p == '\t')
1505         p++;
1506     }
1507   dont_repeat ();
1508 }
1509
1510 /* Display a single auto-display.  
1511    Do nothing if the display cannot be printed in the current context,
1512    or if the display is disabled. */
1513
1514 static void
1515 do_one_display (d)
1516      struct display *d;
1517 {
1518   int within_current_scope;
1519
1520   if (d->status == disabled)
1521     return;
1522
1523   if (d->block)
1524     within_current_scope = contained_in (get_selected_block (), d->block);
1525   else
1526     within_current_scope = 1;
1527   if (!within_current_scope)
1528     return;
1529
1530   current_display_number = d->number;
1531
1532   annotate_display_begin ();
1533   printf_filtered ("%d", d->number);
1534   annotate_display_number_end ();
1535   printf_filtered (": ");
1536   if (d->format.size)
1537     {
1538       CORE_ADDR addr;
1539       value_ptr val;
1540
1541       annotate_display_format ();
1542
1543       printf_filtered ("x/");
1544       if (d->format.count != 1)
1545         printf_filtered ("%d", d->format.count);
1546       printf_filtered ("%c", d->format.format);
1547       if (d->format.format != 'i' && d->format.format != 's')
1548         printf_filtered ("%c", d->format.size);
1549       printf_filtered (" ");
1550
1551       annotate_display_expression ();
1552
1553       print_expression (d->exp, gdb_stdout);
1554       annotate_display_expression_end ();
1555
1556       if (d->format.count != 1)
1557         printf_filtered ("\n");
1558       else
1559         printf_filtered ("  ");
1560
1561       val = evaluate_expression (d->exp);
1562       addr = value_as_pointer (val);
1563       if (d->format.format == 'i')
1564         addr = ADDR_BITS_REMOVE (addr);
1565
1566       annotate_display_value ();
1567
1568       do_examine (d->format, addr, VALUE_BFD_SECTION (val));
1569     }
1570   else
1571     {
1572       annotate_display_format ();
1573
1574       if (d->format.format)
1575         printf_filtered ("/%c ", d->format.format);
1576
1577       annotate_display_expression ();
1578
1579       print_expression (d->exp, gdb_stdout);
1580       annotate_display_expression_end ();
1581
1582       printf_filtered (" = ");
1583
1584       annotate_display_expression ();
1585
1586       print_formatted (evaluate_expression (d->exp),
1587                        d->format.format, d->format.size, gdb_stdout);
1588       printf_filtered ("\n");
1589     }
1590
1591   annotate_display_end ();
1592
1593   gdb_flush (gdb_stdout);
1594   current_display_number = -1;
1595 }
1596
1597 /* Display all of the values on the auto-display chain which can be
1598    evaluated in the current scope.  */
1599
1600 void
1601 do_displays ()
1602 {
1603   register struct display *d;
1604
1605   for (d = display_chain; d; d = d->next)
1606     do_one_display (d);
1607 }
1608
1609 /* Delete the auto-display which we were in the process of displaying.
1610    This is done when there is an error or a signal.  */
1611
1612 void
1613 disable_display (num)
1614      int num;
1615 {
1616   register struct display *d;
1617
1618   for (d = display_chain; d; d = d->next)
1619     if (d->number == num)
1620       {
1621         d->status = disabled;
1622         return;
1623       }
1624   printf_unfiltered ("No display number %d.\n", num);
1625 }
1626
1627 void
1628 disable_current_display ()
1629 {
1630   if (current_display_number >= 0)
1631     {
1632       disable_display (current_display_number);
1633       fprintf_unfiltered (gdb_stderr, "Disabling display %d to avoid infinite recursion.\n",
1634                           current_display_number);
1635     }
1636   current_display_number = -1;
1637 }
1638
1639 static void
1640 display_info (ignore, from_tty)
1641      char *ignore;
1642      int from_tty;
1643 {
1644   register struct display *d;
1645
1646   if (!display_chain)
1647     printf_unfiltered ("There are no auto-display expressions now.\n");
1648   else
1649     printf_filtered ("Auto-display expressions now in effect:\n\
1650 Num Enb Expression\n");
1651
1652   for (d = display_chain; d; d = d->next)
1653     {
1654       printf_filtered ("%d:   %c  ", d->number, "ny"[(int) d->status]);
1655       if (d->format.size)
1656         printf_filtered ("/%d%c%c ", d->format.count, d->format.size,
1657                          d->format.format);
1658       else if (d->format.format)
1659         printf_filtered ("/%c ", d->format.format);
1660       print_expression (d->exp, gdb_stdout);
1661       if (d->block && !contained_in (get_selected_block (), d->block))
1662         printf_filtered (" (cannot be evaluated in the current context)");
1663       printf_filtered ("\n");
1664       gdb_flush (gdb_stdout);
1665     }
1666 }
1667
1668 static void
1669 enable_display (args, from_tty)
1670      char *args;
1671      int from_tty;
1672 {
1673   register char *p = args;
1674   register char *p1;
1675   register int num;
1676   register struct display *d;
1677
1678   if (p == 0)
1679     {
1680       for (d = display_chain; d; d = d->next)
1681         d->status = enabled;
1682     }
1683   else
1684     while (*p)
1685       {
1686         p1 = p;
1687         while (*p1 >= '0' && *p1 <= '9')
1688           p1++;
1689         if (*p1 && *p1 != ' ' && *p1 != '\t')
1690           error ("Arguments must be display numbers.");
1691
1692         num = atoi (p);
1693
1694         for (d = display_chain; d; d = d->next)
1695           if (d->number == num)
1696             {
1697               d->status = enabled;
1698               goto win;
1699             }
1700         printf_unfiltered ("No display number %d.\n", num);
1701       win:
1702         p = p1;
1703         while (*p == ' ' || *p == '\t')
1704           p++;
1705       }
1706 }
1707
1708 /* ARGSUSED */
1709 static void
1710 disable_display_command (args, from_tty)
1711      char *args;
1712      int from_tty;
1713 {
1714   register char *p = args;
1715   register char *p1;
1716   register struct display *d;
1717
1718   if (p == 0)
1719     {
1720       for (d = display_chain; d; d = d->next)
1721         d->status = disabled;
1722     }
1723   else
1724     while (*p)
1725       {
1726         p1 = p;
1727         while (*p1 >= '0' && *p1 <= '9')
1728           p1++;
1729         if (*p1 && *p1 != ' ' && *p1 != '\t')
1730           error ("Arguments must be display numbers.");
1731
1732         disable_display (atoi (p));
1733
1734         p = p1;
1735         while (*p == ' ' || *p == '\t')
1736           p++;
1737       }
1738 }
1739 \f
1740
1741 /* Print the value in stack frame FRAME of a variable
1742    specified by a struct symbol.  */
1743
1744 void
1745 print_variable_value (var, frame, stream)
1746      struct symbol *var;
1747      struct frame_info *frame;
1748      struct ui_file *stream;
1749 {
1750   value_ptr val = read_var_value (var, frame);
1751
1752   value_print (val, stream, 0, Val_pretty_default);
1753 }
1754
1755 /* Print the arguments of a stack frame, given the function FUNC
1756    running in that frame (as a symbol), the info on the frame,
1757    and the number of args according to the stack frame (or -1 if unknown).  */
1758
1759 /* References here and elsewhere to "number of args according to the
1760    stack frame" appear in all cases to refer to "number of ints of args
1761    according to the stack frame".  At least for VAX, i386, isi.  */
1762
1763 void
1764 print_frame_args (func, fi, num, stream)
1765      struct symbol *func;
1766      struct frame_info *fi;
1767      int num;
1768      struct ui_file *stream;
1769 {
1770   struct block *b = NULL;
1771   int nsyms = 0;
1772   int first = 1;
1773   register int i;
1774   register struct symbol *sym;
1775   register value_ptr val;
1776   /* Offset of next stack argument beyond the one we have seen that is
1777      at the highest offset.
1778      -1 if we haven't come to a stack argument yet.  */
1779   long highest_offset = -1;
1780   int arg_size;
1781   /* Number of ints of arguments that we have printed so far.  */
1782   int args_printed = 0;
1783 #ifdef UI_OUT
1784   struct cleanup *old_chain;
1785   struct ui_stream *stb;
1786
1787   stb = ui_out_stream_new (uiout);
1788   old_chain = make_cleanup ((make_cleanup_func) ui_out_stream_delete, stb);
1789 #endif /* UI_OUT */
1790
1791   if (func)
1792     {
1793       b = SYMBOL_BLOCK_VALUE (func);
1794       nsyms = BLOCK_NSYMS (b);
1795     }
1796
1797   for (i = 0; i < nsyms; i++)
1798     {
1799       QUIT;
1800       sym = BLOCK_SYM (b, i);
1801
1802       /* Keep track of the highest stack argument offset seen, and
1803          skip over any kinds of symbols we don't care about.  */
1804
1805       switch (SYMBOL_CLASS (sym))
1806         {
1807         case LOC_ARG:
1808         case LOC_REF_ARG:
1809           {
1810             long current_offset = SYMBOL_VALUE (sym);
1811             arg_size = TYPE_LENGTH (SYMBOL_TYPE (sym));
1812
1813             /* Compute address of next argument by adding the size of
1814                this argument and rounding to an int boundary.  */
1815             current_offset
1816               = ((current_offset + arg_size + sizeof (int) - 1)
1817                  & ~(sizeof (int) - 1));
1818
1819             /* If this is the highest offset seen yet, set highest_offset.  */
1820             if (highest_offset == -1
1821                 || (current_offset > highest_offset))
1822               highest_offset = current_offset;
1823
1824             /* Add the number of ints we're about to print to args_printed.  */
1825             args_printed += (arg_size + sizeof (int) - 1) / sizeof (int);
1826           }
1827
1828           /* We care about types of symbols, but don't need to keep track of
1829              stack offsets in them.  */
1830         case LOC_REGPARM:
1831         case LOC_REGPARM_ADDR:
1832         case LOC_LOCAL_ARG:
1833         case LOC_BASEREG_ARG:
1834           break;
1835
1836           /* Other types of symbols we just skip over.  */
1837         default:
1838           continue;
1839         }
1840
1841       /* We have to look up the symbol because arguments can have
1842          two entries (one a parameter, one a local) and the one we
1843          want is the local, which lookup_symbol will find for us.
1844          This includes gcc1 (not gcc2) on the sparc when passing a
1845          small structure and gcc2 when the argument type is float
1846          and it is passed as a double and converted to float by
1847          the prologue (in the latter case the type of the LOC_ARG
1848          symbol is double and the type of the LOC_LOCAL symbol is
1849          float).  */
1850       /* But if the parameter name is null, don't try it.
1851          Null parameter names occur on the RS/6000, for traceback tables.
1852          FIXME, should we even print them?  */
1853
1854       if (*SYMBOL_NAME (sym))
1855         {
1856           struct symbol *nsym;
1857           nsym = lookup_symbol
1858             (SYMBOL_NAME (sym),
1859              b, VAR_NAMESPACE, (int *) NULL, (struct symtab **) NULL);
1860           if (SYMBOL_CLASS (nsym) == LOC_REGISTER)
1861             {
1862               /* There is a LOC_ARG/LOC_REGISTER pair.  This means that
1863                  it was passed on the stack and loaded into a register,
1864                  or passed in a register and stored in a stack slot.
1865                  GDB 3.x used the LOC_ARG; GDB 4.0-4.11 used the LOC_REGISTER.
1866
1867                  Reasons for using the LOC_ARG:
1868                  (1) because find_saved_registers may be slow for remote
1869                  debugging,
1870                  (2) because registers are often re-used and stack slots
1871                  rarely (never?) are.  Therefore using the stack slot is
1872                  much less likely to print garbage.
1873
1874                  Reasons why we might want to use the LOC_REGISTER:
1875                  (1) So that the backtrace prints the same value as
1876                  "print foo".  I see no compelling reason why this needs
1877                  to be the case; having the backtrace print the value which
1878                  was passed in, and "print foo" print the value as modified
1879                  within the called function, makes perfect sense to me.
1880
1881                  Additional note:  It might be nice if "info args" displayed
1882                  both values.
1883                  One more note:  There is a case with sparc structure passing
1884                  where we need to use the LOC_REGISTER, but this is dealt with
1885                  by creating a single LOC_REGPARM in symbol reading.  */
1886
1887               /* Leave sym (the LOC_ARG) alone.  */
1888               ;
1889             }
1890           else
1891             sym = nsym;
1892         }
1893
1894 #ifdef UI_OUT
1895       /* Print the current arg.  */
1896       if (!first)
1897         ui_out_text (uiout, ", ");
1898       ui_out_wrap_hint (uiout, "    ");
1899
1900       annotate_arg_begin ();
1901
1902       ui_out_list_begin (uiout, NULL);
1903       fprintf_symbol_filtered (stb->stream, SYMBOL_SOURCE_NAME (sym),
1904                             SYMBOL_LANGUAGE (sym), DMGL_PARAMS | DMGL_ANSI);
1905       ui_out_field_stream (uiout, "name", stb);
1906       annotate_arg_name_end ();
1907       ui_out_text (uiout, "=");
1908 #else
1909       /* Print the current arg.  */
1910       if (!first)
1911         fprintf_filtered (stream, ", ");
1912       wrap_here ("    ");
1913
1914       annotate_arg_begin ();
1915
1916       fprintf_symbol_filtered (stream, SYMBOL_SOURCE_NAME (sym),
1917                             SYMBOL_LANGUAGE (sym), DMGL_PARAMS | DMGL_ANSI);
1918       annotate_arg_name_end ();
1919       fputs_filtered ("=", stream);
1920 #endif
1921
1922       /* Avoid value_print because it will deref ref parameters.  We just
1923          want to print their addresses.  Print ??? for args whose address
1924          we do not know.  We pass 2 as "recurse" to val_print because our
1925          standard indentation here is 4 spaces, and val_print indents
1926          2 for each recurse.  */
1927       val = read_var_value (sym, fi);
1928
1929       annotate_arg_value (val == NULL ? NULL : VALUE_TYPE (val));
1930
1931       if (val)
1932         {
1933           if (GDB_TARGET_IS_D10V
1934               && SYMBOL_CLASS (sym) == LOC_REGPARM && TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_PTR)
1935             TYPE_LENGTH (VALUE_TYPE (val)) = 2;
1936 #ifdef UI_OUT
1937           val_print (VALUE_TYPE (val), VALUE_CONTENTS (val), 0,
1938                      VALUE_ADDRESS (val),
1939                      stb->stream, 0, 0, 2, Val_no_prettyprint);
1940           ui_out_field_stream (uiout, "value", stb);
1941         }
1942       else
1943         ui_out_text (uiout, "???");
1944
1945       ui_out_list_end (uiout);
1946 #else
1947           val_print (VALUE_TYPE (val), VALUE_CONTENTS (val), 0,
1948                      VALUE_ADDRESS (val),
1949                      stream, 0, 0, 2, Val_no_prettyprint);
1950         }
1951       else
1952         fputs_filtered ("???", stream);
1953 #endif
1954
1955       annotate_arg_end ();
1956
1957       first = 0;
1958     }
1959
1960   /* Don't print nameless args in situations where we don't know
1961      enough about the stack to find them.  */
1962   if (num != -1)
1963     {
1964       long start;
1965
1966       if (highest_offset == -1)
1967         start = FRAME_ARGS_SKIP;
1968       else
1969         start = highest_offset;
1970
1971       print_frame_nameless_args (fi, start, num - args_printed,
1972                                  first, stream);
1973     }
1974 #ifdef UI_OUT
1975   do_cleanups (old_chain);
1976 #endif /* no UI_OUT */
1977 }
1978
1979 /* Print nameless args on STREAM.
1980    FI is the frameinfo for this frame, START is the offset
1981    of the first nameless arg, and NUM is the number of nameless args to
1982    print.  FIRST is nonzero if this is the first argument (not just
1983    the first nameless arg).  */
1984
1985 static void
1986 print_frame_nameless_args (fi, start, num, first, stream)
1987      struct frame_info *fi;
1988      long start;
1989      int num;
1990      int first;
1991      struct ui_file *stream;
1992 {
1993   int i;
1994   CORE_ADDR argsaddr;
1995   long arg_value;
1996
1997   for (i = 0; i < num; i++)
1998     {
1999       QUIT;
2000 #ifdef NAMELESS_ARG_VALUE
2001       NAMELESS_ARG_VALUE (fi, start, &arg_value);
2002 #else
2003       argsaddr = FRAME_ARGS_ADDRESS (fi);
2004       if (!argsaddr)
2005         return;
2006
2007       arg_value = read_memory_integer (argsaddr + start, sizeof (int));
2008 #endif
2009
2010       if (!first)
2011         fprintf_filtered (stream, ", ");
2012
2013 #ifdef  PRINT_NAMELESS_INTEGER
2014       PRINT_NAMELESS_INTEGER (stream, arg_value);
2015 #else
2016 #ifdef PRINT_TYPELESS_INTEGER
2017       PRINT_TYPELESS_INTEGER (stream, builtin_type_int, (LONGEST) arg_value);
2018 #else
2019       fprintf_filtered (stream, "%ld", arg_value);
2020 #endif /* PRINT_TYPELESS_INTEGER */
2021 #endif /* PRINT_NAMELESS_INTEGER */
2022       first = 0;
2023       start += sizeof (int);
2024     }
2025 }
2026 \f
2027 /* ARGSUSED */
2028 static void
2029 printf_command (arg, from_tty)
2030      char *arg;
2031      int from_tty;
2032 {
2033   register char *f = NULL;
2034   register char *s = arg;
2035   char *string = NULL;
2036   value_ptr *val_args;
2037   char *substrings;
2038   char *current_substring;
2039   int nargs = 0;
2040   int allocated_args = 20;
2041   struct cleanup *old_cleanups;
2042
2043   val_args = (value_ptr *) xmalloc (allocated_args * sizeof (value_ptr));
2044   old_cleanups = make_cleanup ((make_cleanup_func) free_current_contents,
2045                                &val_args);
2046
2047   if (s == 0)
2048     error_no_arg ("format-control string and values to print");
2049
2050   /* Skip white space before format string */
2051   while (*s == ' ' || *s == '\t')
2052     s++;
2053
2054   /* A format string should follow, enveloped in double quotes */
2055   if (*s++ != '"')
2056     error ("Bad format string, missing '\"'.");
2057
2058   /* Parse the format-control string and copy it into the string STRING,
2059      processing some kinds of escape sequence.  */
2060
2061   f = string = (char *) alloca (strlen (s) + 1);
2062
2063   while (*s != '"')
2064     {
2065       int c = *s++;
2066       switch (c)
2067         {
2068         case '\0':
2069           error ("Bad format string, non-terminated '\"'.");
2070
2071         case '\\':
2072           switch (c = *s++)
2073             {
2074             case '\\':
2075               *f++ = '\\';
2076               break;
2077             case 'a':
2078 #ifdef __STDC__
2079               *f++ = '\a';
2080 #else
2081               *f++ = '\007';    /* Bell */
2082 #endif
2083               break;
2084             case 'b':
2085               *f++ = '\b';
2086               break;
2087             case 'f':
2088               *f++ = '\f';
2089               break;
2090             case 'n':
2091               *f++ = '\n';
2092               break;
2093             case 'r':
2094               *f++ = '\r';
2095               break;
2096             case 't':
2097               *f++ = '\t';
2098               break;
2099             case 'v':
2100               *f++ = '\v';
2101               break;
2102             case '"':
2103               *f++ = '"';
2104               break;
2105             default:
2106               /* ??? TODO: handle other escape sequences */
2107               error ("Unrecognized escape character \\%c in format string.",
2108                      c);
2109             }
2110           break;
2111
2112         default:
2113           *f++ = c;
2114         }
2115     }
2116
2117   /* Skip over " and following space and comma.  */
2118   s++;
2119   *f++ = '\0';
2120   while (*s == ' ' || *s == '\t')
2121     s++;
2122
2123   if (*s != ',' && *s != 0)
2124     error ("Invalid argument syntax");
2125
2126   if (*s == ',')
2127     s++;
2128   while (*s == ' ' || *s == '\t')
2129     s++;
2130
2131   /* Need extra space for the '\0's.  Doubling the size is sufficient.  */
2132   substrings = alloca (strlen (string) * 2);
2133   current_substring = substrings;
2134
2135   {
2136     /* Now scan the string for %-specs and see what kinds of args they want.
2137        argclass[I] classifies the %-specs so we can give printf_filtered
2138        something of the right size.  */
2139
2140     enum argclass
2141       {
2142         no_arg, int_arg, string_arg, double_arg, long_long_arg
2143       };
2144     enum argclass *argclass;
2145     enum argclass this_argclass;
2146     char *last_arg;
2147     int nargs_wanted;
2148     int lcount;
2149     int i;
2150
2151     argclass = (enum argclass *) alloca (strlen (s) * sizeof *argclass);
2152     nargs_wanted = 0;
2153     f = string;
2154     last_arg = string;
2155     while (*f)
2156       if (*f++ == '%')
2157         {
2158           lcount = 0;
2159           while (strchr ("0123456789.hlL-+ #", *f))
2160             {
2161               if (*f == 'l' || *f == 'L')
2162                 lcount++;
2163               f++;
2164             }
2165           switch (*f)
2166             {
2167             case 's':
2168               this_argclass = string_arg;
2169               break;
2170
2171             case 'e':
2172             case 'f':
2173             case 'g':
2174               this_argclass = double_arg;
2175               break;
2176
2177             case '*':
2178               error ("`*' not supported for precision or width in printf");
2179
2180             case 'n':
2181               error ("Format specifier `n' not supported in printf");
2182
2183             case '%':
2184               this_argclass = no_arg;
2185               break;
2186
2187             default:
2188               if (lcount > 1)
2189                 this_argclass = long_long_arg;
2190               else
2191                 this_argclass = int_arg;
2192               break;
2193             }
2194           f++;
2195           if (this_argclass != no_arg)
2196             {
2197               strncpy (current_substring, last_arg, f - last_arg);
2198               current_substring += f - last_arg;
2199               *current_substring++ = '\0';
2200               last_arg = f;
2201               argclass[nargs_wanted++] = this_argclass;
2202             }
2203         }
2204
2205     /* Now, parse all arguments and evaluate them.
2206        Store the VALUEs in VAL_ARGS.  */
2207
2208     while (*s != '\0')
2209       {
2210         char *s1;
2211         if (nargs == allocated_args)
2212           val_args = (value_ptr *) xrealloc ((char *) val_args,
2213                                              (allocated_args *= 2)
2214                                              * sizeof (value_ptr));
2215         s1 = s;
2216         val_args[nargs] = parse_to_comma_and_eval (&s1);
2217
2218         /* If format string wants a float, unchecked-convert the value to
2219            floating point of the same size */
2220
2221         if (argclass[nargs] == double_arg)
2222           {
2223             struct type *type = VALUE_TYPE (val_args[nargs]);
2224             if (TYPE_LENGTH (type) == sizeof (float))
2225                 VALUE_TYPE (val_args[nargs]) = builtin_type_float;
2226             if (TYPE_LENGTH (type) == sizeof (double))
2227                 VALUE_TYPE (val_args[nargs]) = builtin_type_double;
2228           }
2229         nargs++;
2230         s = s1;
2231         if (*s == ',')
2232           s++;
2233       }
2234
2235     if (nargs != nargs_wanted)
2236       error ("Wrong number of arguments for specified format-string");
2237
2238     /* Now actually print them.  */
2239     current_substring = substrings;
2240     for (i = 0; i < nargs; i++)
2241       {
2242         switch (argclass[i])
2243           {
2244           case string_arg:
2245             {
2246               char *str;
2247               CORE_ADDR tem;
2248               int j;
2249               tem = value_as_pointer (val_args[i]);
2250
2251               /* This is a %s argument.  Find the length of the string.  */
2252               for (j = 0;; j++)
2253                 {
2254                   char c;
2255                   QUIT;
2256                   read_memory_section (tem + j, &c, 1,
2257                                        VALUE_BFD_SECTION (val_args[i]));
2258                   if (c == 0)
2259                     break;
2260                 }
2261
2262               /* Copy the string contents into a string inside GDB.  */
2263               str = (char *) alloca (j + 1);
2264               read_memory_section (tem, str, j, VALUE_BFD_SECTION (val_args[i]));
2265               str[j] = 0;
2266
2267               printf_filtered (current_substring, str);
2268             }
2269             break;
2270           case double_arg:
2271             {
2272               double val = value_as_double (val_args[i]);
2273               printf_filtered (current_substring, val);
2274               break;
2275             }
2276           case long_long_arg:
2277 #if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG)
2278             {
2279               long long val = value_as_long (val_args[i]);
2280               printf_filtered (current_substring, val);
2281               break;
2282             }
2283 #else
2284             error ("long long not supported in printf");
2285 #endif
2286           case int_arg:
2287             {
2288               /* FIXME: there should be separate int_arg and long_arg.  */
2289               long val = value_as_long (val_args[i]);
2290               printf_filtered (current_substring, val);
2291               break;
2292             }
2293           default:              /* purecov: deadcode */
2294             error ("internal error in printf_command");         /* purecov: deadcode */
2295           }
2296         /* Skip to the next substring.  */
2297         current_substring += strlen (current_substring) + 1;
2298       }
2299     /* Print the portion of the format string after the last argument.  */
2300     printf_filtered (last_arg);
2301   }
2302   do_cleanups (old_cleanups);
2303 }
2304 \f
2305 /* Dump a specified section of assembly code.  With no command line
2306    arguments, this command will dump the assembly code for the
2307    function surrounding the pc value in the selected frame.  With one
2308    argument, it will dump the assembly code surrounding that pc value.
2309    Two arguments are interpeted as bounds within which to dump
2310    assembly.  */
2311
2312 /* ARGSUSED */
2313 static void
2314 disassemble_command (arg, from_tty)
2315      char *arg;
2316      int from_tty;
2317 {
2318   CORE_ADDR low, high;
2319   char *name;
2320   CORE_ADDR pc, pc_masked;
2321   char *space_index;
2322 #if 0
2323   asection *section;
2324 #endif
2325
2326   name = NULL;
2327   if (!arg)
2328     {
2329       if (!selected_frame)
2330         error ("No frame selected.\n");
2331
2332       pc = get_frame_pc (selected_frame);
2333       if (find_pc_partial_function (pc, &name, &low, &high) == 0)
2334         error ("No function contains program counter for selected frame.\n");
2335 #if defined(TUI)
2336       else if (tui_version)
2337         low = (CORE_ADDR) tuiDo ((TuiOpaqueFuncPtr) tui_vGetLowDisassemblyAddress,
2338                                  (Opaque) low,
2339                                  (Opaque) pc);
2340 #endif
2341       low += FUNCTION_START_OFFSET;
2342     }
2343   else if (!(space_index = (char *) strchr (arg, ' ')))
2344     {
2345       /* One argument.  */
2346       pc = parse_and_eval_address (arg);
2347       if (find_pc_partial_function (pc, &name, &low, &high) == 0)
2348         error ("No function contains specified address.\n");
2349 #if defined(TUI)
2350       else if (tui_version)
2351         low = (CORE_ADDR) tuiDo ((TuiOpaqueFuncPtr) tui_vGetLowDisassemblyAddress,
2352                                  (Opaque) low,
2353                                  (Opaque) pc);
2354 #endif
2355 #if 0
2356       if (overlay_debugging)
2357         {
2358           section = find_pc_overlay (pc);
2359           if (pc_in_unmapped_range (pc, section))
2360             {
2361               /* find_pc_partial_function will have returned low and high
2362                  relative to the symbolic (mapped) address range.  Need to
2363                  translate them back to the unmapped range where PC is.  */
2364               low = overlay_unmapped_address (low, section);
2365               high = overlay_unmapped_address (high, section);
2366             }
2367         }
2368 #endif
2369       low += FUNCTION_START_OFFSET;
2370     }
2371   else
2372     {
2373       /* Two arguments.  */
2374       *space_index = '\0';
2375       low = parse_and_eval_address (arg);
2376       high = parse_and_eval_address (space_index + 1);
2377     }
2378
2379 #if defined(TUI)
2380   if (!tui_version ||
2381       m_winPtrIsNull (disassemWin) || !disassemWin->generic.isVisible)
2382 #endif
2383     {
2384       printf_filtered ("Dump of assembler code ");
2385       if (name != NULL)
2386         {
2387           printf_filtered ("for function %s:\n", name);
2388         }
2389       else
2390         {
2391           printf_filtered ("from ");
2392           print_address_numeric (low, 1, gdb_stdout);
2393           printf_filtered (" to ");
2394           print_address_numeric (high, 1, gdb_stdout);
2395           printf_filtered (":\n");
2396         }
2397
2398       /* Dump the specified range.  */
2399       pc = low;
2400
2401 #ifdef GDB_TARGET_MASK_DISAS_PC
2402       pc_masked = GDB_TARGET_MASK_DISAS_PC (pc);
2403 #else
2404       pc_masked = pc;
2405 #endif
2406
2407       while (pc_masked < high)
2408         {
2409           QUIT;
2410           print_address (pc_masked, gdb_stdout);
2411           printf_filtered (":\t");
2412           /* We often wrap here if there are long symbolic names.  */
2413           wrap_here ("    ");
2414           pc += print_insn (pc, gdb_stdout);
2415           printf_filtered ("\n");
2416
2417 #ifdef GDB_TARGET_MASK_DISAS_PC
2418           pc_masked = GDB_TARGET_MASK_DISAS_PC (pc);
2419 #else
2420           pc_masked = pc;
2421 #endif
2422         }
2423       printf_filtered ("End of assembler dump.\n");
2424       gdb_flush (gdb_stdout);
2425     }
2426 #if defined(TUI)
2427   else
2428     {
2429       tuiDo ((TuiOpaqueFuncPtr) tui_vAddWinToLayout, DISASSEM_WIN);
2430       tuiDo ((TuiOpaqueFuncPtr) tui_vUpdateSourceWindowsWithAddr, low);
2431     }
2432 #endif
2433 }
2434
2435 /* Print the instruction at address MEMADDR in debugged memory,
2436    on STREAM.  Returns length of the instruction, in bytes.  */
2437
2438 static int
2439 print_insn (memaddr, stream)
2440      CORE_ADDR memaddr;
2441      struct ui_file *stream;
2442 {
2443   if (TARGET_BYTE_ORDER == BIG_ENDIAN)
2444     TARGET_PRINT_INSN_INFO->endian = BFD_ENDIAN_BIG;
2445   else
2446     TARGET_PRINT_INSN_INFO->endian = BFD_ENDIAN_LITTLE;
2447
2448   if (TARGET_ARCHITECTURE != NULL)
2449     TARGET_PRINT_INSN_INFO->mach = TARGET_ARCHITECTURE->mach;
2450   /* else: should set .mach=0 but some disassemblers don't grok this */
2451
2452   return TARGET_PRINT_INSN (memaddr, TARGET_PRINT_INSN_INFO);
2453 }
2454 \f
2455
2456 void
2457 _initialize_printcmd ()
2458 {
2459   current_display_number = -1;
2460
2461   add_info ("address", address_info,
2462             "Describe where symbol SYM is stored.");
2463
2464   add_info ("symbol", sym_info,
2465             "Describe what symbol is at location ADDR.\n\
2466 Only for symbols with fixed locations (global or static scope).");
2467
2468   add_com ("x", class_vars, x_command,
2469            concat ("Examine memory: x/FMT ADDRESS.\n\
2470 ADDRESS is an expression for the memory address to examine.\n\
2471 FMT is a repeat count followed by a format letter and a size letter.\n\
2472 Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),\n\
2473   t(binary), f(float), a(address), i(instruction), c(char) and s(string).\n",
2474                    "Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).\n\
2475 The specified number of objects of the specified size are printed\n\
2476 according to the format.\n\n\
2477 Defaults for format and size letters are those previously used.\n\
2478 Default count is 1.  Default address is following last thing printed\n\
2479 with this command or \"print\".", NULL));
2480
2481   add_com ("disassemble", class_vars, disassemble_command,
2482            "Disassemble a specified section of memory.\n\
2483 Default is the function surrounding the pc of the selected frame.\n\
2484 With a single argument, the function surrounding that address is dumped.\n\
2485 Two arguments are taken as a range of memory to dump.");
2486   if (xdb_commands)
2487     add_com_alias ("va", "disassemble", class_xdb, 0);
2488
2489 #if 0
2490   add_com ("whereis", class_vars, whereis_command,
2491            "Print line number and file of definition of variable.");
2492 #endif
2493
2494   add_info ("display", display_info,
2495             "Expressions to display when program stops, with code numbers.");
2496
2497   add_cmd ("undisplay", class_vars, undisplay_command,
2498            "Cancel some expressions to be displayed when program stops.\n\
2499 Arguments are the code numbers of the expressions to stop displaying.\n\
2500 No argument means cancel all automatic-display expressions.\n\
2501 \"delete display\" has the same effect as this command.\n\
2502 Do \"info display\" to see current list of code numbers.",
2503            &cmdlist);
2504
2505   add_com ("display", class_vars, display_command,
2506            "Print value of expression EXP each time the program stops.\n\
2507 /FMT may be used before EXP as in the \"print\" command.\n\
2508 /FMT \"i\" or \"s\" or including a size-letter is allowed,\n\
2509 as in the \"x\" command, and then EXP is used to get the address to examine\n\
2510 and examining is done as in the \"x\" command.\n\n\
2511 With no argument, display all currently requested auto-display expressions.\n\
2512 Use \"undisplay\" to cancel display requests previously made."
2513     );
2514
2515   add_cmd ("display", class_vars, enable_display,
2516            "Enable some expressions to be displayed when program stops.\n\
2517 Arguments are the code numbers of the expressions to resume displaying.\n\
2518 No argument means enable all automatic-display expressions.\n\
2519 Do \"info display\" to see current list of code numbers.", &enablelist);
2520
2521   add_cmd ("display", class_vars, disable_display_command,
2522            "Disable some expressions to be displayed when program stops.\n\
2523 Arguments are the code numbers of the expressions to stop displaying.\n\
2524 No argument means disable all automatic-display expressions.\n\
2525 Do \"info display\" to see current list of code numbers.", &disablelist);
2526
2527   add_cmd ("display", class_vars, undisplay_command,
2528            "Cancel some expressions to be displayed when program stops.\n\
2529 Arguments are the code numbers of the expressions to stop displaying.\n\
2530 No argument means cancel all automatic-display expressions.\n\
2531 Do \"info display\" to see current list of code numbers.", &deletelist);
2532
2533   add_com ("printf", class_vars, printf_command,
2534            "printf \"printf format string\", arg1, arg2, arg3, ..., argn\n\
2535 This is useful for formatted output in user-defined commands.");
2536
2537   add_com ("output", class_vars, output_command,
2538            "Like \"print\" but don't put in value history and don't print newline.\n\
2539 This is useful in user-defined commands.");
2540
2541   add_prefix_cmd ("set", class_vars, set_command,
2542                   concat ("Evaluate expression EXP and assign result to variable VAR, using assignment\n\
2543 syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n\
2544 example).  VAR may be a debugger \"convenience\" variable (names starting\n\
2545 with $), a register (a few standard names starting with $), or an actual\n\
2546 variable in the program being debugged.  EXP is any valid expression.\n",
2547                           "Use \"set variable\" for variables with names identical to set subcommands.\n\
2548 \nWith a subcommand, this command modifies parts of the gdb environment.\n\
2549 You can see these environment settings with the \"show\" command.", NULL),
2550                   &setlist, "set ", 1, &cmdlist);
2551   if (dbx_commands)
2552     add_com ("assign", class_vars, set_command, concat ("Evaluate expression \
2553 EXP and assign result to variable VAR, using assignment\n\
2554 syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n\
2555 example).  VAR may be a debugger \"convenience\" variable (names starting\n\
2556 with $), a register (a few standard names starting with $), or an actual\n\
2557 variable in the program being debugged.  EXP is any valid expression.\n",
2558                                                         "Use \"set variable\" for variables with names identical to set subcommands.\n\
2559 \nWith a subcommand, this command modifies parts of the gdb environment.\n\
2560 You can see these environment settings with the \"show\" command.", NULL));
2561
2562   /* "call" is the same as "set", but handy for dbx users to call fns. */
2563   add_com ("call", class_vars, call_command,
2564            "Call a function in the program.\n\
2565 The argument is the function name and arguments, in the notation of the\n\
2566 current working language.  The result is printed and saved in the value\n\
2567 history, if it is not void.");
2568
2569   add_cmd ("variable", class_vars, set_command,
2570            "Evaluate expression EXP and assign result to variable VAR, using assignment\n\
2571 syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n\
2572 example).  VAR may be a debugger \"convenience\" variable (names starting\n\
2573 with $), a register (a few standard names starting with $), or an actual\n\
2574 variable in the program being debugged.  EXP is any valid expression.\n\
2575 This may usually be abbreviated to simply \"set\".",
2576            &setlist);
2577
2578   add_com ("print", class_vars, print_command,
2579            concat ("Print value of expression EXP.\n\
2580 Variables accessible are those of the lexical environment of the selected\n\
2581 stack frame, plus all those whose scope is global or an entire file.\n\
2582 \n\
2583 $NUM gets previous value number NUM.  $ and $$ are the last two values.\n\
2584 $$NUM refers to NUM'th value back from the last one.\n\
2585 Names starting with $ refer to registers (with the values they would have\n",
2586                    "if the program were to return to the stack frame now selected, restoring\n\
2587 all registers saved by frames farther in) or else to debugger\n\
2588 \"convenience\" variables (any such name not a known register).\n\
2589 Use assignment expressions to give values to convenience variables.\n",
2590                    "\n\
2591 {TYPE}ADREXP refers to a datum of data type TYPE, located at address ADREXP.\n\
2592 @ is a binary operator for treating consecutive data objects\n\
2593 anywhere in memory as an array.  FOO@NUM gives an array whose first\n\
2594 element is FOO, whose second element is stored in the space following\n\
2595 where FOO is stored, etc.  FOO must be an expression whose value\n\
2596 resides in memory.\n",
2597                    "\n\
2598 EXP may be preceded with /FMT, where FMT is a format letter\n\
2599 but no count or size letter (see \"x\" command).", NULL));
2600   add_com_alias ("p", "print", class_vars, 1);
2601
2602   add_com ("inspect", class_vars, inspect_command,
2603            "Same as \"print\" command, except that if you are running in the epoch\n\
2604 environment, the value is printed in its own window.");
2605
2606   add_show_from_set (
2607                  add_set_cmd ("max-symbolic-offset", no_class, var_uinteger,
2608                               (char *) &max_symbolic_offset,
2609        "Set the largest offset that will be printed in <symbol+1234> form.",
2610                               &setprintlist),
2611                       &showprintlist);
2612   add_show_from_set (
2613                       add_set_cmd ("symbol-filename", no_class, var_boolean,
2614                                    (char *) &print_symbol_filename,
2615            "Set printing of source filename and line number with <symbol>.",
2616                                    &setprintlist),
2617                       &showprintlist);
2618
2619   /* For examine/instruction a single byte quantity is specified as
2620      the data.  This avoids problems with value_at_lazy() requiring a
2621      valid data type (and rejecting VOID). */
2622   examine_i_type = init_type (TYPE_CODE_INT, 1, 0, "examine_i_type", NULL);
2623
2624   examine_b_type = init_type (TYPE_CODE_INT, 1, 0, "examine_b_type", NULL);
2625   examine_h_type = init_type (TYPE_CODE_INT, 2, 0, "examine_h_type", NULL);
2626   examine_w_type = init_type (TYPE_CODE_INT, 4, 0, "examine_w_type", NULL);
2627   examine_g_type = init_type (TYPE_CODE_INT, 8, 0, "examine_g_type", NULL);
2628
2629 }