Simplify tui_show_disassem
[external/binutils.git] / gdb / cp-valprint.c
1 /* Support for printing C++ values for GDB, the GNU debugger.
2
3    Copyright (C) 1986-2019 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21 #include "gdb_obstack.h"
22 #include "symtab.h"
23 #include "gdbtypes.h"
24 #include "expression.h"
25 #include "value.h"
26 #include "command.h"
27 #include "gdbcmd.h"
28 #include "demangle.h"
29 #include "annotate.h"
30 #include "c-lang.h"
31 #include "target.h"
32 #include "cp-abi.h"
33 #include "valprint.h"
34 #include "cp-support.h"
35 #include "language.h"
36 #include "extension.h"
37 #include "typeprint.h"
38 #include "gdbsupport/byte-vector.h"
39 #include "gdbarch.h"
40
41 static struct obstack dont_print_vb_obstack;
42 static struct obstack dont_print_statmem_obstack;
43 static struct obstack dont_print_stat_array_obstack;
44
45 static void cp_print_static_field (struct type *, struct value *,
46                                    struct ui_file *, int,
47                                    const struct value_print_options *);
48
49 static void cp_print_value (struct type *, struct type *,
50                             LONGEST,
51                             CORE_ADDR, struct ui_file *,
52                             int, struct value *,
53                             const struct value_print_options *,
54                             struct type **);
55
56
57 /* GCC versions after 2.4.5 use this.  */
58 extern const char vtbl_ptr_name[] = "__vtbl_ptr_type";
59
60 /* Return truth value for assertion that TYPE is of the type
61    "pointer to virtual function".  */
62
63 int
64 cp_is_vtbl_ptr_type (struct type *type)
65 {
66   const char *type_name = TYPE_NAME (type);
67
68   return (type_name != NULL && !strcmp (type_name, vtbl_ptr_name));
69 }
70
71 /* Return truth value for the assertion that TYPE is of the type
72    "pointer to virtual function table".  */
73
74 int
75 cp_is_vtbl_member (struct type *type)
76 {
77   /* With older versions of g++, the vtbl field pointed to an array of
78      structures.  Nowadays it points directly to the structure.  */
79   if (TYPE_CODE (type) == TYPE_CODE_PTR)
80     {
81       type = TYPE_TARGET_TYPE (type);
82       if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
83         {
84           type = TYPE_TARGET_TYPE (type);
85           if (TYPE_CODE (type) == TYPE_CODE_STRUCT    /* if not using thunks */
86               || TYPE_CODE (type) == TYPE_CODE_PTR)   /* if using thunks */
87             {
88               /* Virtual functions tables are full of pointers
89                  to virtual functions.  */
90               return cp_is_vtbl_ptr_type (type);
91             }
92         }
93       else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)  /* if not using thunks */
94         {
95           return cp_is_vtbl_ptr_type (type);
96         }
97       else if (TYPE_CODE (type) == TYPE_CODE_PTR)     /* if using thunks */
98         {
99           /* The type name of the thunk pointer is NULL when using
100              dwarf2.  We could test for a pointer to a function, but
101              there is no type info for the virtual table either, so it
102              wont help.  */
103           return cp_is_vtbl_ptr_type (type);
104         }
105     }
106   return 0;
107 }
108
109 /* Mutually recursive subroutines of cp_print_value and c_val_print to
110    print out a structure's fields: cp_print_value_fields and
111    cp_print_value.
112
113    TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and OPTIONS have the same
114    meanings as in cp_print_value and c_val_print.
115
116    2nd argument REAL_TYPE is used to carry over the type of the
117    derived class across the recursion to base classes.
118
119    DONT_PRINT is an array of baseclass types that we should not print,
120    or zero if called from top level.  */
121
122 void
123 cp_print_value_fields (struct type *type, struct type *real_type,
124                        LONGEST offset,
125                        CORE_ADDR address, struct ui_file *stream,
126                        int recurse, struct value *val,
127                        const struct value_print_options *options,
128                        struct type **dont_print_vb,
129                        int dont_print_statmem)
130 {
131   int i, len, n_baseclasses;
132   int fields_seen = 0;
133   static int last_set_recurse = -1;
134
135   type = check_typedef (type);
136   
137   if (recurse == 0)
138     {
139       /* Any object can be left on obstacks only during an unexpected
140          error.  */
141
142       if (obstack_object_size (&dont_print_statmem_obstack) > 0)
143         {
144           obstack_free (&dont_print_statmem_obstack, NULL);
145           obstack_begin (&dont_print_statmem_obstack,
146                          32 * sizeof (CORE_ADDR));
147         }
148       if (obstack_object_size (&dont_print_stat_array_obstack) > 0)
149         {
150           obstack_free (&dont_print_stat_array_obstack, NULL);
151           obstack_begin (&dont_print_stat_array_obstack,
152                          32 * sizeof (struct type *));
153         }
154     }
155
156   fprintf_filtered (stream, "{");
157   len = TYPE_NFIELDS (type);
158   n_baseclasses = TYPE_N_BASECLASSES (type);
159
160   /* First, print out baseclasses such that we don't print
161      duplicates of virtual baseclasses.  */
162
163   if (n_baseclasses > 0)
164     cp_print_value (type, real_type,
165                     offset, address, stream,
166                     recurse + 1, val, options,
167                     dont_print_vb);
168
169   /* Second, print out data fields */
170
171   /* If there are no data fields, skip this part */
172   if (len == n_baseclasses || !len)
173     fprintf_filtered (stream, "<No data fields>");
174   else
175     {
176       size_t statmem_obstack_initial_size = 0;
177       size_t stat_array_obstack_initial_size = 0;
178       struct type *vptr_basetype = NULL;
179       int vptr_fieldno;
180
181       if (dont_print_statmem == 0)
182         {
183           statmem_obstack_initial_size =
184             obstack_object_size (&dont_print_statmem_obstack);
185
186           if (last_set_recurse != recurse)
187             {
188               stat_array_obstack_initial_size =
189                 obstack_object_size (&dont_print_stat_array_obstack);
190
191               last_set_recurse = recurse;
192             }
193         }
194
195       vptr_fieldno = get_vptr_fieldno (type, &vptr_basetype);
196       for (i = n_baseclasses; i < len; i++)
197         {
198           const gdb_byte *valaddr = value_contents_for_printing (val);
199
200           /* If requested, skip printing of static fields.  */
201           if (!options->static_field_print
202               && field_is_static (&TYPE_FIELD (type, i)))
203             continue;
204
205           if (fields_seen)
206             {
207               fputs_filtered (",", stream);
208               if (!options->prettyformat)
209                 fputs_filtered (" ", stream);
210             }
211           else if (n_baseclasses > 0)
212             {
213               if (options->prettyformat)
214                 {
215                   fprintf_filtered (stream, "\n");
216                   print_spaces_filtered (2 + 2 * recurse, stream);
217                   fputs_filtered ("members of ", stream);
218                   fputs_filtered (TYPE_NAME (type), stream);
219                   fputs_filtered (":", stream);
220                 }
221             }
222           fields_seen = 1;
223
224           if (options->prettyformat)
225             {
226               fprintf_filtered (stream, "\n");
227               print_spaces_filtered (2 + 2 * recurse, stream);
228             }
229           else
230             {
231               wrap_here (n_spaces (2 + 2 * recurse));
232             }
233
234           annotate_field_begin (TYPE_FIELD_TYPE (type, i));
235
236           if (field_is_static (&TYPE_FIELD (type, i)))
237             fputs_filtered ("static ", stream);
238           fprintf_symbol_filtered (stream,
239                                    TYPE_FIELD_NAME (type, i),
240                                    current_language->la_language,
241                                    DMGL_PARAMS | DMGL_ANSI);
242           annotate_field_name_end ();
243
244           /* We tweak various options in a few cases below.  */
245           value_print_options options_copy = *options;
246           value_print_options *opts = &options_copy;
247
248           /* Do not print leading '=' in case of anonymous
249              unions.  */
250           if (strcmp (TYPE_FIELD_NAME (type, i), ""))
251             fputs_filtered (" = ", stream);
252           else
253             {
254               /* If this is an anonymous field then we want to consider it
255                  as though it is at its parent's depth when it comes to the
256                  max print depth.  */
257               if (opts->max_depth != -1 && opts->max_depth < INT_MAX)
258                 ++opts->max_depth;
259             }
260           annotate_field_value ();
261
262           if (!field_is_static (&TYPE_FIELD (type, i))
263               && TYPE_FIELD_PACKED (type, i))
264             {
265               struct value *v;
266
267               /* Bitfields require special handling, especially due to
268                  byte order problems.  */
269               if (TYPE_FIELD_IGNORE (type, i))
270                 {
271                   fputs_filtered ("<optimized out or zero length>", stream);
272                 }
273               else if (value_bits_synthetic_pointer (val,
274                                                      TYPE_FIELD_BITPOS (type,
275                                                                         i),
276                                                      TYPE_FIELD_BITSIZE (type,
277                                                                          i)))
278                 {
279                   fputs_filtered (_("<synthetic pointer>"), stream);
280                 }
281               else
282                 {
283                   opts->deref_ref = 0;
284
285                   v = value_field_bitfield (type, i, valaddr, offset, val);
286
287                   common_val_print (v, stream, recurse + 1,
288                                     opts, current_language);
289                 }
290             }
291           else
292             {
293               if (TYPE_FIELD_IGNORE (type, i))
294                 {
295                   fputs_filtered ("<optimized out or zero length>",
296                                   stream);
297                 }
298               else if (field_is_static (&TYPE_FIELD (type, i)))
299                 {
300                   try
301                     {
302                       struct value *v = value_static_field (type, i);
303
304                       cp_print_static_field (TYPE_FIELD_TYPE (type, i),
305                                              v, stream, recurse + 1,
306                                              opts);
307                     }
308                   catch (const gdb_exception_error &ex)
309                     {
310                       fprintf_filtered (stream,
311                                         _("<error reading variable: %s>"),
312                                         ex.what ());
313                     }
314                 }
315               else if (i == vptr_fieldno && type == vptr_basetype)
316                 {
317                   int i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
318                   struct type *i_type = TYPE_FIELD_TYPE (type, i);
319
320                   if (valprint_check_validity (stream, i_type, i_offset, val))
321                     {
322                       CORE_ADDR addr;
323                       
324                       addr = extract_typed_address (valaddr + i_offset, i_type);
325                       print_function_pointer_address (opts,
326                                                       get_type_arch (type),
327                                                       addr, stream);
328                     }
329                 }
330               else
331                 {
332                   opts->deref_ref = 0;
333                   val_print (TYPE_FIELD_TYPE (type, i),
334                              offset + TYPE_FIELD_BITPOS (type, i) / 8,
335                              address,
336                              stream, recurse + 1, val, opts,
337                              current_language);
338                 }
339             }
340           annotate_field_end ();
341         }
342
343       if (dont_print_statmem == 0)
344         {
345           size_t obstack_final_size =
346            obstack_object_size (&dont_print_statmem_obstack);
347
348           if (obstack_final_size > statmem_obstack_initial_size)
349             {
350               /* In effect, a pop of the printed-statics stack.  */
351               size_t shrink_bytes
352                 = statmem_obstack_initial_size - obstack_final_size;
353               obstack_blank_fast (&dont_print_statmem_obstack, shrink_bytes);
354             }
355
356           if (last_set_recurse != recurse)
357             {
358               obstack_final_size =
359                 obstack_object_size (&dont_print_stat_array_obstack);
360               
361               if (obstack_final_size > stat_array_obstack_initial_size)
362                 {
363                   void *free_to_ptr =
364                     (char *) obstack_next_free (&dont_print_stat_array_obstack)
365                     - (obstack_final_size
366                        - stat_array_obstack_initial_size);
367
368                   obstack_free (&dont_print_stat_array_obstack,
369                                 free_to_ptr);
370                 }
371               last_set_recurse = -1;
372             }
373         }
374
375       if (options->prettyformat)
376         {
377           fprintf_filtered (stream, "\n");
378           print_spaces_filtered (2 * recurse, stream);
379         }
380     }                           /* if there are data fields */
381
382   fprintf_filtered (stream, "}");
383 }
384
385 /* Like cp_print_value_fields, but find the runtime type of the object
386    and pass it as the `real_type' argument to cp_print_value_fields.
387    This function is a hack to work around the fact that
388    common_val_print passes the embedded offset to val_print, but not
389    the enclosing type.  */
390
391 void
392 cp_print_value_fields_rtti (struct type *type,
393                             const gdb_byte *valaddr, LONGEST offset,
394                             CORE_ADDR address,
395                             struct ui_file *stream, int recurse,
396                             struct value *val,
397                             const struct value_print_options *options,
398                             struct type **dont_print_vb, 
399                             int dont_print_statmem)
400 {
401   struct type *real_type = NULL;
402
403   /* We require all bits to be valid in order to attempt a
404      conversion.  */
405   if (!value_bits_any_optimized_out (val,
406                                      TARGET_CHAR_BIT * offset,
407                                      TARGET_CHAR_BIT * TYPE_LENGTH (type)))
408     {
409       struct value *value;
410       int full, using_enc;
411       LONGEST top;
412
413       /* Ugh, we have to convert back to a value here.  */
414       value = value_from_contents_and_address (type, valaddr + offset,
415                                                address + offset);
416       type = value_type (value);
417       /* We don't actually care about most of the result here -- just
418          the type.  We already have the correct offset, due to how
419          val_print was initially called.  */
420       real_type = value_rtti_type (value, &full, &top, &using_enc);
421     }
422
423   if (!real_type)
424     real_type = type;
425
426   cp_print_value_fields (type, real_type, offset,
427                          address, stream, recurse, val, options,
428                          dont_print_vb, dont_print_statmem);
429 }
430
431 /* Special val_print routine to avoid printing multiple copies of
432    virtual baseclasses.  */
433
434 static void
435 cp_print_value (struct type *type, struct type *real_type,
436                 LONGEST offset,
437                 CORE_ADDR address, struct ui_file *stream,
438                 int recurse, struct value *val,
439                 const struct value_print_options *options,
440                 struct type **dont_print_vb)
441 {
442   struct type **last_dont_print
443     = (struct type **) obstack_next_free (&dont_print_vb_obstack);
444   struct obstack tmp_obstack = dont_print_vb_obstack;
445   int i, n_baseclasses = TYPE_N_BASECLASSES (type);
446   LONGEST thisoffset;
447   struct type *thistype;
448   const gdb_byte *valaddr = value_contents_for_printing (val);
449
450   if (dont_print_vb == 0)
451     {
452       /* If we're at top level, carve out a completely fresh chunk of
453          the obstack and use that until this particular invocation
454          returns.  */
455       /* Bump up the high-water mark.  Now alpha is omega.  */
456       obstack_finish (&dont_print_vb_obstack);
457     }
458
459   for (i = 0; i < n_baseclasses; i++)
460     {
461       LONGEST boffset = 0;
462       int skip = 0;
463       struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
464       const char *basename = TYPE_NAME (baseclass);
465       struct value *base_val = NULL;
466
467       if (BASETYPE_VIA_VIRTUAL (type, i))
468         {
469           struct type **first_dont_print
470             = (struct type **) obstack_base (&dont_print_vb_obstack);
471
472           int j = (struct type **)
473             obstack_next_free (&dont_print_vb_obstack) - first_dont_print;
474
475           while (--j >= 0)
476             if (baseclass == first_dont_print[j])
477               goto flush_it;
478
479           obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
480         }
481
482       thisoffset = offset;
483       thistype = real_type;
484
485       try
486         {
487           boffset = baseclass_offset (type, i, valaddr, offset, address, val);
488         }
489       catch (const gdb_exception_error &ex)
490         {
491           if (ex.error == NOT_AVAILABLE_ERROR)
492             skip = -1;
493           else
494             skip = 1;
495         }
496
497       if (skip == 0)
498         {
499           if (BASETYPE_VIA_VIRTUAL (type, i))
500             {
501               /* The virtual base class pointer might have been
502                  clobbered by the user program. Make sure that it
503                  still points to a valid memory location.  */
504
505               if ((boffset + offset) < 0
506                   || (boffset + offset) >= TYPE_LENGTH (real_type))
507                 {
508                   gdb::byte_vector buf (TYPE_LENGTH (baseclass));
509
510                   if (target_read_memory (address + boffset, buf.data (),
511                                           TYPE_LENGTH (baseclass)) != 0)
512                     skip = 1;
513                   base_val = value_from_contents_and_address (baseclass,
514                                                               buf.data (),
515                                                               address + boffset);
516                   baseclass = value_type (base_val);
517                   thisoffset = 0;
518                   boffset = 0;
519                   thistype = baseclass;
520                 }
521               else
522                 {
523                   base_val = val;
524                 }
525             }
526           else
527             {
528               base_val = val;
529             }
530         }
531
532       /* Now do the printing.  */
533       if (options->prettyformat)
534         {
535           fprintf_filtered (stream, "\n");
536           print_spaces_filtered (2 * recurse, stream);
537         }
538       fputs_filtered ("<", stream);
539       /* Not sure what the best notation is in the case where there is
540          no baseclass name.  */
541       fputs_filtered (basename ? basename : "", stream);
542       fputs_filtered ("> = ", stream);
543
544       if (skip < 0)
545         val_print_unavailable (stream);
546       else if (skip > 0)
547         val_print_invalid_address (stream);
548       else
549         {
550           int result = 0;
551
552           if (options->max_depth > -1
553               && recurse >= options->max_depth)
554             {
555               const struct language_defn *language = current_language;
556               gdb_assert (language->la_struct_too_deep_ellipsis != NULL);
557               fputs_filtered (language->la_struct_too_deep_ellipsis, stream);
558             }
559           else
560             {
561               /* Attempt to run an extension language pretty-printer on the
562                  baseclass if possible.  */
563               if (!options->raw)
564                 result
565                   = apply_ext_lang_val_pretty_printer (baseclass,
566                                                        thisoffset + boffset,
567                                                        value_address (base_val),
568                                                        stream, recurse,
569                                                        base_val, options,
570                                                        current_language);
571
572               if (!result)
573                 cp_print_value_fields (baseclass, thistype,
574                                        thisoffset + boffset,
575                                        value_address (base_val),
576                                        stream, recurse, base_val, options,
577                                        ((struct type **)
578                                         obstack_base (&dont_print_vb_obstack)),
579                                        0);
580             }
581         }
582       fputs_filtered (", ", stream);
583
584     flush_it:
585       ;
586     }
587
588   if (dont_print_vb == 0)
589     {
590       /* Free the space used to deal with the printing
591          of this type from top level.  */
592       obstack_free (&dont_print_vb_obstack, last_dont_print);
593       /* Reset watermark so that we can continue protecting
594          ourselves from whatever we were protecting ourselves.  */
595       dont_print_vb_obstack = tmp_obstack;
596     }
597 }
598
599 /* Print value of a static member.  To avoid infinite recursion when
600    printing a class that contains a static instance of the class, we
601    keep the addresses of all printed static member classes in an
602    obstack and refuse to print them more than once.
603
604    VAL contains the value to print, TYPE, STREAM, RECURSE, and OPTIONS
605    have the same meanings as in c_val_print.  */
606
607 static void
608 cp_print_static_field (struct type *type,
609                        struct value *val,
610                        struct ui_file *stream,
611                        int recurse,
612                        const struct value_print_options *options)
613 {
614   struct value_print_options opts;
615
616   if (value_entirely_optimized_out (val))
617     {
618       val_print_optimized_out (val, stream);
619       return;
620     }
621
622   struct type *real_type = check_typedef (type);
623   if (TYPE_CODE (real_type) == TYPE_CODE_STRUCT)
624     {
625       CORE_ADDR *first_dont_print;
626       CORE_ADDR addr;
627       int i;
628
629       first_dont_print
630         = (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
631       i = obstack_object_size (&dont_print_statmem_obstack)
632         / sizeof (CORE_ADDR);
633
634       while (--i >= 0)
635         {
636           if (value_address (val) == first_dont_print[i])
637             {
638               fputs_filtered ("<same as static member of an already"
639                               " seen type>",
640                               stream);
641               return;
642             }
643         }
644
645       addr = value_address (val);
646       obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
647                     sizeof (CORE_ADDR));
648       cp_print_value_fields (type, value_enclosing_type (val),
649                              value_embedded_offset (val), addr,
650                              stream, recurse, val,
651                              options, NULL, 1);
652       return;
653     }
654
655   if (TYPE_CODE (real_type) == TYPE_CODE_ARRAY)
656     {
657       struct type **first_dont_print;
658       int i;
659       struct type *target_type = TYPE_TARGET_TYPE (type);
660
661       first_dont_print
662         = (struct type **) obstack_base (&dont_print_stat_array_obstack);
663       i = obstack_object_size (&dont_print_stat_array_obstack)
664         / sizeof (struct type *);
665
666       while (--i >= 0)
667         {
668           if (target_type == first_dont_print[i])
669             {
670               fputs_filtered ("<same as static member of an already"
671                               " seen type>",
672                               stream);
673               return;
674             }
675         }
676
677       obstack_grow (&dont_print_stat_array_obstack,
678                     (char *) &target_type,
679                     sizeof (struct type *));
680     }
681
682   opts = *options;
683   opts.deref_ref = 0;
684   val_print (type,
685              value_embedded_offset (val),
686              value_address (val),
687              stream, recurse, val,
688              &opts, current_language);
689 }
690
691 /* Find the field in *SELF, or its non-virtual base classes, with
692    bit offset OFFSET.  Set *SELF to the containing type and *FIELDNO
693    to the containing field number.  If OFFSET is not exactly at the
694    start of some field, set *SELF to NULL.  */
695
696 static void
697 cp_find_class_member (struct type **self_p, int *fieldno,
698                       LONGEST offset)
699 {
700   struct type *self;
701   unsigned int i;
702   unsigned len;
703
704   *self_p = check_typedef (*self_p);
705   self = *self_p;
706   len = TYPE_NFIELDS (self);
707
708   for (i = TYPE_N_BASECLASSES (self); i < len; i++)
709     {
710       LONGEST bitpos = TYPE_FIELD_BITPOS (self, i);
711
712       QUIT;
713       if (offset == bitpos)
714         {
715           *fieldno = i;
716           return;
717         }
718     }
719
720   for (i = 0; i < TYPE_N_BASECLASSES (self); i++)
721     {
722       LONGEST bitpos = TYPE_FIELD_BITPOS (self, i);
723       LONGEST bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (self, i));
724
725       if (offset >= bitpos && offset < bitpos + bitsize)
726         {
727           *self_p = TYPE_FIELD_TYPE (self, i);
728           cp_find_class_member (self_p, fieldno, offset - bitpos);
729           return;
730         }
731     }
732
733   *self_p = NULL;
734 }
735
736 void
737 cp_print_class_member (const gdb_byte *valaddr, struct type *type,
738                        struct ui_file *stream, const char *prefix)
739 {
740   enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
741
742   /* VAL is a byte offset into the structure type SELF_TYPE.
743      Find the name of the field for that offset and
744      print it.  */
745   struct type *self_type = TYPE_SELF_TYPE (type);
746   LONGEST val;
747   int fieldno;
748
749   val = extract_signed_integer (valaddr,
750                                 TYPE_LENGTH (type),
751                                 byte_order);
752
753   /* Pointers to data members are usually byte offsets into an object.
754      Because a data member can have offset zero, and a NULL pointer to
755      member must be distinct from any valid non-NULL pointer to
756      member, either the value is biased or the NULL value has a
757      special representation; both are permitted by ISO C++.  HP aCC
758      used a bias of 0x20000000; HP cfront used a bias of 1; g++ 3.x
759      and other compilers which use the Itanium ABI use -1 as the NULL
760      value.  GDB only supports that last form; to add support for
761      another form, make this into a cp-abi hook.  */
762
763   if (val == -1)
764     {
765       fprintf_filtered (stream, "NULL");
766       return;
767     }
768
769   cp_find_class_member (&self_type, &fieldno, val << 3);
770
771   if (self_type != NULL)
772     {
773       const char *name;
774
775       fputs_filtered (prefix, stream);
776       name = TYPE_NAME (self_type);
777       if (name)
778         fputs_filtered (name, stream);
779       else
780         c_type_print_base (self_type, stream, 0, 0, &type_print_raw_options);
781       fprintf_filtered (stream, "::");
782       fputs_filtered (TYPE_FIELD_NAME (self_type, fieldno), stream);
783     }
784   else
785     fprintf_filtered (stream, "%ld", (long) val);
786 }
787
788
789 void
790 _initialize_cp_valprint (void)
791 {
792   obstack_begin (&dont_print_stat_array_obstack,
793                  32 * sizeof (struct type *));
794   obstack_begin (&dont_print_statmem_obstack,
795                  32 * sizeof (CORE_ADDR));
796   obstack_begin (&dont_print_vb_obstack,
797                  32 * sizeof (struct type *));
798 }