OpenCores
URL https://opencores.org/ocsvn/or1k_old/or1k_old/trunk

Subversion Repositories or1k_old

[/] [or1k_old/] [trunk/] [gdb-5.3/] [gdb/] [printcmd.c] - Blame information for rev 1782

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.