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