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