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