92f820fc2c70d4b24d7a0c7e2ec94bb55c32e734
[external/binutils.git] / gdb / p-valprint.c
1 /* Support for printing Pascal values for GDB, the GNU debugger.
2
3    Copyright (C) 2000, 2001, 2003, 2005, 2006, 2007, 2008
4    Free 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 /* This file is derived from c-valprint.c */
22
23 #include "defs.h"
24 #include "gdb_obstack.h"
25 #include "symtab.h"
26 #include "gdbtypes.h"
27 #include "expression.h"
28 #include "value.h"
29 #include "command.h"
30 #include "gdbcmd.h"
31 #include "gdbcore.h"
32 #include "demangle.h"
33 #include "valprint.h"
34 #include "typeprint.h"
35 #include "language.h"
36 #include "target.h"
37 #include "annotate.h"
38 #include "p-lang.h"
39 #include "cp-abi.h"
40 #include "cp-support.h"
41 \f
42
43
44
45 /* Print data of type TYPE located at VALADDR (within GDB), which came from
46    the inferior at address ADDRESS, onto stdio stream STREAM according to
47    FORMAT (a letter or 0 for natural format).  The data at VALADDR is in
48    target byte order.
49
50    If the data are a string pointer, returns the number of string characters
51    printed.
52
53    If DEREF_REF is nonzero, then dereference references, otherwise just print
54    them like pointers.
55
56    The PRETTY parameter controls prettyprinting.  */
57
58
59 int
60 pascal_val_print (struct type *type, const gdb_byte *valaddr,
61                   int embedded_offset, CORE_ADDR address,
62                   struct ui_file *stream, int format, int deref_ref,
63                   int recurse, enum val_prettyprint pretty)
64 {
65   unsigned int i = 0;   /* Number of characters printed */
66   unsigned len;
67   struct type *elttype;
68   unsigned eltlen;
69   int length_pos, length_size, string_pos;
70   int char_size;
71   LONGEST val;
72   CORE_ADDR addr;
73
74   CHECK_TYPEDEF (type);
75   switch (TYPE_CODE (type))
76     {
77     case TYPE_CODE_ARRAY:
78       if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0)
79         {
80           elttype = check_typedef (TYPE_TARGET_TYPE (type));
81           eltlen = TYPE_LENGTH (elttype);
82           len = TYPE_LENGTH (type) / eltlen;
83           if (prettyprint_arrays)
84             {
85               print_spaces_filtered (2 + 2 * recurse, stream);
86             }
87           /* For an array of chars, print with string syntax.  */
88           if (eltlen == 1 
89               && ((TYPE_CODE (elttype) == TYPE_CODE_INT)
90                || ((current_language->la_language == language_pascal)
91                    && (TYPE_CODE (elttype) == TYPE_CODE_CHAR)))
92               && (format == 0 || format == 's'))
93             {
94               /* If requested, look for the first null char and only print
95                  elements up to it.  */
96               if (stop_print_at_null)
97                 {
98                   unsigned int temp_len;
99
100                   /* Look for a NULL char. */
101                   for (temp_len = 0;
102                        (valaddr + embedded_offset)[temp_len]
103                        && temp_len < len && temp_len < print_max;
104                        temp_len++);
105                   len = temp_len;
106                 }
107
108               LA_PRINT_STRING (stream, valaddr + embedded_offset, len, 1, 0);
109               i = len;
110             }
111           else
112             {
113               fprintf_filtered (stream, "{");
114               /* If this is a virtual function table, print the 0th
115                  entry specially, and the rest of the members normally.  */
116               if (pascal_object_is_vtbl_ptr_type (elttype))
117                 {
118                   i = 1;
119                   fprintf_filtered (stream, "%d vtable entries", len - 1);
120                 }
121               else
122                 {
123                   i = 0;
124                 }
125               val_print_array_elements (type, valaddr + embedded_offset, address, stream,
126                                      format, deref_ref, recurse, pretty, i);
127               fprintf_filtered (stream, "}");
128             }
129           break;
130         }
131       /* Array of unspecified length: treat like pointer to first elt.  */
132       addr = address;
133       goto print_unpacked_pointer;
134
135     case TYPE_CODE_PTR:
136       if (format && format != 's')
137         {
138           print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
139           break;
140         }
141       if (vtblprint && pascal_object_is_vtbl_ptr_type (type))
142         {
143           /* Print the unmangled name if desired.  */
144           /* Print vtable entry - we only get here if we ARE using
145              -fvtable_thunks.  (Otherwise, look under TYPE_CODE_STRUCT.) */
146           /* Extract the address, assume that it is unsigned.  */
147           print_address_demangle (extract_unsigned_integer (valaddr + embedded_offset, TYPE_LENGTH (type)),
148                                   stream, demangle);
149           break;
150         }
151       elttype = check_typedef (TYPE_TARGET_TYPE (type));
152         {
153           addr = unpack_pointer (type, valaddr + embedded_offset);
154         print_unpacked_pointer:
155           elttype = check_typedef (TYPE_TARGET_TYPE (type));
156
157           if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
158             {
159               /* Try to print what function it points to.  */
160               print_address_demangle (addr, stream, demangle);
161               /* Return value is irrelevant except for string pointers.  */
162               return (0);
163             }
164
165           if (addressprint && format != 's')
166             {
167               fputs_filtered (paddress (addr), stream);
168             }
169
170           /* For a pointer to char or unsigned char, also print the string
171              pointed to, unless pointer is null.  */
172           if (TYPE_LENGTH (elttype) == 1
173               && (TYPE_CODE (elttype) == TYPE_CODE_INT
174                   || TYPE_CODE(elttype) == TYPE_CODE_CHAR)
175               && (format == 0 || format == 's')
176               && addr != 0)
177             {
178               /* no wide string yet */
179               i = val_print_string (addr, -1, 1, stream);
180             }
181           /* also for pointers to pascal strings */
182           /* Note: this is Free Pascal specific:
183              as GDB does not recognize stabs pascal strings
184              Pascal strings are mapped to records
185              with lowercase names PM  */
186           if (is_pascal_string_type (elttype, &length_pos, &length_size,
187                                      &string_pos, &char_size, NULL)
188               && addr != 0)
189             {
190               ULONGEST string_length;
191               void *buffer;
192               buffer = xmalloc (length_size);
193               read_memory (addr + length_pos, buffer, length_size);
194               string_length = extract_unsigned_integer (buffer, length_size);
195               xfree (buffer);
196               i = val_print_string (addr + string_pos, string_length, char_size, stream);
197             }
198           else if (pascal_object_is_vtbl_member (type))
199             {
200               /* print vtbl's nicely */
201               CORE_ADDR vt_address = unpack_pointer (type, valaddr + embedded_offset);
202
203               struct minimal_symbol *msymbol =
204               lookup_minimal_symbol_by_pc (vt_address);
205               if ((msymbol != NULL)
206                   && (vt_address == SYMBOL_VALUE_ADDRESS (msymbol)))
207                 {
208                   fputs_filtered (" <", stream);
209                   fputs_filtered (SYMBOL_PRINT_NAME (msymbol), stream);
210                   fputs_filtered (">", stream);
211                 }
212               if (vt_address && vtblprint)
213                 {
214                   struct value *vt_val;
215                   struct symbol *wsym = (struct symbol *) NULL;
216                   struct type *wtype;
217                   struct block *block = (struct block *) NULL;
218                   int is_this_fld;
219
220                   if (msymbol != NULL)
221                     wsym = lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol), block,
222                                           VAR_DOMAIN, &is_this_fld, NULL);
223
224                   if (wsym)
225                     {
226                       wtype = SYMBOL_TYPE (wsym);
227                     }
228                   else
229                     {
230                       wtype = TYPE_TARGET_TYPE (type);
231                     }
232                   vt_val = value_at (wtype, vt_address);
233                   common_val_print (vt_val, stream, format, deref_ref,
234                                     recurse + 1, pretty);
235                   if (pretty)
236                     {
237                       fprintf_filtered (stream, "\n");
238                       print_spaces_filtered (2 + 2 * recurse, stream);
239                     }
240                 }
241             }
242
243           /* Return number of characters printed, including the terminating
244              '\0' if we reached the end.  val_print_string takes care including
245              the terminating '\0' if necessary.  */
246           return i;
247         }
248       break;
249
250     case TYPE_CODE_REF:
251       elttype = check_typedef (TYPE_TARGET_TYPE (type));
252       if (addressprint)
253         {
254           fprintf_filtered (stream, "@");
255           /* Extract the address, assume that it is unsigned.  */
256           fputs_filtered (paddress (
257             extract_unsigned_integer (valaddr + embedded_offset,
258                gdbarch_ptr_bit (current_gdbarch) / HOST_CHAR_BIT)), stream);
259           if (deref_ref)
260             fputs_filtered (": ", stream);
261         }
262       /* De-reference the reference.  */
263       if (deref_ref)
264         {
265           if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
266             {
267               struct value *deref_val =
268               value_at
269               (TYPE_TARGET_TYPE (type),
270                unpack_pointer (lookup_pointer_type (builtin_type_void),
271                                valaddr + embedded_offset));
272               common_val_print (deref_val, stream, format, deref_ref,
273                                 recurse + 1, pretty);
274             }
275           else
276             fputs_filtered ("???", stream);
277         }
278       break;
279
280     case TYPE_CODE_UNION:
281       if (recurse && !unionprint)
282         {
283           fprintf_filtered (stream, "{...}");
284           break;
285         }
286       /* Fall through.  */
287     case TYPE_CODE_STRUCT:
288       if (vtblprint && pascal_object_is_vtbl_ptr_type (type))
289         {
290           /* Print the unmangled name if desired.  */
291           /* Print vtable entry - we only get here if NOT using
292              -fvtable_thunks.  (Otherwise, look under TYPE_CODE_PTR.) */
293           /* Extract the address, assume that it is unsigned.  */
294           print_address_demangle
295             (extract_unsigned_integer (valaddr + embedded_offset + TYPE_FIELD_BITPOS (type, VTBL_FNADDR_OFFSET) / 8,
296                                        TYPE_LENGTH (TYPE_FIELD_TYPE (type, VTBL_FNADDR_OFFSET))),
297              stream, demangle);
298         }
299       else
300         {
301           if (is_pascal_string_type (type, &length_pos, &length_size,
302                                      &string_pos, &char_size, NULL))
303             {
304               len = extract_unsigned_integer (valaddr + embedded_offset + length_pos, length_size);
305               LA_PRINT_STRING (stream, valaddr + embedded_offset + string_pos, len, char_size, 0);
306             }
307           else
308             pascal_object_print_value_fields (type, valaddr + embedded_offset, address, stream, format,
309                                               recurse, pretty, NULL, 0);
310         }
311       break;
312
313     case TYPE_CODE_ENUM:
314       if (format)
315         {
316           print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
317           break;
318         }
319       len = TYPE_NFIELDS (type);
320       val = unpack_long (type, valaddr + embedded_offset);
321       for (i = 0; i < len; i++)
322         {
323           QUIT;
324           if (val == TYPE_FIELD_BITPOS (type, i))
325             {
326               break;
327             }
328         }
329       if (i < len)
330         {
331           fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
332         }
333       else
334         {
335           print_longest (stream, 'd', 0, val);
336         }
337       break;
338
339     case TYPE_CODE_FLAGS:
340       if (format)
341           print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
342       else
343         val_print_type_code_flags (type, valaddr + embedded_offset, stream);
344       break;
345
346     case TYPE_CODE_FUNC:
347       if (format)
348         {
349           print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
350           break;
351         }
352       /* FIXME, we should consider, at least for ANSI C language, eliminating
353          the distinction made between FUNCs and POINTERs to FUNCs.  */
354       fprintf_filtered (stream, "{");
355       type_print (type, "", stream, -1);
356       fprintf_filtered (stream, "} ");
357       /* Try to print what function it points to, and its address.  */
358       print_address_demangle (address, stream, demangle);
359       break;
360
361     case TYPE_CODE_BOOL:
362       format = format ? format : output_format;
363       if (format)
364         print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
365       else
366         {
367           val = unpack_long (type, valaddr + embedded_offset);
368           if (val == 0)
369             fputs_filtered ("false", stream);
370           else if (val == 1)
371             fputs_filtered ("true", stream);
372           else
373             {
374               fputs_filtered ("true (", stream);
375               fprintf_filtered (stream, "%ld)", (long int) val);
376             }
377         }
378       break;
379
380     case TYPE_CODE_RANGE:
381       /* FIXME: create_range_type does not set the unsigned bit in a
382          range type (I think it probably should copy it from the target
383          type), so we won't print values which are too large to
384          fit in a signed integer correctly.  */
385       /* FIXME: Doesn't handle ranges of enums correctly.  (Can't just
386          print with the target type, though, because the size of our type
387          and the target type might differ).  */
388       /* FALLTHROUGH */
389
390     case TYPE_CODE_INT:
391       format = format ? format : output_format;
392       if (format)
393         {
394           print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
395         }
396       else
397         {
398           val_print_type_code_int (type, valaddr + embedded_offset, stream);
399         }
400       break;
401
402     case TYPE_CODE_CHAR:
403       format = format ? format : output_format;
404       if (format)
405         {
406           print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
407         }
408       else
409         {
410           val = unpack_long (type, valaddr + embedded_offset);
411           if (TYPE_UNSIGNED (type))
412             fprintf_filtered (stream, "%u", (unsigned int) val);
413           else
414             fprintf_filtered (stream, "%d", (int) val);
415           fputs_filtered (" ", stream);
416           LA_PRINT_CHAR ((unsigned char) val, stream);
417         }
418       break;
419
420     case TYPE_CODE_FLT:
421       if (format)
422         {
423           print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
424         }
425       else
426         {
427           print_floating (valaddr + embedded_offset, type, stream);
428         }
429       break;
430
431     case TYPE_CODE_BITSTRING:
432     case TYPE_CODE_SET:
433       elttype = TYPE_INDEX_TYPE (type);
434       CHECK_TYPEDEF (elttype);
435       if (TYPE_STUB (elttype))
436         {
437           fprintf_filtered (stream, "<incomplete type>");
438           gdb_flush (stream);
439           break;
440         }
441       else
442         {
443           struct type *range = elttype;
444           LONGEST low_bound, high_bound;
445           int i;
446           int is_bitstring = TYPE_CODE (type) == TYPE_CODE_BITSTRING;
447           int need_comma = 0;
448
449           if (is_bitstring)
450             fputs_filtered ("B'", stream);
451           else
452             fputs_filtered ("[", stream);
453
454           i = get_discrete_bounds (range, &low_bound, &high_bound);
455         maybe_bad_bstring:
456           if (i < 0)
457             {
458               fputs_filtered ("<error value>", stream);
459               goto done;
460             }
461
462           for (i = low_bound; i <= high_bound; i++)
463             {
464               int element = value_bit_index (type, valaddr + embedded_offset, i);
465               if (element < 0)
466                 {
467                   i = element;
468                   goto maybe_bad_bstring;
469                 }
470               if (is_bitstring)
471                 fprintf_filtered (stream, "%d", element);
472               else if (element)
473                 {
474                   if (need_comma)
475                     fputs_filtered (", ", stream);
476                   print_type_scalar (range, i, stream);
477                   need_comma = 1;
478
479                   if (i + 1 <= high_bound && value_bit_index (type, valaddr + embedded_offset, ++i))
480                     {
481                       int j = i;
482                       fputs_filtered ("..", stream);
483                       while (i + 1 <= high_bound
484                              && value_bit_index (type, valaddr + embedded_offset, ++i))
485                         j = i;
486                       print_type_scalar (range, j, stream);
487                     }
488                 }
489             }
490         done:
491           if (is_bitstring)
492             fputs_filtered ("'", stream);
493           else
494             fputs_filtered ("]", stream);
495         }
496       break;
497
498     case TYPE_CODE_VOID:
499       fprintf_filtered (stream, "void");
500       break;
501
502     case TYPE_CODE_ERROR:
503       fprintf_filtered (stream, "<error type>");
504       break;
505
506     case TYPE_CODE_UNDEF:
507       /* This happens (without TYPE_FLAG_STUB set) on systems which don't use
508          dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
509          and no complete type for struct foo in that file.  */
510       fprintf_filtered (stream, "<incomplete type>");
511       break;
512
513     default:
514       error (_("Invalid pascal type code %d in symbol table."), TYPE_CODE (type));
515     }
516   gdb_flush (stream);
517   return (0);
518 }
519 \f
520 int
521 pascal_value_print (struct value *val, struct ui_file *stream, int format,
522                     enum val_prettyprint pretty)
523 {
524   struct type *type = value_type (val);
525
526   /* If it is a pointer, indicate what it points to.
527
528      Print type also if it is a reference.
529
530      Object pascal: if it is a member pointer, we will take care
531      of that when we print it.  */
532   if (TYPE_CODE (type) == TYPE_CODE_PTR
533       || TYPE_CODE (type) == TYPE_CODE_REF)
534     {
535       /* Hack:  remove (char *) for char strings.  Their
536          type is indicated by the quoted string anyway. */
537       if (TYPE_CODE (type) == TYPE_CODE_PTR 
538           && TYPE_NAME (type) == NULL
539           && TYPE_NAME (TYPE_TARGET_TYPE (type)) != NULL
540           && strcmp (TYPE_NAME (TYPE_TARGET_TYPE (type)), "char") == 0)
541         {
542           /* Print nothing */
543         }
544       else
545         {
546           fprintf_filtered (stream, "(");
547           type_print (type, "", stream, -1);
548           fprintf_filtered (stream, ") ");
549         }
550     }
551   return common_val_print (val, stream, format, 1, 0, pretty);
552 }
553
554
555 /******************************************************************************
556                     Inserted from cp-valprint
557 ******************************************************************************/
558
559 extern int vtblprint;           /* Controls printing of vtbl's */
560 extern int objectprint;         /* Controls looking up an object's derived type
561                                    using what we find in its vtables.  */
562 static int pascal_static_field_print;   /* Controls printing of static fields. */
563 static void
564 show_pascal_static_field_print (struct ui_file *file, int from_tty,
565                                 struct cmd_list_element *c, const char *value)
566 {
567   fprintf_filtered (file, _("Printing of pascal static members is %s.\n"),
568                     value);
569 }
570
571 static struct obstack dont_print_vb_obstack;
572 static struct obstack dont_print_statmem_obstack;
573
574 static void pascal_object_print_static_field (struct value *,
575                                               struct ui_file *, int, int,
576                                               enum val_prettyprint);
577
578 static void pascal_object_print_value (struct type *, const gdb_byte *,
579                                        CORE_ADDR, struct ui_file *,
580                                        int, int, enum val_prettyprint,
581                                        struct type **);
582
583 /* It was changed to this after 2.4.5.  */
584 const char pascal_vtbl_ptr_name[] =
585 {'_', '_', 'v', 't', 'b', 'l', '_', 'p', 't', 'r', '_', 't', 'y', 'p', 'e', 0};
586
587 /* Return truth value for assertion that TYPE is of the type
588    "pointer to virtual function".  */
589
590 int
591 pascal_object_is_vtbl_ptr_type (struct type *type)
592 {
593   char *typename = type_name_no_tag (type);
594
595   return (typename != NULL
596           && strcmp (typename, pascal_vtbl_ptr_name) == 0);
597 }
598
599 /* Return truth value for the assertion that TYPE is of the type
600    "pointer to virtual function table".  */
601
602 int
603 pascal_object_is_vtbl_member (struct type *type)
604 {
605   if (TYPE_CODE (type) == TYPE_CODE_PTR)
606     {
607       type = TYPE_TARGET_TYPE (type);
608       if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
609         {
610           type = TYPE_TARGET_TYPE (type);
611           if (TYPE_CODE (type) == TYPE_CODE_STRUCT      /* if not using thunks */
612               || TYPE_CODE (type) == TYPE_CODE_PTR)     /* if using thunks */
613             {
614               /* Virtual functions tables are full of pointers
615                  to virtual functions. */
616               return pascal_object_is_vtbl_ptr_type (type);
617             }
618         }
619     }
620   return 0;
621 }
622
623 /* Mutually recursive subroutines of pascal_object_print_value and
624    c_val_print to print out a structure's fields:
625    pascal_object_print_value_fields and pascal_object_print_value.
626
627    TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and PRETTY have the
628    same meanings as in pascal_object_print_value and c_val_print.
629
630    DONT_PRINT is an array of baseclass types that we
631    should not print, or zero if called from top level.  */
632
633 void
634 pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr,
635                                   CORE_ADDR address, struct ui_file *stream,
636                                   int format, int recurse,
637                                   enum val_prettyprint pretty,
638                                   struct type **dont_print_vb,
639                                   int dont_print_statmem)
640 {
641   int i, len, n_baseclasses;
642   char *last_dont_print = obstack_next_free (&dont_print_statmem_obstack);
643
644   CHECK_TYPEDEF (type);
645
646   fprintf_filtered (stream, "{");
647   len = TYPE_NFIELDS (type);
648   n_baseclasses = TYPE_N_BASECLASSES (type);
649
650   /* Print out baseclasses such that we don't print
651      duplicates of virtual baseclasses.  */
652   if (n_baseclasses > 0)
653     pascal_object_print_value (type, valaddr, address, stream,
654                                format, recurse + 1, pretty, dont_print_vb);
655
656   if (!len && n_baseclasses == 1)
657     fprintf_filtered (stream, "<No data fields>");
658   else
659     {
660       struct obstack tmp_obstack = dont_print_statmem_obstack;
661       int fields_seen = 0;
662
663       if (dont_print_statmem == 0)
664         {
665           /* If we're at top level, carve out a completely fresh
666              chunk of the obstack and use that until this particular
667              invocation returns.  */
668           obstack_finish (&dont_print_statmem_obstack);
669         }
670
671       for (i = n_baseclasses; i < len; i++)
672         {
673           /* If requested, skip printing of static fields.  */
674           if (!pascal_static_field_print && TYPE_FIELD_STATIC (type, i))
675             continue;
676           if (fields_seen)
677             fprintf_filtered (stream, ", ");
678           else if (n_baseclasses > 0)
679             {
680               if (pretty)
681                 {
682                   fprintf_filtered (stream, "\n");
683                   print_spaces_filtered (2 + 2 * recurse, stream);
684                   fputs_filtered ("members of ", stream);
685                   fputs_filtered (type_name_no_tag (type), stream);
686                   fputs_filtered (": ", stream);
687                 }
688             }
689           fields_seen = 1;
690
691           if (pretty)
692             {
693               fprintf_filtered (stream, "\n");
694               print_spaces_filtered (2 + 2 * recurse, stream);
695             }
696           else
697             {
698               wrap_here (n_spaces (2 + 2 * recurse));
699             }
700           if (inspect_it)
701             {
702               if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR)
703                 fputs_filtered ("\"( ptr \"", stream);
704               else
705                 fputs_filtered ("\"( nodef \"", stream);
706               if (TYPE_FIELD_STATIC (type, i))
707                 fputs_filtered ("static ", stream);
708               fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
709                                        language_cplus,
710                                        DMGL_PARAMS | DMGL_ANSI);
711               fputs_filtered ("\" \"", stream);
712               fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
713                                        language_cplus,
714                                        DMGL_PARAMS | DMGL_ANSI);
715               fputs_filtered ("\") \"", stream);
716             }
717           else
718             {
719               annotate_field_begin (TYPE_FIELD_TYPE (type, i));
720
721               if (TYPE_FIELD_STATIC (type, i))
722                 fputs_filtered ("static ", stream);
723               fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
724                                        language_cplus,
725                                        DMGL_PARAMS | DMGL_ANSI);
726               annotate_field_name_end ();
727               fputs_filtered (" = ", stream);
728               annotate_field_value ();
729             }
730
731           if (!TYPE_FIELD_STATIC (type, i) && TYPE_FIELD_PACKED (type, i))
732             {
733               struct value *v;
734
735               /* Bitfields require special handling, especially due to byte
736                  order problems.  */
737               if (TYPE_FIELD_IGNORE (type, i))
738                 {
739                   fputs_filtered ("<optimized out or zero length>", stream);
740                 }
741               else
742                 {
743                   v = value_from_longest (TYPE_FIELD_TYPE (type, i),
744                                    unpack_field_as_long (type, valaddr, i));
745
746                   common_val_print (v, stream, format, 0, recurse + 1, pretty);
747                 }
748             }
749           else
750             {
751               if (TYPE_FIELD_IGNORE (type, i))
752                 {
753                   fputs_filtered ("<optimized out or zero length>", stream);
754                 }
755               else if (TYPE_FIELD_STATIC (type, i))
756                 {
757                   /* struct value *v = value_static_field (type, i); v4.17 specific */
758                   struct value *v;
759                   v = value_from_longest (TYPE_FIELD_TYPE (type, i),
760                                    unpack_field_as_long (type, valaddr, i));
761
762                   if (v == NULL)
763                     fputs_filtered ("<optimized out>", stream);
764                   else
765                     pascal_object_print_static_field (v, stream, format,
766                                                       recurse + 1, pretty);
767                 }
768               else
769                 {
770                   /* val_print (TYPE_FIELD_TYPE (type, i),
771                      valaddr + TYPE_FIELD_BITPOS (type, i) / 8,
772                      address + TYPE_FIELD_BITPOS (type, i) / 8, 0,
773                      stream, format, 0, recurse + 1, pretty); */
774                   val_print (TYPE_FIELD_TYPE (type, i),
775                              valaddr, TYPE_FIELD_BITPOS (type, i) / 8,
776                              address + TYPE_FIELD_BITPOS (type, i) / 8,
777                              stream, format, 0, recurse + 1, pretty);
778                 }
779             }
780           annotate_field_end ();
781         }
782
783       if (dont_print_statmem == 0)
784         {
785           /* Free the space used to deal with the printing
786              of the members from top level.  */
787           obstack_free (&dont_print_statmem_obstack, last_dont_print);
788           dont_print_statmem_obstack = tmp_obstack;
789         }
790
791       if (pretty)
792         {
793           fprintf_filtered (stream, "\n");
794           print_spaces_filtered (2 * recurse, stream);
795         }
796     }
797   fprintf_filtered (stream, "}");
798 }
799
800 /* Special val_print routine to avoid printing multiple copies of virtual
801    baseclasses.  */
802
803 static void
804 pascal_object_print_value (struct type *type, const gdb_byte *valaddr,
805                            CORE_ADDR address, struct ui_file *stream,
806                            int format, int recurse,
807                            enum val_prettyprint pretty,
808                            struct type **dont_print_vb)
809 {
810   struct type **last_dont_print
811   = (struct type **) obstack_next_free (&dont_print_vb_obstack);
812   struct obstack tmp_obstack = dont_print_vb_obstack;
813   int i, n_baseclasses = TYPE_N_BASECLASSES (type);
814
815   if (dont_print_vb == 0)
816     {
817       /* If we're at top level, carve out a completely fresh
818          chunk of the obstack and use that until this particular
819          invocation returns.  */
820       /* Bump up the high-water mark.  Now alpha is omega.  */
821       obstack_finish (&dont_print_vb_obstack);
822     }
823
824   for (i = 0; i < n_baseclasses; i++)
825     {
826       int boffset;
827       struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
828       char *basename = type_name_no_tag (baseclass);
829       const gdb_byte *base_valaddr;
830
831       if (BASETYPE_VIA_VIRTUAL (type, i))
832         {
833           struct type **first_dont_print
834           = (struct type **) obstack_base (&dont_print_vb_obstack);
835
836           int j = (struct type **) obstack_next_free (&dont_print_vb_obstack)
837           - first_dont_print;
838
839           while (--j >= 0)
840             if (baseclass == first_dont_print[j])
841               goto flush_it;
842
843           obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
844         }
845
846       boffset = baseclass_offset (type, i, valaddr, address);
847
848       if (pretty)
849         {
850           fprintf_filtered (stream, "\n");
851           print_spaces_filtered (2 * recurse, stream);
852         }
853       fputs_filtered ("<", stream);
854       /* Not sure what the best notation is in the case where there is no
855          baseclass name.  */
856
857       fputs_filtered (basename ? basename : "", stream);
858       fputs_filtered ("> = ", stream);
859
860       /* The virtual base class pointer might have been clobbered by the
861          user program. Make sure that it still points to a valid memory
862          location.  */
863
864       if (boffset != -1 && (boffset < 0 || boffset >= TYPE_LENGTH (type)))
865         {
866           /* FIXME (alloc): not safe is baseclass is really really big. */
867           gdb_byte *buf = alloca (TYPE_LENGTH (baseclass));
868           base_valaddr = buf;
869           if (target_read_memory (address + boffset, buf,
870                                   TYPE_LENGTH (baseclass)) != 0)
871             boffset = -1;
872         }
873       else
874         base_valaddr = valaddr + boffset;
875
876       if (boffset == -1)
877         fprintf_filtered (stream, "<invalid address>");
878       else
879         pascal_object_print_value_fields (baseclass, base_valaddr, address + boffset,
880                                           stream, format, recurse, pretty,
881                      (struct type **) obstack_base (&dont_print_vb_obstack),
882                                           0);
883       fputs_filtered (", ", stream);
884
885     flush_it:
886       ;
887     }
888
889   if (dont_print_vb == 0)
890     {
891       /* Free the space used to deal with the printing
892          of this type from top level.  */
893       obstack_free (&dont_print_vb_obstack, last_dont_print);
894       /* Reset watermark so that we can continue protecting
895          ourselves from whatever we were protecting ourselves.  */
896       dont_print_vb_obstack = tmp_obstack;
897     }
898 }
899
900 /* Print value of a static member.
901    To avoid infinite recursion when printing a class that contains
902    a static instance of the class, we keep the addresses of all printed
903    static member classes in an obstack and refuse to print them more
904    than once.
905
906    VAL contains the value to print, STREAM, RECURSE, and PRETTY
907    have the same meanings as in c_val_print.  */
908
909 static void
910 pascal_object_print_static_field (struct value *val,
911                                   struct ui_file *stream, int format,
912                                   int recurse, enum val_prettyprint pretty)
913 {
914   struct type *type = value_type (val);
915
916   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
917     {
918       CORE_ADDR *first_dont_print;
919       int i;
920
921       first_dont_print
922         = (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
923       i = (CORE_ADDR *) obstack_next_free (&dont_print_statmem_obstack)
924         - first_dont_print;
925
926       while (--i >= 0)
927         {
928           if (VALUE_ADDRESS (val) == first_dont_print[i])
929             {
930               fputs_filtered ("<same as static member of an already seen type>",
931                               stream);
932               return;
933             }
934         }
935
936       obstack_grow (&dont_print_statmem_obstack, (char *) &VALUE_ADDRESS (val),
937                     sizeof (CORE_ADDR));
938
939       CHECK_TYPEDEF (type);
940       pascal_object_print_value_fields (type, value_contents (val), VALUE_ADDRESS (val),
941                                   stream, format, recurse, pretty, NULL, 1);
942       return;
943     }
944   common_val_print (val, stream, format, 0, recurse, pretty);
945 }
946
947 extern initialize_file_ftype _initialize_pascal_valprint; /* -Wmissing-prototypes */
948
949 void
950 _initialize_pascal_valprint (void)
951 {
952   add_setshow_boolean_cmd ("pascal_static-members", class_support,
953                            &pascal_static_field_print, _("\
954 Set printing of pascal static members."), _("\
955 Show printing of pascal static members."), NULL,
956                            NULL,
957                            show_pascal_static_field_print,
958                            &setprintlist, &showprintlist);
959   /* Turn on printing of static fields.  */
960   pascal_static_field_print = 1;
961
962 }