]> Git Repo - binutils.git/blob - gdb/printcmd.c
ansi name abuse changes
[binutils.git] / gdb / printcmd.c
1 /* Print values for GNU debugger GDB.
2    Copyright (C) 1986-1991 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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
19
20 #include <stdio.h>
21 #include <string.h>
22 #include "defs.h"
23 #include "param.h"
24 #include "frame.h"
25 #include "symtab.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
33 extern int asm_demangle;        /* Whether to demangle syms in asm printouts */
34 extern int addressprint;        /* Whether to print hex addresses in HLL " */
35
36 extern struct block *get_current_block ();
37
38 static void print_frame_nameless_args ();
39
40 struct format_data
41 {
42   int count;
43   char format;
44   char size;
45 };
46
47 /* Last specified output format.  */
48
49 static char last_format = 'x';
50
51 /* Last specified examination size.  'b', 'h', 'w' or `q'.  */
52
53 static char last_size = 'w';
54
55 /* Default address to examine next.  */
56
57 static CORE_ADDR next_address;
58
59 /* Last address examined.  */
60
61 static CORE_ADDR last_examine_address;
62
63 /* Contents of last address examined.
64    This is not valid past the end of the `x' command!  */
65
66 static value last_examine_value;
67
68 /* Number of auto-display expression currently being displayed.
69    So that we can deleted it if we get an error or a signal within it.
70    -1 when not doing one.  */
71
72 int current_display_number;
73
74 /* Flag to low-level print routines that this value is being printed
75    in an epoch window.  We'd like to pass this as a parameter, but
76    every routine would need to take it.  Perhaps we can encapsulate
77    this in the I/O stream once we have GNU stdio. */
78
79 int inspect_it = 0;
80
81 static void do_one_display ();
82
83 void do_displays ();
84 void print_scalar_formatted ();
85
86 \f
87 /* Decode a format specification.  *STRING_PTR should point to it.
88    OFORMAT and OSIZE are used as defaults for the format and size
89    if none are given in the format specification.
90    If OSIZE is zero, then the size field of the returned value
91    should be set only if a size is explicitly specified by the
92    user.
93    The structure returned describes all the data
94    found in the specification.  In addition, *STRING_PTR is advanced
95    past the specification and past all whitespace following it.  */
96
97 struct format_data
98 decode_format (string_ptr, oformat, osize)
99      char **string_ptr;
100      char oformat;
101      char osize;
102 {
103   struct format_data val;
104   register char *p = *string_ptr;
105
106   val.format = '?';
107   val.size = '?';
108   val.count = 1;
109
110   if (*p >= '0' && *p <= '9')
111     val.count = atoi (p);
112   while (*p >= '0' && *p <= '9') p++;
113
114   /* Now process size or format letters that follow.  */
115
116   while (1)
117     {
118       if (*p == 'b' || *p == 'h' || *p == 'w' || *p == 'g')
119         val.size = *p++;
120 #ifdef LONG_LONG
121       else if (*p == 'l')
122         {
123           val.size = 'g';
124           p++;
125         }
126 #endif
127       else if (*p >= 'a' && *p <= 'z')
128         val.format = *p++;
129       else
130         break;
131     }
132
133 #ifndef LONG_LONG
134   /* Make sure 'g' size is not used on integer types.
135      Well, actually, we can handle hex.  */
136   if (val.size == 'g' && val.format != 'f' && val.format != 'x')
137     val.size = 'w';
138 #endif
139
140   while (*p == ' ' || *p == '\t') p++;
141   *string_ptr = p;
142
143   /* Set defaults for format and size if not specified.  */
144   if (val.format == '?')
145     {
146       if (val.size == '?')
147         {
148           /* Neither has been specified.  */
149           val.format = oformat;
150           val.size = osize;
151         }
152       else
153         /* If a size is specified, any format makes a reasonable
154            default except 'i'.  */
155         val.format = oformat == 'i' ? 'x' : oformat;
156     }
157   else if (val.size == '?')
158     switch (val.format)
159       {
160       case 'a':
161       case 's':
162         /* Addresses must be words.  */
163         val.size = osize ? 'w' : osize;
164         break;
165       case 'f':
166         /* Floating point has to be word or giantword.  */
167         if (osize == 'w' || osize == 'g')
168           val.size = osize;
169         else
170           /* Default it to giantword if the last used size is not
171              appropriate.  */
172           val.size = osize ? 'g' : osize;
173         break;
174       case 'c':
175         /* Characters default to one byte.  */
176         val.size = osize ? 'b' : osize;
177         break;
178       default:
179         /* The default is the size most recently specified.  */
180         val.size = osize;
181       }
182
183   return val;
184 }
185 \f
186 /* Print value VAL on stdout according to FORMAT, a letter or 0.
187    Do not end with a newline.
188    0 means print VAL according to its own type.
189    SIZE is the letter for the size of datum being printed.
190    This is used to pad hex numbers so they line up.  */
191
192 static void
193 print_formatted (val, format, size)
194      register value val;
195      register char format;
196      char size;
197 {
198   int len = TYPE_LENGTH (VALUE_TYPE (val));
199
200   if (VALUE_LVAL (val) == lval_memory)
201     next_address = VALUE_ADDRESS (val) + len;
202
203   switch (format)
204     {
205     case 's':
206       next_address = VALUE_ADDRESS (val)
207         + value_print (value_addr (val), stdout, format, Val_pretty_default);
208       break;
209
210     case 'i':
211       wrap_here ("");   /* Force output out, print_insn not using _filtered */
212       next_address = VALUE_ADDRESS (val)
213         + print_insn (VALUE_ADDRESS (val), stdout);
214       break;
215
216     default:
217       if (format == 0
218           || TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_ARRAY
219           || TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_STRUCT
220           || TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_UNION
221           || VALUE_REPEATED (val))
222         value_print (val, stdout, format, Val_pretty_default);
223       else
224         print_scalar_formatted (VALUE_CONTENTS (val), VALUE_TYPE (val),
225                                 format, size, stdout);
226     }
227 }
228
229 /* Print a scalar of data of type TYPE, pointed to in GDB by VALADDR,
230    according to letters FORMAT and SIZE on STREAM.
231    FORMAT may not be zero.  Formats s and i are not supported at this level.
232
233    This is how the elements of an array or structure are printed
234    with a format.  */
235
236 void
237 print_scalar_formatted (valaddr, type, format, size, stream)
238      char *valaddr;
239      struct type *type;
240      char format;
241      int size;
242      FILE *stream;
243 {
244   LONGEST val_long;
245   int len = TYPE_LENGTH (type);
246
247   if (size == 'g' && sizeof (LONGEST) < 8
248       && format == 'x')
249     {
250       /* ok, we're going to have to get fancy here.  Assumption: a
251          long is four bytes.  FIXME.  */
252       unsigned long v1, v2;
253
254       v1 = unpack_long (builtin_type_long, valaddr);
255       v2 = unpack_long (builtin_type_long, valaddr + 4);
256
257 #if TARGET_BYTE_ORDER == LITTLE_ENDIAN
258       /* Swap the two for printing */
259       {
260         unsigned long tmp;
261
262         tmp = v1;
263         v1 = v2;
264         v2 = tmp;
265       }
266 #endif
267   
268       switch (format)
269         {
270         case 'x':
271           fprintf_filtered (stream, local_hex_format_custom("08x%08"), v1, v2);
272           break;
273         default:
274           error ("Output size \"g\" unimplemented for format \"%c\".",
275                  format);
276         }
277       return;
278     }
279       
280   val_long = unpack_long (type, valaddr);
281
282   /* If value is unsigned, truncate it in case negative.  */
283   if (format != 'd')
284     {
285       if (len == sizeof (char))
286         val_long &= (1 << 8 * sizeof(char)) - 1;
287       else if (len == sizeof (short))
288         val_long &= (1 << 8 * sizeof(short)) - 1;
289       else if (len == sizeof (long))
290         val_long &= (unsigned long) - 1;
291     }
292
293   switch (format)
294     {
295     case 'x':
296       if (!size)
297         {
298           /* no size specified, like in print.  Print varying # of digits. */
299 #if defined (LONG_LONG)
300           fprintf_filtered (stream, local_hex_format_custom("ll"), val_long);
301 #else /* not LONG_LONG.  */
302           fprintf_filtered (stream, local_hex_format_custom("l"), val_long);
303 #endif /* not LONG_LONG.  */
304         }
305       else
306 #if defined (LONG_LONG)
307       switch (size)
308         {
309         case 'b':
310           fprintf_filtered (stream, local_hex_format_custom("02ll"), val_long);
311           break;
312         case 'h':
313           fprintf_filtered (stream, local_hex_format_custom("04ll"), val_long);
314           break;
315         case 'w':
316           fprintf_filtered (stream, local_hex_format_custom("08ll"), val_long);
317           break;
318         case 'g':
319           fprintf_filtered (stream, local_hex_format_custom("016ll"), val_long);
320           break;
321         default:
322           error ("Undefined output size \"%c\".", size);
323         }
324 #else /* not LONG_LONG.  */
325       switch (size)
326         {
327         case 'b':
328           fprintf_filtered (stream, local_hex_format_custom("02"), val_long);
329           break;
330         case 'h':
331           fprintf_filtered (stream, local_hex_format_custom("04"), val_long);
332           break;
333         case 'w':
334           fprintf_filtered (stream, local_hex_format_custom("08"), val_long);
335           break;
336         case 'g':
337           fprintf_filtered (stream, local_hex_format_custom("016"), val_long);
338           break;
339         default:
340           error ("Undefined output size \"%c\".", size);
341         }
342 #endif /* not LONG_LONG */
343       break;
344
345     case 'd':
346 #ifdef LONG_LONG
347       fprintf_filtered (stream, "%lld", val_long);
348 #else
349       fprintf_filtered (stream, "%d", val_long);
350 #endif
351       break;
352
353     case 'u':
354 #ifdef LONG_LONG
355       fprintf_filtered (stream, "%llu", val_long);
356 #else
357       fprintf_filtered (stream, "%u", val_long);
358 #endif
359       break;
360
361     case 'o':
362       if (val_long)
363 #ifdef LONG_LONG
364         fprintf_filtered (stream, local_octal_format_custom("ll"), val_long);
365 #else
366         fprintf_filtered (stream, local_octal_format(), val_long);
367 #endif
368       else
369         fprintf_filtered (stream, "0");
370       break;
371
372     case 'a':
373       print_address (unpack_pointer (type, valaddr), stream);
374       break;
375
376     case 'c':
377       value_print (value_from_longest (builtin_type_char, val_long), stream, 0,
378                    Val_pretty_default);
379       break;
380
381     case 'f':
382       if (len == sizeof (float))
383         type = builtin_type_float;
384       else if (len == sizeof (double))
385         type = builtin_type_double;
386       print_floating (valaddr, type, stream);
387       break;
388
389     case 0:
390       abort ();
391
392     case 't':
393       /* Binary; 't' stands for "two".  */
394       {
395         char bits[8*(sizeof val_long) + 1];
396         char *cp = bits;
397         int width;
398
399         if (!size)
400           width = 8*(sizeof val_long);
401         else
402           switch (size)
403             {
404             case 'b':
405               width = 8;
406               break;
407             case 'h':
408               width = 16;
409               break;
410             case 'w':
411               width = 32;
412               break;
413             case 'g':
414               width = 64;
415               break;
416             default:
417               error ("Undefined output size \"%c\".", size);
418             }
419
420         bits[width] = '\0';
421         while (width-- > 0)
422           {
423             bits[width] = (val_long & 1) ? '1' : '0';
424             val_long >>= 1;
425           }
426         if (!size)
427           {
428             while (*cp && *cp == '0')
429               cp++;
430             if (*cp == '\0')
431               cp--;
432           }
433         fprintf_filtered (stream, cp);
434       }
435       break;
436
437     default:
438       error ("Undefined output format \"%c\".", format);
439     }
440 }
441
442 /* Specify default address for `x' command.
443    `info lines' uses this.  */
444
445 void
446 set_next_address (addr)
447      CORE_ADDR addr;
448 {
449   next_address = addr;
450
451   /* Make address available to the user as $_.  */
452   set_internalvar (lookup_internalvar ("_"),
453                    value_from_longest (lookup_pointer_type (builtin_type_void),
454                                     (LONGEST) addr));
455 }
456
457 /* Optionally print address ADDR symbolically as <SYMBOL+OFFSET> on STREAM,
458    after LEADIN.  Print nothing if no symbolic name is found nearby.
459    DO_DEMANGLE controls whether to print a symbol in its native "raw" form,
460    or to interpret it as a possible C++ name and convert it back to source
461    form. */
462
463 void
464 print_address_symbolic (addr, stream, do_demangle, leadin)
465      CORE_ADDR addr;
466      FILE *stream;
467      int do_demangle;
468      char *leadin;
469 {
470   int name_location;
471   register int i = find_pc_misc_function (addr);
472
473   /* If nothing comes out, don't print anything symbolic.  */
474   
475   if (i < 0)
476     return;
477
478   fputs_filtered (leadin, stream);
479   fputs_filtered ("<", stream);
480   if (do_demangle)
481     fputs_demangled (misc_function_vector[i].name, stream, 1);
482   else
483     fputs_filtered (misc_function_vector[i].name, stream);
484   name_location = misc_function_vector[i].address;
485   if (addr - name_location)
486     fprintf_filtered (stream, "+%d>", addr - name_location);
487   else
488     fputs_filtered (">", stream);
489 }
490
491 /* Print address ADDR symbolically on STREAM.
492    First print it as a number.  Then perhaps print
493    <SYMBOL + OFFSET> after the number.  */
494
495 void
496 print_address (addr, stream)
497      CORE_ADDR addr;
498      FILE *stream;
499 {
500   fprintf_filtered (stream, local_hex_format(), addr);
501   print_address_symbolic (addr, stream, asm_demangle, " ");
502 }
503
504 /* Print address ADDR symbolically on STREAM.  Parameter DEMANGLE
505    controls whether to print the symbolic name "raw" or demangled.
506    Global setting "addressprint" controls whether to print hex address
507    or not.  */
508
509 void
510 print_address_demangle (addr, stream, do_demangle)
511      CORE_ADDR addr;
512      FILE *stream;
513      int do_demangle;
514 {
515   if (addr == 0) {
516     fprintf_filtered (stream, "0");
517   } else if (addressprint) {
518     fprintf_filtered (stream, local_hex_format(), addr);
519     print_address_symbolic (addr, stream, do_demangle, " ");
520   } else {
521     print_address_symbolic (addr, stream, do_demangle, "");
522   }
523 }
524 \f
525
526 /* Examine data at address ADDR in format FMT.
527    Fetch it from memory and print on stdout.  */
528
529 static void
530 do_examine (fmt, addr)
531      struct format_data fmt;
532      CORE_ADDR addr;
533 {
534   register char format = 0;
535   register char size;
536   register int count = 1;
537   struct type *val_type;
538   register int i;
539   register int maxelts;
540
541   format = fmt.format;
542   size = fmt.size;
543   count = fmt.count;
544   next_address = addr;
545
546   /* String or instruction format implies fetch single bytes
547      regardless of the specified size.  */
548   if (format == 's' || format == 'i')
549     size = 'b';
550
551   if (size == 'b')
552     val_type = builtin_type_char;
553   else if (size == 'h')
554     val_type = builtin_type_short;
555   else if (size == 'w')
556     val_type = builtin_type_long;
557   else if (size == 'g')
558 #ifndef LONG_LONG
559     val_type = builtin_type_double;
560 #else
561     val_type = builtin_type_long_long;
562 #endif
563
564   maxelts = 8;
565   if (size == 'w')
566     maxelts = 4;
567   if (size == 'g')
568     maxelts = 2;
569   if (format == 's' || format == 'i')
570     maxelts = 1;
571
572   /* Print as many objects as specified in COUNT, at most maxelts per line,
573      with the address of the next one at the start of each line.  */
574
575   while (count > 0)
576     {
577       print_address (next_address, stdout);
578       printf_filtered (":");
579       for (i = maxelts;
580            i > 0 && count > 0;
581            i--, count--)
582         {
583           printf_filtered ("\t");
584           /* Note that print_formatted sets next_address for the next
585              object.  */
586           last_examine_address = next_address;
587           last_examine_value = value_at (val_type, next_address);
588           print_formatted (last_examine_value, format, size);
589         }
590       printf_filtered ("\n");
591       fflush (stdout);
592     }
593 }
594 \f
595 static void
596 validate_format (fmt, cmdname)
597      struct format_data fmt;
598      char *cmdname;
599 {
600   if (fmt.size != 0)
601     error ("Size letters are meaningless in \"%s\" command.", cmdname);
602   if (fmt.count != 1)
603     error ("Item count other than 1 is meaningless in \"%s\" command.",
604            cmdname);
605   if (fmt.format == 'i' || fmt.format == 's')
606     error ("Format letter \"%c\" is meaningless in \"%s\" command.",
607            fmt.format, cmdname);
608 }
609
610 static void
611 print_command_1 (exp, inspect, voidprint)
612      char *exp;
613      int inspect;
614      int voidprint;
615 {
616   struct expression *expr;
617   register struct cleanup *old_chain = 0;
618   register char format = 0;
619   register value val;
620   struct format_data fmt;
621   int cleanup = 0;
622
623   /* Pass inspect flag to the rest of the print routines in a global (sigh). */
624   inspect_it = inspect;
625
626   if (exp && *exp == '/')
627     {
628       exp++;
629       fmt = decode_format (&exp, last_format, 0);
630       validate_format (fmt, "print");
631       last_format = format = fmt.format;
632     }
633   else
634     {
635       fmt.count = 1;
636       fmt.format = 0;
637       fmt.size = 0;
638     }
639
640   if (exp && *exp)
641     {
642       extern int objectprint;
643       struct type *type;
644       expr = parse_expression (exp);
645       old_chain = make_cleanup (free_current_contents, &expr);
646       cleanup = 1;
647       val = evaluate_expression (expr);
648
649       /* C++: figure out what type we actually want to print it as.  */
650       type = VALUE_TYPE (val);
651
652       if (objectprint
653           && (TYPE_CODE (type) == TYPE_CODE_PTR
654               || TYPE_CODE (type) == TYPE_CODE_REF)
655           && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT)
656         {
657           value v;
658
659           v = value_from_vtable_info (val, TYPE_TARGET_TYPE (type));
660           if (v != 0)
661             {
662               val = v;
663               type = VALUE_TYPE (val);
664             }
665         }
666     }
667   else
668     val = access_value_history (0);
669
670   if (voidprint || (val && VALUE_TYPE (val) &&
671                     TYPE_CODE (VALUE_TYPE (val)) != TYPE_CODE_VOID))
672     {
673       int histindex = record_latest_value (val);
674
675       if (inspect)
676         printf ("\031(gdb-makebuffer \"%s\"  %d '(\"", exp, histindex);
677       else
678         if (histindex >= 0) printf_filtered ("$%d = ", histindex);
679
680       print_formatted (val, format, fmt.size);
681       printf_filtered ("\n");
682       if (inspect)
683         printf("\") )\030");
684     }
685
686   if (cleanup)
687     do_cleanups (old_chain);
688   inspect_it = 0;       /* Reset print routines to normal */
689 }
690
691 /* ARGSUSED */
692 static void
693 print_command (exp, from_tty)
694      char *exp;
695      int from_tty;
696 {
697   print_command_1 (exp, 0, 1);
698 }
699
700 /* Same as print, except in epoch, it gets its own window */
701 /* ARGSUSED */
702 static void
703 inspect_command (exp, from_tty)
704      char *exp;
705      int from_tty;
706 {
707   extern int epoch_interface;
708
709   print_command_1 (exp, epoch_interface, 1);
710 }
711
712 /* Same as print, except it doesn't print void results. */
713 /* ARGSUSED */
714 static void
715 call_command (exp, from_tty)
716      char *exp;
717      int from_tty;
718 {
719   print_command_1 (exp, 0, 0);
720 }
721
722 /* ARGSUSED */
723 static void
724 output_command (exp, from_tty)
725      char *exp;
726      int from_tty;
727 {
728   struct expression *expr;
729   register struct cleanup *old_chain;
730   register char format = 0;
731   register value val;
732   struct format_data fmt;
733
734   if (exp && *exp == '/')
735     {
736       exp++;
737       fmt = decode_format (&exp, 0, 0);
738       validate_format (fmt, "print");
739       format = fmt.format;
740     }
741
742   expr = parse_expression (exp);
743   old_chain = make_cleanup (free_current_contents, &expr);
744
745   val = evaluate_expression (expr);
746
747   print_formatted (val, format, fmt.size);
748
749   do_cleanups (old_chain);
750 }
751
752 /* ARGSUSED */
753 static void
754 set_command (exp, from_tty)
755      char *exp;
756      int from_tty;
757 {
758   struct expression *expr = parse_expression (exp);
759   register struct cleanup *old_chain
760     = make_cleanup (free_current_contents, &expr);
761   evaluate_expression (expr);
762   do_cleanups (old_chain);
763 }
764
765 /* ARGSUSED */
766 static void
767 address_info (exp, from_tty)
768      char *exp;
769      int from_tty;
770 {
771   register struct symbol *sym;
772   register long val;
773   int is_a_field_of_this;       /* C++: lookup_symbol sets this to nonzero
774                                    if exp is a field of `this'. */
775
776   if (exp == 0)
777     error ("Argument required.");
778
779   sym = lookup_symbol (exp, get_selected_block (), VAR_NAMESPACE, 
780                        &is_a_field_of_this, (struct symtab **)NULL);
781   if (sym == 0)
782     {
783       register int i;
784
785       if (is_a_field_of_this)
786         {
787           printf ("Symbol \"%s\" is a field of the local class variable `this'\n", exp);
788           return;
789         }
790
791       for (i = 0; i < misc_function_count; i++)
792         if (!strcmp (misc_function_vector[i].name, exp))
793           break;
794
795       if (i < misc_function_count)
796         printf ("Symbol \"%s\" is at %s in a file compiled without debugging.\n",
797                 exp, local_hex_string(misc_function_vector[i].address));
798       else
799         error ("No symbol \"%s\" in current context.", exp);
800       return;
801     }
802
803   printf ("Symbol \"%s\" is ", SYMBOL_NAME (sym));
804   val = SYMBOL_VALUE (sym);
805
806   switch (SYMBOL_CLASS (sym))
807     {
808     case LOC_CONST:
809     case LOC_CONST_BYTES:
810       printf ("constant");
811       break;
812
813     case LOC_LABEL:
814       printf ("a label at address %s", local_hex_string(SYMBOL_VALUE_ADDRESS (sym)));
815       break;
816
817     case LOC_REGISTER:
818       printf ("a variable in register %s", reg_names[val]);
819       break;
820
821     case LOC_STATIC:
822       printf ("static storage at address %s", local_hex_string(SYMBOL_VALUE_ADDRESS (sym)));
823       break;
824
825     case LOC_REGPARM:
826       printf ("an argument in register %s", reg_names[val]);
827       break;
828       
829     case LOC_ARG:
830       printf ("an argument at offset %ld", val);
831       break;
832
833     case LOC_LOCAL_ARG:
834       printf ("an argument at frame offset %ld", val);
835       break;
836
837     case LOC_LOCAL:
838       printf ("a local variable at frame offset %ld", val);
839       break;
840
841     case LOC_REF_ARG:
842       printf ("a reference argument at offset %ld", val);
843       break;
844
845     case LOC_TYPEDEF:
846       printf ("a typedef");
847       break;
848
849     case LOC_BLOCK:
850       printf ("a function at address %s",
851               local_hex_string(BLOCK_START (SYMBOL_BLOCK_VALUE (sym))));
852       break;
853
854     default:
855       printf ("of unknown (botched) type");
856       break;
857     }
858   printf (".\n");
859 }
860 \f
861 static void
862 x_command (exp, from_tty)
863      char *exp;
864      int from_tty;
865 {
866   struct expression *expr;
867   struct format_data fmt;
868   struct cleanup *old_chain;
869   struct value *val;
870
871   fmt.format = last_format;
872   fmt.size = last_size;
873   fmt.count = 1;
874
875   if (exp && *exp == '/')
876     {
877       exp++;
878       fmt = decode_format (&exp, last_format, last_size);
879       last_size = fmt.size;
880       last_format = fmt.format;
881     }
882
883   /* If we have an expression, evaluate it and use it as the address.  */
884
885   if (exp != 0 && *exp != 0)
886     {
887       expr = parse_expression (exp);
888       /* Cause expression not to be there any more
889          if this command is repeated with Newline.
890          But don't clobber a user-defined command's definition.  */
891       if (from_tty)
892         *exp = 0;
893       old_chain = make_cleanup (free_current_contents, &expr);
894       val = evaluate_expression (expr);
895       if (TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_REF)
896         val = value_ind (val);
897       /* In rvalue contexts, such as this, functions are coerced into
898          pointers to functions.  This makes "x/i main" work.  */
899       if (/* last_format == 'i'
900           && */ TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_FUNC
901           && VALUE_LVAL (val) == lval_memory)
902         next_address = VALUE_ADDRESS (val);
903       else
904         next_address = value_as_pointer (val);
905       do_cleanups (old_chain);
906     }
907
908   do_examine (fmt, next_address);
909
910   /* Set a couple of internal variables if appropriate. */
911   if (last_examine_value)
912     {
913       /* Make last address examined available to the user as $_.  Use
914          the correct pointer type.  */
915       set_internalvar (lookup_internalvar ("_"),
916                value_from_longest (
917                  lookup_pointer_type (VALUE_TYPE (last_examine_value)),
918                                    (LONGEST) last_examine_address));
919       
920       /* Make contents of last address examined available to the user as $__.*/
921       set_internalvar (lookup_internalvar ("__"), last_examine_value);
922     }
923 }
924 \f
925 /* Commands for printing types of things.  */
926
927 /* Print type of EXP, or last thing in value history if EXP == NULL.
928    show is passed to type_print.  */
929 static void
930 whatis_exp (exp, show)
931      char *exp;
932      int show;
933 {
934   struct expression *expr;
935   register value val;
936   register struct cleanup *old_chain;
937
938   if (exp)
939     {
940       expr = parse_expression (exp);
941       old_chain = make_cleanup (free_current_contents, &expr);
942       val = evaluate_type (expr);
943     }
944   else
945     val = access_value_history (0);
946
947   printf_filtered ("type = ");
948   type_print (VALUE_TYPE (val), "", stdout, show);
949   printf_filtered ("\n");
950
951   if (exp)
952     do_cleanups (old_chain);
953 }
954
955 /* ARGSUSED */
956 static void
957 whatis_command (exp, from_tty)
958      char *exp;
959      int from_tty;
960 {
961   /* Most of the time users do not want to see all the fields
962      in a structure.  If they do they can use the "ptype" command.
963      Hence the "-1" below.  */
964   whatis_exp (exp, -1);
965 }
966
967 /* Simple subroutine for ptype_command.  */
968 static
969 struct type *
970 ptype_eval(exp)
971    struct expression *exp;
972 {
973    if(exp->elts[0].opcode==OP_TYPE)
974       return exp->elts[1].type;
975    else
976       return 0;
977 }
978
979 /* TYPENAME is either the name of a type, or an expression.  */
980 /* ARGSUSED */
981 static void
982 ptype_command (typename, from_tty)
983      char *typename;
984      int from_tty;
985 {
986   register struct type *type;
987   struct expression *expr;
988   register struct cleanup *old_chain;
989
990   if (typename)
991   {
992      expr = parse_expression (typename);
993      old_chain = make_cleanup (free_current_contents, &expr);
994      type = ptype_eval (expr);
995
996      if(type)
997      {
998         printf_filtered ("type = ");
999         type_print (type, "", stdout, 1);
1000         printf_filtered ("\n");
1001         do_cleanups (old_chain);
1002      }
1003      else
1004      {
1005         do_cleanups (old_chain);
1006         whatis_exp (typename, 1);
1007      }
1008   }
1009   else
1010      whatis_exp (typename, 1);
1011 }
1012 \f
1013 enum display_status {disabled, enabled};
1014
1015 struct display
1016 {
1017   /* Chain link to next auto-display item.  */
1018   struct display *next;
1019   /* Expression to be evaluated and displayed.  */
1020   struct expression *exp;
1021   /* Item number of this auto-display item.  */
1022   int number;
1023   /* Display format specified.  */
1024   struct format_data format;
1025   /* Innermost block required by this expression when evaluated */
1026   struct block *block;
1027   /* Status of this display (enabled or disabled) */
1028   enum display_status status;
1029 };
1030
1031 /* Chain of expressions whose values should be displayed
1032    automatically each time the program stops.  */
1033
1034 static struct display *display_chain;
1035
1036 static int display_number;
1037
1038 /* Add an expression to the auto-display chain.
1039    Specify the expression.  */
1040
1041 static void
1042 display_command (exp, from_tty)
1043      char *exp;
1044      int from_tty;
1045 {
1046   struct format_data fmt;
1047   register struct expression *expr;
1048   register struct display *new;
1049
1050   if (exp == 0)
1051     {
1052       do_displays ();
1053       return;
1054     }
1055
1056   if (*exp == '/')
1057     {
1058       exp++;
1059       fmt = decode_format (&exp, 0, 0);
1060       if (fmt.size && fmt.format == 0)
1061         fmt.format = 'x';
1062       if (fmt.format == 'i' || fmt.format == 's')
1063         fmt.size = 'b';
1064     }
1065   else
1066     {
1067       fmt.format = 0;
1068       fmt.size = 0;
1069       fmt.count = 0;
1070     }
1071
1072   innermost_block = 0;
1073   expr = parse_expression (exp);
1074
1075   new = (struct display *) xmalloc (sizeof (struct display));
1076
1077   new->exp = expr;
1078   new->block = innermost_block;
1079   new->next = display_chain;
1080   new->number = ++display_number;
1081   new->format = fmt;
1082   new->status = enabled;
1083   display_chain = new;
1084
1085   if (from_tty && target_has_execution)
1086     do_one_display (new);
1087
1088   dont_repeat ();
1089 }
1090
1091 static void
1092 free_display (d)
1093      struct display *d;
1094 {
1095   free (d->exp);
1096   free (d);
1097 }
1098
1099 /* Clear out the display_chain.
1100    Done when new symtabs are loaded, since this invalidates
1101    the types stored in many expressions.  */
1102
1103 void
1104 clear_displays ()
1105 {
1106   register struct display *d;
1107
1108   while (d = display_chain)
1109     {
1110       free (d->exp);
1111       display_chain = d->next;
1112       free (d);
1113     }
1114 }
1115
1116 /* Delete the auto-display number NUM.  */
1117
1118 void
1119 delete_display (num)
1120      int num;
1121 {
1122   register struct display *d1, *d;
1123
1124   if (!display_chain)
1125     error ("No display number %d.", num);
1126
1127   if (display_chain->number == num)
1128     {
1129       d1 = display_chain;
1130       display_chain = d1->next;
1131       free_display (d1);
1132     }
1133   else
1134     for (d = display_chain; ; d = d->next)
1135       {
1136         if (d->next == 0)
1137           error ("No display number %d.", num);
1138         if (d->next->number == num)
1139           {
1140             d1 = d->next;
1141             d->next = d1->next;
1142             free_display (d1);
1143             break;
1144           }
1145       }
1146 }
1147
1148 /* Delete some values from the auto-display chain.
1149    Specify the element numbers.  */
1150
1151 static void
1152 undisplay_command (args)
1153      char *args;
1154 {
1155   register char *p = args;
1156   register char *p1;
1157   register int num;
1158
1159   if (args == 0)
1160     {
1161       if (query ("Delete all auto-display expressions? "))
1162         clear_displays ();
1163       dont_repeat ();
1164       return;
1165     }
1166
1167   while (*p)
1168     {
1169       p1 = p;
1170       while (*p1 >= '0' && *p1 <= '9') p1++;
1171       if (*p1 && *p1 != ' ' && *p1 != '\t')
1172         error ("Arguments must be display numbers.");
1173
1174       num = atoi (p);
1175
1176       delete_display (num);
1177
1178       p = p1;
1179       while (*p == ' ' || *p == '\t') p++;
1180     }
1181   dont_repeat ();
1182 }
1183
1184 /* Display a single auto-display.  
1185    Do nothing if the display cannot be printed in the current context,
1186    or if the display is disabled. */
1187
1188 static void
1189 do_one_display (d)
1190      struct display *d;
1191 {
1192   int within_current_scope;
1193
1194   if (d->status == disabled)
1195     return;
1196
1197   if (d->block)
1198     within_current_scope = contained_in (get_selected_block (), d->block);
1199   else
1200     within_current_scope = 1;
1201   if (!within_current_scope)
1202     return;
1203
1204   current_display_number = d->number;
1205
1206   printf_filtered ("%d: ", d->number);
1207   if (d->format.size)
1208     {
1209       CORE_ADDR addr;
1210       
1211       printf_filtered ("x/");
1212       if (d->format.count != 1)
1213         printf_filtered ("%d", d->format.count);
1214       printf_filtered ("%c", d->format.format);
1215       if (d->format.format != 'i' && d->format.format != 's')
1216         printf_filtered ("%c", d->format.size);
1217       printf_filtered (" ");
1218       print_expression (d->exp, stdout);
1219       if (d->format.count != 1)
1220         printf_filtered ("\n");
1221       else
1222         printf_filtered ("  ");
1223       
1224       addr = value_as_pointer (evaluate_expression (d->exp));
1225       if (d->format.format == 'i')
1226         addr = ADDR_BITS_REMOVE (addr);
1227       
1228       do_examine (d->format, addr);
1229     }
1230   else
1231     {
1232       if (d->format.format)
1233         printf_filtered ("/%c ", d->format.format);
1234       print_expression (d->exp, stdout);
1235       printf_filtered (" = ");
1236       print_formatted (evaluate_expression (d->exp),
1237                        d->format.format, d->format.size);
1238       printf_filtered ("\n");
1239     }
1240
1241   fflush (stdout);
1242   current_display_number = -1;
1243 }
1244
1245 /* Display all of the values on the auto-display chain which can be
1246    evaluated in the current scope.  */
1247
1248 void
1249 do_displays ()
1250 {
1251   register struct display *d;
1252
1253   for (d = display_chain; d; d = d->next)
1254     do_one_display (d);
1255 }
1256
1257 /* Delete the auto-display which we were in the process of displaying.
1258    This is done when there is an error or a signal.  */
1259
1260 void
1261 disable_display (num)
1262      int num;
1263 {
1264   register struct display *d;
1265
1266   for (d = display_chain; d; d = d->next)
1267     if (d->number == num)
1268       {
1269         d->status = disabled;
1270         return;
1271       }
1272   printf ("No display number %d.\n", num);
1273 }
1274   
1275 void
1276 disable_current_display ()
1277 {
1278   if (current_display_number >= 0)
1279     {
1280       disable_display (current_display_number);
1281       fprintf (stderr, "Disabling display %d to avoid infinite recursion.\n",
1282                current_display_number);
1283     }
1284   current_display_number = -1;
1285 }
1286
1287 static void
1288 display_info ()
1289 {
1290   register struct display *d;
1291
1292   if (!display_chain)
1293     printf ("There are no auto-display expressions now.\n");
1294   else
1295       printf_filtered ("Auto-display expressions now in effect:\n\
1296 Num Enb Expression\n");
1297
1298   for (d = display_chain; d; d = d->next)
1299     {
1300       printf_filtered ("%d:   %c  ", d->number, "ny"[(int)d->status]);
1301       if (d->format.size)
1302         printf_filtered ("/%d%c%c ", d->format.count, d->format.size,
1303                 d->format.format);
1304       else if (d->format.format)
1305         printf_filtered ("/%c ", d->format.format);
1306       print_expression (d->exp, stdout);
1307       if (d->block && !contained_in (get_selected_block (), d->block))
1308         printf_filtered (" (cannot be evaluated in the current context)");
1309       printf_filtered ("\n");
1310       fflush (stdout);
1311     }
1312 }
1313
1314 void
1315 enable_display (args)
1316      char *args;
1317 {
1318   register char *p = args;
1319   register char *p1;
1320   register int num;
1321   register struct display *d;
1322
1323   if (p == 0)
1324     {
1325       for (d = display_chain; d; d = d->next)
1326         d->status = enabled;
1327     }
1328   else
1329     while (*p)
1330       {
1331         p1 = p;
1332         while (*p1 >= '0' && *p1 <= '9')
1333           p1++;
1334         if (*p1 && *p1 != ' ' && *p1 != '\t')
1335           error ("Arguments must be display numbers.");
1336         
1337         num = atoi (p);
1338         
1339         for (d = display_chain; d; d = d->next)
1340           if (d->number == num)
1341             {
1342               d->status = enabled;
1343               goto win;
1344             }
1345         printf ("No display number %d.\n", num);
1346       win:
1347         p = p1;
1348         while (*p == ' ' || *p == '\t')
1349           p++;
1350       }
1351 }
1352
1353 /* ARGSUSED */
1354 void
1355 disable_display_command (args, from_tty)
1356      char *args;
1357      int from_tty;
1358 {
1359   register char *p = args;
1360   register char *p1;
1361   register struct display *d;
1362
1363   if (p == 0)
1364     {
1365       for (d = display_chain; d; d = d->next)
1366         d->status = disabled;
1367     }
1368   else
1369     while (*p)
1370       {
1371         p1 = p;
1372         while (*p1 >= '0' && *p1 <= '9')
1373           p1++;
1374         if (*p1 && *p1 != ' ' && *p1 != '\t')
1375           error ("Arguments must be display numbers.");
1376         
1377         disable_display (atoi (p));
1378
1379         p = p1;
1380         while (*p == ' ' || *p == '\t')
1381           p++;
1382       }
1383 }
1384
1385 \f
1386 /* Print the value in stack frame FRAME of a variable
1387    specified by a struct symbol.  */
1388
1389 void
1390 print_variable_value (var, frame, stream)
1391      struct symbol *var;
1392      FRAME frame;
1393      FILE *stream;
1394 {
1395   value val = read_var_value (var, frame);
1396   value_print (val, stream, 0, Val_pretty_default);
1397 }
1398
1399 /* Print the arguments of a stack frame, given the function FUNC
1400    running in that frame (as a symbol), the info on the frame,
1401    and the number of args according to the stack frame (or -1 if unknown).  */
1402
1403 /* References here and elsewhere to "number of args according to the
1404    stack frame" appear in all cases to refer to "number of ints of args
1405    according to the stack frame".  At least for VAX, i386, isi.  */
1406
1407 void
1408 print_frame_args (func, fi, num, stream)
1409      struct symbol *func;
1410      struct frame_info *fi;
1411      int num;
1412      FILE *stream;
1413 {
1414   struct block *b;
1415   int nsyms = 0;
1416   int first = 1;
1417   register int i;
1418   register struct symbol *sym;
1419   register value val;
1420   /* Offset of next stack argument beyond the one we have seen that is
1421      at the highest offset.
1422      -1 if we haven't come to a stack argument yet.  */
1423   long highest_offset = -1;
1424   int arg_size;
1425   /* Number of ints of arguments that we have printed so far.  */
1426   int args_printed = 0;
1427
1428   if (func)
1429     {
1430       b = SYMBOL_BLOCK_VALUE (func);
1431       nsyms = BLOCK_NSYMS (b);
1432     }
1433
1434   for (i = 0; i < nsyms; i++)
1435     {
1436       QUIT;
1437       sym = BLOCK_SYM (b, i);
1438
1439       /* Keep track of the highest stack argument offset seen, and
1440          skip over any kinds of symbols we don't care about.  */
1441
1442       switch (SYMBOL_CLASS (sym)) {
1443       case LOC_ARG:
1444       case LOC_REF_ARG:
1445         {
1446           long current_offset = SYMBOL_VALUE (sym);
1447
1448           arg_size = TYPE_LENGTH (SYMBOL_TYPE (sym));
1449           
1450           /* Compute address of next argument by adding the size of
1451              this argument and rounding to an int boundary.  */
1452           current_offset
1453             = ((current_offset + arg_size + sizeof (int) - 1)
1454                & ~(sizeof (int) - 1));
1455
1456           /* If this is the highest offset seen yet, set highest_offset.  */
1457           if (highest_offset == -1
1458               || (current_offset > highest_offset))
1459             highest_offset = current_offset;
1460
1461           /* Add the number of ints we're about to print to args_printed.  */
1462           args_printed += (arg_size + sizeof (int) - 1) / sizeof (int);
1463         }
1464
1465       /* We care about types of symbols, but don't need to keep track of
1466          stack offsets in them.  */
1467       case LOC_REGPARM:
1468       case LOC_LOCAL_ARG:
1469         break;
1470
1471       /* Other types of symbols we just skip over.  */
1472       default:
1473         continue;
1474       }
1475
1476       /* We have to re-look-up the symbol because arguments often have
1477          two entries (one a parameter, one a register or local), and the one
1478          we want is the non-parm, which lookup_symbol will find for
1479          us.  After this, sym could be any SYMBOL_CLASS...  */
1480       sym = lookup_symbol (SYMBOL_NAME (sym),
1481                     b, VAR_NAMESPACE, (int *)NULL, (struct symtab **)NULL);
1482
1483       /* Print the current arg.  */
1484       if (! first)
1485         fprintf_filtered (stream, ", ");
1486       wrap_here ("    ");
1487       fprint_symbol (stream, SYMBOL_NAME (sym));
1488       fputs_filtered ("=", stream);
1489
1490       /* Avoid value_print because it will deref ref parameters.  We just
1491          want to print their addresses.  Print ??? for args whose address
1492          we do not know.  We pass 2 as "recurse" to val_print because our
1493          standard indentation here is 4 spaces, and val_print indents
1494          2 for each recurse.  */
1495       val = read_var_value (sym, FRAME_INFO_ID (fi));
1496       if (val)
1497         val_print (VALUE_TYPE (val), VALUE_CONTENTS (val), VALUE_ADDRESS (val),
1498                    stream, 0, 0, 2, Val_no_prettyprint);
1499       else
1500         fputs_filtered ("???", stream);
1501       first = 0;
1502     }
1503
1504   /* Don't print nameless args in situations where we don't know
1505      enough about the stack to find them.  */
1506   if (num != -1)
1507     {
1508       long start;
1509       CORE_ADDR addr;
1510
1511       if (highest_offset == -1)
1512         start = FRAME_ARGS_SKIP;
1513       else
1514         start = highest_offset;
1515
1516       addr = FRAME_ARGS_ADDRESS (fi);
1517       if (addr)
1518         print_frame_nameless_args (addr, start, num - args_printed,
1519                                    first, stream);
1520     }
1521 }
1522
1523 /* Print nameless args on STREAM.
1524    ARGSADDR is the address of the arglist, START is the offset
1525    of the first nameless arg, and NUM is the number of nameless args to
1526    print.  FIRST is nonzero if this is the first argument (not just
1527    the first nameless arg).  */
1528 static void
1529 print_frame_nameless_args (argsaddr, start, num, first, stream)
1530      CORE_ADDR argsaddr;
1531      long start;
1532      int num;
1533      int first;
1534      FILE *stream;
1535 {
1536   int i;
1537   for (i = 0; i < num; i++)
1538     {
1539       QUIT;
1540       if (!first)
1541         fprintf_filtered (stream, ", ");
1542 #ifndef PRINT_TYPELESS_INTEGER
1543       fprintf_filtered (stream, "%d",
1544                read_memory_integer (argsaddr + start, sizeof (int)));
1545 #else
1546       PRINT_TYPELESS_INTEGER (stream, builtin_type_int,
1547                               (LONGEST)
1548                               read_memory_integer (argsaddr + start,
1549                                                    sizeof (int)));
1550 #endif
1551       first = 0;
1552       start += sizeof (int);
1553     }
1554 }
1555 \f
1556 /* ARGSUSED */
1557 static void
1558 printf_command (arg, from_tty)
1559      char *arg;
1560      int from_tty;
1561 {
1562   register char *f;
1563   register char *s = arg;
1564   char *string;
1565   value *val_args;
1566   int nargs = 0;
1567   int allocated_args = 20;
1568   char *arg_bytes;
1569
1570   val_args = (value *) xmalloc (allocated_args * sizeof (value));
1571
1572   if (s == 0)
1573     error_no_arg ("format-control string and values to print");
1574
1575   /* Skip white space before format string */
1576   while (*s == ' ' || *s == '\t') s++;
1577
1578   /* A format string should follow, enveloped in double quotes */
1579   if (*s++ != '"')
1580     error ("Bad format string, missing '\"'.");
1581
1582   /* Parse the format-control string and copy it into the string STRING,
1583      processing some kinds of escape sequence.  */
1584
1585   f = string = (char *) alloca (strlen (s) + 1);
1586   while (*s != '"')
1587     {
1588       int c = *s++;
1589       switch (c)
1590         {
1591         case '\0':
1592           error ("Bad format string, non-terminated '\"'.");
1593           /* doesn't return */
1594
1595         case '\\':
1596           switch (c = *s++)
1597             {
1598             case '\\':
1599               *f++ = '\\';
1600               break;
1601             case 'n':
1602               *f++ = '\n';
1603               break;
1604             case 't':
1605               *f++ = '\t';
1606               break;
1607             case 'r':
1608               *f++ = '\r';
1609               break;
1610             case '"':
1611               *f++ = '"';
1612               break;
1613             default:
1614               /* ??? TODO: handle other escape sequences */
1615               error ("Unrecognized \\ escape character in format string.");
1616             }
1617           break;
1618
1619         default:
1620           *f++ = c;
1621         }
1622     }
1623
1624   /* Skip over " and following space and comma.  */
1625   s++;
1626   *f++ = '\0';
1627   while (*s == ' ' || *s == '\t') s++;
1628
1629   if (*s != ',' && *s != 0)
1630     error ("Invalid argument syntax");
1631
1632   if (*s == ',') s++;
1633   while (*s == ' ' || *s == '\t') s++;
1634
1635   {
1636     /* Now scan the string for %-specs and see what kinds of args they want.
1637        argclass[I] classifies the %-specs so we can give vprintf something
1638        of the right size.  */
1639  
1640     enum argclass {int_arg, string_arg, double_arg, long_long_arg};
1641     enum argclass *argclass;
1642     int nargs_wanted;
1643     int argindex;
1644     int lcount;
1645     int i;
1646  
1647     argclass = (enum argclass *) alloca (strlen (s) * sizeof *argclass);
1648     nargs_wanted = 0;
1649     f = string;
1650     while (*f)
1651       if (*f++ == '%')
1652         {
1653           lcount = 0;
1654           while (strchr ("0123456789.hlL-+ #", *f)) 
1655             {
1656               if (*f == 'l' || *f == 'L')
1657                 lcount++;
1658               f++;
1659             }
1660           if (*f == 's')
1661             argclass[nargs_wanted++] = string_arg;
1662           else if (*f == 'e' || *f == 'f' || *f == 'g')
1663             argclass[nargs_wanted++] = double_arg;
1664           else if (lcount > 1)
1665             argclass[nargs_wanted++] = long_long_arg;
1666           else if (*f != '%')
1667             argclass[nargs_wanted++] = int_arg;
1668           f++;
1669         }
1670  
1671     /* Now, parse all arguments and evaluate them.
1672        Store the VALUEs in VAL_ARGS.  */
1673  
1674     while (*s != '\0')
1675       {
1676         char *s1;
1677         if (nargs == allocated_args)
1678           val_args = (value *) xrealloc (val_args,
1679                                          (allocated_args *= 2)
1680                                          * sizeof (value));
1681         s1 = s;
1682         val_args[nargs] = parse_to_comma_and_eval (&s1);
1683  
1684         /* If format string wants a float, unchecked-convert the value to
1685            floating point of the same size */
1686  
1687         if (argclass[nargs] == double_arg)
1688           {
1689             if (TYPE_LENGTH (VALUE_TYPE (val_args[nargs])) == sizeof (float))
1690               VALUE_TYPE (val_args[nargs]) = builtin_type_float;
1691             if (TYPE_LENGTH (VALUE_TYPE (val_args[nargs])) == sizeof (double))
1692               VALUE_TYPE (val_args[nargs]) = builtin_type_double;
1693           }
1694         nargs++;
1695         s = s1;
1696         if (*s == ',')
1697           s++;
1698       }
1699  
1700     if (nargs != nargs_wanted)
1701       error ("Wrong number of arguments for specified format-string");
1702  
1703     /* Now lay out an argument-list containing the arguments
1704        as doubles, integers and C pointers.  */
1705  
1706     arg_bytes = (char *) alloca (sizeof (double) * nargs);
1707     argindex = 0;
1708     for (i = 0; i < nargs; i++)
1709       {
1710         if (argclass[i] == string_arg)
1711           {
1712             char *str;
1713             CORE_ADDR tem;
1714             int j;
1715             tem = value_as_pointer (val_args[i]);
1716  
1717             /* This is a %s argument.  Find the length of the string.  */
1718             for (j = 0; ; j++)
1719               {
1720                 char c;
1721                 QUIT;
1722                 read_memory (tem + j, &c, 1);
1723                 if (c == 0)
1724                   break;
1725               }
1726  
1727             /* Copy the string contents into a string inside GDB.  */
1728             str = (char *) alloca (j + 1);
1729             read_memory (tem, str, j);
1730             str[j] = 0;
1731  
1732             /* Pass address of internal copy as the arg to vprintf.  */
1733             *((int *) &arg_bytes[argindex]) = (int) str;
1734             argindex += sizeof (int);
1735           }
1736         else if (VALUE_TYPE (val_args[i])->code == TYPE_CODE_FLT)
1737           {
1738             *((double *) &arg_bytes[argindex]) = value_as_double (val_args[i]);
1739             argindex += sizeof (double);
1740           }
1741         else
1742 #ifdef LONG_LONG
1743           if (argclass[i] == long_long_arg)
1744             {
1745               *(long long *) &arg_bytes[argindex] = value_as_long (val_args[i]);
1746               argindex += sizeof (long long);
1747             }
1748           else
1749 #endif
1750             {
1751               *((long *) &arg_bytes[argindex]) = value_as_long (val_args[i]);
1752               argindex += sizeof (long);
1753             }
1754       }
1755   }
1756
1757   /* There is not a standard way to make a va_list, so we need
1758      to do various things for different systems.  */
1759 #if defined (__INT_VARARGS_H)
1760   {
1761     va_list list;
1762
1763     list.__va_arg = 0;
1764     list.__va_stk = (int *) arg_bytes;
1765     list.__va_reg = (int *) arg_bytes;
1766     vprintf (string, list);
1767   }
1768 #else /* No __INT_VARARGS_H.  */
1769   vprintf (string, arg_bytes);
1770 #endif /* No __INT_VARARGS_H.  */
1771 }
1772 \f
1773 /* Helper function for asdump_command.  Finds the bounds of a function
1774    for a specified section of text.  PC is an address within the
1775    function which you want bounds for; *LOW and *HIGH are set to the
1776    beginning (inclusive) and end (exclusive) of the function.  This
1777    function returns 1 on success and 0 on failure.  */
1778
1779 static int
1780 containing_function_bounds (pc, low, high)
1781      CORE_ADDR pc, *low, *high;
1782 {
1783   int scan;
1784
1785   if (!find_pc_partial_function (pc, 0, low))
1786     return 0;
1787
1788   scan = *low;
1789   do {
1790     scan++;
1791     if (!find_pc_partial_function (scan, 0, high))
1792       return 0;
1793   } while (*low == *high);
1794
1795   return 1;
1796 }
1797
1798 /* Dump a specified section of assembly code.  With no command line
1799    arguments, this command will dump the assembly code for the
1800    function surrounding the pc value in the selected frame.  With one
1801    argument, it will dump the assembly code surrounding that pc value.
1802    Two arguments are interpeted as bounds within which to dump
1803    assembly.  */
1804
1805 /* ARGSUSED */
1806 static void
1807 disassemble_command (arg, from_tty)
1808      char *arg;
1809      int from_tty;
1810 {
1811   CORE_ADDR low, high;
1812   CORE_ADDR pc;
1813   char *space_index;
1814
1815   if (!arg)
1816     {
1817       if (!selected_frame)
1818         error ("No frame selected.\n");
1819
1820       pc = get_frame_pc (selected_frame);
1821       if (!containing_function_bounds (pc, &low, &high))
1822         error ("No function contains pc specified by selected frame.\n");
1823     }
1824   else if (!(space_index = (char *) strchr (arg, ' ')))
1825     {
1826       /* One argument.  */
1827       pc = parse_and_eval_address (arg);
1828       if (!containing_function_bounds (pc, &low, &high))
1829         error ("No function contains specified pc.\n");
1830     }
1831   else
1832     {
1833       /* Two arguments.  */
1834       *space_index = '\0';
1835       low = parse_and_eval_address (arg);
1836       high = parse_and_eval_address (space_index + 1);
1837     }
1838
1839   printf_filtered ("Dump of assembler code ");
1840   if (!space_index)
1841     {
1842       char *name;
1843       find_pc_partial_function (pc, &name, 0);
1844       printf_filtered ("for function %s:\n", name);
1845     }
1846   else
1847     printf_filtered ("from %s ", local_hex_string(low));
1848     printf_filtered ("to %s:\n", local_hex_string(high));
1849
1850   /* Dump the specified range.  */
1851   for (pc = low; pc < high; )
1852     {
1853       QUIT;
1854       print_address (pc, stdout);
1855       printf_filtered (":\t");
1856       pc += print_insn (pc, stdout);
1857       printf_filtered ("\n");
1858     }
1859   printf_filtered ("End of assembler dump.\n");
1860   fflush (stdout);
1861 }
1862
1863 \f
1864 void
1865 _initialize_printcmd ()
1866 {
1867   current_display_number = -1;
1868
1869   add_info ("address", address_info,
1870            "Describe where variable VAR is stored.");
1871
1872   add_com ("x", class_vars, x_command,
1873            "Examine memory: x/FMT ADDRESS.\n\
1874 ADDRESS is an expression for the memory address to examine.\n\
1875 FMT is a repeat count followed by a format letter and a size letter.\n\
1876 Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),\n\
1877  f(float), a(address), i(instruction), c(char) and s(string).\n\
1878 Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).\n\
1879   g is meaningful only with f, for type double.\n\
1880 The specified number of objects of the specified size are printed\n\
1881 according to the format.\n\n\
1882 Defaults for format and size letters are those previously used.\n\
1883 Default count is 1.  Default address is following last thing printed\n\
1884 with this command or \"print\".");
1885
1886   add_com ("disassemble", class_vars, disassemble_command,
1887            "Disassemble a specified section of memory.\n\
1888 Default is the function surrounding the pc of the selected frame.\n\
1889 With a single argument, the function surrounding that address is dumped.\n\
1890 Two arguments are taken as a range of memory to dump.");
1891
1892   add_com ("ptype", class_vars, ptype_command,
1893            "Print definition of type TYPE.\n\
1894 Argument may be a type name defined by typedef, or \"struct STRUCTNAME\"\n\
1895 or \"union UNIONNAME\" or \"enum ENUMNAME\".\n\
1896 The selected stack frame's lexical context is used to look up the name.");
1897
1898   add_com ("whatis", class_vars, whatis_command,
1899            "Print data type of expression EXP.");
1900
1901 #if 0
1902   add_com ("whereis", class_vars, whereis_command,
1903            "Print line number and file of definition of variable.");
1904 #endif
1905   
1906   add_info ("display", display_info,
1907             "Expressions to display when program stops, with code numbers.");
1908
1909   add_cmd ("undisplay", class_vars, undisplay_command,
1910            "Cancel some expressions to be displayed when program stops.\n\
1911 Arguments are the code numbers of the expressions to stop displaying.\n\
1912 No argument means cancel all automatic-display expressions.\n\
1913 \"delete display\" has the same effect as this command.\n\
1914 Do \"info display\" to see current list of code numbers.",
1915                   &cmdlist);
1916
1917   add_com ("display", class_vars, display_command,
1918            "Print value of expression EXP each time the program stops.\n\
1919 /FMT may be used before EXP as in the \"print\" command.\n\
1920 /FMT \"i\" or \"s\" or including a size-letter is allowed,\n\
1921 as in the \"x\" command, and then EXP is used to get the address to examine\n\
1922 and examining is done as in the \"x\" command.\n\n\
1923 With no argument, display all currently requested auto-display expressions.\n\
1924 Use \"undisplay\" to cancel display requests previously made.");
1925
1926   add_cmd ("display", class_vars, enable_display, 
1927            "Enable some expressions to be displayed when program stops.\n\
1928 Arguments are the code numbers of the expressions to resume displaying.\n\
1929 No argument means enable all automatic-display expressions.\n\
1930 Do \"info display\" to see current list of code numbers.", &enablelist);
1931
1932   add_cmd ("display", class_vars, disable_display_command, 
1933            "Disable some expressions to be displayed when program stops.\n\
1934 Arguments are the code numbers of the expressions to stop displaying.\n\
1935 No argument means disable all automatic-display expressions.\n\
1936 Do \"info display\" to see current list of code numbers.", &disablelist);
1937
1938   add_cmd ("display", class_vars, undisplay_command, 
1939            "Cancel some expressions to be displayed when program stops.\n\
1940 Arguments are the code numbers of the expressions to stop displaying.\n\
1941 No argument means cancel all automatic-display expressions.\n\
1942 Do \"info display\" to see current list of code numbers.", &deletelist);
1943
1944   add_com ("printf", class_vars, printf_command,
1945         "printf \"printf format string\", arg1, arg2, arg3, ..., argn\n\
1946 This is useful for formatted output in user-defined commands.");
1947   add_com ("output", class_vars, output_command,
1948            "Like \"print\" but don't put in value history and don't print newline.\n\
1949 This is useful in user-defined commands.");
1950
1951   add_prefix_cmd ("set", class_vars, set_command,
1952 "Perform an assignment VAR = EXP.\n\
1953 You must type the \"=\".  VAR may be a debugger \"convenience\" variable\n\
1954 (names starting with $), a register (a few standard names starting with $),\n\
1955 or an actual variable in the program being debugged.  EXP is any expression.\n\
1956 Use \"set variable\" for variables with names identical to set subcommands.\n\
1957 \nWith a subcommand, this command modifies parts of the gdb environment.\n\
1958 You can see these environment settings with the \"show\" command.",
1959                   &setlist, "set ", 1, &cmdlist);
1960
1961   /* "call" is the same as "set", but handy for dbx users to call fns. */
1962   add_com ("call", class_vars, call_command,
1963            "Call a function in the inferior process.\n\
1964 The argument is the function name and arguments, in the notation of the\n\
1965 current working language.  The result is printed and saved in the value\n\
1966 history, if it is not void.");
1967
1968   add_cmd ("variable", class_vars, set_command,
1969            "Perform an assignment VAR = EXP.\n\
1970 You must type the \"=\".  VAR may be a debugger \"convenience\" variable\n\
1971 (names starting with $), a register (a few standard names starting with $),\n\
1972 or an actual variable in the program being debugged.  EXP is any expression.\n\
1973 This may usually be abbreviated to simply \"set\".",
1974            &setlist);
1975
1976   add_com ("print", class_vars, print_command,
1977            concat ("Print value of expression EXP.\n\
1978 Variables accessible are those of the lexical environment of the selected\n\
1979 stack frame, plus all those whose scope is global or an entire file.\n\
1980 \n\
1981 $NUM gets previous value number NUM.  $ and $$ are the last two values.\n\
1982 $$NUM refers to NUM'th value back from the last one.\n\
1983 Names starting with $ refer to registers (with the values they would have\n\
1984 if the program were to return to the stack frame now selected, restoring\n\
1985 all registers saved by frames farther in) or else to debugger\n\
1986 \"convenience\" variables (any such name not a known register).\n\
1987 Use assignment expressions to give values to convenience variables.\n",
1988                    "\n\
1989 {TYPE}ADREXP refers to a datum of data type TYPE, located at address ADREXP.\n\
1990 @ is a binary operator for treating consecutive data objects\n\
1991 anywhere in memory as an array.  FOO@NUM gives an array whose first\n\
1992 element is FOO, whose second element is stored in the space following\n\
1993 where FOO is stored, etc.  FOO must be an expression whose value\n\
1994 resides in memory.\n",
1995                    "\n\
1996 EXP may be preceded with /FMT, where FMT is a format letter\n\
1997 but no count or size letter (see \"x\" command)."));
1998   add_com_alias ("p", "print", class_vars, 1);
1999
2000   add_com ("inspect", class_vars, inspect_command,
2001 "Same as \"print\" command, except that if you are running in the epoch\n\
2002 environment, the value is printed in its own window.");
2003 }
This page took 0.133356 seconds and 4 git commands to generate.