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