*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / printcmd.c
CommitLineData
c906108c 1/* Print values for GNU debugger GDB.
e2ad119d 2
8926118c 3 Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
0fd88904
AC
4 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
5 Free Software Foundation, Inc.
c906108c 6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
c906108c 13
c5aa993b
JM
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
c906108c 18
c5aa993b
JM
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330,
22 Boston, MA 02111-1307, USA. */
c906108c
SS
23
24#include "defs.h"
25#include "gdb_string.h"
26#include "frame.h"
27#include "symtab.h"
28#include "gdbtypes.h"
29#include "value.h"
30#include "language.h"
31#include "expression.h"
32#include "gdbcore.h"
33#include "gdbcmd.h"
34#include "target.h"
35#include "breakpoint.h"
36#include "demangle.h"
37#include "valprint.h"
38#include "annotate.h"
c5aa993b
JM
39#include "symfile.h" /* for overlay functions */
40#include "objfiles.h" /* ditto */
c94fdfd0 41#include "completer.h" /* for completion functions */
8b93c638 42#include "ui-out.h"
261397f8 43#include "gdb_assert.h"
fe898f56 44#include "block.h"
92bf2b80 45#include "disasm.h"
c906108c 46
6a83354a
AC
47#ifdef TUI
48#include "tui/tui.h" /* For tui_active et.al. */
49#endif
50
c906108c
SS
51extern int asm_demangle; /* Whether to demangle syms in asm printouts */
52extern int addressprint; /* Whether to print hex addresses in HLL " */
53
54struct format_data
c5aa993b
JM
55 {
56 int count;
57 char format;
58 char size;
59 };
c906108c
SS
60
61/* Last specified output format. */
62
63static char last_format = 'x';
64
65/* Last specified examination size. 'b', 'h', 'w' or `q'. */
66
67static char last_size = 'w';
68
69/* Default address to examine next. */
70
71static CORE_ADDR next_address;
72
c906108c
SS
73/* Last address examined. */
74
75static CORE_ADDR last_examine_address;
76
77/* Contents of last address examined.
78 This is not valid past the end of the `x' command! */
79
3d6d86c6 80static struct value *last_examine_value;
c906108c
SS
81
82/* Largest offset between a symbolic value and an address, that will be
83 printed as `0x1234 <symbol+offset>'. */
84
85static unsigned int max_symbolic_offset = UINT_MAX;
920d2a44
AC
86static void
87show_max_symbolic_offset (struct ui_file *file, int from_tty,
88 struct cmd_list_element *c, const char *value)
89{
90 fprintf_filtered (file, _("\
91The largest offset that will be printed in <symbol+1234> form is %s.\n"),
92 value);
93}
c906108c
SS
94
95/* Append the source filename and linenumber of the symbol when
96 printing a symbolic value as `<symbol at filename:linenum>' if set. */
97static int print_symbol_filename = 0;
920d2a44
AC
98static void
99show_print_symbol_filename (struct ui_file *file, int from_tty,
100 struct cmd_list_element *c, const char *value)
101{
102 fprintf_filtered (file, _("\
103Printing of source filename and line number with <symbol> is %s.\n"),
104 value);
105}
c906108c
SS
106
107/* Number of auto-display expression currently being displayed.
108 So that we can disable it if we get an error or a signal within it.
109 -1 when not doing one. */
110
111int current_display_number;
112
113/* Flag to low-level print routines that this value is being printed
114 in an epoch window. We'd like to pass this as a parameter, but
115 every routine would need to take it. Perhaps we can encapsulate
116 this in the I/O stream once we have GNU stdio. */
117
118int inspect_it = 0;
119
120struct display
c5aa993b
JM
121 {
122 /* Chain link to next auto-display item. */
123 struct display *next;
124 /* Expression to be evaluated and displayed. */
125 struct expression *exp;
126 /* Item number of this auto-display item. */
127 int number;
128 /* Display format specified. */
129 struct format_data format;
130 /* Innermost block required by this expression when evaluated */
131 struct block *block;
132 /* Status of this display (enabled or disabled) */
b5de0fa7 133 int enabled_p;
c5aa993b 134 };
c906108c
SS
135
136/* Chain of expressions whose values should be displayed
137 automatically each time the program stops. */
138
139static struct display *display_chain;
140
141static int display_number;
142
143/* Prototypes for exported functions. */
144
a14ed312 145void output_command (char *, int);
c906108c 146
a14ed312 147void _initialize_printcmd (void);
c906108c
SS
148
149/* Prototypes for local functions. */
150
a14ed312 151static void delete_display (int);
c906108c 152
a14ed312 153static void enable_display (char *, int);
c906108c 154
a14ed312 155static void disable_display_command (char *, int);
c906108c 156
a14ed312 157static void printf_command (char *, int);
c906108c 158
a14ed312 159static void display_info (char *, int);
c906108c 160
a14ed312 161static void do_one_display (struct display *);
c906108c 162
a14ed312 163static void undisplay_command (char *, int);
c906108c 164
a14ed312 165static void free_display (struct display *);
c906108c 166
a14ed312 167static void display_command (char *, int);
c906108c 168
a14ed312 169void x_command (char *, int);
c906108c 170
a14ed312 171static void address_info (char *, int);
c906108c 172
a14ed312 173static void set_command (char *, int);
c906108c 174
a14ed312 175static void call_command (char *, int);
c906108c 176
a14ed312 177static void inspect_command (char *, int);
c906108c 178
a14ed312 179static void print_command (char *, int);
c906108c 180
a14ed312 181static void print_command_1 (char *, int, int);
c906108c 182
a14ed312 183static void validate_format (struct format_data, char *);
c906108c 184
3d6d86c6 185static void print_formatted (struct value *, int, int, struct ui_file *);
c906108c 186
a14ed312 187static struct format_data decode_format (char **, int, int);
c906108c 188
a14ed312 189static void sym_info (char *, int);
c906108c 190\f
c5aa993b 191
c906108c
SS
192/* Decode a format specification. *STRING_PTR should point to it.
193 OFORMAT and OSIZE are used as defaults for the format and size
194 if none are given in the format specification.
195 If OSIZE is zero, then the size field of the returned value
196 should be set only if a size is explicitly specified by the
197 user.
198 The structure returned describes all the data
199 found in the specification. In addition, *STRING_PTR is advanced
200 past the specification and past all whitespace following it. */
201
202static struct format_data
fba45db2 203decode_format (char **string_ptr, int oformat, int osize)
c906108c
SS
204{
205 struct format_data val;
52f0bd74 206 char *p = *string_ptr;
c906108c
SS
207
208 val.format = '?';
209 val.size = '?';
210 val.count = 1;
211
212 if (*p >= '0' && *p <= '9')
213 val.count = atoi (p);
c5aa993b
JM
214 while (*p >= '0' && *p <= '9')
215 p++;
c906108c
SS
216
217 /* Now process size or format letters that follow. */
218
219 while (1)
220 {
221 if (*p == 'b' || *p == 'h' || *p == 'w' || *p == 'g')
222 val.size = *p++;
223 else if (*p >= 'a' && *p <= 'z')
224 val.format = *p++;
225 else
226 break;
227 }
228
c5aa993b
JM
229 while (*p == ' ' || *p == '\t')
230 p++;
c906108c
SS
231 *string_ptr = p;
232
233 /* Set defaults for format and size if not specified. */
234 if (val.format == '?')
235 {
236 if (val.size == '?')
237 {
238 /* Neither has been specified. */
239 val.format = oformat;
240 val.size = osize;
241 }
242 else
243 /* If a size is specified, any format makes a reasonable
244 default except 'i'. */
245 val.format = oformat == 'i' ? 'x' : oformat;
246 }
247 else if (val.size == '?')
248 switch (val.format)
249 {
250 case 'a':
251 case 's':
252 /* Pick the appropriate size for an address. */
253 if (TARGET_PTR_BIT == 64)
254 val.size = osize ? 'g' : osize;
255 else if (TARGET_PTR_BIT == 32)
256 val.size = osize ? 'w' : osize;
257 else if (TARGET_PTR_BIT == 16)
258 val.size = osize ? 'h' : osize;
259 else
260 /* Bad value for TARGET_PTR_BIT */
e2e0b3e5 261 internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
c906108c
SS
262 break;
263 case 'f':
264 /* Floating point has to be word or giantword. */
265 if (osize == 'w' || osize == 'g')
266 val.size = osize;
267 else
268 /* Default it to giantword if the last used size is not
269 appropriate. */
270 val.size = osize ? 'g' : osize;
271 break;
272 case 'c':
273 /* Characters default to one byte. */
274 val.size = osize ? 'b' : osize;
275 break;
276 default:
277 /* The default is the size most recently specified. */
278 val.size = osize;
279 }
280
281 return val;
282}
283\f
2acceee2 284/* Print value VAL on stream according to FORMAT, a letter or 0.
c906108c
SS
285 Do not end with a newline.
286 0 means print VAL according to its own type.
287 SIZE is the letter for the size of datum being printed.
288 This is used to pad hex numbers so they line up. */
289
290static void
aa1ee363 291print_formatted (struct value *val, int format, int size,
fba45db2 292 struct ui_file *stream)
c906108c 293{
df407dfe 294 struct type *type = check_typedef (value_type (val));
c906108c
SS
295 int len = TYPE_LENGTH (type);
296
297 if (VALUE_LVAL (val) == lval_memory)
298 {
299 next_address = VALUE_ADDRESS (val) + len;
c906108c
SS
300 }
301
302 switch (format)
303 {
304 case 's':
305 /* FIXME: Need to handle wchar_t's here... */
306 next_address = VALUE_ADDRESS (val)
2acceee2 307 + val_print_string (VALUE_ADDRESS (val), -1, 1, stream);
c906108c
SS
308 break;
309
310 case 'i':
311 /* The old comment says
c5aa993b
JM
312 "Force output out, print_insn not using _filtered".
313 I'm not completely sure what that means, I suspect most print_insn
314 now do use _filtered, so I guess it's obsolete.
315 --Yes, it does filter now, and so this is obsolete. -JB */
c906108c
SS
316
317 /* We often wrap here if there are long symbolic names. */
318 wrap_here (" ");
319 next_address = VALUE_ADDRESS (val)
92bf2b80 320 + gdb_print_insn (VALUE_ADDRESS (val), stream);
c906108c
SS
321 break;
322
323 default:
324 if (format == 0
325 || TYPE_CODE (type) == TYPE_CODE_ARRAY
326 || TYPE_CODE (type) == TYPE_CODE_STRING
327 || TYPE_CODE (type) == TYPE_CODE_STRUCT
5c4e30ca
DC
328 || TYPE_CODE (type) == TYPE_CODE_UNION
329 || TYPE_CODE (type) == TYPE_CODE_NAMESPACE)
c5aa993b
JM
330 /* If format is 0, use the 'natural' format for
331 * that type of value. If the type is non-scalar,
332 * we have to use language rules to print it as
333 * a series of scalars.
334 */
2acceee2 335 value_print (val, stream, format, Val_pretty_default);
c906108c 336 else
c5aa993b
JM
337 /* User specified format, so don't look to the
338 * the type to tell us what to do.
339 */
0fd88904 340 print_scalar_formatted (value_contents (val), type,
2acceee2 341 format, size, stream);
c906108c
SS
342 }
343}
344
345/* Print a scalar of data of type TYPE, pointed to in GDB by VALADDR,
346 according to letters FORMAT and SIZE on STREAM.
347 FORMAT may not be zero. Formats s and i are not supported at this level.
348
349 This is how the elements of an array or structure are printed
350 with a format. */
351
352void
366b1cbf
AC
353print_scalar_formatted (const void *valaddr, struct type *type,
354 int format, int size, struct ui_file *stream)
c906108c 355{
81cb7cc9 356 LONGEST val_long = 0;
c906108c
SS
357 unsigned int len = TYPE_LENGTH (type);
358
6b9acc27
JJ
359 if (len > sizeof(LONGEST) &&
360 (TYPE_CODE (type) == TYPE_CODE_INT
361 || TYPE_CODE (type) == TYPE_CODE_ENUM))
362 {
363 switch (format)
364 {
365 case 'o':
366 print_octal_chars (stream, valaddr, len);
367 return;
368 case 'u':
369 case 'd':
370 print_decimal_chars (stream, valaddr, len);
371 return;
372 case 't':
373 print_binary_chars (stream, valaddr, len);
374 return;
375 case 'x':
376 print_hex_chars (stream, valaddr, len);
377 return;
378 case 'c':
379 print_char_chars (stream, valaddr, len);
380 return;
381 default:
382 break;
383 };
384 }
385
95051d27 386 if (format != 'f')
c906108c
SS
387 val_long = unpack_long (type, valaddr);
388
ef166cf4 389 /* If the value is a pointer, and pointers and addresses are not the
d0aee0c4
FF
390 same, then at this point, the value's length (in target bytes) is
391 TARGET_ADDR_BIT/TARGET_CHAR_BIT, not TYPE_LENGTH (type). */
ef166cf4 392 if (TYPE_CODE (type) == TYPE_CODE_PTR)
d0aee0c4 393 len = TARGET_ADDR_BIT / TARGET_CHAR_BIT;
ef166cf4 394
c906108c
SS
395 /* If we are printing it as unsigned, truncate it in case it is actually
396 a negative signed value (e.g. "print/u (short)-1" should print 65535
397 (if shorts are 16 bits) instead of 4294967295). */
398 if (format != 'd')
399 {
400 if (len < sizeof (LONGEST))
401 val_long &= ((LONGEST) 1 << HOST_CHAR_BIT * len) - 1;
402 }
403
404 switch (format)
405 {
406 case 'x':
407 if (!size)
408 {
409 /* no size specified, like in print. Print varying # of digits. */
410 print_longest (stream, 'x', 1, val_long);
411 }
412 else
413 switch (size)
414 {
415 case 'b':
416 case 'h':
417 case 'w':
418 case 'g':
419 print_longest (stream, size, 1, val_long);
420 break;
421 default:
8a3fe4f8 422 error (_("Undefined output size \"%c\"."), size);
c906108c
SS
423 }
424 break;
425
426 case 'd':
427 print_longest (stream, 'd', 1, val_long);
428 break;
429
430 case 'u':
431 print_longest (stream, 'u', 0, val_long);
432 break;
433
434 case 'o':
435 if (val_long)
436 print_longest (stream, 'o', 1, val_long);
437 else
438 fprintf_filtered (stream, "0");
439 break;
440
441 case 'a':
593de6a6 442 {
593de6a6 443 CORE_ADDR addr = unpack_pointer (type, valaddr);
593de6a6
PS
444 print_address (addr, stream);
445 }
c906108c
SS
446 break;
447
448 case 'c':
9e0b60a8
JM
449 value_print (value_from_longest (builtin_type_true_char, val_long),
450 stream, 0, Val_pretty_default);
c906108c
SS
451 break;
452
453 case 'f':
f4697836 454 if (len == TYPE_LENGTH (builtin_type_float))
664cccae 455 type = builtin_type_float;
f4697836 456 else if (len == TYPE_LENGTH (builtin_type_double))
664cccae 457 type = builtin_type_double;
f4697836
JB
458 else if (len == TYPE_LENGTH (builtin_type_long_double))
459 type = builtin_type_long_double;
c906108c
SS
460 print_floating (valaddr, type, stream);
461 break;
462
463 case 0:
e2e0b3e5 464 internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
c906108c
SS
465
466 case 't':
467 /* Binary; 't' stands for "two". */
468 {
c5aa993b
JM
469 char bits[8 * (sizeof val_long) + 1];
470 char buf[8 * (sizeof val_long) + 32];
c906108c
SS
471 char *cp = bits;
472 int width;
473
c5aa993b
JM
474 if (!size)
475 width = 8 * (sizeof val_long);
476 else
477 switch (size)
c906108c
SS
478 {
479 case 'b':
480 width = 8;
481 break;
482 case 'h':
483 width = 16;
484 break;
485 case 'w':
486 width = 32;
487 break;
488 case 'g':
489 width = 64;
490 break;
491 default:
8a3fe4f8 492 error (_("Undefined output size \"%c\"."), size);
c906108c
SS
493 }
494
c5aa993b
JM
495 bits[width] = '\0';
496 while (width-- > 0)
497 {
498 bits[width] = (val_long & 1) ? '1' : '0';
499 val_long >>= 1;
500 }
c906108c
SS
501 if (!size)
502 {
503 while (*cp && *cp == '0')
504 cp++;
505 if (*cp == '\0')
506 cp--;
507 }
bb599908 508 strcpy (buf, cp);
306d9ac5 509 fputs_filtered (buf, stream);
c906108c
SS
510 }
511 break;
512
513 default:
8a3fe4f8 514 error (_("Undefined output format \"%c\"."), format);
c906108c
SS
515 }
516}
517
518/* Specify default address for `x' command.
519 `info lines' uses this. */
520
521void
fba45db2 522set_next_address (CORE_ADDR addr)
c906108c
SS
523{
524 next_address = addr;
525
526 /* Make address available to the user as $_. */
527 set_internalvar (lookup_internalvar ("_"),
4478b372
JB
528 value_from_pointer (lookup_pointer_type (builtin_type_void),
529 addr));
c906108c
SS
530}
531
532/* Optionally print address ADDR symbolically as <SYMBOL+OFFSET> on STREAM,
533 after LEADIN. Print nothing if no symbolic name is found nearby.
534 Optionally also print source file and line number, if available.
535 DO_DEMANGLE controls whether to print a symbol in its native "raw" form,
536 or to interpret it as a possible C++ name and convert it back to source
537 form. However note that DO_DEMANGLE can be overridden by the specific
538 settings of the demangle and asm_demangle variables. */
539
540void
fba45db2
KB
541print_address_symbolic (CORE_ADDR addr, struct ui_file *stream, int do_demangle,
542 char *leadin)
dfcd3bfb
JM
543{
544 char *name = NULL;
545 char *filename = NULL;
546 int unmapped = 0;
547 int offset = 0;
548 int line = 0;
549
2f9429ae
AC
550 /* throw away both name and filename */
551 struct cleanup *cleanup_chain = make_cleanup (free_current_contents, &name);
552 make_cleanup (free_current_contents, &filename);
dfcd3bfb
JM
553
554 if (build_address_symbolic (addr, do_demangle, &name, &offset, &filename, &line, &unmapped))
2f9429ae
AC
555 {
556 do_cleanups (cleanup_chain);
557 return;
558 }
dfcd3bfb
JM
559
560 fputs_filtered (leadin, stream);
561 if (unmapped)
562 fputs_filtered ("<*", stream);
563 else
564 fputs_filtered ("<", stream);
565 fputs_filtered (name, stream);
566 if (offset != 0)
567 fprintf_filtered (stream, "+%u", (unsigned int) offset);
568
569 /* Append source filename and line number if desired. Give specific
570 line # of this addr, if we have it; else line # of the nearest symbol. */
571 if (print_symbol_filename && filename != NULL)
572 {
573 if (line != -1)
574 fprintf_filtered (stream, " at %s:%d", filename, line);
575 else
576 fprintf_filtered (stream, " in %s", filename);
577 }
578 if (unmapped)
579 fputs_filtered ("*>", stream);
580 else
581 fputs_filtered (">", stream);
582
583 do_cleanups (cleanup_chain);
584}
585
586/* Given an address ADDR return all the elements needed to print the
587 address in a symbolic form. NAME can be mangled or not depending
588 on DO_DEMANGLE (and also on the asm_demangle global variable,
589 manipulated via ''set print asm-demangle''). Return 0 in case of
590 success, when all the info in the OUT paramters is valid. Return 1
591 otherwise. */
592int
593build_address_symbolic (CORE_ADDR addr, /* IN */
594 int do_demangle, /* IN */
595 char **name, /* OUT */
596 int *offset, /* OUT */
597 char **filename, /* OUT */
598 int *line, /* OUT */
599 int *unmapped) /* OUT */
c906108c
SS
600{
601 struct minimal_symbol *msymbol;
602 struct symbol *symbol;
603 struct symtab *symtab = 0;
604 CORE_ADDR name_location = 0;
c906108c 605 asection *section = 0;
dfcd3bfb
JM
606 char *name_temp = "";
607
608 /* Let's say it is unmapped. */
609 *unmapped = 0;
c906108c 610
dfcd3bfb
JM
611 /* Determine if the address is in an overlay, and whether it is
612 mapped. */
c906108c
SS
613 if (overlay_debugging)
614 {
615 section = find_pc_overlay (addr);
616 if (pc_in_unmapped_range (addr, section))
617 {
dfcd3bfb 618 *unmapped = 1;
c906108c
SS
619 addr = overlay_mapped_address (addr, section);
620 }
621 }
622
c906108c
SS
623 /* First try to find the address in the symbol table, then
624 in the minsyms. Take the closest one. */
625
626 /* This is defective in the sense that it only finds text symbols. So
627 really this is kind of pointless--we should make sure that the
628 minimal symbols have everything we need (by changing that we could
629 save some memory, but for many debug format--ELF/DWARF or
630 anything/stabs--it would be inconvenient to eliminate those minimal
631 symbols anyway). */
632 msymbol = lookup_minimal_symbol_by_pc_section (addr, section);
633 symbol = find_pc_sect_function (addr, section);
634
635 if (symbol)
636 {
637 name_location = BLOCK_START (SYMBOL_BLOCK_VALUE (symbol));
406fc7fb 638 if (do_demangle || asm_demangle)
de5ad195 639 name_temp = SYMBOL_PRINT_NAME (symbol);
c906108c 640 else
22abf04a 641 name_temp = DEPRECATED_SYMBOL_NAME (symbol);
c906108c
SS
642 }
643
644 if (msymbol != NULL)
645 {
646 if (SYMBOL_VALUE_ADDRESS (msymbol) > name_location || symbol == NULL)
647 {
648 /* The msymbol is closer to the address than the symbol;
649 use the msymbol instead. */
650 symbol = 0;
651 symtab = 0;
652 name_location = SYMBOL_VALUE_ADDRESS (msymbol);
406fc7fb 653 if (do_demangle || asm_demangle)
de5ad195 654 name_temp = SYMBOL_PRINT_NAME (msymbol);
c906108c 655 else
22abf04a 656 name_temp = DEPRECATED_SYMBOL_NAME (msymbol);
c906108c
SS
657 }
658 }
659 if (symbol == NULL && msymbol == NULL)
dfcd3bfb 660 return 1;
c906108c 661
c906108c
SS
662 /* If the nearest symbol is too far away, don't print anything symbolic. */
663
664 /* For when CORE_ADDR is larger than unsigned int, we do math in
665 CORE_ADDR. But when we detect unsigned wraparound in the
666 CORE_ADDR math, we ignore this test and print the offset,
667 because addr+max_symbolic_offset has wrapped through the end
668 of the address space back to the beginning, giving bogus comparison. */
669 if (addr > name_location + max_symbolic_offset
670 && name_location + max_symbolic_offset > name_location)
dfcd3bfb 671 return 1;
c906108c 672
dfcd3bfb
JM
673 *offset = addr - name_location;
674
675 *name = xstrdup (name_temp);
c906108c 676
c906108c
SS
677 if (print_symbol_filename)
678 {
679 struct symtab_and_line sal;
680
681 sal = find_pc_sect_line (addr, section, 0);
682
683 if (sal.symtab)
dfcd3bfb
JM
684 {
685 *filename = xstrdup (sal.symtab->filename);
686 *line = sal.line;
687 }
c906108c 688 else if (symtab && symbol && symbol->line)
dfcd3bfb
JM
689 {
690 *filename = xstrdup (symtab->filename);
691 *line = symbol->line;
692 }
c906108c 693 else if (symtab)
dfcd3bfb
JM
694 {
695 *filename = xstrdup (symtab->filename);
696 *line = -1;
697 }
c906108c 698 }
dfcd3bfb 699 return 0;
c906108c
SS
700}
701
c906108c
SS
702/* Print address ADDR on STREAM. USE_LOCAL means the same thing as for
703 print_longest. */
704void
66bf4b3a
AC
705deprecated_print_address_numeric (CORE_ADDR addr, int use_local,
706 struct ui_file *stream)
c906108c 707{
66bf4b3a
AC
708 if (use_local)
709 fputs_filtered (paddress (addr), stream);
710 else
711 {
712 int addr_bit = TARGET_ADDR_BIT;
713
714 if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
715 addr &= ((CORE_ADDR) 1 << addr_bit) - 1;
716 print_longest (stream, 'x', 0, (ULONGEST) addr);
717 }
c906108c
SS
718}
719
720/* Print address ADDR symbolically on STREAM.
721 First print it as a number. Then perhaps print
722 <SYMBOL + OFFSET> after the number. */
723
724void
fba45db2 725print_address (CORE_ADDR addr, struct ui_file *stream)
c906108c 726{
66bf4b3a 727 deprecated_print_address_numeric (addr, 1, stream);
c906108c
SS
728 print_address_symbolic (addr, stream, asm_demangle, " ");
729}
730
731/* Print address ADDR symbolically on STREAM. Parameter DEMANGLE
732 controls whether to print the symbolic name "raw" or demangled.
733 Global setting "addressprint" controls whether to print hex address
734 or not. */
735
736void
fba45db2 737print_address_demangle (CORE_ADDR addr, struct ui_file *stream, int do_demangle)
c906108c
SS
738{
739 if (addr == 0)
740 {
741 fprintf_filtered (stream, "0");
742 }
743 else if (addressprint)
744 {
66bf4b3a 745 deprecated_print_address_numeric (addr, 1, stream);
c906108c
SS
746 print_address_symbolic (addr, stream, do_demangle, " ");
747 }
748 else
749 {
750 print_address_symbolic (addr, stream, do_demangle, "");
751 }
752}
753\f
754
755/* These are the types that $__ will get after an examine command of one
756 of these sizes. */
757
758static struct type *examine_i_type;
759
760static struct type *examine_b_type;
761static struct type *examine_h_type;
762static struct type *examine_w_type;
763static struct type *examine_g_type;
764
765/* Examine data at address ADDR in format FMT.
766 Fetch it from memory and print on gdb_stdout. */
767
768static void
00a4c844 769do_examine (struct format_data fmt, CORE_ADDR addr)
c906108c 770{
52f0bd74
AC
771 char format = 0;
772 char size;
773 int count = 1;
c906108c 774 struct type *val_type = NULL;
52f0bd74
AC
775 int i;
776 int maxelts;
c906108c
SS
777
778 format = fmt.format;
779 size = fmt.size;
780 count = fmt.count;
781 next_address = addr;
c906108c
SS
782
783 /* String or instruction format implies fetch single bytes
784 regardless of the specified size. */
785 if (format == 's' || format == 'i')
786 size = 'b';
787
788 if (format == 'i')
789 val_type = examine_i_type;
790 else if (size == 'b')
791 val_type = examine_b_type;
792 else if (size == 'h')
793 val_type = examine_h_type;
794 else if (size == 'w')
795 val_type = examine_w_type;
796 else if (size == 'g')
797 val_type = examine_g_type;
798
799 maxelts = 8;
800 if (size == 'w')
801 maxelts = 4;
802 if (size == 'g')
803 maxelts = 2;
804 if (format == 's' || format == 'i')
805 maxelts = 1;
806
807 /* Print as many objects as specified in COUNT, at most maxelts per line,
808 with the address of the next one at the start of each line. */
809
810 while (count > 0)
811 {
812 QUIT;
813 print_address (next_address, gdb_stdout);
814 printf_filtered (":");
815 for (i = maxelts;
816 i > 0 && count > 0;
817 i--, count--)
818 {
819 printf_filtered ("\t");
820 /* Note that print_formatted sets next_address for the next
821 object. */
822 last_examine_address = next_address;
823
824 if (last_examine_value)
825 value_free (last_examine_value);
826
827 /* The value to be displayed is not fetched greedily.
c5aa993b
JM
828 Instead, to avoid the posibility of a fetched value not
829 being used, its retreval is delayed until the print code
830 uses it. When examining an instruction stream, the
831 disassembler will perform its own memory fetch using just
832 the address stored in LAST_EXAMINE_VALUE. FIXME: Should
833 the disassembler be modified so that LAST_EXAMINE_VALUE
834 is left with the byte sequence from the last complete
835 instruction fetched from memory? */
00a4c844 836 last_examine_value = value_at_lazy (val_type, next_address);
c906108c
SS
837
838 if (last_examine_value)
839 release_value (last_examine_value);
840
2acceee2 841 print_formatted (last_examine_value, format, size, gdb_stdout);
c906108c
SS
842 }
843 printf_filtered ("\n");
844 gdb_flush (gdb_stdout);
845 }
846}
847\f
848static void
fba45db2 849validate_format (struct format_data fmt, char *cmdname)
c906108c
SS
850{
851 if (fmt.size != 0)
8a3fe4f8 852 error (_("Size letters are meaningless in \"%s\" command."), cmdname);
c906108c 853 if (fmt.count != 1)
8a3fe4f8 854 error (_("Item count other than 1 is meaningless in \"%s\" command."),
c906108c
SS
855 cmdname);
856 if (fmt.format == 'i' || fmt.format == 's')
8a3fe4f8 857 error (_("Format letter \"%c\" is meaningless in \"%s\" command."),
c906108c
SS
858 fmt.format, cmdname);
859}
860
861/* Evaluate string EXP as an expression in the current language and
c5aa993b
JM
862 print the resulting value. EXP may contain a format specifier as the
863 first argument ("/x myvar" for example, to print myvar in hex).
864 */
c906108c
SS
865
866static void
fba45db2 867print_command_1 (char *exp, int inspect, int voidprint)
c906108c
SS
868{
869 struct expression *expr;
52f0bd74
AC
870 struct cleanup *old_chain = 0;
871 char format = 0;
3d6d86c6 872 struct value *val;
c906108c
SS
873 struct format_data fmt;
874 int cleanup = 0;
875
876 /* Pass inspect flag to the rest of the print routines in a global (sigh). */
877 inspect_it = inspect;
878
879 if (exp && *exp == '/')
880 {
881 exp++;
882 fmt = decode_format (&exp, last_format, 0);
883 validate_format (fmt, "print");
884 last_format = format = fmt.format;
885 }
886 else
887 {
888 fmt.count = 1;
889 fmt.format = 0;
890 fmt.size = 0;
891 }
892
893 if (exp && *exp)
894 {
c906108c
SS
895 struct type *type;
896 expr = parse_expression (exp);
c13c43fd 897 old_chain = make_cleanup (free_current_contents, &expr);
c906108c
SS
898 cleanup = 1;
899 val = evaluate_expression (expr);
c906108c
SS
900 }
901 else
902 val = access_value_history (0);
903
df407dfe
AC
904 if (voidprint || (val && value_type (val) &&
905 TYPE_CODE (value_type (val)) != TYPE_CODE_VOID))
c906108c
SS
906 {
907 int histindex = record_latest_value (val);
908
909 if (histindex >= 0)
df407dfe 910 annotate_value_history_begin (histindex, value_type (val));
c906108c 911 else
df407dfe 912 annotate_value_begin (value_type (val));
c906108c
SS
913
914 if (inspect)
915 printf_unfiltered ("\031(gdb-makebuffer \"%s\" %d '(\"", exp, histindex);
c5aa993b
JM
916 else if (histindex >= 0)
917 printf_filtered ("$%d = ", histindex);
c906108c
SS
918
919 if (histindex >= 0)
920 annotate_value_history_value ();
921
2acceee2 922 print_formatted (val, format, fmt.size, gdb_stdout);
c906108c
SS
923 printf_filtered ("\n");
924
925 if (histindex >= 0)
926 annotate_value_history_end ();
927 else
928 annotate_value_end ();
929
930 if (inspect)
c5aa993b 931 printf_unfiltered ("\") )\030");
c906108c
SS
932 }
933
934 if (cleanup)
935 do_cleanups (old_chain);
c5aa993b 936 inspect_it = 0; /* Reset print routines to normal */
c906108c
SS
937}
938
c906108c 939static void
fba45db2 940print_command (char *exp, int from_tty)
c906108c
SS
941{
942 print_command_1 (exp, 0, 1);
943}
944
945/* Same as print, except in epoch, it gets its own window */
c906108c 946static void
fba45db2 947inspect_command (char *exp, int from_tty)
c906108c
SS
948{
949 extern int epoch_interface;
950
951 print_command_1 (exp, epoch_interface, 1);
952}
953
954/* Same as print, except it doesn't print void results. */
c906108c 955static void
fba45db2 956call_command (char *exp, int from_tty)
c906108c
SS
957{
958 print_command_1 (exp, 0, 0);
959}
960
c906108c 961void
fba45db2 962output_command (char *exp, int from_tty)
c906108c
SS
963{
964 struct expression *expr;
52f0bd74
AC
965 struct cleanup *old_chain;
966 char format = 0;
3d6d86c6 967 struct value *val;
c906108c
SS
968 struct format_data fmt;
969
970 if (exp && *exp == '/')
971 {
972 exp++;
973 fmt = decode_format (&exp, 0, 0);
974 validate_format (fmt, "output");
975 format = fmt.format;
976 }
977
978 expr = parse_expression (exp);
c13c43fd 979 old_chain = make_cleanup (free_current_contents, &expr);
c906108c
SS
980
981 val = evaluate_expression (expr);
982
df407dfe 983 annotate_value_begin (value_type (val));
c906108c 984
2acceee2 985 print_formatted (val, format, fmt.size, gdb_stdout);
c906108c
SS
986
987 annotate_value_end ();
988
2acceee2
JM
989 wrap_here ("");
990 gdb_flush (gdb_stdout);
991
c906108c
SS
992 do_cleanups (old_chain);
993}
994
c906108c 995static void
fba45db2 996set_command (char *exp, int from_tty)
c906108c
SS
997{
998 struct expression *expr = parse_expression (exp);
52f0bd74 999 struct cleanup *old_chain =
c13c43fd 1000 make_cleanup (free_current_contents, &expr);
c906108c
SS
1001 evaluate_expression (expr);
1002 do_cleanups (old_chain);
1003}
1004
c906108c 1005static void
fba45db2 1006sym_info (char *arg, int from_tty)
c906108c
SS
1007{
1008 struct minimal_symbol *msymbol;
c5aa993b
JM
1009 struct objfile *objfile;
1010 struct obj_section *osect;
1011 asection *sect;
1012 CORE_ADDR addr, sect_addr;
1013 int matches = 0;
1014 unsigned int offset;
c906108c
SS
1015
1016 if (!arg)
e2e0b3e5 1017 error_no_arg (_("address"));
c906108c
SS
1018
1019 addr = parse_and_eval_address (arg);
1020 ALL_OBJSECTIONS (objfile, osect)
c5aa993b
JM
1021 {
1022 sect = osect->the_bfd_section;
1023 sect_addr = overlay_mapped_address (addr, sect);
c906108c 1024
c5aa993b
JM
1025 if (osect->addr <= sect_addr && sect_addr < osect->endaddr &&
1026 (msymbol = lookup_minimal_symbol_by_pc_section (sect_addr, sect)))
1027 {
1028 matches = 1;
1029 offset = sect_addr - SYMBOL_VALUE_ADDRESS (msymbol);
1030 if (offset)
1031 printf_filtered ("%s + %u in ",
de5ad195 1032 SYMBOL_PRINT_NAME (msymbol), offset);
c5aa993b
JM
1033 else
1034 printf_filtered ("%s in ",
de5ad195 1035 SYMBOL_PRINT_NAME (msymbol));
c5aa993b 1036 if (pc_in_unmapped_range (addr, sect))
a3f17187 1037 printf_filtered (_("load address range of "));
c5aa993b 1038 if (section_is_overlay (sect))
a3f17187 1039 printf_filtered (_("%s overlay "),
c5aa993b 1040 section_is_mapped (sect) ? "mapped" : "unmapped");
a3f17187 1041 printf_filtered (_("section %s"), sect->name);
c5aa993b
JM
1042 printf_filtered ("\n");
1043 }
1044 }
c906108c 1045 if (matches == 0)
a3f17187 1046 printf_filtered (_("No symbol matches %s.\n"), arg);
c906108c
SS
1047}
1048
c906108c 1049static void
fba45db2 1050address_info (char *exp, int from_tty)
c906108c 1051{
52f0bd74
AC
1052 struct symbol *sym;
1053 struct minimal_symbol *msymbol;
1054 long val;
1055 long basereg;
c906108c
SS
1056 asection *section;
1057 CORE_ADDR load_addr;
1058 int is_a_field_of_this; /* C++: lookup_symbol sets this to nonzero
1059 if exp is a field of `this'. */
1060
1061 if (exp == 0)
8a3fe4f8 1062 error (_("Argument required."));
c906108c 1063
176620f1 1064 sym = lookup_symbol (exp, get_selected_block (0), VAR_DOMAIN,
c5aa993b 1065 &is_a_field_of_this, (struct symtab **) NULL);
c906108c
SS
1066 if (sym == NULL)
1067 {
1068 if (is_a_field_of_this)
1069 {
1070 printf_filtered ("Symbol \"");
1071 fprintf_symbol_filtered (gdb_stdout, exp,
1072 current_language->la_language, DMGL_ANSI);
e2b23ee9
AF
1073 printf_filtered ("\" is a field of the local class variable ");
1074 if (current_language->la_language == language_objc)
2625d86c 1075 printf_filtered ("`self'\n"); /* ObjC equivalent of "this" */
e2b23ee9 1076 else
2625d86c 1077 printf_filtered ("`this'\n");
c906108c
SS
1078 return;
1079 }
1080
1081 msymbol = lookup_minimal_symbol (exp, NULL, NULL);
1082
1083 if (msymbol != NULL)
1084 {
1085 load_addr = SYMBOL_VALUE_ADDRESS (msymbol);
1086
1087 printf_filtered ("Symbol \"");
1088 fprintf_symbol_filtered (gdb_stdout, exp,
1089 current_language->la_language, DMGL_ANSI);
1090 printf_filtered ("\" is at ");
66bf4b3a 1091 deprecated_print_address_numeric (load_addr, 1, gdb_stdout);
c906108c
SS
1092 printf_filtered (" in a file compiled without debugging");
1093 section = SYMBOL_BFD_SECTION (msymbol);
1094 if (section_is_overlay (section))
1095 {
1096 load_addr = overlay_unmapped_address (load_addr, section);
1097 printf_filtered (",\n -- loaded at ");
66bf4b3a 1098 deprecated_print_address_numeric (load_addr, 1, gdb_stdout);
c906108c
SS
1099 printf_filtered (" in overlay section %s", section->name);
1100 }
1101 printf_filtered (".\n");
1102 }
1103 else
8a3fe4f8 1104 error (_("No symbol \"%s\" in current context."), exp);
c906108c
SS
1105 return;
1106 }
1107
1108 printf_filtered ("Symbol \"");
22abf04a 1109 fprintf_symbol_filtered (gdb_stdout, DEPRECATED_SYMBOL_NAME (sym),
c906108c
SS
1110 current_language->la_language, DMGL_ANSI);
1111 printf_filtered ("\" is ");
c5aa993b 1112 val = SYMBOL_VALUE (sym);
c906108c
SS
1113 basereg = SYMBOL_BASEREG (sym);
1114 section = SYMBOL_BFD_SECTION (sym);
1115
1116 switch (SYMBOL_CLASS (sym))
1117 {
1118 case LOC_CONST:
1119 case LOC_CONST_BYTES:
1120 printf_filtered ("constant");
1121 break;
1122
1123 case LOC_LABEL:
1124 printf_filtered ("a label at address ");
66bf4b3a 1125 deprecated_print_address_numeric (load_addr = SYMBOL_VALUE_ADDRESS (sym),
c906108c
SS
1126 1, gdb_stdout);
1127 if (section_is_overlay (section))
1128 {
1129 load_addr = overlay_unmapped_address (load_addr, section);
1130 printf_filtered (",\n -- loaded at ");
66bf4b3a 1131 deprecated_print_address_numeric (load_addr, 1, gdb_stdout);
c906108c
SS
1132 printf_filtered (" in overlay section %s", section->name);
1133 }
1134 break;
1135
4c2df51b
DJ
1136 case LOC_COMPUTED:
1137 case LOC_COMPUTED_ARG:
a67af2b9
AC
1138 /* FIXME: cagney/2004-01-26: It should be possible to
1139 unconditionally call the SYMBOL_OPS method when available.
d3efc286 1140 Unfortunately DWARF 2 stores the frame-base (instead of the
a67af2b9
AC
1141 function) location in a function's symbol. Oops! For the
1142 moment enable this when/where applicable. */
1143 SYMBOL_OPS (sym)->describe_location (sym, gdb_stdout);
4c2df51b
DJ
1144 break;
1145
c906108c 1146 case LOC_REGISTER:
a3f17187 1147 printf_filtered (_("a variable in register %s"), REGISTER_NAME (val));
c906108c
SS
1148 break;
1149
1150 case LOC_STATIC:
a3f17187 1151 printf_filtered (_("static storage at address "));
66bf4b3a 1152 deprecated_print_address_numeric (load_addr = SYMBOL_VALUE_ADDRESS (sym),
c906108c
SS
1153 1, gdb_stdout);
1154 if (section_is_overlay (section))
1155 {
1156 load_addr = overlay_unmapped_address (load_addr, section);
a3f17187 1157 printf_filtered (_(",\n -- loaded at "));
66bf4b3a 1158 deprecated_print_address_numeric (load_addr, 1, gdb_stdout);
a3f17187 1159 printf_filtered (_(" in overlay section %s"), section->name);
c906108c
SS
1160 }
1161 break;
1162
1163 case LOC_INDIRECT:
a3f17187 1164 printf_filtered (_("external global (indirect addressing), at address *("));
66bf4b3a 1165 deprecated_print_address_numeric (load_addr = SYMBOL_VALUE_ADDRESS (sym),
c906108c
SS
1166 1, gdb_stdout);
1167 printf_filtered (")");
1168 if (section_is_overlay (section))
1169 {
1170 load_addr = overlay_unmapped_address (load_addr, section);
a3f17187 1171 printf_filtered (_(",\n -- loaded at "));
66bf4b3a 1172 deprecated_print_address_numeric (load_addr, 1, gdb_stdout);
a3f17187 1173 printf_filtered (_(" in overlay section %s"), section->name);
c906108c
SS
1174 }
1175 break;
1176
1177 case LOC_REGPARM:
a3f17187 1178 printf_filtered (_("an argument in register %s"), REGISTER_NAME (val));
c906108c
SS
1179 break;
1180
1181 case LOC_REGPARM_ADDR:
a3f17187 1182 printf_filtered (_("address of an argument in register %s"), REGISTER_NAME (val));
c906108c
SS
1183 break;
1184
1185 case LOC_ARG:
a3f17187 1186 printf_filtered (_("an argument at offset %ld"), val);
c906108c
SS
1187 break;
1188
1189 case LOC_LOCAL_ARG:
a3f17187 1190 printf_filtered (_("an argument at frame offset %ld"), val);
c906108c
SS
1191 break;
1192
1193 case LOC_LOCAL:
a3f17187 1194 printf_filtered (_("a local variable at frame offset %ld"), val);
c906108c
SS
1195 break;
1196
1197 case LOC_REF_ARG:
a3f17187 1198 printf_filtered (_("a reference argument at offset %ld"), val);
c906108c
SS
1199 break;
1200
1201 case LOC_BASEREG:
a3f17187 1202 printf_filtered (_("a variable at offset %ld from register %s"),
c5aa993b 1203 val, REGISTER_NAME (basereg));
c906108c
SS
1204 break;
1205
1206 case LOC_BASEREG_ARG:
a3f17187 1207 printf_filtered (_("an argument at offset %ld from register %s"),
c5aa993b 1208 val, REGISTER_NAME (basereg));
c906108c
SS
1209 break;
1210
1211 case LOC_TYPEDEF:
a3f17187 1212 printf_filtered (_("a typedef"));
c906108c
SS
1213 break;
1214
1215 case LOC_BLOCK:
a3f17187 1216 printf_filtered (_("a function at address "));
66bf4b3a 1217 deprecated_print_address_numeric (load_addr = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)),
c906108c 1218 1, gdb_stdout);
c906108c
SS
1219 if (section_is_overlay (section))
1220 {
1221 load_addr = overlay_unmapped_address (load_addr, section);
a3f17187 1222 printf_filtered (_(",\n -- loaded at "));
66bf4b3a 1223 deprecated_print_address_numeric (load_addr, 1, gdb_stdout);
a3f17187 1224 printf_filtered (_(" in overlay section %s"), section->name);
c906108c
SS
1225 }
1226 break;
1227
1228 case LOC_UNRESOLVED:
1229 {
1230 struct minimal_symbol *msym;
1231
22abf04a 1232 msym = lookup_minimal_symbol (DEPRECATED_SYMBOL_NAME (sym), NULL, NULL);
c906108c
SS
1233 if (msym == NULL)
1234 printf_filtered ("unresolved");
1235 else
1236 {
1237 section = SYMBOL_BFD_SECTION (msym);
a3f17187 1238 printf_filtered (_("static storage at address "));
66bf4b3a 1239 deprecated_print_address_numeric (load_addr = SYMBOL_VALUE_ADDRESS (msym),
c906108c
SS
1240 1, gdb_stdout);
1241 if (section_is_overlay (section))
1242 {
1243 load_addr = overlay_unmapped_address (load_addr, section);
a3f17187 1244 printf_filtered (_(",\n -- loaded at "));
66bf4b3a 1245 deprecated_print_address_numeric (load_addr, 1, gdb_stdout);
a3f17187 1246 printf_filtered (_(" in overlay section %s"), section->name);
c906108c
SS
1247 }
1248 }
1249 }
1250 break;
1251
407caf07 1252 case LOC_HP_THREAD_LOCAL_STATIC:
c906108c 1253 printf_filtered (
c5aa993b
JM
1254 "a thread-local variable at offset %ld from the thread base register %s",
1255 val, REGISTER_NAME (basereg));
c906108c
SS
1256 break;
1257
1258 case LOC_OPTIMIZED_OUT:
a3f17187 1259 printf_filtered (_("optimized out"));
c906108c 1260 break;
c5aa993b 1261
c906108c 1262 default:
a3f17187 1263 printf_filtered (_("of unknown (botched) type"));
c906108c
SS
1264 break;
1265 }
1266 printf_filtered (".\n");
1267}
1268\f
1269void
fba45db2 1270x_command (char *exp, int from_tty)
c906108c
SS
1271{
1272 struct expression *expr;
1273 struct format_data fmt;
1274 struct cleanup *old_chain;
1275 struct value *val;
1276
1277 fmt.format = last_format;
1278 fmt.size = last_size;
1279 fmt.count = 1;
1280
1281 if (exp && *exp == '/')
1282 {
1283 exp++;
1284 fmt = decode_format (&exp, last_format, last_size);
1285 }
1286
1287 /* If we have an expression, evaluate it and use it as the address. */
1288
1289 if (exp != 0 && *exp != 0)
1290 {
1291 expr = parse_expression (exp);
1292 /* Cause expression not to be there any more
c5aa993b
JM
1293 if this command is repeated with Newline.
1294 But don't clobber a user-defined command's definition. */
c906108c
SS
1295 if (from_tty)
1296 *exp = 0;
c13c43fd 1297 old_chain = make_cleanup (free_current_contents, &expr);
c906108c 1298 val = evaluate_expression (expr);
df407dfe 1299 if (TYPE_CODE (value_type (val)) == TYPE_CODE_REF)
c906108c
SS
1300 val = value_ind (val);
1301 /* In rvalue contexts, such as this, functions are coerced into
c5aa993b 1302 pointers to functions. This makes "x/i main" work. */
c0d8fd9a 1303 if (/* last_format == 'i' && */
df407dfe 1304 TYPE_CODE (value_type (val)) == TYPE_CODE_FUNC
c5aa993b 1305 && VALUE_LVAL (val) == lval_memory)
c906108c
SS
1306 next_address = VALUE_ADDRESS (val);
1307 else
1aa20aa8 1308 next_address = value_as_address (val);
c906108c
SS
1309 do_cleanups (old_chain);
1310 }
1311
00a4c844 1312 do_examine (fmt, next_address);
c906108c
SS
1313
1314 /* If the examine succeeds, we remember its size and format for next time. */
1315 last_size = fmt.size;
1316 last_format = fmt.format;
1317
1318 /* Set a couple of internal variables if appropriate. */
1319 if (last_examine_value)
1320 {
1321 /* Make last address examined available to the user as $_. Use
c5aa993b 1322 the correct pointer type. */
4478b372 1323 struct type *pointer_type
df407dfe 1324 = lookup_pointer_type (value_type (last_examine_value));
c906108c 1325 set_internalvar (lookup_internalvar ("_"),
4478b372
JB
1326 value_from_pointer (pointer_type,
1327 last_examine_address));
c5aa993b
JM
1328
1329 /* Make contents of last address examined available to the user as $__. */
c906108c
SS
1330 /* If the last value has not been fetched from memory then don't
1331 fetch it now - instead mark it by voiding the $__ variable. */
d69fe07e 1332 if (value_lazy (last_examine_value))
c906108c
SS
1333 set_internalvar (lookup_internalvar ("__"),
1334 allocate_value (builtin_type_void));
1335 else
1336 set_internalvar (lookup_internalvar ("__"), last_examine_value);
1337 }
1338}
c906108c 1339\f
c5aa993b 1340
c906108c
SS
1341/* Add an expression to the auto-display chain.
1342 Specify the expression. */
1343
1344static void
fba45db2 1345display_command (char *exp, int from_tty)
c906108c
SS
1346{
1347 struct format_data fmt;
52f0bd74
AC
1348 struct expression *expr;
1349 struct display *new;
c906108c
SS
1350 int display_it = 1;
1351
1352#if defined(TUI)
021e7609
AC
1353 /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1354 `tui_version'. */
fd33e6cb 1355 if (tui_active && exp != NULL && *exp == '$')
080ce8c0 1356 display_it = (tui_set_layout_for_display_command (exp) == TUI_FAILURE);
c906108c
SS
1357#endif
1358
1359 if (display_it)
1360 {
1361 if (exp == 0)
1362 {
1363 do_displays ();
1364 return;
1365 }
1366
1367 if (*exp == '/')
1368 {
1369 exp++;
1370 fmt = decode_format (&exp, 0, 0);
1371 if (fmt.size && fmt.format == 0)
1372 fmt.format = 'x';
1373 if (fmt.format == 'i' || fmt.format == 's')
1374 fmt.size = 'b';
1375 }
1376 else
1377 {
1378 fmt.format = 0;
1379 fmt.size = 0;
1380 fmt.count = 0;
1381 }
1382
1383 innermost_block = 0;
1384 expr = parse_expression (exp);
1385
1386 new = (struct display *) xmalloc (sizeof (struct display));
1387
1388 new->exp = expr;
1389 new->block = innermost_block;
1390 new->next = display_chain;
1391 new->number = ++display_number;
1392 new->format = fmt;
b5de0fa7 1393 new->enabled_p = 1;
c906108c
SS
1394 display_chain = new;
1395
1396 if (from_tty && target_has_execution)
1397 do_one_display (new);
1398
1399 dont_repeat ();
1400 }
1401}
1402
1403static void
fba45db2 1404free_display (struct display *d)
c906108c 1405{
b8c9b27d
KB
1406 xfree (d->exp);
1407 xfree (d);
c906108c
SS
1408}
1409
1410/* Clear out the display_chain.
1411 Done when new symtabs are loaded, since this invalidates
1412 the types stored in many expressions. */
1413
1414void
fba45db2 1415clear_displays (void)
c906108c 1416{
52f0bd74 1417 struct display *d;
c906108c
SS
1418
1419 while ((d = display_chain) != NULL)
1420 {
b8c9b27d 1421 xfree (d->exp);
c906108c 1422 display_chain = d->next;
b8c9b27d 1423 xfree (d);
c906108c
SS
1424 }
1425}
1426
1427/* Delete the auto-display number NUM. */
1428
1429static void
fba45db2 1430delete_display (int num)
c906108c 1431{
52f0bd74 1432 struct display *d1, *d;
c906108c
SS
1433
1434 if (!display_chain)
8a3fe4f8 1435 error (_("No display number %d."), num);
c906108c
SS
1436
1437 if (display_chain->number == num)
1438 {
1439 d1 = display_chain;
1440 display_chain = d1->next;
1441 free_display (d1);
1442 }
1443 else
c5aa993b 1444 for (d = display_chain;; d = d->next)
c906108c
SS
1445 {
1446 if (d->next == 0)
8a3fe4f8 1447 error (_("No display number %d."), num);
c906108c
SS
1448 if (d->next->number == num)
1449 {
1450 d1 = d->next;
1451 d->next = d1->next;
1452 free_display (d1);
1453 break;
1454 }
1455 }
1456}
1457
1458/* Delete some values from the auto-display chain.
1459 Specify the element numbers. */
1460
1461static void
fba45db2 1462undisplay_command (char *args, int from_tty)
c906108c 1463{
52f0bd74
AC
1464 char *p = args;
1465 char *p1;
1466 int num;
c906108c
SS
1467
1468 if (args == 0)
1469 {
1470 if (query ("Delete all auto-display expressions? "))
1471 clear_displays ();
1472 dont_repeat ();
1473 return;
1474 }
1475
1476 while (*p)
1477 {
1478 p1 = p;
c5aa993b
JM
1479 while (*p1 >= '0' && *p1 <= '9')
1480 p1++;
c906108c 1481 if (*p1 && *p1 != ' ' && *p1 != '\t')
8a3fe4f8 1482 error (_("Arguments must be display numbers."));
c906108c
SS
1483
1484 num = atoi (p);
1485
1486 delete_display (num);
1487
1488 p = p1;
c5aa993b
JM
1489 while (*p == ' ' || *p == '\t')
1490 p++;
c906108c
SS
1491 }
1492 dont_repeat ();
1493}
1494
1495/* Display a single auto-display.
1496 Do nothing if the display cannot be printed in the current context,
1497 or if the display is disabled. */
1498
1499static void
fba45db2 1500do_one_display (struct display *d)
c906108c
SS
1501{
1502 int within_current_scope;
1503
b5de0fa7 1504 if (d->enabled_p == 0)
c906108c
SS
1505 return;
1506
1507 if (d->block)
ae767bfb 1508 within_current_scope = contained_in (get_selected_block (0), d->block);
c906108c
SS
1509 else
1510 within_current_scope = 1;
1511 if (!within_current_scope)
1512 return;
1513
1514 current_display_number = d->number;
1515
1516 annotate_display_begin ();
1517 printf_filtered ("%d", d->number);
1518 annotate_display_number_end ();
1519 printf_filtered (": ");
1520 if (d->format.size)
1521 {
1522 CORE_ADDR addr;
3d6d86c6 1523 struct value *val;
c906108c
SS
1524
1525 annotate_display_format ();
1526
1527 printf_filtered ("x/");
1528 if (d->format.count != 1)
1529 printf_filtered ("%d", d->format.count);
1530 printf_filtered ("%c", d->format.format);
1531 if (d->format.format != 'i' && d->format.format != 's')
1532 printf_filtered ("%c", d->format.size);
1533 printf_filtered (" ");
1534
1535 annotate_display_expression ();
1536
1537 print_expression (d->exp, gdb_stdout);
1538 annotate_display_expression_end ();
1539
1540 if (d->format.count != 1)
1541 printf_filtered ("\n");
1542 else
1543 printf_filtered (" ");
c5aa993b 1544
c906108c 1545 val = evaluate_expression (d->exp);
1aa20aa8 1546 addr = value_as_address (val);
c906108c
SS
1547 if (d->format.format == 'i')
1548 addr = ADDR_BITS_REMOVE (addr);
1549
1550 annotate_display_value ();
1551
00a4c844 1552 do_examine (d->format, addr);
c906108c
SS
1553 }
1554 else
1555 {
1556 annotate_display_format ();
1557
1558 if (d->format.format)
1559 printf_filtered ("/%c ", d->format.format);
1560
1561 annotate_display_expression ();
1562
1563 print_expression (d->exp, gdb_stdout);
1564 annotate_display_expression_end ();
1565
1566 printf_filtered (" = ");
1567
1568 annotate_display_expression ();
1569
1570 print_formatted (evaluate_expression (d->exp),
2acceee2 1571 d->format.format, d->format.size, gdb_stdout);
c906108c
SS
1572 printf_filtered ("\n");
1573 }
1574
1575 annotate_display_end ();
1576
1577 gdb_flush (gdb_stdout);
1578 current_display_number = -1;
1579}
1580
1581/* Display all of the values on the auto-display chain which can be
1582 evaluated in the current scope. */
1583
1584void
fba45db2 1585do_displays (void)
c906108c 1586{
52f0bd74 1587 struct display *d;
c906108c
SS
1588
1589 for (d = display_chain; d; d = d->next)
1590 do_one_display (d);
1591}
1592
1593/* Delete the auto-display which we were in the process of displaying.
1594 This is done when there is an error or a signal. */
1595
1596void
fba45db2 1597disable_display (int num)
c906108c 1598{
52f0bd74 1599 struct display *d;
c906108c
SS
1600
1601 for (d = display_chain; d; d = d->next)
1602 if (d->number == num)
1603 {
b5de0fa7 1604 d->enabled_p = 0;
c906108c
SS
1605 return;
1606 }
a3f17187 1607 printf_unfiltered (_("No display number %d.\n"), num);
c906108c 1608}
c5aa993b 1609
c906108c 1610void
fba45db2 1611disable_current_display (void)
c906108c
SS
1612{
1613 if (current_display_number >= 0)
1614 {
1615 disable_display (current_display_number);
1616 fprintf_unfiltered (gdb_stderr, "Disabling display %d to avoid infinite recursion.\n",
c5aa993b 1617 current_display_number);
c906108c
SS
1618 }
1619 current_display_number = -1;
1620}
1621
1622static void
fba45db2 1623display_info (char *ignore, int from_tty)
c906108c 1624{
52f0bd74 1625 struct display *d;
c906108c
SS
1626
1627 if (!display_chain)
a3f17187 1628 printf_unfiltered (_("There are no auto-display expressions now.\n"));
c906108c 1629 else
a3f17187
AC
1630 printf_filtered (_("Auto-display expressions now in effect:\n\
1631Num Enb Expression\n"));
c906108c
SS
1632
1633 for (d = display_chain; d; d = d->next)
1634 {
b5de0fa7 1635 printf_filtered ("%d: %c ", d->number, "ny"[(int) d->enabled_p]);
c906108c
SS
1636 if (d->format.size)
1637 printf_filtered ("/%d%c%c ", d->format.count, d->format.size,
c5aa993b 1638 d->format.format);
c906108c
SS
1639 else if (d->format.format)
1640 printf_filtered ("/%c ", d->format.format);
1641 print_expression (d->exp, gdb_stdout);
ae767bfb 1642 if (d->block && !contained_in (get_selected_block (0), d->block))
a3f17187 1643 printf_filtered (_(" (cannot be evaluated in the current context)"));
c906108c
SS
1644 printf_filtered ("\n");
1645 gdb_flush (gdb_stdout);
1646 }
1647}
1648
1649static void
fba45db2 1650enable_display (char *args, int from_tty)
c906108c 1651{
52f0bd74
AC
1652 char *p = args;
1653 char *p1;
1654 int num;
1655 struct display *d;
c906108c
SS
1656
1657 if (p == 0)
1658 {
1659 for (d = display_chain; d; d = d->next)
b5de0fa7 1660 d->enabled_p = 1;
c906108c
SS
1661 }
1662 else
1663 while (*p)
1664 {
1665 p1 = p;
1666 while (*p1 >= '0' && *p1 <= '9')
1667 p1++;
1668 if (*p1 && *p1 != ' ' && *p1 != '\t')
8a3fe4f8 1669 error (_("Arguments must be display numbers."));
c5aa993b 1670
c906108c 1671 num = atoi (p);
c5aa993b 1672
c906108c
SS
1673 for (d = display_chain; d; d = d->next)
1674 if (d->number == num)
1675 {
b5de0fa7 1676 d->enabled_p = 1;
c906108c
SS
1677 goto win;
1678 }
a3f17187 1679 printf_unfiltered (_("No display number %d.\n"), num);
c906108c
SS
1680 win:
1681 p = p1;
1682 while (*p == ' ' || *p == '\t')
1683 p++;
1684 }
1685}
1686
c906108c 1687static void
fba45db2 1688disable_display_command (char *args, int from_tty)
c906108c 1689{
52f0bd74
AC
1690 char *p = args;
1691 char *p1;
1692 struct display *d;
c906108c
SS
1693
1694 if (p == 0)
1695 {
1696 for (d = display_chain; d; d = d->next)
b5de0fa7 1697 d->enabled_p = 0;
c906108c
SS
1698 }
1699 else
1700 while (*p)
1701 {
1702 p1 = p;
1703 while (*p1 >= '0' && *p1 <= '9')
1704 p1++;
1705 if (*p1 && *p1 != ' ' && *p1 != '\t')
8a3fe4f8 1706 error (_("Arguments must be display numbers."));
c5aa993b 1707
c906108c
SS
1708 disable_display (atoi (p));
1709
1710 p = p1;
1711 while (*p == ' ' || *p == '\t')
1712 p++;
1713 }
1714}
c906108c 1715\f
c5aa993b 1716
c906108c
SS
1717/* Print the value in stack frame FRAME of a variable
1718 specified by a struct symbol. */
1719
1720void
fba45db2
KB
1721print_variable_value (struct symbol *var, struct frame_info *frame,
1722 struct ui_file *stream)
c906108c 1723{
3d6d86c6 1724 struct value *val = read_var_value (var, frame);
c906108c
SS
1725
1726 value_print (val, stream, 0, Val_pretty_default);
1727}
1728
c906108c 1729static void
fba45db2 1730printf_command (char *arg, int from_tty)
c906108c 1731{
52f0bd74
AC
1732 char *f = NULL;
1733 char *s = arg;
c906108c 1734 char *string = NULL;
3d6d86c6 1735 struct value **val_args;
c906108c
SS
1736 char *substrings;
1737 char *current_substring;
1738 int nargs = 0;
1739 int allocated_args = 20;
1740 struct cleanup *old_cleanups;
1741
f976f6d4
AC
1742 val_args = (struct value **) xmalloc (allocated_args
1743 * sizeof (struct value *));
c13c43fd 1744 old_cleanups = make_cleanup (free_current_contents, &val_args);
c906108c
SS
1745
1746 if (s == 0)
e2e0b3e5 1747 error_no_arg (_("format-control string and values to print"));
c906108c
SS
1748
1749 /* Skip white space before format string */
c5aa993b
JM
1750 while (*s == ' ' || *s == '\t')
1751 s++;
c906108c
SS
1752
1753 /* A format string should follow, enveloped in double quotes */
1754 if (*s++ != '"')
8a3fe4f8 1755 error (_("Bad format string, missing '\"'."));
c906108c
SS
1756
1757 /* Parse the format-control string and copy it into the string STRING,
1758 processing some kinds of escape sequence. */
1759
1760 f = string = (char *) alloca (strlen (s) + 1);
1761
1762 while (*s != '"')
1763 {
1764 int c = *s++;
1765 switch (c)
1766 {
1767 case '\0':
8a3fe4f8 1768 error (_("Bad format string, non-terminated '\"'."));
c906108c
SS
1769
1770 case '\\':
1771 switch (c = *s++)
1772 {
1773 case '\\':
1774 *f++ = '\\';
1775 break;
1776 case 'a':
c906108c 1777 *f++ = '\a';
c906108c
SS
1778 break;
1779 case 'b':
1780 *f++ = '\b';
1781 break;
1782 case 'f':
1783 *f++ = '\f';
1784 break;
1785 case 'n':
1786 *f++ = '\n';
1787 break;
1788 case 'r':
1789 *f++ = '\r';
1790 break;
1791 case 't':
1792 *f++ = '\t';
1793 break;
1794 case 'v':
1795 *f++ = '\v';
1796 break;
1797 case '"':
1798 *f++ = '"';
1799 break;
1800 default:
1801 /* ??? TODO: handle other escape sequences */
8a3fe4f8 1802 error (_("Unrecognized escape character \\%c in format string."),
c906108c
SS
1803 c);
1804 }
1805 break;
1806
1807 default:
1808 *f++ = c;
1809 }
1810 }
1811
1812 /* Skip over " and following space and comma. */
1813 s++;
1814 *f++ = '\0';
c5aa993b
JM
1815 while (*s == ' ' || *s == '\t')
1816 s++;
c906108c
SS
1817
1818 if (*s != ',' && *s != 0)
8a3fe4f8 1819 error (_("Invalid argument syntax"));
c906108c 1820
c5aa993b
JM
1821 if (*s == ',')
1822 s++;
1823 while (*s == ' ' || *s == '\t')
1824 s++;
c906108c
SS
1825
1826 /* Need extra space for the '\0's. Doubling the size is sufficient. */
1827 substrings = alloca (strlen (string) * 2);
1828 current_substring = substrings;
1829
1830 {
1831 /* Now scan the string for %-specs and see what kinds of args they want.
1832 argclass[I] classifies the %-specs so we can give printf_filtered
1833 something of the right size. */
1834
c5aa993b
JM
1835 enum argclass
1836 {
1837 no_arg, int_arg, string_arg, double_arg, long_long_arg
1838 };
c906108c
SS
1839 enum argclass *argclass;
1840 enum argclass this_argclass;
1841 char *last_arg;
1842 int nargs_wanted;
1843 int lcount;
1844 int i;
1845
1846 argclass = (enum argclass *) alloca (strlen (s) * sizeof *argclass);
1847 nargs_wanted = 0;
1848 f = string;
1849 last_arg = string;
1850 while (*f)
1851 if (*f++ == '%')
1852 {
1853 lcount = 0;
c5aa993b 1854 while (strchr ("0123456789.hlL-+ #", *f))
c906108c
SS
1855 {
1856 if (*f == 'l' || *f == 'L')
1857 lcount++;
1858 f++;
1859 }
1860 switch (*f)
1861 {
1862 case 's':
1863 this_argclass = string_arg;
1864 break;
1865
1866 case 'e':
1867 case 'f':
1868 case 'g':
1869 this_argclass = double_arg;
1870 break;
1871
1872 case '*':
8a3fe4f8 1873 error (_("`*' not supported for precision or width in printf"));
c906108c
SS
1874
1875 case 'n':
8a3fe4f8 1876 error (_("Format specifier `n' not supported in printf"));
c906108c
SS
1877
1878 case '%':
1879 this_argclass = no_arg;
1880 break;
1881
1882 default:
1883 if (lcount > 1)
1884 this_argclass = long_long_arg;
1885 else
1886 this_argclass = int_arg;
1887 break;
1888 }
1889 f++;
1890 if (this_argclass != no_arg)
1891 {
1892 strncpy (current_substring, last_arg, f - last_arg);
1893 current_substring += f - last_arg;
1894 *current_substring++ = '\0';
1895 last_arg = f;
1896 argclass[nargs_wanted++] = this_argclass;
1897 }
1898 }
1899
1900 /* Now, parse all arguments and evaluate them.
1901 Store the VALUEs in VAL_ARGS. */
1902
1903 while (*s != '\0')
1904 {
1905 char *s1;
1906 if (nargs == allocated_args)
f976f6d4
AC
1907 val_args = (struct value **) xrealloc ((char *) val_args,
1908 (allocated_args *= 2)
1909 * sizeof (struct value *));
c906108c
SS
1910 s1 = s;
1911 val_args[nargs] = parse_to_comma_and_eval (&s1);
c5aa993b 1912
c906108c
SS
1913 /* If format string wants a float, unchecked-convert the value to
1914 floating point of the same size */
c5aa993b 1915
c906108c
SS
1916 if (argclass[nargs] == double_arg)
1917 {
df407dfe 1918 struct type *type = value_type (val_args[nargs]);
c906108c 1919 if (TYPE_LENGTH (type) == sizeof (float))
04624583 1920 deprecated_set_value_type (val_args[nargs], builtin_type_float);
c906108c 1921 if (TYPE_LENGTH (type) == sizeof (double))
04624583 1922 deprecated_set_value_type (val_args[nargs], builtin_type_double);
c906108c
SS
1923 }
1924 nargs++;
1925 s = s1;
1926 if (*s == ',')
1927 s++;
1928 }
c5aa993b 1929
c906108c 1930 if (nargs != nargs_wanted)
8a3fe4f8 1931 error (_("Wrong number of arguments for specified format-string"));
c906108c
SS
1932
1933 /* Now actually print them. */
1934 current_substring = substrings;
1935 for (i = 0; i < nargs; i++)
1936 {
1937 switch (argclass[i])
1938 {
1939 case string_arg:
1940 {
1941 char *str;
1942 CORE_ADDR tem;
1943 int j;
1aa20aa8 1944 tem = value_as_address (val_args[i]);
c906108c
SS
1945
1946 /* This is a %s argument. Find the length of the string. */
c5aa993b 1947 for (j = 0;; j++)
c906108c
SS
1948 {
1949 char c;
1950 QUIT;
d4b2399a 1951 read_memory (tem + j, &c, 1);
c906108c
SS
1952 if (c == 0)
1953 break;
1954 }
1955
1956 /* Copy the string contents into a string inside GDB. */
1957 str = (char *) alloca (j + 1);
7b92f6e1
MS
1958 if (j != 0)
1959 read_memory (tem, str, j);
c906108c
SS
1960 str[j] = 0;
1961
1962 printf_filtered (current_substring, str);
1963 }
1964 break;
1965 case double_arg:
1966 {
1967 double val = value_as_double (val_args[i]);
1968 printf_filtered (current_substring, val);
1969 break;
1970 }
1971 case long_long_arg:
1972#if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG)
1973 {
1974 long long val = value_as_long (val_args[i]);
1975 printf_filtered (current_substring, val);
1976 break;
1977 }
1978#else
8a3fe4f8 1979 error (_("long long not supported in printf"));
c906108c
SS
1980#endif
1981 case int_arg:
1982 {
1983 /* FIXME: there should be separate int_arg and long_arg. */
1984 long val = value_as_long (val_args[i]);
1985 printf_filtered (current_substring, val);
1986 break;
1987 }
c5aa993b 1988 default: /* purecov: deadcode */
8a3fe4f8 1989 error (_("internal error in printf_command")); /* purecov: deadcode */
c906108c
SS
1990 }
1991 /* Skip to the next substring. */
1992 current_substring += strlen (current_substring) + 1;
1993 }
1994 /* Print the portion of the format string after the last argument. */
306d9ac5 1995 puts_filtered (last_arg);
c906108c
SS
1996 }
1997 do_cleanups (old_cleanups);
1998}
c906108c 1999
c906108c 2000void
fba45db2 2001_initialize_printcmd (void)
c906108c 2002{
c94fdfd0
EZ
2003 struct cmd_list_element *c;
2004
c906108c
SS
2005 current_display_number = -1;
2006
2007 add_info ("address", address_info,
1bedd215 2008 _("Describe where symbol SYM is stored."));
c906108c 2009
1bedd215
AC
2010 add_info ("symbol", sym_info, _("\
2011Describe what symbol is at location ADDR.\n\
2012Only for symbols with fixed locations (global or static scope)."));
c906108c 2013
1bedd215
AC
2014 add_com ("x", class_vars, x_command, _("\
2015Examine memory: x/FMT ADDRESS.\n\
c906108c
SS
2016ADDRESS is an expression for the memory address to examine.\n\
2017FMT is a repeat count followed by a format letter and a size letter.\n\
2018Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),\n\
1bedd215
AC
2019 t(binary), f(float), a(address), i(instruction), c(char) and s(string).\n\
2020Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).\n\
c906108c
SS
2021The specified number of objects of the specified size are printed\n\
2022according to the format.\n\n\
2023Defaults for format and size letters are those previously used.\n\
2024Default count is 1. Default address is following last thing printed\n\
1bedd215 2025with this command or \"print\"."));
c906108c 2026
c906108c
SS
2027#if 0
2028 add_com ("whereis", class_vars, whereis_command,
1bedd215 2029 _("Print line number and file of definition of variable."));
c906108c 2030#endif
c5aa993b 2031
1bedd215
AC
2032 add_info ("display", display_info, _("\
2033Expressions to display when program stops, with code numbers."));
c906108c 2034
1a966eab
AC
2035 add_cmd ("undisplay", class_vars, undisplay_command, _("\
2036Cancel some expressions to be displayed when program stops.\n\
c906108c
SS
2037Arguments are the code numbers of the expressions to stop displaying.\n\
2038No argument means cancel all automatic-display expressions.\n\
2039\"delete display\" has the same effect as this command.\n\
1a966eab 2040Do \"info display\" to see current list of code numbers."),
c5aa993b 2041 &cmdlist);
c906108c 2042
1bedd215
AC
2043 add_com ("display", class_vars, display_command, _("\
2044Print value of expression EXP each time the program stops.\n\
c906108c
SS
2045/FMT may be used before EXP as in the \"print\" command.\n\
2046/FMT \"i\" or \"s\" or including a size-letter is allowed,\n\
2047as in the \"x\" command, and then EXP is used to get the address to examine\n\
2048and examining is done as in the \"x\" command.\n\n\
2049With no argument, display all currently requested auto-display expressions.\n\
1bedd215 2050Use \"undisplay\" to cancel display requests previously made."));
c906108c 2051
1a966eab
AC
2052 add_cmd ("display", class_vars, enable_display, _("\
2053Enable some expressions to be displayed when program stops.\n\
c906108c
SS
2054Arguments are the code numbers of the expressions to resume displaying.\n\
2055No argument means enable all automatic-display expressions.\n\
1a966eab 2056Do \"info display\" to see current list of code numbers."), &enablelist);
c906108c 2057
1a966eab
AC
2058 add_cmd ("display", class_vars, disable_display_command, _("\
2059Disable some expressions to be displayed when program stops.\n\
c906108c
SS
2060Arguments are the code numbers of the expressions to stop displaying.\n\
2061No argument means disable all automatic-display expressions.\n\
1a966eab 2062Do \"info display\" to see current list of code numbers."), &disablelist);
c906108c 2063
1a966eab
AC
2064 add_cmd ("display", class_vars, undisplay_command, _("\
2065Cancel some expressions to be displayed when program stops.\n\
c906108c
SS
2066Arguments are the code numbers of the expressions to stop displaying.\n\
2067No argument means cancel all automatic-display expressions.\n\
1a966eab 2068Do \"info display\" to see current list of code numbers."), &deletelist);
c906108c 2069
1bedd215
AC
2070 add_com ("printf", class_vars, printf_command, _("\
2071printf \"printf format string\", arg1, arg2, arg3, ..., argn\n\
2072This is useful for formatted output in user-defined commands."));
c906108c 2073
1bedd215
AC
2074 add_com ("output", class_vars, output_command, _("\
2075Like \"print\" but don't put in value history and don't print newline.\n\
2076This is useful in user-defined commands."));
c906108c 2077
1bedd215
AC
2078 add_prefix_cmd ("set", class_vars, set_command, _("\
2079Evaluate expression EXP and assign result to variable VAR, using assignment\n\
c906108c
SS
2080syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n\
2081example). VAR may be a debugger \"convenience\" variable (names starting\n\
2082with $), a register (a few standard names starting with $), or an actual\n\
1bedd215
AC
2083variable in the program being debugged. EXP is any valid expression.\n\
2084Use \"set variable\" for variables with names identical to set subcommands.\n\
2085\n\
2086With a subcommand, this command modifies parts of the gdb environment.\n\
2087You can see these environment settings with the \"show\" command."),
c5aa993b 2088 &setlist, "set ", 1, &cmdlist);
c906108c 2089 if (dbx_commands)
1bedd215
AC
2090 add_com ("assign", class_vars, set_command, _("\
2091Evaluate expression EXP and assign result to variable VAR, using assignment\n\
c906108c
SS
2092syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n\
2093example). VAR may be a debugger \"convenience\" variable (names starting\n\
2094with $), a register (a few standard names starting with $), or an actual\n\
1bedd215
AC
2095variable in the program being debugged. EXP is any valid expression.\n\
2096Use \"set variable\" for variables with names identical to set subcommands.\n\
c906108c 2097\nWith a subcommand, this command modifies parts of the gdb environment.\n\
1bedd215 2098You can see these environment settings with the \"show\" command."));
c906108c
SS
2099
2100 /* "call" is the same as "set", but handy for dbx users to call fns. */
1bedd215
AC
2101 c = add_com ("call", class_vars, call_command, _("\
2102Call a function in the program.\n\
c906108c
SS
2103The argument is the function name and arguments, in the notation of the\n\
2104current working language. The result is printed and saved in the value\n\
1bedd215 2105history, if it is not void."));
5ba2abeb 2106 set_cmd_completer (c, location_completer);
c906108c 2107
1a966eab
AC
2108 add_cmd ("variable", class_vars, set_command, _("\
2109Evaluate expression EXP and assign result to variable VAR, using assignment\n\
c906108c
SS
2110syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n\
2111example). VAR may be a debugger \"convenience\" variable (names starting\n\
2112with $), a register (a few standard names starting with $), or an actual\n\
2113variable in the program being debugged. EXP is any valid expression.\n\
1a966eab 2114This may usually be abbreviated to simply \"set\"."),
c5aa993b 2115 &setlist);
c906108c 2116
1bedd215
AC
2117 c = add_com ("print", class_vars, print_command, _("\
2118Print value of expression EXP.\n\
c906108c
SS
2119Variables accessible are those of the lexical environment of the selected\n\
2120stack frame, plus all those whose scope is global or an entire file.\n\
2121\n\
2122$NUM gets previous value number NUM. $ and $$ are the last two values.\n\
2123$$NUM refers to NUM'th value back from the last one.\n\
1bedd215
AC
2124Names starting with $ refer to registers (with the values they would have\n\
2125if the program were to return to the stack frame now selected, restoring\n\
c906108c
SS
2126all registers saved by frames farther in) or else to debugger\n\
2127\"convenience\" variables (any such name not a known register).\n\
1bedd215
AC
2128Use assignment expressions to give values to convenience variables.\n\
2129\n\
c906108c
SS
2130{TYPE}ADREXP refers to a datum of data type TYPE, located at address ADREXP.\n\
2131@ is a binary operator for treating consecutive data objects\n\
2132anywhere in memory as an array. FOO@NUM gives an array whose first\n\
2133element is FOO, whose second element is stored in the space following\n\
2134where FOO is stored, etc. FOO must be an expression whose value\n\
1bedd215
AC
2135resides in memory.\n\
2136\n\
c906108c 2137EXP may be preceded with /FMT, where FMT is a format letter\n\
1bedd215 2138but no count or size letter (see \"x\" command)."));
5ba2abeb 2139 set_cmd_completer (c, location_completer);
c906108c
SS
2140 add_com_alias ("p", "print", class_vars, 1);
2141
1bedd215
AC
2142 c = add_com ("inspect", class_vars, inspect_command, _("\
2143Same as \"print\" command, except that if you are running in the epoch\n\
2144environment, the value is printed in its own window."));
5ba2abeb 2145 set_cmd_completer (c, location_completer);
c906108c 2146
35096d9d
AC
2147 add_setshow_uinteger_cmd ("max-symbolic-offset", no_class,
2148 &max_symbolic_offset, _("\
2149Set the largest offset that will be printed in <symbol+1234> form."), _("\
2150Show the largest offset that will be printed in <symbol+1234> form."), NULL,
2151 NULL,
920d2a44 2152 show_max_symbolic_offset,
35096d9d 2153 &setprintlist, &showprintlist);
5bf193a2
AC
2154 add_setshow_boolean_cmd ("symbol-filename", no_class,
2155 &print_symbol_filename, _("\
2156Set printing of source filename and line number with <symbol>."), _("\
2157Show printing of source filename and line number with <symbol>."), NULL,
2158 NULL,
920d2a44 2159 show_print_symbol_filename,
5bf193a2 2160 &setprintlist, &showprintlist);
c906108c
SS
2161
2162 /* For examine/instruction a single byte quantity is specified as
2163 the data. This avoids problems with value_at_lazy() requiring a
2164 valid data type (and rejecting VOID). */
2165 examine_i_type = init_type (TYPE_CODE_INT, 1, 0, "examine_i_type", NULL);
2166
2167 examine_b_type = init_type (TYPE_CODE_INT, 1, 0, "examine_b_type", NULL);
2168 examine_h_type = init_type (TYPE_CODE_INT, 2, 0, "examine_h_type", NULL);
2169 examine_w_type = init_type (TYPE_CODE_INT, 4, 0, "examine_w_type", NULL);
2170 examine_g_type = init_type (TYPE_CODE_INT, 8, 0, "examine_g_type", NULL);
2171
2172}
This page took 0.663143 seconds and 4 git commands to generate.