gdb/
[platform/upstream/binutils.git] / gdb / cp-valprint.c
1 /* Support for printing C++ values for GDB, the GNU debugger.
2
3    Copyright (C) 1986, 1988-1989, 1991-1997, 2000-2003, 2005-2012 Free
4    Software Foundation, Inc.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
21 #include "defs.h"
22 #include "gdb_obstack.h"
23 #include "symtab.h"
24 #include "gdbtypes.h"
25 #include "expression.h"
26 #include "value.h"
27 #include "command.h"
28 #include "gdbcmd.h"
29 #include "demangle.h"
30 #include "annotate.h"
31 #include "gdb_string.h"
32 #include "c-lang.h"
33 #include "target.h"
34 #include "cp-abi.h"
35 #include "valprint.h"
36 #include "cp-support.h"
37 #include "language.h"
38 #include "python/python.h"
39 #include "exceptions.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       
214       if (dont_print_statmem == 0)
215         {
216           statmem_obstack_initial_size =
217             obstack_object_size (&dont_print_statmem_obstack);
218
219           if (last_set_recurse != recurse)
220             {
221               stat_array_obstack_initial_size =
222                 obstack_object_size (&dont_print_stat_array_obstack);
223
224               last_set_recurse = recurse;
225             }
226         }
227
228       for (i = n_baseclasses; i < len; i++)
229         {
230           /* If requested, skip printing of static fields.  */
231           if (!options->static_field_print
232               && field_is_static (&TYPE_FIELD (type, i)))
233             continue;
234
235           if (fields_seen)
236             fprintf_filtered (stream, ", ");
237           else if (n_baseclasses > 0)
238             {
239               if (options->pretty)
240                 {
241                   fprintf_filtered (stream, "\n");
242                   print_spaces_filtered (2 + 2 * recurse, stream);
243                   fputs_filtered ("members of ", stream);
244                   fputs_filtered (type_name_no_tag (type), stream);
245                   fputs_filtered (": ", stream);
246                 }
247             }
248           fields_seen = 1;
249
250           if (options->pretty)
251             {
252               fprintf_filtered (stream, "\n");
253               print_spaces_filtered (2 + 2 * recurse, stream);
254             }
255           else
256             {
257               wrap_here (n_spaces (2 + 2 * recurse));
258             }
259           if (options->inspect_it)
260             {
261               if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR)
262                 fputs_filtered ("\"( ptr \"", stream);
263               else
264                 fputs_filtered ("\"( nodef \"", stream);
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               fputs_filtered ("\" \"", stream);
272               fprintf_symbol_filtered (stream,
273                                        TYPE_FIELD_NAME (type, i),
274                                        current_language->la_language,
275                                        DMGL_PARAMS | DMGL_ANSI);
276               fputs_filtered ("\") \"", stream);
277             }
278           else
279             {
280               annotate_field_begin (TYPE_FIELD_TYPE (type, i));
281
282               if (field_is_static (&TYPE_FIELD (type, i)))
283                 fputs_filtered ("static ", stream);
284               fprintf_symbol_filtered (stream,
285                                        TYPE_FIELD_NAME (type, i),
286                                        current_language->la_language,
287                                        DMGL_PARAMS | DMGL_ANSI);
288               annotate_field_name_end ();
289               /* Do not print leading '=' in case of anonymous
290                  unions.  */
291               if (strcmp (TYPE_FIELD_NAME (type, i), ""))
292                 fputs_filtered (" = ", stream);
293               annotate_field_value ();
294             }
295
296           if (!field_is_static (&TYPE_FIELD (type, i))
297               && TYPE_FIELD_PACKED (type, i))
298             {
299               struct value *v;
300
301               /* Bitfields require special handling, especially due to
302                  byte order problems.  */
303               if (TYPE_FIELD_IGNORE (type, i))
304                 {
305                   fputs_filtered ("<optimized out or zero length>", stream);
306                 }
307               else if (value_bits_synthetic_pointer (val,
308                                                      TYPE_FIELD_BITPOS (type,
309                                                                         i),
310                                                      TYPE_FIELD_BITSIZE (type,
311                                                                          i)))
312                 {
313                   fputs_filtered (_("<synthetic pointer>"), stream);
314                 }
315               else if (!value_bits_valid (val,
316                                           TYPE_FIELD_BITPOS (type, i),
317                                           TYPE_FIELD_BITSIZE (type, i)))
318                 {
319                   val_print_optimized_out (stream);
320                 }
321               else
322                 {
323                   struct value_print_options opts = *options;
324
325                   opts.deref_ref = 0;
326
327                   v = value_field_bitfield (type, i, valaddr, offset, val);
328
329                   common_val_print (v, stream, recurse + 1, &opts,
330                                     current_language);
331                 }
332             }
333           else
334             {
335               if (TYPE_FIELD_IGNORE (type, i))
336                 {
337                   fputs_filtered ("<optimized out or zero length>",
338                                   stream);
339                 }
340               else if (field_is_static (&TYPE_FIELD (type, i)))
341                 {
342                   volatile struct gdb_exception ex;
343                   struct value *v = NULL;
344
345                   TRY_CATCH (ex, RETURN_MASK_ERROR)
346                     {
347                       v = value_static_field (type, i);
348                     }
349
350                   if (ex.reason < 0)
351                     fprintf_filtered (stream,
352                                       _("<error reading variable: %s>"),
353                                       ex.message);
354                   else if (v == NULL)
355                     val_print_optimized_out (stream);
356                   else
357                     cp_print_static_field (TYPE_FIELD_TYPE (type, i),
358                                            v, stream, recurse + 1,
359                                            options);
360                 }
361               else if (i == TYPE_VPTR_FIELDNO (type))
362                 {
363                   int i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
364                   struct type *i_type = TYPE_FIELD_TYPE (type, i);
365
366                   if (valprint_check_validity (stream, i_type, i_offset, val))
367                     {
368                       CORE_ADDR addr;
369                       
370                       addr = extract_typed_address (valaddr + i_offset, i_type);
371                       print_function_pointer_address (get_type_arch (type),
372                                                       addr, stream,
373                                                       options->addressprint);
374                     }
375                 }
376               else
377                 {
378                   struct value_print_options opts = *options;
379
380                   opts.deref_ref = 0;
381                   val_print (TYPE_FIELD_TYPE (type, i),
382                              valaddr, 
383                              offset + TYPE_FIELD_BITPOS (type, i) / 8,
384                              address,
385                              stream, recurse + 1, val, &opts,
386                              current_language);
387                 }
388             }
389           annotate_field_end ();
390         }
391
392       if (dont_print_statmem == 0)
393         {
394           int obstack_final_size =
395            obstack_object_size (&dont_print_statmem_obstack);
396
397           if (obstack_final_size > statmem_obstack_initial_size)
398             {
399               /* In effect, a pop of the printed-statics stack.  */
400
401               void *free_to_ptr =
402                 obstack_next_free (&dont_print_statmem_obstack) -
403                 (obstack_final_size - statmem_obstack_initial_size);
404
405               obstack_free (&dont_print_statmem_obstack,
406                             free_to_ptr);
407             }
408
409           if (last_set_recurse != recurse)
410             {
411               int obstack_final_size =
412                 obstack_object_size (&dont_print_stat_array_obstack);
413               
414               if (obstack_final_size > stat_array_obstack_initial_size)
415                 {
416                   void *free_to_ptr =
417                     obstack_next_free (&dont_print_stat_array_obstack)
418                     - (obstack_final_size
419                        - stat_array_obstack_initial_size);
420
421                   obstack_free (&dont_print_stat_array_obstack,
422                                 free_to_ptr);
423                 }
424               last_set_recurse = -1;
425             }
426         }
427
428       if (options->pretty)
429         {
430           fprintf_filtered (stream, "\n");
431           print_spaces_filtered (2 * recurse, stream);
432         }
433     }                           /* if there are data fields */
434
435   fprintf_filtered (stream, "}");
436 }
437
438 /* Like cp_print_value_fields, but find the runtime type of the object
439    and pass it as the `real_type' argument to cp_print_value_fields.
440    This function is a hack to work around the fact that
441    common_val_print passes the embedded offset to val_print, but not
442    the enclosing type.  */
443
444 void
445 cp_print_value_fields_rtti (struct type *type,
446                             const gdb_byte *valaddr, int offset,
447                             CORE_ADDR address,
448                             struct ui_file *stream, int recurse,
449                             const struct value *val,
450                             const struct value_print_options *options,
451                             struct type **dont_print_vb, 
452                             int dont_print_statmem)
453 {
454   struct type *real_type = NULL;
455
456   /* We require all bits to be valid in order to attempt a
457      conversion.  */
458   if (value_bits_valid (val, TARGET_CHAR_BIT * offset,
459                         TARGET_CHAR_BIT * TYPE_LENGTH (type)))
460     {
461       struct value *value;
462       int full, top, using_enc;
463
464       /* Ugh, we have to convert back to a value here.  */
465       value = value_from_contents_and_address (type, valaddr + offset,
466                                                address + offset);
467       /* We don't actually care about most of the result here -- just
468          the type.  We already have the correct offset, due to how
469          val_print was initially called.  */
470       real_type = value_rtti_type (value, &full, &top, &using_enc);
471     }
472
473   if (!real_type)
474     real_type = type;
475
476   cp_print_value_fields (type, real_type, valaddr, offset,
477                          address, stream, recurse, val, options,
478                          dont_print_vb, dont_print_statmem);
479 }
480
481 /* Special val_print routine to avoid printing multiple copies of
482    virtual baseclasses.  */
483
484 static void
485 cp_print_value (struct type *type, struct type *real_type,
486                 const gdb_byte *valaddr, int offset,
487                 CORE_ADDR address, struct ui_file *stream,
488                 int recurse, const struct value *val,
489                 const struct value_print_options *options,
490                 struct type **dont_print_vb)
491 {
492   struct type **last_dont_print
493     = (struct type **) obstack_next_free (&dont_print_vb_obstack);
494   struct obstack tmp_obstack = dont_print_vb_obstack;
495   int i, n_baseclasses = TYPE_N_BASECLASSES (type);
496   int thisoffset;
497   struct type *thistype;
498
499   if (dont_print_vb == 0)
500     {
501       /* If we're at top level, carve out a completely fresh chunk of
502          the obstack and use that until this particular invocation
503          returns.  */
504       /* Bump up the high-water mark.  Now alpha is omega.  */
505       obstack_finish (&dont_print_vb_obstack);
506     }
507
508   for (i = 0; i < n_baseclasses; i++)
509     {
510       int boffset = 0;
511       int skip;
512       struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
513       const char *basename = TYPE_NAME (baseclass);
514       const gdb_byte *base_valaddr = NULL;
515       const struct value *base_val = NULL;
516       volatile struct gdb_exception ex;
517
518       if (BASETYPE_VIA_VIRTUAL (type, i))
519         {
520           struct type **first_dont_print
521             = (struct type **) obstack_base (&dont_print_vb_obstack);
522
523           int j = (struct type **)
524             obstack_next_free (&dont_print_vb_obstack) - first_dont_print;
525
526           while (--j >= 0)
527             if (baseclass == first_dont_print[j])
528               goto flush_it;
529
530           obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
531         }
532
533       thisoffset = offset;
534       thistype = real_type;
535
536       TRY_CATCH (ex, RETURN_MASK_ERROR)
537         {
538           boffset = baseclass_offset (type, i, valaddr, offset, address, val);
539         }
540       if (ex.reason < 0 && ex.error == NOT_AVAILABLE_ERROR)
541         skip = -1;
542       else if (ex.reason < 0)
543         skip = 1;
544       else
545         {
546           skip = 0;
547
548           if (BASETYPE_VIA_VIRTUAL (type, i))
549             {
550               /* The virtual base class pointer might have been
551                  clobbered by the user program. Make sure that it
552                  still points to a valid memory location.  */
553
554               if ((boffset + offset) < 0
555                   || (boffset + offset) >= TYPE_LENGTH (real_type))
556                 {
557                   /* FIXME (alloca): unsafe if baseclass is really
558                      really large.  */
559                   gdb_byte *buf = alloca (TYPE_LENGTH (baseclass));
560
561                   if (target_read_memory (address + boffset, buf,
562                                           TYPE_LENGTH (baseclass)) != 0)
563                     skip = 1;
564                   base_val = value_from_contents_and_address (baseclass,
565                                                               buf,
566                                                               address + boffset);
567                   thisoffset = 0;
568                   boffset = 0;
569                   thistype = baseclass;
570                   base_valaddr = value_contents_for_printing_const (base_val);
571                 }
572               else
573                 {
574                   base_valaddr = valaddr;
575                   base_val = val;
576                 }
577             }
578           else
579             {
580               base_valaddr = valaddr;
581               base_val = val;
582             }
583         }
584
585       /* Now do the printing.  */
586       if (options->pretty)
587         {
588           fprintf_filtered (stream, "\n");
589           print_spaces_filtered (2 * recurse, stream);
590         }
591       fputs_filtered ("<", stream);
592       /* Not sure what the best notation is in the case where there is
593          no baseclass name.  */
594       fputs_filtered (basename ? basename : "", stream);
595       fputs_filtered ("> = ", stream);
596
597       if (skip < 0)
598         val_print_unavailable (stream);
599       else if (skip > 0)
600         val_print_invalid_address (stream);
601       else
602         {
603           int result = 0;
604
605           /* Attempt to run the Python pretty-printers on the
606              baseclass if possible.  */
607           if (!options->raw)
608             result = apply_val_pretty_printer (baseclass, base_valaddr,
609                                                thisoffset + boffset,
610                                                value_address (base_val),
611                                                stream, recurse, base_val,
612                                                options, current_language);
613
614
615                   
616           if (!result)
617             cp_print_value_fields (baseclass, thistype, base_valaddr,
618                                    thisoffset + boffset,
619                                    value_address (base_val),
620                                    stream, recurse, base_val, options,
621                                    ((struct type **)
622                                     obstack_base (&dont_print_vb_obstack)),
623                                    0);
624         }
625       fputs_filtered (", ", stream);
626
627     flush_it:
628       ;
629     }
630
631   if (dont_print_vb == 0)
632     {
633       /* Free the space used to deal with the printing
634          of this type from top level.  */
635       obstack_free (&dont_print_vb_obstack, last_dont_print);
636       /* Reset watermark so that we can continue protecting
637          ourselves from whatever we were protecting ourselves.  */
638       dont_print_vb_obstack = tmp_obstack;
639     }
640 }
641
642 /* Print value of a static member.  To avoid infinite recursion when
643    printing a class that contains a static instance of the class, we
644    keep the addresses of all printed static member classes in an
645    obstack and refuse to print them more than once.
646
647    VAL contains the value to print, TYPE, STREAM, RECURSE, and OPTIONS
648    have the same meanings as in c_val_print.  */
649
650 static void
651 cp_print_static_field (struct type *type,
652                        struct value *val,
653                        struct ui_file *stream,
654                        int recurse,
655                        const struct value_print_options *options)
656 {
657   struct value_print_options opts;
658   
659   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
660     {
661       CORE_ADDR *first_dont_print;
662       CORE_ADDR addr;
663       int i;
664
665       first_dont_print
666         = (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
667       i = obstack_object_size (&dont_print_statmem_obstack)
668         / sizeof (CORE_ADDR);
669
670       while (--i >= 0)
671         {
672           if (value_address (val) == first_dont_print[i])
673             {
674               fputs_filtered ("<same as static member of an already"
675                               " seen type>",
676                               stream);
677               return;
678             }
679         }
680
681       addr = value_address (val);
682       obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
683                     sizeof (CORE_ADDR));
684       CHECK_TYPEDEF (type);
685       cp_print_value_fields (type, value_enclosing_type (val),
686                              value_contents_for_printing (val),
687                              value_embedded_offset (val), addr,
688                              stream, recurse, val,
689                              options, NULL, 1);
690       return;
691     }
692
693   if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
694     {
695       struct type **first_dont_print;
696       int i;
697       struct type *target_type = TYPE_TARGET_TYPE (type);
698
699       first_dont_print
700         = (struct type **) obstack_base (&dont_print_stat_array_obstack);
701       i = obstack_object_size (&dont_print_stat_array_obstack)
702         / sizeof (struct type *);
703
704       while (--i >= 0)
705         {
706           if (target_type == first_dont_print[i])
707             {
708               fputs_filtered ("<same as static member of an already"
709                               " seen type>",
710                               stream);
711               return;
712             }
713         }
714
715       obstack_grow (&dont_print_stat_array_obstack,
716                     (char *) &target_type,
717                     sizeof (struct type *));
718     }
719
720   opts = *options;
721   opts.deref_ref = 0;
722   val_print (type, value_contents_for_printing (val), 
723              value_embedded_offset (val),
724              value_address (val),
725              stream, recurse, val,
726              &opts, current_language);
727 }
728
729
730 /* Find the field in *DOMAIN, or its non-virtual base classes, with
731    bit offset OFFSET.  Set *DOMAIN to the containing type and *FIELDNO
732    to the containing field number.  If OFFSET is not exactly at the
733    start of some field, set *DOMAIN to NULL.  */
734
735 static void
736 cp_find_class_member (struct type **domain_p, int *fieldno,
737                       LONGEST offset)
738 {
739   struct type *domain;
740   unsigned int i;
741   unsigned len;
742
743   *domain_p = check_typedef (*domain_p);
744   domain = *domain_p;
745   len = TYPE_NFIELDS (domain);
746
747   for (i = TYPE_N_BASECLASSES (domain); i < len; i++)
748     {
749       LONGEST bitpos = TYPE_FIELD_BITPOS (domain, i);
750
751       QUIT;
752       if (offset == bitpos)
753         {
754           *fieldno = i;
755           return;
756         }
757     }
758
759   for (i = 0; i < TYPE_N_BASECLASSES (domain); i++)
760     {
761       LONGEST bitpos = TYPE_FIELD_BITPOS (domain, i);
762       LONGEST bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (domain, i));
763
764       if (offset >= bitpos && offset < bitpos + bitsize)
765         {
766           *domain_p = TYPE_FIELD_TYPE (domain, i);
767           cp_find_class_member (domain_p, fieldno, offset - bitpos);
768           return;
769         }
770     }
771
772   *domain_p = NULL;
773 }
774
775 void
776 cp_print_class_member (const gdb_byte *valaddr, struct type *type,
777                        struct ui_file *stream, char *prefix)
778 {
779   enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
780
781   /* VAL is a byte offset into the structure type DOMAIN.
782      Find the name of the field for that offset and
783      print it.  */
784   struct type *domain = TYPE_DOMAIN_TYPE (type);
785   LONGEST val;
786   unsigned int fieldno;
787
788   val = extract_signed_integer (valaddr,
789                                 TYPE_LENGTH (type),
790                                 byte_order);
791
792   /* Pointers to data members are usually byte offsets into an object.
793      Because a data member can have offset zero, and a NULL pointer to
794      member must be distinct from any valid non-NULL pointer to
795      member, either the value is biased or the NULL value has a
796      special representation; both are permitted by ISO C++.  HP aCC
797      used a bias of 0x20000000; HP cfront used a bias of 1; g++ 3.x
798      and other compilers which use the Itanium ABI use -1 as the NULL
799      value.  GDB only supports that last form; to add support for
800      another form, make this into a cp-abi hook.  */
801
802   if (val == -1)
803     {
804       fprintf_filtered (stream, "NULL");
805       return;
806     }
807
808   cp_find_class_member (&domain, &fieldno, val << 3);
809
810   if (domain != NULL)
811     {
812       const char *name;
813
814       fputs_filtered (prefix, stream);
815       name = type_name_no_tag (domain);
816       if (name)
817         fputs_filtered (name, stream);
818       else
819         c_type_print_base (domain, stream, 0, 0);
820       fprintf_filtered (stream, "::");
821       fputs_filtered (TYPE_FIELD_NAME (domain, fieldno), stream);
822     }
823   else
824     fprintf_filtered (stream, "%ld", (long) val);
825 }
826
827
828 void
829 _initialize_cp_valprint (void)
830 {
831   add_setshow_boolean_cmd ("static-members", class_support,
832                            &user_print_options.static_field_print, _("\
833 Set printing of C++ static members."), _("\
834 Show printing of C++ static members."), NULL,
835                            NULL,
836                            show_static_field_print,
837                            &setprintlist, &showprintlist);
838
839   add_setshow_boolean_cmd ("vtbl", class_support,
840                            &user_print_options.vtblprint, _("\
841 Set printing of C++ virtual function tables."), _("\
842 Show printing of C++ virtual function tables."), NULL,
843                            NULL,
844                            show_vtblprint,
845                            &setprintlist, &showprintlist);
846
847   add_setshow_boolean_cmd ("object", class_support,
848                            &user_print_options.objectprint, _("\
849 Set printing of object's derived type based on vtable info."), _("\
850 Show printing of object's derived type based on vtable info."), NULL,
851                            NULL,
852                            show_objectprint,
853                            &setprintlist, &showprintlist);
854
855   obstack_begin (&dont_print_stat_array_obstack,
856                  32 * sizeof (struct type *));
857   obstack_begin (&dont_print_statmem_obstack,
858                  32 * sizeof (CORE_ADDR));
859   obstack_begin (&dont_print_vb_obstack,
860                  32 * sizeof (struct type *));
861 }