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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.2/] [gdb/] [valprint.c] - Blame information for rev 330

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 330 jeremybenn
/* Print values for GDB, the GNU debugger.
2
 
3
   Copyright (C) 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
4
   1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
5
   2009, 2010 Free Software Foundation, Inc.
6
 
7
   This file is part of GDB.
8
 
9
   This program is free software; you can redistribute it and/or modify
10
   it under the terms of the GNU General Public License as published by
11
   the Free Software Foundation; either version 3 of the License, or
12
   (at your option) any later version.
13
 
14
   This program is distributed in the hope that it will be useful,
15
   but WITHOUT ANY WARRANTY; without even the implied warranty of
16
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
   GNU General Public License for more details.
18
 
19
   You should have received a copy of the GNU General Public License
20
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
 
22
#include "defs.h"
23
#include "gdb_string.h"
24
#include "symtab.h"
25
#include "gdbtypes.h"
26
#include "value.h"
27
#include "gdbcore.h"
28
#include "gdbcmd.h"
29
#include "target.h"
30
#include "language.h"
31
#include "annotate.h"
32
#include "valprint.h"
33
#include "floatformat.h"
34
#include "doublest.h"
35
#include "exceptions.h"
36
#include "dfp.h"
37
#include "python/python.h"
38
#include "ada-lang.h"
39
 
40
#include <errno.h>
41
 
42
/* Prototypes for local functions */
43
 
44
static int partial_memory_read (CORE_ADDR memaddr, gdb_byte *myaddr,
45
                                int len, int *errnoptr);
46
 
47
static void show_print (char *, int);
48
 
49
static void set_print (char *, int);
50
 
51
static void set_radix (char *, int);
52
 
53
static void show_radix (char *, int);
54
 
55
static void set_input_radix (char *, int, struct cmd_list_element *);
56
 
57
static void set_input_radix_1 (int, unsigned);
58
 
59
static void set_output_radix (char *, int, struct cmd_list_element *);
60
 
61
static void set_output_radix_1 (int, unsigned);
62
 
63
void _initialize_valprint (void);
64
 
65
#define PRINT_MAX_DEFAULT 200   /* Start print_max off at this value. */
66
 
67
struct value_print_options user_print_options =
68
{
69
  Val_pretty_default,           /* pretty */
70
  0,                             /* prettyprint_arrays */
71
  0,                             /* prettyprint_structs */
72
  0,                             /* vtblprint */
73
  1,                            /* unionprint */
74
  1,                            /* addressprint */
75
  0,                             /* objectprint */
76
  PRINT_MAX_DEFAULT,            /* print_max */
77
  10,                           /* repeat_count_threshold */
78
  0,                             /* output_format */
79
  0,                             /* format */
80
  0,                             /* stop_print_at_null */
81
  0,                             /* inspect_it */
82
  0,                             /* print_array_indexes */
83
  0,                             /* deref_ref */
84
  1,                            /* static_field_print */
85
  1,                            /* pascal_static_field_print */
86
  0,                             /* raw */
87
 
88
};
89
 
90
/* Initialize *OPTS to be a copy of the user print options.  */
91
void
92
get_user_print_options (struct value_print_options *opts)
93
{
94
  *opts = user_print_options;
95
}
96
 
97
/* Initialize *OPTS to be a copy of the user print options, but with
98
   pretty-printing disabled.  */
99
void
100
get_raw_print_options (struct value_print_options *opts)
101
{
102
  *opts = user_print_options;
103
  opts->pretty = Val_no_prettyprint;
104
}
105
 
106
/* Initialize *OPTS to be a copy of the user print options, but using
107
   FORMAT as the formatting option.  */
108
void
109
get_formatted_print_options (struct value_print_options *opts,
110
                             char format)
111
{
112
  *opts = user_print_options;
113
  opts->format = format;
114
}
115
 
116
static void
117
show_print_max (struct ui_file *file, int from_tty,
118
                struct cmd_list_element *c, const char *value)
119
{
120
  fprintf_filtered (file, _("\
121
Limit on string chars or array elements to print is %s.\n"),
122
                    value);
123
}
124
 
125
 
126
/* Default input and output radixes, and output format letter.  */
127
 
128
unsigned input_radix = 10;
129
static void
130
show_input_radix (struct ui_file *file, int from_tty,
131
                  struct cmd_list_element *c, const char *value)
132
{
133
  fprintf_filtered (file, _("\
134
Default input radix for entering numbers is %s.\n"),
135
                    value);
136
}
137
 
138
unsigned output_radix = 10;
139
static void
140
show_output_radix (struct ui_file *file, int from_tty,
141
                   struct cmd_list_element *c, const char *value)
142
{
143
  fprintf_filtered (file, _("\
144
Default output radix for printing of values is %s.\n"),
145
                    value);
146
}
147
 
148
/* By default we print arrays without printing the index of each element in
149
   the array.  This behavior can be changed by setting PRINT_ARRAY_INDEXES.  */
150
 
151
static void
152
show_print_array_indexes (struct ui_file *file, int from_tty,
153
                          struct cmd_list_element *c, const char *value)
154
{
155
  fprintf_filtered (file, _("Printing of array indexes is %s.\n"), value);
156
}
157
 
158
/* Print repeat counts if there are more than this many repetitions of an
159
   element in an array.  Referenced by the low level language dependent
160
   print routines. */
161
 
162
static void
163
show_repeat_count_threshold (struct ui_file *file, int from_tty,
164
                             struct cmd_list_element *c, const char *value)
165
{
166
  fprintf_filtered (file, _("Threshold for repeated print elements is %s.\n"),
167
                    value);
168
}
169
 
170
/* If nonzero, stops printing of char arrays at first null. */
171
 
172
static void
173
show_stop_print_at_null (struct ui_file *file, int from_tty,
174
                         struct cmd_list_element *c, const char *value)
175
{
176
  fprintf_filtered (file, _("\
177
Printing of char arrays to stop at first null char is %s.\n"),
178
                    value);
179
}
180
 
181
/* Controls pretty printing of structures. */
182
 
183
static void
184
show_prettyprint_structs (struct ui_file *file, int from_tty,
185
                          struct cmd_list_element *c, const char *value)
186
{
187
  fprintf_filtered (file, _("Prettyprinting of structures is %s.\n"), value);
188
}
189
 
190
/* Controls pretty printing of arrays.  */
191
 
192
static void
193
show_prettyprint_arrays (struct ui_file *file, int from_tty,
194
                         struct cmd_list_element *c, const char *value)
195
{
196
  fprintf_filtered (file, _("Prettyprinting of arrays is %s.\n"), value);
197
}
198
 
199
/* If nonzero, causes unions inside structures or other unions to be
200
   printed. */
201
 
202
static void
203
show_unionprint (struct ui_file *file, int from_tty,
204
                 struct cmd_list_element *c, const char *value)
205
{
206
  fprintf_filtered (file, _("\
207
Printing of unions interior to structures is %s.\n"),
208
                    value);
209
}
210
 
211
/* If nonzero, causes machine addresses to be printed in certain contexts. */
212
 
213
static void
214
show_addressprint (struct ui_file *file, int from_tty,
215
                   struct cmd_list_element *c, const char *value)
216
{
217
  fprintf_filtered (file, _("Printing of addresses is %s.\n"), value);
218
}
219
 
220
 
221
/* A helper function for val_print.  When printing in "summary" mode,
222
   we want to print scalar arguments, but not aggregate arguments.
223
   This function distinguishes between the two.  */
224
 
225
static int
226
scalar_type_p (struct type *type)
227
{
228
  CHECK_TYPEDEF (type);
229
  while (TYPE_CODE (type) == TYPE_CODE_REF)
230
    {
231
      type = TYPE_TARGET_TYPE (type);
232
      CHECK_TYPEDEF (type);
233
    }
234
  switch (TYPE_CODE (type))
235
    {
236
    case TYPE_CODE_ARRAY:
237
    case TYPE_CODE_STRUCT:
238
    case TYPE_CODE_UNION:
239
    case TYPE_CODE_SET:
240
    case TYPE_CODE_STRING:
241
    case TYPE_CODE_BITSTRING:
242
      return 0;
243
    default:
244
      return 1;
245
    }
246
}
247
 
248
/* Helper function to check the validity of some bits of a value.
249
 
250
   If TYPE represents some aggregate type (e.g., a structure), return 1.
251
 
252
   Otherwise, any of the bytes starting at OFFSET and extending for
253
   TYPE_LENGTH(TYPE) bytes are invalid, print a message to STREAM and
254
   return 0.  The checking is done using FUNCS.
255
 
256
   Otherwise, return 1.  */
257
 
258
static int
259
valprint_check_validity (struct ui_file *stream,
260
                         struct type *type,
261
                         int offset,
262
                         const struct value *val)
263
{
264
  CHECK_TYPEDEF (type);
265
 
266
  if (TYPE_CODE (type) != TYPE_CODE_UNION
267
      && TYPE_CODE (type) != TYPE_CODE_STRUCT
268
      && TYPE_CODE (type) != TYPE_CODE_ARRAY)
269
    {
270
      if (! value_bits_valid (val, TARGET_CHAR_BIT * offset,
271
                              TARGET_CHAR_BIT * TYPE_LENGTH (type)))
272
        {
273
          fprintf_filtered (stream, _("<value optimized out>"));
274
          return 0;
275
        }
276
    }
277
 
278
  return 1;
279
}
280
 
281
/* Print using the given LANGUAGE the data of type TYPE located at VALADDR
282
   (within GDB), which came from the inferior at address ADDRESS, onto
283
   stdio stream STREAM according to OPTIONS.
284
 
285
   If the data are a string pointer, returns the number of string characters
286
   printed.
287
 
288
   FIXME:  The data at VALADDR is in target byte order.  If gdb is ever
289
   enhanced to be able to debug more than the single target it was compiled
290
   for (specific CPU type and thus specific target byte ordering), then
291
   either the print routines are going to have to take this into account,
292
   or the data is going to have to be passed into here already converted
293
   to the host byte ordering, whichever is more convenient. */
294
 
295
 
296
int
297
val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
298
           CORE_ADDR address, struct ui_file *stream, int recurse,
299
           const struct value *val,
300
           const struct value_print_options *options,
301
           const struct language_defn *language)
302
{
303
  volatile struct gdb_exception except;
304
  int ret = 0;
305
  struct value_print_options local_opts = *options;
306
  struct type *real_type = check_typedef (type);
307
 
308
  if (local_opts.pretty == Val_pretty_default)
309
    local_opts.pretty = (local_opts.prettyprint_structs
310
                         ? Val_prettyprint : Val_no_prettyprint);
311
 
312
  QUIT;
313
 
314
  /* Ensure that the type is complete and not just a stub.  If the type is
315
     only a stub and we can't find and substitute its complete type, then
316
     print appropriate string and return.  */
317
 
318
  if (TYPE_STUB (real_type))
319
    {
320
      fprintf_filtered (stream, _("<incomplete type>"));
321
      gdb_flush (stream);
322
      return (0);
323
    }
324
 
325
  if (!valprint_check_validity (stream, real_type, embedded_offset, val))
326
    return 0;
327
 
328
  if (!options->raw)
329
    {
330
      ret = apply_val_pretty_printer (type, valaddr, embedded_offset,
331
                                      address, stream, recurse,
332
                                      val, options, language);
333
      if (ret)
334
        return ret;
335
    }
336
 
337
  /* Handle summary mode.  If the value is a scalar, print it;
338
     otherwise, print an ellipsis.  */
339
  if (options->summary && !scalar_type_p (type))
340
    {
341
      fprintf_filtered (stream, "...");
342
      return 0;
343
    }
344
 
345
  TRY_CATCH (except, RETURN_MASK_ERROR)
346
    {
347
      ret = language->la_val_print (type, valaddr, embedded_offset, address,
348
                                    stream, recurse, val,
349
                                    &local_opts);
350
    }
351
  if (except.reason < 0)
352
    fprintf_filtered (stream, _("<error reading variable>"));
353
 
354
  return ret;
355
}
356
 
357
/* Check whether the value VAL is printable.  Return 1 if it is;
358
   return 0 and print an appropriate error message to STREAM if it
359
   is not.  */
360
 
361
static int
362
value_check_printable (struct value *val, struct ui_file *stream)
363
{
364
  if (val == 0)
365
    {
366
      fprintf_filtered (stream, _("<address of value unknown>"));
367
      return 0;
368
    }
369
 
370
  if (value_entirely_optimized_out (val))
371
    {
372
      fprintf_filtered (stream, _("<value optimized out>"));
373
      return 0;
374
    }
375
 
376
  if (TYPE_CODE (value_type (val)) == TYPE_CODE_INTERNAL_FUNCTION)
377
    {
378
      fprintf_filtered (stream, _("<internal function %s>"),
379
                        value_internal_function_name (val));
380
      return 0;
381
    }
382
 
383
  return 1;
384
}
385
 
386
/* Print using the given LANGUAGE the value VAL onto stream STREAM according
387
   to OPTIONS.
388
 
389
   If the data are a string pointer, returns the number of string characters
390
   printed.
391
 
392
   This is a preferable interface to val_print, above, because it uses
393
   GDB's value mechanism.  */
394
 
395
int
396
common_val_print (struct value *val, struct ui_file *stream, int recurse,
397
                  const struct value_print_options *options,
398
                  const struct language_defn *language)
399
{
400
  if (!value_check_printable (val, stream))
401
    return 0;
402
 
403
  if (language->la_language == language_ada)
404
    /* The value might have a dynamic type, which would cause trouble
405
       below when trying to extract the value contents (since the value
406
       size is determined from the type size which is unknown).  So
407
       get a fixed representation of our value.  */
408
    val = ada_to_fixed_value (val);
409
 
410
  return val_print (value_type (val), value_contents_for_printing (val),
411
                    value_embedded_offset (val), value_address (val),
412
                    stream, recurse,
413
                    val, options, language);
414
}
415
 
416
/* Print on stream STREAM the value VAL according to OPTIONS.  The value
417
   is printed using the current_language syntax.
418
 
419
   If the object printed is a string pointer, return the number of string
420
   bytes printed.  */
421
 
422
int
423
value_print (struct value *val, struct ui_file *stream,
424
             const struct value_print_options *options)
425
{
426
  if (!value_check_printable (val, stream))
427
    return 0;
428
 
429
  if (!options->raw)
430
    {
431
      int r = apply_val_pretty_printer (value_type (val),
432
                                        value_contents_for_printing (val),
433
                                        value_embedded_offset (val),
434
                                        value_address (val),
435
                                        stream, 0,
436
                                        val, options, current_language);
437
 
438
      if (r)
439
        return r;
440
    }
441
 
442
  return LA_VALUE_PRINT (val, stream, options);
443
}
444
 
445
/* Called by various <lang>_val_print routines to print
446
   TYPE_CODE_INT's.  TYPE is the type.  VALADDR is the address of the
447
   value.  STREAM is where to print the value.  */
448
 
449
void
450
val_print_type_code_int (struct type *type, const gdb_byte *valaddr,
451
                         struct ui_file *stream)
452
{
453
  enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
454
 
455
  if (TYPE_LENGTH (type) > sizeof (LONGEST))
456
    {
457
      LONGEST val;
458
 
459
      if (TYPE_UNSIGNED (type)
460
          && extract_long_unsigned_integer (valaddr, TYPE_LENGTH (type),
461
                                            byte_order, &val))
462
        {
463
          print_longest (stream, 'u', 0, val);
464
        }
465
      else
466
        {
467
          /* Signed, or we couldn't turn an unsigned value into a
468
             LONGEST.  For signed values, one could assume two's
469
             complement (a reasonable assumption, I think) and do
470
             better than this.  */
471
          print_hex_chars (stream, (unsigned char *) valaddr,
472
                           TYPE_LENGTH (type), byte_order);
473
        }
474
    }
475
  else
476
    {
477
      print_longest (stream, TYPE_UNSIGNED (type) ? 'u' : 'd', 0,
478
                     unpack_long (type, valaddr));
479
    }
480
}
481
 
482
void
483
val_print_type_code_flags (struct type *type, const gdb_byte *valaddr,
484
                           struct ui_file *stream)
485
{
486
  ULONGEST val = unpack_long (type, valaddr);
487
  int bitpos, nfields = TYPE_NFIELDS (type);
488
 
489
  fputs_filtered ("[ ", stream);
490
  for (bitpos = 0; bitpos < nfields; bitpos++)
491
    {
492
      if (TYPE_FIELD_BITPOS (type, bitpos) != -1
493
          && (val & ((ULONGEST)1 << bitpos)))
494
        {
495
          if (TYPE_FIELD_NAME (type, bitpos))
496
            fprintf_filtered (stream, "%s ", TYPE_FIELD_NAME (type, bitpos));
497
          else
498
            fprintf_filtered (stream, "#%d ", bitpos);
499
        }
500
    }
501
  fputs_filtered ("]", stream);
502
}
503
 
504
/* Print a number according to FORMAT which is one of d,u,x,o,b,h,w,g.
505
   The raison d'etre of this function is to consolidate printing of
506
   LONG_LONG's into this one function. The format chars b,h,w,g are
507
   from print_scalar_formatted().  Numbers are printed using C
508
   format.
509
 
510
   USE_C_FORMAT means to use C format in all cases.  Without it,
511
   'o' and 'x' format do not include the standard C radix prefix
512
   (leading 0 or 0x).
513
 
514
   Hilfinger/2004-09-09: USE_C_FORMAT was originally called USE_LOCAL
515
   and was intended to request formating according to the current
516
   language and would be used for most integers that GDB prints.  The
517
   exceptional cases were things like protocols where the format of
518
   the integer is a protocol thing, not a user-visible thing).  The
519
   parameter remains to preserve the information of what things might
520
   be printed with language-specific format, should we ever resurrect
521
   that capability. */
522
 
523
void
524
print_longest (struct ui_file *stream, int format, int use_c_format,
525
               LONGEST val_long)
526
{
527
  const char *val;
528
 
529
  switch (format)
530
    {
531
    case 'd':
532
      val = int_string (val_long, 10, 1, 0, 1); break;
533
    case 'u':
534
      val = int_string (val_long, 10, 0, 0, 1); break;
535
    case 'x':
536
      val = int_string (val_long, 16, 0, 0, use_c_format); break;
537
    case 'b':
538
      val = int_string (val_long, 16, 0, 2, 1); break;
539
    case 'h':
540
      val = int_string (val_long, 16, 0, 4, 1); break;
541
    case 'w':
542
      val = int_string (val_long, 16, 0, 8, 1); break;
543
    case 'g':
544
      val = int_string (val_long, 16, 0, 16, 1); break;
545
      break;
546
    case 'o':
547
      val = int_string (val_long, 8, 0, 0, use_c_format); break;
548
    default:
549
      internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
550
    }
551
  fputs_filtered (val, stream);
552
}
553
 
554
/* This used to be a macro, but I don't think it is called often enough
555
   to merit such treatment.  */
556
/* Convert a LONGEST to an int.  This is used in contexts (e.g. number of
557
   arguments to a function, number in a value history, register number, etc.)
558
   where the value must not be larger than can fit in an int.  */
559
 
560
int
561
longest_to_int (LONGEST arg)
562
{
563
  /* Let the compiler do the work */
564
  int rtnval = (int) arg;
565
 
566
  /* Check for overflows or underflows */
567
  if (sizeof (LONGEST) > sizeof (int))
568
    {
569
      if (rtnval != arg)
570
        {
571
          error (_("Value out of range."));
572
        }
573
    }
574
  return (rtnval);
575
}
576
 
577
/* Print a floating point value of type TYPE (not always a
578
   TYPE_CODE_FLT), pointed to in GDB by VALADDR, on STREAM.  */
579
 
580
void
581
print_floating (const gdb_byte *valaddr, struct type *type,
582
                struct ui_file *stream)
583
{
584
  DOUBLEST doub;
585
  int inv;
586
  const struct floatformat *fmt = NULL;
587
  unsigned len = TYPE_LENGTH (type);
588
  enum float_kind kind;
589
 
590
  /* If it is a floating-point, check for obvious problems.  */
591
  if (TYPE_CODE (type) == TYPE_CODE_FLT)
592
    fmt = floatformat_from_type (type);
593
  if (fmt != NULL)
594
    {
595
      kind = floatformat_classify (fmt, valaddr);
596
      if (kind == float_nan)
597
        {
598
          if (floatformat_is_negative (fmt, valaddr))
599
            fprintf_filtered (stream, "-");
600
          fprintf_filtered (stream, "nan(");
601
          fputs_filtered ("0x", stream);
602
          fputs_filtered (floatformat_mantissa (fmt, valaddr), stream);
603
          fprintf_filtered (stream, ")");
604
          return;
605
        }
606
      else if (kind == float_infinite)
607
        {
608
          if (floatformat_is_negative (fmt, valaddr))
609
            fputs_filtered ("-", stream);
610
          fputs_filtered ("inf", stream);
611
          return;
612
        }
613
    }
614
 
615
  /* NOTE: cagney/2002-01-15: The TYPE passed into print_floating()
616
     isn't necessarily a TYPE_CODE_FLT.  Consequently, unpack_double
617
     needs to be used as that takes care of any necessary type
618
     conversions.  Such conversions are of course direct to DOUBLEST
619
     and disregard any possible target floating point limitations.
620
     For instance, a u64 would be converted and displayed exactly on a
621
     host with 80 bit DOUBLEST but with loss of information on a host
622
     with 64 bit DOUBLEST.  */
623
 
624
  doub = unpack_double (type, valaddr, &inv);
625
  if (inv)
626
    {
627
      fprintf_filtered (stream, "<invalid float value>");
628
      return;
629
    }
630
 
631
  /* FIXME: kettenis/2001-01-20: The following code makes too much
632
     assumptions about the host and target floating point format.  */
633
 
634
  /* NOTE: cagney/2002-02-03: Since the TYPE of what was passed in may
635
     not necessarily be a TYPE_CODE_FLT, the below ignores that and
636
     instead uses the type's length to determine the precision of the
637
     floating-point value being printed.  */
638
 
639
  if (len < sizeof (double))
640
      fprintf_filtered (stream, "%.9g", (double) doub);
641
  else if (len == sizeof (double))
642
      fprintf_filtered (stream, "%.17g", (double) doub);
643
  else
644
#ifdef PRINTF_HAS_LONG_DOUBLE
645
    fprintf_filtered (stream, "%.35Lg", doub);
646
#else
647
    /* This at least wins with values that are representable as
648
       doubles.  */
649
    fprintf_filtered (stream, "%.17g", (double) doub);
650
#endif
651
}
652
 
653
void
654
print_decimal_floating (const gdb_byte *valaddr, struct type *type,
655
                        struct ui_file *stream)
656
{
657
  enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
658
  char decstr[MAX_DECIMAL_STRING];
659
  unsigned len = TYPE_LENGTH (type);
660
 
661
  decimal_to_string (valaddr, len, byte_order, decstr);
662
  fputs_filtered (decstr, stream);
663
  return;
664
}
665
 
666
void
667
print_binary_chars (struct ui_file *stream, const gdb_byte *valaddr,
668
                    unsigned len, enum bfd_endian byte_order)
669
{
670
 
671
#define BITS_IN_BYTES 8
672
 
673
  const gdb_byte *p;
674
  unsigned int i;
675
  int b;
676
 
677
  /* Declared "int" so it will be signed.
678
   * This ensures that right shift will shift in zeros.
679
   */
680
  const int mask = 0x080;
681
 
682
  /* FIXME: We should be not printing leading zeroes in most cases.  */
683
 
684
  if (byte_order == BFD_ENDIAN_BIG)
685
    {
686
      for (p = valaddr;
687
           p < valaddr + len;
688
           p++)
689
        {
690
          /* Every byte has 8 binary characters; peel off
691
           * and print from the MSB end.
692
           */
693
          for (i = 0; i < (BITS_IN_BYTES * sizeof (*p)); i++)
694
            {
695
              if (*p & (mask >> i))
696
                b = 1;
697
              else
698
                b = 0;
699
 
700
              fprintf_filtered (stream, "%1d", b);
701
            }
702
        }
703
    }
704
  else
705
    {
706
      for (p = valaddr + len - 1;
707
           p >= valaddr;
708
           p--)
709
        {
710
          for (i = 0; i < (BITS_IN_BYTES * sizeof (*p)); i++)
711
            {
712
              if (*p & (mask >> i))
713
                b = 1;
714
              else
715
                b = 0;
716
 
717
              fprintf_filtered (stream, "%1d", b);
718
            }
719
        }
720
    }
721
}
722
 
723
/* VALADDR points to an integer of LEN bytes.
724
 * Print it in octal on stream or format it in buf.
725
 */
726
void
727
print_octal_chars (struct ui_file *stream, const gdb_byte *valaddr,
728
                   unsigned len, enum bfd_endian byte_order)
729
{
730
  const gdb_byte *p;
731
  unsigned char octa1, octa2, octa3, carry;
732
  int cycle;
733
 
734
  /* FIXME: We should be not printing leading zeroes in most cases.  */
735
 
736
 
737
  /* Octal is 3 bits, which doesn't fit.  Yuk.  So we have to track
738
   * the extra bits, which cycle every three bytes:
739
   *
740
   * Byte side:       0            1             2          3
741
   *                         |             |            |            |
742
   * bit number   123 456 78 | 9 012 345 6 | 78 901 234 | 567 890 12 |
743
   *
744
   * Octal side:   0   1   carry  3   4  carry ...
745
   *
746
   * Cycle number:    0             1            2
747
   *
748
   * But of course we are printing from the high side, so we have to
749
   * figure out where in the cycle we are so that we end up with no
750
   * left over bits at the end.
751
   */
752
#define BITS_IN_OCTAL 3
753
#define HIGH_ZERO     0340
754
#define LOW_ZERO      0016
755
#define CARRY_ZERO    0003
756
#define HIGH_ONE      0200
757
#define MID_ONE       0160
758
#define LOW_ONE       0016
759
#define CARRY_ONE     0001
760
#define HIGH_TWO      0300
761
#define MID_TWO       0070
762
#define LOW_TWO       0007
763
 
764
  /* For 32 we start in cycle 2, with two bits and one bit carry;
765
   * for 64 in cycle in cycle 1, with one bit and a two bit carry.
766
   */
767
  cycle = (len * BITS_IN_BYTES) % BITS_IN_OCTAL;
768
  carry = 0;
769
 
770
  fputs_filtered ("0", stream);
771
  if (byte_order == BFD_ENDIAN_BIG)
772
    {
773
      for (p = valaddr;
774
           p < valaddr + len;
775
           p++)
776
        {
777
          switch (cycle)
778
            {
779
            case 0:
780
              /* No carry in, carry out two bits.
781
               */
782
              octa1 = (HIGH_ZERO & *p) >> 5;
783
              octa2 = (LOW_ZERO & *p) >> 2;
784
              carry = (CARRY_ZERO & *p);
785
              fprintf_filtered (stream, "%o", octa1);
786
              fprintf_filtered (stream, "%o", octa2);
787
              break;
788
 
789
            case 1:
790
              /* Carry in two bits, carry out one bit.
791
               */
792
              octa1 = (carry << 1) | ((HIGH_ONE & *p) >> 7);
793
              octa2 = (MID_ONE & *p) >> 4;
794
              octa3 = (LOW_ONE & *p) >> 1;
795
              carry = (CARRY_ONE & *p);
796
              fprintf_filtered (stream, "%o", octa1);
797
              fprintf_filtered (stream, "%o", octa2);
798
              fprintf_filtered (stream, "%o", octa3);
799
              break;
800
 
801
            case 2:
802
              /* Carry in one bit, no carry out.
803
               */
804
              octa1 = (carry << 2) | ((HIGH_TWO & *p) >> 6);
805
              octa2 = (MID_TWO & *p) >> 3;
806
              octa3 = (LOW_TWO & *p);
807
              carry = 0;
808
              fprintf_filtered (stream, "%o", octa1);
809
              fprintf_filtered (stream, "%o", octa2);
810
              fprintf_filtered (stream, "%o", octa3);
811
              break;
812
 
813
            default:
814
              error (_("Internal error in octal conversion;"));
815
            }
816
 
817
          cycle++;
818
          cycle = cycle % BITS_IN_OCTAL;
819
        }
820
    }
821
  else
822
    {
823
      for (p = valaddr + len - 1;
824
           p >= valaddr;
825
           p--)
826
        {
827
          switch (cycle)
828
            {
829
            case 0:
830
              /* Carry out, no carry in */
831
              octa1 = (HIGH_ZERO & *p) >> 5;
832
              octa2 = (LOW_ZERO & *p) >> 2;
833
              carry = (CARRY_ZERO & *p);
834
              fprintf_filtered (stream, "%o", octa1);
835
              fprintf_filtered (stream, "%o", octa2);
836
              break;
837
 
838
            case 1:
839
              /* Carry in, carry out */
840
              octa1 = (carry << 1) | ((HIGH_ONE & *p) >> 7);
841
              octa2 = (MID_ONE & *p) >> 4;
842
              octa3 = (LOW_ONE & *p) >> 1;
843
              carry = (CARRY_ONE & *p);
844
              fprintf_filtered (stream, "%o", octa1);
845
              fprintf_filtered (stream, "%o", octa2);
846
              fprintf_filtered (stream, "%o", octa3);
847
              break;
848
 
849
            case 2:
850
              /* Carry in, no carry out */
851
              octa1 = (carry << 2) | ((HIGH_TWO & *p) >> 6);
852
              octa2 = (MID_TWO & *p) >> 3;
853
              octa3 = (LOW_TWO & *p);
854
              carry = 0;
855
              fprintf_filtered (stream, "%o", octa1);
856
              fprintf_filtered (stream, "%o", octa2);
857
              fprintf_filtered (stream, "%o", octa3);
858
              break;
859
 
860
            default:
861
              error (_("Internal error in octal conversion;"));
862
            }
863
 
864
          cycle++;
865
          cycle = cycle % BITS_IN_OCTAL;
866
        }
867
    }
868
 
869
}
870
 
871
/* VALADDR points to an integer of LEN bytes.
872
 * Print it in decimal on stream or format it in buf.
873
 */
874
void
875
print_decimal_chars (struct ui_file *stream, const gdb_byte *valaddr,
876
                     unsigned len, enum bfd_endian byte_order)
877
{
878
#define TEN             10
879
#define CARRY_OUT(  x ) ((x) / TEN)     /* extend char to int */
880
#define CARRY_LEFT( x ) ((x) % TEN)
881
#define SHIFT( x )      ((x) << 4)
882
#define LOW_NIBBLE(  x ) ( (x) & 0x00F)
883
#define HIGH_NIBBLE( x ) (((x) & 0x0F0) >> 4)
884
 
885
  const gdb_byte *p;
886
  unsigned char *digits;
887
  int carry;
888
  int decimal_len;
889
  int i, j, decimal_digits;
890
  int dummy;
891
  int flip;
892
 
893
  /* Base-ten number is less than twice as many digits
894
   * as the base 16 number, which is 2 digits per byte.
895
   */
896
  decimal_len = len * 2 * 2;
897
  digits = xmalloc (decimal_len);
898
 
899
  for (i = 0; i < decimal_len; i++)
900
    {
901
      digits[i] = 0;
902
    }
903
 
904
  /* Ok, we have an unknown number of bytes of data to be printed in
905
   * decimal.
906
   *
907
   * Given a hex number (in nibbles) as XYZ, we start by taking X and
908
   * decemalizing it as "x1 x2" in two decimal nibbles.  Then we multiply
909
   * the nibbles by 16, add Y and re-decimalize.  Repeat with Z.
910
   *
911
   * The trick is that "digits" holds a base-10 number, but sometimes
912
   * the individual digits are > 10.
913
   *
914
   * Outer loop is per nibble (hex digit) of input, from MSD end to
915
   * LSD end.
916
   */
917
  decimal_digits = 0;            /* Number of decimal digits so far */
918
  p = (byte_order == BFD_ENDIAN_BIG) ? valaddr : valaddr + len - 1;
919
  flip = 0;
920
  while ((byte_order == BFD_ENDIAN_BIG) ? (p < valaddr + len) : (p >= valaddr))
921
    {
922
      /*
923
       * Multiply current base-ten number by 16 in place.
924
       * Each digit was between 0 and 9, now is between
925
       * 0 and 144.
926
       */
927
      for (j = 0; j < decimal_digits; j++)
928
        {
929
          digits[j] = SHIFT (digits[j]);
930
        }
931
 
932
      /* Take the next nibble off the input and add it to what
933
       * we've got in the LSB position.  Bottom 'digit' is now
934
       * between 0 and 159.
935
       *
936
       * "flip" is used to run this loop twice for each byte.
937
       */
938
      if (flip == 0)
939
        {
940
          /* Take top nibble.
941
           */
942
          digits[0] += HIGH_NIBBLE (*p);
943
          flip = 1;
944
        }
945
      else
946
        {
947
          /* Take low nibble and bump our pointer "p".
948
           */
949
          digits[0] += LOW_NIBBLE (*p);
950
          if (byte_order == BFD_ENDIAN_BIG)
951
            p++;
952
          else
953
            p--;
954
          flip = 0;
955
        }
956
 
957
      /* Re-decimalize.  We have to do this often enough
958
       * that we don't overflow, but once per nibble is
959
       * overkill.  Easier this way, though.  Note that the
960
       * carry is often larger than 10 (e.g. max initial
961
       * carry out of lowest nibble is 15, could bubble all
962
       * the way up greater than 10).  So we have to do
963
       * the carrying beyond the last current digit.
964
       */
965
      carry = 0;
966
      for (j = 0; j < decimal_len - 1; j++)
967
        {
968
          digits[j] += carry;
969
 
970
          /* "/" won't handle an unsigned char with
971
           * a value that if signed would be negative.
972
           * So extend to longword int via "dummy".
973
           */
974
          dummy = digits[j];
975
          carry = CARRY_OUT (dummy);
976
          digits[j] = CARRY_LEFT (dummy);
977
 
978
          if (j >= decimal_digits && carry == 0)
979
            {
980
              /*
981
               * All higher digits are 0 and we
982
               * no longer have a carry.
983
               *
984
               * Note: "j" is 0-based, "decimal_digits" is
985
               *       1-based.
986
               */
987
              decimal_digits = j + 1;
988
              break;
989
            }
990
        }
991
    }
992
 
993
  /* Ok, now "digits" is the decimal representation, with
994
   * the "decimal_digits" actual digits.  Print!
995
   */
996
  for (i = decimal_digits - 1; i >= 0; i--)
997
    {
998
      fprintf_filtered (stream, "%1d", digits[i]);
999
    }
1000
  xfree (digits);
1001
}
1002
 
1003
/* VALADDR points to an integer of LEN bytes.  Print it in hex on stream.  */
1004
 
1005
void
1006
print_hex_chars (struct ui_file *stream, const gdb_byte *valaddr,
1007
                 unsigned len, enum bfd_endian byte_order)
1008
{
1009
  const gdb_byte *p;
1010
 
1011
  /* FIXME: We should be not printing leading zeroes in most cases.  */
1012
 
1013
  fputs_filtered ("0x", stream);
1014
  if (byte_order == BFD_ENDIAN_BIG)
1015
    {
1016
      for (p = valaddr;
1017
           p < valaddr + len;
1018
           p++)
1019
        {
1020
          fprintf_filtered (stream, "%02x", *p);
1021
        }
1022
    }
1023
  else
1024
    {
1025
      for (p = valaddr + len - 1;
1026
           p >= valaddr;
1027
           p--)
1028
        {
1029
          fprintf_filtered (stream, "%02x", *p);
1030
        }
1031
    }
1032
}
1033
 
1034
/* VALADDR points to a char integer of LEN bytes.  Print it out in appropriate language form on stream.
1035
   Omit any leading zero chars.  */
1036
 
1037
void
1038
print_char_chars (struct ui_file *stream, struct type *type,
1039
                  const gdb_byte *valaddr,
1040
                  unsigned len, enum bfd_endian byte_order)
1041
{
1042
  const gdb_byte *p;
1043
 
1044
  if (byte_order == BFD_ENDIAN_BIG)
1045
    {
1046
      p = valaddr;
1047
      while (p < valaddr + len - 1 && *p == 0)
1048
        ++p;
1049
 
1050
      while (p < valaddr + len)
1051
        {
1052
          LA_EMIT_CHAR (*p, type, stream, '\'');
1053
          ++p;
1054
        }
1055
    }
1056
  else
1057
    {
1058
      p = valaddr + len - 1;
1059
      while (p > valaddr && *p == 0)
1060
        --p;
1061
 
1062
      while (p >= valaddr)
1063
        {
1064
          LA_EMIT_CHAR (*p, type, stream, '\'');
1065
          --p;
1066
        }
1067
    }
1068
}
1069
 
1070
/* Assuming TYPE is a simple, non-empty array type, compute its upper
1071
   and lower bound.  Save the low bound into LOW_BOUND if not NULL.
1072
   Save the high bound into HIGH_BOUND if not NULL.
1073
 
1074
   Return 1 if the operation was successful. Return zero otherwise,
1075
   in which case the values of LOW_BOUND and HIGH_BOUNDS are unmodified.
1076
 
1077
   We now simply use get_discrete_bounds call to get the values
1078
   of the low and high bounds.
1079
   get_discrete_bounds can return three values:
1080
   1, meaning that index is a range,
1081
   0, meaning that index is a discrete type,
1082
   or -1 for failure.  */
1083
 
1084
int
1085
get_array_bounds (struct type *type, LONGEST *low_bound, LONGEST *high_bound)
1086
{
1087
  struct type *index = TYPE_INDEX_TYPE (type);
1088
  LONGEST low = 0;
1089
  LONGEST high = 0;
1090
  int res;
1091
 
1092
  if (index == NULL)
1093
    return 0;
1094
 
1095
  res = get_discrete_bounds (index, &low, &high);
1096
  if (res == -1)
1097
    return 0;
1098
 
1099
  if (low_bound)
1100
    *low_bound = low;
1101
 
1102
  if (high_bound)
1103
    *high_bound = high;
1104
 
1105
  return 1;
1106
}
1107
 
1108
/* Print on STREAM using the given OPTIONS the index for the element
1109
   at INDEX of an array whose index type is INDEX_TYPE.  */
1110
 
1111
void
1112
maybe_print_array_index (struct type *index_type, LONGEST index,
1113
                         struct ui_file *stream,
1114
                         const struct value_print_options *options)
1115
{
1116
  struct value *index_value;
1117
 
1118
  if (!options->print_array_indexes)
1119
    return;
1120
 
1121
  index_value = value_from_longest (index_type, index);
1122
 
1123
  LA_PRINT_ARRAY_INDEX (index_value, stream, options);
1124
}
1125
 
1126
/*  Called by various <lang>_val_print routines to print elements of an
1127
   array in the form "<elem1>, <elem2>, <elem3>, ...".
1128
 
1129
   (FIXME?)  Assumes array element separator is a comma, which is correct
1130
   for all languages currently handled.
1131
   (FIXME?)  Some languages have a notation for repeated array elements,
1132
   perhaps we should try to use that notation when appropriate.
1133
 */
1134
 
1135
void
1136
val_print_array_elements (struct type *type, const gdb_byte *valaddr,
1137
                          CORE_ADDR address, struct ui_file *stream,
1138
                          int recurse,
1139
                          const struct value *val,
1140
                          const struct value_print_options *options,
1141
                          unsigned int i)
1142
{
1143
  unsigned int things_printed = 0;
1144
  unsigned len;
1145
  struct type *elttype, *index_type;
1146
  unsigned eltlen;
1147
  /* Position of the array element we are examining to see
1148
     whether it is repeated.  */
1149
  unsigned int rep1;
1150
  /* Number of repetitions we have detected so far.  */
1151
  unsigned int reps;
1152
  LONGEST low_bound_index = 0;
1153
 
1154
  elttype = TYPE_TARGET_TYPE (type);
1155
  eltlen = TYPE_LENGTH (check_typedef (elttype));
1156
  index_type = TYPE_INDEX_TYPE (type);
1157
 
1158
  /* Compute the number of elements in the array.  On most arrays,
1159
     the size of its elements is not zero, and so the number of elements
1160
     is simply the size of the array divided by the size of the elements.
1161
     But for arrays of elements whose size is zero, we need to look at
1162
     the bounds.  */
1163
  if (eltlen != 0)
1164
    len = TYPE_LENGTH (type) / eltlen;
1165
  else
1166
    {
1167
      LONGEST low, hi;
1168
 
1169
      if (get_array_bounds (type, &low, &hi))
1170
        len = hi - low + 1;
1171
      else
1172
        {
1173
          warning (_("unable to get bounds of array, assuming null array"));
1174
          len = 0;
1175
        }
1176
    }
1177
 
1178
  /* Get the array low bound.  This only makes sense if the array
1179
     has one or more element in it.  */
1180
  if (len > 0 && !get_array_bounds (type, &low_bound_index, NULL))
1181
    {
1182
      warning (_("unable to get low bound of array, using zero as default"));
1183
      low_bound_index = 0;
1184
    }
1185
 
1186
  annotate_array_section_begin (i, elttype);
1187
 
1188
  for (; i < len && things_printed < options->print_max; i++)
1189
    {
1190
      if (i != 0)
1191
        {
1192
          if (options->prettyprint_arrays)
1193
            {
1194
              fprintf_filtered (stream, ",\n");
1195
              print_spaces_filtered (2 + 2 * recurse, stream);
1196
            }
1197
          else
1198
            {
1199
              fprintf_filtered (stream, ", ");
1200
            }
1201
        }
1202
      wrap_here (n_spaces (2 + 2 * recurse));
1203
      maybe_print_array_index (index_type, i + low_bound_index,
1204
                               stream, options);
1205
 
1206
      rep1 = i + 1;
1207
      reps = 1;
1208
      while ((rep1 < len) &&
1209
             !memcmp (valaddr + i * eltlen, valaddr + rep1 * eltlen, eltlen))
1210
        {
1211
          ++reps;
1212
          ++rep1;
1213
        }
1214
 
1215
      if (reps > options->repeat_count_threshold)
1216
        {
1217
          val_print (elttype, valaddr + i * eltlen, 0, address + i * eltlen,
1218
                     stream, recurse + 1, val, options, current_language);
1219
          annotate_elt_rep (reps);
1220
          fprintf_filtered (stream, " <repeats %u times>", reps);
1221
          annotate_elt_rep_end ();
1222
 
1223
          i = rep1 - 1;
1224
          things_printed += options->repeat_count_threshold;
1225
        }
1226
      else
1227
        {
1228
          val_print (elttype, valaddr + i * eltlen, 0, address + i * eltlen,
1229
                     stream, recurse + 1, val, options, current_language);
1230
          annotate_elt ();
1231
          things_printed++;
1232
        }
1233
    }
1234
  annotate_array_section_end ();
1235
  if (i < len)
1236
    {
1237
      fprintf_filtered (stream, "...");
1238
    }
1239
}
1240
 
1241
/* Read LEN bytes of target memory at address MEMADDR, placing the
1242
   results in GDB's memory at MYADDR.  Returns a count of the bytes
1243
   actually read, and optionally an errno value in the location
1244
   pointed to by ERRNOPTR if ERRNOPTR is non-null. */
1245
 
1246
/* FIXME: cagney/1999-10-14: Only used by val_print_string.  Can this
1247
   function be eliminated.  */
1248
 
1249
static int
1250
partial_memory_read (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int *errnoptr)
1251
{
1252
  int nread;                    /* Number of bytes actually read. */
1253
  int errcode;                  /* Error from last read. */
1254
 
1255
  /* First try a complete read. */
1256
  errcode = target_read_memory (memaddr, myaddr, len);
1257
  if (errcode == 0)
1258
    {
1259
      /* Got it all. */
1260
      nread = len;
1261
    }
1262
  else
1263
    {
1264
      /* Loop, reading one byte at a time until we get as much as we can. */
1265
      for (errcode = 0, nread = 0; len > 0 && errcode == 0; nread++, len--)
1266
        {
1267
          errcode = target_read_memory (memaddr++, myaddr++, 1);
1268
        }
1269
      /* If an error, the last read was unsuccessful, so adjust count. */
1270
      if (errcode != 0)
1271
        {
1272
          nread--;
1273
        }
1274
    }
1275
  if (errnoptr != NULL)
1276
    {
1277
      *errnoptr = errcode;
1278
    }
1279
  return (nread);
1280
}
1281
 
1282
/* Read a string from the inferior, at ADDR, with LEN characters of WIDTH bytes
1283
   each.  Fetch at most FETCHLIMIT characters.  BUFFER will be set to a newly
1284
   allocated buffer containing the string, which the caller is responsible to
1285
   free, and BYTES_READ will be set to the number of bytes read.  Returns 0 on
1286
   success, or errno on failure.
1287
 
1288
   If LEN > 0, reads exactly LEN characters (including eventual NULs in
1289
   the middle or end of the string).  If LEN is -1, stops at the first
1290
   null character (not necessarily the first null byte) up to a maximum
1291
   of FETCHLIMIT characters.  Set FETCHLIMIT to UINT_MAX to read as many
1292
   characters as possible from the string.
1293
 
1294
   Unless an exception is thrown, BUFFER will always be allocated, even on
1295
   failure.  In this case, some characters might have been read before the
1296
   failure happened.  Check BYTES_READ to recognize this situation.
1297
 
1298
   Note: There was a FIXME asking to make this code use target_read_string,
1299
   but this function is more general (can read past null characters, up to
1300
   given LEN). Besides, it is used much more often than target_read_string
1301
   so it is more tested.  Perhaps callers of target_read_string should use
1302
   this function instead?  */
1303
 
1304
int
1305
read_string (CORE_ADDR addr, int len, int width, unsigned int fetchlimit,
1306
             enum bfd_endian byte_order, gdb_byte **buffer, int *bytes_read)
1307
{
1308
  int found_nul;                /* Non-zero if we found the nul char.  */
1309
  int errcode;                  /* Errno returned from bad reads.  */
1310
  unsigned int nfetch;          /* Chars to fetch / chars fetched.  */
1311
  unsigned int chunksize;       /* Size of each fetch, in chars.  */
1312
  gdb_byte *bufptr;             /* Pointer to next available byte in buffer.  */
1313
  gdb_byte *limit;              /* First location past end of fetch buffer.  */
1314
  struct cleanup *old_chain = NULL;     /* Top of the old cleanup chain.  */
1315
 
1316
  /* Decide how large of chunks to try to read in one operation.  This
1317
     is also pretty simple.  If LEN >= zero, then we want fetchlimit chars,
1318
     so we might as well read them all in one operation.  If LEN is -1, we
1319
     are looking for a NUL terminator to end the fetching, so we might as
1320
     well read in blocks that are large enough to be efficient, but not so
1321
     large as to be slow if fetchlimit happens to be large.  So we choose the
1322
     minimum of 8 and fetchlimit.  We used to use 200 instead of 8 but
1323
     200 is way too big for remote debugging over a serial line.  */
1324
 
1325
  chunksize = (len == -1 ? min (8, fetchlimit) : fetchlimit);
1326
 
1327
  /* Loop until we either have all the characters, or we encounter
1328
     some error, such as bumping into the end of the address space.  */
1329
 
1330
  found_nul = 0;
1331
  *buffer = NULL;
1332
 
1333
  old_chain = make_cleanup (free_current_contents, buffer);
1334
 
1335
  if (len > 0)
1336
    {
1337
      *buffer = (gdb_byte *) xmalloc (len * width);
1338
      bufptr = *buffer;
1339
 
1340
      nfetch = partial_memory_read (addr, bufptr, len * width, &errcode)
1341
        / width;
1342
      addr += nfetch * width;
1343
      bufptr += nfetch * width;
1344
    }
1345
  else if (len == -1)
1346
    {
1347
      unsigned long bufsize = 0;
1348
 
1349
      do
1350
        {
1351
          QUIT;
1352
          nfetch = min (chunksize, fetchlimit - bufsize);
1353
 
1354
          if (*buffer == NULL)
1355
            *buffer = (gdb_byte *) xmalloc (nfetch * width);
1356
          else
1357
            *buffer = (gdb_byte *) xrealloc (*buffer,
1358
                                             (nfetch + bufsize) * width);
1359
 
1360
          bufptr = *buffer + bufsize * width;
1361
          bufsize += nfetch;
1362
 
1363
          /* Read as much as we can.  */
1364
          nfetch = partial_memory_read (addr, bufptr, nfetch * width, &errcode)
1365
                    / width;
1366
 
1367
          /* Scan this chunk for the null character that terminates the string
1368
             to print.  If found, we don't need to fetch any more.  Note
1369
             that bufptr is explicitly left pointing at the next character
1370
             after the null character, or at the next character after the end
1371
             of the buffer.  */
1372
 
1373
          limit = bufptr + nfetch * width;
1374
          while (bufptr < limit)
1375
            {
1376
              unsigned long c;
1377
 
1378
              c = extract_unsigned_integer (bufptr, width, byte_order);
1379
              addr += width;
1380
              bufptr += width;
1381
              if (c == 0)
1382
                {
1383
                  /* We don't care about any error which happened after
1384
                     the NUL terminator.  */
1385
                  errcode = 0;
1386
                  found_nul = 1;
1387
                  break;
1388
                }
1389
            }
1390
        }
1391
      while (errcode == 0        /* no error */
1392
             && bufptr - *buffer < fetchlimit * width   /* no overrun */
1393
             && !found_nul);    /* haven't found NUL yet */
1394
    }
1395
  else
1396
    {                           /* Length of string is really 0!  */
1397
      /* We always allocate *buffer.  */
1398
      *buffer = bufptr = xmalloc (1);
1399
      errcode = 0;
1400
    }
1401
 
1402
  /* bufptr and addr now point immediately beyond the last byte which we
1403
     consider part of the string (including a '\0' which ends the string).  */
1404
  *bytes_read = bufptr - *buffer;
1405
 
1406
  QUIT;
1407
 
1408
  discard_cleanups (old_chain);
1409
 
1410
  return errcode;
1411
}
1412
 
1413
/* Print a string from the inferior, starting at ADDR and printing up to LEN
1414
   characters, of WIDTH bytes a piece, to STREAM.  If LEN is -1, printing
1415
   stops at the first null byte, otherwise printing proceeds (including null
1416
   bytes) until either print_max or LEN characters have been printed,
1417
   whichever is smaller.  */
1418
 
1419
int
1420
val_print_string (struct type *elttype, CORE_ADDR addr, int len,
1421
                  struct ui_file *stream,
1422
                  const struct value_print_options *options)
1423
{
1424
  int force_ellipsis = 0;        /* Force ellipsis to be printed if nonzero.  */
1425
  int errcode;                  /* Errno returned from bad reads.  */
1426
  int found_nul;                /* Non-zero if we found the nul char */
1427
  unsigned int fetchlimit;      /* Maximum number of chars to print.  */
1428
  int bytes_read;
1429
  gdb_byte *buffer = NULL;      /* Dynamically growable fetch buffer.  */
1430
  struct cleanup *old_chain = NULL;     /* Top of the old cleanup chain.  */
1431
  struct gdbarch *gdbarch = get_type_arch (elttype);
1432
  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1433
  int width = TYPE_LENGTH (elttype);
1434
 
1435
  /* First we need to figure out the limit on the number of characters we are
1436
     going to attempt to fetch and print.  This is actually pretty simple.  If
1437
     LEN >= zero, then the limit is the minimum of LEN and print_max.  If
1438
     LEN is -1, then the limit is print_max.  This is true regardless of
1439
     whether print_max is zero, UINT_MAX (unlimited), or something in between,
1440
     because finding the null byte (or available memory) is what actually
1441
     limits the fetch.  */
1442
 
1443
  fetchlimit = (len == -1 ? options->print_max : min (len, options->print_max));
1444
 
1445
  errcode = read_string (addr, len, width, fetchlimit, byte_order,
1446
                         &buffer, &bytes_read);
1447
  old_chain = make_cleanup (xfree, buffer);
1448
 
1449
  addr += bytes_read;
1450
 
1451
  /* We now have either successfully filled the buffer to fetchlimit, or
1452
     terminated early due to an error or finding a null char when LEN is -1.  */
1453
 
1454
  /* Determine found_nul by looking at the last character read.  */
1455
  found_nul = extract_unsigned_integer (buffer + bytes_read - width, width,
1456
                                        byte_order) == 0;
1457
  if (len == -1 && !found_nul)
1458
    {
1459
      gdb_byte *peekbuf;
1460
 
1461
      /* We didn't find a NUL terminator we were looking for.  Attempt
1462
         to peek at the next character.  If not successful, or it is not
1463
         a null byte, then force ellipsis to be printed.  */
1464
 
1465
      peekbuf = (gdb_byte *) alloca (width);
1466
 
1467
      if (target_read_memory (addr, peekbuf, width) == 0
1468
          && extract_unsigned_integer (peekbuf, width, byte_order) != 0)
1469
        force_ellipsis = 1;
1470
    }
1471
  else if ((len >= 0 && errcode != 0) || (len > bytes_read / width))
1472
    {
1473
      /* Getting an error when we have a requested length, or fetching less
1474
         than the number of characters actually requested, always make us
1475
         print ellipsis.  */
1476
      force_ellipsis = 1;
1477
    }
1478
 
1479
  /* If we get an error before fetching anything, don't print a string.
1480
     But if we fetch something and then get an error, print the string
1481
     and then the error message.  */
1482
  if (errcode == 0 || bytes_read > 0)
1483
    {
1484
      if (options->addressprint)
1485
        {
1486
          fputs_filtered (" ", stream);
1487
        }
1488
      LA_PRINT_STRING (stream, elttype, buffer, bytes_read / width,
1489
                       NULL, force_ellipsis, options);
1490
    }
1491
 
1492
  if (errcode != 0)
1493
    {
1494
      if (errcode == EIO)
1495
        {
1496
          fprintf_filtered (stream, " <Address ");
1497
          fputs_filtered (paddress (gdbarch, addr), stream);
1498
          fprintf_filtered (stream, " out of bounds>");
1499
        }
1500
      else
1501
        {
1502
          fprintf_filtered (stream, " <Error reading address ");
1503
          fputs_filtered (paddress (gdbarch, addr), stream);
1504
          fprintf_filtered (stream, ": %s>", safe_strerror (errcode));
1505
        }
1506
    }
1507
 
1508
  gdb_flush (stream);
1509
  do_cleanups (old_chain);
1510
 
1511
  return (bytes_read / width);
1512
}
1513
 
1514
 
1515
/* The 'set input-radix' command writes to this auxiliary variable.
1516
   If the requested radix is valid, INPUT_RADIX is updated; otherwise,
1517
   it is left unchanged.  */
1518
 
1519
static unsigned input_radix_1 = 10;
1520
 
1521
/* Validate an input or output radix setting, and make sure the user
1522
   knows what they really did here.  Radix setting is confusing, e.g.
1523
   setting the input radix to "10" never changes it!  */
1524
 
1525
static void
1526
set_input_radix (char *args, int from_tty, struct cmd_list_element *c)
1527
{
1528
  set_input_radix_1 (from_tty, input_radix_1);
1529
}
1530
 
1531
static void
1532
set_input_radix_1 (int from_tty, unsigned radix)
1533
{
1534
  /* We don't currently disallow any input radix except 0 or 1, which don't
1535
     make any mathematical sense.  In theory, we can deal with any input
1536
     radix greater than 1, even if we don't have unique digits for every
1537
     value from 0 to radix-1, but in practice we lose on large radix values.
1538
     We should either fix the lossage or restrict the radix range more.
1539
     (FIXME). */
1540
 
1541
  if (radix < 2)
1542
    {
1543
      input_radix_1 = input_radix;
1544
      error (_("Nonsense input radix ``decimal %u''; input radix unchanged."),
1545
             radix);
1546
    }
1547
  input_radix_1 = input_radix = radix;
1548
  if (from_tty)
1549
    {
1550
      printf_filtered (_("Input radix now set to decimal %u, hex %x, octal %o.\n"),
1551
                       radix, radix, radix);
1552
    }
1553
}
1554
 
1555
/* The 'set output-radix' command writes to this auxiliary variable.
1556
   If the requested radix is valid, OUTPUT_RADIX is updated,
1557
   otherwise, it is left unchanged.  */
1558
 
1559
static unsigned output_radix_1 = 10;
1560
 
1561
static void
1562
set_output_radix (char *args, int from_tty, struct cmd_list_element *c)
1563
{
1564
  set_output_radix_1 (from_tty, output_radix_1);
1565
}
1566
 
1567
static void
1568
set_output_radix_1 (int from_tty, unsigned radix)
1569
{
1570
  /* Validate the radix and disallow ones that we aren't prepared to
1571
     handle correctly, leaving the radix unchanged. */
1572
  switch (radix)
1573
    {
1574
    case 16:
1575
      user_print_options.output_format = 'x';   /* hex */
1576
      break;
1577
    case 10:
1578
      user_print_options.output_format = 0;      /* decimal */
1579
      break;
1580
    case 8:
1581
      user_print_options.output_format = 'o';   /* octal */
1582
      break;
1583
    default:
1584
      output_radix_1 = output_radix;
1585
      error (_("Unsupported output radix ``decimal %u''; output radix unchanged."),
1586
             radix);
1587
    }
1588
  output_radix_1 = output_radix = radix;
1589
  if (from_tty)
1590
    {
1591
      printf_filtered (_("Output radix now set to decimal %u, hex %x, octal %o.\n"),
1592
                       radix, radix, radix);
1593
    }
1594
}
1595
 
1596
/* Set both the input and output radix at once.  Try to set the output radix
1597
   first, since it has the most restrictive range.  An radix that is valid as
1598
   an output radix is also valid as an input radix.
1599
 
1600
   It may be useful to have an unusual input radix.  If the user wishes to
1601
   set an input radix that is not valid as an output radix, he needs to use
1602
   the 'set input-radix' command. */
1603
 
1604
static void
1605
set_radix (char *arg, int from_tty)
1606
{
1607
  unsigned radix;
1608
 
1609
  radix = (arg == NULL) ? 10 : parse_and_eval_long (arg);
1610
  set_output_radix_1 (0, radix);
1611
  set_input_radix_1 (0, radix);
1612
  if (from_tty)
1613
    {
1614
      printf_filtered (_("Input and output radices now set to decimal %u, hex %x, octal %o.\n"),
1615
                       radix, radix, radix);
1616
    }
1617
}
1618
 
1619
/* Show both the input and output radices. */
1620
 
1621
static void
1622
show_radix (char *arg, int from_tty)
1623
{
1624
  if (from_tty)
1625
    {
1626
      if (input_radix == output_radix)
1627
        {
1628
          printf_filtered (_("Input and output radices set to decimal %u, hex %x, octal %o.\n"),
1629
                           input_radix, input_radix, input_radix);
1630
        }
1631
      else
1632
        {
1633
          printf_filtered (_("Input radix set to decimal %u, hex %x, octal %o.\n"),
1634
                           input_radix, input_radix, input_radix);
1635
          printf_filtered (_("Output radix set to decimal %u, hex %x, octal %o.\n"),
1636
                           output_radix, output_radix, output_radix);
1637
        }
1638
    }
1639
}
1640
 
1641
 
1642
static void
1643
set_print (char *arg, int from_tty)
1644
{
1645
  printf_unfiltered (
1646
     "\"set print\" must be followed by the name of a print subcommand.\n");
1647
  help_list (setprintlist, "set print ", -1, gdb_stdout);
1648
}
1649
 
1650
static void
1651
show_print (char *args, int from_tty)
1652
{
1653
  cmd_show_list (showprintlist, from_tty, "");
1654
}
1655
 
1656
void
1657
_initialize_valprint (void)
1658
{
1659
  add_prefix_cmd ("print", no_class, set_print,
1660
                  _("Generic command for setting how things print."),
1661
                  &setprintlist, "set print ", 0, &setlist);
1662
  add_alias_cmd ("p", "print", no_class, 1, &setlist);
1663
  /* prefer set print to set prompt */
1664
  add_alias_cmd ("pr", "print", no_class, 1, &setlist);
1665
 
1666
  add_prefix_cmd ("print", no_class, show_print,
1667
                  _("Generic command for showing print settings."),
1668
                  &showprintlist, "show print ", 0, &showlist);
1669
  add_alias_cmd ("p", "print", no_class, 1, &showlist);
1670
  add_alias_cmd ("pr", "print", no_class, 1, &showlist);
1671
 
1672
  add_setshow_uinteger_cmd ("elements", no_class,
1673
                            &user_print_options.print_max, _("\
1674
Set limit on string chars or array elements to print."), _("\
1675
Show limit on string chars or array elements to print."), _("\
1676
\"set print elements 0\" causes there to be no limit."),
1677
                            NULL,
1678
                            show_print_max,
1679
                            &setprintlist, &showprintlist);
1680
 
1681
  add_setshow_boolean_cmd ("null-stop", no_class,
1682
                           &user_print_options.stop_print_at_null, _("\
1683
Set printing of char arrays to stop at first null char."), _("\
1684
Show printing of char arrays to stop at first null char."), NULL,
1685
                           NULL,
1686
                           show_stop_print_at_null,
1687
                           &setprintlist, &showprintlist);
1688
 
1689
  add_setshow_uinteger_cmd ("repeats", no_class,
1690
                            &user_print_options.repeat_count_threshold, _("\
1691
Set threshold for repeated print elements."), _("\
1692
Show threshold for repeated print elements."), _("\
1693
\"set print repeats 0\" causes all elements to be individually printed."),
1694
                            NULL,
1695
                            show_repeat_count_threshold,
1696
                            &setprintlist, &showprintlist);
1697
 
1698
  add_setshow_boolean_cmd ("pretty", class_support,
1699
                           &user_print_options.prettyprint_structs, _("\
1700
Set prettyprinting of structures."), _("\
1701
Show prettyprinting of structures."), NULL,
1702
                           NULL,
1703
                           show_prettyprint_structs,
1704
                           &setprintlist, &showprintlist);
1705
 
1706
  add_setshow_boolean_cmd ("union", class_support,
1707
                           &user_print_options.unionprint, _("\
1708
Set printing of unions interior to structures."), _("\
1709
Show printing of unions interior to structures."), NULL,
1710
                           NULL,
1711
                           show_unionprint,
1712
                           &setprintlist, &showprintlist);
1713
 
1714
  add_setshow_boolean_cmd ("array", class_support,
1715
                           &user_print_options.prettyprint_arrays, _("\
1716
Set prettyprinting of arrays."), _("\
1717
Show prettyprinting of arrays."), NULL,
1718
                           NULL,
1719
                           show_prettyprint_arrays,
1720
                           &setprintlist, &showprintlist);
1721
 
1722
  add_setshow_boolean_cmd ("address", class_support,
1723
                           &user_print_options.addressprint, _("\
1724
Set printing of addresses."), _("\
1725
Show printing of addresses."), NULL,
1726
                           NULL,
1727
                           show_addressprint,
1728
                           &setprintlist, &showprintlist);
1729
 
1730
  add_setshow_zuinteger_cmd ("input-radix", class_support, &input_radix_1,
1731
                             _("\
1732
Set default input radix for entering numbers."), _("\
1733
Show default input radix for entering numbers."), NULL,
1734
                             set_input_radix,
1735
                             show_input_radix,
1736
                             &setlist, &showlist);
1737
 
1738
  add_setshow_zuinteger_cmd ("output-radix", class_support, &output_radix_1,
1739
                             _("\
1740
Set default output radix for printing of values."), _("\
1741
Show default output radix for printing of values."), NULL,
1742
                             set_output_radix,
1743
                             show_output_radix,
1744
                             &setlist, &showlist);
1745
 
1746
  /* The "set radix" and "show radix" commands are special in that
1747
     they are like normal set and show commands but allow two normally
1748
     independent variables to be either set or shown with a single
1749
     command.  So the usual deprecated_add_set_cmd() and [deleted]
1750
     add_show_from_set() commands aren't really appropriate. */
1751
  /* FIXME: i18n: With the new add_setshow_integer command, that is no
1752
     longer true - show can display anything.  */
1753
  add_cmd ("radix", class_support, set_radix, _("\
1754
Set default input and output number radices.\n\
1755
Use 'set input-radix' or 'set output-radix' to independently set each.\n\
1756
Without an argument, sets both radices back to the default value of 10."),
1757
           &setlist);
1758
  add_cmd ("radix", class_support, show_radix, _("\
1759
Show the default input and output number radices.\n\
1760
Use 'show input-radix' or 'show output-radix' to independently show each."),
1761
           &showlist);
1762
 
1763
  add_setshow_boolean_cmd ("array-indexes", class_support,
1764
                           &user_print_options.print_array_indexes, _("\
1765
Set printing of array indexes."), _("\
1766
Show printing of array indexes"), NULL, NULL, show_print_array_indexes,
1767
                           &setprintlist, &showprintlist);
1768
}

powered by: WebSVN 2.1.0

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