Add target-side support for dynamic printf.
[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
1964 before printing the variable name. */
c906108c
SS
1965
1966void
aad95b57
TT
1967print_variable_and_value (const char *name, struct symbol *var,
1968 struct frame_info *frame,
1969 struct ui_file *stream, int indent)
c906108c 1970{
0f6a939d 1971 volatile struct gdb_exception except;
c906108c 1972
aad95b57
TT
1973 if (!name)
1974 name = SYMBOL_PRINT_NAME (var);
1975
1976 fprintf_filtered (stream, "%s%s = ", n_spaces (2 * indent), name);
0f6a939d
PM
1977 TRY_CATCH (except, RETURN_MASK_ERROR)
1978 {
1979 struct value *val;
1980 struct value_print_options opts;
aad95b57 1981
0f6a939d
PM
1982 val = read_var_value (var, frame);
1983 get_user_print_options (&opts);
3343315b 1984 opts.deref_ref = 1;
0f6a939d
PM
1985 common_val_print (val, stream, indent, &opts, current_language);
1986 }
1987 if (except.reason < 0)
1988 fprintf_filtered(stream, "<error reading variable %s (%s)>", name,
1989 except.message);
aad95b57 1990 fprintf_filtered (stream, "\n");
c906108c
SS
1991}
1992
a04b0428
JB
1993/* printf "printf format string" ARG to STREAM. */
1994
1995static void
1996ui_printf (char *arg, struct ui_file *stream)
c906108c 1997{
d3ce09f5 1998 struct format_piece *fpieces;
52f0bd74 1999 char *s = arg;
3d6d86c6 2000 struct value **val_args;
c906108c
SS
2001 int allocated_args = 20;
2002 struct cleanup *old_cleanups;
2003
675dcf4f 2004 val_args = xmalloc (allocated_args * sizeof (struct value *));
c13c43fd 2005 old_cleanups = make_cleanup (free_current_contents, &val_args);
c906108c
SS
2006
2007 if (s == 0)
e2e0b3e5 2008 error_no_arg (_("format-control string and values to print"));
c906108c 2009
e9cafbcc 2010 s = skip_spaces (s);
c906108c 2011
675dcf4f 2012 /* A format string should follow, enveloped in double quotes. */
c906108c 2013 if (*s++ != '"')
8a3fe4f8 2014 error (_("Bad format string, missing '\"'."));
c906108c 2015
d3ce09f5 2016 fpieces = parse_format_string (&s);
c906108c 2017
d3ce09f5 2018 make_cleanup (free_format_pieces_cleanup, &fpieces);
c906108c 2019
d3ce09f5
SS
2020 if (*s++ != '"')
2021 error (_("Bad format string, non-terminated '\"'."));
2022
e9cafbcc 2023 s = skip_spaces (s);
c906108c
SS
2024
2025 if (*s != ',' && *s != 0)
8a3fe4f8 2026 error (_("Invalid argument syntax"));
c906108c 2027
c5aa993b
JM
2028 if (*s == ',')
2029 s++;
e9cafbcc 2030 s = skip_spaces (s);
c906108c 2031
c906108c 2032 {
d3ce09f5 2033 int nargs = 0;
c906108c 2034 int nargs_wanted;
d3ce09f5
SS
2035 int i, fr;
2036 char *current_substring;
c906108c 2037
c906108c 2038 nargs_wanted = 0;
d3ce09f5
SS
2039 for (fr = 0; fpieces[fr].string != NULL; fr++)
2040 if (fpieces[fr].argclass != literal_piece)
2041 ++nargs_wanted;
c906108c
SS
2042
2043 /* Now, parse all arguments and evaluate them.
2044 Store the VALUEs in VAL_ARGS. */
2045
2046 while (*s != '\0')
2047 {
2048 char *s1;
ad3bbd48 2049
c906108c 2050 if (nargs == allocated_args)
f976f6d4
AC
2051 val_args = (struct value **) xrealloc ((char *) val_args,
2052 (allocated_args *= 2)
2053 * sizeof (struct value *));
a04b0428
JB
2054 s1 = s;
2055 val_args[nargs] = parse_to_comma_and_eval (&s1);
c5aa993b 2056
c906108c
SS
2057 nargs++;
2058 s = s1;
2059 if (*s == ',')
2060 s++;
2061 }
c5aa993b 2062
c906108c 2063 if (nargs != nargs_wanted)
8a3fe4f8 2064 error (_("Wrong number of arguments for specified format-string"));
c906108c
SS
2065
2066 /* Now actually print them. */
d3ce09f5
SS
2067 i = 0;
2068 for (fr = 0; fpieces[fr].string != NULL; fr++)
c906108c 2069 {
d3ce09f5
SS
2070 current_substring = fpieces[fr].string;
2071 switch (fpieces[fr].argclass)
c906108c
SS
2072 {
2073 case string_arg:
2074 {
777ea8f1 2075 gdb_byte *str;
c906108c
SS
2076 CORE_ADDR tem;
2077 int j;
ad3bbd48 2078
1aa20aa8 2079 tem = value_as_address (val_args[i]);
c906108c
SS
2080
2081 /* This is a %s argument. Find the length of the string. */
c5aa993b 2082 for (j = 0;; j++)
c906108c 2083 {
777ea8f1 2084 gdb_byte c;
ad3bbd48 2085
c906108c 2086 QUIT;
d4b2399a 2087 read_memory (tem + j, &c, 1);
c906108c
SS
2088 if (c == 0)
2089 break;
2090 }
2091
2092 /* Copy the string contents into a string inside GDB. */
777ea8f1 2093 str = (gdb_byte *) alloca (j + 1);
7b92f6e1
MS
2094 if (j != 0)
2095 read_memory (tem, str, j);
c906108c
SS
2096 str[j] = 0;
2097
f1421989 2098 fprintf_filtered (stream, current_substring, (char *) str);
c906108c
SS
2099 }
2100 break;
6c7a06a3
TT
2101 case wide_string_arg:
2102 {
2103 gdb_byte *str;
2104 CORE_ADDR tem;
2105 int j;
50810684
UW
2106 struct gdbarch *gdbarch
2107 = get_type_arch (value_type (val_args[i]));
e17a4113 2108 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
50810684 2109 struct type *wctype = lookup_typename (current_language, gdbarch,
e6c014f2 2110 "wchar_t", NULL, 0);
6c7a06a3
TT
2111 int wcwidth = TYPE_LENGTH (wctype);
2112 gdb_byte *buf = alloca (wcwidth);
2113 struct obstack output;
2114 struct cleanup *inner_cleanup;
2115
2116 tem = value_as_address (val_args[i]);
2117
2118 /* This is a %s argument. Find the length of the string. */
2119 for (j = 0;; j += wcwidth)
2120 {
2121 QUIT;
2122 read_memory (tem + j, buf, wcwidth);
e17a4113 2123 if (extract_unsigned_integer (buf, wcwidth, byte_order) == 0)
6c7a06a3
TT
2124 break;
2125 }
2126
2127 /* Copy the string contents into a string inside GDB. */
2128 str = (gdb_byte *) alloca (j + wcwidth);
2129 if (j != 0)
2130 read_memory (tem, str, j);
2131 memset (&str[j], 0, wcwidth);
2132
2133 obstack_init (&output);
2134 inner_cleanup = make_cleanup_obstack_free (&output);
2135
f870a310 2136 convert_between_encodings (target_wide_charset (gdbarch),
6c7a06a3
TT
2137 host_charset (),
2138 str, j, wcwidth,
2139 &output, translit_char);
2140 obstack_grow_str0 (&output, "");
2141
f1421989
HZ
2142 fprintf_filtered (stream, current_substring,
2143 obstack_base (&output));
6c7a06a3
TT
2144 do_cleanups (inner_cleanup);
2145 }
2146 break;
2147 case wide_char_arg:
2148 {
50810684
UW
2149 struct gdbarch *gdbarch
2150 = get_type_arch (value_type (val_args[i]));
2151 struct type *wctype = lookup_typename (current_language, gdbarch,
e6c014f2 2152 "wchar_t", NULL, 0);
6c7a06a3
TT
2153 struct type *valtype;
2154 struct obstack output;
2155 struct cleanup *inner_cleanup;
2156 const gdb_byte *bytes;
2157
2158 valtype = value_type (val_args[i]);
2159 if (TYPE_LENGTH (valtype) != TYPE_LENGTH (wctype)
2160 || TYPE_CODE (valtype) != TYPE_CODE_INT)
2161 error (_("expected wchar_t argument for %%lc"));
2162
2163 bytes = value_contents (val_args[i]);
2164
2165 obstack_init (&output);
2166 inner_cleanup = make_cleanup_obstack_free (&output);
2167
f870a310 2168 convert_between_encodings (target_wide_charset (gdbarch),
6c7a06a3
TT
2169 host_charset (),
2170 bytes, TYPE_LENGTH (valtype),
2171 TYPE_LENGTH (valtype),
2172 &output, translit_char);
2173 obstack_grow_str0 (&output, "");
2174
f1421989
HZ
2175 fprintf_filtered (stream, current_substring,
2176 obstack_base (&output));
6c7a06a3
TT
2177 do_cleanups (inner_cleanup);
2178 }
2179 break;
c906108c
SS
2180 case double_arg:
2181 {
b806fb9a
UW
2182 struct type *type = value_type (val_args[i]);
2183 DOUBLEST val;
2184 int inv;
2185
2186 /* If format string wants a float, unchecked-convert the value
2187 to floating point of the same size. */
50810684 2188 type = float_type_from_length (type);
b806fb9a
UW
2189 val = unpack_double (type, value_contents (val_args[i]), &inv);
2190 if (inv)
2191 error (_("Invalid floating value found in program."));
2192
f1421989 2193 fprintf_filtered (stream, current_substring, (double) val);
c906108c
SS
2194 break;
2195 }
46e9880c
DJ
2196 case long_double_arg:
2197#ifdef HAVE_LONG_DOUBLE
2198 {
b806fb9a
UW
2199 struct type *type = value_type (val_args[i]);
2200 DOUBLEST val;
2201 int inv;
2202
2203 /* If format string wants a float, unchecked-convert the value
2204 to floating point of the same size. */
50810684 2205 type = float_type_from_length (type);
b806fb9a
UW
2206 val = unpack_double (type, value_contents (val_args[i]), &inv);
2207 if (inv)
2208 error (_("Invalid floating value found in program."));
2209
f1421989
HZ
2210 fprintf_filtered (stream, current_substring,
2211 (long double) val);
46e9880c
DJ
2212 break;
2213 }
2214#else
2215 error (_("long double not supported in printf"));
2216#endif
c906108c
SS
2217 case long_long_arg:
2218#if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG)
2219 {
2220 long long val = value_as_long (val_args[i]);
ad3bbd48 2221
f1421989 2222 fprintf_filtered (stream, current_substring, val);
c906108c
SS
2223 break;
2224 }
2225#else
8a3fe4f8 2226 error (_("long long not supported in printf"));
c906108c
SS
2227#endif
2228 case int_arg:
2229 {
46e9880c 2230 int val = value_as_long (val_args[i]);
ad3bbd48 2231
f1421989 2232 fprintf_filtered (stream, current_substring, val);
46e9880c
DJ
2233 break;
2234 }
2235 case long_arg:
2236 {
c906108c 2237 long val = value_as_long (val_args[i]);
ad3bbd48 2238
f1421989 2239 fprintf_filtered (stream, current_substring, val);
c906108c
SS
2240 break;
2241 }
1a619819 2242
0aea4bf3
LM
2243 /* Handles decimal floating values. */
2244 case decfloat_arg:
1a619819 2245 {
0aea4bf3 2246 const gdb_byte *param_ptr = value_contents (val_args[i]);
ad3bbd48 2247
1a619819 2248#if defined (PRINTF_HAS_DECFLOAT)
0aea4bf3
LM
2249 /* If we have native support for Decimal floating
2250 printing, handle it here. */
f1421989 2251 fprintf_filtered (stream, current_substring, param_ptr);
1a619819 2252#else
1a619819
LM
2253
2254 /* As a workaround until vasprintf has native support for DFP
0aea4bf3
LM
2255 we convert the DFP values to string and print them using
2256 the %s format specifier. */
2257
2258 char *eos, *sos;
2259 int nnull_chars = 0;
2260
2261 /* Parameter data. */
2262 struct type *param_type = value_type (val_args[i]);
2263 unsigned int param_len = TYPE_LENGTH (param_type);
50810684 2264 struct gdbarch *gdbarch = get_type_arch (param_type);
e17a4113 2265 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
0aea4bf3
LM
2266
2267 /* DFP output data. */
2268 struct value *dfp_value = NULL;
2269 gdb_byte *dfp_ptr;
2270 int dfp_len = 16;
2271 gdb_byte dec[16];
2272 struct type *dfp_type = NULL;
2273 char decstr[MAX_DECIMAL_STRING];
1a619819
LM
2274
2275 /* Points to the end of the string so that we can go back
0aea4bf3 2276 and check for DFP length modifiers. */
1a619819
LM
2277 eos = current_substring + strlen (current_substring);
2278
0aea4bf3
LM
2279 /* Look for the float/double format specifier. */
2280 while (*eos != 'f' && *eos != 'e' && *eos != 'E'
2281 && *eos != 'g' && *eos != 'G')
2282 eos--;
2283
2284 sos = eos;
2285
2286 /* Search for the '%' char and extract the size and type of
2287 the output decimal value based on its modifiers
2288 (%Hf, %Df, %DDf). */
2289 while (*--sos != '%')
2290 {
2291 if (*sos == 'H')
2292 {
2293 dfp_len = 4;
50810684 2294 dfp_type = builtin_type (gdbarch)->builtin_decfloat;
0aea4bf3
LM
2295 }
2296 else if (*sos == 'D' && *(sos - 1) == 'D')
2297 {
2298 dfp_len = 16;
50810684 2299 dfp_type = builtin_type (gdbarch)->builtin_declong;
0aea4bf3
LM
2300 sos--;
2301 }
2302 else
2303 {
2304 dfp_len = 8;
50810684 2305 dfp_type = builtin_type (gdbarch)->builtin_decdouble;
0aea4bf3
LM
2306 }
2307 }
2308
2309 /* Replace %Hf, %Df and %DDf with %s's. */
2310 *++sos = 's';
2311
2312 /* Go through the whole format string and pull the correct
2313 number of chars back to compensate for the change in the
2314 format specifier. */
2315 while (nnull_chars < nargs - i)
2316 {
2317 if (*eos == '\0')
2318 nnull_chars++;
2319
2320 *++sos = *++eos;
2321 }
2322
2323 /* Conversion between different DFP types. */
2324 if (TYPE_CODE (param_type) == TYPE_CODE_DECFLOAT)
e17a4113
UW
2325 decimal_convert (param_ptr, param_len, byte_order,
2326 dec, dfp_len, byte_order);
0aea4bf3
LM
2327 else
2328 /* If this is a non-trivial conversion, just output 0.
2329 A correct converted value can be displayed by explicitly
2330 casting to a DFP type. */
e17a4113 2331 decimal_from_string (dec, dfp_len, byte_order, "0");
0aea4bf3
LM
2332
2333 dfp_value = value_from_decfloat (dfp_type, dec);
2334
2335 dfp_ptr = (gdb_byte *) value_contents (dfp_value);
2336
e17a4113 2337 decimal_to_string (dfp_ptr, dfp_len, byte_order, decstr);
1a619819
LM
2338
2339 /* Print the DFP value. */
f1421989 2340 fprintf_filtered (stream, current_substring, decstr);
0aea4bf3 2341
1a619819
LM
2342 break;
2343#endif
2344 }
2345
2025a643
DJ
2346 case ptr_arg:
2347 {
2348 /* We avoid the host's %p because pointers are too
2349 likely to be the wrong size. The only interesting
2350 modifier for %p is a width; extract that, and then
2351 handle %p as glibc would: %#x or a literal "(nil)". */
2352
2353 char *p, *fmt, *fmt_p;
2354#if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG)
2355 long long val = value_as_long (val_args[i]);
2356#else
2357 long val = value_as_long (val_args[i]);
2358#endif
2359
2360 fmt = alloca (strlen (current_substring) + 5);
2361
2362 /* Copy up to the leading %. */
2363 p = current_substring;
2364 fmt_p = fmt;
2365 while (*p)
2366 {
2367 int is_percent = (*p == '%');
ad3bbd48 2368
2025a643
DJ
2369 *fmt_p++ = *p++;
2370 if (is_percent)
2371 {
2372 if (*p == '%')
2373 *fmt_p++ = *p++;
2374 else
2375 break;
2376 }
2377 }
2378
2379 if (val != 0)
2380 *fmt_p++ = '#';
2381
2382 /* Copy any width. */
2383 while (*p >= '0' && *p < '9')
2384 *fmt_p++ = *p++;
2385
2386 gdb_assert (*p == 'p' && *(p + 1) == '\0');
2387 if (val != 0)
2388 {
2389#if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG)
2390 *fmt_p++ = 'l';
2391#endif
2392 *fmt_p++ = 'l';
2393 *fmt_p++ = 'x';
2394 *fmt_p++ = '\0';
f1421989 2395 fprintf_filtered (stream, fmt, val);
2025a643
DJ
2396 }
2397 else
2398 {
2399 *fmt_p++ = 's';
2400 *fmt_p++ = '\0';
f1421989 2401 fprintf_filtered (stream, fmt, "(nil)");
2025a643
DJ
2402 }
2403
2404 break;
2405 }
d3ce09f5
SS
2406 case literal_piece:
2407 /* Print a portion of the format string that has no
2408 directives. Note that this will not include any
2409 ordinary %-specs, but it might include "%%". That is
2410 why we use printf_filtered and not puts_filtered here.
2411 Also, we pass a dummy argument because some platforms
2412 have modified GCC to include -Wformat-security by
2413 default, which will warn here if there is no
2414 argument. */
2415 fprintf_filtered (stream, current_substring, 0);
2416 break;
675dcf4f
MK
2417 default:
2418 internal_error (__FILE__, __LINE__,
2025a643 2419 _("failed internal consistency check"));
c906108c 2420 }
d3ce09f5
SS
2421 /* Maybe advance to the next argument. */
2422 if (fpieces[fr].argclass != literal_piece)
2423 ++i;
c906108c 2424 }
c906108c
SS
2425 }
2426 do_cleanups (old_cleanups);
2427}
c906108c 2428
f1421989
HZ
2429/* Implement the "printf" command. */
2430
a04b0428 2431static void
f1421989
HZ
2432printf_command (char *arg, int from_tty)
2433{
a04b0428 2434 ui_printf (arg, gdb_stdout);
f1421989
HZ
2435}
2436
2437/* Implement the "eval" command. */
2438
2439static void
2440eval_command (char *arg, int from_tty)
2441{
2442 struct ui_file *ui_out = mem_fileopen ();
2443 struct cleanup *cleanups = make_cleanup_ui_file_delete (ui_out);
2444 char *expanded;
2445
a04b0428 2446 ui_printf (arg, ui_out);
f1421989
HZ
2447
2448 expanded = ui_file_xstrdup (ui_out, NULL);
2449 make_cleanup (xfree, expanded);
2450
2451 execute_command (expanded, from_tty);
2452
2453 do_cleanups (cleanups);
2454}
2455
c906108c 2456void
fba45db2 2457_initialize_printcmd (void)
c906108c 2458{
c94fdfd0
EZ
2459 struct cmd_list_element *c;
2460
c906108c
SS
2461 current_display_number = -1;
2462
a3247a22
PP
2463 observer_attach_solib_unloaded (clear_dangling_display_expressions);
2464
c906108c 2465 add_info ("address", address_info,
1bedd215 2466 _("Describe where symbol SYM is stored."));
c906108c 2467
1bedd215
AC
2468 add_info ("symbol", sym_info, _("\
2469Describe what symbol is at location ADDR.\n\
2470Only for symbols with fixed locations (global or static scope)."));
c906108c 2471
1bedd215
AC
2472 add_com ("x", class_vars, x_command, _("\
2473Examine memory: x/FMT ADDRESS.\n\
c906108c
SS
2474ADDRESS is an expression for the memory address to examine.\n\
2475FMT is a repeat count followed by a format letter and a size letter.\n\
2476Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),\n\
1bedd215
AC
2477 t(binary), f(float), a(address), i(instruction), c(char) and s(string).\n\
2478Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).\n\
c906108c
SS
2479The specified number of objects of the specified size are printed\n\
2480according to the format.\n\n\
2481Defaults for format and size letters are those previously used.\n\
2482Default count is 1. Default address is following last thing printed\n\
1bedd215 2483with this command or \"print\"."));
c906108c 2484
c906108c
SS
2485#if 0
2486 add_com ("whereis", class_vars, whereis_command,
1bedd215 2487 _("Print line number and file of definition of variable."));
c906108c 2488#endif
c5aa993b 2489
1bedd215
AC
2490 add_info ("display", display_info, _("\
2491Expressions to display when program stops, with code numbers."));
c906108c 2492
1a966eab
AC
2493 add_cmd ("undisplay", class_vars, undisplay_command, _("\
2494Cancel some expressions to be displayed when program stops.\n\
c906108c
SS
2495Arguments are the code numbers of the expressions to stop displaying.\n\
2496No argument means cancel all automatic-display expressions.\n\
2497\"delete display\" has the same effect as this command.\n\
1a966eab 2498Do \"info display\" to see current list of code numbers."),
c5aa993b 2499 &cmdlist);
c906108c 2500
1bedd215
AC
2501 add_com ("display", class_vars, display_command, _("\
2502Print value of expression EXP each time the program stops.\n\
c906108c
SS
2503/FMT may be used before EXP as in the \"print\" command.\n\
2504/FMT \"i\" or \"s\" or including a size-letter is allowed,\n\
2505as in the \"x\" command, and then EXP is used to get the address to examine\n\
2506and examining is done as in the \"x\" command.\n\n\
2507With no argument, display all currently requested auto-display expressions.\n\
1bedd215 2508Use \"undisplay\" to cancel display requests previously made."));
c906108c 2509
c9174737 2510 add_cmd ("display", class_vars, enable_display_command, _("\
1a966eab 2511Enable some expressions to be displayed when program stops.\n\
c906108c
SS
2512Arguments are the code numbers of the expressions to resume displaying.\n\
2513No argument means enable all automatic-display expressions.\n\
1a966eab 2514Do \"info display\" to see current list of code numbers."), &enablelist);
c906108c 2515
1a966eab
AC
2516 add_cmd ("display", class_vars, disable_display_command, _("\
2517Disable some expressions to be displayed when program stops.\n\
c906108c
SS
2518Arguments are the code numbers of the expressions to stop displaying.\n\
2519No argument means disable all automatic-display expressions.\n\
1a966eab 2520Do \"info display\" to see current list of code numbers."), &disablelist);
c906108c 2521
1a966eab
AC
2522 add_cmd ("display", class_vars, undisplay_command, _("\
2523Cancel 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 cancel all automatic-display expressions.\n\
1a966eab 2526Do \"info display\" to see current list of code numbers."), &deletelist);
c906108c 2527
1bedd215
AC
2528 add_com ("printf", class_vars, printf_command, _("\
2529printf \"printf format string\", arg1, arg2, arg3, ..., argn\n\
2530This is useful for formatted output in user-defined commands."));
c906108c 2531
1bedd215
AC
2532 add_com ("output", class_vars, output_command, _("\
2533Like \"print\" but don't put in value history and don't print newline.\n\
2534This is useful in user-defined commands."));
c906108c 2535
1bedd215
AC
2536 add_prefix_cmd ("set", class_vars, set_command, _("\
2537Evaluate expression EXP and assign result to variable VAR, using assignment\n\
c906108c
SS
2538syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n\
2539example). VAR may be a debugger \"convenience\" variable (names starting\n\
2540with $), a register (a few standard names starting with $), or an actual\n\
1bedd215
AC
2541variable in the program being debugged. EXP is any valid expression.\n\
2542Use \"set variable\" for variables with names identical to set subcommands.\n\
2543\n\
2544With a subcommand, this command modifies parts of the gdb environment.\n\
2545You can see these environment settings with the \"show\" command."),
c5aa993b 2546 &setlist, "set ", 1, &cmdlist);
c906108c 2547 if (dbx_commands)
1bedd215
AC
2548 add_com ("assign", class_vars, set_command, _("\
2549Evaluate expression EXP and assign result to variable VAR, using assignment\n\
c906108c
SS
2550syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n\
2551example). VAR may be a debugger \"convenience\" variable (names starting\n\
2552with $), a register (a few standard names starting with $), or an actual\n\
1bedd215
AC
2553variable in the program being debugged. EXP is any valid expression.\n\
2554Use \"set variable\" for variables with names identical to set subcommands.\n\
c906108c 2555\nWith a subcommand, this command modifies parts of the gdb environment.\n\
1bedd215 2556You can see these environment settings with the \"show\" command."));
c906108c 2557
0df8b418 2558 /* "call" is the same as "set", but handy for dbx users to call fns. */
1bedd215
AC
2559 c = add_com ("call", class_vars, call_command, _("\
2560Call a function in the program.\n\
c906108c
SS
2561The argument is the function name and arguments, in the notation of the\n\
2562current working language. The result is printed and saved in the value\n\
1bedd215 2563history, if it is not void."));
65d12d83 2564 set_cmd_completer (c, expression_completer);
c906108c 2565
1a966eab
AC
2566 add_cmd ("variable", class_vars, set_command, _("\
2567Evaluate expression EXP and assign result to variable VAR, using assignment\n\
c906108c
SS
2568syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n\
2569example). VAR may be a debugger \"convenience\" variable (names starting\n\
2570with $), a register (a few standard names starting with $), or an actual\n\
2571variable in the program being debugged. EXP is any valid expression.\n\
1a966eab 2572This may usually be abbreviated to simply \"set\"."),
c5aa993b 2573 &setlist);
c906108c 2574
1bedd215
AC
2575 c = add_com ("print", class_vars, print_command, _("\
2576Print value of expression EXP.\n\
c906108c
SS
2577Variables accessible are those of the lexical environment of the selected\n\
2578stack frame, plus all those whose scope is global or an entire file.\n\
2579\n\
2580$NUM gets previous value number NUM. $ and $$ are the last two values.\n\
2581$$NUM refers to NUM'th value back from the last one.\n\
1bedd215
AC
2582Names starting with $ refer to registers (with the values they would have\n\
2583if the program were to return to the stack frame now selected, restoring\n\
c906108c
SS
2584all registers saved by frames farther in) or else to debugger\n\
2585\"convenience\" variables (any such name not a known register).\n\
1bedd215
AC
2586Use assignment expressions to give values to convenience variables.\n\
2587\n\
c906108c
SS
2588{TYPE}ADREXP refers to a datum of data type TYPE, located at address ADREXP.\n\
2589@ is a binary operator for treating consecutive data objects\n\
2590anywhere in memory as an array. FOO@NUM gives an array whose first\n\
2591element is FOO, whose second element is stored in the space following\n\
2592where FOO is stored, etc. FOO must be an expression whose value\n\
1bedd215
AC
2593resides in memory.\n\
2594\n\
c906108c 2595EXP may be preceded with /FMT, where FMT is a format letter\n\
1bedd215 2596but no count or size letter (see \"x\" command)."));
65d12d83 2597 set_cmd_completer (c, expression_completer);
c906108c
SS
2598 add_com_alias ("p", "print", class_vars, 1);
2599
1bedd215
AC
2600 c = add_com ("inspect", class_vars, inspect_command, _("\
2601Same as \"print\" command, except that if you are running in the epoch\n\
2602environment, the value is printed in its own window."));
65d12d83 2603 set_cmd_completer (c, expression_completer);
c906108c 2604
35096d9d
AC
2605 add_setshow_uinteger_cmd ("max-symbolic-offset", no_class,
2606 &max_symbolic_offset, _("\
2607Set the largest offset that will be printed in <symbol+1234> form."), _("\
2608Show the largest offset that will be printed in <symbol+1234> form."), NULL,
2609 NULL,
920d2a44 2610 show_max_symbolic_offset,
35096d9d 2611 &setprintlist, &showprintlist);
5bf193a2
AC
2612 add_setshow_boolean_cmd ("symbol-filename", no_class,
2613 &print_symbol_filename, _("\
2614Set printing of source filename and line number with <symbol>."), _("\
2615Show printing of source filename and line number with <symbol>."), NULL,
2616 NULL,
920d2a44 2617 show_print_symbol_filename,
5bf193a2 2618 &setprintlist, &showprintlist);
f1421989
HZ
2619
2620 add_com ("eval", no_class, eval_command, _("\
2621Convert \"printf format string\", arg1, arg2, arg3, ..., argn to\n\
2622a command line, and call it."));
c906108c 2623}
This page took 1.313843 seconds and 4 git commands to generate.