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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [gdb/] [printcmd.c] - Blame information for rev 1768

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

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

powered by: WebSVN 2.1.0

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