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