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