gdb-2.8
[external/binutils.git] / gdb / printcmd.c
1 /* Print values for GNU debugger GDB.
2    Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc.
3
4 GDB is distributed in the hope that it will be useful, but WITHOUT ANY
5 WARRANTY.  No author or distributor accepts responsibility to anyone
6 for the consequences of using it or for whether it serves any
7 particular purpose or works at all, unless he says so in writing.
8 Refer to the GDB General Public License for full details.
9
10 Everyone is granted permission to copy, modify and redistribute GDB,
11 but only under the conditions described in the GDB General Public
12 License.  A copy of this license is supposed to have been given to you
13 along with GDB so you can know your rights and responsibilities.  It
14 should be in a file named COPYING.  Among other things, the copyright
15 notice and this notice must be preserved on all copies.
16
17 In other words, go ahead and share GDB, but don't try to stop
18 anyone else from sharing it farther.  Help stamp out software hoarding!
19 */
20
21 #include <stdio.h>
22 #include "defs.h"
23 #include "initialize.h"
24 #include "param.h"
25 #include "symtab.h"
26 #include "value.h"
27 #include "expression.h"
28
29 struct format_data
30 {
31   int count;
32   char format;
33   char size;
34 };
35
36 /* Last specified output format.  */
37
38 static char last_format = 'x';
39
40 /* Last specified examination size.  'b', 'h', 'w' or `q'.  */
41
42 static char last_size = 'w';
43
44 /* Default address to examine next.  */
45
46 static CORE_ADDR next_address;
47
48 /* Last address examined.  */
49
50 static CORE_ADDR last_examine_address;
51
52 /* Contents of last address examined.
53    This is not valid past the end of the `x' command!  */
54
55 static value last_examine_value;
56
57 /* Number of auto-display expression currently being displayed.
58    So that we can deleted it if we get an error or a signal within it.
59    -1 when not doing one.  */
60
61 int current_display_number;
62
63 static void do_one_display ();
64
65 void do_displays ();
66 void print_address ();
67 void print_scalar_formatted ();
68
69 START_FILE
70 \f
71 /* Decode a format specification.  *STRING_PTR should point to it.
72    OFORMAT and OSIZE are used as defaults for the format and size
73    if none are given in the format specification.
74    The structure returned describes all the data
75    found in the specification.  In addition, *STRING_PTR is advanced
76    past the specification and past all whitespace following it.  */
77
78 struct format_data
79 decode_format (string_ptr, oformat, osize)
80      char **string_ptr;
81      char oformat;
82      char osize;
83 {
84   struct format_data val;
85   register char *p = *string_ptr;
86
87   val.format = oformat;
88   val.size = osize;
89   val.count = 1;
90
91   if (*p >= '0' && *p <= '9')
92     val.count = atoi (p);
93   while (*p >= '0' && *p <= '9') p++;
94
95   /* Now process size or format letters that follow.  */
96
97   while (1)
98     {
99       if (*p == 'b' || *p == 'h' || *p == 'w' || *p == 'g')
100         val.size = *p++;
101       else if (*p >= 'a' && *p <= 'z')
102         val.format = *p++;
103       else
104         break;
105     }
106
107   /* Make sure 'g' size is not used on integer types.  */
108   if (val.size == 'g' && val.format != 'f')
109     val.size = 'w';
110
111   while (*p == ' ' || *p == '\t') p++;
112   *string_ptr = p;
113
114   return val;
115 }
116 \f
117 /* Print value VAL on stdout according to FORMAT, a letter or 0.
118    Do not end with a newline.
119    0 means print VAL according to its own type.
120    SIZE is the letter for the size of datum being printed.
121    This is used to pad hex numbers so they line up.  */
122
123 static void
124 print_formatted (val, format, size)
125      register value val;
126      register char format;
127      char size;
128 {
129   register CORE_ADDR val_long;
130   int len = TYPE_LENGTH (VALUE_TYPE (val));
131
132   if (VALUE_LVAL (val) == lval_memory)
133     next_address = VALUE_ADDRESS (val) + len;
134
135   switch (format)
136     {
137     case 's':
138       next_address = VALUE_ADDRESS (val)
139         + value_print (value_addr (val), stdout, 0);
140       break;
141
142     case 'i':
143       next_address = VALUE_ADDRESS (val)
144         + print_insn (VALUE_ADDRESS (val), stdout);
145       break;
146
147     default:
148       if (format == 0
149           || TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_ARRAY
150           || TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_STRUCT
151           || TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_UNION)
152         value_print (val, stdout, format);
153       else
154         print_scalar_formatted (VALUE_CONTENTS (val), VALUE_TYPE (val),
155                                 format, size, stdout);
156     }
157 }
158
159 /* Print a scalar of data of type TYPE, pointed to in GDB by VALADDR,
160    according to letters FORMAT and SIZE on STREAM.
161    FORMAT may not be zero.  Formats s and i are not supported at this level.
162
163    This is how the elements of an array or structure are printed
164    with a format.  */
165
166 void
167 print_scalar_formatted (valaddr, type, format, size, stream)
168      char *valaddr;
169      struct type *type;
170      char format;
171      int size;
172      FILE *stream;
173 {
174   long val_long;
175   int len = TYPE_LENGTH (type);
176
177   val_long = unpack_long (type, valaddr);
178
179   /* If value is unsigned, truncate it in case negative.  */
180   if (format != 'd')
181     {
182       if (len == sizeof (char))
183         val_long &= (1 << 8 * sizeof(char)) - 1;
184       else if (len == sizeof (short))
185         val_long &= (1 << 8 * sizeof(short)) - 1;
186     }
187
188   switch (format)
189     {
190     case 'x':
191       switch (size)
192         {
193         case 'b':
194           printf ("0x%02x", val_long);
195           break;
196         case 'h':
197           printf ("0x%04x", val_long);
198           break;
199         case 0:         /* no size specified, like in print */
200         case 'w':
201           printf ("0x%08x", val_long);
202           break;
203         case 'g':
204           printf ("0x%16x", val_long);
205           break;
206         default:
207           error ("Undefined output size \"%c\".", size);
208         }
209       break;
210
211     case 'd':
212       printf ("%d", val_long);
213       break;
214
215     case 'u':
216       printf ("%u", val_long);
217       break;
218
219     case 'o':
220       if (val_long)
221         printf ("0%o", val_long);
222       else
223         printf ("0");
224       break;
225
226     case 'a':
227       print_address (val_long, stream);
228       break;
229
230     case 'c':
231       value_print (value_from_long (builtin_type_char, val_long), stream, 0);
232       break;
233
234     case 'f':
235       if (len == sizeof (float))
236         type = builtin_type_float;
237       if (len == sizeof (double))
238         type = builtin_type_double;
239 #ifdef IEEE_FLOAT
240       if (is_nan (unpack_double (type, valaddr)))
241         {
242           printf ("Nan");
243           break;
244         }
245 #endif
246       printf ("%g", unpack_double (type, valaddr));
247       break;
248
249     case 0:
250       abort ();
251
252     default:
253       error ("Undefined output format \"%c\".", format);
254     }
255 }
256
257 /* Specify default address for `x' command.
258    `info lines' uses this.  */
259
260 void
261 set_next_address (addr)
262      CORE_ADDR addr;
263 {
264   next_address = addr;
265
266   /* Make address available to the user as $_.  */
267   set_internalvar (lookup_internalvar ("_"),
268                    value_from_long (builtin_type_int, addr));
269 }
270
271 /* Print address ADDR symbolically on STREAM.
272    First print it as a number.  Then perhaps print
273    <SYMBOL + OFFSET> after the number.  */
274
275 void
276 print_address (addr, stream)
277      CORE_ADDR addr;
278      FILE *stream;
279 {
280   register int i;
281
282   fprintf (stream, "0x%x", addr);
283
284   i = find_pc_misc_function (addr);
285   if (i >= 0)
286     if (misc_function_vector[i].address != addr)
287       fprintf (stream, " <%s+%d>",
288                misc_function_vector[i].name,
289                addr - misc_function_vector[i].address);
290     else
291       fprintf (stream, " <%s>", misc_function_vector[i].name);
292
293 }
294 \f
295 /* Examine data at address ADDR in format FMT.
296    Fetch it from memory and print on stdout.  */
297
298 static void
299 do_examine (fmt, addr)
300      struct format_data fmt;
301      CORE_ADDR addr;
302 {
303   register char format = 0;
304   register char size;
305   register int count = 1;
306   struct type *val_type;
307   register int i;
308   register int maxelts;
309
310   format = fmt.format;
311   size = fmt.size;
312   count = fmt.count;
313   next_address = addr;
314
315   /* String or instruction format implies fetch single bytes
316      regardless of the specified size.  */
317   if (format == 's' || format == 'i')
318     size = 'b';
319
320   if (size == 'b')
321     val_type = builtin_type_char;
322   else if (size == 'h')
323     val_type = builtin_type_short;
324   else if (size == 'w')
325     val_type = builtin_type_long;
326   else if (size == 'g')
327     val_type = builtin_type_double;
328
329   maxelts = 8;
330   if (size == 'w')
331     maxelts = 4;
332   if (size == 'g')
333     maxelts = 2;
334   if (format == 's' || format == 'i')
335     maxelts = 1;
336
337   /* Print as many objects as specified in COUNT, at most maxelts per line,
338      with the address of the next one at the start of each line.  */
339
340   while (count > 0)
341     {
342       print_address (next_address, stdout);
343       fputc (':', stdout);
344       for (i = maxelts;
345            i > 0 && count > 0;
346            i--, count--)
347         {
348           fputc ('\t', stdout);
349           /* Note that this sets next_address for the next object.  */
350           last_examine_address = next_address;
351           last_examine_value = value_at (val_type, next_address);
352           print_formatted (last_examine_value, format, size);
353         }
354       fputc ('\n', stdout);
355       fflush (stdout);
356     }
357 }
358 \f
359 static void
360 validate_format (fmt, cmdname)
361      struct format_data fmt;
362      char *cmdname;
363 {
364   if (fmt.size != 0)
365     error ("Size letters are meaningless in \"%s\" command.", cmdname);
366   if (fmt.count != 1)
367     error ("Item count other than 1 is meaningless in \"%s\" command.",
368            cmdname);
369   if (fmt.format == 'i' || fmt.format == 's')
370     error ("Format letter \"%c\" is meaningless in \"%s\" command.",
371            fmt.format, cmdname);
372 }
373
374 static void
375 print_command (exp)
376      char *exp;
377 {
378   struct expression *expr;
379   register struct cleanup *old_chain = 0;
380   register char format = 0;
381   register value val;
382   struct format_data fmt;
383   int histindex;
384   int cleanup = 0;
385
386   if (exp && *exp == '/')
387     {
388       exp++;
389       fmt = decode_format (&exp, last_format, 0);
390       validate_format (fmt, "print");
391       last_format = format = fmt.format;
392     }
393
394   if (exp && *exp)
395     {
396       expr = parse_c_expression (exp);
397       old_chain = make_cleanup (free_current_contents, &expr);
398       cleanup = 1;
399       val = evaluate_expression (expr);
400     }
401   else
402     val = access_value_history (0);
403
404   histindex = record_latest_value (val);
405   printf ("$%d = ", histindex);
406
407   print_formatted (val, format, fmt.size);
408   printf ("\n");
409
410   if (cleanup)
411     do_cleanups (old_chain);
412 }
413
414 static void
415 output_command (exp)
416      char *exp;
417 {
418   struct expression *expr;
419   register struct cleanup *old_chain;
420   register char format = 0;
421   register value val;
422   struct format_data fmt;
423
424   if (exp && *exp == '/')
425     {
426       exp++;
427       fmt = decode_format (&exp, 0, 0);
428       validate_format (fmt, "print");
429       format = fmt.format;
430     }
431
432   expr = parse_c_expression (exp);
433   old_chain = make_cleanup (free_current_contents, &expr);
434
435   val = evaluate_expression (expr);
436
437   print_formatted (val, format, fmt.size);
438
439   do_cleanups (old_chain);
440 }
441
442 static void
443 set_command (exp)
444      char *exp;
445 {
446   struct expression *expr = parse_c_expression (exp);
447   register struct cleanup *old_chain
448     = make_cleanup (free_current_contents, &expr);
449   evaluate_expression (expr);
450   do_cleanups (old_chain);
451 }
452
453 static void
454 address_info (exp)
455      char *exp;
456 {
457   register struct symbol *sym;
458   register CORE_ADDR val;
459
460   if (exp == 0)
461     error ("Argument required.");
462
463   sym = lookup_symbol (exp, get_selected_block (), VAR_NAMESPACE);
464   if (sym == 0)
465     {
466       register int i;
467
468       for (i = 0; i < misc_function_count; i++)
469         if (!strcmp (misc_function_vector[i].name, exp))
470           break;
471
472       if (i < misc_function_count)
473         printf ("Symbol \"%s\" is at 0x%x in a file compiled without -g.\n",
474                 exp, misc_function_vector[i].address);
475       else
476         error ("No symbol \"%s\" in current context.", exp);
477       return;
478     }
479
480   printf ("Symbol \"%s\" is ", SYMBOL_NAME (sym));
481   val = SYMBOL_VALUE (sym);
482
483   switch (SYMBOL_CLASS (sym))
484     {
485     case LOC_CONST:
486     case LOC_CONST_BYTES:
487       printf ("constant");
488       break;
489
490     case LOC_LABEL:
491       printf ("a label at address 0x%x", val);
492       break;
493
494     case LOC_REGISTER:
495       printf ("a variable in register %s", reg_names[val]);
496       break;
497
498     case LOC_STATIC:
499       printf ("static at address 0x%x", val);
500       break;
501
502     case LOC_ARG:
503       printf ("an argument at offset %d", val);
504       break;
505
506     case LOC_LOCAL:
507       printf ("a local variable at frame offset %d", val);
508       break;
509
510     case LOC_TYPEDEF:
511       printf ("a typedef");
512       break;
513
514     case LOC_BLOCK:
515       printf ("a function at address 0x%x",
516               BLOCK_START (SYMBOL_BLOCK_VALUE (sym)));
517       break;
518     }
519   printf (".\n");
520 }
521 \f
522 static void
523 x_command (exp, from_tty)
524      char *exp;
525      int from_tty;
526 {
527   struct expression *expr;
528   struct format_data fmt;
529   struct cleanup *old_chain;
530
531   fmt.format = last_format;
532   fmt.size = last_size;
533   fmt.count = 1;
534
535   if (exp && *exp == '/')
536     {
537       exp++;
538       fmt = decode_format (&exp, last_format, last_size);
539       last_size = fmt.size;
540       last_format = fmt.format;
541     }
542
543   /* If we have an expression, evaluate it and use it as the address.  */
544
545   if (exp != 0 && *exp != 0)
546     {
547       expr = parse_c_expression (exp);
548       /* Cause expression not to be there any more
549          if this command is repeated with Newline.
550          But don't clobber a user-defined command's definition.  */
551       if (from_tty)
552         *exp = 0;
553       old_chain = make_cleanup (free_current_contents, &expr);
554       next_address = value_as_long (evaluate_expression (expr));
555       do_cleanups (old_chain);
556     }
557
558   do_examine (fmt, next_address);
559
560   /* Make last address examined available to the user as $_.  */
561   set_internalvar (lookup_internalvar ("_"),
562                    value_from_long (builtin_type_int, last_examine_address));
563
564   /* Make contents of last address examined available to the user as $__.  */
565   set_internalvar (lookup_internalvar ("__"), last_examine_value);
566 }
567 \f
568 /* Commands for printing types of things.  */
569
570 static void
571 whatis_command (exp)
572      char *exp;
573 {
574   struct expression *expr;
575   register value val;
576   register struct cleanup *old_chain;
577
578   if (exp)
579     {
580       expr = parse_c_expression (exp);
581       old_chain = make_cleanup (free_current_contents, &expr);
582       val = evaluate_type (expr);
583     }
584   else
585     val = access_value_history (0);
586
587   printf ("type = ");
588   type_print (VALUE_TYPE (val), "", stdout, 1);
589   printf ("\n");
590
591   if (exp)
592     do_cleanups (old_chain);
593 }
594
595 static void
596 ptype_command (typename)
597      char *typename;
598 {
599   register char *p = typename;
600   register int len;
601   extern struct block *get_current_block ();
602   register struct block *b
603     = (have_inferior_p () || have_core_file_p ()) ? get_current_block () : 0;
604   register struct type *type;
605
606   if (typename == 0)
607     error_no_arg ("type name");
608
609   while (*p && *p != ' ' && *p != '\t') p++;
610   len = p - typename;
611   while (*p == ' ' || *p == '\t') p++;
612
613   if (len == 6 && !strncmp (typename, "struct", 6))
614     type = lookup_struct (p, b);
615   else if (len == 5 && !strncmp (typename, "union", 5))
616     type = lookup_union (p, b);
617   else if (len == 4 && !strncmp (typename, "enum", 4))
618     type = lookup_enum (p, b);
619   else
620     {
621       type = lookup_typename (typename, b, 1);
622       if (type == 0)
623         {
624           register struct symbol *sym
625             = lookup_symbol (typename, b, STRUCT_NAMESPACE);
626           if (sym == 0)
627             error ("No type named %s.", typename);
628           printf ("No type named %s, but there is a ",
629                   typename);
630           switch (TYPE_CODE (SYMBOL_TYPE (sym)))
631             {
632             case TYPE_CODE_STRUCT:
633               printf ("struct");
634               break;
635
636             case TYPE_CODE_UNION:
637               printf ("union");
638               break;
639
640             case TYPE_CODE_ENUM:
641               printf ("enum");
642             }
643           printf (" %s.  Type \"help ptype\".\n", typename);
644           type = SYMBOL_TYPE (sym);
645         }
646     }
647
648   type_print (type, "", stdout, 1);
649   printf ("\n");
650 }
651 \f
652 struct display
653 {
654   /* Chain link to next auto-display item.  */
655   struct display *next;
656   /* Expression to be evaluated and displayed.  */
657   struct expression *exp;
658   /* Item number of this auto-display item.  */
659   int number;
660   /* Display format specified.  */
661   struct format_data format;
662   /* Block in which expression is to be evaluated.  */
663   struct block *block;
664 };
665
666 /* Chain of expressions whose values should be displayed
667    automatically each time the program stops.  */
668
669 static struct display *display_chain;
670
671 static int display_number;
672
673 /* Add an expression to the auto-display chain.
674    Specify the expression.  */
675
676 static void
677 display_command (exp, from_tty)
678      char *exp;
679      int from_tty;
680 {
681   struct format_data fmt;
682   register struct expression *expr;
683   register struct display *new;
684
685   if (exp == 0)
686     {
687       do_displays ();
688       return;
689     }
690
691   if (*exp == '/')
692     {
693       exp++;
694       fmt = decode_format (&exp, 0, 0);
695       if (fmt.size && fmt.format == 0)
696         fmt.format = 'x';
697       if (fmt.format == 'i' || fmt.format == 's')
698         fmt.size = 'b';
699     }
700   else
701     {
702       fmt.format = 0;
703       fmt.size = 0;
704       fmt.count = 0;
705     }
706
707   expr = parse_c_expression (exp);
708
709   new = (struct display *) xmalloc (sizeof (struct display));
710
711   new->exp = expr;
712   new->next = display_chain;
713   new->number = ++display_number;
714   new->format = fmt;
715   display_chain = new;
716
717   if (from_tty)
718     do_one_display (new);
719
720   dont_repeat ();
721 }
722
723 static void
724 free_display (d)
725      struct display *d;
726 {
727   free (d->exp);
728   free (d);
729 }
730
731 /* Clear out the display_chain.
732    Done when new symtabs are loaded, since this invalidates
733    the types stored in many expressions.  */
734
735 void
736 clear_displays ()
737 {
738   register struct display *d;
739
740   while (d = display_chain)
741     {
742       free (d->exp);
743       display_chain = d->next;
744       free (d);
745     }
746 }
747
748 /* Delete the auto-display number NUM.  */
749
750 void
751 delete_display (num)
752      int num;
753 {
754   register struct display *d1, *d;
755
756   if (!display_chain)
757     error ("No display number %d.", num);
758
759   if (display_chain->number == num)
760     {
761       d1 = display_chain;
762       display_chain = d1->next;
763       free_display (d1);
764     }
765   else
766     for (d = display_chain; ; d = d->next)
767       {
768         if (d->next == 0)
769           error ("No display number %d.", num);
770         if (d->next->number == num)
771           {
772             d1 = d->next;
773             d->next = d1->next;
774             free_display (d1);
775             break;
776           }
777       }
778 }
779
780 /* Delete some values from the auto-display chain.
781    Specify the element numbers.  */
782
783 static void
784 undisplay_command (args)
785      char *args;
786 {
787   register char *p = args;
788   register char *p1;
789   register int num;
790   register struct display *d, *d1;
791
792   if (args == 0)
793     {
794       if (query ("Delete all auto-display expressions? "))
795         clear_displays ();
796       dont_repeat ();
797       return;
798     }
799
800   while (*p)
801     {
802       p1 = p;
803       while (*p1 >= '0' && *p1 <= '9') p1++;
804       if (*p1 && *p1 != ' ' && *p1 != '\t')
805         error ("Arguments must be display numbers.");
806
807       num = atoi (p);
808
809       delete_display (num);
810
811       p = p1;
812       while (*p == ' ' || *p == '\t') p++;
813     }
814   dont_repeat ();
815 }
816
817 /* Display a single auto-display.  */
818
819 static void
820 do_one_display (d)
821      struct display *d;
822 {
823   current_display_number = d->number;
824
825   printf ("%d: ", d->number);
826   if (d->format.size)
827     {
828       printf ("x/");
829       if (d->format.count != 1)
830         printf ("%d", d->format.count);
831       printf ("%c", d->format.format);
832       if (d->format.format != 'i' && d->format.format != 's')
833         printf ("%c", d->format.size);
834       printf (" ");
835       print_expression (d->exp, stdout);
836       if (d->format.count != 1)
837         printf ("\n");
838       else
839         printf ("  ");
840       do_examine (d->format,
841                   value_as_long (evaluate_expression (d->exp)));
842     }
843   else
844     {
845       if (d->format.format)
846         printf ("/%c ", d->format.format);
847       print_expression (d->exp, stdout);
848       printf (" = ");
849       print_formatted (evaluate_expression (d->exp),
850                        d->format.format, d->format.size);
851       printf ("\n");
852     }
853
854   fflush (stdout);
855   current_display_number = -1;
856 }
857
858 /* Display all of the values on the auto-display chain.  */
859
860 void
861 do_displays ()
862 {
863   register struct display *d;
864
865   for (d = display_chain; d; d = d->next)
866     do_one_display (d);
867 }
868
869 /* Delete the auto-display which we were in the process of displaying.
870    This is done when there is an error or a signal.  */
871
872 void
873 delete_current_display ()
874 {
875   if (current_display_number >= 0)
876     {
877       delete_display (current_display_number);
878       fprintf (stderr, "Deleting display %d to avoid infinite recursion.\n",
879                current_display_number);
880     }
881   current_display_number = -1;
882 }
883
884 static void
885 display_info ()
886 {
887   register struct display *d;
888
889   if (!display_chain)
890     printf ("There are no auto-display expressions now.\n");
891   else
892     printf ("Auto-display expressions now in effect:\n");
893   for (d = display_chain; d; d = d->next)
894     {
895       printf ("%d: ", d->number);
896       if (d->format.size)
897         printf ("/%d%c%c ", d->format.count, d->format.size,
898                 d->format.format);
899       else if (d->format.format)
900         printf ("/%c ", d->format.format);
901       print_expression (d->exp, stdout);
902       printf ("\n");
903       fflush (stdout);
904     }
905 }
906 \f
907 /* Print the value in stack frame FRAME of a variable
908    specified by a struct symbol.  */
909
910 void
911 print_variable_value (var, frame, stream)
912      struct symbol *var;
913      CORE_ADDR frame;
914      FILE *stream;
915 {
916   value val = read_var_value (var, frame);
917   value_print (val, stream, 0);
918 }
919
920 /* Print the arguments of a stack frame, given the function FUNC
921    running in that frame (as a symbol), the address of the arglist,
922    and the number of args according to the stack frame (or -1 if unknown).  */
923
924 static void print_frame_nameless_args ();
925
926 print_frame_args (func, addr, num, stream)
927      struct symbol *func;
928      register CORE_ADDR addr;
929      int num;
930      FILE *stream;
931 {
932   struct block *b;
933   int nsyms = 0;
934   int first = 1;
935   register int i;
936   register int last_offset = FRAME_ARGS_SKIP;
937   register struct symbol *sym, *nextsym;
938   register value val;
939
940   if (func)
941     {
942       b = SYMBOL_BLOCK_VALUE (func);
943       nsyms = BLOCK_NSYMS (b);
944     }
945
946   while (1)
947     {
948       /* Find first arg that is not before LAST_OFFSET.  */
949       nextsym = 0;
950       for (i = 0; i < nsyms; i++)
951         {
952           QUIT;
953           sym = BLOCK_SYM (b, i);
954           if (SYMBOL_CLASS (sym) == LOC_ARG
955               && SYMBOL_VALUE (sym) >= last_offset
956               && (nextsym == 0
957                   || SYMBOL_VALUE (sym) < SYMBOL_VALUE (nextsym)))
958             nextsym = sym;
959         }
960       if (nextsym == 0)
961         break;
962       sym = nextsym;
963       /* Print any nameless args between the last arg printed
964          and the next arg.  */
965       if (last_offset != (SYMBOL_VALUE (sym) / sizeof (int)) * sizeof (int))
966         {
967           print_frame_nameless_args (addr, last_offset, SYMBOL_VALUE (sym),
968                                      stream);
969           first = 0;
970         }
971       /* Print the next arg.  */
972       val = value_at (SYMBOL_TYPE (sym), addr + SYMBOL_VALUE (sym));
973       if (! first)
974         fprintf (stream, ", ");
975       fprintf (stream, "%s=", SYMBOL_NAME (sym));
976       value_print (val, stream, 0);
977       first = 0;
978       last_offset = SYMBOL_VALUE (sym) + TYPE_LENGTH (SYMBOL_TYPE (sym));
979       /* Round up address of next arg to multiple of size of int.  */
980       last_offset
981         = ((last_offset + sizeof (int) - 1) / sizeof (int)) * sizeof (int);
982     }
983   if (num >= 0 && num * sizeof (int) + FRAME_ARGS_SKIP > last_offset)
984     print_frame_nameless_args (addr, last_offset,
985                                num * sizeof (int) + FRAME_ARGS_SKIP, stream);
986 }
987
988 static void
989 print_frame_nameless_args (argsaddr, start, end, stream)
990      CORE_ADDR argsaddr;
991      int start;
992      int end;
993      FILE *stream;
994 {
995   while (start < end)
996     {
997       QUIT;
998       if (start != FRAME_ARGS_SKIP)
999         fprintf (stream, ", ");
1000       fprintf (stream, "%d",
1001                read_memory_integer (argsaddr + start, sizeof (int)));
1002       start += sizeof (int);
1003     }
1004 }
1005 \f
1006 static void
1007 printf_command (arg)
1008      char *arg;
1009 {
1010   register char *f;
1011   register char *s = arg;
1012   char *string;
1013   value *val_args;
1014   int nargs = 0;
1015   int allocated_args = 20;
1016   char *arg_bytes;
1017   char *argclass;
1018   int i;
1019   int argindex;
1020   int nargs_wanted;
1021
1022   val_args = (value *) xmalloc (allocated_args * sizeof (value));
1023
1024   if (s == 0)
1025     error_no_arg ("format-control string and values to print");
1026
1027   /* Skip white space before format string */
1028   while (*s == ' ' || *s == '\t') s++;
1029
1030   /* A format string should follow, enveloped in double quotes */
1031   if (*s++ != '"')
1032     error ("Bad format string, missing '\"'.");
1033
1034   /* Parse the format-control string and copy it into the string STRING,
1035      processing some kinds of escape sequence.  */
1036
1037   f = string = (char *) alloca (strlen (s) + 1);
1038   while (*s != '"')
1039     {
1040       int c = *s++;
1041       switch (c)
1042         {
1043         case '\0':
1044           error ("Bad format string, non-terminated '\"'.");
1045           /* doesn't return */
1046
1047         case '\\':
1048           switch (c = *s++)
1049             {
1050             case '\\':
1051               *f++ = '\\';
1052               break;
1053             case 'n':
1054               *f++ = '\n';
1055               break;
1056             case 't':
1057               *f++ = '\t';
1058               break;
1059             case 'r':
1060               *f++ = '\r';
1061               break;
1062             case '"':
1063               *f++ = '"';
1064               break;
1065             default:
1066               /* ??? TODO: handle other escape sequences */
1067               error ("Unrecognized \\ escape character in format string.");
1068             }
1069           break;
1070
1071         default:
1072           *f++ = c;
1073         }
1074     }
1075
1076   /* Skip over " and following space and comma.  */
1077   s++;
1078   *f++ = '\0';
1079   while (*s == ' ' || *s == '\t') s++;
1080
1081   if (*s != ',' && *s != 0)
1082     error ("Invalid argument syntax");
1083
1084   if (*s == ',') s++;
1085   while (*s == ' ' || *s == '\t') s++;
1086
1087   /* Now scan the string for %-specs and see what kinds of args they want.
1088      argclass[I] is set to 1 if the Ith arg should be a string.  */
1089
1090   argclass = (char *) alloca (strlen (s));
1091   nargs_wanted = 0;
1092   f = string;
1093   while (*f)
1094     if (*f++ == '%')
1095       {
1096         while (index ("0123456789.hlL-+ #", *f)) f++;
1097         if (*f == 's')
1098           argclass[nargs_wanted++] = 1;
1099         else if (*f != '%')
1100           argclass[nargs_wanted++] = 0;
1101         f++;
1102       }
1103
1104   /* Now, parse all arguments and evaluate them.
1105      Store the VALUEs in VAL_ARGS.  */
1106
1107   while (*s != '\0')
1108     {
1109       char *s1;
1110       if (nargs == allocated_args)
1111         val_args = (value *) xrealloc (val_args,
1112                                        (allocated_args *= 2)
1113                                        * sizeof (value));
1114       s1 = s;
1115       val_args[nargs++] = parse_to_comma_and_eval (&s1);
1116       s = s1;
1117       if (*s == ',')
1118         s++;
1119     }
1120
1121   if (nargs != nargs_wanted)
1122     error ("Wrong number of arguments for specified format-string");
1123
1124   /* Now lay out an argument-list containing the arguments
1125      as doubles, integers and C pointers.  */
1126
1127   arg_bytes = (char *) alloca (sizeof (double) * nargs);
1128   argindex = 0;
1129   for (i = 0; i < nargs; i++)
1130     {
1131       if (argclass[i])
1132         {
1133           char *str;
1134           int tem, j;
1135           tem = value_as_long (val_args[i]);
1136
1137           /* This is a %s argument.  Find the length of the string.  */
1138           for (j = 0; ; j++)
1139             {
1140               char c;
1141               QUIT;
1142               read_memory (tem + j, &c, 1);
1143               if (c == 0)
1144                 break;
1145             }
1146
1147           /* Copy the string contents into a string inside GDB.  */
1148           str = (char *) alloca (j + 1);
1149           read_memory (tem, str, j);
1150           str[j] = 0;
1151
1152           /* Pass address of internal copy as the arg to vprintf.  */
1153           *((int *) &arg_bytes[argindex]) = (int) str;
1154           argindex += sizeof (int);
1155         }
1156       else if (VALUE_TYPE (val_args[i])->code == TYPE_CODE_FLT)
1157         {
1158           *((double *) &arg_bytes[argindex]) = value_as_double (val_args[i]);
1159           argindex += sizeof (double);
1160         }
1161       else
1162         {
1163           *((int *) &arg_bytes[argindex]) = value_as_long (val_args[i]);
1164           argindex += sizeof (int);
1165         }
1166     }
1167
1168   vprintf (string, arg_bytes);
1169 }
1170 \f
1171 static
1172 initialize ()
1173 {
1174   current_display_number = -1;
1175
1176   add_info ("address", address_info,
1177            "Describe where variable VAR is stored.");
1178
1179   add_com ("x", class_vars, x_command,
1180            "Examine memory: x/FMT ADDRESS.\n\
1181 ADDRESS is an expression for the memory address to examine.\n\
1182 FMT is a repeat count followed by a format letter and a size letter.\n\
1183 Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),\n\
1184  f(float), a(address), i(instruction), c(char) and s(string).\n\
1185 Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).\n\
1186   g is meaningful only with f, for type double.\n\
1187 The specified number of objects of the specified size are printed\n\
1188 according to the format.\n\n\
1189 Defaults for format and size letters are those previously used.\n\
1190 Default count is 1.  Default address is following last thing printed\n\
1191 with this command or \"print\".");
1192
1193   add_com ("ptype", class_vars, ptype_command,
1194            "Print definition of type TYPE.\n\
1195 Argument may be a type name defined by typedef, or \"struct STRUCTNAME\"\n\
1196 or \"union UNIONNAME\" or \"enum ENUMNAME\".\n\
1197 The selected stack frame's lexical context is used to look up the name.");
1198
1199   add_com ("whatis", class_vars, whatis_command,
1200            "Print data type of expression EXP.");
1201
1202   add_info ("display", display_info,
1203             "Expressions to display when program stops, with code numbers.");
1204   add_com ("undisplay", class_vars, undisplay_command,
1205            "Cancel some expressions to be displayed whenever program stops.\n\
1206 Arguments are the code numbers of the expressions to stop displaying.\n\
1207 No argument means cancel all automatic-display expressions.\n\
1208 Do \"info display\" to see current list of code numbers.");
1209   add_com ("display", class_vars, display_command,
1210            "Print value of expression EXP each time the program stops.\n\
1211 /FMT may be used before EXP as in the \"print\" command.\n\
1212 /FMT \"i\" or \"s\" or including a size-letter is allowed,\n\
1213 as in the \"x\" command, and then EXP is used to get the address to examine\n\
1214 and examining is done as in the \"x\" command.\n\n\
1215 With no argument, display all currently requested auto-display expressions.\n\
1216 Use \"undisplay\" to cancel display requests previously made.");
1217
1218   add_com ("printf", class_vars, printf_command,
1219         "printf \"printf format string\", arg1, arg2, arg3, ..., argn\n\
1220 This is useful for formatted output in user-defined commands.");
1221   add_com ("output", class_vars, output_command,
1222            "Like \"print\" but don't put in value history and don't print newline.\n\
1223 This is useful in user-defined commands.");
1224
1225   add_com ("set", class_vars, set_command,
1226            "Perform an assignment VAR = EXP.  You must type the \"=\".\n\
1227 VAR may be a debugger \"convenience\" variables (names starting with $),\n\
1228 a register (a few standard names starting with $), or an actual variable\n\
1229 in the program being debugger.  EXP is any expression.");
1230
1231   add_com ("print", class_vars, print_command,
1232            concat ("Print value of expression EXP.\n\
1233 Variables accessible are those of the lexical environment of the selected\n\
1234 stack frame, plus all those whose scope is global or an entire file.\n\
1235 \n\
1236 $NUM gets previous value number NUM.  $ and $$ are the last two values.\n\
1237 $$NUM refers to NUM'th value back from the last one.\n\
1238 Names starting with $ refer to registers (with the values they would have\n\
1239 if the program were to return to the stack frame now selected, restoring\n\
1240 all registers saved by frames farther in) or else to debugger\n\
1241 \"convenience\" variables (any such name not a known register).\n\
1242 Use assignment expressions to give values to convenience variables.\n",
1243                    "\n\
1244 \{TYPE}ADREXP refers to a datum of data type TYPE, located at address ADREXP.\n\
1245 @ is a binary operator for treating consecutive data objects\n\
1246 anywhere in memory as an array.  FOO@NUM gives an array whose first\n\
1247 element is FOO, whose second element is stored in the space following\n\
1248 where FOO is stored, etc.  FOO must be an expression whose value\n\
1249 resides in memory.\n",
1250                    "\n\
1251 EXP may be preceded with /FMT, where FMT is a format letter\n\
1252 but no count or size letter (see \"x\" command)."));
1253   add_com_alias ("p", "print", class_vars, 1);
1254 }
1255
1256 END_FILE