install_minimal_symbols: use memset instead of setting each field.
[deliverable/binutils-gdb.git] / gdb / printcmd.c
CommitLineData
c906108c 1/* Print values for GNU debugger GDB.
e2ad119d 2
0b302171 3 Copyright (C) 1986-2012 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
19
20#include "defs.h"
21#include "gdb_string.h"
22#include "frame.h"
23#include "symtab.h"
24#include "gdbtypes.h"
25#include "value.h"
26#include "language.h"
27#include "expression.h"
28#include "gdbcore.h"
29#include "gdbcmd.h"
30#include "target.h"
31#include "breakpoint.h"
32#include "demangle.h"
50f182aa 33#include "gdb-demangle.h"
c906108c
SS
34#include "valprint.h"
35#include "annotate.h"
c5aa993b
JM
36#include "symfile.h" /* for overlay functions */
37#include "objfiles.h" /* ditto */
c94fdfd0 38#include "completer.h" /* for completion functions */
8b93c638 39#include "ui-out.h"
261397f8 40#include "gdb_assert.h"
fe898f56 41#include "block.h"
92bf2b80 42#include "disasm.h"
1a619819 43#include "dfp.h"
79a45b7d 44#include "valprint.h"
a3247a22
PP
45#include "exceptions.h"
46#include "observer.h"
47#include "solist.h"
a3247a22 48#include "parser-defs.h"
6c7a06a3 49#include "charset.h"
704e9165 50#include "arch-utils.h"
e9cafbcc 51#include "cli/cli-utils.h"
d3ce09f5 52#include "format.h"
c906108c 53
6a83354a 54#ifdef TUI
0df8b418 55#include "tui/tui.h" /* For tui_active et al. */
6a83354a
AC
56#endif
57
c906108c 58struct format_data
c5aa993b
JM
59 {
60 int count;
61 char format;
62 char size;
a6bac58e
TT
63
64 /* True if the value should be printed raw -- that is, bypassing
65 python-based formatters. */
66 unsigned char raw;
c5aa993b 67 };
c906108c
SS
68
69/* Last specified output format. */
70
a6bac58e 71static char last_format = 0;
c906108c
SS
72
73/* Last specified examination size. 'b', 'h', 'w' or `q'. */
74
75static char last_size = 'w';
76
5d3729b5 77/* Default address to examine next, and associated architecture. */
c906108c 78
5d3729b5 79static struct gdbarch *next_gdbarch;
c906108c
SS
80static CORE_ADDR next_address;
81
a4642986
MR
82/* Number of delay instructions following current disassembled insn. */
83
84static int branch_delay_insns;
85
c906108c
SS
86/* Last address examined. */
87
88static CORE_ADDR last_examine_address;
89
90/* Contents of last address examined.
91 This is not valid past the end of the `x' command! */
92
3d6d86c6 93static struct value *last_examine_value;
c906108c
SS
94
95/* Largest offset between a symbolic value and an address, that will be
96 printed as `0x1234 <symbol+offset>'. */
97
98static unsigned int max_symbolic_offset = UINT_MAX;
920d2a44
AC
99static void
100show_max_symbolic_offset (struct ui_file *file, int from_tty,
101 struct cmd_list_element *c, const char *value)
102{
3e43a32a
MS
103 fprintf_filtered (file,
104 _("The largest offset that will be "
105 "printed in <symbol+1234> form is %s.\n"),
920d2a44
AC
106 value);
107}
c906108c
SS
108
109/* Append the source filename and linenumber of the symbol when
110 printing a symbolic value as `<symbol at filename:linenum>' if set. */
111static int print_symbol_filename = 0;
920d2a44
AC
112static void
113show_print_symbol_filename (struct ui_file *file, int from_tty,
114 struct cmd_list_element *c, const char *value)
115{
3e43a32a
MS
116 fprintf_filtered (file, _("Printing of source filename and "
117 "line number with <symbol> is %s.\n"),
920d2a44
AC
118 value);
119}
c906108c
SS
120
121/* Number of auto-display expression currently being displayed.
9d8fa392 122 So that we can disable it if we get a signal within it.
c906108c
SS
123 -1 when not doing one. */
124
125int current_display_number;
126
c906108c 127struct display
c5aa993b
JM
128 {
129 /* Chain link to next auto-display item. */
130 struct display *next;
6c95b8df 131
fa8a61dc
TT
132 /* The expression as the user typed it. */
133 char *exp_string;
6c95b8df 134
c5aa993b
JM
135 /* Expression to be evaluated and displayed. */
136 struct expression *exp;
6c95b8df 137
c5aa993b
JM
138 /* Item number of this auto-display item. */
139 int number;
6c95b8df 140
c5aa993b
JM
141 /* Display format specified. */
142 struct format_data format;
6c95b8df
PA
143
144 /* Program space associated with `block'. */
145 struct program_space *pspace;
146
0df8b418 147 /* Innermost block required by this expression when evaluated. */
c5aa993b 148 struct block *block;
6c95b8df 149
0df8b418 150 /* Status of this display (enabled or disabled). */
b5de0fa7 151 int enabled_p;
c5aa993b 152 };
c906108c
SS
153
154/* Chain of expressions whose values should be displayed
155 automatically each time the program stops. */
156
157static struct display *display_chain;
158
159static int display_number;
160
c9174737
PA
161/* Walk the following statement or block through all displays.
162 ALL_DISPLAYS_SAFE does so even if the statement deletes the current
163 display. */
3c3fe74c
PA
164
165#define ALL_DISPLAYS(B) \
166 for (B = display_chain; B; B = B->next)
167
c9174737
PA
168#define ALL_DISPLAYS_SAFE(B,TMP) \
169 for (B = display_chain; \
170 B ? (TMP = B->next, 1): 0; \
171 B = TMP)
172
0df8b418 173/* Prototypes for exported functions. */
c906108c 174
a14ed312 175void output_command (char *, int);
c906108c 176
a14ed312 177void _initialize_printcmd (void);
c906108c 178
0df8b418 179/* Prototypes for local functions. */
c906108c 180
a14ed312 181static void do_one_display (struct display *);
c906108c 182\f
c5aa993b 183
c906108c
SS
184/* Decode a format specification. *STRING_PTR should point to it.
185 OFORMAT and OSIZE are used as defaults for the format and size
186 if none are given in the format specification.
187 If OSIZE is zero, then the size field of the returned value
188 should be set only if a size is explicitly specified by the
189 user.
190 The structure returned describes all the data
191 found in the specification. In addition, *STRING_PTR is advanced
192 past the specification and past all whitespace following it. */
193
194static struct format_data
fba45db2 195decode_format (char **string_ptr, int oformat, int osize)
c906108c
SS
196{
197 struct format_data val;
52f0bd74 198 char *p = *string_ptr;
c906108c
SS
199
200 val.format = '?';
201 val.size = '?';
202 val.count = 1;
a6bac58e 203 val.raw = 0;
c906108c
SS
204
205 if (*p >= '0' && *p <= '9')
206 val.count = atoi (p);
c5aa993b
JM
207 while (*p >= '0' && *p <= '9')
208 p++;
c906108c
SS
209
210 /* Now process size or format letters that follow. */
211
212 while (1)
213 {
214 if (*p == 'b' || *p == 'h' || *p == 'w' || *p == 'g')
215 val.size = *p++;
a6bac58e
TT
216 else if (*p == 'r')
217 {
218 val.raw = 1;
219 p++;
220 }
c906108c
SS
221 else if (*p >= 'a' && *p <= 'z')
222 val.format = *p++;
223 else
224 break;
225 }
226
c5aa993b
JM
227 while (*p == ' ' || *p == '\t')
228 p++;
c906108c
SS
229 *string_ptr = p;
230
231 /* Set defaults for format and size if not specified. */
232 if (val.format == '?')
233 {
234 if (val.size == '?')
235 {
236 /* Neither has been specified. */
237 val.format = oformat;
238 val.size = osize;
239 }
240 else
241 /* If a size is specified, any format makes a reasonable
242 default except 'i'. */
243 val.format = oformat == 'i' ? 'x' : oformat;
244 }
245 else if (val.size == '?')
246 switch (val.format)
247 {
248 case 'a':
5d3729b5
UW
249 /* Pick the appropriate size for an address. This is deferred
250 until do_examine when we know the actual architecture to use.
251 A special size value of 'a' is used to indicate this case. */
252 val.size = osize ? 'a' : osize;
c906108c
SS
253 break;
254 case 'f':
255 /* Floating point has to be word or giantword. */
256 if (osize == 'w' || osize == 'g')
257 val.size = osize;
258 else
259 /* Default it to giantword if the last used size is not
260 appropriate. */
261 val.size = osize ? 'g' : osize;
262 break;
263 case 'c':
264 /* Characters default to one byte. */
265 val.size = osize ? 'b' : osize;
266 break;
9a22f0d0 267 case 's':
3e43a32a
MS
268 /* Display strings with byte size chars unless explicitly
269 specified. */
9a22f0d0
PM
270 val.size = '\0';
271 break;
272
c906108c
SS
273 default:
274 /* The default is the size most recently specified. */
275 val.size = osize;
276 }
277
278 return val;
279}
280\f
79a45b7d 281/* Print value VAL on stream according to OPTIONS.
c906108c 282 Do not end with a newline.
c906108c 283 SIZE is the letter for the size of datum being printed.
ea37ba09
DJ
284 This is used to pad hex numbers so they line up. SIZE is 0
285 for print / output and set for examine. */
c906108c
SS
286
287static void
79a45b7d
TT
288print_formatted (struct value *val, int size,
289 const struct value_print_options *options,
fba45db2 290 struct ui_file *stream)
c906108c 291{
df407dfe 292 struct type *type = check_typedef (value_type (val));
c906108c
SS
293 int len = TYPE_LENGTH (type);
294
295 if (VALUE_LVAL (val) == lval_memory)
42ae5230 296 next_address = value_address (val) + len;
c906108c 297
ea37ba09 298 if (size)
c906108c 299 {
79a45b7d 300 switch (options->format)
ea37ba09
DJ
301 {
302 case 's':
6c7a06a3
TT
303 {
304 struct type *elttype = value_type (val);
ad3bbd48 305
42ae5230 306 next_address = (value_address (val)
09ca9e2e 307 + val_print_string (elttype, NULL,
42ae5230 308 value_address (val), -1,
9a22f0d0 309 stream, options) * len);
6c7a06a3 310 }
ea37ba09 311 return;
c906108c 312
ea37ba09
DJ
313 case 'i':
314 /* We often wrap here if there are long symbolic names. */
315 wrap_here (" ");
42ae5230 316 next_address = (value_address (val)
13274fc3
UW
317 + gdb_print_insn (get_type_arch (type),
318 value_address (val), stream,
ea37ba09
DJ
319 &branch_delay_insns));
320 return;
321 }
c906108c 322 }
ea37ba09 323
79a45b7d 324 if (options->format == 0 || options->format == 's'
4e885b20 325 || TYPE_CODE (type) == TYPE_CODE_REF
ea37ba09
DJ
326 || TYPE_CODE (type) == TYPE_CODE_ARRAY
327 || TYPE_CODE (type) == TYPE_CODE_STRING
328 || TYPE_CODE (type) == TYPE_CODE_STRUCT
329 || TYPE_CODE (type) == TYPE_CODE_UNION
330 || TYPE_CODE (type) == TYPE_CODE_NAMESPACE)
79a45b7d 331 value_print (val, stream, options);
ea37ba09 332 else
b021a221
MS
333 /* User specified format, so don't look to the type to tell us
334 what to do. */
ab2188aa
PA
335 val_print_scalar_formatted (type,
336 value_contents_for_printing (val),
337 value_embedded_offset (val),
338 val,
339 options, size, stream);
c906108c
SS
340}
341
b806fb9a
UW
342/* Return builtin floating point type of same length as TYPE.
343 If no such type is found, return TYPE itself. */
344static struct type *
50810684 345float_type_from_length (struct type *type)
b806fb9a 346{
50810684 347 struct gdbarch *gdbarch = get_type_arch (type);
b806fb9a
UW
348 const struct builtin_type *builtin = builtin_type (gdbarch);
349 unsigned int len = TYPE_LENGTH (type);
350
351 if (len == TYPE_LENGTH (builtin->builtin_float))
352 type = builtin->builtin_float;
353 else if (len == TYPE_LENGTH (builtin->builtin_double))
354 type = builtin->builtin_double;
355 else if (len == TYPE_LENGTH (builtin->builtin_long_double))
356 type = builtin->builtin_long_double;
357
358 return type;
359}
360
c906108c 361/* Print a scalar of data of type TYPE, pointed to in GDB by VALADDR,
ab2188aa
PA
362 according to OPTIONS and SIZE on STREAM. Formats s and i are not
363 supported at this level. */
c906108c
SS
364
365void
366b1cbf 366print_scalar_formatted (const void *valaddr, struct type *type,
79a45b7d
TT
367 const struct value_print_options *options,
368 int size, struct ui_file *stream)
c906108c 369{
50810684 370 struct gdbarch *gdbarch = get_type_arch (type);
81cb7cc9 371 LONGEST val_long = 0;
c906108c 372 unsigned int len = TYPE_LENGTH (type);
69feb676 373 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
c906108c 374
ab2188aa
PA
375 /* String printing should go through val_print_scalar_formatted. */
376 gdb_assert (options->format != 's');
ea37ba09 377
6b9acc27
JJ
378 if (len > sizeof(LONGEST) &&
379 (TYPE_CODE (type) == TYPE_CODE_INT
380 || TYPE_CODE (type) == TYPE_CODE_ENUM))
381 {
79a45b7d 382 switch (options->format)
6b9acc27
JJ
383 {
384 case 'o':
d44e8473 385 print_octal_chars (stream, valaddr, len, byte_order);
6b9acc27
JJ
386 return;
387 case 'u':
388 case 'd':
d44e8473 389 print_decimal_chars (stream, valaddr, len, byte_order);
6b9acc27
JJ
390 return;
391 case 't':
d44e8473 392 print_binary_chars (stream, valaddr, len, byte_order);
6b9acc27
JJ
393 return;
394 case 'x':
d44e8473 395 print_hex_chars (stream, valaddr, len, byte_order);
6b9acc27
JJ
396 return;
397 case 'c':
6c7a06a3 398 print_char_chars (stream, type, valaddr, len, byte_order);
6b9acc27
JJ
399 return;
400 default:
401 break;
402 };
403 }
404
79a45b7d 405 if (options->format != 'f')
c906108c
SS
406 val_long = unpack_long (type, valaddr);
407
ef166cf4 408 /* If the value is a pointer, and pointers and addresses are not the
d0aee0c4 409 same, then at this point, the value's length (in target bytes) is
17a912b6 410 gdbarch_addr_bit/TARGET_CHAR_BIT, not TYPE_LENGTH (type). */
ef166cf4 411 if (TYPE_CODE (type) == TYPE_CODE_PTR)
69feb676 412 len = gdbarch_addr_bit (gdbarch) / TARGET_CHAR_BIT;
ef166cf4 413
c906108c
SS
414 /* If we are printing it as unsigned, truncate it in case it is actually
415 a negative signed value (e.g. "print/u (short)-1" should print 65535
416 (if shorts are 16 bits) instead of 4294967295). */
1fac167a 417 if (options->format != 'd' || TYPE_UNSIGNED (type))
c906108c
SS
418 {
419 if (len < sizeof (LONGEST))
420 val_long &= ((LONGEST) 1 << HOST_CHAR_BIT * len) - 1;
421 }
422
79a45b7d 423 switch (options->format)
c906108c
SS
424 {
425 case 'x':
426 if (!size)
427 {
675dcf4f 428 /* No size specified, like in print. Print varying # of digits. */
c906108c
SS
429 print_longest (stream, 'x', 1, val_long);
430 }
431 else
432 switch (size)
433 {
434 case 'b':
435 case 'h':
436 case 'w':
437 case 'g':
438 print_longest (stream, size, 1, val_long);
439 break;
440 default:
8a3fe4f8 441 error (_("Undefined output size \"%c\"."), size);
c906108c
SS
442 }
443 break;
444
445 case 'd':
446 print_longest (stream, 'd', 1, val_long);
447 break;
448
449 case 'u':
450 print_longest (stream, 'u', 0, val_long);
451 break;
452
453 case 'o':
454 if (val_long)
455 print_longest (stream, 'o', 1, val_long);
456 else
457 fprintf_filtered (stream, "0");
458 break;
459
460 case 'a':
593de6a6 461 {
593de6a6 462 CORE_ADDR addr = unpack_pointer (type, valaddr);
ad3bbd48 463
5af949e3 464 print_address (gdbarch, addr, stream);
593de6a6 465 }
c906108c
SS
466 break;
467
468 case 'c':
79a45b7d
TT
469 {
470 struct value_print_options opts = *options;
69feb676 471
ad3bbd48 472 opts.format = 0;
79a45b7d 473 if (TYPE_UNSIGNED (type))
69feb676
UW
474 type = builtin_type (gdbarch)->builtin_true_unsigned_char;
475 else
476 type = builtin_type (gdbarch)->builtin_true_char;
477
478 value_print (value_from_longest (type, val_long), stream, &opts);
79a45b7d 479 }
c906108c
SS
480 break;
481
482 case 'f':
50810684 483 type = float_type_from_length (type);
c906108c
SS
484 print_floating (valaddr, type, stream);
485 break;
486
487 case 0:
675dcf4f
MK
488 internal_error (__FILE__, __LINE__,
489 _("failed internal consistency check"));
c906108c
SS
490
491 case 't':
492 /* Binary; 't' stands for "two". */
493 {
c5aa993b
JM
494 char bits[8 * (sizeof val_long) + 1];
495 char buf[8 * (sizeof val_long) + 32];
c906108c
SS
496 char *cp = bits;
497 int width;
498
c5aa993b
JM
499 if (!size)
500 width = 8 * (sizeof val_long);
501 else
502 switch (size)
c906108c
SS
503 {
504 case 'b':
505 width = 8;
506 break;
507 case 'h':
508 width = 16;
509 break;
510 case 'w':
511 width = 32;
512 break;
513 case 'g':
514 width = 64;
515 break;
516 default:
8a3fe4f8 517 error (_("Undefined output size \"%c\"."), size);
c906108c
SS
518 }
519
c5aa993b
JM
520 bits[width] = '\0';
521 while (width-- > 0)
522 {
523 bits[width] = (val_long & 1) ? '1' : '0';
524 val_long >>= 1;
525 }
c906108c
SS
526 if (!size)
527 {
528 while (*cp && *cp == '0')
529 cp++;
530 if (*cp == '\0')
531 cp--;
532 }
daac021a 533 strncpy (buf, cp, sizeof (bits));
306d9ac5 534 fputs_filtered (buf, stream);
c906108c
SS
535 }
536 break;
537
538 default:
79a45b7d 539 error (_("Undefined output format \"%c\"."), options->format);
c906108c
SS
540 }
541}
542
543/* Specify default address for `x' command.
675dcf4f 544 The `info lines' command uses this. */
c906108c
SS
545
546void
8b9b9e1a 547set_next_address (struct gdbarch *gdbarch, CORE_ADDR addr)
c906108c 548{
8b9b9e1a
UW
549 struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
550
5d3729b5 551 next_gdbarch = gdbarch;
c906108c
SS
552 next_address = addr;
553
554 /* Make address available to the user as $_. */
555 set_internalvar (lookup_internalvar ("_"),
8b9b9e1a 556 value_from_pointer (ptr_type, addr));
c906108c
SS
557}
558
559/* Optionally print address ADDR symbolically as <SYMBOL+OFFSET> on STREAM,
560 after LEADIN. Print nothing if no symbolic name is found nearby.
561 Optionally also print source file and line number, if available.
562 DO_DEMANGLE controls whether to print a symbol in its native "raw" form,
563 or to interpret it as a possible C++ name and convert it back to source
564 form. However note that DO_DEMANGLE can be overridden by the specific
9cb709b6
TT
565 settings of the demangle and asm_demangle variables. Returns
566 non-zero if anything was printed; zero otherwise. */
c906108c 567
9cb709b6 568int
22e722e1
DJ
569print_address_symbolic (struct gdbarch *gdbarch, CORE_ADDR addr,
570 struct ui_file *stream,
675dcf4f 571 int do_demangle, char *leadin)
dfcd3bfb
JM
572{
573 char *name = NULL;
574 char *filename = NULL;
575 int unmapped = 0;
576 int offset = 0;
577 int line = 0;
578
675dcf4f 579 /* Throw away both name and filename. */
2f9429ae
AC
580 struct cleanup *cleanup_chain = make_cleanup (free_current_contents, &name);
581 make_cleanup (free_current_contents, &filename);
dfcd3bfb 582
22e722e1 583 if (build_address_symbolic (gdbarch, addr, do_demangle, &name, &offset,
675dcf4f 584 &filename, &line, &unmapped))
2f9429ae
AC
585 {
586 do_cleanups (cleanup_chain);
9cb709b6 587 return 0;
2f9429ae 588 }
dfcd3bfb
JM
589
590 fputs_filtered (leadin, stream);
591 if (unmapped)
592 fputs_filtered ("<*", stream);
593 else
594 fputs_filtered ("<", stream);
595 fputs_filtered (name, stream);
596 if (offset != 0)
597 fprintf_filtered (stream, "+%u", (unsigned int) offset);
598
599 /* Append source filename and line number if desired. Give specific
600 line # of this addr, if we have it; else line # of the nearest symbol. */
601 if (print_symbol_filename && filename != NULL)
602 {
603 if (line != -1)
604 fprintf_filtered (stream, " at %s:%d", filename, line);
605 else
606 fprintf_filtered (stream, " in %s", filename);
607 }
608 if (unmapped)
609 fputs_filtered ("*>", stream);
610 else
611 fputs_filtered (">", stream);
612
613 do_cleanups (cleanup_chain);
9cb709b6 614 return 1;
dfcd3bfb
JM
615}
616
617/* Given an address ADDR return all the elements needed to print the
0df8b418 618 address in a symbolic form. NAME can be mangled or not depending
dfcd3bfb 619 on DO_DEMANGLE (and also on the asm_demangle global variable,
0df8b418
MS
620 manipulated via ''set print asm-demangle''). Return 0 in case of
621 success, when all the info in the OUT paramters is valid. Return 1
622 otherwise. */
dfcd3bfb 623int
22e722e1
DJ
624build_address_symbolic (struct gdbarch *gdbarch,
625 CORE_ADDR addr, /* IN */
dfcd3bfb
JM
626 int do_demangle, /* IN */
627 char **name, /* OUT */
628 int *offset, /* OUT */
629 char **filename, /* OUT */
630 int *line, /* OUT */
631 int *unmapped) /* OUT */
c906108c
SS
632{
633 struct minimal_symbol *msymbol;
634 struct symbol *symbol;
c906108c 635 CORE_ADDR name_location = 0;
714835d5 636 struct obj_section *section = NULL;
0d5cff50 637 const char *name_temp = "";
dfcd3bfb 638
89c83b10 639 /* Let's say it is mapped (not unmapped). */
dfcd3bfb 640 *unmapped = 0;
c906108c 641
dfcd3bfb 642 /* Determine if the address is in an overlay, and whether it is
675dcf4f 643 mapped. */
c906108c
SS
644 if (overlay_debugging)
645 {
646 section = find_pc_overlay (addr);
647 if (pc_in_unmapped_range (addr, section))
648 {
dfcd3bfb 649 *unmapped = 1;
c906108c
SS
650 addr = overlay_mapped_address (addr, section);
651 }
652 }
653
c906108c
SS
654 /* First try to find the address in the symbol table, then
655 in the minsyms. Take the closest one. */
656
657 /* This is defective in the sense that it only finds text symbols. So
658 really this is kind of pointless--we should make sure that the
659 minimal symbols have everything we need (by changing that we could
660 save some memory, but for many debug format--ELF/DWARF or
661 anything/stabs--it would be inconvenient to eliminate those minimal
662 symbols anyway). */
663 msymbol = lookup_minimal_symbol_by_pc_section (addr, section);
664 symbol = find_pc_sect_function (addr, section);
665
666 if (symbol)
667 {
22e722e1
DJ
668 /* If this is a function (i.e. a code address), strip out any
669 non-address bits. For instance, display a pointer to the
670 first instruction of a Thumb function as <function>; the
671 second instruction will be <function+2>, even though the
672 pointer is <function+3>. This matches the ISA behavior. */
673 addr = gdbarch_addr_bits_remove (gdbarch, addr);
674
c906108c 675 name_location = BLOCK_START (SYMBOL_BLOCK_VALUE (symbol));
406fc7fb 676 if (do_demangle || asm_demangle)
de5ad195 677 name_temp = SYMBOL_PRINT_NAME (symbol);
c906108c 678 else
3567439c 679 name_temp = SYMBOL_LINKAGE_NAME (symbol);
c906108c
SS
680 }
681
9cb709b6
TT
682 if (msymbol != NULL
683 && MSYMBOL_SIZE (msymbol) == 0
684 && MSYMBOL_TYPE (msymbol) != mst_text
685 && MSYMBOL_TYPE (msymbol) != mst_text_gnu_ifunc
686 && MSYMBOL_TYPE (msymbol) != mst_file_text)
687 msymbol = NULL;
688
c906108c
SS
689 if (msymbol != NULL)
690 {
691 if (SYMBOL_VALUE_ADDRESS (msymbol) > name_location || symbol == NULL)
692 {
693 /* The msymbol is closer to the address than the symbol;
694 use the msymbol instead. */
695 symbol = 0;
c906108c 696 name_location = SYMBOL_VALUE_ADDRESS (msymbol);
406fc7fb 697 if (do_demangle || asm_demangle)
de5ad195 698 name_temp = SYMBOL_PRINT_NAME (msymbol);
c906108c 699 else
3567439c 700 name_temp = SYMBOL_LINKAGE_NAME (msymbol);
c906108c
SS
701 }
702 }
703 if (symbol == NULL && msymbol == NULL)
dfcd3bfb 704 return 1;
c906108c 705
c906108c
SS
706 /* If the nearest symbol is too far away, don't print anything symbolic. */
707
708 /* For when CORE_ADDR is larger than unsigned int, we do math in
709 CORE_ADDR. But when we detect unsigned wraparound in the
710 CORE_ADDR math, we ignore this test and print the offset,
711 because addr+max_symbolic_offset has wrapped through the end
712 of the address space back to the beginning, giving bogus comparison. */
713 if (addr > name_location + max_symbolic_offset
714 && name_location + max_symbolic_offset > name_location)
dfcd3bfb 715 return 1;
c906108c 716
dfcd3bfb
JM
717 *offset = addr - name_location;
718
719 *name = xstrdup (name_temp);
c906108c 720
c906108c
SS
721 if (print_symbol_filename)
722 {
723 struct symtab_and_line sal;
724
725 sal = find_pc_sect_line (addr, section, 0);
726
727 if (sal.symtab)
dfcd3bfb
JM
728 {
729 *filename = xstrdup (sal.symtab->filename);
730 *line = sal.line;
731 }
c906108c 732 }
dfcd3bfb 733 return 0;
c906108c
SS
734}
735
c906108c
SS
736
737/* Print address ADDR symbolically on STREAM.
738 First print it as a number. Then perhaps print
739 <SYMBOL + OFFSET> after the number. */
740
741void
5af949e3
UW
742print_address (struct gdbarch *gdbarch,
743 CORE_ADDR addr, struct ui_file *stream)
c906108c 744{
5af949e3 745 fputs_filtered (paddress (gdbarch, addr), stream);
22e722e1 746 print_address_symbolic (gdbarch, addr, stream, asm_demangle, " ");
c906108c
SS
747}
748
2b28d209
PP
749/* Return a prefix for instruction address:
750 "=> " for current instruction, else " ". */
751
752const char *
753pc_prefix (CORE_ADDR addr)
754{
755 if (has_stack_frames ())
756 {
757 struct frame_info *frame;
758 CORE_ADDR pc;
759
760 frame = get_selected_frame (NULL);
ce406537 761 if (get_frame_pc_if_available (frame, &pc) && pc == addr)
2b28d209
PP
762 return "=> ";
763 }
764 return " ";
765}
766
c906108c
SS
767/* Print address ADDR symbolically on STREAM. Parameter DEMANGLE
768 controls whether to print the symbolic name "raw" or demangled.
9cb709b6 769 Return non-zero if anything was printed; zero otherwise. */
c906108c 770
9cb709b6 771int
edf0c1b7
TT
772print_address_demangle (const struct value_print_options *opts,
773 struct gdbarch *gdbarch, CORE_ADDR addr,
5af949e3 774 struct ui_file *stream, int do_demangle)
c906108c 775{
1d51a733 776 if (opts->addressprint)
c906108c 777 {
5af949e3 778 fputs_filtered (paddress (gdbarch, addr), stream);
22e722e1 779 print_address_symbolic (gdbarch, addr, stream, do_demangle, " ");
c906108c
SS
780 }
781 else
782 {
9cb709b6 783 return print_address_symbolic (gdbarch, addr, stream, do_demangle, "");
c906108c 784 }
9cb709b6 785 return 1;
c906108c
SS
786}
787\f
788
c906108c
SS
789/* Examine data at address ADDR in format FMT.
790 Fetch it from memory and print on gdb_stdout. */
791
792static void
5d3729b5 793do_examine (struct format_data fmt, struct gdbarch *gdbarch, CORE_ADDR addr)
c906108c 794{
52f0bd74
AC
795 char format = 0;
796 char size;
797 int count = 1;
c906108c 798 struct type *val_type = NULL;
52f0bd74
AC
799 int i;
800 int maxelts;
79a45b7d 801 struct value_print_options opts;
c906108c
SS
802
803 format = fmt.format;
804 size = fmt.size;
805 count = fmt.count;
5d3729b5 806 next_gdbarch = gdbarch;
c906108c 807 next_address = addr;
c906108c 808
9a22f0d0
PM
809 /* Instruction format implies fetch single bytes
810 regardless of the specified size.
811 The case of strings is handled in decode_format, only explicit
812 size operator are not changed to 'b'. */
813 if (format == 'i')
c906108c
SS
814 size = 'b';
815
5d3729b5
UW
816 if (size == 'a')
817 {
818 /* Pick the appropriate size for an address. */
819 if (gdbarch_ptr_bit (next_gdbarch) == 64)
820 size = 'g';
821 else if (gdbarch_ptr_bit (next_gdbarch) == 32)
822 size = 'w';
823 else if (gdbarch_ptr_bit (next_gdbarch) == 16)
824 size = 'h';
825 else
826 /* Bad value for gdbarch_ptr_bit. */
827 internal_error (__FILE__, __LINE__,
828 _("failed internal consistency check"));
829 }
830
831 if (size == 'b')
df4df182 832 val_type = builtin_type (next_gdbarch)->builtin_int8;
c906108c 833 else if (size == 'h')
df4df182 834 val_type = builtin_type (next_gdbarch)->builtin_int16;
c906108c 835 else if (size == 'w')
df4df182 836 val_type = builtin_type (next_gdbarch)->builtin_int32;
c906108c 837 else if (size == 'g')
df4df182 838 val_type = builtin_type (next_gdbarch)->builtin_int64;
c906108c 839
9a22f0d0
PM
840 if (format == 's')
841 {
842 struct type *char_type = NULL;
ad3bbd48 843
9a22f0d0
PM
844 /* Search for "char16_t" or "char32_t" types or fall back to 8-bit char
845 if type is not found. */
846 if (size == 'h')
847 char_type = builtin_type (next_gdbarch)->builtin_char16;
848 else if (size == 'w')
849 char_type = builtin_type (next_gdbarch)->builtin_char32;
850 if (char_type)
851 val_type = char_type;
852 else
853 {
854 if (size != '\0' && size != 'b')
0df8b418
MS
855 warning (_("Unable to display strings with "
856 "size '%c', using 'b' instead."), size);
9a22f0d0
PM
857 size = 'b';
858 val_type = builtin_type (next_gdbarch)->builtin_int8;
859 }
860 }
861
c906108c
SS
862 maxelts = 8;
863 if (size == 'w')
864 maxelts = 4;
865 if (size == 'g')
866 maxelts = 2;
867 if (format == 's' || format == 'i')
868 maxelts = 1;
869
79a45b7d
TT
870 get_formatted_print_options (&opts, format);
871
c906108c
SS
872 /* Print as many objects as specified in COUNT, at most maxelts per line,
873 with the address of the next one at the start of each line. */
874
875 while (count > 0)
876 {
877 QUIT;
2b28d209
PP
878 if (format == 'i')
879 fputs_filtered (pc_prefix (next_address), gdb_stdout);
5af949e3 880 print_address (next_gdbarch, next_address, gdb_stdout);
c906108c
SS
881 printf_filtered (":");
882 for (i = maxelts;
883 i > 0 && count > 0;
884 i--, count--)
885 {
886 printf_filtered ("\t");
887 /* Note that print_formatted sets next_address for the next
888 object. */
889 last_examine_address = next_address;
890
891 if (last_examine_value)
892 value_free (last_examine_value);
893
894 /* The value to be displayed is not fetched greedily.
5d51a2db
MR
895 Instead, to avoid the possibility of a fetched value not
896 being used, its retrieval is delayed until the print code
c5aa993b
JM
897 uses it. When examining an instruction stream, the
898 disassembler will perform its own memory fetch using just
899 the address stored in LAST_EXAMINE_VALUE. FIXME: Should
900 the disassembler be modified so that LAST_EXAMINE_VALUE
901 is left with the byte sequence from the last complete
0df8b418 902 instruction fetched from memory? */
00a4c844 903 last_examine_value = value_at_lazy (val_type, next_address);
c906108c
SS
904
905 if (last_examine_value)
906 release_value (last_examine_value);
907
79a45b7d 908 print_formatted (last_examine_value, size, &opts, gdb_stdout);
a4642986
MR
909
910 /* Display any branch delay slots following the final insn. */
911 if (format == 'i' && count == 1)
912 count += branch_delay_insns;
c906108c
SS
913 }
914 printf_filtered ("\n");
915 gdb_flush (gdb_stdout);
916 }
917}
918\f
919static void
fba45db2 920validate_format (struct format_data fmt, char *cmdname)
c906108c
SS
921{
922 if (fmt.size != 0)
8a3fe4f8 923 error (_("Size letters are meaningless in \"%s\" command."), cmdname);
c906108c 924 if (fmt.count != 1)
8a3fe4f8 925 error (_("Item count other than 1 is meaningless in \"%s\" command."),
c906108c 926 cmdname);
ea37ba09 927 if (fmt.format == 'i')
8a3fe4f8 928 error (_("Format letter \"%c\" is meaningless in \"%s\" command."),
c906108c
SS
929 fmt.format, cmdname);
930}
931
675dcf4f 932/* Evaluate string EXP as an expression in the current language and
c5aa993b 933 print the resulting value. EXP may contain a format specifier as the
675dcf4f 934 first argument ("/x myvar" for example, to print myvar in hex). */
c906108c
SS
935
936static void
fba45db2 937print_command_1 (char *exp, int inspect, int voidprint)
c906108c
SS
938{
939 struct expression *expr;
52f0bd74
AC
940 struct cleanup *old_chain = 0;
941 char format = 0;
3d6d86c6 942 struct value *val;
c906108c
SS
943 struct format_data fmt;
944 int cleanup = 0;
945
c906108c
SS
946 if (exp && *exp == '/')
947 {
948 exp++;
949 fmt = decode_format (&exp, last_format, 0);
950 validate_format (fmt, "print");
951 last_format = format = fmt.format;
952 }
953 else
954 {
955 fmt.count = 1;
956 fmt.format = 0;
957 fmt.size = 0;
a6bac58e 958 fmt.raw = 0;
c906108c
SS
959 }
960
961 if (exp && *exp)
962 {
c906108c 963 expr = parse_expression (exp);
c13c43fd 964 old_chain = make_cleanup (free_current_contents, &expr);
c906108c
SS
965 cleanup = 1;
966 val = evaluate_expression (expr);
c906108c
SS
967 }
968 else
969 val = access_value_history (0);
970
df407dfe
AC
971 if (voidprint || (val && value_type (val) &&
972 TYPE_CODE (value_type (val)) != TYPE_CODE_VOID))
c906108c 973 {
79a45b7d 974 struct value_print_options opts;
c906108c
SS
975 int histindex = record_latest_value (val);
976
977 if (histindex >= 0)
df407dfe 978 annotate_value_history_begin (histindex, value_type (val));
c906108c 979 else
df407dfe 980 annotate_value_begin (value_type (val));
c906108c
SS
981
982 if (inspect)
675dcf4f
MK
983 printf_unfiltered ("\031(gdb-makebuffer \"%s\" %d '(\"",
984 exp, histindex);
c5aa993b
JM
985 else if (histindex >= 0)
986 printf_filtered ("$%d = ", histindex);
c906108c
SS
987
988 if (histindex >= 0)
989 annotate_value_history_value ();
990
79a45b7d
TT
991 get_formatted_print_options (&opts, format);
992 opts.inspect_it = inspect;
a6bac58e 993 opts.raw = fmt.raw;
79a45b7d
TT
994
995 print_formatted (val, fmt.size, &opts, gdb_stdout);
c906108c
SS
996 printf_filtered ("\n");
997
998 if (histindex >= 0)
999 annotate_value_history_end ();
1000 else
1001 annotate_value_end ();
1002
1003 if (inspect)
c5aa993b 1004 printf_unfiltered ("\") )\030");
c906108c
SS
1005 }
1006
1007 if (cleanup)
1008 do_cleanups (old_chain);
c906108c
SS
1009}
1010
c906108c 1011static void
fba45db2 1012print_command (char *exp, int from_tty)
c906108c
SS
1013{
1014 print_command_1 (exp, 0, 1);
1015}
1016
675dcf4f 1017/* Same as print, except in epoch, it gets its own window. */
c906108c 1018static void
fba45db2 1019inspect_command (char *exp, int from_tty)
c906108c
SS
1020{
1021 extern int epoch_interface;
1022
1023 print_command_1 (exp, epoch_interface, 1);
1024}
1025
675dcf4f 1026/* Same as print, except it doesn't print void results. */
c906108c 1027static void
fba45db2 1028call_command (char *exp, int from_tty)
c906108c
SS
1029{
1030 print_command_1 (exp, 0, 0);
1031}
1032
c906108c 1033void
fba45db2 1034output_command (char *exp, int from_tty)
c906108c
SS
1035{
1036 struct expression *expr;
52f0bd74
AC
1037 struct cleanup *old_chain;
1038 char format = 0;
3d6d86c6 1039 struct value *val;
c906108c 1040 struct format_data fmt;
79a45b7d 1041 struct value_print_options opts;
c906108c 1042
777ea8f1 1043 fmt.size = 0;
a6bac58e 1044 fmt.raw = 0;
777ea8f1 1045
c906108c
SS
1046 if (exp && *exp == '/')
1047 {
1048 exp++;
1049 fmt = decode_format (&exp, 0, 0);
1050 validate_format (fmt, "output");
1051 format = fmt.format;
1052 }
1053
1054 expr = parse_expression (exp);
c13c43fd 1055 old_chain = make_cleanup (free_current_contents, &expr);
c906108c
SS
1056
1057 val = evaluate_expression (expr);
1058
df407dfe 1059 annotate_value_begin (value_type (val));
c906108c 1060
79a45b7d 1061 get_formatted_print_options (&opts, format);
a6bac58e 1062 opts.raw = fmt.raw;
79a45b7d 1063 print_formatted (val, fmt.size, &opts, gdb_stdout);
c906108c
SS
1064
1065 annotate_value_end ();
1066
2acceee2
JM
1067 wrap_here ("");
1068 gdb_flush (gdb_stdout);
1069
c906108c
SS
1070 do_cleanups (old_chain);
1071}
1072
c906108c 1073static void
fba45db2 1074set_command (char *exp, int from_tty)
c906108c
SS
1075{
1076 struct expression *expr = parse_expression (exp);
52f0bd74 1077 struct cleanup *old_chain =
c13c43fd 1078 make_cleanup (free_current_contents, &expr);
ad3bbd48 1079
0ece64fd
TG
1080 if (expr->nelts >= 1)
1081 switch (expr->elts[0].opcode)
1082 {
1083 case UNOP_PREINCREMENT:
1084 case UNOP_POSTINCREMENT:
1085 case UNOP_PREDECREMENT:
1086 case UNOP_POSTDECREMENT:
1087 case BINOP_ASSIGN:
1088 case BINOP_ASSIGN_MODIFY:
1089 case BINOP_COMMA:
1090 break;
1091 default:
1092 warning
1093 (_("Expression is not an assignment (and might have no effect)"));
1094 }
52b3699b 1095
c906108c
SS
1096 evaluate_expression (expr);
1097 do_cleanups (old_chain);
1098}
1099
c906108c 1100static void
fba45db2 1101sym_info (char *arg, int from_tty)
c906108c
SS
1102{
1103 struct minimal_symbol *msymbol;
c5aa993b
JM
1104 struct objfile *objfile;
1105 struct obj_section *osect;
c5aa993b
JM
1106 CORE_ADDR addr, sect_addr;
1107 int matches = 0;
1108 unsigned int offset;
c906108c
SS
1109
1110 if (!arg)
e2e0b3e5 1111 error_no_arg (_("address"));
c906108c
SS
1112
1113 addr = parse_and_eval_address (arg);
1114 ALL_OBJSECTIONS (objfile, osect)
c5aa993b 1115 {
94277a38
DJ
1116 /* Only process each object file once, even if there's a separate
1117 debug file. */
1118 if (objfile->separate_debug_objfile_backlink)
1119 continue;
1120
714835d5 1121 sect_addr = overlay_mapped_address (addr, osect);
c906108c 1122
f1f6aadf
PA
1123 if (obj_section_addr (osect) <= sect_addr
1124 && sect_addr < obj_section_endaddr (osect)
714835d5 1125 && (msymbol = lookup_minimal_symbol_by_pc_section (sect_addr, osect)))
c5aa993b 1126 {
c14c28ba 1127 const char *obj_name, *mapped, *sec_name, *msym_name;
e2fd701e
DE
1128 char *loc_string;
1129 struct cleanup *old_chain;
c14c28ba 1130
c5aa993b
JM
1131 matches = 1;
1132 offset = sect_addr - SYMBOL_VALUE_ADDRESS (msymbol);
c14c28ba
PP
1133 mapped = section_is_mapped (osect) ? _("mapped") : _("unmapped");
1134 sec_name = osect->the_bfd_section->name;
1135 msym_name = SYMBOL_PRINT_NAME (msymbol);
1136
e2fd701e
DE
1137 /* Don't print the offset if it is zero.
1138 We assume there's no need to handle i18n of "sym + offset". */
1139 if (offset)
549ba0f8 1140 loc_string = xstrprintf ("%s + %u", msym_name, offset);
e2fd701e 1141 else
549ba0f8 1142 loc_string = xstrprintf ("%s", msym_name);
e2fd701e
DE
1143
1144 /* Use a cleanup to free loc_string in case the user quits
1145 a pagination request inside printf_filtered. */
1146 old_chain = make_cleanup (xfree, loc_string);
1147
c14c28ba
PP
1148 gdb_assert (osect->objfile && osect->objfile->name);
1149 obj_name = osect->objfile->name;
1150
1151 if (MULTI_OBJFILE_P ())
1152 if (pc_in_unmapped_range (addr, osect))
1153 if (section_is_overlay (osect))
e2fd701e 1154 printf_filtered (_("%s in load address range of "
c14c28ba 1155 "%s overlay section %s of %s\n"),
e2fd701e 1156 loc_string, mapped, sec_name, obj_name);
c14c28ba 1157 else
e2fd701e 1158 printf_filtered (_("%s in load address range of "
c14c28ba 1159 "section %s of %s\n"),
e2fd701e 1160 loc_string, sec_name, obj_name);
c14c28ba
PP
1161 else
1162 if (section_is_overlay (osect))
e2fd701e
DE
1163 printf_filtered (_("%s in %s overlay section %s of %s\n"),
1164 loc_string, mapped, sec_name, obj_name);
c14c28ba 1165 else
e2fd701e
DE
1166 printf_filtered (_("%s in section %s of %s\n"),
1167 loc_string, sec_name, obj_name);
c5aa993b 1168 else
c14c28ba
PP
1169 if (pc_in_unmapped_range (addr, osect))
1170 if (section_is_overlay (osect))
e2fd701e 1171 printf_filtered (_("%s in load address range of %s overlay "
c14c28ba 1172 "section %s\n"),
e2fd701e 1173 loc_string, mapped, sec_name);
c14c28ba 1174 else
e2fd701e
DE
1175 printf_filtered (_("%s in load address range of section %s\n"),
1176 loc_string, sec_name);
c14c28ba
PP
1177 else
1178 if (section_is_overlay (osect))
e2fd701e
DE
1179 printf_filtered (_("%s in %s overlay section %s\n"),
1180 loc_string, mapped, sec_name);
c14c28ba 1181 else
e2fd701e
DE
1182 printf_filtered (_("%s in section %s\n"),
1183 loc_string, sec_name);
1184
1185 do_cleanups (old_chain);
c5aa993b
JM
1186 }
1187 }
c906108c 1188 if (matches == 0)
a3f17187 1189 printf_filtered (_("No symbol matches %s.\n"), arg);
c906108c
SS
1190}
1191
c906108c 1192static void
fba45db2 1193address_info (char *exp, int from_tty)
c906108c 1194{
768a979c
UW
1195 struct gdbarch *gdbarch;
1196 int regno;
52f0bd74
AC
1197 struct symbol *sym;
1198 struct minimal_symbol *msymbol;
1199 long val;
714835d5 1200 struct obj_section *section;
08922a10 1201 CORE_ADDR load_addr, context_pc = 0;
c906108c 1202 int is_a_field_of_this; /* C++: lookup_symbol sets this to nonzero
0df8b418 1203 if exp is a field of `this'. */
c906108c
SS
1204
1205 if (exp == 0)
8a3fe4f8 1206 error (_("Argument required."));
c906108c 1207
08922a10 1208 sym = lookup_symbol (exp, get_selected_block (&context_pc), VAR_DOMAIN,
2570f2b7 1209 &is_a_field_of_this);
c906108c
SS
1210 if (sym == NULL)
1211 {
1212 if (is_a_field_of_this)
1213 {
1214 printf_filtered ("Symbol \"");
1215 fprintf_symbol_filtered (gdb_stdout, exp,
1216 current_language->la_language, DMGL_ANSI);
e2b23ee9
AF
1217 printf_filtered ("\" is a field of the local class variable ");
1218 if (current_language->la_language == language_objc)
2625d86c 1219 printf_filtered ("`self'\n"); /* ObjC equivalent of "this" */
e2b23ee9 1220 else
2625d86c 1221 printf_filtered ("`this'\n");
c906108c
SS
1222 return;
1223 }
1224
1225 msymbol = lookup_minimal_symbol (exp, NULL, NULL);
1226
1227 if (msymbol != NULL)
1228 {
5af949e3 1229 gdbarch = get_objfile_arch (msymbol_objfile (msymbol));
c906108c
SS
1230 load_addr = SYMBOL_VALUE_ADDRESS (msymbol);
1231
1232 printf_filtered ("Symbol \"");
1233 fprintf_symbol_filtered (gdb_stdout, exp,
1234 current_language->la_language, DMGL_ANSI);
1235 printf_filtered ("\" is at ");
5af949e3 1236 fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
c906108c 1237 printf_filtered (" in a file compiled without debugging");
714835d5 1238 section = SYMBOL_OBJ_SECTION (msymbol);
c906108c
SS
1239 if (section_is_overlay (section))
1240 {
1241 load_addr = overlay_unmapped_address (load_addr, section);
1242 printf_filtered (",\n -- loaded at ");
5af949e3 1243 fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
714835d5
UW
1244 printf_filtered (" in overlay section %s",
1245 section->the_bfd_section->name);
c906108c
SS
1246 }
1247 printf_filtered (".\n");
1248 }
1249 else
8a3fe4f8 1250 error (_("No symbol \"%s\" in current context."), exp);
c906108c
SS
1251 return;
1252 }
1253
1254 printf_filtered ("Symbol \"");
3567439c 1255 fprintf_symbol_filtered (gdb_stdout, SYMBOL_PRINT_NAME (sym),
c906108c
SS
1256 current_language->la_language, DMGL_ANSI);
1257 printf_filtered ("\" is ");
c5aa993b 1258 val = SYMBOL_VALUE (sym);
714835d5 1259 section = SYMBOL_OBJ_SECTION (sym);
768a979c 1260 gdbarch = get_objfile_arch (SYMBOL_SYMTAB (sym)->objfile);
c906108c
SS
1261
1262 switch (SYMBOL_CLASS (sym))
1263 {
1264 case LOC_CONST:
1265 case LOC_CONST_BYTES:
1266 printf_filtered ("constant");
1267 break;
1268
1269 case LOC_LABEL:
1270 printf_filtered ("a label at address ");
5af949e3
UW
1271 load_addr = SYMBOL_VALUE_ADDRESS (sym);
1272 fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
c906108c
SS
1273 if (section_is_overlay (section))
1274 {
1275 load_addr = overlay_unmapped_address (load_addr, section);
1276 printf_filtered (",\n -- loaded at ");
5af949e3 1277 fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
714835d5
UW
1278 printf_filtered (" in overlay section %s",
1279 section->the_bfd_section->name);
c906108c
SS
1280 }
1281 break;
1282
4c2df51b 1283 case LOC_COMPUTED:
a67af2b9 1284 /* FIXME: cagney/2004-01-26: It should be possible to
768a979c 1285 unconditionally call the SYMBOL_COMPUTED_OPS method when available.
d3efc286 1286 Unfortunately DWARF 2 stores the frame-base (instead of the
a67af2b9
AC
1287 function) location in a function's symbol. Oops! For the
1288 moment enable this when/where applicable. */
3e43a32a
MS
1289 SYMBOL_COMPUTED_OPS (sym)->describe_location (sym, context_pc,
1290 gdb_stdout);
4c2df51b
DJ
1291 break;
1292
c906108c 1293 case LOC_REGISTER:
768a979c
UW
1294 /* GDBARCH is the architecture associated with the objfile the symbol
1295 is defined in; the target architecture may be different, and may
1296 provide additional registers. However, we do not know the target
1297 architecture at this point. We assume the objfile architecture
1298 will contain all the standard registers that occur in debug info
1299 in that objfile. */
1300 regno = SYMBOL_REGISTER_OPS (sym)->register_number (sym, gdbarch);
1301
2a2d4dc3
AS
1302 if (SYMBOL_IS_ARGUMENT (sym))
1303 printf_filtered (_("an argument in register %s"),
768a979c 1304 gdbarch_register_name (gdbarch, regno));
2a2d4dc3
AS
1305 else
1306 printf_filtered (_("a variable in register %s"),
768a979c 1307 gdbarch_register_name (gdbarch, regno));
c906108c
SS
1308 break;
1309
1310 case LOC_STATIC:
a3f17187 1311 printf_filtered (_("static storage at address "));
5af949e3
UW
1312 load_addr = SYMBOL_VALUE_ADDRESS (sym);
1313 fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
c906108c
SS
1314 if (section_is_overlay (section))
1315 {
1316 load_addr = overlay_unmapped_address (load_addr, section);
a3f17187 1317 printf_filtered (_(",\n -- loaded at "));
5af949e3 1318 fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
714835d5
UW
1319 printf_filtered (_(" in overlay section %s"),
1320 section->the_bfd_section->name);
c906108c
SS
1321 }
1322 break;
1323
c906108c 1324 case LOC_REGPARM_ADDR:
768a979c
UW
1325 /* Note comment at LOC_REGISTER. */
1326 regno = SYMBOL_REGISTER_OPS (sym)->register_number (sym, gdbarch);
675dcf4f 1327 printf_filtered (_("address of an argument in register %s"),
768a979c 1328 gdbarch_register_name (gdbarch, regno));
c906108c
SS
1329 break;
1330
1331 case LOC_ARG:
a3f17187 1332 printf_filtered (_("an argument at offset %ld"), val);
c906108c
SS
1333 break;
1334
c906108c 1335 case LOC_LOCAL:
a3f17187 1336 printf_filtered (_("a local variable at frame offset %ld"), val);
c906108c
SS
1337 break;
1338
1339 case LOC_REF_ARG:
a3f17187 1340 printf_filtered (_("a reference argument at offset %ld"), val);
c906108c
SS
1341 break;
1342
c906108c 1343 case LOC_TYPEDEF:
a3f17187 1344 printf_filtered (_("a typedef"));
c906108c
SS
1345 break;
1346
1347 case LOC_BLOCK:
a3f17187 1348 printf_filtered (_("a function at address "));
675dcf4f 1349 load_addr = BLOCK_START (SYMBOL_BLOCK_VALUE (sym));
5af949e3 1350 fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
c906108c
SS
1351 if (section_is_overlay (section))
1352 {
1353 load_addr = overlay_unmapped_address (load_addr, section);
a3f17187 1354 printf_filtered (_(",\n -- loaded at "));
5af949e3 1355 fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
714835d5
UW
1356 printf_filtered (_(" in overlay section %s"),
1357 section->the_bfd_section->name);
c906108c
SS
1358 }
1359 break;
1360
1361 case LOC_UNRESOLVED:
1362 {
1363 struct minimal_symbol *msym;
1364
3567439c 1365 msym = lookup_minimal_symbol (SYMBOL_LINKAGE_NAME (sym), NULL, NULL);
c906108c
SS
1366 if (msym == NULL)
1367 printf_filtered ("unresolved");
1368 else
1369 {
714835d5 1370 section = SYMBOL_OBJ_SECTION (msym);
675dcf4f 1371 load_addr = SYMBOL_VALUE_ADDRESS (msym);
e0740f77
JK
1372
1373 if (section
1374 && (section->the_bfd_section->flags & SEC_THREAD_LOCAL) != 0)
1375 printf_filtered (_("a thread-local variable at offset %s "
1376 "in the thread-local storage for `%s'"),
5af949e3
UW
1377 paddress (gdbarch, load_addr),
1378 section->objfile->name);
e0740f77 1379 else
c906108c 1380 {
e0740f77 1381 printf_filtered (_("static storage at address "));
5af949e3 1382 fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
e0740f77
JK
1383 if (section_is_overlay (section))
1384 {
1385 load_addr = overlay_unmapped_address (load_addr, section);
1386 printf_filtered (_(",\n -- loaded at "));
5af949e3 1387 fputs_filtered (paddress (gdbarch, load_addr), gdb_stdout);
e0740f77
JK
1388 printf_filtered (_(" in overlay section %s"),
1389 section->the_bfd_section->name);
1390 }
c906108c
SS
1391 }
1392 }
1393 }
1394 break;
1395
c906108c 1396 case LOC_OPTIMIZED_OUT:
a3f17187 1397 printf_filtered (_("optimized out"));
c906108c 1398 break;
c5aa993b 1399
c906108c 1400 default:
a3f17187 1401 printf_filtered (_("of unknown (botched) type"));
c906108c
SS
1402 break;
1403 }
1404 printf_filtered (".\n");
1405}
1406\f
675dcf4f
MK
1407
1408static void
fba45db2 1409x_command (char *exp, int from_tty)
c906108c
SS
1410{
1411 struct expression *expr;
1412 struct format_data fmt;
1413 struct cleanup *old_chain;
1414 struct value *val;
1415
a6bac58e 1416 fmt.format = last_format ? last_format : 'x';
c906108c
SS
1417 fmt.size = last_size;
1418 fmt.count = 1;
a6bac58e 1419 fmt.raw = 0;
c906108c
SS
1420
1421 if (exp && *exp == '/')
1422 {
1423 exp++;
1424 fmt = decode_format (&exp, last_format, last_size);
1425 }
1426
1427 /* If we have an expression, evaluate it and use it as the address. */
1428
1429 if (exp != 0 && *exp != 0)
1430 {
1431 expr = parse_expression (exp);
675dcf4f
MK
1432 /* Cause expression not to be there any more if this command is
1433 repeated with Newline. But don't clobber a user-defined
1434 command's definition. */
c906108c
SS
1435 if (from_tty)
1436 *exp = 0;
c13c43fd 1437 old_chain = make_cleanup (free_current_contents, &expr);
c906108c 1438 val = evaluate_expression (expr);
df407dfe 1439 if (TYPE_CODE (value_type (val)) == TYPE_CODE_REF)
e1c34c5d 1440 val = coerce_ref (val);
c906108c 1441 /* In rvalue contexts, such as this, functions are coerced into
c5aa993b 1442 pointers to functions. This makes "x/i main" work. */
c0d8fd9a 1443 if (/* last_format == 'i' && */
df407dfe 1444 TYPE_CODE (value_type (val)) == TYPE_CODE_FUNC
c5aa993b 1445 && VALUE_LVAL (val) == lval_memory)
42ae5230 1446 next_address = value_address (val);
c906108c 1447 else
1aa20aa8 1448 next_address = value_as_address (val);
5d3729b5
UW
1449
1450 next_gdbarch = expr->gdbarch;
c906108c
SS
1451 do_cleanups (old_chain);
1452 }
1453
5d3729b5
UW
1454 if (!next_gdbarch)
1455 error_no_arg (_("starting display address"));
1456
1457 do_examine (fmt, next_gdbarch, next_address);
c906108c 1458
675dcf4f 1459 /* If the examine succeeds, we remember its size and format for next
9a22f0d0
PM
1460 time. Set last_size to 'b' for strings. */
1461 if (fmt.format == 's')
1462 last_size = 'b';
1463 else
1464 last_size = fmt.size;
c906108c
SS
1465 last_format = fmt.format;
1466
0df8b418 1467 /* Set a couple of internal variables if appropriate. */
c906108c
SS
1468 if (last_examine_value)
1469 {
1470 /* Make last address examined available to the user as $_. Use
c5aa993b 1471 the correct pointer type. */
4478b372 1472 struct type *pointer_type
df407dfe 1473 = lookup_pointer_type (value_type (last_examine_value));
c906108c 1474 set_internalvar (lookup_internalvar ("_"),
4478b372
JB
1475 value_from_pointer (pointer_type,
1476 last_examine_address));
c5aa993b 1477
675dcf4f
MK
1478 /* Make contents of last address examined available to the user
1479 as $__. If the last value has not been fetched from memory
1480 then don't fetch it now; instead mark it by voiding the $__
1481 variable. */
d69fe07e 1482 if (value_lazy (last_examine_value))
4fa62494 1483 clear_internalvar (lookup_internalvar ("__"));
c906108c
SS
1484 else
1485 set_internalvar (lookup_internalvar ("__"), last_examine_value);
1486 }
1487}
c906108c 1488\f
c5aa993b 1489
c906108c
SS
1490/* Add an expression to the auto-display chain.
1491 Specify the expression. */
1492
1493static void
fba45db2 1494display_command (char *exp, int from_tty)
c906108c
SS
1495{
1496 struct format_data fmt;
52f0bd74
AC
1497 struct expression *expr;
1498 struct display *new;
c906108c
SS
1499 int display_it = 1;
1500
1501#if defined(TUI)
021e7609
AC
1502 /* NOTE: cagney/2003-02-13 The `tui_active' was previously
1503 `tui_version'. */
fd33e6cb 1504 if (tui_active && exp != NULL && *exp == '$')
080ce8c0 1505 display_it = (tui_set_layout_for_display_command (exp) == TUI_FAILURE);
c906108c
SS
1506#endif
1507
1508 if (display_it)
1509 {
1510 if (exp == 0)
1511 {
1512 do_displays ();
1513 return;
1514 }
1515
1516 if (*exp == '/')
1517 {
1518 exp++;
1519 fmt = decode_format (&exp, 0, 0);
1520 if (fmt.size && fmt.format == 0)
1521 fmt.format = 'x';
1522 if (fmt.format == 'i' || fmt.format == 's')
1523 fmt.size = 'b';
1524 }
1525 else
1526 {
1527 fmt.format = 0;
1528 fmt.size = 0;
1529 fmt.count = 0;
a6bac58e 1530 fmt.raw = 0;
c906108c
SS
1531 }
1532
a3247a22 1533 innermost_block = NULL;
c906108c
SS
1534 expr = parse_expression (exp);
1535
1536 new = (struct display *) xmalloc (sizeof (struct display));
1537
fa8a61dc 1538 new->exp_string = xstrdup (exp);
c906108c
SS
1539 new->exp = expr;
1540 new->block = innermost_block;
6c95b8df 1541 new->pspace = current_program_space;
c906108c
SS
1542 new->next = display_chain;
1543 new->number = ++display_number;
1544 new->format = fmt;
b5de0fa7 1545 new->enabled_p = 1;
c906108c
SS
1546 display_chain = new;
1547
1548 if (from_tty && target_has_execution)
1549 do_one_display (new);
1550
1551 dont_repeat ();
1552 }
1553}
1554
1555static void
fba45db2 1556free_display (struct display *d)
c906108c 1557{
fa8a61dc 1558 xfree (d->exp_string);
b8c9b27d
KB
1559 xfree (d->exp);
1560 xfree (d);
c906108c
SS
1561}
1562
675dcf4f
MK
1563/* Clear out the display_chain. Done when new symtabs are loaded,
1564 since this invalidates the types stored in many expressions. */
c906108c
SS
1565
1566void
fba45db2 1567clear_displays (void)
c906108c 1568{
52f0bd74 1569 struct display *d;
c906108c
SS
1570
1571 while ((d = display_chain) != NULL)
1572 {
c906108c 1573 display_chain = d->next;
fa8a61dc 1574 free_display (d);
c906108c
SS
1575 }
1576}
1577
3c3fe74c 1578/* Delete the auto-display DISPLAY. */
c906108c
SS
1579
1580static void
3c3fe74c 1581delete_display (struct display *display)
c906108c 1582{
3c3fe74c 1583 struct display *d;
c906108c 1584
3c3fe74c 1585 gdb_assert (display != NULL);
c906108c 1586
3c3fe74c
PA
1587 if (display_chain == display)
1588 display_chain = display->next;
1589
1590 ALL_DISPLAYS (d)
1591 if (d->next == display)
c906108c 1592 {
3c3fe74c
PA
1593 d->next = display->next;
1594 break;
c906108c 1595 }
3c3fe74c
PA
1596
1597 free_display (display);
c906108c
SS
1598}
1599
c9174737
PA
1600/* Call FUNCTION on each of the displays whose numbers are given in
1601 ARGS. DATA is passed unmodified to FUNCTION. */
c906108c
SS
1602
1603static void
c9174737
PA
1604map_display_numbers (char *args,
1605 void (*function) (struct display *,
1606 void *),
1607 void *data)
c906108c 1608{
197f0a60 1609 struct get_number_or_range_state state;
c9174737 1610 int num;
c906108c 1611
c9174737
PA
1612 if (args == NULL)
1613 error_no_arg (_("one or more display numbers"));
c906108c 1614
197f0a60 1615 init_number_or_range (&state, args);
c9174737 1616
197f0a60 1617 while (!state.finished)
c906108c 1618 {
197f0a60 1619 char *p = state.string;
c906108c 1620
197f0a60 1621 num = get_number_or_range (&state);
3c3fe74c
PA
1622 if (num == 0)
1623 warning (_("bad display number at or near '%s'"), p);
1624 else
1625 {
c9174737 1626 struct display *d, *tmp;
c906108c 1627
c9174737 1628 ALL_DISPLAYS_SAFE (d, tmp)
3c3fe74c
PA
1629 if (d->number == num)
1630 break;
1631 if (d == NULL)
1632 printf_unfiltered (_("No display number %d.\n"), num);
1633 else
c9174737 1634 function (d, data);
3c3fe74c 1635 }
c906108c 1636 }
c9174737
PA
1637}
1638
1639/* Callback for map_display_numbers, that deletes a display. */
1640
1641static void
1642do_delete_display (struct display *d, void *data)
1643{
1644 delete_display (d);
1645}
1646
1647/* "undisplay" command. */
1648
1649static void
1650undisplay_command (char *args, int from_tty)
1651{
c9174737
PA
1652 if (args == NULL)
1653 {
1654 if (query (_("Delete all auto-display expressions? ")))
1655 clear_displays ();
1656 dont_repeat ();
1657 return;
1658 }
1659
1660 map_display_numbers (args, do_delete_display, NULL);
c906108c
SS
1661 dont_repeat ();
1662}
1663
1664/* Display a single auto-display.
1665 Do nothing if the display cannot be printed in the current context,
0df8b418 1666 or if the display is disabled. */
c906108c
SS
1667
1668static void
fba45db2 1669do_one_display (struct display *d)
c906108c 1670{
af6e93b2 1671 struct cleanup *old_chain;
c906108c
SS
1672 int within_current_scope;
1673
b5de0fa7 1674 if (d->enabled_p == 0)
c906108c
SS
1675 return;
1676
704e9165
UW
1677 /* The expression carries the architecture that was used at parse time.
1678 This is a problem if the expression depends on architecture features
1679 (e.g. register numbers), and the current architecture is now different.
1680 For example, a display statement like "display/i $pc" is expected to
1681 display the PC register of the current architecture, not the arch at
1682 the time the display command was given. Therefore, we re-parse the
1683 expression if the current architecture has changed. */
1684 if (d->exp != NULL && d->exp->gdbarch != get_current_arch ())
1685 {
1686 xfree (d->exp);
1687 d->exp = NULL;
1688 d->block = NULL;
1689 }
1690
a3247a22
PP
1691 if (d->exp == NULL)
1692 {
1693 volatile struct gdb_exception ex;
ad3bbd48 1694
a3247a22
PP
1695 TRY_CATCH (ex, RETURN_MASK_ALL)
1696 {
1697 innermost_block = NULL;
1698 d->exp = parse_expression (d->exp_string);
1699 d->block = innermost_block;
1700 }
1701 if (ex.reason < 0)
1702 {
1703 /* Can't re-parse the expression. Disable this display item. */
1704 d->enabled_p = 0;
1705 warning (_("Unable to display \"%s\": %s"),
1706 d->exp_string, ex.message);
1707 return;
1708 }
1709 }
1710
c906108c 1711 if (d->block)
6c95b8df
PA
1712 {
1713 if (d->pspace == current_program_space)
1714 within_current_scope = contained_in (get_selected_block (0), d->block);
1715 else
1716 within_current_scope = 0;
1717 }
c906108c
SS
1718 else
1719 within_current_scope = 1;
1720 if (!within_current_scope)
1721 return;
1722
9d8fa392 1723 old_chain = make_cleanup_restore_integer (&current_display_number);
c906108c
SS
1724 current_display_number = d->number;
1725
1726 annotate_display_begin ();
1727 printf_filtered ("%d", d->number);
1728 annotate_display_number_end ();
1729 printf_filtered (": ");
1730 if (d->format.size)
1731 {
9d8fa392 1732 volatile struct gdb_exception ex;
c906108c
SS
1733
1734 annotate_display_format ();
1735
1736 printf_filtered ("x/");
1737 if (d->format.count != 1)
1738 printf_filtered ("%d", d->format.count);
1739 printf_filtered ("%c", d->format.format);
1740 if (d->format.format != 'i' && d->format.format != 's')
1741 printf_filtered ("%c", d->format.size);
1742 printf_filtered (" ");
1743
1744 annotate_display_expression ();
1745
fa8a61dc 1746 puts_filtered (d->exp_string);
c906108c
SS
1747 annotate_display_expression_end ();
1748
6a2eb474 1749 if (d->format.count != 1 || d->format.format == 'i')
c906108c
SS
1750 printf_filtered ("\n");
1751 else
1752 printf_filtered (" ");
c5aa993b 1753
c906108c
SS
1754 annotate_display_value ();
1755
9d8fa392
PA
1756 TRY_CATCH (ex, RETURN_MASK_ERROR)
1757 {
1758 struct value *val;
1759 CORE_ADDR addr;
1760
1761 val = evaluate_expression (d->exp);
1762 addr = value_as_address (val);
1763 if (d->format.format == 'i')
1764 addr = gdbarch_addr_bits_remove (d->exp->gdbarch, addr);
1765 do_examine (d->format, d->exp->gdbarch, addr);
1766 }
1767 if (ex.reason < 0)
1768 fprintf_filtered (gdb_stdout, _("<error: %s>\n"), ex.message);
c906108c
SS
1769 }
1770 else
1771 {
79a45b7d 1772 struct value_print_options opts;
9d8fa392 1773 volatile struct gdb_exception ex;
79a45b7d 1774
c906108c
SS
1775 annotate_display_format ();
1776
1777 if (d->format.format)
1778 printf_filtered ("/%c ", d->format.format);
1779
1780 annotate_display_expression ();
1781
fa8a61dc 1782 puts_filtered (d->exp_string);
c906108c
SS
1783 annotate_display_expression_end ();
1784
1785 printf_filtered (" = ");
1786
1787 annotate_display_expression ();
1788
79a45b7d 1789 get_formatted_print_options (&opts, d->format.format);
a6bac58e 1790 opts.raw = d->format.raw;
9d8fa392
PA
1791
1792 TRY_CATCH (ex, RETURN_MASK_ERROR)
1793 {
1794 struct value *val;
1795
1796 val = evaluate_expression (d->exp);
1797 print_formatted (val, d->format.size, &opts, gdb_stdout);
1798 }
1799 if (ex.reason < 0)
1800 fprintf_filtered (gdb_stdout, _("<error: %s>"), ex.message);
c906108c
SS
1801 printf_filtered ("\n");
1802 }
1803
1804 annotate_display_end ();
1805
1806 gdb_flush (gdb_stdout);
9d8fa392 1807 do_cleanups (old_chain);
c906108c
SS
1808}
1809
1810/* Display all of the values on the auto-display chain which can be
1811 evaluated in the current scope. */
1812
1813void
fba45db2 1814do_displays (void)
c906108c 1815{
52f0bd74 1816 struct display *d;
c906108c
SS
1817
1818 for (d = display_chain; d; d = d->next)
1819 do_one_display (d);
1820}
1821
1822/* Delete the auto-display which we were in the process of displaying.
1823 This is done when there is an error or a signal. */
1824
1825void
fba45db2 1826disable_display (int num)
c906108c 1827{
52f0bd74 1828 struct display *d;
c906108c
SS
1829
1830 for (d = display_chain; d; d = d->next)
1831 if (d->number == num)
1832 {
b5de0fa7 1833 d->enabled_p = 0;
c906108c
SS
1834 return;
1835 }
a3f17187 1836 printf_unfiltered (_("No display number %d.\n"), num);
c906108c 1837}
c5aa993b 1838
c906108c 1839void
fba45db2 1840disable_current_display (void)
c906108c
SS
1841{
1842 if (current_display_number >= 0)
1843 {
1844 disable_display (current_display_number);
3e43a32a
MS
1845 fprintf_unfiltered (gdb_stderr,
1846 _("Disabling display %d to "
1847 "avoid infinite recursion.\n"),
c5aa993b 1848 current_display_number);
c906108c
SS
1849 }
1850 current_display_number = -1;
1851}
1852
1853static void
fba45db2 1854display_info (char *ignore, int from_tty)
c906108c 1855{
52f0bd74 1856 struct display *d;
c906108c
SS
1857
1858 if (!display_chain)
a3f17187 1859 printf_unfiltered (_("There are no auto-display expressions now.\n"));
c906108c 1860 else
a3f17187
AC
1861 printf_filtered (_("Auto-display expressions now in effect:\n\
1862Num Enb Expression\n"));
c906108c
SS
1863
1864 for (d = display_chain; d; d = d->next)
1865 {
b5de0fa7 1866 printf_filtered ("%d: %c ", d->number, "ny"[(int) d->enabled_p]);
c906108c
SS
1867 if (d->format.size)
1868 printf_filtered ("/%d%c%c ", d->format.count, d->format.size,
c5aa993b 1869 d->format.format);
c906108c
SS
1870 else if (d->format.format)
1871 printf_filtered ("/%c ", d->format.format);
fa8a61dc 1872 puts_filtered (d->exp_string);
ae767bfb 1873 if (d->block && !contained_in (get_selected_block (0), d->block))
a3f17187 1874 printf_filtered (_(" (cannot be evaluated in the current context)"));
c906108c
SS
1875 printf_filtered ("\n");
1876 gdb_flush (gdb_stdout);
1877 }
1878}
1879
c9174737
PA
1880/* Callback fo map_display_numbers, that enables or disables the
1881 passed in display D. */
1882
c906108c 1883static void
c9174737 1884do_enable_disable_display (struct display *d, void *data)
c906108c 1885{
c9174737
PA
1886 d->enabled_p = *(int *) data;
1887}
c906108c 1888
c9174737
PA
1889/* Implamentation of both the "disable display" and "enable display"
1890 commands. ENABLE decides what to do. */
1891
1892static void
1893enable_disable_display_command (char *args, int from_tty, int enable)
1894{
1895 if (args == NULL)
c906108c 1896 {
c9174737 1897 struct display *d;
c5aa993b 1898
c9174737
PA
1899 ALL_DISPLAYS (d)
1900 d->enabled_p = enable;
1901 return;
1902 }
c5aa993b 1903
c9174737 1904 map_display_numbers (args, do_enable_disable_display, &enable);
c906108c
SS
1905}
1906
c9174737
PA
1907/* The "enable display" command. */
1908
c906108c 1909static void
c9174737 1910enable_display_command (char *args, int from_tty)
c906108c 1911{
c9174737
PA
1912 enable_disable_display_command (args, from_tty, 1);
1913}
c5aa993b 1914
c9174737 1915/* The "disable display" command. */
c906108c 1916
c9174737
PA
1917static void
1918disable_display_command (char *args, int from_tty)
1919{
1920 enable_disable_display_command (args, from_tty, 0);
c906108c 1921}
a3247a22 1922
a3247a22
PP
1923/* display_chain items point to blocks and expressions. Some expressions in
1924 turn may point to symbols.
1925 Both symbols and blocks are obstack_alloc'd on objfile_stack, and are
1926 obstack_free'd when a shared library is unloaded.
1927 Clear pointers that are about to become dangling.
1928 Both .exp and .block fields will be restored next time we need to display
1929 an item by re-parsing .exp_string field in the new execution context. */
1930
1931static void
1932clear_dangling_display_expressions (struct so_list *solib)
1933{
c0201579 1934 struct objfile *objfile = solib->objfile;
a3247a22 1935 struct display *d;
a3247a22 1936
c0201579
JK
1937 /* With no symbol file we cannot have a block or expression from it. */
1938 if (objfile == NULL)
1939 return;
1940 if (objfile->separate_debug_objfile_backlink)
1941 objfile = objfile->separate_debug_objfile_backlink;
1942 gdb_assert (objfile->pspace == solib->pspace);
1943
1944 for (d = display_chain; d != NULL; d = d->next)
a3247a22 1945 {
c0201579
JK
1946 if (d->pspace != solib->pspace)
1947 continue;
1948
1949 if (lookup_objfile_from_block (d->block) == objfile
1950 || (d->exp && exp_uses_objfile (d->exp, objfile)))
1951 {
1952 xfree (d->exp);
1953 d->exp = NULL;
1954 d->block = NULL;
1955 }
a3247a22
PP
1956 }
1957}
c906108c 1958\f
c5aa993b 1959
675dcf4f 1960/* Print the value in stack frame FRAME of a variable specified by a
aad95b57
TT
1961 struct symbol. NAME is the name to print; if NULL then VAR's print
1962 name will be used. STREAM is the ui_file on which to print the
1963 value. INDENT specifies the number of indent levels to print
8f043999
JK
1964 before printing the variable name.
1965
1966 This function invalidates FRAME. */
c906108c
SS
1967
1968void
aad95b57
TT
1969print_variable_and_value (const char *name, struct symbol *var,
1970 struct frame_info *frame,
1971 struct ui_file *stream, int indent)
c906108c 1972{
0f6a939d 1973 volatile struct gdb_exception except;
c906108c 1974
aad95b57
TT
1975 if (!name)
1976 name = SYMBOL_PRINT_NAME (var);
1977
1978 fprintf_filtered (stream, "%s%s = ", n_spaces (2 * indent), name);
0f6a939d
PM
1979 TRY_CATCH (except, RETURN_MASK_ERROR)
1980 {
1981 struct value *val;
1982 struct value_print_options opts;
aad95b57 1983
0f6a939d
PM
1984 val = read_var_value (var, frame);
1985 get_user_print_options (&opts);
3343315b 1986 opts.deref_ref = 1;
0f6a939d 1987 common_val_print (val, stream, indent, &opts, current_language);
8f043999
JK
1988
1989 /* common_val_print invalidates FRAME when a pretty printer calls inferior
1990 function. */
1991 frame = NULL;
0f6a939d
PM
1992 }
1993 if (except.reason < 0)
1994 fprintf_filtered(stream, "<error reading variable %s (%s)>", name,
1995 except.message);
aad95b57 1996 fprintf_filtered (stream, "\n");
c906108c
SS
1997}
1998
a04b0428
JB
1999/* printf "printf format string" ARG to STREAM. */
2000
2001static void
2002ui_printf (char *arg, struct ui_file *stream)
c906108c 2003{
d3ce09f5 2004 struct format_piece *fpieces;
52f0bd74 2005 char *s = arg;
3d6d86c6 2006 struct value **val_args;
c906108c
SS
2007 int allocated_args = 20;
2008 struct cleanup *old_cleanups;
2009
675dcf4f 2010 val_args = xmalloc (allocated_args * sizeof (struct value *));
c13c43fd 2011 old_cleanups = make_cleanup (free_current_contents, &val_args);
c906108c
SS
2012
2013 if (s == 0)
e2e0b3e5 2014 error_no_arg (_("format-control string and values to print"));
c906108c 2015
e9cafbcc 2016 s = skip_spaces (s);
c906108c 2017
675dcf4f 2018 /* A format string should follow, enveloped in double quotes. */
c906108c 2019 if (*s++ != '"')
8a3fe4f8 2020 error (_("Bad format string, missing '\"'."));
c906108c 2021
d3ce09f5 2022 fpieces = parse_format_string (&s);
c906108c 2023
d3ce09f5 2024 make_cleanup (free_format_pieces_cleanup, &fpieces);
c906108c 2025
d3ce09f5
SS
2026 if (*s++ != '"')
2027 error (_("Bad format string, non-terminated '\"'."));
2028
e9cafbcc 2029 s = skip_spaces (s);
c906108c
SS
2030
2031 if (*s != ',' && *s != 0)
8a3fe4f8 2032 error (_("Invalid argument syntax"));
c906108c 2033
c5aa993b
JM
2034 if (*s == ',')
2035 s++;
e9cafbcc 2036 s = skip_spaces (s);
c906108c 2037
c906108c 2038 {
d3ce09f5 2039 int nargs = 0;
c906108c 2040 int nargs_wanted;
d3ce09f5
SS
2041 int i, fr;
2042 char *current_substring;
c906108c 2043
c906108c 2044 nargs_wanted = 0;
d3ce09f5
SS
2045 for (fr = 0; fpieces[fr].string != NULL; fr++)
2046 if (fpieces[fr].argclass != literal_piece)
2047 ++nargs_wanted;
c906108c
SS
2048
2049 /* Now, parse all arguments and evaluate them.
2050 Store the VALUEs in VAL_ARGS. */
2051
2052 while (*s != '\0')
2053 {
2054 char *s1;
ad3bbd48 2055
c906108c 2056 if (nargs == allocated_args)
f976f6d4
AC
2057 val_args = (struct value **) xrealloc ((char *) val_args,
2058 (allocated_args *= 2)
2059 * sizeof (struct value *));
a04b0428
JB
2060 s1 = s;
2061 val_args[nargs] = parse_to_comma_and_eval (&s1);
c5aa993b 2062
c906108c
SS
2063 nargs++;
2064 s = s1;
2065 if (*s == ',')
2066 s++;
2067 }
c5aa993b 2068
c906108c 2069 if (nargs != nargs_wanted)
8a3fe4f8 2070 error (_("Wrong number of arguments for specified format-string"));
c906108c
SS
2071
2072 /* Now actually print them. */
d3ce09f5
SS
2073 i = 0;
2074 for (fr = 0; fpieces[fr].string != NULL; fr++)
c906108c 2075 {
d3ce09f5
SS
2076 current_substring = fpieces[fr].string;
2077 switch (fpieces[fr].argclass)
c906108c
SS
2078 {
2079 case string_arg:
2080 {
777ea8f1 2081 gdb_byte *str;
c906108c
SS
2082 CORE_ADDR tem;
2083 int j;
ad3bbd48 2084
1aa20aa8 2085 tem = value_as_address (val_args[i]);
c906108c
SS
2086
2087 /* This is a %s argument. Find the length of the string. */
c5aa993b 2088 for (j = 0;; j++)
c906108c 2089 {
777ea8f1 2090 gdb_byte c;
ad3bbd48 2091
c906108c 2092 QUIT;
d4b2399a 2093 read_memory (tem + j, &c, 1);
c906108c
SS
2094 if (c == 0)
2095 break;
2096 }
2097
2098 /* Copy the string contents into a string inside GDB. */
777ea8f1 2099 str = (gdb_byte *) alloca (j + 1);
7b92f6e1
MS
2100 if (j != 0)
2101 read_memory (tem, str, j);
c906108c
SS
2102 str[j] = 0;
2103
f1421989 2104 fprintf_filtered (stream, current_substring, (char *) str);
c906108c
SS
2105 }
2106 break;
6c7a06a3
TT
2107 case wide_string_arg:
2108 {
2109 gdb_byte *str;
2110 CORE_ADDR tem;
2111 int j;
50810684
UW
2112 struct gdbarch *gdbarch
2113 = get_type_arch (value_type (val_args[i]));
e17a4113 2114 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
50810684 2115 struct type *wctype = lookup_typename (current_language, gdbarch,
e6c014f2 2116 "wchar_t", NULL, 0);
6c7a06a3
TT
2117 int wcwidth = TYPE_LENGTH (wctype);
2118 gdb_byte *buf = alloca (wcwidth);
2119 struct obstack output;
2120 struct cleanup *inner_cleanup;
2121
2122 tem = value_as_address (val_args[i]);
2123
2124 /* This is a %s argument. Find the length of the string. */
2125 for (j = 0;; j += wcwidth)
2126 {
2127 QUIT;
2128 read_memory (tem + j, buf, wcwidth);
e17a4113 2129 if (extract_unsigned_integer (buf, wcwidth, byte_order) == 0)
6c7a06a3
TT
2130 break;
2131 }
2132
2133 /* Copy the string contents into a string inside GDB. */
2134 str = (gdb_byte *) alloca (j + wcwidth);
2135 if (j != 0)
2136 read_memory (tem, str, j);
2137 memset (&str[j], 0, wcwidth);
2138
2139 obstack_init (&output);
2140 inner_cleanup = make_cleanup_obstack_free (&output);
2141
f870a310 2142 convert_between_encodings (target_wide_charset (gdbarch),
6c7a06a3
TT
2143 host_charset (),
2144 str, j, wcwidth,
2145 &output, translit_char);
2146 obstack_grow_str0 (&output, "");
2147
f1421989
HZ
2148 fprintf_filtered (stream, current_substring,
2149 obstack_base (&output));
6c7a06a3
TT
2150 do_cleanups (inner_cleanup);
2151 }
2152 break;
2153 case wide_char_arg:
2154 {
50810684
UW
2155 struct gdbarch *gdbarch
2156 = get_type_arch (value_type (val_args[i]));
2157 struct type *wctype = lookup_typename (current_language, gdbarch,
e6c014f2 2158 "wchar_t", NULL, 0);
6c7a06a3
TT
2159 struct type *valtype;
2160 struct obstack output;
2161 struct cleanup *inner_cleanup;
2162 const gdb_byte *bytes;
2163
2164 valtype = value_type (val_args[i]);
2165 if (TYPE_LENGTH (valtype) != TYPE_LENGTH (wctype)
2166 || TYPE_CODE (valtype) != TYPE_CODE_INT)
2167 error (_("expected wchar_t argument for %%lc"));
2168
2169 bytes = value_contents (val_args[i]);
2170
2171 obstack_init (&output);
2172 inner_cleanup = make_cleanup_obstack_free (&output);
2173
f870a310 2174 convert_between_encodings (target_wide_charset (gdbarch),
6c7a06a3
TT
2175 host_charset (),
2176 bytes, TYPE_LENGTH (valtype),
2177 TYPE_LENGTH (valtype),
2178 &output, translit_char);
2179 obstack_grow_str0 (&output, "");
2180
f1421989
HZ
2181 fprintf_filtered (stream, current_substring,
2182 obstack_base (&output));
6c7a06a3
TT
2183 do_cleanups (inner_cleanup);
2184 }
2185 break;
c906108c
SS
2186 case double_arg:
2187 {
b806fb9a
UW
2188 struct type *type = value_type (val_args[i]);
2189 DOUBLEST val;
2190 int inv;
2191
2192 /* If format string wants a float, unchecked-convert the value
2193 to floating point of the same size. */
50810684 2194 type = float_type_from_length (type);
b806fb9a
UW
2195 val = unpack_double (type, value_contents (val_args[i]), &inv);
2196 if (inv)
2197 error (_("Invalid floating value found in program."));
2198
f1421989 2199 fprintf_filtered (stream, current_substring, (double) val);
c906108c
SS
2200 break;
2201 }
46e9880c
DJ
2202 case long_double_arg:
2203#ifdef HAVE_LONG_DOUBLE
2204 {
b806fb9a
UW
2205 struct type *type = value_type (val_args[i]);
2206 DOUBLEST val;
2207 int inv;
2208
2209 /* If format string wants a float, unchecked-convert the value
2210 to floating point of the same size. */
50810684 2211 type = float_type_from_length (type);
b806fb9a
UW
2212 val = unpack_double (type, value_contents (val_args[i]), &inv);
2213 if (inv)
2214 error (_("Invalid floating value found in program."));
2215
f1421989
HZ
2216 fprintf_filtered (stream, current_substring,
2217 (long double) val);
46e9880c
DJ
2218 break;
2219 }
2220#else
2221 error (_("long double not supported in printf"));
2222#endif
c906108c
SS
2223 case long_long_arg:
2224#if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG)
2225 {
2226 long long val = value_as_long (val_args[i]);
ad3bbd48 2227
f1421989 2228 fprintf_filtered (stream, current_substring, val);
c906108c
SS
2229 break;
2230 }
2231#else
8a3fe4f8 2232 error (_("long long not supported in printf"));
c906108c
SS
2233#endif
2234 case int_arg:
2235 {
46e9880c 2236 int val = value_as_long (val_args[i]);
ad3bbd48 2237
f1421989 2238 fprintf_filtered (stream, current_substring, val);
46e9880c
DJ
2239 break;
2240 }
2241 case long_arg:
2242 {
c906108c 2243 long val = value_as_long (val_args[i]);
ad3bbd48 2244
f1421989 2245 fprintf_filtered (stream, current_substring, val);
c906108c
SS
2246 break;
2247 }
1a619819 2248
0aea4bf3
LM
2249 /* Handles decimal floating values. */
2250 case decfloat_arg:
1a619819 2251 {
0aea4bf3 2252 const gdb_byte *param_ptr = value_contents (val_args[i]);
ad3bbd48 2253
1a619819 2254#if defined (PRINTF_HAS_DECFLOAT)
0aea4bf3
LM
2255 /* If we have native support for Decimal floating
2256 printing, handle it here. */
f1421989 2257 fprintf_filtered (stream, current_substring, param_ptr);
1a619819 2258#else
1a619819
LM
2259
2260 /* As a workaround until vasprintf has native support for DFP
0aea4bf3
LM
2261 we convert the DFP values to string and print them using
2262 the %s format specifier. */
2263
2264 char *eos, *sos;
2265 int nnull_chars = 0;
2266
2267 /* Parameter data. */
2268 struct type *param_type = value_type (val_args[i]);
2269 unsigned int param_len = TYPE_LENGTH (param_type);
50810684 2270 struct gdbarch *gdbarch = get_type_arch (param_type);
e17a4113 2271 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
0aea4bf3
LM
2272
2273 /* DFP output data. */
2274 struct value *dfp_value = NULL;
2275 gdb_byte *dfp_ptr;
2276 int dfp_len = 16;
2277 gdb_byte dec[16];
2278 struct type *dfp_type = NULL;
2279 char decstr[MAX_DECIMAL_STRING];
1a619819
LM
2280
2281 /* Points to the end of the string so that we can go back
0aea4bf3 2282 and check for DFP length modifiers. */
1a619819
LM
2283 eos = current_substring + strlen (current_substring);
2284
0aea4bf3
LM
2285 /* Look for the float/double format specifier. */
2286 while (*eos != 'f' && *eos != 'e' && *eos != 'E'
2287 && *eos != 'g' && *eos != 'G')
2288 eos--;
2289
2290 sos = eos;
2291
2292 /* Search for the '%' char and extract the size and type of
2293 the output decimal value based on its modifiers
2294 (%Hf, %Df, %DDf). */
2295 while (*--sos != '%')
2296 {
2297 if (*sos == 'H')
2298 {
2299 dfp_len = 4;
50810684 2300 dfp_type = builtin_type (gdbarch)->builtin_decfloat;
0aea4bf3
LM
2301 }
2302 else if (*sos == 'D' && *(sos - 1) == 'D')
2303 {
2304 dfp_len = 16;
50810684 2305 dfp_type = builtin_type (gdbarch)->builtin_declong;
0aea4bf3
LM
2306 sos--;
2307 }
2308 else
2309 {
2310 dfp_len = 8;
50810684 2311 dfp_type = builtin_type (gdbarch)->builtin_decdouble;
0aea4bf3
LM
2312 }
2313 }
2314
2315 /* Replace %Hf, %Df and %DDf with %s's. */
2316 *++sos = 's';
2317
2318 /* Go through the whole format string and pull the correct
2319 number of chars back to compensate for the change in the
2320 format specifier. */
2321 while (nnull_chars < nargs - i)
2322 {
2323 if (*eos == '\0')
2324 nnull_chars++;
2325
2326 *++sos = *++eos;
2327 }
2328
2329 /* Conversion between different DFP types. */
2330 if (TYPE_CODE (param_type) == TYPE_CODE_DECFLOAT)
e17a4113
UW
2331 decimal_convert (param_ptr, param_len, byte_order,
2332 dec, dfp_len, byte_order);
0aea4bf3
LM
2333 else
2334 /* If this is a non-trivial conversion, just output 0.
2335 A correct converted value can be displayed by explicitly
2336 casting to a DFP type. */
e17a4113 2337 decimal_from_string (dec, dfp_len, byte_order, "0");
0aea4bf3
LM
2338
2339 dfp_value = value_from_decfloat (dfp_type, dec);
2340
2341 dfp_ptr = (gdb_byte *) value_contents (dfp_value);
2342
e17a4113 2343 decimal_to_string (dfp_ptr, dfp_len, byte_order, decstr);
1a619819
LM
2344
2345 /* Print the DFP value. */
f1421989 2346 fprintf_filtered (stream, current_substring, decstr);
0aea4bf3 2347
1a619819
LM
2348 break;
2349#endif
2350 }
2351
2025a643
DJ
2352 case ptr_arg:
2353 {
2354 /* We avoid the host's %p because pointers are too
2355 likely to be the wrong size. The only interesting
2356 modifier for %p is a width; extract that, and then
2357 handle %p as glibc would: %#x or a literal "(nil)". */
2358
2359 char *p, *fmt, *fmt_p;
2360#if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG)
2361 long long val = value_as_long (val_args[i]);
2362#else
2363 long val = value_as_long (val_args[i]);
2364#endif
2365
2366 fmt = alloca (strlen (current_substring) + 5);
2367
2368 /* Copy up to the leading %. */
2369 p = current_substring;
2370 fmt_p = fmt;
2371 while (*p)
2372 {
2373 int is_percent = (*p == '%');
ad3bbd48 2374
2025a643
DJ
2375 *fmt_p++ = *p++;
2376 if (is_percent)
2377 {
2378 if (*p == '%')
2379 *fmt_p++ = *p++;
2380 else
2381 break;
2382 }
2383 }
2384
2385 if (val != 0)
2386 *fmt_p++ = '#';
2387
2388 /* Copy any width. */
2389 while (*p >= '0' && *p < '9')
2390 *fmt_p++ = *p++;
2391
2392 gdb_assert (*p == 'p' && *(p + 1) == '\0');
2393 if (val != 0)
2394 {
2395#if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG)
2396 *fmt_p++ = 'l';
2397#endif
2398 *fmt_p++ = 'l';
2399 *fmt_p++ = 'x';
2400 *fmt_p++ = '\0';
f1421989 2401 fprintf_filtered (stream, fmt, val);
2025a643
DJ
2402 }
2403 else
2404 {
2405 *fmt_p++ = 's';
2406 *fmt_p++ = '\0';
f1421989 2407 fprintf_filtered (stream, fmt, "(nil)");
2025a643
DJ
2408 }
2409
2410 break;
2411 }
d3ce09f5
SS
2412 case literal_piece:
2413 /* Print a portion of the format string that has no
2414 directives. Note that this will not include any
2415 ordinary %-specs, but it might include "%%". That is
2416 why we use printf_filtered and not puts_filtered here.
2417 Also, we pass a dummy argument because some platforms
2418 have modified GCC to include -Wformat-security by
2419 default, which will warn here if there is no
2420 argument. */
2421 fprintf_filtered (stream, current_substring, 0);
2422 break;
675dcf4f
MK
2423 default:
2424 internal_error (__FILE__, __LINE__,
2025a643 2425 _("failed internal consistency check"));
c906108c 2426 }
d3ce09f5
SS
2427 /* Maybe advance to the next argument. */
2428 if (fpieces[fr].argclass != literal_piece)
2429 ++i;
c906108c 2430 }
c906108c
SS
2431 }
2432 do_cleanups (old_cleanups);
2433}
c906108c 2434
f1421989
HZ
2435/* Implement the "printf" command. */
2436
a04b0428 2437static void
f1421989
HZ
2438printf_command (char *arg, int from_tty)
2439{
a04b0428 2440 ui_printf (arg, gdb_stdout);
f1421989
HZ
2441}
2442
2443/* Implement the "eval" command. */
2444
2445static void
2446eval_command (char *arg, int from_tty)
2447{
2448 struct ui_file *ui_out = mem_fileopen ();
2449 struct cleanup *cleanups = make_cleanup_ui_file_delete (ui_out);
2450 char *expanded;
2451
a04b0428 2452 ui_printf (arg, ui_out);
f1421989
HZ
2453
2454 expanded = ui_file_xstrdup (ui_out, NULL);
2455 make_cleanup (xfree, expanded);
2456
2457 execute_command (expanded, from_tty);
2458
2459 do_cleanups (cleanups);
2460}
2461
c906108c 2462void
fba45db2 2463_initialize_printcmd (void)
c906108c 2464{
c94fdfd0
EZ
2465 struct cmd_list_element *c;
2466
c906108c
SS
2467 current_display_number = -1;
2468
a3247a22
PP
2469 observer_attach_solib_unloaded (clear_dangling_display_expressions);
2470
c906108c 2471 add_info ("address", address_info,
1bedd215 2472 _("Describe where symbol SYM is stored."));
c906108c 2473
1bedd215
AC
2474 add_info ("symbol", sym_info, _("\
2475Describe what symbol is at location ADDR.\n\
2476Only for symbols with fixed locations (global or static scope)."));
c906108c 2477
1bedd215
AC
2478 add_com ("x", class_vars, x_command, _("\
2479Examine memory: x/FMT ADDRESS.\n\
c906108c
SS
2480ADDRESS is an expression for the memory address to examine.\n\
2481FMT is a repeat count followed by a format letter and a size letter.\n\
2482Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),\n\
1bedd215
AC
2483 t(binary), f(float), a(address), i(instruction), c(char) and s(string).\n\
2484Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).\n\
c906108c
SS
2485The specified number of objects of the specified size are printed\n\
2486according to the format.\n\n\
2487Defaults for format and size letters are those previously used.\n\
2488Default count is 1. Default address is following last thing printed\n\
1bedd215 2489with this command or \"print\"."));
c906108c 2490
c906108c
SS
2491#if 0
2492 add_com ("whereis", class_vars, whereis_command,
1bedd215 2493 _("Print line number and file of definition of variable."));
c906108c 2494#endif
c5aa993b 2495
1bedd215
AC
2496 add_info ("display", display_info, _("\
2497Expressions to display when program stops, with code numbers."));
c906108c 2498
1a966eab
AC
2499 add_cmd ("undisplay", class_vars, undisplay_command, _("\
2500Cancel some expressions to be displayed when program stops.\n\
c906108c
SS
2501Arguments are the code numbers of the expressions to stop displaying.\n\
2502No argument means cancel all automatic-display expressions.\n\
2503\"delete display\" has the same effect as this command.\n\
1a966eab 2504Do \"info display\" to see current list of code numbers."),
c5aa993b 2505 &cmdlist);
c906108c 2506
1bedd215
AC
2507 add_com ("display", class_vars, display_command, _("\
2508Print value of expression EXP each time the program stops.\n\
c906108c
SS
2509/FMT may be used before EXP as in the \"print\" command.\n\
2510/FMT \"i\" or \"s\" or including a size-letter is allowed,\n\
2511as in the \"x\" command, and then EXP is used to get the address to examine\n\
2512and examining is done as in the \"x\" command.\n\n\
2513With no argument, display all currently requested auto-display expressions.\n\
1bedd215 2514Use \"undisplay\" to cancel display requests previously made."));
c906108c 2515
c9174737 2516 add_cmd ("display", class_vars, enable_display_command, _("\
1a966eab 2517Enable some expressions to be displayed when program stops.\n\
c906108c
SS
2518Arguments are the code numbers of the expressions to resume displaying.\n\
2519No argument means enable all automatic-display expressions.\n\
1a966eab 2520Do \"info display\" to see current list of code numbers."), &enablelist);
c906108c 2521
1a966eab
AC
2522 add_cmd ("display", class_vars, disable_display_command, _("\
2523Disable some expressions to be displayed when program stops.\n\
c906108c
SS
2524Arguments are the code numbers of the expressions to stop displaying.\n\
2525No argument means disable all automatic-display expressions.\n\
1a966eab 2526Do \"info display\" to see current list of code numbers."), &disablelist);
c906108c 2527
1a966eab
AC
2528 add_cmd ("display", class_vars, undisplay_command, _("\
2529Cancel some expressions to be displayed when program stops.\n\
c906108c
SS
2530Arguments are the code numbers of the expressions to stop displaying.\n\
2531No argument means cancel all automatic-display expressions.\n\
1a966eab 2532Do \"info display\" to see current list of code numbers."), &deletelist);
c906108c 2533
1bedd215
AC
2534 add_com ("printf", class_vars, printf_command, _("\
2535printf \"printf format string\", arg1, arg2, arg3, ..., argn\n\
2536This is useful for formatted output in user-defined commands."));
c906108c 2537
1bedd215
AC
2538 add_com ("output", class_vars, output_command, _("\
2539Like \"print\" but don't put in value history and don't print newline.\n\
2540This is useful in user-defined commands."));
c906108c 2541
1bedd215
AC
2542 add_prefix_cmd ("set", class_vars, set_command, _("\
2543Evaluate expression EXP and assign result to variable VAR, using assignment\n\
c906108c
SS
2544syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n\
2545example). VAR may be a debugger \"convenience\" variable (names starting\n\
2546with $), a register (a few standard names starting with $), or an actual\n\
1bedd215
AC
2547variable in the program being debugged. EXP is any valid expression.\n\
2548Use \"set variable\" for variables with names identical to set subcommands.\n\
2549\n\
2550With a subcommand, this command modifies parts of the gdb environment.\n\
2551You can see these environment settings with the \"show\" command."),
c5aa993b 2552 &setlist, "set ", 1, &cmdlist);
c906108c 2553 if (dbx_commands)
1bedd215
AC
2554 add_com ("assign", class_vars, set_command, _("\
2555Evaluate expression EXP and assign result to variable VAR, using assignment\n\
c906108c
SS
2556syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n\
2557example). VAR may be a debugger \"convenience\" variable (names starting\n\
2558with $), a register (a few standard names starting with $), or an actual\n\
1bedd215
AC
2559variable in the program being debugged. EXP is any valid expression.\n\
2560Use \"set variable\" for variables with names identical to set subcommands.\n\
c906108c 2561\nWith a subcommand, this command modifies parts of the gdb environment.\n\
1bedd215 2562You can see these environment settings with the \"show\" command."));
c906108c 2563
0df8b418 2564 /* "call" is the same as "set", but handy for dbx users to call fns. */
1bedd215
AC
2565 c = add_com ("call", class_vars, call_command, _("\
2566Call a function in the program.\n\
c906108c
SS
2567The argument is the function name and arguments, in the notation of the\n\
2568current working language. The result is printed and saved in the value\n\
1bedd215 2569history, if it is not void."));
65d12d83 2570 set_cmd_completer (c, expression_completer);
c906108c 2571
1a966eab
AC
2572 add_cmd ("variable", class_vars, set_command, _("\
2573Evaluate expression EXP and assign result to variable VAR, using assignment\n\
c906108c
SS
2574syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n\
2575example). VAR may be a debugger \"convenience\" variable (names starting\n\
2576with $), a register (a few standard names starting with $), or an actual\n\
2577variable in the program being debugged. EXP is any valid expression.\n\
1a966eab 2578This may usually be abbreviated to simply \"set\"."),
c5aa993b 2579 &setlist);
c906108c 2580
1bedd215
AC
2581 c = add_com ("print", class_vars, print_command, _("\
2582Print value of expression EXP.\n\
c906108c
SS
2583Variables accessible are those of the lexical environment of the selected\n\
2584stack frame, plus all those whose scope is global or an entire file.\n\
2585\n\
2586$NUM gets previous value number NUM. $ and $$ are the last two values.\n\
2587$$NUM refers to NUM'th value back from the last one.\n\
1bedd215
AC
2588Names starting with $ refer to registers (with the values they would have\n\
2589if the program were to return to the stack frame now selected, restoring\n\
c906108c
SS
2590all registers saved by frames farther in) or else to debugger\n\
2591\"convenience\" variables (any such name not a known register).\n\
1bedd215
AC
2592Use assignment expressions to give values to convenience variables.\n\
2593\n\
c906108c
SS
2594{TYPE}ADREXP refers to a datum of data type TYPE, located at address ADREXP.\n\
2595@ is a binary operator for treating consecutive data objects\n\
2596anywhere in memory as an array. FOO@NUM gives an array whose first\n\
2597element is FOO, whose second element is stored in the space following\n\
2598where FOO is stored, etc. FOO must be an expression whose value\n\
1bedd215
AC
2599resides in memory.\n\
2600\n\
c906108c 2601EXP may be preceded with /FMT, where FMT is a format letter\n\
1bedd215 2602but no count or size letter (see \"x\" command)."));
65d12d83 2603 set_cmd_completer (c, expression_completer);
c906108c
SS
2604 add_com_alias ("p", "print", class_vars, 1);
2605
1bedd215
AC
2606 c = add_com ("inspect", class_vars, inspect_command, _("\
2607Same as \"print\" command, except that if you are running in the epoch\n\
2608environment, the value is printed in its own window."));
65d12d83 2609 set_cmd_completer (c, expression_completer);
c906108c 2610
35096d9d
AC
2611 add_setshow_uinteger_cmd ("max-symbolic-offset", no_class,
2612 &max_symbolic_offset, _("\
2613Set the largest offset that will be printed in <symbol+1234> form."), _("\
2614Show the largest offset that will be printed in <symbol+1234> form."), NULL,
2615 NULL,
920d2a44 2616 show_max_symbolic_offset,
35096d9d 2617 &setprintlist, &showprintlist);
5bf193a2
AC
2618 add_setshow_boolean_cmd ("symbol-filename", no_class,
2619 &print_symbol_filename, _("\
2620Set printing of source filename and line number with <symbol>."), _("\
2621Show printing of source filename and line number with <symbol>."), NULL,
2622 NULL,
920d2a44 2623 show_print_symbol_filename,
5bf193a2 2624 &setprintlist, &showprintlist);
f1421989
HZ
2625
2626 add_com ("eval", no_class, eval_command, _("\
2627Convert \"printf format string\", arg1, arg2, arg3, ..., argn to\n\
2628a command line, and call it."));
c906108c 2629}
This page took 1.360163 seconds and 4 git commands to generate.