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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [printcmd.c] - Blame information for rev 1775

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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